




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、宜春学院数学与计算机科学学院课程设计报告书课程名称:数据结构题 目:航空客运订票系统学生姓名:学 号:专业年级:信息与计算科学2011级指导老师:开题时间:2013-6-24 结束时间:2013-7-1目录一、设计题目3二、需求分析3概要设计31)抽象数据类型定义描述32)功能模块设计(如主程序模块设计)错 误!未定义书签。3)模块层次调用关系图6五、调试分析9六、 用户使用说明及测试结果11K录入航班信息(应该是航空公司录入的)112、实现查询功能:113、订票(余票充足)124、订票(余票不足)125、余票不足排队136、退票137、退出系统14一、设计题目航空客运订票的业务活动包括;查询
2、航线、客票预订和办理退票等。试设计一个航空客运订票 系统,以使上述业务可以借助计算机来完成。【基本要求】(1)每条航线所涉及的信息有:终点站名、航班名、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1, 2或3)以及等候替补的客户名单(包括姓名、所需票量);(2)作为示意系统,全部数据可以只放在内存中;(3)系统能实现的操作和功能如下: 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额; 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若 尚有余票,则为客户办理订票手续,输出
3、座位号;若已满员或余票额少于订票额,则 需重新询问客户要求。若需要,可登记排队候补; 承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足客户的要求,则为客户办理订票手续,否则依次询问其他排队候补的客户。二、需求分析1)运行环境(软、硬件环境)Winxp 32 位 visual C+6. 02)输入的形式和输入值的范围由航空公司输入航线情况并以单链表的形式存储在内存里面3)输出的形式描述通过客户的输入输出相应的内容4)功能描述用户通过本系统实现该航空公司的查询、订票(包括候补)、和退票功能5)测试数据终点站
4、航班飞机号飞行日期成员定额余票量zhengzhouIphone4s1Sunday33beijingNokia2Tuesday22tianjinASUS3Friday44三、概要设计1)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)一条航线包括了终点站、航班名、飞机号、飞行周日、成员定额、余票量、订票人员、候 补人员等信息,我们可以将航线看成一类,定义为一个类,而订票人员通用的属性是:姓名、订票张数和舱位等级,候补人员通用属性是姓名和订票张数,可以将订票人员和候补人员定 义为结构休,航线定义为一个类,类包括了两个结构体。具体定义如下:class transpor
5、tNode/M 线类节点friend class transport;private:char finish10;/FI 的地char flightname10/ 航班名int flightnum;/M班号int day;飞行日期int limitednum;/乘员限额int remainber;/余票struct booknodepublic:char name10;/ 乘客姓名int (ickcmum; 票数int rate;/舱位等级b40;struct sparenodepublic:char namc10;乘客姓名int ticketnum;/票数int m;记录排队等候的顾客的数虽
6、:s40;transportNodc *ncxt;2) 功能模块设计(如主程序模块设计)主程序中录入航线的信息,然后进入主菜单,再实现其他的功能,类transport中包括 了除去主菜单以外的所有的功能函数class transportpublic:(ransport();/无參构造函数构造头节点void recort();/记录航班信息void chest();实现根据输入的FI的地查询的功能void book();/实现旅客的订票功能void bouncc();实现退票功能private:transportNode *head;int menu();进入4菜单3)模块层次调用关系图四、详细
7、设计实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算 法。类和它的私有成员以及成员函数class tiansportNode/航线类节点fiiend class transpon;private:char finish 10;/目的地char flightiiame 10;/航班名mt flightnum;/航班号iiit day;/ 飞行口期mt linutednum;/ 乘 员限额mt wmambei;/余票stmct bookiiodepublic:char name10;/ 乘客姓名int ticketnumy/票数int rate;/舱位等级b40;stmc
8、t sparenodepublic:char name10;/ 乘客姓名int ticketnumy/票数mt m;/记录排队等候的顾客的数量s40;tianspoitNode *next;举出订票的成员函数实现:void tiansport:book()订票系统transpoit y;tiansportNode p;static mt i=0;静态变量存储上次订票信息static mtj=0;/静态变量存储上次排队信息static int k=l;p.sj.m=0;mt m=0;计数器,据此判断是否有符合目的地的票char c;transportNode *pre;pre=head->
9、next;char 10;cout«H* 欢迎进入订票系统 *"«endl;cout«"请输入您的姓名:”;cin»;cou« 请输入您的票数:”; cin»p.bi. ticketnum;cout«请输入您的舱位等级:”;cin»p.bi.rate;cou« 请输入您要订的航班号:”;cin»f;while (pre)if(sticmp(£pie->flightname)=0&&pre->reniamber>=p
10、.bi.ticketnum)cout«H恭喜!订票成功!li«endl«,®位号是:”;fbr(iiit z=O;z<p.bi.ticketnum;z+)cout«k+«” H;cout«endl:pre->remamber=pre->remamber-p. bi .ticketnum;i+;m+;cout«"回主菜单请按0,按任意键退出!”;ciii»c;if (c=O)retuin;else exit(0);if (pre->remainber<p. b i .
11、ticketnum)cout«MXj不起!余票不足!li«endl«M您要加入排序吗? (Y/N),; ciii»c;if(c=,Y,)cout«H请输入您的名字二ciii»:cout«*请输入您需要的票数:“;ciii»p .sj .ticketnum;cout«*'排队成功!如果有人退票,我们会尽快通知您!*'«endl;J卄;psjm卄;coutvv”回主菜单请按0,按任意键退出!”;ciii»c;if(c=,O,)return;else exi
12、t(O);elsepre=pre->next;if(pre=NULL)coutvu抱歉!没有对应的航班号o(-)o ”;cout«"回主菜单请按0,按任意键退出!“;ciii»c;if(c=O)retuin;else exit(O);五、调试分析包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经验体会。1、调试过程中出现了很多错误,刚开始的时候,我将订票人员看作一个类、将候补人 员看作一个类,将航线看作一个大类。而我将两个小类放进了大类中,想让小类当作大类的 成员。class transportNode/航线类节点这是一个类fiiend cl
13、ass transpon;private:char finish 10;/目的地char flightiiame 10;航班名mt flightnum;/航班兮iiit day;/飞行口期mt linutednum;/ 乘 员限额iiit wmambeT;/余票class booknode这里还有一个public:char name10;/乘客姓名mt ticketnumy/票数int rate;/舱位等级;class sparenode这里也有一个public:char name10;/乘客姓名int ticketnumy/票数mt m;/记录排队等候的顾客的数量;transportNode
14、 *next;但是总是不能成功,非常郁闷。于是我问了问老师,老师告诉我类是不能嵌套的!当时我就 晕了,原来不能嵌套啊,于是我将里面的小类改成了结构体,这样,很多问题就迎刃而解了 class tiansportNode/航线类节点fiiend class transpon;private:char finish 10;/目的地char flightiiame 10;航班名mt flightnum;/航班兮mt day"飞疔口期mt linutednum;/ 乘员限额iiit wmamber;/余票struct booknodepublic:char name 10;乘客姓名int ti
15、cketnum;/ 票数int rate;/舱位等级b40;struct sparenodepublic:char name 10;乘客姓名int ticketnum;/ 票数mt m#记录排队等候的顾客的数量s40;transpoilNode *next;2、在编程的时候很容易忽略一些边界条件,导致漏洞很多,比如设计主菜单的时候有1、2、3、4等选项,但是如果用户选择了其他的就会出现请输入您的选择:请输入您的选择:过亜番示出通订退退划按按擬目请请请袖欢迎进入主菜单通订退退询杳一也2 3 4 初按按拠 目请请请 过1:會袖欢迎进入主菜单过亜番示出通订退退划按按按目请请请I c< *c:C
16、+PROJECThaoleDebughaole.exe*H X*退出请按4*请输入您的选择:欢迎进入主菜单请输入您的选择:欢迎进入主菜单.lilt C; cout«H陷入死循环,我将主菜单的代码改成了: mt menu()* 欢迎进入主菜单 *H«endl«endl;cout«H*通过目的地查询请按1*n«endl;cout«H*订票请按2*H«endl;cout«H*退票请按3*H«endl;cout«H*退出请按其他键*n«endl;cout«H-«endl;c
17、out«HW输入您的选择:”;ciii»c;return c;这样就不会再陷入死循环了!时间复杂度的话,由于程序源代码中没有多重循环,所以时间复杂度都很小。总之,调试过程中 还是遇到了不少问题,不过都在同学和自己的努力中解决了。六、用户使用说明及测试结果详细列出每一步的操作说明。1、录入航班信息(应该是航空公司录入的)*C:C+PROJECThaoleDebughaole.exe*第丄个航班的信息、W录入航班信息第2个航班的信息、点:1:1期额 线&包万日限 线卷仃客 维飞飞乘 1A1A1A1AJA 请请请请请R> 期 星3< :第3个航班的信息、点:N
18、:2期额 线&包万日限 线卷仃客 维飞飞乘 1A1A1A1AJA 请请请请请单 菜 主A-井_ 点:A:3期额欢 线&包万日限* 线卷仃客- 维飞飞乘- JAJAJAJAJA 请请请请请*R>期星过亜番示岀通订退退划按按按目请请请2、实现查询功能:是客户的查询C< *C:C+PROJECThaoleDebughaole.exe* X<|:4迎 期额歎 日限 行客- 飞乘- 入入请请划按按按目请请请过亜番示岀通订退退n.1j0出退込下:A:3间 :t如名号时:4犍 地息ISS 的信维飞余任 :1目班的查听请 单 菜 主 回划按按按目请请请过亜番示岀通订退退请输入
19、您的选择:3、订票(余示充足)C< *C:C+PROJECThaoleDebughaole.exe*.1 S j U n : S0出退込下:A:3间 :t如名号时:4犍 地息ISS 的信维飞余任 :1目班的查听请 单 菜 主 回划按按按目请请请过亜番示岀通订退退请输入您的选择:2.、杯-欢迎进入订票系统请输入您的姓名:fanxiaoning 请输入您斷票数:2 请騎入您的舱位等级汽 遨金隔勢航磁号:AS% 回主葉单请按d按任意键退出?.4、订票(余票不足)请输入您的选择:2.、FF欢迎进入订票系统*请输入您的姓名:fanxiaoning 请输入您斷票数:2 请騎入您的舱位等级汽 遨金隔勢
20、航磁号:AS%回主葉单请按0,按任意键退出! 0袖欢迎进入主菜单请输入您的选择:2的的的过亜番示出通订退退划按按按目请请请姓票舱霸序 您您您您诗入 入入入入起加 请请请胄您g S n A i : on:2号a.1X 3隼一儿? <:3f th ? 名数位的祛吗才衽>N/¥欢迎进人订示系 统*5、余票不足排队C< *C:C+PROJECThaoleDebughaole.exe*门会尽快通知您? 宀欢迎进入主菜单过亜番示出通订退退划按按按目请请请请输人您的选慶:3、欢迎逬人退票糸统?请输入您要退票的目的地:t ianjin 请骗入您的飞食日期:4退禦成功,希望我们的服务
21、能让您满意,期待下次为您服务? 回圭菜单请按d按任意褪退出? 0“*欢迎进入主菜单*过亜番示出通订退退划按按按目请请请请输入您的选择二6、退票咳迎逬入主菜单划按按按目请请请过亜番示出通订退退请输人您的选慶:3、欢迎逬人退票糸统?请输入您要退票的目的地:t ianjin 请骗入您的飞食日期:4退禦成功,希望我们的服务能让您满意,期待下次为您服务? 回圭菜单请按d按任意褪退出? 0“*欢迎进入主菜单*过亜番示出通订退退划按按按目请请请请输八您的选扌手谓输入要查询的目的地:dengfeng 摄鬆復亩对应的航班?返回主粟单请按d按其他键退出:7、退出系统C< *C:C+PROJECThaoleD
22、ebughaole.exe*邈器满意'期待下次为您朋务*欢迎进入主菜单*过亜番示出通订退退划按按按目请请请请触您的选扌奔1谓输入要查询的目的地:dengfeng箍菽神率对应的航班?返回主菓单请按0,按其他犍退岀:0欢迎进入主菜单.过亜番示出通订退退划按按按目请请请请物入您的选择:4.谢谢光临"八一八"E拜拜Press any key to continue附录:程序设计源代码#iiiclude <iostieam.h>#iiiclude <strmg.h>include <STDLLB.H>class transport;mt m
23、enu();class tiansportNode/航线类节点fiiend class transport; private:char finish 10;/目的地 chai flightiiame 10;航班名 mt flightnum;/航班兮 iiit day;/飞行口期 mt linutednum;/ 乘 员限额 mt 代 mambei;/余票 struct bookiiodepublic:char name10;/乘客姓名 mt ticketnumy/票数 int rate;/舱位等级 b40;stmct sparenodepublic:char name10;/乘客姓名int ti
24、cketnumy/票数mt 记录排队等候的顾客的数量s40;tianspoitNode *next;;class transport public:tnmsport。;/无參构造函数构造头节点void recort();/i己录航班信息void chestQ;/实现根据输入的目的地查询的功能void book();/实现旅客的订票功能void bounceQ;/实现退票功能 private:tianspoilNode *head;;tiaiispoit: transport()head=new tianspoitNode; head->next=NULL;void tiansport:c
25、hestQ/实现查询功能chaz10;/输入的地址mt m=0;计数器,判断是否有符合条件的航班char q;cout«»请输入要査询的目的地:”;cin»a;transportNode *pie;pre=head->next;while (pre)if(sticmp(a,pie->finish)=O)m+;cout«H恭喜!查到了,航班信息如F:"«endl; cout«H航班名:,«pre->flightname«endl;cout«H航班号:H«pre->
26、flightnum«endl;cout«H飞行时间:,«pre->day«endl;cout«H余票:H«pre->lmiitednum«endl;pre=pie->next;if (!m)cout«Ifffi歉!没有对应的航班! H«endl;cout«"返回主菜单请按0,按其他键退出:“<<endl; ciii»q;if (q='OJretuin;else exit(0);elsecout«"回主菜单请按0,按任意
27、键退出!”;ciii»q;if(q=O)retuin;void tiansport: :book()/订票系统transpoil y;transportNode p;static mt i=0;静态变量存储上次订票信息static mtj=0;/静态变量存储上次排队信息static int k=l;p.sj.m=0;mt m=0;计数器,据此判断是否有符合目的地的票char c;transportNode *pie;pre=head->next;char 10;cout«H* 欢迎进入订票系统 *M«endl;cout«"请输入您的姓名:
28、“;cin»;cou« 请输入您的票数:“;cin»p.bi.ticketnum;cout«H请输入您的舱位等级:“;cin»p.bi.rate;cou« 请输入您要订的航班号:”;cin»f;while (pie)if(sticmp(fpre->flightname)=0&&pre->reniamber>=p.bi.ticketnum) cout«H恭喜!订票成功rvvendiy 座位号是:f,;fbr(iiit z=0;z<p.b i. ticketnu
29、m;z+)cout«k+<<” H;cout«endl:pre->remamber=pre->remamber-p.bi.ticketnum:i+;m+;cout«"回主菜单请按0,按任意键退出!”;ciii»c;if (c='0l)return;else exit(0);if (pre->remainber<p. b i .ticketnum)cout«HI不起!余票不足!H«endl«H您要加入排序吗? (Y/N),; ciii»c;if(c=,Y,)cou
30、tw请输入您的名字小; ciii»;cout«'*请输入您需要的票数:”;ciii»p.sj .ticketnum;cout«*'排队成功!如果有人退票,我们会尽快通知您!"«endl;J卄; psjm卄;cout«*'回主菜单请按0,按任意键退出!”; ciii»c;if(c=,0,)return;else exit(0);elsepre=pre->next;iif(pre=NULL)cout«"抱歉!没有对应的航班号o(-)o ”;cout
31、171;"回主菜单请按0,按任意键退出!”; ciii»c;if(c=O)retuin;else exit(O);void tiansport:bounceQ/i票实现函数transport a;tiansportNode b;char c;mt i=0;iiit x;cout«“欢迎进入退票系统! “;cou« 请输入您要退票的目的地:”;cou« 请输入您的飞行日期:”;cin»b.dav:J zcoutvv”请输入您的退票张数:”;ciii»x;while (x>=b.si.ticketnum&&i<b.si.m)cout«f退票数满足候补客户需求蔦 x-=b.si.ticketnum; i+;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储设备租赁合同协议书
- 人工智能技术应用研发合作协议
- 钢筋焊接施工承包合同
- 工程承包合同单价合同
- 企业信息化战略规划与实施
- 工厂场地租赁合同
- 电子商务购销合同
- 数据安全与信息保密服务协议
- 血液(第二课时)课件2024-2025学年北师大版生物七年级下册
- 关于调整办公环境的申请通知
- 信息科学与技术导论完整版课件全套ppt教学教程电子讲义电子教案
- 专业销售技巧之5-成交篇
- 课题成果要报格式和要求
- 血液透析试题(附答案)
- 主要河流南、北方河流的不同特征主要湖泊
- 行进间接单手低手投篮说课稿
- 寺院管理框架结构图PPT课件
- 单考单招数学公式总结
- 三打白骨精英文话剧剧本(原创)
- 2019第五版新版PFMEA 注塑实例
- 李雁鸣循环理论
评论
0/150
提交评论