2022年飞机订票系统课程设计报告 .pdf

上传人:H****o 文档编号:40336827 上传时间:2022-09-09 格式:PDF 页数:29 大小:1.20MB
返回 下载 相关 举报
2022年飞机订票系统课程设计报告 .pdf_第1页
第1页 / 共29页
2022年飞机订票系统课程设计报告 .pdf_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《2022年飞机订票系统课程设计报告 .pdf》由会员分享,可在线阅读,更多相关《2022年飞机订票系统课程设计报告 .pdf(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、数 据 结 构 课 程 设 计 报 告专业计算机科学与技术学生姓名班级学号指导教师完成日期2009 年 01 月 10 日信 息 工 程 学 院名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 29 页 -一、问 题 描 述 与 分 析:飞机 订票 系统任 务:通 过此 系统 可 以 实现 如 下 功能:录 入:可 以 录入 航 班 情况(数 据 可 以存 储 在 一个 数 据文 件 中,数 据 结构、具 体数 据 自 定)查 询:可 以 查 询某 个 航 线的 情 况(如,输 入航 班 号,查 询 起降 时 间,起 飞 抵达 城 市,航 班 票 价,票 价折 扣,确 定航 班 是

2、否 满 仓);可 以输入 起 飞 抵达 城 市,查 询 飞 机航 班 情 况;订 票:(订 票 情 况可 以 存 在一 个 数 据文 件 中,结 构 自己 设 定)可 以 订票,如果 该 航 班已 经 无 票,可以 提 供 相关 可 选择 航 班;退 票:可退 票,退票 后 修 改 相关 数 据 文 件;客 户 资料 有 姓名,证件 号,订票 数 量 及航 班 情 况,订 单 要有 编 号。修 改 航班 信息:当 航 班 信息 改 变 可以 修 改 航班 数 据 文件基 本 要 求:(1)根据 以 上 功能 说 明,设计 航 班 信 息,订 票 信息 的 存储 结 构,设计 程序 完 成 功能

3、;(2)界 面 要 求:有 合 理的 提 示,每 个 功 能可 以 设立 菜 单,根 据 提示,可 以完 成 相 关的 功 能 要求。二、数 据 结 构 设 计 描 述:本次数据结构课程设计所制作的航空客运订票系统主要运用了链式存储结构来实现。我们知道线性表以及队列的存储结构主要用到了链式结构存储,因而此系统也应考虑使用这两种存储方式。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 29 页 -在航班信息方面,要对航班进行添加、删除、查询等操作。由于链表的优势就在于便于进行添加、删除和查找,因此有关航班信息方面的部分可以由链表来实现。但是为了更便于添加和删除,因此为链表设置了首、

4、尾指针。而对于订票、退票来说,其中要讲一个先来后到的道理。基于这一点的要求,队列的存储方式再合适不过了,其“先进先出”(FIFO)的特点恰恰可以满足订票、退票的要求。在结构定义方面,本系统定义了四个结构,分别用来储存航班信息、乘客信息、替补乘客信息以及结点信息。而在航班信息定义中,分别将乘客信息、替补乘客信息引入其中,以供储存乘客信息和替补乘客信息。根据本系统中的功能以及所定义的数据结构,特编写如下函数:1FlightInsert()/添加航班信息2FlightSearch()/查询航班信息3FlightRework()/修改航班信息4FlightDelete()/删除航班信息5FlightB

5、uyticket()/订票6FlightCancelticket()/退票7Buyticket(PFlight q,int Ticket_Amount)/用队列买票8Buyreplace(PFlight q,int Ticket_Amount,int n)/利用队列进行替补买票9MainMenu()/主菜单名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 29 页 -10Main()/主函数各个函数间的关系如下:三、软 件 结 构 设 计:用简单的等式以及图表加以解释:航班基本信息航班号日期时间身份证号票数+起点站终点站管理员信息登陆密码用户描述客户信息=普通登陆用户描述Main(

6、)FlightInsert()FlightSearch()FlightRework()FlightDelete()FlightBuyticket()FlightCanceltickeMainMenu()Buyticket()Buyreplace()名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 29 页 -四、算 法 设 计:本航空客运售票系统分为两个文件:1.头文件Ticket.h,用来查询信息查看信息修改信息退还机票订购机票返回上一级航空订票管理系统管理员(权限)返回主界面客户返回主界面航班信息日期时间航班号起飞站终点站时间航班号起飞点日期终点身份证票数售票信息名师资料总结-

7、精品资料欢迎下载-名师精心整理-第 5 页,共 29 页 -存放系统中数据结构的结构体,以及所要到的方法及函数。2.C+文件 Ticket.cpp.,本文件主要是本系统的主函数,其中调用头文件,来实现系统的功能。具体实现如下:(一)Ticket.h,:在前文中已介绍过,本文件是头文件,将售票系统的数据中的结构体定义在其中,并且利用所定义的结构来编写函数、方法来实现系统的功能。首先采用链式结构,定义出三个结构体:1航线的结构体:typedef struct Flight /航线信息char Des10;/终点站名char FlightNum10;/航班号char PlaneNum10;/飞机号c

8、har Week;/飞行周日int Ration;/乘员定额int FreeTicket;/剩余票数float Price3;/舱位等级的价格int ReplacePas;/候补乘客数Replace*ReplName;/该航班的候补乘客名单Customer*CustName;/该航班的已定票乘客名单struct Flight*next;/指示下一航线结点Flight,*PFlight;2乘客结构体:typedef struct Customer /已定票乘客信息char Name10;/姓名int Amount;/定票数int Level;/舱位等级int SeatNum;/座位号名师资料总结

9、-精品资料欢迎下载-名师精心整理-第 6 页,共 29 页 -char FlightNum10;/所定航班号struct Customer*next;Customer;3替补乘客结构体:typedef struct Replace /替补乘客信息char Name10;/姓名int Amount;/定票数int Level;/舱位等级char FlightNum10;/所定航班号struct Replace*next;Replace;以上三个结构体是以乘客信息、替补乘客信息为基础、再此之上有定义了飞机航线的结构体以及结点类型指针的结构体。并在后者结构中引入了前两种结构体。并且单独定义了两个指向

10、 Flight的指针,作为头只指针和尾指针:Flight*head;/建立航线头结点Flight*rear;/建立航线尾结点以及乘客队列的指针:Customer*Cusrear;Replace*Reprear;为今后的程序设计奠定了基础。其次,编写实现各个功能的函数与方法:1MainMenu()系统主菜单此函数设计了本系统的界面,是程序的开始,具体实现如下:void MainMenu()char i=0;while(i!=8)cout *航空公司客运定票系统*endl;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 29 页 -cout *1、增加航线5、预订机票 *endl;c

11、out *2、查询航线6、退订机票 *endl;cout *3、修改航线7、清空系统 *endl;cout *4、删除航线8、退出系统 *endl;cout *i;switch(i)case 1:FlightInsert();break;case 2:FlightSearch();break;case 3:FlightRework();break;case 4:FlightDelete();break;case 5:FlightBuyticket();break;case 6:FlightCancelticket();break;case 7:Flightclean();break;case

12、8:;break;n;break;2.void FlightInsert()添加航班信息此方法主要用到链表的思想,类似于链表中的插入属性。与一般链表不同的是,此方法设置了一个表尾指针,便于航班信息的添加,具体实现如下:void FlightInsert()/添加航班信息名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 29 页 -Flight*p;p=new Flight;cout请输入终点站名:p-Des;cout请 输 入 航 班号:p-FlightNum;cout请 输 入 飞 机号:p-PlaneNum;cout请输入飞行周日:p-Week;cout请输入乘员定额:p-Ra

13、tion;p-FreeTicket=p-Ration;cout请输入舱位等级的价格:endl;cout头 等 舱 价 格p-Price0;cout 普通舱价格 p-Price1;cout 经济舱价格 p-Price2;p-ReplName=new Replace;p-CustName=new Customer;p-CustName-next=NULL;p-ReplName-next=NULL;p-ReplacePas=0;rear-next=p;rear=p;rear-next=NULL;2FlightDelete()删除航班信息类比于上述的添加航班信息,删除航班同样是依靠了链表的思想来完成。

14、不同的是,在删除方面用到了表头指针这个工具,来定位索要删除的航班信息,具体实现如下:void FlightDelete()/名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 29 页 -删除航班信息 Flight*p,*q;char FlightNum10;p=head;int i=0;while(i!=1)cout 请输入需要删除的航班号:FlightNum;while(p-next&strcmp(p-next-FlightNum,FlightNum)p=p-next;q=p-next;if(q!=NULL)if(q-next=NULL)rear=p;p-next=p-next-

15、next;delete q;else cout 你所要删除的航班不存在endl;cout1、退出 2、继续i;3FlightLookup()查询航班信息其实,查询航班的原理与删除原理相似,最中心的环节就是现对指定的航班进行定位。与删除不同的是,查询不涉及到指针的变换,仅仅输出要查询的信息就可以了,具体实现如下:void FlightLookup()/查询航班名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 29 页 -Flight*p,*q;char FlightNum10;p=head;int i=0;while(i!=1)cout 请输入需要查询的航班号:FlightNum;

16、while(p-next&strcmp(p-next-FlightNum,FlightNum)p=p-next;q=p-next;if(q=NULL)cout 对不起不存在此航班 endl;else cout航班号:FlightNumendl;cout飞机号:PlaneNumendl;cout目的地:Desendl;cout飞 行 周日:Weekendl;cout成 员 定额:Rationendl;cout剩 余 票数:FreeTicketendl;cout 候补乘客数:ReplacePasendl;cout 头等舱价格:Price0endl;cout 普通舱价格:Price1endl;cou

17、t 经济舱价名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 29 页 -格:Price2endl;cout1、返回主菜单 2、继续 i;4FlightRework()修改航线信息在修改航线信息方面,中心思想依旧类似于删除和查找。只不过定位到所需信息之后要做的是重新给这些信息赋值。在功能方面,为了使用户便于操作,因此需要一个界面来使程序更直观化一些,具体实现如下:void FlightRework()/修改航线信息int Customer_Number;Flight*p,*q;char FlightNum10;char i=0;p=head;cout 请输入需要修改的航班号:Fl

18、ightNum;while(p-next&strcmp(p-next-FlightNum,FlightNum)p=p-next;q=p-next;if(q=NULL)cout 对 不 起 不 存在此航班 endl;else while(i!=9)cout *请 输 入 需要 修 改 的数 据*endl;名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 29 页 -cout *1、航 班 号2、飞 机 号*endl;cout *3、目的地 4、飞行周日*endl;cout *5、成员定额 6、头等舱价格*endl;cout *7、普通舱价格 8、经济舱价格*endl;cout *9

19、、退 出*endl;cout *i;switch(i)case 1:cout请输入航班号:q-FlightNum;break;case 2:cout请 输 入 飞 机 号:q-PlaneNum;break;case 3:cout请 输 入 目 的 地:q-Des;break;case 4:cout请 输 入 飞 行 周 日:q-Week;break;case 5:cout请输入乘员定额:Ration-q-FreeTicket;cinq-Ration;q-FreeTicket=q-Ration-Customer_Number;break;case 6:cout请输入头等舱价格:q-Price0;

20、break;case 7:cout请 输 入 普通 舱 价 格:q-Price1;break;case 8:cout请 输 入 经济 舱 价 格:q-Price2;break;case 9:break;default:couterrorn;break;5FlightBuyTicket()订票订票是本系统的核心功能,本系统的一切功能都是围绕“订票”这个关键词来进行的。用户确定所要乘坐的航班之后,进行订票,如果航班中的空余票数大于用户所要订的票数,则订票成功。否则询问用户是否进入候补乘客名单。其原理是运用链表的来添加乘客信息,运用队列来使替补乘客入队。其中,还调用了另 外 两 函 数:BuyTic

21、ket()和Buyreplace()来实现 订票成 功和进入替补乘客名单。具体实现如下:void FlightBuyTicket()/订票 int Ticket_Amount;void BuyTicket(PFlight,int);void Buyreplace(PFlight,int,int);Flight*p,*q;char Des10;int i=2;while(i!=1)名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 29 页 -cout 请 输 入 目 的地:Des;p=head;while(p-next&strcmp(p-next-Des,Des)p=p-next;

22、q=p-next;if(q=NULL)cout 对不起不存在此航班 endl;else while(i!=1)cout输 入需要够买的票数 Ticket_Amount;while(Ticket_Amount=0)cout 请输入一个非零数:Ticket_Amount;if(Ticket_AmountFreeTicket)BuyTicket(q,Ticket_Amount);/买票,详细介绍见下文 else int n;cout 剩余票数小于定票数,是否需要列名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 29 页 -入 候 补 名 单?(1、是2、否)n;Buyreplace(

23、q,Ticket_Amount,n);/进入替补名单,详细介绍见下文 cout1、返回主菜单 2、继续 i;6FlightCancelTicket()退票作为人性化的航空客运订票系统,不但要实现订票,还要实现退票。在退票方面,仍旧是利用链表,将乘客信息删除。但删除之后,如若有替补乘客,还要使其依照进入替补乘客的队列的次序出队来实现订票。其具体实现代码如下:void FlightCancelTicket()/退票 void BuyTicket(PFlight,int);Flight*p,*q;Customer*h,*j;char FlightNum6;char Customer_Name10;i

24、nt Replace1_Amount;/候补第一个人的定票数int i;while(i!=1)cout 请 输 入 需 要退定的航班号:FlightNum;p=head;名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 29 页 -while(p-next&strcmp(p-next-FlightNum,FlightNum)p=p-next;q=p-next;if(q=NULL)cout 对不起不存在此航班 endl;else while(i!=2)cout请 输入姓名:Customer_Name;h=q-CustName;while(h-next&strcmp(h-next-N

25、ame,Customer_Name)h=h-next;j=h-next;if(j=NULL)cout 查无此人 next=NULL)/当删除最后一个结点Cusrear=h;h-next=h-next-next;q-FreeTicket+=j-Amount;delete j;名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 29 页 -cout 删除成功!ReplName-next!=NULL)Replace1_Amount=q-ReplName-next-Amount;if(Replace1_AmountFreeTicket)Replace*rep;rep=q-ReplName-

26、next;Customer*Cus2;Cus2=new Customer;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乘客Name已经成功买票endl;cout 座位号为:;for(int i=1;iAmount);i+)coutSeatNum+;coutCustName-next=NULL)Cusrear=q-CustName;Cusrear-n

27、ext=Cus2;Cusrear=Cus2;Cusrear-next=NULL;名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 29 页 -else Cusrear-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL;q-FreeTicket-=rep-Amount;q-ReplName-next=q-ReplName-next-next;q-ReplacePas-;delete rep;cout2、退出姓名录入 i;cout1、返回主菜单i;7BuyTicket(PFlight q,int Ticket_Amount)买票作为订票功能实现的核心之

28、一,其思想是利用链表结构将买票乘客的信息添加到表中,具体实现如下:void Buyticket(PFlight q,int Ticket_Amount)/买票名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 29 页 -int n=Ticket_Amount;Customer*Cus2;Cus2=new Customer;Cus2-SeatNum=q-Ration-q-FreeTicket+1;strcpy(Cus2-FlightNum,q-FlightNum);Cus2-Amount=Ticket_Amount;cout请输入姓名:Cus2-Name;cout 请 输 入 舱

29、位 等级:Cus2-Level;cout 你 的 座 位 号 为endl;for(int i=1;i=Ticket_Amount;i+)coutSeatNum+;coutCustName-next=NULL)Cusrear=q-CustName;Cusrear-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL;else Cusrear-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL;名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 29 页 -q-FreeTicket-=Ticket_Amount;8Buyrepl

30、ace(PFlight q,int Ticket_Amount)进入替补队列同样是订票功能实现的核心之一,此方法利用队列的存储结构是要等候机票的乘客按照先来后到的次序入队,然后将这部分信息储存。在有已订票乘客退票时,根据队列中的信息依次出队,具体实现如下:void Buyreplace(PFlight q,int Ticket_Amount,int n)/进入候补队列 Replace*Rep2;Rep2=new Replace;if(n=1)q-ReplacePas+=Ticket_Amount;strcpy(Rep2-FlightNum,q-FlightNum);Rep2-Amount=Ti

31、cket_Amount;cout请 输 入 姓名:Rep2-Name;cout 请 输 入 舱 位等级(1-3):Rep2-Level;if(q-ReplName-next=NULL)Reprear=q-ReplName;Reprear-next=Rep2;名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 29 页 -Reprear=Rep2;Reprear-next=NULL;else Reprear-next=Rep2;Reprear=Rep2;Reprear-next=NULL;9Flightclean()系统清空本方法是将航班信息清空,主要思想是将头指针赋予下一个结点,然

32、后将原来的头指针删除,具体代码如下:void Flightclean()head-next=rear-next;cout 系统已经清空!next=NULL;void FlightInsert();void FlightDelete();void FlightLookup();void FlightRework();void FlightBuyticket();void FlightCancelticket();名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 29 页 -void Flightclean();void MainMenu();MainMenu();至此,本航空客运订

33、票系统的详细设计介绍完毕。五、调 试 分 析:运 行后,界 面如 下:(一)添加航线在以上界面中,先键入一,按照提示分别输入信息,如下图所示:(二)查询航线返回主菜单后,键入2,进行查询,按照提示出入信息,若输入的航班信息存在,如图:名师资料总结-精品资料欢迎下载-名师精心整理-第 23 页,共 29 页 -若输入的信息不存在,则如图:返回主菜单后,操作其他功能(三)修改航线在主菜单下键入3,根据提示输入航班号出现另一个菜单,如图根据提示,修改航班信息,如下图所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 24 页,共 29 页 -返回主菜单,查询已修改的航班信息,结果吻合,如图示:名

34、师资料总结-精品资料欢迎下载-名师精心整理-第 25 页,共 29 页 -(四)删除航线在主菜单下,键入4,根据提示输入航班号后,进行删除,如图之后,退出到主菜单,进行查询,可以发现刚才的操作已将航班信息删除,如图:(五)预定机票先重复(一)操作,添加目的地为yancheng 的航班,然后执行预定机票操作,根据提示,分别令三个乘客购票,第一个乘客将票买光,第二位乘客与第三位乘客座位替补乘客候票,如图:名师资料总结-精品资料欢迎下载-名师精心整理-第 26 页,共 29 页 -(六)退订机票在主菜单下,键入 6,令刚才的三名乘客中的第一名退票,退票后第二名乘客购买成功如图:名师资料总结-精品资料

35、欢迎下载-名师精心整理-第 27 页,共 29 页 -(七)清空系统在主菜单下,键入7,执行清空,如图在清空后,查询航班,根据提示输入航班号0351,查询结果如图:(八)退出系统在主菜单下,键入8,即可退出:名师资料总结-精品资料欢迎下载-名师精心整理-第 28 页,共 29 页 -六 总 结通过这次课程设计,我才深知数据结构灵活,对于相同的问题模型可以用多种不同的存储结构来实现。在刚刚结束的一个学期里,我对数据结构的学习才仅仅是个入门,通过这次的课程设计,我才发现自己在以往学习中的诸多问题,比如对队列的学习不够深入,只是局限于书本上的某一种队列的理论学习,对循环队列的学习和应用还远远不够,对

36、于同一问题没有多角度的思考,仅仅局限于一种方法,根本没有思考是否还有别的更简单更快捷的方法,不能做到举一反三,还有太注重理论学习而忽视了上机实践,结果就是理论知识不扎实上机动手能力差,编译出现错误时不能很快的找出错误。在这次课设的编程过程中,我尽量把以往学过的知识全部用上,对于同一个问题从不同的角度考虑实现方法,所以我才发现了自己很多的问题,而且借此寒假,我会改正这些问题,并且深入学习数据结构和 C+。在这次课程中,除了达到了课设目的,我想我最大的收获就是以上的发现并且能及时的解决七 参 考 文 献(1)徐 孝 凯 数 据 结构 实 用 教程 清 华大 学 出 版社(2)王 育 坚 Visusl C+面向 对 象 编程教 程清 华 大学 出 版社名师资料总结-精品资料欢迎下载-名师精心整理-第 29 页,共 29 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁