




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC+航空订票系统数据库设计-课程设计VC+航空订票系统数据库设计目录一 绪论1二 需求分析1三 概要设计2四 详细设计4五 调试分析19六 测试结果20七 用户使用说明29小结29参考文献30一 绪论 作为软件学院学习计算机专业的我们,在大一学年以及大二的第二学年里,学习并了解了诸如像Visual Basic语言、Java语言等一些计算机语言。但是,学习这些语言仅仅是了解了这些语言的语法及语言特性等关于这些语言本身的一些知识。在编程思想方面,并未进行过深入的训练。而在本学期,我们开设了数据结构一课。我们知道,自计算机诞生以来,其发展的飞速已远远超出人们对它的预料,计算机的应用范围扩展之迅猛也是超出人们想象的。计算机的应用已不再局限于科学计算,而更多地用于控制、管理及数据处理等非数值计算的处理工作。与此相应,计算机加工处理的对象由纯粹的数值发展到字符、表格和图像等各种具有一定结构的数据,这就给程序设计带来一些新的问题。如何编写出一个“好”的程序是计算机工作者越来越关注的问题。而我们本学期所学的数据结构正是研究这非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。因此,本课程的设立使我们从本质上学习了计算机语言,更能让我们将生活中的一些实际问题,通过建立数学模型、设计算法、写出程序、得出结果等一系列解决问题的方法来解决。为了检验自己对数据结构该课程的掌握程度,因此依靠本次课程设计对此有个大概的了解。对于课程设计中出现的问题及错误,还请老师及广大同学批评、指正。谢谢!二 需求分析本次课程设计利用C+语言来编写,其运行平台为Visual C+。(一)问题描述:航空客运订票业务活动包括:查询航线、客票预定和办理退票等。设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。(二)基本要求:1每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);2作为示意系统,全部数据可以只放在内存中;3查询能实现的操作和功能如下:(1)查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;(2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。若需要,可登记排队候补;(3)承办退票业务:根据客户的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队,首先询问排在第一的客户,若所退票数满足他的要求,则为他办理订票手续,否则一次询问其他排队候补的客户。(三)数据测试:可参照本次课设报告的“测试结果”一节(P)中使用到的数据进行测试三 概要设计本次数据结构课程设计所制作的航空客运订票系统主要运用了链式存储结构来实现。我们知道线性表以及队列的存储结构主要用到了链式结构存储,因而此系统也应考虑使用这两种存储方式。在航班信息方面,要对航班进行添加、删除、查询等操作。由于链表的优势就在于便于进行添加、删除和查找,因此有关航班信息方面的部分可以由链表来实现。但是为了更便于添加和删除,因此为链表设置了首、尾指针。而对于订票、退票来说,其中要讲一个先来后到的道理。基于这一点的要求,队列的存储方式再合适不过了,其“先进先出”(FIFO)的特点恰恰可以满足订票、退票的要求。在结构定义方面,本系统定义了四个结构,分别用来储存航班信息、乘客信息、替补乘客信息以及结点信息。而在航班信息定义中,分别将乘客信息、替补乘客信息引入其中,以供储存乘客信息和替补乘客信息。根据本系统中的功能以及所定义的数据结构,特编写如下函数:1FlightInsert() /添加航班信息2FlightSearch() /查询航班信息3FlightRework() /修改航班信息4FlightDelete() /删除航班信息5FlightBuyticket() /订票6FlightCancelticket()/退票7Buyticket(PFlight q,int Ticket_Amount)/利用队列买票8Buyreplace(PFlight q,int Ticket_Amount,int n)/利用队列进行替补买票9MainMenu() /主菜单10Main() /主函数各个函数间的关系如下:837VC+航空订票系统数据库设计四 详细设计本航空客运售票系统分为两个文件:1. 头文件Ticket.h,用来存放系统中数据结构的结构体,以及所要到的方法及函数。 2.C+文件 Ticket.cpp.,本文件主要是本系统的主函数,其中调用头文件,来实现系统的功能。具体实现如下:(一)Ticket.h,:在前文中已介绍过,本文件是头文件,将售票系统的数据中的结构体定义在其中,并且利用所定义的结构来编写函数、方法来实现系统的功能。首先采用链式结构,定义出三个结构体:1航线的结构体:typedef struct Flight /航线信息char Des10; /终点站名char FlightNum10; /航班号char PlaneNum10; /飞机号char 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; /座位号char FlightNum10; /所定航班号struct Customer *next;Customer;3替补乘客结构体:typedef struct Replace /替补乘客信息char Name10; /姓名int Amount; /定票数int Level; /舱位等级char FlightNum10; /所定航班号struct Replace *next;Replace;以上三个结构体是以乘客信息、替补乘客信息为基础、再此之上有定义了飞机航线的结构体以及结点类型指针的结构体。并在后者结构中引入了前两种结构体。并且单独定义了两个指向Flight的指针,作为头只指针和尾指针:Flight *head; /建立航线头结点Flight *rear; /建立航线尾结点 以及乘客队列的指针: Customer *Cusrear; Replace *Reprear;为今后的程序设计奠定了基础。其次,编写实现各个功能的函数与方法:1MainMenu()系统主菜单此函数设计了本系统的界面,是程序的开始,具体实现如下:void MainMenu()char i=0;while (i!=8)cout *南昌航空公司客运定票系统V1.0*endl;cout * 1、增加航线 5、预订机票 *endl;cout * 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 8:;break;default:couterrorn;break;2void FlightInsert()添加航班信息此方法主要用到链表的思想,类似于链表中的插入属性。与一般链表不同的是,此方法设置了一个表尾指针,便于航班信息的添加,具体实现如下:void FlightInsert() /添加航班信息 Flight *p; p=new Flight; cout请输入终点站名:p-Des; cout请输入航班号:p-FlightNum; cout请输入飞机号:p-PlaneNum; cout请输入飞行周日:p-Week; cout请输入乘员定额:p-Ration; 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;3FlightDelete()删除航班信息类比于上述的添加航班信息,删除航班同样是依靠了链表的思想来完成。不同的是,在删除方面用到了表头指针这个工具,来定位索要删除的航班信息,具体实现如下:void FlightDelete() /删除航班信息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;VC+航空订票系统数据库设计 q=p-next;if (q!=NULL)if(q-next=NULL) rear=p; p-next=p-next-next;delete q; elsecout你所要删除的航班不存在endl;cout1、退出2、继续i;4FlightLookup()查询航班信息其实,查询航班的原理与删除原理相似,最中心的环节就是现对指定的航班进行定位。与删除不同的是,查询不涉及到指针的变换,仅仅输出要查询的信息就可以了,具体实现如下:void FlightLookup() /查询航班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)cout对不起不存在此航班endl;elsecout航班号:FlightNumendl;cout飞机号:PlaneNumendl;cout目的地:Desendl;cout飞行周日:Weekendl;cout成员定额:Rationendl;cout剩余票数:FreeTicketendl;cout候补乘客数:ReplacePasendl;cout头等舱价格:Price0endl;cout普通舱价格:Price1endl;cout经济舱价格:Price2endl; cout1、返回主菜单 2、继续i;5FlightRework()修改航线信息在修改航线信息方面,中心思想依旧类似于删除和查找。只不过定位到所需信息之后要做的是重新给这些信息赋值。在功能方面,为了使用户便于操作,因此需要一个界面来使程序更直观化一些,具体实现如下:void FlightRework() /修改航线信息int Customer_Number ;Flight *p,*q;char FlightNum10;char i=0;p=head;cout请输入需要修改的航班号:FlightNum;while (p-next&strcmp(p-next-FlightNum,FlightNum)p=p-next;q=p-next;if (q=NULL)cout对不起不存在此航班endl;elsewhile(i!=9)cout *请输入需要修改的数据*endl;cout *1、航班号 2、飞机号 *endl; cout *3、目的地 4、飞行周日 *endl;cout *5、成员定额 6、头等舱价格*endl;cout *7、普通舱价格 8、经济舱价格*endl; cout * 9、退出 *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;break;case 7:cout请输入普通舱价格:q-Price1;break;case 8:cout请输入经济舱价格:q-Price2;break; case 9:break; default:couterrorn;break;6FlightBuyTicket()订票订票是本系统的核心功能,本系统的一切功能都是围绕“订票”这个关键词来进行的。用户确定所要乘坐的航班之后,进行订票,如果航班中的空余票数大于用户所要订的票数,则订票成功。否则询问用户是否进入候补乘客名单。其原理是运用链表的来添加乘客信息,运用队列来使替补乘客入队。其中,还调用了另外两函数:BuyTicket()和Buyreplace()来实现订票成功和进入替补乘客名单。具体实现如下:void FlightBuyTicket() /订票int Ticket_Amount;void BuyTicket(PFlight ,int );void Buyreplace(PFlight ,int ,int );Flight *p,*q;VC+航空订票系统数据库设计char Des10;int i=2;while (i!=1)cout请输入目的地:Des; p=head;while (p-next&strcmp(p-next-Des,Des)p=p-next;q=p-next;if (q=NULL)cout对不起不存在此航班endl;elsewhile(i!=1)cout输入需要够买的票数Ticket_Amount;while(Ticket_Amount=0)cout请输入一个非零数:Ticket_Amount;if (Ticket_AmountFreeTicket)BuyTicket(q,Ticket_Amount); /买票,详细介绍见下文elseint n;cout剩余票数小于定票数,是否需要列入候补名单?(1、是 2、否)n;Buyreplace(q,Ticket_Amount,n); /进入替补名单,详细介绍见下文cout1、返回主菜单 2、继续i;7FlightCancelTicket()退票作为人性化的航空客运订票系统,不但要实现订票,还要实现退票。在退票方面,仍旧是利用链表,将乘客信息删除。但删除之后,如若有替补乘客,还要使其依照进入替补乘客的队列的次序出队来实现订票。其具体实现代码如下:void FlightCancelTicket() /退票void BuyTicket(PFlight ,int );Flight *p,*q;Customer *h,*j;char FlightNum6;char Customer_Name10;int Replace1_Amount; /候补第一个人的定票数int i;while (i!=1)cout请输入需要退定的航班号:FlightNum;p=head;while (p-next&strcmp(p-next-FlightNum,FlightNum)p=p-next;q=p-next;if (q=NULL)cout对不起不存在此航班endl;elsewhile (i!=2)cout请输入姓名:Customer_Name;h=q-CustName;while (h-next&strcmp(h-next-Name,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; cout删除成功!ReplName-next!=NULL)Replace1_Amount=q-ReplName-next-Amount;if (Replace1_AmountFreeTicket)Replace *rep;rep=q-ReplName-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-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL;elseCusrear-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL;VC+航空订票系统数据库设计q-FreeTicket-=rep-Amount;q-ReplName-next=q-ReplName-next-next;q-ReplacePas-;delete rep;cout2、退出姓名录入i;cout1、返回主菜单i;8BuyTicket(PFlight q,int Ticket_Amount)买票作为订票功能实现的核心之一,其思想是利用链表结构将买票乘客的信息添加到表中,具体实现如下:void Buyticket(PFlight q,int Ticket_Amount) /买票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请输入舱位等级: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;elseCusrear-next=Cus2;Cusrear=Cus2;Cusrear-next=NULL; q-FreeTicket-=Ticket_Amount;9Buyreplace (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=Ticket_Amount;cout请输入姓名:Rep2-Name;cout请输入舱位等级(1-3):Rep2-Level;if(q-ReplName-next=NULL)Reprear=q-ReplName;Reprear-next=Rep2;Reprear=Rep2; Reprear-next=NULL;elseReprear-next=Rep2; Reprear=Rep2;Reprear-next=NULL;10Flightclean()系统清空本方法是将航班信息清空,主要思想是将头指针赋予下一个结点,然后将原来的头指针删除,具体代码如下:void Flightclean()head-next=rear-next;cout系统已经清空!next=NULL; void FlightInsert(); void FlightDelete();void FlightLookup();void FlightRework();void FlightBuyticket();void FlightCancelticket();void Flightclean();void MainMenu();MainMenu();至此,本航空客运订票系统的详细设计介绍完毕。五 调试分析在第一次调试时,当使用删除航班信息或清空系统时,虽然完成了指针的变换,但却没有将所要删除的结点彻底删除,还应用到delete()语句还完成。但在尝试改进清空语句时,本想利用头结点的指针变换再结合delete()语句来一个个删除结点,但是所使用的 while(head-next!=rear-next)head-next=head;delete(head);语句在运行时,出现了错误,在此就保留了起初使用的语句。VC+航空订票系统数据库设计六 测试结果运行后,界面如图: (一)添加航线在以上界面中,先键入一,按照提示分别输入信息,如下图所示: (二)查询航线返回主菜单后,键入2,进行查询,按照提示出入信息,若输入的航班信息存在,如图:若输入的信息不存在,则如图:返回主菜单后,操作其他功能(三)修改航线在主菜单下,键入3后,根据提示输入航班号,出现另一个菜单,如图: 根据提示,修改航班信息,如下图所示:返回主菜单,查询已修改的航班信息,结果吻合,如图示:(四)删除航线在主菜单下,键入4,根据提示输入航班号后,进行删除,如图:之后,退出到主菜单,进行查询,可以发现刚才的操作已将航班信息删除,如图:(五)预定机票先重复(一)操作,添加目的地为太原的航班,然后执行预定机票操作,根据提示,分别令三个乘客购票,第一个乘客将票买光,第二位乘客与第三位乘客座位替补乘客候票,如图:(六)退订机票在主菜单下,键入6,令刚才的三名乘客中的第一名退票,退票后第二名乘客购买成功,但是由于剩票不足以满足第三位乘客,因此第三位乘客仍无法买票,如图:(七)清空系统在主菜单下,键入7,执行清空,如图:在清空后,查询航班,根据提示输入航班号0351,查询结果如图:(八)退出系统在主菜单下,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年感控医生护士院感知识培训考试试题(附答案)
- 临床科室危急值考试题库(附答案)
- cad毕业论文题目
- 毕业论文有专业规定吗
- 2025年汽车融资租赁合作协议书
- 2024年院感培训考核试题(附答案)
- 销售类专业毕业论文
- 物流专业仓储毕业论文
- 2025医院医疗纠纷防范管理制度
- 2025年公用设备工程师(给排水)专业技术及理论知识考试题库与答案
- 2025年中国农业银行宁夏回族自治区分行春季招聘58人笔试模拟试题参考答案详解
- 医院二甲设备管理PDCA应用
- 2025年辽宁省地质勘探矿业集团有限责任公司校园招聘笔试备考题库附答案详解
- 河南大学河南戏剧学院招聘考试真题2024
- 《无人机结构与系统(第2版)》全套教学课件
- 胃肠外科健康教育
- GB/T 45911-2025人工影响天气作业用弹药存储安全要求
- 排污许可证审核及环境应急管理服务方案投标文件(技术方案)
- 慢性支气管炎个案护理
- 驻京信访工作组管理办法
- 尿道下裂的诊断及分型
评论
0/150
提交评论