数据结构.航空客运订票系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《数据结构》课程设计报告书题目:航空客运订票系统专业:班级:学号:姓名:完成时间:一、需求分析1.1问题描述设计一个航空客运订票系统,为乘客提供各种航空客运信息服务。1.2基本要求每条航线所涉及的信息有:终点站名、航班号、飞机号、星期几飞行、乘员定额、余票量、订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。已订票客户和预订票客户名单可分别由线性表linklist和队列linkqueue来实现。为了插入和删除方便,两者皆采用链表作为存储结构。系统需实现的操作和功能如下。(1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票量。(2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。若需要,可登记排队候补。(3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若退票能满足他人要求,则为他办理订票手续,否则依次询问其他排队候补的客户。二、概要设计1.1链表的抽象数据类型定义ADTListData:D={ai|ai∈ElemtSet,i=1,2,…,n,n≥0}Relation:R={ai-1,ai|ai-1,ai∈D,i=2,…,n}Operation:airline*find_fin()//根据客户提出的终点站名输出航线信息airline*find_air()//根据客户提出的航班号查询航班信息airline*find_plane()//根据客户提出的飞机号查询航班信息airline*find_date()//根据客户提出的飞行日期查询航班信息voidsearch()//根据客户提出的要求输出航线信息voidlist()//全部航线的信息voidbooklist()//订票客户名单linklist*addlink(linklist*,int,char,int)//增加订票的客户信息voidsort_ticket()//按剩余票数排序endADT1.2队列的抽象数据类型定义ADTQueueData:D={ai|ai∈ElemtSet,i=1,2,…,n,n≥0}Relation:R={ai-1,ai|ai-1,ai∈D,i=2,…,n}Operation:linkqueueplusqueue(linkqueue,char,int)//增加排队等候的客户名单endADT2、本程序包含三个模块(1)主程序模块:voidmain(){初始化;Do{输入指令;处理指令;}while(指令!=”退出”);}(2)已买票的乘客的链表模块——实行对买票乘客信息的管理(3)排队买票乘客的队列模快——实行对排队买票乘客信息的管理3、各模块之间的调用关系三、详细设计1、为简化问题,本系统假设只有五条航线#defineMAX5//定义航线量的最大值2、客户的存储信息:结点中保存的信息包括姓名,订票量,舱位等级typedefstructbook{charname[10];//客户姓名intamount;//订票量intlevel;//舱位等级book*next;}linklist;3、航班的存储信息:结点中保存的信息包括终点站名,航班号,飞机号,飞行日期,乘员定额,余票量。structairline{charfin_name[10];//终点站名charair_name[10];//航班号charplane_name[10];//飞机号chardate[10];//飞行日期main()guide()list()search()booklist()return_ticket()order()wait()addlinkr()+plusqueue()find_air()find_fin()find_date()find_plane()more()Insertline()intticket_amount;//乘员定额intticket_left;//余票量linklist*book;linkqueuewait;}linkinfo;为了方便调用乘员的信息和排队等候的客户信息,设置指针分别指向乘员名单和等候替补的客户名单。4、根据客户提出的要求查询航班信息structairline*find_fin()//根据客户提出的终点站名输出航线信息{structairline*info;charname[10];inti=0;info=start;cout请输入终点站名:;cinname;while(i=MAX){if(strcmp(name,info-fin_name)){info++;i++;}elsebreak;}if(iMAX)cout对不起,该航线未找到!\n;else{cout终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n;show(info);}return0;}按照输入的终点站名从第一条航线开始依次比较对应的链表结点存储的信息(info-fin_name),若有相同的则输出该条航线的信息,若没有则返回。structairline*find_air()//根据客户提出的航班号查询航班信息{structairline*info;charnumber[10];inti=0;info=start;cout请输入航班号:;cinnumber;while(i=MAX){if(strcmp(number,info-air_name)){info++;i++;}else{returninfo;}}cout对不起,该航线未找到\n;return0;}structairline*find_plane()//根据客户提出的飞机号查询航班信息{structairline*info;chara[10];inti=0;info=start;cout请输入飞机号:;cin.getline(a,10);while(i=MAX){if(strcmp(a,info-plane_name)){info++;i++;}elsereturninfo;}cout对不起,该航线未找到\n;return0;}structairline*find_date()//根据客户提出的飞行日期查询航班信息{structairline*info;chara[10];inti;info=start;cout请输入飞行日期:;cin.getline(a,10);{if(strcmp(a,info-date)){info++;i++;}elsereturninfo;}cout对不起,该航线未找到\n;return0;}5、办理订票业务voidorder()//办理订票业务{structairline*info;charname[10];intamount,level;info=start;intflag=0;inti;cout请输入查询航班的方式:\n;选择航线查找方式查找航线;cout请输入你订票所需要的数量:;cinamount;if(票数满足)将客户信息添加到已定票客户名单;else若满员或余票额少于订票额,询问客户是否需要进行排队等候}根据客户提出的要求先找到航班(search()),再根据客户的订票量与结点中所存储的信息(info-ticket_amount)比较,符合要求,则进行订票,询问客户的姓名,舱位等级,在订票乘员名单域(addlink())中添加客户信息,得到该客户的座位号后,该航线余票量(info-ticket_left)应为之前的余票量减去该客户的订票量。6、办理退票业务voidreturn_ticket()//退票{structairline*info;node*t,*back,*m,*n;intlevel;linklist*p1,*p2,*head;charname[10];intflag=0;inti;cout请输入查询航班的方式:\n;选择航线查找方式查找航线;head=info-book;p1=head;cout请输入你的姓名(退票客户):;cinname;while(p1){if(!strcmp(name,p1-name))break;p2=p1;p1=p1-next;}if(没找到该客户的信息L){cout对不起,你没有订过票!\n;return;}//未找到该订票客户,退出else//若信息查询成功{删除订票客户名单该订票客户的信息}info-book=head;//将航线名单域指向订票单链表的头指针m=(info-wait).front;//*m指向排队等候名单队列的头结点n=(info-wait).rear;//*n指向排队等候名单队列的尾结点t=m;//*t为当前满点条件的排队候补名单域while(t){if(满足条件者为头结点){为在头结点存储的信息对应的客户订票}back=t;t=t-next;if(满足条件者不为头结点){为满足条件的客户订票}if(排队等候的客户名单里没有信息)break;}}根据客户提出的要求先找到航班(search()),再根据客户的姓名与结点中所存储的信息(info-name)比较,符合要求,则进行退票,在订票乘员名单域(addlink())中删除客户信息,该航线余票量(info-ticket_left)应为之前的余票量加上该客户的订票量。再在排队等候的客户名单队列(queue())里寻找符合要求的客户(info-ticket_left=info-wait.front-amount),进行订票。四、运行与测试1、运行程序,显示菜单,见图12、选择“1”浏览航线信息,见图23、选择“2”浏览已订票客户信息,见图34、选择“3”查询航线,见图45、选择“4”办理订票业务,见图56、选择“5”办理退票业务,见图67、选择“6”查看剩余票数并排序。见图78、选择“0”退出程序。五、总结与体会课程设计是教学中的一个重要环节,对于我们学生来说是一次不可多得的锻炼机会。通过这次的课程设计,我们不仅可以系统地复习、巩固课程的知识,而且还可以学到如何把书本上的知识运用于解决实际问题中来。通过这学期的学习,我认为要学好数据结构这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固自我的知识。通过上机实验,我们能对数据结构更加深入了解,并且能够发现平时在书面作业中比较容易令人忽略的细节问题。要做出一个具体问题的解法,需要的不仅仅是老师灌输给我们的知识,在探索的过程中,我们会自觉地去寻找、关注相关方面的消息和知识。所以说,这也是我们自身不断积累知识的过程。在这次的数据结构课程设计过程中,我发现之前学过的C++知识是学习数据结构的基础,之前的C++学习有些薄弱,对这门课程有了一定的影响,还是要在假期的时候再巩固一下。未来的两年多,还有很多的专业课要学习,知识本来就是相通的,特别是计算机编程中的各种语言,我应该要好好这些学过的知识真正变成自己的知识,才能为以后的学习打好基础。六、附源程序#includeiostream#includecmath#includecstring#includecstdlib#includecstdio#defineMAX5//定义航线量的最大值usingnamespacestd;typedefstructbook{charname[10];//客户姓名intamount;//订票量intlevel;//舱位等级book*next;}linklist;typedefstructwait{charname[10];//姓名intamount;//所需票数wait*next;}node,*ptr;typedefstructque

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功