




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告设计题目: 专 业 班 级 学 生 学 号 指导教师 目 录目 录- 1 -正 文- 1 -一、需求分析- 1 -1.课设题目- 1 -2.题目要求- 1 -3.课题背景- 1 -4.系统分析- 1 -二、个人工作- 2 -1.基本实现- 2 -2.创新功能- 2 -三、概要设计- 3 -1.主程序流程图及其说明- 3 -2.子程序流程图及其说明- 3 -四、源程序- 5 -1.头文件代码- 5 -2.源文件代码- 15 -五、程序结果- 17 -1.调试分析- 17 -2.截图分析与相关说明- 17 -3.时间复杂程度分析- 22 -4.算法的改进设想- 22 -课程设计
2、体会- 23 -正 文一、 需求分析1. 课设题目航空客运订票系统2. 题目要求主要功能包括:1) 查询航线:根据客户提出终点站名输出下列信息:航班号,飞机号,星期几飞行,最近一天的航班日期和余票额。2) 承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若上有余票,则为客户办理订票手续,输出座位号;若以满员余票额少于定票额,则需要重新询问客户要求,若需要,可预约登记排队等候。3) 承办退票业务:根据客户提供的情况(日期,航班),为客户办理退票手续,然后查询航班是否有人预约登记,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则一次询问其他排队预约
3、的客户。3. 课题背景随着旅游业的逐渐的成熟发达,航空客运量大幅度的提高,国内国际的旅游航班的增加,这些都对航空的信息管理系统提出了更高的要求,所以要不断的完善更新航空售票系统,提高航空售票系统的工作效率。因此,我选这个航空订票系统来研究,加强对其的了解,并进一步加深对数据结构各种算法的理解。4. 系统分析从课程设计的题目要求可以知道,我们需要建立的是具有能对数据的插入,删除,检索功能的软件。由于乘客的数量较大且不固定,因此选择用链表来保存乘客的基本信息:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量等等,由于预约人数无法预计,队列也应以链表作存储结构。所以我们建立一个可以插入
4、和删除节点的链表,并能检索这个链表,在必要的时候将链表的内容保存到文件中。系统主要实现的操作和功能是:查询航线、订票功能、退票功能。要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。二、 个人工作拿到课设题目之后,经过仔细的研究,还是决定做航空客运订票系统,它可以使自己很好的巩固在数据结构当中所学到的知识以及各种算法,做到学以致用,并在运用的基础之上,进一步去创新。1. 基本实现1) 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,价格和剩余票额等业务。2) 承办订票业务:根据客户提出的
5、要求(终点站)查询该航班票额情况,若尚有余票,则为客户办理订票手续输出座位号;若已满员,则需重新询问客户要求。若需要,可购买下一次航班或者等待看有没有人退票;3) 承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所剩票额能满足他的要求则为他办理订票手续,否则依次询问其它排队候补的客户。2. 创新功能1) 在用户实现查询、订票、退票之后,本系统另增加了一个询问的功能,询问用户是否继续操作还是返回菜单页。这样就给用户继续进行些操作时节省了很多时间,也使系统的运行时间缩短了许多。2) 本系统增加了一个增加航线的功能,这样就
6、可以不用固定在仅有的几个航线的操作,机场可以根据自己的需求,增加或删除航线,达到了数据的方便快捷的效果。3) 此系统增加了清空系统的功能,这样可以避免若输入的信息存在很多错误的情况之下,实行清空系统时,可以达到更加理想的效果。4) 系统在菜单页面和各个操作当中都加了退出功能。退出之后可以进行其他的操作,不就必在关掉程序之后再去运行程序,若是这样的话,就不符合平常的操作习惯了。为了与实际接轨,退出功能还是很有必要去增加的。5) 对程序在运行时输入错误操作的修改,提供了一定方便条件基本上能安全的运行,具备的功能符合题目的要求。程序写的还算简练,结构清晰,各个模块的分工和功能明确。三、 概要设计1.
7、 主程序流程图及其说明主程序的流程图如下图3-1所示:航空客运订票系统1、增加航线7、清空系统8、退出系统6、退订机票5、预订机票4、删除航线3、修改航线2、查询航线 图3-1利用switch语句,用户只需根据自己的需要,输入相应的命令即可达到效果。例如:若需要查询航线时,则输入2;需要清空系统时,则输入7;若需要退出系统,则输入8。若用户输入1到8其他的数据时,则弹出信息:您输入的信息有误,请重新输入!2. 子程序流程图及其说明1) 增加航线的流程图及其说明:主要功能是把新航班信息写入新建的链表中,然后把新链表与储存航班的链表合并,得到新的航班信息,实现对新航线的增加。 增加航线的流程图如图
8、3-2所示: 1.返回菜单 2.继续操作1.增加航线开始建立新的链表新增航班信息建立新链表对新链表置空,订票表头初始化返回图3-22) 查询、修改、删除航线流程图及其说明:先输入所要查找、删除或修改的航班,然后判断此航班是否存在,如果存在,则输出相关的航班信息或者进行修改或删除航班信息,如果不存在,则退出。查询、修改、删除航线流程图如图3-3所示:1.返回菜单 2.继续操作输入航班信息、修改、删除该航班信息输入所要查找、修改、删除的航班2.查询航线 3.修改航线 4.删除航线上 地地在在在输入航班的信息输出航班信息返回YN判断航班是否存在图3-33) 订票、退票流程图及其说明:订票说明:先输入
9、目的地,找到与它的位置,若找不到则提示不存在此目的地,再判断飞往目的地的航班是否有余票,若有余票输出座位信息,没余票输出剩余票数小于定票数,选择是否排队进入候补队列。退票说明:先通过对退票人的基本信息进行查找,判断是否存在此航班和是否存在此人订票信息,如果存在则进行退票。订票、退票流程图如图3-4所示:订票、退票系统售票系统订票系统退票系统是否有票? NY售票图3-4四、 源程序1. 头文件代码头文件取名为:hangkong.h#include #include #include #include #include #define MAX 50 /定义航线量的最大值#define NULL 0
10、typedef struct Customer char Name10; /姓名int Amount; /订票量int Rank; /座位级别int Seat_No; /座位号char Flight_No6; /航班号 struct Customer *next;Customer;typedef struct Replace char Name10; int Amount; int Rank; char Flight_No6; struct Replace *next; Replace; typedef struct Flight char Des_Name10; /终点站名char Flig
11、ht_No6; /航班号char Plane_No6; /飞机号char Week_Day; /飞行日期(星期几)int Customer_Amount; /乘客数量int Free_Amount; /剩余票数 int Price3; /票价int Replace_Amount; Replace *ReplName; Customer *CustName; struct Flight *next; Flight,*PFlight;int Customer_Amount=0; struct Flight *head; struct Flight *rear; Customer *Cusrear;
12、Replace *Reprear;void FlightInsert() /增加航线Flight *p;p=new Flight;int i=0;while (i!=1)printf(请输入终点站名:n);scanf(%s,&p-Des_Name);printf(请输入航班号:n);scanf(%s, &p-Flight_No);printf(请输入飞机号:n);scanf(%s,&p-Plane_No);printf(请输入飞行周日:n);scanf(%s,&p-Week_Day);printf(请输入乘员定额:n);scanf(%d,&p-Customer_Amount);p-Free_A
13、mount=p-Customer_Amount;printf(请输入舱位等级的价格:n);printf(头等舱价格:n);scanf(%d,&p-Price0);printf(普通舱价格:n);scanf(%d,&p-Price1);printf(经济舱价格:n);scanf(%d,&p-Price2);p-ReplName=new Replace;p-CustName=new Customer;p-CustName-next=NULL;p-ReplName-next=NULL;p-Replace_Amount=0;rear-next=p;rear=p;rear-next=NUL;printf
14、(1、返回主菜单 2、继续添加n);scanf(%d,&i);void FlightDelete() /删除航线Flight *p,*q;char Flight_No6;p=head;int i=0;while (i!=1)printf(请输入需要删除的航班号:n);scanf(%s,&Flight_No);while (p-next&strcmp(p-next-Flight_No,Flight_No)p=p-next; q=p-next;if (q!=NULL)if(q-next=NULL) /当删除rear所指向的结点rear=p;p-next=p-next-next;delete q;p
15、rintf(删除成功!nn);elseprintf(你所要删除的航班不存在!nn);printf(1、返回主菜单 2、继续删除n);scanf(%d,&i);void FlightInquiry() /查询航线Flight *p,*q;char Flight_No6;p=head;int i=0;while (i!=1)printf(请输入需要查询的航班号:n);scanf(%s,&Flight_No); while (p-next&strcmp(p-next-Flight_No,Flight_No)p=p-next;q=p-next;if (q=NULL)printf(对不起不存在此航班!n
16、);elseprintf(航班号:%sn,q-Flight_No);printf(飞机号:%sn,q-Plane_No);printf(目的地:%sn,q-Des_Name);printf(飞行周日:%cn,q-Week_Day);printf(成员定额:%dn,q-Customer_Amount);printf(剩余票数:%dn,q-Free_Amount);printf(候补乘客数:%dn,q-Replace_Amount);printf(头等舱价格:%dn,q-Price0);printf(普通舱价格:%dn,q-Price1);printf(经济舱价格:%dn,q-Price2);pr
17、intf(1、返回主菜单 2、继续查询n);scanf(%d,&i);void FlightRework() /修改航线信息int Customer_Number ;Flight *p,*q;char Flight_No6;char i=0; printf(请输入需要修改的航班号:n);scanf(%s,&Flight_No); p=head;while (p-next&strcmp(p-next-Flight_No,Flight_No)p=p-next;q=p-next;if (q=NULL)printf(对不起不存在此航班!n);elsewhile(i!=9)printf(*请输入需要修改
18、的数据*nn);printf( 1、航班号 2、飞机号 n);printf( 3、目的地 4、飞行周日 n);printf( 5、成员定额 6、头等舱价格 n);printf( 7、普通舱价格 8、经济舱价格 n);printf( 9、退出 nn);printf(*n);scanf(%s,&i);switch(i)case 1:printf(请输入航班号:n); scanf(%s,&q-Flight_No);break;case 2:printf(请输入飞机号:n);scanf(%s,&q-Plane_No);break;case 3:printf(请输入目的地:n);scanf(%s,&q-
19、Des_Name);break;case 4:printf(请输入飞行周日:n); scanf(%s,&q-Week_Day);break;case 5:printf(请输入乘员定额:n);Customer_Number=q-Customer_Amount-q-Free_Amount; scanf(%d,&q-Customer_Amount);q-Free_Amount=q-Customer_Amount-Customer_Number;break;case 6:printf(请输入头等舱价格:n); scanf(%d,&q-Price0);break;case 7:printf(请输入普通舱
20、价格:n); scanf(%d,&q-Price1);break;case 8:printf(请输入经济舱价格:n);scanf(%d,&q-Price2);break;case 9:break;default:printf(您输入有误n);break;void FlightBuyticket() /订购机票int Ticket_Amount;void Buyticket(PFlight ,int );void Buyreplace(PFlight ,int ,int );Flight *p,*q;char Des_Name10;int i=2;while (i!=1)printf(请输入目的
21、地:n);scanf(%s,&Des_Name);p=head;while (p-next&strcmp(p-next-Des_Name,Des_Name)p=p-next;q=p-next;if (q=NULL)printf(对不起不存在此航班!n);elsewhile(i!=1)printf(输入需要够买的票数:n);scanf(%d,&Ticket_Amount);while(Ticket_Amount=0)printf(请输入一个非零数:n);scanf(%d,&Ticket_Amount);if (Ticket_AmountFree_Amount)Buyticket(q,Ticket
22、_Amount);elseint n;printf(剩余票数小于定票数,是否需要列入候补名单?(1、是 2、否)n);scanf(%d,&n);Buyreplace(q,Ticket_Amount,n);printf(1、返回主菜单 2、继续购买n);scanf(%d,&i);void FlightCancelticket() /退订机票void Buyticket(PFlight ,int );Flight *p,*q;Customer *h,*j;char Flight_No6;char Customer_Name10;int Replace1_Amount; int i;while (i
23、!=1)printf(请输入需要删除的航班号:n);scanf(%s,&Flight_No);p=head;while (p-next&strcmp(p-next-Flight_No,Flight_No)p=p-next;q=p-next;if(q=NULL) printf(对不起不存在此航班n);elsewhile (i!=2)printf(请输入姓名:n);scanf(%s,&Customer_Name);h=q-CustName;while (h-next&strcmp(h-next-Name,Customer_Name)h=h-next;j=h-next;if(j=NULL)print
24、f(无此人信息n);elseif(j-next=NULL) Cusrear=h; h-next=h-next-next;q-Free_Amount+=j-Amount;delete j; printf(删除成功!n);if(q-ReplName-next!=NULL)Replace1_Amount=q-ReplName-next-Amount;if (Replace1_AmountFree_Amount)Replace *rep;rep=q-ReplName-next;Customer *Cus2;Cus2=new Customer;Cus2-Seat_No=q-Customer_Amount
25、-q-Free_Amount+1;strcpy(Cus2-Flight_No, q-Flight_No );strcpy(Cus2-Name, rep-Name );Cus2-Amount=rep-Amount;Cus2-Rank=rep-Rank;printf(乘客%s已经成功买票n,rep-Name);printf(座位号为:);for(int i=1;iAmount);i+) printf(%d ,Cus2-Seat_No+);printf(n);if(q-CustName-next=NULL)Cusrear=q-CustName;Cusrear-next=Cus2;Cusrear=Cu
26、s2;Cusrear-next=NULL;elseCusrear-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL;q-Free_Amount-=rep-Amount;q-ReplName-next=q-ReplName-next-next;q-Replace_Amount-;delete rep;printf(2、退出姓名录入n);scanf(%d,&i);printf(1、返回主菜单n);scanf(%d,&i);void Flightclean() /清空系统head-next=rear-next;printf(系统已经清空!n);void Buytick
27、et(PFlight q,int Ticket_Amount) /订票时输入客户的信息int n=Ticket_Amount;Customer *Cus2;Cus2=new Customer;Cus2-Seat_No=q-Customer_Amount-q-Free_Amount+1;strcpy(Cus2-Flight_No, q-Flight_No );Cus2-Amount=Ticket_Amount;printf(请输入姓名:n);scanf(%s,&Cus2-Name);printf(请输入舱位等级:n);scanf(%d,&Cus2-Rank);printf(你的座位号为:n);f
28、or(int i=1;iSeat_No+);printf(n);if(q-CustName-next=NULL)Cusrear=q-CustName;Cusrear-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL;elseCusrear-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL;q-Free_Amount-=Ticket_Amount;void Buyreplace(PFlight q,int Ticket_Amount,int n) /退票时记录客户的信息Replace *Rep2;Rep2=new Replace;i
29、f(n=1)q-Replace_Amount+=Ticket_Amount;strcpy(Rep2-Flight_No,q-Flight_No);Rep2-Amount=Ticket_Amount;printf(请输入姓名:n);scanf(%s,&Rep2-Name);printf(请输入舱位等级(1-3):n);scanf(%d,&Rep2-Rank);if(q-ReplName-next=NULL)Reprear=q-ReplName;Reprear-next=Rep2;Reprear=Rep2;Reprear-next=NULL;elseReprear-next=Rep2;Reprea
30、r=Rep2;Reprear-next=NULL; 2. 源文件代码#includehangkong.hvoid main() /主程序printf(nnn *n); printf( -n); printf( *nnnn);Cusrear=new Customer;Reprear=new Replace;head=rear=new Flight;head-next=NULL;void FlightInsert(); /增加航线void FlightDelete(); /删除航线void FlightInquiry(); /查询航线void FlightRework(); /修改航线void F
31、lightBuyticket(); /预定机票void FlightCancelticket(); /退定机票void Flightclean(); /清空系统char i=0;while (i!=8)printf(*航空客运订票系统*nn);printf( 1、增加航线 5、预订机票n);printf( 2、查询航线 6、退订机票n);printf( 3、修改航线 7、清空系统n);printf( 4、删除航线 8、退出系统n);printf(*n);scanf(%s,&i);switch(i)case 1:FlightInsert();break;case 2:FlightInquiry(
32、);break;case 3:FlightRework();break;case 4:FlightDelete();break;case 5:FlightBuyticket();break;case 6:FlightCancelticket();break;case 7:Flightclean();break;case 8:;printf(谢谢使用!n);break;default:printf(您输入的信息有误,请重新输入!n);break;五、 程序结果1. 调试分析编成后出现错误经过调试检查发现switch语句中漏写了break语句,Switch语句作为选择语句,在此程序中,要实现其选择执行的功能,在每个选择条件后面必须有break语句跟随,否则程序将运行错误,经检查漏洞后加以改正。在输入航班号时,应输入scanf(%s,&q-Flight_No);要注意的是&符号不能漏掉,虽然漏掉后它不会提示错误,但在运行的时候还是会出现错误的。因我们输入的终点站名、航班号、飞机号、飞行日期都是以字符串的形式给出,因此应以scanf(%s,&p-Des_Name);的格式给出,否则会出现错误。2. 截图分析与相关说明菜单系统如下图5-1所示:图5-1按下1时,则是增加航线,用户只需要把所要增加的航线输入其中,就可以保存在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兵团律师管理办法
- 兽药生产管理办法
- 内控循环管理办法
- 军品研制管理办法
- 军队科研管理办法
- 农场绿化管理办法
- 农村人饮管理办法
- 农村小孩管理办法
- 农村社区管理办法
- 农经账务管理办法
- 2025年应急管理普法知识竞赛题(附答案)
- 肾肿瘤考试题库及答案
- 2025年中小学教师信息技术应用能力提升培训测试题库及答案
- 肾结石健康科普指南
- 中小学美术教师招聘考试题及答案(5套)
- 二零二五年度农村自建房买卖合同A3版(含土地使用)
- 村子绿化设计方案(3篇)
- 2025浙能集团甘肃有限公司新能源项目招聘22人笔试历年参考题库附带答案详解
- GB/T 45805-2025信控服务机构分类及编码规范
- DB3309-T 112-2024 嵊泗贻贝苗种包装运输通.用技术条件
- 2025年中国辐射监测及检测仪器行业投资潜力分析及行业发展趋势报告
评论
0/150
提交评论