数据结构课程设计航空订票系统+拯救问题Word下载.docx
- 文档编号:15332725
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:25
- 大小:726.01KB
数据结构课程设计航空订票系统+拯救问题Word下载.docx
《数据结构课程设计航空订票系统+拯救问题Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计航空订票系统+拯救问题Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
②按起点站查询;
③按终点站查询;
④按日期查询;
每种查询方式中,查询后输出如下信息:
航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。
(3)承办订票业务:
根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;
若已满员或余票少于订票额,则需重新询问客户要求。
若需要,可登记排队候补(加入询问顾客是否接受余票少于订票量时购买)。
(4)承办退票业务:
根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
2.设计
2.1设计思想
(1)数据结构设计
逻辑结构设计是采用线性表逻辑结构,存储结构设计是采用链表存储结构。
原因分析:
对于航班采用链式存储,便于对航班机进行动态增加、删除和查找。
对于每个航班结构体内部,除了设置必要的如航班号、航班机型等元素外,还必须创建已经买票的顾客链表头结点(存放已经购票的顾客信息)、等待买票的顾客头结点(存放排队买票的顾客信息)、三种舱位的位子号头结点(存放剩余的舱位座号,用指针连接)。
同时在已经买票的顾客结构体内部还必须建立所买票的座位号结构体头结点(存放该顾客飞机票的座位号)。
(2)算法设计
1模块划分及主要功能:
航空订票系统总共分为5个主功能模块,其中查询航班又分为了4个次一级的功能模块。
a.添加航班模块:
增加航班,此时函数通过每个舱位的票量生成座位号的链表并且链入航班的结构体里面。
b.删除航班模块:
根据要求删除航班链表中的航班,并且释放掉买票顾客链表,等待顾客链表和三条座位号链表。
c.查询航班模块:
根据要求显示所查询的航班信息。
d.订票模块:
根据顾客的要求进行订票,当票数不足是询问顾客是否购买;
当票数为0时询问顾客是否进入等待队列,买好票的顾客进入顾客队列并且链入座位号链表
e.退票模块:
根据顾客要求退票,然后将余票和等待的顾客要求进行比较,满足则讲票卖给等待的顾客,并将顾客链入已买票的顾客链表。
f.查票模块:
顾客输入姓名查看自己的买票或者等待信息。
2主程序流程图:
③主要算法思想:
航空订票系统中最主要的还是链表的综合操作,包括结点空间的申请链入、结点的动态增加和删除等等。
算法思想就是创建各个链表的结点指针,通过指针进行查找、删除、增加和修改。
2.2设计表示
(1)函数调用关系图
(2)函数接口规格说明
Flight*head;
//全局变量
//函数规格
voidmenu();
//航空订票系统功能菜单
voidListInitiate(Flight**);
//对航班头指针head的初始化函数
voidStartAir();
//在程序内部存储一组航班的函数
voidBookTicket();
//订票系统函数
voidReturnTicket();
//退票系统函数
voidAddAirline();
//增加航班线路函数
voidDeleteAieline();
//删除航班线路函数
voidSearchTicket();
//查询订票情况函数
voidSearchAirline();
//航空线路查询函数
voidSearchMenu();
//查询功能菜单函数
voidNumSearch();
//按航班号查询函数
voidStartPlaceSearch();
//按起点站查询函数
voidEndPlaceSearch();
//按终点站查询函数
voidDateSearch();
//按日期查询函数
2.3详细设计
(1)元素结构体
航班元素结构体:
包含航班号、航班机型、起飞机场、降落机场日期(星期几)、起飞
时间、降落时间、飞行时长、价格、乘员定额、余票量以及订票、
等待和座位号的头指针。
订票顾客结构体:
包含订票人姓名、订票数量、舱位等级以及所买票座位号头指针。
排队顾客结构体:
包含等待人姓名、等待的数量和舱位等级、是否接受票数少于订票
数量的标志位。
座位号结构体:
包含了座位号。
(2)主要功能函数伪代码
①voidBookTicket()//订票系统函数
{
输入订票的日期;
if(找到航班)输出航班信息
else提示航班不存在,做出选择
else
{
输入要订票的航班号、订票的数目、舱位等级
根据航班号和日期唯一确定航班,进入订票
根据舱位等级操作其对应的余票量
if(余票量为0)
询问是否进入等待买票队列
如果等待,输入姓名以及是否接受票数小于订票量时购买
进入等待买票排队
if(余票足够)
输入买票人姓名,根据票数在座位号链表里截取等数量的座位结点
成功订票输出座位号,并将其链入顾客结点
买票人信息进入买票顾客链表
if(余票少于买票量)
提示票量不足,是否购买
如果购买,则重新输入票数,进行购买
买票人信息进入买票顾客链表
}
②voidReturnTicket()//退票系统函数
输入退票人姓名、航班号、日期、舱位等级
通过航班号+日期唯一确定一个航班
if(未找到该航班)则输出未找到该航班
if(找到该航班)
{
由姓名找到该航班里的这个顾客信息
if(找到这个顾客)
将该顾客的座位链表按照升序插入到相应舱位的航班座位链表里面
修改相应舱位的飞机余票量
删除该顾客结点。
输出退票成功
查找该航班该舱位等级的等待顾客链表,从首元素结点开始比较票数
在等待买票的顾客链表不空或者余票不为0的情况下
if(余票数大于订票数)
对该等待各科进行补票,并链入座位链表
将该顾客从等待队列删除,链入买票顾客的链表尾部
修改余票,继续往后比较等待顾客的票数
if(余票数小于订票数)
if(等待顾客接受余票少于订票时订票)
将票全卖给等待的人,并创建新的买票顾客结点,写入信息并且链上座位
号,将结点链入买票顾客链表
修改等待买票顾客订票数的结点,结束
继续往后比较等待顾客的票数
}}}
③voidSearchTicket()//查询订票情况函数
输入姓名进行查找
从链表的第一个结点开始访问其买票和等待顾客链表
在买票链表里找到姓名则输出买票的航班信息以及座位号
在等待的链表里找到则输出还未买票、等待的舱位等级和票量
否则输出未找到订票信息
3.调试分析
(1)调试过程中遇到的问题:
对于买票后座位号的输出一开始用公式计算,所以导致在
几个人买完票后,如果1号票退票,但是后面的人是买不
到1号票的。
解决方法:
设置座位号的链表,买票结束后就将其座位号结点从总链表上截下链
入顾客结点,退票的时候将座位结点按照升序规则插入总链表。
编码的回顾与讨论分析:
航空订票系统总共有1500行左右的代码,但是实际上有
很多重复的代码,造成这个现象的原因是,一开始按照题目要求进行系统设计,但是在课设验收过程中不断的根据老师的要求从结构体开始改进,添加更多细化的功能函数(比如说座位号功能的实现、舱位等级的区分)等等,导致在修改代码的过程中造成代码的多余。
(2)算法的时间空间复杂度分析:
航空订票系统的空间复杂度分析最终是归结于其存存储结构—单链表。
增加和删除
的时间复杂度是O(n),其余的时间复杂度是O
(1)。
空间复杂度都为O
(1)。
4.用户手册
航班信息中航班号、价格、余票都是int型数据,输入时注意只能输入数字;
机票定额是指每种舱位的票量,而不是三种舱位总共的票数;
航空订票系统中航班可以由航班号和日期唯一确定;
程序中预先存储了一个航班,为了操作更加合理,可以事先进行航班的添加,在添加的过程中必须注意不同的航班其航班号和日期不能同时相同,这和实际情况是不符合的。
5.测试数据及测试结果
程序中存储的航班信息为:
航班号
机型
起飞机场
降落机场
日期
起飞时间
降落时间
飞行时长
1
K101
wuhan
beijing
Mon
7:
00
10:
3:
价格(头等舱/公务舱/经济舱)
定额
余票(头等舱/公务舱/经济舱)
15010050
30
303030
输入的增加航班是:
2
K202
nanjing
Sun
15:
16:
1:
1007045
50
505050
K303
shanghai
Wen
00:
200150130
80
808080
数据测试:
Ø
主功能菜单
程序中存储的航班信息查询
航班信息的增加
航班的删除
订票和排队买票
退票和重新买票时座位号的变换
退票和补票成功时的查询
6.源程序清单
本次程序是把程序写到一个CPP文件里面了,所以我把几个结构体和重要的函数展示一下
typedefstructCLI
charcustomers[10];
//订票顾客姓名
intBookTicketsNum;
//订票数量
structSEA*seater;
//座位号指针
intlevel;
//订票等级
structCLI*next1;
}Client;
//订票顾客结构体
typedefstructSUB
charwaiters[10];
//等待订票顾客姓名
intNeedTickets;
//定票量
//
intsign;
//标志位,判断顾客是否接受在票数不足的情况下订票
structSUB*next2;
}Substitute;
//等待订票顾客结构体
typede
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 航空 订票 系统 拯救 问题