

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、成绩评定教师签名嘉应学院 计算机学院实验报告课程名称:数据结构课程设计开课学期:2021-2021学年第2学期班级:1503指导老师:钟治初实验题目:航空客运订票系统学号:姓名:上机时间:1. 需求分析(1) 航空管理。 每条航班所涉及的信息有 :终点站名、 航班号、 飞机型号、 飞行周日(星期几) 、 乘员定额、余票量。(2) 客户管理。有关订票的客户信息(包括姓名、订票量、航位等级(1,2和 3)以及等候替补的客户名单(包括姓名、所需票量) 。(3) 系统实现的主要操作和功能。系统实现的主要操作和功能如下: 查询航班。根据旅客提出的终点站名输入以下信息:航班号、飞机型号、飞机日期、余 票额
2、。 承办订票业务。根据客户提出的要求(航班号、订票数额)查询该航班票额情况,假设有 余票, 那么为客户办理订票手续, 输出座位号; 假设已满或者余票少于订票额, 那么需要重新询问 客户要求;假设需要,可等待排队后补。 承办退票业务。根据客户提供的情况(日期、航班) ,为客户办理退票手续,然后查询该 航班是否有人排队候补, 首先查询排在第一的客户, 假设所退票额能满足该客户的要求, 那么为 其办理订票手续,否那么询问其他排队候补的客户。2. 概要设计1) 本系统设计了一个含有多个菜单项的主控菜单,系统主控菜单运行界面2) 存储结构设计本系统主要采用链表结构类型存储航班信息和订票的乘客信息。航班信
3、息链表结点由 10 个分量构成,乘客信息链表由 5 个分量构成。3) 系统功能设计 本系统分为以下 5 个功能模块。(1) 航班管理。航班管理子模块可完成添加新的航班,按终点站点名查询航班,浏览所有航 班。(2) 订票办理。在添加了航班的根底上可办理订票业务。乘客根据所需航班输入终点站名和 订票量订票。如果订票量超过余票量,那么会提示是否成为候补乘客;如果订票成功,那么会要 求输入订票乘客的姓名及所订票的舱位等级。(3) 退票办理。已办理订票业务的乘客可根据所订票的航班和乘客姓名办理退票业务。 、(4) 乘客管理。可以查看已经订票的乘客信息和候补乘客的信息。(5) 退出系统。退出整个航空客运订
4、票系统。3. 模块设计1) 模块设计 本程序包括主程序模块、菜单项选择择模块和队列操作模块。 主程序模块 - 菜单项选择择模块 - 队列操作模块2) 系统子程序及功能设计询问是否继续的函数操作出错函数航班核对函数/ 按航班号查询函数/ 按目录地查询航班函数 航班添加函数 航班是否为空函数本系统共设置 14 个函数,其中包括主函数。个函数名及功能说明如下。(1)char Continue( )/(2)void ErrorMess( )/(3-1)int Find_Line1( )/(3-2)int Find_Line2( )(4) void Line_search( )(5) void Line
5、_Add( )/(6) int Empty_Flight( ) /(7) int Line_See( ) /(8) void LinemanageMenu ( ) /(9) void bookingMenu( )/(10) void Display_Reserve( )/(11) void Display_Replace( )/(12) void RefundticketMenu( )/(13) void CustomermagMenu( ) /(14) void main( ) /航班查看函数 航班管理菜单 订票办理函数 订票乘客信息 候补乘客信息 退票办理函数 乘客管理子菜单函数 主程序画
6、面函数4. 详细设计1数据类型定义 1乘客信息的结构体定义 2航班信息的结构体定义 3全局变量定义2系统主要子程序详细设计 1主程序模块设计 主函数。设定用户操作界面以及界面的颜色和大小,调用菜单子模块函数。 2航班管理模块子菜单界面函数 3航班管理的主要工作函数 4 订票办理函数,用于办理订票业务5. 测试分析1航班管理菜单在主菜单下, 用户输入 1 并按下回车键,运行。该子模块可以实现添加新航班,按终点站 名查找航班的信息,浏览查看所有航班信息这三项航班管理操作。2订票业务办理在进行了航班添加之后, 即航班不为空时, 在主菜单下输入 2 并回车办理订票业务, 在界 面提示下输入订票的相关航
7、班信息和订票客户信息。 运行。 如果需要订票数超过余票量, 那么 可选择等待成为候补乘客或选择放弃订票。3退票业务办理办理订票业务之后, 可以办理对应的退票业务。 在主菜单下输入 3 并按下回车键办理订票 业务,在界面提示下输入匹配的退票航班信息和订票客户姓名即可退票成功,运行。4乘客管理子菜单办理了订票业务之后, 系统可以管理办理了订票业务的乘客信息。 在主菜单下输入 4 并按 下回车键进入乘客管理菜单界面, 运行。 在此子功能模块下可以进行查看订票和候补乘客的 信息。6. 退出在主菜单下输入5 并按下回车键,即退出“航空客运订票系统。完整代码如下:#i nclude #i nclude #
8、in elude #in elude system(pause)#defi ne MAX 60/* run this program using the con sole pauser or add your own getch, or in put loop */typedef struct Customerchar Name8;int Amount;char Rank;int IDinfor;struct Customer *Next;Customer;typedef struct Flightchar Des_Name10; char Flight_No6;char Pla ne_No6
9、; int Week Day;int Customer_Am ount; int Free_A mount;int Price3;Customer *CustName; Customer *ReplName; struct Flight *Next;Flight,*PFIight;/全局变量int Customer_Co unt = 0; Flight *Head = NULL; Flight *p2;Customer *Custp1MAX;Customer *Replp1MAX; int IsEmpty = 1;int IsReplace = 1; Customer *prior;int s
10、houldsave = 0;1.询问是否继续的函数char Continu e()char an swer;while(1)printf(nt您是否想继续(Y/N)?);sca nf(%s, &an swer);system(cls);if(an swer = y | an swer = Y)return y;else if(an swer = n | an swer = N)return n;else prin tf(nt输入有误,请重新输入!);2.操作出错函数void ErrorMess()prin tf(nt 对不起,您的操作有误! ); getch();/3-1.核对航班函数int
11、Fi nd_Li ne1(PFIight L, char *key)int flag = 0;Flight *p1;p1= L;if(p1 = p2) retur n flag;while(p1 != p2 & p1 != NULL)if(strcmp(p1 - Flight_No,key) = 0)p1=p1-Next;retur n flag;3-2.按航班号查询函数int Find_Line2(PFlight L, char*key, PFlight *pp, i nt *Flight_No)int flag=O;Flight *p1;p1=L;while(p1!=NULL)if(str
12、cmp(p1-Flight_No,key)=0)flag=1;*pp=p1;break;p仁 p1-Next;if(p1!=NULL) Flight No+;retur n flag;4.按目录地查询航班函数void Lin e_search()char Desn ame50;Flight *p 1=H ead;if(Head=NULL)prin tfnt没有到达您想要的终点站的航班!; getch;return;prin tfnt请输入终点站名:;sca nf(%s,Des name);prin tf(nt您所查询的航班的信息:n);printf(n n);while(p1!=NULL)if
13、(strcmp(p1-Des_Name,Des name)=0)printf( 目的地航班号飞机型号星期座位号头等舱价格普通舱价格经 济舱价格n);prin tf(n%-9s%-8s%-8s%-7d%-8d%-10d%-12d%-8d,p1-Des Name, p1-Flight_No,p1-Pla ne_No,p1-Week_Day,p1-Customer_Amou nt, p1-Price0,p1-Price1,p1-Price2);p1= p1-Next;prin tf(nn);Con ti nu e();115.航班添加函数void Li ne_Add()PFIight p,*p1;p
14、仁&Head;while(1)if(Head=NULL)*p1=(PFIight)malloc(sizeof(Flight);(*p1)-Next=NULL;p2=Head;p仁&p;*p1=(PFlight)malloc(sizeof(Flight); p2-Next=*p1;p2=*p1;prin tf(nt添加新的航班!n);printf(nt请输入终点站名:);scan f(%s,&p2-Des Name);while(1)prin tf(nt请输入唯一的航班号:);scan f(%s,&p2-Flight_No);if(Fi nd Li ne1(Head,p2-Flight No)p
15、rin tf(nt航班号已经存在!n);else break;printf(nt请输入航班号:);scan f(%s,&p2-Pla ne No);while(1)printf(nt请输入航班日期(请输入1-7):);scan f(%d,&p2-Week_Day);if(p2-Week_DayWeek_Day7)prin tf(nt输入日期有误,请重新输入!else break;printf(nt请输入座位数量:);sca nf(%d,&p2-Customer_Amou nt);prin tf(nt请输入头等舱的价钱i :);sca nf(%d,&p2-Price0);prin tf(nt请输
16、入二等舱的价钱i :);sca nf(%d,&p2-Price1);prin tf(nt请输入三等舱的价钱i :);sca nf(%d,&p2-Price2);p2-Free_A moun t=p2-Customer_Am ount;p2-CustName=NULL;p2-ReplName=NULL; shouldsave=1;if(Co ntin ue()= n) p2-Next=NULL; return;6.判断航班是否为空函数int Empty_Flight()if(Head = NULL)system(cls);prin tf(nt对不起,航班不存在,按任意键返回!return 1;e
17、lse return 0;n););getch();7.航班查看函数int Lin e See()Flight *p1;system(cls);p仁Head;if(Empty_Flight() return 0;printf(nnt航班信息:n););printf(目的地航班号飞机型号星期座位数头等舱价格普通舱价格经济舱价格 n);while(p1 != NULL)prin tf(n%-9s%-8s%-8s%-7d%-8d%-10d%-12d%-8d,p1-Des_Name, p1-Flight_No,p1-Pla ne_No,p1-Week_Day,p1-Customer_Amou nt,
18、p1-Price0,p1-Price1,p1-Price2);p仁p1-Next;printf(nn);prin tf(nt按任意键返回!n); getch();8.航班管理菜单void Lin ema nageMe nu()char c;system(cls);while(1)printf(ntt 航班管理菜单:n);printf(nnprin tf(t1.添加新的航班n);prin tf(t2.查询航班n);prin tf(t3.查看航班n);prin tf(t4.返回主菜单n);prin tf(t请选择您想要的效劳:);scan f(%s,&c);switch(c)case 1: Lin
19、 e_Add(); break; case 2: Lin e search(); break; case 3: Lin e See(); break; case 4: retur n;default: ErrorMess();9.订票办理函数void book in gMe nu()int Ticket_Cou nt,IDi nfor,i,flag=0;int Flight_No=0;Flight *p1;Customer *c1;Customer *c2;char an swer7;char temp,c;int tag=0;int lsRepl=0;if(Empty_Flight() re
20、turn;while(1)prin tf(nt现在您可以订票!);flag=0;tag=0;printf(nt 请输入航班号:);scan f(%s, &an swer);if(Fi nd_Li ne2(Head,a nswer,&p1,&Flight_No)while(1)prin tf(nt请输入您想要订购的数量:);scan f(%d,& Ticket_Cou nt);if(Ticket_Cou nt=0)prin tf(nt请再次输入飞机型号:n);if(p1-Free_A mount = Ticket_Co unt)Customer_C oun t+;flag=1;IsRepl=1;
21、if(p1-CustName=NULL)Custp1Flight No=c 1= (Customer*)malloc(sizeof(Customer);p1-CustName=Custp1Flight_No;c1=(Customer*)malloc(sizeof(Customer);Custp1Flight_No-Next=c1;Custp1Flight_No=c1;lsEmpty=O;Custp1Flight_No-Amou nt=Ticket_Cou nt;IDinfor = p1-Customer_Am oun t-p1-Free_Am oun t+1;Custp1Flight_No-I
22、Di nfor = IDi nfor;p1-Free_Am ount -= Ticket_Co unt;prin tfnt请输入您的姓名:;sca nf(%s,&Custp1Flight_No-Name);while(1)printfnt请输入舱位等级:;scan f(%s, &Custp1Flight_No-Ra nk); if(!(Custp1Flight No-Ra nk=1Custp1Flight_No-Ra nk IDi nfor);prin tf(nt恭喜您订票成功! n);for(i=1;iFree_Am oun t=0)prin tfnt对不起,票已售完!n;lsRepl=O;
23、elseprin tfnt对不起,当前没有多余的票!n;IsRepl=0;if(!IsRepl)prin tf(nt您是否想成为候补乘客(Y/N)?:);scan f(%s,& temp);if(temp=y | temp=Y)if(p1-ReplName=NULL) c2=(Customer*)malloc(sizeof(Customer); Replp1Flight_No=c2;p1-ReplName = Replp1Flight_No;c2=(Customer*)malloc(sizeof(Customer);Replp1Flight_No-Next = c2; Replp1Flight
24、_No =c2; |IsReplace=0;tag=1;Replp1Flight_No-Amou nt = Ticket_Cou nt; printf(nt请输入您的姓名:);scan f(%s,&Replp1Flight No-Name);Replp1Flight_No-IDi nfor = IDi nfor;Replp1Flight No-Amou nt = Ticket Cou nt; while(1) Iprintf(nt请输入舱位等级:);scan f(%s,&Replp1Flight_No-Ra nk);printf(nt请输入您的ID信息:);scan f(%d,Replp1Fl
25、ight No-IDi nfor);if(!(Replp1Flight_No-Ra nk=1Replp1Flight_No-Ra nk Next=NULL;if(tag)prin tf(nt是否退出菜单? :(y/n);n);scan f(%s,&c); if(c=y) return;10.订票乘客信息void Display_Reserver() 一Flight *p1;Customer *c1;system(cls);p仁Head; if(Empty_Flight() return;printf(nt订票乘客信息);if(IsEmpty)prin tf(nt对不起,没有订票乘客信息! n)
26、; getch();return;printf(nn);prin tf(Name Flight_No Pla ne_No Tic_Amou nt Des_Name Rank_No IDn); while(p1 != NULL)if(p1-CustName != NULL)cl = p1-CustName;while(c1 != NULL)prin tf(n%-8s%-10s%-9s%-11d%-9s%-9c%-9d,c1-Name,p1-Flight_No,p1-Pla ne_No,c1-Amou nt,p1-Des_Name,c1-Ra nk,c1-IDi nfor);if(p1-Free_
27、Am ount = 1)prin tf(nnt还有多余的票!n);else prin tf(nnt票已售完! n);c1=c1-Next; p1= p1-Next;printf(nn );prin tf(nt按任意键返回!); getch();return;11.候补乘客信息void Display Replace()Flight *p1;Customer *c1;system(cls);p仁Head;if(Empty_Flight() return;prin tf(nt候补乘客信息!);if(IsReplace)prin tf(nt对不起,没有候补乘客!n); getch();return;
28、printf(nn);printf(姓名航班号飞机型号订票数目的地舱位等级顾客号n);while(p1 != NULL) if(p1-ReplName != NULL) c1=p1-ReplName;while(c1 != NULL)prin tf(n%-8s%-10s%-9s%-11d%-9s%-9c%-9d,c1-Name,p1-Flight_No,p1-Pla ne_No,c1-Amou nt,p1-Des_Name,c1-Ra nk,c1-IDi nfor);if(p1-Free_Am ount = 1)prin tf(nnt还有多余的票!n);else prin tf(nnt票已售完
29、! n);c1=c1-Next;return;12.退票办理函数void Refu ndticketMe nu()int Flight_No=0,flag=0;Flight *p1;Customer *c2,*c4;Customer *c3,*c5;char an swer7, name7;int tag=0;int IDinfor;if(Empty_Flight() return;prin tf(nt现在开始进行退票手续);if(IsEmpty)prin tf(nt对不起,乘客不存在!); getch();wreturn;hileflag = 0; tag=0; Flight No=0;pr
30、in tf(nt请输入航班:);scanf(%s,&answer);if(Fi nd_Li ne2(Head,a nswer,&p1,&Flight_No)c2=p1-CustName;printf(nt请输入您的姓名:);scan f(%s,&n ame);if(c2=NULL)prin tf(nt对不起,乘客不存在!);if(C on ti nu e() = n) retur n;elsewhile(c2 != NULL)if(strcmp(c2-Name ,n ame) = 0)if(c2=p1-CustName) prior=p1-CustName; IDi nfor=c2-IDi n
31、for; flag=1; break;else if(c2-Next != NULL)if(strcmp(c2-Next-Name, name)=0) tag=1;prior=c2;IDi nfor=c2-Next-IDi nfor; flag=1; break;c2 = c2-Next;shouldsave = 1;if(!flag)prin tf(nt对不起,乘客不存在!n);else prin tf(nt对不起,乘客不存在!n);if(flag)if(prior = p1-CustName & !tag)if(prior-Next = NULL)p1-Free_Am ount += pr
32、ior-Next-Am ount;p1-CustName = NULL;elsep1-Free_Am ount += prior-Next-Am ount;p1-CustName = prior-Next;p1-Free_Am ount += prior-Next-Am ount; prior-Next = prior-Next-Next;Customer_Co un t-;if(Customer_Co unt = 0) IsEmpty = 1; shouldsave =1;if(flag)c3=p1-ReplName;while(c3!=NULL)if(c3-Am ount Free_A m
33、oun t);prin tf(nt候补乘客已经存在! n);c4=(Customer*)malloc(sizeof(Customer); Custp1Flight No-Next=c4;c4-Next=NULL;lsEmpty=0;if(p1-CustName = NULL) p1-CustName = c4;strcpty(c4-Name,c3-Name);c4-Ra nk = c3-Ra nk;c4-Am ount = c3-Am ount;c4-IDi nfor = c3-IDi nfor;p1-Free Am ount -= c3-Am ount;Customer_C oun t+;if(c3-Next = NULL) IsRepla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年核工业四一七医院招聘(22人)模拟试卷附答案详解(考试直接用)
- 2025福建厦门市集美区灌口镇双岭村职业经理人招聘1人模拟试卷有答案详解
- 2025广东韶关市乳源县东坪镇人民政府专职消防员招聘1人模拟试卷完整参考答案详解
- 2025河南洛阳市汝阳县远航劳务派遣有限公司招聘劳务派遣人员37人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025年焦作孟州市公安局招聘看护队员(劳务派遣)17名考前自测高频考点模拟试题及答案详解(网校专用)
- 2025电子工业出版社有限公司招聘应届高校毕业生15人考前自测高频考点模拟试题含答案详解
- 2025江苏连云港市赣榆区人民法院招聘劳务派遣制司法辅助人员拟聘用人员模拟试卷及答案详解(新)
- 2025江苏省人民医院宿迁医院(宿迁市第一人民医院)招聘62人模拟试卷及答案详解(名校卷)
- 2025广东省农业农村厅所属事业单位招聘27人模拟试卷及1套完整答案详解
- 2025江苏南京市建邺区平安联盟工作辅助人员招聘42人(二)模拟试卷带答案详解
- 肾上腺肿瘤切除术后护理
- (高清版)DB11∕T 2441-2025 学校食堂清洁和消毒规范
- 团支书培训大会第一讲
- CJ/T 123-2004给水用钢骨架聚乙烯塑料复合管
- 2025年北京海淀区九年级中考二模数学试卷试题(含答案详解)
- T/IAC 19.2-2018汽车后市场用配件合车规范第2部分:车辆外部照明和光信号装置
- T/CECS 10210-2022给水用胶圈电熔双密封聚乙烯复合管材及管件
- ktv营销经理雇佣合同协议
- 考18个文言虚词用法
- 2025年全运会知识竞赛试题及答案
- 2025年陕西清水川能源股份有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论