孟永吉1071304115航空售票系统.docx
- 文档编号:8220823
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:24
- 大小:299.40KB
孟永吉1071304115航空售票系统.docx
《孟永吉1071304115航空售票系统.docx》由会员分享,可在线阅读,更多相关《孟永吉1071304115航空售票系统.docx(24页珍藏版)》请在冰豆网上搜索。
孟永吉1071304115航空售票系统
目录
1需求分析1
2概要设计2
3详细设计3
3.1头文件Ticket.h,:
4
3.2头文件Ticket.cpp,:
19
4调试与操作说明20
总结25
致谢26
参考文献27
1需求分析
本次课程设计利用C++语言来编写,其运行平台为VisualC++。
1.问题描述:
航空客运订票业务活动包括:
查询航线、客票预定和办理退票等。
设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
2.基本要求:
任务:
通过此系统可以实现如下功能:
(1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
(2)查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
(3)可以输入起飞抵达城市,查询飞机航班情况;
(4)订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
(5)退票:
可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
(6)修改航班信息:
当航班信息改变可以修改航班数据文件。
3.查询能实现的操作和功能如下:
查询航线:
根据旅客提出的终点站名输出下列信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。
若需要,可登记排队候补;
承办退票业务:
根据客户的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队,首先询问排在第一的客户,若所退票数满足他的要求,则为他办理订票手续,否则一次询问其他排队候补的客户。
2概要设计
本次数据结构课程设计所制作的航空客运订票系统主要运用了链式存储结构来实现。
我们知道线性表以及队列的存储结构主要用到了链式结构存储,因而此系统也应考虑使用这两种存储方式。
在航班信息方面,要对航班进行添加、删除、查询等操作。
由于链表的优势就在于便于进行添加、删除和查找,因此有关航班信息方面的部分可以由链表来实现。
但是为了更便于添加和删除,因此为链表设置了首、尾指针。
而对于订票、退票来说,其中要讲一个先来后到的道理。
基于这一点的要求,队列的存储方式再合适不过了,其“先进先出”的特点恰恰可以满足订票、退票的要求。
在结构定义方面,本系统定义了四个结构,分别用来储存航班信息、乘客信息、替补乘客信息以及结点信息。
而在航班信息定义中,分别将乘客信息、替补乘客信息引入其中,以供储存乘客信息和替补乘客信息。
根据本系统中的功能以及所定义的数据结构,特编写如下函数:
1.FlightInsert()//添加航班信息
2.FlightSearch()//查询航班信息
3.FlightRework()//修改航班信息
4.FlightBuyticket()//订票
5.FlightCancelticket()//退票
6.Buyticket(PFlightq,intTicket_Amount)//利用队列买票
7.Buyreplace(PFlightq,intTicket_Amount,intn)//利用队列进行替补买票
8.MainMenu()//主菜单
9.Main()//主函数
各个函数间的关系如下:
图2.1函数关系图
3详细设计
本航空客运售票系统分为两个文件:
一个是头文件Ticket.h,用来存放系统中数据结构的结构体,以及所要到的方法及函数。
另一个是C++文件Ticket.cpp.,本文件主要是本系统的主函数,其中调用头文件,来实现系统的功能。
具体实现如下:
3.1头文件Ticket.h,:
在前文中已介绍过,本文件是头文件,将售票系统的数据中的结构体定义在其中,并且利用所定义的结构来编写函数、方法来实现系统的功能。
首先采用链式结构,定义出三个结构体:
1.航线的结构体:
typedefstructFlight//航线信息
{
charDes[10];//终点站名
charFlightNum[10];//航班号
charPlaneNum[10];//飞机号
charWeek;//飞行周日
intRation;//乘员定额
intFreeTicket;//剩余票数
floatPrice[3];//舱位等级的价格
intReplacePas;//候补乘客数
Replace*ReplName;//该航班的候补乘客名单
Customer*CustName;//该航班的已定票乘客名单
structFlight*next;//指示下一航线结点
}Flight,*PFlight;
2.乘客结构体:
typedefstructCustomer//已定票乘客信息
{
charName[10];//姓名
intAmount;//定票数
intLevel;//舱位等级
intSeatNum;//座位号
charFlightNum[10];//所定航班号
structCustomer*next;
}Customer;
3.替补乘客结构体:
typedefstructReplace//替补乘客信息
{
charName[10];//姓名
intAmount;//定票数
intLevel;//舱位等级
charFlightNum[10];//所定航班号
structReplace*next;
}Replace;
以上三个结构体是以乘客信息、替补乘客信息为基础、再此之上有定义了飞机航线的结构体以及结点类型指针的结构体。
并在后者结构中引入了前两种结构体。
并且单独定义了两个指向Flight的指针,作为头只指针和尾指针:
Flight*head;//建立航线头结点
Flight*rear;//建立航线尾结点
以及乘客队列的指针:
Customer*Cusrear;
Replace*Reprear;
为今后的程序设计奠定了基础。
其次,编写实现各个功能的函数与方法:
1.MainMenu()——系统主菜单
此函数设计了本系统的界面,是程序的开始,具体实现如下:
voidMainMenu()
{
chari='0';
while(i!
='7')
{
cout<<"************航空公司客运定票系统V1.0********"< cout<<"*1、增加航线4、预订机票*"< cout<<"*2、查询航线5、退订机票*"< cout<<"*3、修改航线6、清空系统*"< cout<<"*7、退出系统*"< cout<<"*********************************************"< cin>>i; switch(i) { case'1': FlightInsert();break; case'2': FlightSearch();break; case'3': FlightRework();break; case'4': FlightBuyticket();break; case'5': FlightCancelticket();break; case'6': Flightclean();break; case'7': ;break; default: cout<<"error\n";break; } } } 2.voidFlightInsert()——添加航班信息 此方法主要用到链表的思想,类似于链表中的插入属性。 与一般链表不同的是,此方法设置了一个表尾指针,便于航班信息的添加,具体实现如下: voidFlightInsert()//添加航班信息 { Flight*p; p=newFlight; cout<<"请输入终点站名: "< cin>>p->Des; cout<<"请输入航班号: "< cin>>p->FlightNum; cout<<"请输入飞机号: "< cin>>p->PlaneNum; cout<<"请输入飞行周日: "< cin>>p->Week; cout<<"请输入乘员定额: "< cin>>p->Ration; p->FreeTicket=p->Ration; cout<<"请输入舱位等级的价格: "< cout<<"头等舱价格"< cin>>p->Price[0]; cout<<"普通舱价格"< cin>>p->Price[1]; cout<<"经济舱价格"< cin>>p->Price[2]; p->ReplName=newReplace; p->CustName=newCustomer; p->CustName->next=NULL; p->ReplName->next=NULL; p->ReplacePas=0; rear->next=p; rear=p; rear->next=NULL; } 3.FlightLookup()——查询航班信息 其实,查询航班的原理与删除原理相似,最中心的环节就是现对指定的航班进行定位。 与删除不同的是,查询不涉及到指针的变换,仅仅输出要查询的信息就可以了,具体实现如下: voidFlightLookup()//查询航班 { Flight*p,*q; charFlightNum[10]; p=head; inti=0; while(i! =1) { cout<<"请输入需要查询的航班号: "< cin>>FlightNum; while(p->next&&strcmp(p->next->FlightNum,FlightNum)) { p=p->next; } q=p->next; if(q==NULL) { cout<<"对不起不存在此航班"< } else { cout<<"航班号: "< cout<<"飞机号: "< cout<<"目的地: "< cout<<"飞行周日: "< cout<<"成员定额: "< cout<<"剩余票数: "< cout<<"候补乘客数: "< cout<<"头等舱价格: "< cout<<"普通舱价格: "< cout<<"经济舱价格: "< cout<<"1、返回主菜单2、继续"< cin>>i; } } 4.FlightRework()——修改航线信息 在修改航线信息方面,中心思想依旧类似于删除和查找。 只不过定位到所需信息之后要做的是重新给这些信息赋值。 在功能方面,为了使用户便于操作,因此需要一个界面来使程序更直观化一些,具体实现如下: voidFlightRework()//修改航线信息 { intCustomer_Number; Flight*p,*q; charFlightNum[10]; chari='0'; p=head; cout<<"请输入需要修改的航班号: "< cin>>FlightNum; while(p->next&&strcmp(p->next->FlightNum,FlightNum)) { p=p->next; } q=p->next; if(q==NULL) { cout<<"对不起不存在此航班"< } else { while(i! ='9') { cout<<"*****请输入需要修改的数据*****"< cout<<"*1、航班号2、飞机号*"< cout<<"*3、目的地4、飞行周日*"< cout<<"*5、成员定额6、头等舱价格*"< cout<<"*7、普通舱价格8、经济舱价格*"< cout<<"*9、退出*"< cout<<"******************************"< cin>>i; switch(i) { case'1': cout<<"请输入航班号: "< cin>>q->FlightNum;break; case'2': cout<<"请输入飞机号: "< cin>>q->PlaneNum;break; case'3': cout<<"请输入目的地: "< cin>>q->Des;break; case'4': cout<<"请输入飞行周日: "< cin>>q->Week;break; case'5': cout<<"请输入乘员定额: "< Customer_Number=q->Ration-q->FreeTicket; cin>>q->Ration;q->FreeTicket=q->Ration-Customer_Number;break; case'6': cout<<"请输入头等舱价格: "< cin>>q->Price[0];break; case'7': cout<<"请输入普通舱价格: "< cin>>q->Price[1];break; case'8': cout<<"请输入经济舱价格: "< cin>>q->Price[2];break; case'9': break; default: cout<<"error\n";break; } } } } 5.FlightBuyTicket()——订票 订票是本系统的核心功能,本系统的一切功能都是围绕“订票”这个关键词来进行的。 用户确定所要乘坐的航班之后,进行订票,如果航班中的空余票数大于用户所要订的票数,则订票成功。 否则询问用户是否进入候补乘客名单。 其原理是运用链表的来添加乘客信息,运用队列来使替补乘客入队。 其中,还调用了另外两函数: BuyTicket()和Buyreplace()来实现订票成功和进入替补乘客名单。 具体实现如下: voidFlightBuyTicket()//订票 { intTicket_Amount; voidBuyTicket(PFlight,int); voidBuyreplace(PFlight,int,int); Flight*p,*q; charDes[10]; inti=2; while(i! =1) { cout<<"请输入目的地: "< cin>>Des; p=head; while(p->next&&strcmp(p->next->Des,Des)) { p=p->next; } q=p->next; if(q==NULL) { cout<<"对不起不存在此航班"< } else { while(i! =1) { cout<<"输入需要够买的票数"< cin>>Ticket_Amount; while(Ticket_Amount==0) { cout<<"请输入一个非零数: "< cin>>Ticket_Amount; } if(Ticket_Amount<=q->FreeTicket) { BuyTicket(q,Ticket_Amount); //买票,详细介绍见下文 } else { intn; cout<<"剩余票数小于定票数,是否需要列入候补名单? (1、是2、否)"< cin>>n; Buyreplace(q,Ticket_Amount,n); //进入替补名单,详细介绍见下文 } cout<<"1、返回主菜单2、继续"< cin>>i; } } } } 6.FlightCancelTicket()——退票 作为人性化的航空客运订票系统,不但要实现订票,还要实现退票。 在退票方面,仍旧是利用链表,将乘客信息删除。 但删除之后,如若有替补乘客,还要使其依照进入替补乘客的队列的次序出队来实现订票。 其具体实现代码如下: voidFlightCancelTicket()//退票 { voidBuyTicket(PFlight,int); Flight*p,*q; Customer*h,*j; charFlightNum[6]; charCustomer_Name[10]; intReplace1_Amount;//候补第一个人的定票数 inti; while(i! =1) { cout<<"请输入需要退定的航班号: "< cin>>FlightNum; p=head; while(p->next&&strcmp(p->next->FlightNum,FlightNum)) { p=p->next; } q=p->next; if(q==NULL) { cout<<"对不起不存在此航班"< } else { while(i! =2) { cout<<"请输入姓名: "< cin>>Customer_Name; h=q->CustName; while(h->next&&strcmp(h->next->Name,Customer_Name)) { h=h->next; } j=h->next; if(j==NULL) { cout<<"查无此人"< } else { if(j->next==NULL){//当删除最后一个结点 Cusrear=h; } h->next=h->next->next; q->FreeTicket+=j->Amount; deletej; cout<<"删除成功! "< if(q->ReplName->next! =NULL) { Replace1_Amount=q->ReplName->next->Amount; if(Replace1_Amount<=q->FreeTicket) { Replace*rep; rep=q->ReplName->next; Customer*Cus2; Cus2=newCustomer; Cus2->SeatNum=q->Ration-q->FreeTicket+1; strcpy(Cus2->FlightNum,q->FlightNum); strcpy(Cus2->Name,rep->Name); Cus2->Amount=rep->Amount; Cus2->Level=rep->Level; cout<<"乘客"< cout<<"座位号为: "; for(inti=1;i<=(rep->Amount);i++) { cout< } cout< if(q->CustName->next==NULL) { Cusrear=q->CustName; Cusrear->next=Cus2; Cusrear=Cus2; Cusrear->next=NULL; } else { Cusrear->next=Cus2; Cusrear=Cus2; Cusrear->next=NULL; } q->FreeTicket-=rep->Amount; q->ReplName->next=q->ReplName->next->next; q->ReplacePas--; deleterep; } } } cout<<"2、退出姓名录入"< cin>>i; } } cout<<"1、返回主菜单"< cin>>i; } } 7.BuyTicket(PFlightq,intTicket_Amount)——买票 作为订票功能实现的核心之一,其思想是利用链表结构将买票乘客的信息添加到表中,具体实现如下: voidBuyticket(PFlightq,intTicket_Amount)//买票 { intn=Ticket_Amount; Customer*Cus2; Cus2=newCustomer; Cus2->SeatNum=q->Ration-q->FreeTicket+1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 永吉 1071304115 航空 售票 系统