航空客运订票系统课程设计数据结构分解.docx
- 文档编号:9812608
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:28
- 大小:590.92KB
航空客运订票系统课程设计数据结构分解.docx
《航空客运订票系统课程设计数据结构分解.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统课程设计数据结构分解.docx(28页珍藏版)》请在冰豆网上搜索。
航空客运订票系统课程设计数据结构分解
XXXXXXXXX
计算机技术系
项目名称:
航空客运订票系统
学生姓名:
XX
学号:
班级:
10801
指导教师:
年月日
1.系统需求分析
1.1问题分析
这次的课程设计是设计一个航空系统。
由于存储的数量较大且不固定,因此选择用链表来保存基本信息:
终点站名、航班号、飞机号、飞行时间、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。
由于在航线这个主链表上,每个航班上的已经订票名单这个链表和等候替补的名单这个链表队列,所以建立一个十字交叉链表,在纵行上开辟一个链表存储所有航班的基本信息,再在各个航班节点横向展开一个链表和一个链表队列,展开的链表存储已经订票的客户名单,展开的链表队列存储等候替补的客户名单。
同时,由于预约人数无法预计,队列也应以链表作存储结构。
系统主要实现的操作和功能是:
添加航线、查询航线、订票功能、退票功能。
要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。
1.2任务意义
飞机场每天要接受大量的订票退票服务,对于这些数量巨大的数据,需要一个专门的软件来进行管理和操作。
软件至少需要具备的基本功能包括:
接受订票,处理退票,查询航班信息等等。
面对这些实际问题,航空客运系统的制作无疑要全面的考察一个学生的知识及能力。
在全面理解客户的需求下面,来进行设计出最能够满足客户的程序出来,并且能够根据不同的要求来将其进行改动,最能考察到对代码活用的程度。
2.数据结构设计及用法说明
数据结构的存储结构,中间纵列,为各个航班的基本信息,用一链表存储,其中一个节点为一个航班,其中包括终点站名、航班号、飞机号、飞行时间、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。
横向是各个航班的情况,即从该指定的航班中用链表的形式横向存储这个航班的基本信息,纵向为已经订票了的客户信息和药等候替补的客户的信息,其中包括客户姓名和相应的需票量。
相应的存储结构如下
structPassenger
{
charname[20];
intbnum;//bnum记录某人买的票数
structPassenger*next;
};
typedefstructAir//记录飞机信息
{
intticket;//飞机票数
chardes[20];//des记录飞机的终点
charflight[8];//flight记录航班号
intnum;//记录飞机号
Passenger*wait;
Passenger*book;
Timetime;
structAir*next;
}AirPlane;
3.详细设计和编码
3.1.主菜单
进入主菜单,必须先录入航班信息,客户可以根据自己需要选择,选择自己想要的航班,然后进行一系列自己选择的操作,具体菜单流程图如下所示
图3-1主菜单功能模块图
3.2.录入航空信息
录入航空信息包括终点站名、航班号、飞机号、飞行时间、乘员定额,根据用户的需要选择航班,输出航班信息,如果可以再进行订票操作,录入航空信息的流程图如下
图3-2录入航空信息流程图
3.3输出航空信息
客户可以根据自己的需要选择是按目的地查询还是按航班查询,如果按航班查询,必须要知道航班号,如果按目的地查询,只需输入终点站,如果一个终点站有多个航班,客户可以根据自己的需要选择一个航班进行操作,具体流程图如下。
图3-3按航班输出信息的流程图
图3-4按目的输出航空信息的流程图
3.4订票
在客户订票前需要先查询航班是否存在,所以在订票的模块中会要求客户输入航班信息,再调用航班查询的函数,查询是否存在这个航班,如果存在这个航班,则客户可以订票,客户在订票的时候,如果所需票量超过剩余票数,则会提示客户是否需要排队候票,如果不排队候票,则选择要么重新输入所需票量,要么退出订票。
订票流程图如下
图3-5订票流程图
3.5退票
客户在退票操作时,也是要先输入是否存在那个航班,如果存在,就查询这个航班是否存在这个客户,如果不存在,就退票失败,如果存在,则可以退票,退票后,再查看是否满足候票数,如果满足则把票补给候票人,如果不满足,就继续排队候补。
退票流程图如下
图3-6退票流程图
4.实验结果
4.1菜单函数的功能测试
系统运行后就会自动显示菜单1.录入航班,2.查询航班,3.订票,4,退票,当用户选择相应的代号就进入相应的功能模块
图4-1菜单函数的截图
4.2录入函数的功能测试
进入当这个录入模块,用户需要先录入航班的信息,包括航班号,总的票数,目的地,起飞时间,和飞机号,当录入一个航班信息,会提示是否继续录入
图4-2录入航空信息的截图
4.3查询航班函数的功能测试
用户可以选择是按目的地查询信息或者是按航班查询信息,一个目的地可能有几个不同的航班,但是一个航班只能到一个目的地
图4-3查询航班的截图
4.4订票功能地测试
用户在订票时需要输入航班,然后再查询是否存在这个航班,如果存在,则可以订票,否则不能订票,在订票的时候如果余票足够,则可以成功订票,否则提示用户是否需要排队候补
如图4-4,订票成功可以将客户信息输出,图4-5,是余票不足,提示用户是否需要排队候补,图4-6,客户选择候补,则会将客户信息输出
图4-4订票成功的截图
图4-5余票不足的截图
图4-6候补成功的截图
4.5退票函数的功能测试
用户在退票的时候需要输入航班,查找这个航班是否存在,如果存在,再查看退票信息是否正确,输出客户信息,退票后查询这个航班的剩余票数是否变化,是否足够候补人所需要的票数图4-7是查询这个航班的客户信息,图4-8是找到要退票的客户且输出客户信息,图4-9退票后查询这个航班,是否退票成功
图4-7查询客户的截图
图4-8找到要退票的客户的信息
图4-9查询是否退票成功的截图
5.体会
这次课程设计我用链表设计的,我之前的想法是用一个结构体存储航班信息,再用一个结构体存储已经订票的客户信息,再用一个结构体存储候补的客户信息,然后在已经订票的客户信息中定义一个指针存储已经订票的客户的航班,在候补的客户中定义一个指针存储已经排队候补的客户的航班,用这个指针和航班信息联系起来,再进行操作,可是在退票中链表就出现问题了,只要有人候补,那么已经订票的客户信息就输不出来,好不容易把候补搞好了,可是订票模块就出现问题了,总的来说是结构的问题,所以我就重新写了,用了十字链表的思想,不过在退票后,把退票给候补的客户有问题,就没有写这个了。
这次课程设计写完后,我发现我对于指针是越来越糊涂了,原来在写作业的时候还有点清楚指针的指向,现在时越来越不清楚了。
所以在存储空间上总是出现问题,叫同学帮我改了指针的指向,才会好的,所以这次放假一定要把指针弄清楚,然后进一步完善这个程序。
致谢
感谢XX老师的耐心指导,感谢XXX老师的悉心教导,感谢XXX同学的帮助。
感谢在课程设计中对我帮助过得同学,谢谢你们对我的帮助,让我感受到到同学的友谊和老师对我的关爱
参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版).北京:
清华大学出版社,1997.
[2]刘大有,唐海鹰,等.数据结构.北京:
高等教育出版社,2001.
[3]黄扬铭.数据结构.北京:
科学出版社,2001.
[4]黄刘生.数据结构.北京:
科学经济出版社,2000.
附录:
源程序清单
#include
#include
#include
#include
#include
#include
structTime//定义飞机的起飞时间
{
charyear[8],month[8],day[8],hour[8],minute[8],second[8];
};
voidInputDate(Time&time)//输入飞机的起飞时间
{
cout<<"Pleaseinputthedate(yearmonthdayhourminute):
"< cin>>time.year>>time.month>>time.day>>time.hour>>time.minute>>time.second; } voidPrintDate(constTimetime)//输出飞机的起飞时间 { cout< < " < " < } structPassenger { charname[20]; intbnum;//bnum记录某人买的票数 structPassenger*next; }; voidPassengerCpy(Passenger*&d,Passenger*s) { strcpy(d->name,s->name); } voidPrintPassenger(constPassenger*p) { cout<<"*************************************"< cout<<"姓名订票量"< cout<<"*************************************"< cout< } typedefstructAir//记录飞机信息 { intticket;//飞机票数 chardes[20];//des记录飞机的终点 charflight[8];//flight记录航班号 intnum;//记录飞机号 Passenger*wait; Passenger*book; Timetime; structAir*next; }AirPlane; voidWaitticket(Passenger*&p)//输入候补乘客的信息 { Passenger*w=p; Passenger*s=newPassenger; cout<<"pleaseinputthepassenger: "; cin>>s->name; cout<<"pleaseinputtheticketthepassengerneedwait: "; cin>>s->bnum; } voidDisplayWait(Passenger*passenger)//输出要候补的乘客的信息 { Passenger*q=passenger->next; if(! q) return; while(q) { cout<<"NameBNum"< cout< : left)< q=q->next; } } intInputPassenger(Passenger*&passenger,AirPlane*flight)//输入订票的乘客的信息 { Passenger*p=passenger; Passenger*q=newPassenger; Passenger*s=flight->wait; Passenger*w; intchioce; cout<<"Pleaseinputthepassengername: "; cin>>q->name; cout<<"pleaseinputtheticketthepassengerneedbook: "; cin>>q->bnum; if(q->bnum>flight->ticket) { cout<<"现在航班中还有: "< "< if(flight->ticket) { cout<<"请选择: 1.将差票转为候补票2.只定剩余票3.取消订票"< cin>>chioce; if(chioce==1) { w=newPassenger; q->next=p->next; p->next=q; PassengerCpy(w,q); w->next=s->next; s->next=w; w->bnum=q->bnum-flight->ticket; q->bnum=flight->ticket; flight->ticket=0; } elseif(chioce==2) { q->next=p->next; p->next=q; q->bnum=flight->ticket; flight->ticket=0; } else returnNULL; } else { q->next=s->next; s->next=q; } } else { q->next=p->next; p->next=q; flight->ticket-=q->bnum; } } voidDisplayClient(Passenger*p)//输出已经订票的乘客信息 { Passenger*q=p->next; if(! q) return; while(q) { cout<<"NameBNum"< cout< : left)< q=q->next; } } voidCreatFlight(AirPlane*&flight)//创建一个空的结点 { AirPlane*s=newAirPlane; s->next=NULL; flight=s; Passenger*p=newPassenger; p->next=NULL; flight->book=p; Passenger*w=newPassenger; w->next=NULL; flight->wait=w; } AirPlane*Displayflight(AirPlane*flight,charf[])//按航线输出航班 { AirPlane*p=flight->next; intflag=0; while(p) { if(strcmp(p->flight,f)==0) { system("cls"); cout<<"**********************************************************"< cout<<"NumDestinationFlightTicketTime"< cout< : left)< < PrintDate(p->time); cout<<"\n**********************************************************"< cout<<"*****************************已定乘客*********************"< DisplayClient(p->book); cout<<"*****************************候补乘客*********************"< DisplayClient(p->wait); returnp; } p=p->next; } returnNULL; } voidDisplaydes(AirPlane*flight,chard[])//按目的地输出航班 { AirPlane*p=newAirPlane; p=flight; intflag=0; while(p) { if(strcmp(p->des,d)==0) { flag=1; cout<<"NumDestinationFlightTicketTime"< cout< : left)< < PrintDate(p->time); cout< } p=p->next; } if(flag==0) cout<<"Sorry! notfindtheinformation! "< } voidCreat(AirPlane*&flight)//录入航班 { AirPlane*p; AirPlane*s=flight; Passenger*b,*w; charch; do { p=newAirPlane; b=newPassenger; w=newPassenger; b->next=NULL; w->next=NULL; p->book=b; p->wait=w; system("cls"); cout<<"pleaseinputtheflight: "; cin>>p->flight; cout<<"pleaseinputtheallticketoftheflight: "; cin>>p->ticket; cout<<"pleaseinputthedestination: "; cin>>p->des; InputDate(p->time); cout<<"pleaseinputthenumberoftheairplane: "; cin>>p->num; cout<<"ifcontinue,pleasechoose('y'/'Y'),ifnot,pleaseinputchoose('N'/'n'): "< cin>>ch; system("pause"); p->next=s->next; s->next=p; }while(ch=='y'||ch=='Y'); } voidDisplay(AirPlane*flight)//输出航线 { intn; cout<<"1.按终点查询2.按航班查询"< cout<<"pleaseinputyourchoice: "; cin>>n; if(n==1) { chard[20]; cout<<"pleaseinputthedestinationyouwouldlookup: "< cin>>d; Displaydes(flight,d); } elseif(n==2) { cout<<"pleaseinputtheflight: "; charf[20]; cin>>f; Displayflight(flight,f); } else cout<<"inputiserror! "< system("pause>null"); } voidBook(AirPlane*&flight)//订票 { AirPlane*p=newAirPlane,*f=NULL; charline[20]; cout<<"pleaseinputtheflight: "; cin>>line; system("cls"); f=Displayflight(flight,line);//查找乘客要订的航班是否存在 if(f) { InputPassenger(f->book,f); Displayflight(flight,line); } else cout<<"Sorry! Notfindtheflight! "< } voidReturnTicket(AirPlane*&flight)//退票 { AirPlane*p=newAirPlane,*f=NULL; charline[20]; charname[20]; cout<<"pleaseinputtheflight: "; cin>>line; f=Displayflight(flight,line); if(f) { Passenger*p=f->book->next; Passenger*q=f->book; intflag=0; cout<<"Pleaseinputthepassengernameyouneedback: "; cin>>name; while(p) { if(! strcmp(p->name,name)) { flag=1; break; } p=p->next; q=q->next; } if(flag==1) { PrintPassenger(p); intvote; do { cout<<"Pleaseinputthevoteyouneedback: "; cin>>vote; if(vote>p->bnum) cout<<"最大退票量为: "< } while(vote>p->bnum); if(vot
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航空 客运 订票 系统 课程设计 数据结构 分解