订票系统课程设计报告书.doc_第1页
订票系统课程设计报告书.doc_第2页
订票系统课程设计报告书.doc_第3页
订票系统课程设计报告书.doc_第4页
订票系统课程设计报告书.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安徽建筑工业学院课 程 设 计 报 告 课程名称: 数据结构与算法课程设计 题 目: 订票系统 院 系: 数理系 专 业: 信息与计算数学 班 级: 一班 学 号: 12207210148 姓 名: 蔡会丽 时 间: 2013.6 目 录1问题描述12基本功能要求13概要设计13.1程序设计思路23.2存储结构设计23.3主要算法设计23.3.1链表数据类型的定义33.3.2本程序的结构33.4测试用例设计64详细设计原程序代码65调试分析206程序说明207经验和体会207.1经验207.2体会218程序结果219附 录27订票系统1问题描述设计一个模拟飞机订票系统,通过此系统可以录入、查询、修改航班情况,完成用户订票和退票功能,并且可以保存客户和航班的资料。2基本功能要求设计航班信息,订票信息的存储结构,设计程序完成如下功能:1.录入航班信息。 可以录入航班情况:航班号,起飞、抵达城市,座位总数,剩余座位数。(数据可以存储在一个数据文件txt中,采用线性表的链式结构、具体数据用户输入) 2.加载航班与客户信息。 可以自动加载保存在txt文件中的航班与客户的信息。3. 查询航班信息。 可以输入航班号,查询该航线的情况(起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况;4. 订票。 客户资料包括:姓名,证件号,订票数量及航班情况,座位号。订单要有订单号。用户输入要订票的航班号,如果该航班有余票,则订票成功,并记录客户的信息。 如果该航班已经无票,则订票失败。输出所有有余票的航班信息,提供用户可以选择的航班。5. 退票 删除退票用户的订票信息,相应的航班的余票数量增加1。6. 修改航班信息用户输入要修改的航班号,和要修改的内容,修改该航班的相应信息。7. 保存数据文件。把当前的航班信息,和用户信息分别保存在txt文件中。8. 输出所有客户信息。 按一定的格式输出用户的姓名,证件号码,订票数量及航班情况,座位号。9.输出所有航班信息。 按一定的格式输出所有的航班的航班号,起飞抵达城市,座位总数,剩余座位数。0. 退出系统3概要设计3.1程序设计说明图.主菜单1234567890录入航班的信息加载航班与客户信息。查询航班信息订票退票修改航班信 息保存数据文 件输出所有客户信息输出所有航班信息退出3.2程序设计思路.对于航班和用户分别定义不同的数据结构,并且采用线性表的链式结构进行存储。所用到的算法包括:链表的创建 ,增加,遍历,插入和删除。3.3存储结构设计由于航空公司的航班保持基本不变,所以应该采用顺序存储结构将各条航线的基本情况登陆在一张线性表上,按照终点站名有序排列。在客票预定这一环节里将出现两个客户名单:已定票客户名单和需定票客户名单。两客户名单可分别由线性表和队列实现。为查找方便,已定票客户的线性表应按姓名有序,同时为了插入和删除方便,应以链表作为存储结构。由于无法知道预约的人数,队列也应该以链表作为存储结构。 我们需要做的是建立一个可以插入和删除节点的链表,并能检索这个链表,在必要的时候将链表的内容保存到文件中。3.3主要算法设计3.3.1链表数据类型的定义:因为采用的逻辑结构是线性结构,存储结构是链式结构。/航线结构体typedef struct airline char line_num10;/航班号 char start_place20;/起飞地 char end_place20;/目的地 int total;/座位总数 int left;/剩余座位 struct airline *next;/下一个节点airline;/航线结构体的头结点typedef struct airlinehead int count; airline *next;airlinehead;/客户结构体typedef struct client char name20;/乘客姓名 char id10;/乘客证件号 char line_num;/航班号 int seat_num;/座位号 struct client *next;/下一个节点client;/客户结构体的头结点typedef struct clienthead int count; client *next;clienthead;3.3.2本程序的结构1)主程序模块:void main()初始化;向屏幕输出输入提示;选择输入要进行操作的菜单项(1,2,3,4,5,6,7,8,9,0);1、 输入录入的航班信息,输出航班信息录入成功。 2、加载航班与客户信息,加载成功。 3、查询航班信息,输出显示航班信息。 4、订票,输出订票成功 5、退票 ,输出退票成功。 6、修改航班信息,输出修改成功。 7、保存数据文件,输出保存成功。 8、输出所有客户信息,输出显示所有客户信息 。 9、输出所有航班信息,输出显示所有航班信息。 0、退出系统 ,退出界面。2)对航班的操作; airlinehead *import(int n,airlinehead *pheadline)/录入航班函数,n为所要录入航班的数量airline* query(airlinehead *phead)/查询航班情况 void display_line(airline *node)/输出一个航班节点的所有信息到屏幕上 void display_all_line(airlinehead *headline)/输出所有航班的所有信息到屏幕上 int change_line(airlinehead *headline)/修改航班的信息3) 对客户的操作void display_client(client *node=null)/输出一个客户节点的信息到屏幕void display_all_client(clienthead *headclient)/输出所有客户的信息到屏幕int bookticket(airlinehead *headline,clienthead *headclient)/订票int returnticket(airlinehead *headline,clienthead *headclient)/退票4) 对文件的操作 int savemessage(airlinehead *headline,clienthead *headclient)/保存航班和客户信息到相应的txt文件中int loadmessage(airlinehead *headline,clienthead *headclient)/加载保存在文件中的信息 5)函数模块之间的调用图6) 程序流程图3.4测试用例设计航班号起飞地目的地座位总数123ChinaAmerica30456BeijingShanghai30789JapanBeijing30101AustraliaBeijing50姓名证件号码航班蔡会丽2012123张长德2013456李毓芬2014789钱玉芬2015101单丹宇20161234详细设计原程序代码#include#includeusing namespace std;#include#includetypedef struct client char name20;/乘客名 char id10;/乘客证件号 char line_num10;/航班号 int seat_num;/座位号 struct client *next;/下一个结点client;typedef struct clienthead int count; client *next;clienthead;typedef struct airline char line_num10;/航班号 char start_place20;/起飞地 char end_place20;/目的地 int total;/座位总数 int left;/剩余座位 struct airline *next;/下一个结点airline;typedef struct airlinehead int count; airline *next;airlinehead;airlinehead *import(int n,airlinehead *pheadline)/录入航班函数,n为所要录入航班的数量; airline *temp=new airline; temp-next=NULL; pheadline-next=temp; pheadline-count=n; for(int i=0;in;i+) cout请输入第i+1temp-line_num; cout请输入第i+1temp-start_place; cout请输入第i+1temp-end_place; cout请输入第i+1temp-total; temp-left=temp-total; cout第i+1个航班成功录入.endl; if(inext=new airline; if(temp-next=NULL) cout分配内存失败next-next=NULL; temp=temp-next; return pheadline;airline* query(airlinehead *phead)/查询航班情况 airline *find=NULL; airline *temp;cout*endl;cout*1,按航线查询航班情况。*endl;cout2,按起飞抵达城市查询航班情况。 *endl;cout*endl;coutselect;coutendl;switch(select)case 1: coutline_num; temp=phead-next; while(temp) if(strcmp(temp-line_num,line_num)=0) find=temp; /displayline(find); return temp; break; else temp=temp-next; if(!temp) cout没有找到该航班的信息。endl; return NULL;break; case 2: char start_place20;/起飞地char end_place20;/目的地coutstart_place;coutend_place;/ airline *temp;temp=phead-next;while(temp) if(strcmp(temp-start_place,start_place)=0 & strcmp(temp-end_place,end_place)=0) find=temp;/return temp; break; temp=temp-next; if(!temp) cout没有找到该航班的信息。endl; return NULL; break; default: cout输入错误。endl; break;return find;void display_line(airline *node)/输出一个航班结点的所有信息到屏幕 if(node=NULL) cout参数为空,输出失败。endl; return; coutendl;cout航班号tt起飞地tt目的地tt座位总数t剩余座位tendl;coutline_numtt start_placett end_placett totalt leftt endl;void display_all_line(airlinehead *headline)/输出所有航班的信息到屏幕 coutnext;if(!node) cout当前没有航班信息endl; return;cout航班数目: countnext;int change_line(airlinehead *headline)/修改航班信息cout当前所有航班的信息为:next;while(temp) display_line(temp); temp=temp-next;coutendl;cout请选择你要进行的操作endl;cout1,增加航班。endl;cout2,删除航班。endl;cout3,修改当前航班的信息。select; cout3 | select1) cout输入错误。next=(airline。)malloc(sizeof(airline) temp-next=new airline; temp=temp-next;couttemp-line_num;couttemp-start_place;couttemp-end_place;couttemp-total;temp-left=temp-total;temp-next=NULL;headline-count+;cout增加成功。endl;break; case 2: coutline_num;airline *delline;delline=headline-next;while(delline) if(strcmp(delline-next-line_num,line_num)=0) airline *plink; plink=delline-next-next; / free(delline-next); delete delline-next; delline-next=plink;headline-count-; delline=delline-next;if(delline=0) cout没有找到输入的航班号。endl; return 0;break; case 3: coutline_num3;temp=headline-next;while(temp) if(strcmp(temp-next-line_num,line_num3)=0) cout请选择要修改的内容:endl; cout-1,座位总数。-endl; cout-2,起始地址。-endl; cout-3,目的地址。-next;if(temp=0) cout没有找到输入的航班号。endl;return 0;break; return 1;void display_client(client *node=NULL)/输出一个客户节点的信息到屏幕。 if(node=NULL)cout参数为空,输出失败。endl;return;coutendl;cout姓名tt证件号码t座号t航班ttendlendl;coutnamett idtt seat_numtt line_numtt next; if(!node) cout当前没有客户信息。next;void display_left_airline(airlinehead *headline)/输出未售完票的航班的信息。airline *node=headline-next;if(!node) cout当前没有航班。left!=node-total;node=node-next) display_line(node);int bookticket(airlinehead *headline,clienthead *headclient)/订票 / headclient-count=0;coutline_num;airline *temp;temp=headline-next;while(temp) if(strcmp(temp-line_num,line_num)=0) break; temp=temp-next;if(!temp) cout未找到该航班left=0) cout对不起,该航班票已经售完。endl; cout请选择其他合适的航班:;client *custom=new client;coutcustom-id;coutendl;coutcustom-name;coutseat_num=temp-total-temp-left+1;custom-next=NULL;strcpy(custom-line_num,line_num);/*client *clienttemp=NULL;clienttemp=headclient-next;if(clienttemp=NULL)/线性表为空表的时候 headclient-next=custom; temp-left-; headclient-count+; cout”订票成功,祝您旅途愉快。”next)/线性表不为空表时,寻找最后结点。 clienttemp-next=custom;temp-left-;headclient-count+;cout订票成功,祝您旅途愉快。left-;headclient-count+;custom-next=headclient-next;headclient-next=custom;cout订票成功,祝您旅途愉快。;return 1;int returnticket(airlinehead *headline,clienthead *headclient)/退票。coutid;airline *airlinetemp=headline-next;client *clienttemp=headclient-next;if(NULL=airlinetemp) cout当前没有航班信息。id,id)=0)/要删除的节点为第一个时 strcpy(line_num,clienttemp-line_num); headclient-next=clienttemp-next; delete clienttemp; while(airlinetemp)/修改对票客户所对应的航班的售票信息。 if(strcmp(line_num,airlinetemp-line_num)=0) airlinetemp-left+; break; airlinetemp=airlinetemp-next; coutnext)/要删除的节点不是第一个时if(strcmp(clienttemp-next-id,id)=0)strcpy(line_num,clienttemp-next-line_num);delnext=clienttemp-next-next;delete clienttemp-next;clienttemp-next=delnext;/while(airlinetemp)/修改对票客户所对应的航班的售票信息。 if(strcpy(line_num,airlinetemp-line_num)=0) airlinetemp-left+; break; airlinetemp=airlinetemp-next;cout退票成功,欢迎下次合作!endlnext;cout未找到该客户的信息。endl;return 0;int savemessage(airlinehead *headline,clienthead *headclient)/保存航班和客户的信息到相应的txt文件中。ofstream outline(airline.txt);if(!outline) cout航班信息文件打开失败。endl; return 0;cout正在保存航班信息endl;outlinecountnext;while(linetemp) outlineline_num start_place end_place total left next;outline.close(); cout航班信息保存成功endl;ofstream outclient(client.txt);if(!outclient) cout客户信息文件打开失败。endl; return 0;cout正在保存客户信息文件endl;outclientcountnext;while(clienttemp) outclientname id line_num seat_num next;outclient.close();cout客户信息保存成功。next=NULL;headclient-next=NULL;ifstream inair(airline.txt);if(!inair) cout航班文件不能打开,信息加载失败endl; return 0;cout正在加载航班信息headline-count;for(int i=0;icount;i+) airline *nodeline=new airline; inairnodeline-line_num nodeline-start_placenodeline-end_placenodeline-totalnodeline-left; nodeline-next=headline-next; headline-next=nodeline;inair.close();cout航班信息加载完毕endl;ifstream inclient(client.txt);if(!inclient) cout客户文件不能打开,信息加载失败endl; return 0;cout正在加载客户信息headclient-count;for(i=0;icount;i+) client *nodeline=new client; inclientnodeline-namenodeline-idnodeline-line_numnodeline-seat_num; nodeline-next=headclient-next; headclient-next=nodeline;inclient.close();cout客户信息加载完毕endl;return 1;void main_menu() cout*欢 迎 使 用 飞 机 售 票 系 统*endlendl; cout* 1录 入航 班 信 息 。* endlendl;cout* 2加 载航 班 信 息 。* endlendl;cout* 3查 询航 线 信 息 。* endlendl;cout* 4客 户 订 票 。* endlendl;cout* 5客 户 退 票 。* endlendl;cout* 6保 存 操 作 。* endlendl;cout* 7输出所有航班信息。* endlendl;cout* 8输出所有顾客信息。* endlendl;cout* 0退 出 系 统 * endlendl;cout*endlcount=0; headline-next=NULL; clienthead *headclient=new clienthead; headclient-count=0; headclient-next=NULL;while(1)main_menu();int n;coutn;coutendl;switch(n)case 1: int num; coutnum; coutendl; import(num,headline); coutendl; /display_all_1ine(headline); cout航班信息成功录入。; coutendlendl; break;case 2: loadmessage(headline,headclient); break;case 3: airline *find; find=query(headline); if(find) display_line(find); break;case 4: bookticket(headline,headclient); /display_all_cIient(headcIient); break;case 5: returnticket(headline,headclient); break;case 6: savemessage(headline,headclient); break;case 7: display_all_line(headline); break;case 8: display_all_client(headclient); break;case 0: exit(1); break;5调试分析 1、实际完成的情况说明(完成的功能) 完成了所有预设的功能,可以实现航班的录入、查询、修改,和客户的订票、退票,保存信息的功能。2、 程序的性能分析,包括时空分析; 时间复杂度分析:在订票和退票的函数中,都用到了链表的查询算法,时间复杂度为logn。 3、上机调试过程中出现的问题及其解决方案 调试过程中经常出现大量的语法小错误,像标点符号、大小写、0与o的相似处,虽然很小的问题,如果不仔细的话,就很难找出来,这培养了我写算法严谨、认真的态度。 还有就是逻辑错误,比如指针的声明和内存分配问题。 6程序说明1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论