1、武汉长江工商学院数据结构课程设计报告武汉长江工商学院计算机科学与技术系数据结构课程设计项目名称: 航空客运订票系统 学生姓名: 别尔得汉.哈德开西 学 号: 1011028319 班 级: 11801 指导教师: 刘莹 胡成松 2013年 1月 1日1.需求分析本订票系统能够实现全部航线信息的录入功能、订票客户信息的查询功能、订票功能和退票功能。具体分析如下:1)航班信息的录入功能航班信息的录入功能包含:终点站名、航班号、飞机号、 飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包姓名、所需票量)。2)订票客户信息的查询功能订票客户信息的查询
2、功能:根据客户提供的终点站名进行查询,并且可以输出以下信息:航班号、飞机号、飞行日期和余票量。订票功能订票功能:根据客户提出的要求(航班号、订票数量)查询该航班票额情况,若尚有余票,则为客户办理订票手续;若已满员或余票额少于定票额,则询问客户是否愿意排队等候,若愿意,系统则自动登记排队候补。退票功能退票功能:根据客户提供的情况(航班、姓名),询问退票张数,然后为客户办理退票手续。接着系统自动查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。具体功能模块图如图1-1所示, 退出图1-1航空客运订票系统功能模块图2.数
3、据结构设计及用法说明本系统定义了三个结构体,一个表示已定票客户名单,一个表示等候替补的客户名单,还有一个为航班信息。同时在结构体之后还定义了一个单链表。在已定票客户名单中,name1存放客户姓名,reserve表示订票量,具体如下:typedef struct /已经订票的客户名单 char name120; /客户姓名 int reserve; /定票量name;在等候替补的客户名单中,name数组用来存放等候客户姓名,necessary存放所需票量的数量,具体如下:typedef struct /等候替补的客户名单 char name20; /客户姓名 int necessary20; /
4、所需票量wai;在航班信息当中,destination表示终点站名,flight表示航班号,num为飞机号,time表示飞行日期,sum表示乘员定额,odd表示余票量,waitno表示已经有的候票客户人数;同时还定义了订票客户数组name namelist50、以及候票客户数组wai wait50;具体如下:struct airline /航班信息, char destinationmaxsize; /终点站名 char flight20; /航班号 int num; /飞机号 char time; /飞行日期(星期几) int sum; /乘员定额 int odd; /余票量 name na
5、melist50;/订票客户数组 wai wait50;/候票客户数组 int waitno;/已经有的候票客户人数airplane;3 详细设计和编码3.1 查询模块进入订票系统,此时有四个功能模块供用户选择,此时是查询功能,这是按目的地查询,根据用户所提供要到的目的地,当所提供目的地与已经录入的航班信息所录入的终点站名相同时,查找成功同时显示所查询的航班的信息,当查找失败是,系统会提示用户输入有误,并要重新查询。图3-1查询功能流程图3.2 订票模块进入订票模块的时候,系统提示输入终点站名,客户姓名和所定票量,当用户要订的票数小于所在航班的余票数时,直接给用户订票,并提示订票成功。当用户要
6、订的票数大于所在航班的余票数时,系统会给出提示,询问用户目前余票量不足,是否进行候补,如果用户选择候补时,就先把现有的票订下,并保存在已订票客户中,剩下的没有订的票就保存在候补客户中。若没有找到对应的航班号,提示航班号错误,重新输入。图3-2订票模块流程图3.3 退票模块进入退票模块时,系统会先让用户输入航班号,并利用同样的查找思路对航班号进行查找,查找失败则提示没有您要找的航班号,查找成功时,然后输入姓名,利用同样的查找方法,查找失败则提示没有您要找的姓名,查找成功则输入要退票的张数,当信息都输入正确时,系统会提示退票成功。图3-3退票模块流程图4.实验结果该系统包括对航班信息的录入crea
7、tlist(linklist *l),航班信息的查询seek(linklist *l) ,订票功能管理booking(linklist *l) ,以及退票功能模块cancel(linklist *l) ,具体如下:4.1航班信息录入当用户选择1.录入航班信息时,系统会提示用户输入终点站名、航班号、飞机号、飞行日期,同时余票量也是手动输入,并且在输入完成后会显示乘员定额,如图4-1所示:图4-1航班信息录入图4.2航班信息查询根据用户提供的站名进行查找,当查找失败的时候提示用户该航班不存在,否则,输出航班号、飞机号、飞行日期,以及余票量,如图4-2 图4-2查询功能模块图4.3订票模块当用户选择
8、3.订票功能管理时,系统提示用户输入终点站,姓名、所定票量,该功能是根据终点站名查找订票航班,当订票数大于余票数时,系统会询问用户是否进入候补状态,询问是否排队等候,当有剩余票时,提示订票成功,如图4-4 图4-3订票功能模块图图4-4订票功能模块图4.4退票管理该功能主要是通过查找要退票的航班,查找到已定客户名单和其详细信息,实现了对于用户已定票数以及用户名的删除,当删除成功的时候,提示用户删除失败,如图4-5图4-5退票功能模块图5.体会航空客运订票系统是对于航空公司订票系统的一种小型模拟,它包括对航班信息的录入,客户信息的查询,订票功能管理,以及取消订票这四个功能模块。这是继开学来之后第
9、二门课程设计,当然在这之中还是有遇到很多困难。在做第一门学生信息管理系统的时候,我对于画流程图以及对算法的描述的时候,总是不简洁,而且重点也没说到,因此,在这次做课程设计的时候,对于画流程图和对算法的描述分析格外细心。不仅仅如此,这次的课程设计题目蕴含了对系统功能分析,即该系统包含哪些功能,怎么去实现它,以及对于这学期所需知识的一个总结。通过这次课程设计,让我对于结构体的定义,单链表的定义、使用,以及循环语句的使用有了更深入的了解,同时对于做课程设计的第一步有了全新的认识,只要能将所需知识更好使用就可以做到想做的东西。6.参考文献1雷于生,胡成松.C语言程序设计.北京:高等教育出版社,2009
10、2严蔚敏,吴伟江。数据结构。北京:清华大学出版社,19973谭浩强编著.C语言程序设计.北京:清华大学出版社,19914谭浩强,张基温,唐永炎编著.C语言程序设计教程.北京:高等教育出版社,19925黄扬铭.数据结构.北京:科学出版社,20017.源代码清单#include#include#include#include#define maxsize 50typedef struct /已经订票的客户名单 char name120; /客户姓名 int reserve; /定票量name;typedef struct /等候替补的客户名单 char name20; /客户姓名 int nece
11、ssary; /所需票量wai;struct airline /航班信息, char destinationmaxsize; /终点站名 char flight20; /航班号 int num; /飞机号 char time; /飞行日期(星期几) int sum; /乘员定额 int odd; /余票量 name namelist50;/订票客户数组 wai wait50;/候票客户数组 int waitno;/已经有的候票客户人数airplane;typedef airline elemtype;typedef struct lnode/建立单链表 elemtype data; struc
12、t lnode *next;linklist;void creatlist(linklist *&l);void seek(linklist *l);void booking(linklist *l);void cancel(linklist *&l);/*-主菜单-*/int menu() int y; coutt-endl; coutt-航空客运订票系统-endl; coutnnttt1.录 入 航 班 信 息endl; coutnnttt2.查 询 航 班 信 息endl; coutnnttt3.订 票 功 能 管 理endl; coutnnttt4.退 票 办 理endl; coutn
13、nttt0.退 出endl; coutnt -endl; coutnt -endl; do couty; while(y4); return y;/*-尾插法建表-*/void creatlist(linklist *&l) int i,m,n,j; linklist *s,*r; l=(linklist*)malloc(sizeof(linklist);/创建头结点 r=l; /r始终指向尾结点,开始时指向头结点 cout请输入航班数目:m; cout请输入航班信息endl; for(i=0;idata.waitno=0;/侯票的人数默认为0 couts-data.destination;
14、couts-data.flight; couts-data.num; couts-data.time; couts-data.odd; coutn; /s-data.sum=0; for(j=0;jn;j+) couts-data.namelistj.name1; couts-data.namelistj.reserve; s-data.sum=s-data.namelistj.reserve;/修改航班的已订票客户人数 cout乘员定额: data.sum; r-next=s; r=s; r-next=NULL;/*-按终点站名查找-*/void seek(linklist *l) link
15、list *p=l-next;/p指向第1个数据结点 char xmaxsize; coutx; while(p!=NULL&strcmp(p-data.destination,x)!=0) /当查询的终点站名不存在 p=p-next; /i+; if(p=NULL) cout该航班不存在!endl; else cout该航班信息如下:endl; cout航班号为: data.flightendl; /输出航班号 cout飞机号为: data.numendl; /输出飞机号 cout飞行日期为: data.timeendl; /显示飞行日期 cout余票量为: data.oddnext; /p
16、指向第一个数据元素 char d50,m20,t;int ticket,j=0; cout请输入终点站名: d; cout您的姓名:m; cout您所定票量: ticket; while(p!=NULL&strcmp(p-data.destination,d)!=0)/根据终点站名查找订票航班 p=p-next; if(p) if(p-data.oddticket) /当余票量不足,询问是否排队等候 coutsorry,余票量不足,您是否排队等候? Y/Nt; if(t=Y|t=y) while(p-data.waitj.necessary!=0) /判断候补乘客数组是否为空 j+; strc
17、py(p-data.waitj.name,m); /将输入的人的名字存放到候补乘客中 p-data.waitj.necessary=ticket-p-data.odd; /候补乘客所需票量等于乘客所需票量减去余票量 p-data.odd=0; else exit(0); else while(p-data.waitj.necessary!=0) /判断已定票客户订票量是否为0 j+; strcpy(p-data.waitj.name,m); p-data.waitj.necessary=ticket;/候补客户所需票量等于用于自己输入票量 p-data.odd-=ticket;/余票量等于先得
18、余票量减去客户订的票数 cout订票成功!next; char name220,time120,flight120; int i=0,j; cout请输入退票客户信息: endl; coutname2; couttime1; while(p!=NULL&strcmp(p-data.flight,flight1)!=0)/查找退票航班 p=p-next; if(p) while(strcmp(p-data.namelisti.name1,name2)/查找具体的退票乘客信息 i+; for(;!p-data.namelisti.name1;i+)/从该航班的已订票数组中删除此乘客 strcpy(
19、p-data.namelisti.name1,p-data.namelisti+1.name1); p-data.namelisti.reserve=p-data.namelisti+1.reserve;/删除前一名已定客户名单 p-data.odd+=p-data.sum;/修改余票量 if(p-data.wait0.name)/判断候票乘客数组是否为空 for(j=0;p-data.oddp-data.waitj.necessary;j+) strcpy(p-data.namelisti+j.name1,p-data.waitj.name);/将候补客户名单复制给已定客户名单 p-data.namelisti+j.reserve=p-data.waitj.necessary;/已定客户票量等于候补客户所需票量 cout退票成功!;void main() linklist *l; for(;) switch(menu() case 1:creatlist(l);break; case 2:seek(l);break; case 3:booking(l);break; case 4:cancel(l);break; case 5:exit(0); 数据结构课程设计成绩评定成绩评定: (百分制)指导教师签字: 检查时间:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1