飞机订票系统模拟.doc

上传人:PIYPING 文档编号:11084239 上传时间:2021-06-28 格式:DOC 页数:47 大小:580KB
返回 下载 相关 举报
飞机订票系统模拟.doc_第1页
第1页 / 共47页
飞机订票系统模拟.doc_第2页
第2页 / 共47页
飞机订票系统模拟.doc_第3页
第3页 / 共47页
飞机订票系统模拟.doc_第4页
第4页 / 共47页
飞机订票系统模拟.doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《飞机订票系统模拟.doc》由会员分享,可在线阅读,更多相关《飞机订票系统模拟.doc(47页珍藏版)》请在三一文库上搜索。

1、摘 要随着时代的进步社会分工的不断细化,各个行业联系的不断密切,人们出行越来越多,出行的方式也是百花齐放,作为空中重要的交通工具,飞机航空系统也在不断地得到优化,其中重要的一项就是飞机订票系统,因此好的订票系统关系着人们的日常出行方便与否,设计并编制出符合人们需要的航空订票系统是一项繁重而艰巨的任务,需要我们认真去完成。而计算机科学日渐成熟,其强大功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行信息化管理已成为衡量各个国家科学化和现代化的重要标志,而交通方式的全面自动化、信息化则是其中重要的组成部分,在很大程度上影响着企业的经济效益和社会效益。因此,本

2、文采用C作为前台开发工具,VC6.0作为程序代码的实现,旨在实现对现有飞机订票系统中遇到的各种情况进行良好的改进,是作为嵌入式系统应用于机场的良好软件。关键词:信息化管理;C;飞机订票系统AbstaractAlong with the progress of The Times constantly refined social division of labor, various industries contact closely, more and more people travel, travel mode is flowers, as an important means of t

3、ransportation, air plane air systems are also constantly optimized, one of the important item is the plane reservation system, so good relationship with Peoples Daily travel booking system is convenient or not, design and develop the airline reservation systems meets peoples needs is a heavy and ard

4、uous task, we need to seriously to complete.Computer science increasingly mature, its strong function has deep understanding by people, it entered the human society each domain and is playing an increasingly important role. With computer information management has become a scientific measure of each

5、 country and an important symbol of modernization, and the means of transportation comprehensive automation, informationization is the important part of, to a large extent, affect the enterprises economic benefit and social benefit. Therefore, this article USES the C as a front-end development tool,

6、 VC6.0 as the implementation of the program code, to achieve the existing situations encountered in the plane reservation system improvement, good is good software as an embedded system is applied to the airport.Key words: information management; C;The plane reservation system目 录1. 需求分析11.1题目描述11.2设

7、计内容11.3 基本要求11.3.1 输入输出的形式和输入值的范围11.3.2 功能要求22. 概要设计32.1系统功能模块设计32.2 数据结构42.3 各模块的调用关系52.3.1 录入航班信息模块52.3.2 客户订票模块52.3.3 客户退票模块52.3.4 查询航班模块62.3.5 查询订单模块62.3.6 修改航班模块62.4 算法设计63. 详细设计83.1 录入航班信息模块83.2 顾客订票模块103.3 顾客退票模块133.4 查询航班模块143.5 查询订单模块163.6 修改航班模块174. 调试与分析194.1 合法数据的测试194.2 非法数据的测试134.3算法的时

8、间复杂度254.4算法的改进设想255. 总结26参考文献27致 谢28附录291. 需求分析1.1题目描述基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票,退票以及航班的查询和修改等基本功能。本课程设计的题目为:飞机订票系统模拟。1.2设计内容使用链式存储结构存储航班信息及客户信息。主要功能有:录入(录入航班情况);查询航线(根据旅客提出的终点站名输出:航班号、飞机号、日期、余票额);承办订票业务(根据客户提出的要求查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票

9、额,则需重新询问客户要求);承办退票业务(根据客户提供的情况 (日期、航班),为客户办理退票手续,然后查询该航班是否有人预约登记,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询间其它排队预约的客户);修改航班信息(当航班信息改变可以修改航班数据);1.3 基本要求1.3.1 输入输出的形式和输入值的范围录入航班信息时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1

10、”表示继续录入航班信息,“0”表示停止录入航班信息)。客户订票时,需要输入起飞抵达城市,然后选择航班进行查询,选择航班时需要输入航班号,值为字符串。客户退票时,需要输入姓名,证件号进行退票操作,值为字符串。查询某个航班的情况时,需要输入航班号,值为字符串;在查询某个航线的情况时,还可以通过输入起飞抵达城市来查询,值为字符串。查询某个订单时,需要输入订单号,值为整型(int);或者需要输入客户姓名和证件号,值为字符串。修改航班时,需要输入字符型数据选择进行何种修改操作;增加航班时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输

11、入航班是否满仓,值为整型(int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息);删除航班时,需要输入要删除的航班的航班号;修改航班时间时,需要输入要修改的航班的航班号,修改后的航班起飞时间和抵达时间。在所有操作后的输出中都显示操作是否正确以及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。录入航班情况时,输出显示添加航班信息是否成功。客户订票时,当客户输入起飞抵达城市后,输出可供客户选择的航班信息;客户选择了航班后,输入提示信息告知用户订票是否成功。客户

12、退票时,输出客户退票成功或者无此客户,无法退票。查询航班时,输出显示对应的航班信息,或者输出提示信息告知没有相应的航班信息。查询订单时,输出显示对应的订单信息,或者输出提示信息告知没有相应的订单信息。修改航班时,输出对应的提示的信息,提示操作是否成功。1.3.2 功能要求(1)可以录入航班情况,数据存储在一个数据文件中;(2)可以查询某个航线的情况:输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓;输入起飞抵达城市,查询飞机航班情况;(3)可以订票,订票情况存在一个数据文件中(如果该航班已经无票,提供相关可选航班);(4)可退票并且退票后修改相关数据文件;(5)客户

13、资料:姓名,证件号,订票数量及航班情况,订单要有编号;(6)修改航班信息,当航班信息改变可修改航班数据文件;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。2. 概要设计2.1系统功能模块设计本系统分为六个模块:增加航班模块、浏览航班模块、查找航班模块、航班排序模块、订票模块、退票模块。则得到的系统功能模块图如2.1所示:总体设计图录入航班信息模块订票模块退票模块查询航班模块查询订单模块修改航班信息模块退出浏览全部航班信息按航班号查询航班信息按起飞抵达城市查询航班信息浏览全部订单信息按订单号查询订单信息按客户姓名证件号查询订单信息增加航班信息删除航班信息修改航

14、班起飞抵达时间图2.1系统功能模块图2.2 数据结构(1)航班的信息:航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞时间、降落时间、起飞城市、抵达城市、航班票价、票价折扣、确定航班是否满仓和空座数九个数据项:表2.1航班信息数据结构航班号起飞时间降落时间起飞城市抵达城市航班是否满仓空座数票价票价折扣字符串字符串字符串字符串字符串整数(int)整数(int)浮点数(float)浮点数(float)单链表如下:D1D2D3 h每个结点包括数据域和指针域:数据域指针域C语言描述如下:typedef struct flightnodechar air_num10;/航班号c

15、har start_time15;/起飞时间char end_time15;/抵达时间char start_place20;/起飞城市char end_place20; /降落城市int left; /空座数float price; /票价float price_discount;/票价折扣int isFull; /航班是否满仓struct flightnode *next;/指向下一个结点flightnode;/航班结点(2)客户的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号、航班号、订票数量和订单号五个数据项:表2.2客户资料数据结构姓名证件号航班号订

16、票数量订单号字符串字符串字符串整数(int)整数(int)每个结点包括数据域和指针域:数据域指针域C语言描述如下:typedef struct passengernode/定义客户资料结点char name20; /姓名char ID_num20; /证件号char flight_num10;/航班号int order_num; /订单号int ticket_num; /订票数量struct passengernode *next;/指向下一个结点passengernode;(3)客户链表:每个数据元素包括头指针和尾指针两个数据项:每个结点包括两个指针域:头指针域尾指针域C语言描述如下:typ

17、edef struct passengerListpassengernode *head;passengernode *rear;passengerList;2.3 各模块的调用关系2.3.1 录入航班信息模块void add_flight(flightnode *&h)调用void insert_flight(flightnode *&h,char* flight_num,char* start_place,char* end_place,char* start_time,char* end_time,int left,float price,float price_discount,int

18、 isFull)函数,将新航班结点插入航班链表中。2.3.2 客户订票模块int book(flightnode *&h,passengerList *&PList)函数调用int insert_passenger(passengernode *&h,char *name,char *ID_num,char *flight_num,int ticket_num,int order_num)函数,将新客户结点插入客户链表中。2.3.3 客户退票模块void cancel(passengerList *&PList,flightnode *&h)函数调用int delete_passenger(p

19、assengerList *&PList,flightnode *&h,char *name,char *ID_num)函数,将相应的顾客结点删除,并修改相应的航班信息。2.3.4 查询航班模块void flight_check(flightnode *h)调用void check_all_flight(flightnode *h)函数进行所有航班信息浏览,调用int place_check(flightnode *h,char *start_place,char *end_place)函数按起飞抵达城市对航班进行查询,调用int flight_num_check(flightnode *h,

20、char *flight_num)按航班号对航班进行查询。2.3.5 查询订单模块void passenger_check(passengerList *PList)调用void check_all_passenger(passengerList *PList)函数进行所有订单信息浏览,调用int order_num_check(passengerList *PList,int order_num)函数按订单号对订单进行查询,调用int ID_name_check(passengerList *PList,char *name,char *ID_num)按客户姓名和证件号对订单进行查询。2.3

21、.6 修改航班模块增加航班时,void modify_flight(flightnode *&h,passengerList *&PList)函数调用void add_flight(flightnode *&h)函数,将新航班信息结点插入航班链表中。删除航班时,void modify_flight(flightnode *&h,passengerList *&PList)函数调用void delete_flight(flightnode *&h,passengerList *&PList)函数将相应的航班信息删除,并删除相应的订单信息。修改航班时间时,void modify_flight(fl

22、ightnode *&h,passengerList *&PList)函数修改指定航班的起飞抵达时间。2.4 算法设计void init_flight(flightnode *&h):要建立一个以h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表。void init_passengerList(passengerList *&pList):建立一个带有头指针和尾指针的空链表,存储带有顾客信息的结点。void save_flight(flightnode *h):保存航班信息到指定数据文件中。void load_flight(flightnode *&h):从存储航班信息的文件导入

23、航班信息到航班链表中。void save_passenger(passengerList *PList):保存客户信息到指定数据文件中。void load_passenger(passengerList *&PList):从存储客户信息的文件导入客户信息到客户链表中。void add_flight(flightnode *&h):录入航班信息后调用insert_flight函数增加航班。void insert_flight(flightnode *&h,char* flight_num,char* start_place,char* end_place,char* start_time,cha

24、r* end_time,int left,float price,float price_discount,int isFull):在录入航班情况或增加新的航班后,将新的航班结点插入到航线链表中。int book(flightnode *&l,passengerList *&PList):要完成客户订票,将客户结点插入客户链表中,并修改相应的航班信息。void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num):在顾客

25、订票后,将该顾客结点插入到顾客链表中,并修改相应的航班信息。void find_same_flight(flightnode *l,char *flight_num):在客户订票时,当客户输入的航班号对应的航班已满仓时,提供其他可选航班并输出显示。void cancel(passengerList *&PList,flightnode *&h):完成客户退票,将客户的订单从客户链表中删除,并修改相应的航班信息。int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num):按照要退票的顾客的姓

26、名和证件号查找该顾客结点,进行删除操作。void flight_check(flightnode *h):选择使用何种方式对航班信息进行查询。void check_all_flight(flightnode *l):浏览所有航班信息。int place_check(flightnode *l,char *start_place,char *end_place):按照起飞抵达城市查询航班信息。int flight_num_check(flightnode *l,char *flight_num):按照航班号查询航班信息。void passenger_check(passengerList *PL

27、ist):选择使用何种方式对订单信息进行查询。void check_all_passenger(passengerList *PList):浏览所有订单信息。int order_num_check(passengerList *PList,int order_num):按订单号查询订单信息。int ID_name_check(passengerList *PList,char *name,char *ID_num):按客户姓名和证件号查询订单信息。void modify_flight(flightnode *&h,passengerList *&PList):修改航班信息,包括添加航班信息,删

28、除航班信息,修改航班起飞抵达时间。void delete_flight(flightnode *&h,passengerList *&PList):按照某个航班号删除航班结点。3. 详细设计3.1 录入航班信息模块在主函数中输入“1”,调用void add_flight(flightnode *&h)函数,此函数将航班指针*p指向已存在航班链表*h的头结点,利用for(;p-next!=NULL;p=p-next)使*p指向航线链表的最后一个结点,然后让用户输入航班信息,然后调用void insert_flight(flightnode *&h,char* flight_num,char* s

29、tart_place,char* end_place,char* start_time,char* end_time,int left,float price,float price_discount,int isFull)函数,用malloc函数申请一个航班结点,并用指针*q指向,将航班信息赋到新申请的结点中,p-next=q;p=p-next;该操作将该结点插入航班链表中。其流程图如3.1所示:YYflightnode *p=h;p-next!=NULLp=p-nextmark=1输入航班信息调用insert_flight函数完成航班信息的录入是否继续录入航班信息“是”输入“1”mark=

30、1“否”输入“0”mark=0开始结束NN图3.1录入航班信息模块流程图3.2 顾客订票模块在主函数中输入“2”,调用int book(flightnode *&h,passengerList *&PList)函数完成客户的订票。用航班指针*p指向已存在航班链表*h的头结点的下一个结点,请客户输入起飞抵达城市,分别存于start_place和end_place中。调用int place_check(flightnode *l,char *start_place,char *end_place)函数,如果函数返回“1”则请客户输入要订的航班号,如果输入的航班号不存在,输出提示信息,如果航班存在则

31、提示客户输入订的票数、客户的姓名和证件号,调用void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)函数,定义航班指针*p=h-next,使用for循环匹配flight_num和p-flight_num,找到后,执行p-left=p-left-ticket_num,修改相应航班的空座数。用malloc函数申请一个客户结点,并用指针*q指向,将客户信息和航班号赋到新申请的结点中,PList-rear-next=q;

32、PList-rear=q;该操作将该结点插入客户链表中。如果该航班已满仓或该航班的空座数不够,输出可供选择的航班,让客户选择,之后调用void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)函数将客户结点插入客户链表中. 其流程图如3.2所示:YN输入航班号,存入flight_num开始flightnode *p=h-next;输入起飞抵达城市,分别存于start_place和end_placeplace_chec

33、k(h,start_place,end_place)=1N航班号不为空!输入航班号,存入flight_numflight_num=NULLYYNYp!=NULLstrcmp(p-flight_num,flight_num)=0N输入姓名、证件号、订票数,分别存入name、ID_num、ticket_numY航班号不为空!输入航班号,存入flight_numname=NULLN接上页:返回“1”YN证件号不为空!输入证件号,存入ID_numID_num=NULLNN订票数不为空!输入订票数,存入ticket_numticket_num=NULLY调用insert_passengerList函数完

34、成客户订票p-left0&p-left=ticket_numY显示其他可选航班供客户选择调用insert_passengerList函数完成客户订票p=p-next返回“0”结束图3.2顾客订票模块流程图3.3 顾客退票模块在主函数中输入“3”,调用void cancel(passengerList *&PList,flightnode *&h)函数完成客户的退票。提示客户输入客户的姓名和证件号以及要退的航班号,此函数再调用int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num,char

35、 *flight_num)函数,用客户结点指针*pr等于已存在客户链表结点Plist的头指针,相当于将*pr指向客户链表的头结点,用客户结点指针*p指向pr的下一个结点。使用while循环寻找匹配姓名、证件号、航班号的客户结点,找到后定义航班指针*f=h-next,使用for循环找到匹配航班号的航班结点,执行f-left=f-left+p-ticket_num,修改退票后相应航班结点的空座数,之后执行pr-next=p-next;free(p);删除要退票的客户订单信息。如果没有找到匹配的客户结点,输出提示信息。其流程图如下3.3和3.4所示:开始输入姓名、证件号、航班号,分别存于name、I

36、D_num、flight_num调用delete_passenger函数完成客户的退票结束图3.3顾客退票模块流程图开始passengernode *pr=PList-headpassengernode *p=pr-nextstrcmp(name,p-name)=0&strcmp(ID_num,p-ID_num)=0&strcmp(flight_num,p-flight_num)=0NY返回“1”返回“0”结束Npr-next=p-nextfree(p)p!=NULLpr=pr-next;p=pr-next;flightnode *f=h-nextf!=NULL!YYNf=f-nextstrc

37、mp(flight_num,f-flight_num)=0Nf-left=f-left+p-ticket_num;Y图3.4 delete_passenger函数的流程图3.4 查询航班模块在主函数中输入“4”,调用void flight_check(flightnode *h)函数选择使用哪一种查询方式进行查询。提示客户输入查询方式,如客户输入“1”,则调用int flight_num_check(flightnode *l,char *flight_num)函数按航班号对航班进行查询,提示客户输入航班号,存于flight_num中;如客户输入“2”,则调用int place_check(f

38、lightnode *l,char *start_place,char *end_place)函数按起飞抵达城市对航班进行查询,提示客户输入起飞抵达城市,分别存于start_place和end_place中;如客户输入“3”,则调用void check_all_flight(flightnode *l)函数浏览全部航班信息。在int flight_num_check(flightnode *l,char *flight_num)函数中,定义航班指针*p=h,使用for循环匹配flight_num和p-flight_num,找到匹配的航班节点后,输出该航班的所有信息。在int place_che

39、ck(flightnode *l,char *start_place,char *end_place)函数中,定义航班指针*p=h,使用for循环寻找匹配start_place和start_place的结点,找到匹配的航班结点后,输出该航班的所有信息。在void check_all_flight(flightnode *l)函数中,定义航班指针*p=h,使用for循环输出所有航班信息。其流程图如3.5和3.6所示:开始请客户选择查询方式,存于a中根据a的值进行选择a=1a=3a=2调用flight_num_check函数进行查询调用check_all_flight函数进行查询调用place_c

40、heck函数进行查询结束图3.5查询航班模块流程图YN开始flightnode *p=hp=p-nextp!=NULLstrcmp(p-flight_num,flight_num)=0输出航班信息,返回“1”返回“0”结束NY图3.6 flight_num_check函数的流程图3.5 查询订单模块在主函数中输入“5”,调用void passenger_check(passengerList *PList)函数选择使用哪一种查询方式进行查询。提示客户输入查询方式,如客户输入“1”,则调用int ID_name_check(passengerList *PList,char *name,char

41、 *ID_num)函数按客户的姓名和证件号对订单进行查询,提示客户输入姓名和证件号,分别存于name和ID_num中;如客户输入“2”,则调用int order_num_check(passengerList *PList,int order_num)函数按订单号对订单进行查询,提示客户输入订单号,存于order_num中;如客户输入“3”,则调用void check_all_passenger(passengerList *PList)函数浏览全部订单信息。在int ID_name_check(passengerList *PList,char *name,char *ID_num)函数中,

42、定义客户指针*p= PList-head-next,使用for循环寻找匹配name和ID_num的结点,找到匹配的订单节点后,输出该订单的所有信息。在int order_num_check(passengerList *PList,int order_num)函数中,定义客户指针*p=PList-head-next,使用for循环寻找匹配order_num的结点,找到匹配的订单结点后,输出该订单的所有信息。在void check_all_passenger(passengerList *PList)函数中,定义客户指针*p=PList-head-next,使用for循环输出所有订单信息。其流程

43、图如3.7和3.8所示:开始请客户选择查询方式,存于a中根据a的值进行选择a=1a=3a=2调用name_ID_check函数进行查询调用check_all_passenger函数进行查询调用order_num_check函数进行查询结束图3.7查询订单模块流程图YN返回“0”输出航班信息,返回“1”结束p=p-nextp!=NULLp-order_num=order_numNY开始passengernode *p=PList-head-next图3.8 order_num_check函数的流程图3.6 修改航班模块在主函数中输入“6”,调用void modify_flight(flightnode *&h,passengerList *&PList)函数对航班信息进行修改。提示客户输入修改模式,如客户输入“1”,则调用void add_flight(flightnode *&h)函数添加航班信息;如客户输入“2”,则调用void delete_flight(flightnode *&h,passengerList *&PList)函数删除指定的航班信息,提示客户输入航班号,存于flight_num中;如客户输入“3”,则示客户输入航班号,如果该航班号存在,则提示

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1