数据结构课程设计飞机订票系统分解.docx
- 文档编号:14463360
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:48
- 大小:672.56KB
数据结构课程设计飞机订票系统分解.docx
《数据结构课程设计飞机订票系统分解.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计飞机订票系统分解.docx(48页珍藏版)》请在冰点文库上搜索。
数据结构课程设计飞机订票系统分解
摘要
随着时代的进步社会分工的不断细化,各个行业联系的不断密切,人们出行越来越多,
出行的方式也是百花齐放,作为空中重要的交通工具,飞机航空系统也在不断地得到优化,
其中重要的一项就是航空飞机订票系统,因此好的订票系统关系着人们的日常出行方便与
否,设计并编制出符合人们需要的航空订票系统是一项繁重而艰巨的任务。
本文MicrosoftVisualC6.0作为程序代码的实现软件,进行飞机订票系统的数据结构课程设计。
首先,根据课程设计内容进行需求分析,确定主要的功能模块,。
然后进行数据结构、各功能模块算法以及它们之间的调用关系的概要设计,做出各信息模块的数据结构表,并给出所用的结构体和结点类型。
在此基础上,进行各功能模块的详细算法设计,做出各算法的流程图。
最后,对系统进行测试,分为合法数据测试和非法数据测试,并对测试结果截图保存。
本系统包含录入航班信息、订票、退票、查询航班信息、查询订票信息、修改航班信息和退出系统7个基本功能,经测试后健壮性良好。
关键词飞机订票系统;数据结构;C语言;单链表
i
目录
1
问题背景.................................................................
1
2
问题分析.................................................................
1
3
需求分析.................................................................
2
3.1
用户需求分析........................................................
2
3.2
功能需求分析.......................................................
2
3.3
系统需求分析........................................................
3
4
逻辑设计.................................................................
3
4.1
数据结构............................................................
3
4.2
各功能模块间函数调用关系............................................
5
4.3
函数说明............................................................
5
5
详细设计.................................................................
7
5.1
录入航班信息........................................................
7
5.2
顾客订票模块........................................................
8
5.3
顾客退票模块........................................................
8
5.4
查询航班模块........................................................
9
5.5
查询订单模块........................................................
9
5.6
修改航班模块........................................................
9
6
程序调试与测试..........................................................
11
6.1
合法数据测试结果...................................................
11
6.2
非法数据测试结果...................................................
13
7
结果分析.................................................................
15
7.1
输入...............................................................
15
7.2
输出...............................................................
15
总结.......................................................................
16
参考文献...................................................................
16
ii
1问题背景
订票系统是一种新兴的现代商务方式,近几年来得到了迅速发展,显现了巨大的现代商业价值。
有理由相信,订票系统将逐渐方便盛会生活,也将成为数字化社会的一种重要体现。
它改变了传统的买卖双方面堆满的交流方式,也打破了旧有工作经营模式,它通过网络使航空公司面对整个世界,为用户提供每周7天,每天24小时的全天候服务。
网上订票的规模正在逐年迅速增长,它带来的商机是巨大而深远的。
订票系统研究的主攻方向是通过公共计算机通信网络进行网上订票活动,突破传统商务在时间、地域上的限制,成为方便、快捷、安全可靠的新兴电子化商务活动模式。
是网上订票活动更安全、可靠、快速、明确和方便。
对航空公司来说,航空订票管理系统既能扩大服务范围,扩大公司影响,减少营业费用,又对稳固航空公司的客源有着重要的辅助作用;站在旅客的角度,航空公司提供的这种服务提供了更多的方便,节省了很多时间。
建设航空订票管理系统是体现和提高航空公司领导业绩的一条捷径。
2问题分析
通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自
定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;订票:
(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:
可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
1
3需求分析
3.1用户需求分析
用户使用此程序所要完成的工作主要为:
录入和查询所有航线信息、查看已订票客户信息、查询航线、办理订票业务、办理退票业务。
通过此系统可以方便的进行上述工作。
每条航线所涉及的信息有:
终点站名、航班号、飞行时间、票价、乘员定额、余票量。
已订票的客户名单信息包括姓名、订票量、舱位等级(1,2或3)。
等候替补的客户名单信息包括姓名、所需票量。
查询航线功能可以根据旅客提出的终点站名输出航班号、飞行时间、票价、乘员定额、余票量。
订票业务功能根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。
若需要,可登记排队候补购票。
退票业务功能根据客户提供的情况(航班号、姓名)为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
3.2功能需求分析
1.功能模块说明:
(1)将航班的基本信息录入到系统中。
(2)根据航班号或者根据起飞地点、降落地点查询所需航班信息。
(3)输入姓名和所要订航班的航班号订票。
(4)输入姓名和所订航班的航班号办理退票。
(5)输入航班号,修改该航班的起飞和降落时间以修改航班的起降时间。
(6)退出的同时将信息写入文件。
2.订票系统功能图
2
订票系统
录
办
办
查
查
航
退
入
理
理
询
询
班
出
航
订
退
航
订
信
系
班
票
票
班
单
息
统
信
业
业
信
信
修
息
务
务
息
息
改
图3.1订票系统结构图
3.3系统需求分析
开发环境:
PC机,Windows7系统
运行软件:
MicrosoftVisualC6.0
4逻辑设计
4.1数据结构
1航班的信息:
航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞时间、降落时间、起飞城市、抵达城市、航班票价、票价折扣、确定航班是否满仓和空座数九个数据项:
表3.1航班信息的数据结构表
数据项
数据类型
航班号
字符串(char)
起飞时间
字符串(char)
降落时间
字符串(char)
起飞城市
字符串(char)
抵达城市
字符串(char)
航班是否满仓
整型(int)
空座数
整型(int)
票价
浮点数(float)
票价折扣
浮点数(float)
typedefstructpassengernode{//定义客户资料结点
charname[20];//姓名
charID_num[20];//证件号
charflight_num[10];//航班号
intorder_num;//订单号
intticket_num;//订票数量
structpassengernode*next;//指向下一个结点
}passengernode;
3客户链表:
每个数据元素包括头指针和尾指针两个数据项:
每个结点包括两个指针域:
C语言描述如下:
typedefstructpassengerList{
passengernode*head;
passengernode*rear;
}passengerList;
4.2各功能模板函数之间的调用关系。
4.3函数说明
voidinit_flight(flightnode*&h):
要建立一个以h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表。
voidinit_passengerList(passengerList*&pList):
建立一个带有头指针和尾指针的空链表,存储带有顾客信息的结点。
头指针域尾指针域
voidsave_flight(flightnode*h):
保存航班信息到指定数据文件中。
voidload_flight(flightnode*&h):
从存储航班信息的文件导入航班信息到航班链表中。
voidsave_passenger(passengerList*PList):
保存客户信息到指定数据文件中。
voidload_passenger(passengerList*&PList):
从存储客户信息的文件导入客户信息到客户链表中。
voidadd_flight(flightnode*&h):
录入航班信息后调用insert_flight函数增加班。
voidinsert_flight(flightnode*&h,char*flight_num,char*start_place,char*end_place,char*
start_time,char*end_time,intleft,floatprice,floatprice_discount,intisFull):
在录入航班情况或增加新的航班后,将新的航班结点插入到航线链表中。
intbook(flightnode*&l,passengerList*&PList):
要完成客户订票,将客户结点插入客户链表中,并修改相应的航班信息。
voidinsert_passengerList(flightnode*&h,passengerList*&PList,char*name,char
*ID_num,char*flight_num,intticket_num):
在顾客订票后,将该顾客结点插入到顾客链表中,并修改相应的航班信息。
voidfind_same_flight(flightnode*l,char*flight_num):
在客户订票时,当客户输入的航班号对应的航班已满仓时,提供其他可选航班并输出显示。
voidcancel(passengerList*&PList,flightnode*&h):
完成客户退票,将客户的订单从客户链表中删除,并修改相应的航班信息。
intdelete_passenger(passengerList*&PList,flightnode*&h,char*name,char*ID_num):
按照要退票的顾客的姓名和证件号查找该顾客结点,进行删除操作。
voidflight_check(flightnode*h):
选择使用何种方式对航班信息进行查询。
voidcheck_all_flight(flightnode*l):
浏览所有航班信息。
intplace_check(flightnode*l,char*start_place,char*end_place):
按照起飞抵达城市查询航班信息。
intflight_num_check(flightnode*l,char*flight_num):
按照航班号查询航班信息。
voidpassenger_check(passengerList*PList):
选择使用何种方式对订单信息进行查询。
voidcheck_all_passenger(passengerList*PList):
浏览所有订单信息。
intorder_num_check(passengerList*PList,intorder_num):
按订单号查询订单信息。
intID_name_check(passengerList*PList,char*name,char*ID_num):
按客户姓名和证件号查询订单信息。
voidmodify_flight(flightnode*&h,passengerList*&PList):
修改航班信息,包括添加航班信息,删除航班信息,修改航班起飞抵达时间。
voiddelete_flight(flightnode*&h,passengerList*&PList):
按照某个航班号删除航班结点。
5详细设计
5.1录入航班信息
在主函数中输入“1”,调用voidadd_flight(flightnode*&h)函数,此函数将航班指针*p指向已存在航班链表*h的头结点,利用for(;p->next!
=NULL;p=p->next){}使*p指向航线链表的最后一个结点,然后让用户输入航班信息,然后调用voidinsert_flight(flightnode
*&h,char*flight_num,char*start_place,char*end_place,char*start_time,char*end_time,int
left,floatprice,floatprice_discount,intisFull)函数,用malloc函数申请一个航班结点,并用指针*q指向,将航班信息赋到新申请的结点中,p->next=q;p=p->next;该操作将该结点插入航班链表中。
流程图如下
5.2顾客订票模块
在主函数中输入“2”,调用intbook(flightnode*&h,passengerList*&PList)函数完成客户的订票。
用航班指针*p指向已存在航班链表*h的头结点的下一个结点,请客户输入起飞抵达城市,分别存于start_place和end_place中。
调用intplace_check(flightnode*l,char
*start_place,char*end_place)函数,如果函数返回“1”则请客户输入要订的航班号,如果输入的航班号不存在,输出提示信息,
如果航班存在则提示客户输入订的票数、客户的姓名和证件号,调用void
insert_passengerList(flightnode*&h,passengerList*&PList,char*name,char*ID_num,char
*flight_num,intticket_num)函数,定义航班指针*p=h->next,使用for循环匹配flight_num
和p->flight_num,找到后,执行p->left=p->left-ticket_num,修改相应航班的空座数。
用
malloc函数申请一个客户结点,并用指针*q指向,将客户信息和航班号赋到新申请的结点中,
PList->rear->next=q;PList->rear=q;该操作将该结点插入客户链表中。
如果该航班已满仓或该航班的空座数不够,输出可供选择的航班,让客户选择,之后
调用voidinsert_passengerList(flightnode*&h,passengerList*&PList,char*name,char
*ID_num,char*flight_num,intticket_num)函数将客户结点插入客户链表中.
5.3顾客退票模块
在主函数中输入“3”,调用voidcancel(passengerList*&PList,flightnode*&h)函数完成客户的退票。
提示客户输入客户的姓名和证件号以及要退的航班号,此函数再调用int
delete_passenger(passengerList*&PList,flightnode*&h,char*name,char*ID_num,char
*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);删除要退票的客户订单信息。
如果没有找到匹配的客户结点,输出提示信息.
5.4查询航班模块
在主函数中输入“4”,调用voidflight_check(flightnode*h)函数选择使用哪一种查询方式进行查询。
提示客户输入查询方式,如客户输入“1”,则调用int
flight_num_check(flightnode*l,char*flight_num)函数按航班号对航班进行查询,提示客户输入航班号,存于flight_num中;如客户输入“2”,则调用intplace_check(flightnode*l,char*start_place,char*end_place)函数按起飞抵达城市对航班进行查询,提示客户输入起飞抵达城市,分别存于start_place和end_place中;如客户输入“3”,则调用voidcheck_all_flight(flightnode*l)函数浏览全部航班信息。
在intflight_num_check(flightnode*l,char*flight_num)函数中,定义航班指针*p=h,使用for循环匹配flight_num和p->flight_num,找到匹配的航班节点后,输出该航班的所有信息。
在intplace_check(flightnode*l,char*start_place,char*end_place)函数中,定义航班指针*p=h,使用for循环寻找匹配start_place和start_place的结点,找到匹配的航班结点后,输出该航班的所有信息。
在voidcheck_all_flight(flightnode*l)函数中,定义航班指针*p=h,使用for循环输出所有航班信息。
5.5查询订单模块
在主函数中输入“5”,调用voidpassenger_check(passengerList*PList)函数选择使用哪一种查询方式进行查询。
提示客户输入查询方式,如客户输入“1”,则调用int
ID_name_check(passengerList*PList,char*name,char*ID_num)函数按客户的姓名和证件号对订单进行查询,提示客户输入姓名和证件号,分别存于name和ID_num中;如客户输入“2”,则调用intorder_num_check(passengerList*PList,intorder_num)函数按订单号对订单进行查询,提示客户输入订单号,存于order_num中;如客户输入“3”,则调用voidcheck_all_passenger(passengerList*PList)函数浏览全部订单信
在intID_name_check(passengerList*PList,char*name,char*ID_num)函数中,定义客户指针*p=PList->head->next,使用for循环寻找匹配name和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计 飞机订票系统分解 数据结构 课程设计 飞机 订票 系统 分解