数据结构课程设计:飞机订票系统设计与实现.doc
《数据结构课程设计:飞机订票系统设计与实现.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计:飞机订票系统设计与实现.doc(33页珍藏版)》请在沃文网上搜索。
1、目录1. 需求分析12. 概要设计23. 详细设计64. 测试与分析145. 用户使用说明196. 总结20参考文献201. 需求分析1.1 问题描述基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票,退票以及航班的查询和修改等基本功能。本课程设计的题目为:飞机订票系统。1.2 基本要求1.2.1 输入的形式和输入值的范围录入航班信息时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0
2、”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息)。客户订票时,需要输入起飞抵达城市,然后选择航班进行查询,选择航班时需要输入航班号,值为字符串。客户退票时,需要输入姓名,证件号进行退票操作,值为字符串。查询某个航班的情况时,需要输入航班号,值为字符串;在查询某个航线的情况时,还可以通过输入起飞抵达城市来查询,值为字符串。查询某个订单时,需要输入订单号,值为整型(int);或者需要输入客户姓名和证件号,值为字符串。修改航班时,需要输入字符型数据选择进行何种修改操作;增加航班时,需要输入航班号,起降时间,起飞抵达城市,值为
3、字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息);删除航班时,需要输入要删除的航班的航班号;修改航班时间时,需要输入要修改的航班的航班号,修改后的航班起飞时间和抵达时间。1.2.2 输出形式在所有操作后的输出中都显示操作是否正确以及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。录入航班情况时,输出显示添加航班信息是否成功。客户订票时,当客户输入起飞抵达
4、城市后,输出可供客户选择的航班信息;客户选择了航班后,输入提示信息告知用户订票是否成功。客户退票时,输出客户退票成功或者无此客户,无法退票。查询航班时,输出显示对应的航班信息,或者输出提示信息告知没有相应的航班信息。查询订单时,输出显示对应的订单信息,或者输出提示信息告知没有相应的订单信息。修改航班时,输出对应的提示的信息,提示操作是否成功。1.2.3 功能要求(1)可以录入航班情况,数据存储在一个数据文件中;(2)可以查询某个航线的情况:输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓;输入起飞抵达城市,查询飞机航班情况;(3)可以订票,订票情况存在一个数据文件中
5、(如果该航班已经无票,提供相关可选航班);(4)可退票并且退票后修改相关数据文件;(5)客户资料:姓名,证件号,订票数量及航班情况,订单要有编号;(6)修改航班信息,当航班信息改变可修改航班数据文件;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。2. 概要设计2.1 数据结构(1)航班的信息:航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞时间、降落时间、起飞城市、抵达城市、航班票价、票价折扣、确定航班是否满仓和空座数九个数据项:航班号起飞时间降落时间起飞城市抵达城市航班是否满仓空座数票价票价折扣字符串字符串字符串字符串字符串整数(
6、int)整数(int)浮点数(float)浮点数(float)单链表如下:D1D2D3 h每个结点包括数据域和指针域:数据域指针域C语言描述如下:typedef struct flightnodechar air_num10;/航班号char start_time15;/起飞时间char end_time15;/抵达时间char start_place20;/起飞城市char end_place20; /降落城市int left; /空座数float price; /票价float price_discount;/票价折扣int isFull; /航班是否满仓struct flightnode
7、 *next;/指向下一个结点flightnode;/航班结点(2)客户的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号、航班号、订票数量和订单号五个数据项:姓名证件号航班号订票数量订单号字符串字符串字符串整数(int)整数(int)每个结点包括数据域和指针域:数据域指针域C语言描述如下:typedef struct passengernode/定义客户资料结点char name20; /姓名char ID_num20; /证件号char flight_num10;/航班号int order_num; /订单号int ticket_num; /订票数量str
8、uct passengernode *next;/指向下一个结点passengernode;(3)客户链表:每个数据元素包括头指针和尾指针两个数据项:每个结点包括两个指针域:头指针域尾指针域C语言描述如下:typedef struct passengerListpassengernode *head;passengernode *rear;passengerList;2.2 程序模块2.2.1 录入航班信息模块void add_flight(flightnode *&h)调用void insert_flight(flightnode *&h,char* flight_num,char* sta
9、rt_place,char* end_place,char* start_time,char* end_time,int left,float price,float price_discount,int isFull)函数,将新航班结点插入航班链表中。2.2.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)函数
10、,将新客户结点插入客户链表中。2.2.3 客户退票模块void cancel(passengerList *&PList,flightnode *&h)函数调用int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num)函数,将相应的顾客结点删除,并修改相应的航班信息。2.2.4 查询航班模块void flight_check(flightnode *h)调用void check_all_flight(flightnode *h)函数进行所有航班信息浏览,调用int place_check(
11、flightnode *h,char *start_place,char *end_place)函数按起飞抵达城市对航班进行查询,调用int flight_num_check(flightnode *h,char *flight_num)按航班号对航班进行查询。2.2.5 查询订单模块void passenger_check(passengerList *PList)调用void check_all_passenger(passengerList *PList)函数进行所有订单信息浏览,调用int order_num_check(passengerList *PList,int order_n
12、um)函数按订单号对订单进行查询,调用int ID_name_check(passengerList *PList,char *name,char *ID_num)按客户姓名和证件号对订单进行查询。2.2.6 修改航班模块增加航班时,void modify_flight(flightnode *&h,passengerList *&PList)函数调用void add_flight(flightnode *&h)函数,将新航班信息结点插入航班链表中。删除航班时,void modify_flight(flightnode *&h,passengerList *&PList)函数调用void de
13、lete_flight(flightnode *&h,passengerList *&PList)函数将相应的航班信息删除,并删除相应的订单信息。修改航班时间时,void modify_flight(flightnode *&h,passengerList *&PList)函数修改指定航班的起飞抵达时间。2.3 各模块之间的调用关系以及算法设计2.3.1 各模块之间的调用关系主函数录入航班信息订 票退 票查询航班查询订单修改航班信息退 出浏览全部航班信息按起飞抵达城市查询航班信息按航班号查询航班信息浏览全部订单信息按客户姓名和证件号查询订单信息按订单号查询订单信息增加航班信息修改航班起飞抵达时
14、间删除航班信息2.3.2 算法设计void init_flight(flightnode *&h):要建立一个以h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表。void init_passengerList(passengerList *&pList):建立一个带有头指针和尾指针的空链表,存储带有顾客信息的结点。void save_flight(flightnode *h):保存航班信息到指定数据文件中。void load_flight(flightnode *&h):从存储航班信息的文件导入航班信息到航班链表中。void save_passenger(passengerLi
15、st *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,char* end_time,int left,float price,float pri
16、ce_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):在顾客订票后,将该顾客结点插入到顾客链表中,并修改相应的航班信息。void find_sa
17、me_flight(flightnode *l,char *flight_num):在客户订票时,当客户输入的航班号对应的航班已满仓时,提供其他可选航班并输出显示。void cancel(passengerList *&PList,flightnode *&h):完成客户退票,将客户的订单从客户链表中删除,并修改相应的航班信息。int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num):按照要退票的顾客的姓名和证件号查找该顾客结点,进行删除操作。void flight_check(flig
18、htnode *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 *PList):选择使用何种方式对订单信息进行查询。void check_all_pass
19、enger(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):修改航班信息,包括添加航班信息,删除航班信息,修改航班起飞抵达时间。void delete_flight(flight
20、node *&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* start_place,char* end_place,char* start_tim
21、e,char* end_time,int left,float price,float price_discount,int isFull)函数,用malloc函数申请一个航班结点,并用指针*q指向,将航班信息赋到新申请的结点中,p-next=q;p=p-next;该操作将该结点插入航班链表中。流程图如下:YYflightnode *p=h;p-next!=NULLp=p-nextmark=1输入航班信息调用insert_flight函数完成航班信息的录入是否继续录入航班信息“是”输入“1”mark=1“否”输入“0”mark=0开始结束NN3.2 顾客订票模块在主函数中输入“2”,调用int
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 飞机 订票 系统 设计 实现