课 程 设
题目 飞机订票系统
院 系 ******* 专 业 *************** 姓 名 ****** 学 号 ********* 指 导 教 师 ***
2012年7月
计
1. 需求分析
问题描述
基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票,退票以及航班的查询和修改等基本功能。本课程设计的题目为:飞机订票系统。
基本要求
输入的形式和输入值的范围
录入航班信息时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息)。
客户订票时,需要输入起飞抵达城市,然后选择航班进行查询,选择航班时需要输入航班号,值为字符串。
客户退票时,需要输入姓名,证件号进行退票操作,值为字符串。
查询某个航班的情况时,需要输入航班号,值为字符串;在查询某个航线的情况时,还可以通过输入起飞抵达城市来查询,值为字符串。
查询某个订单时,需要输入订单号,值为整型(int);或者需要输入客户姓名和证件号,值为字符串。
修改航班时,需要输入字符型数据选择进行何种修改操作;增加航班时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息);删除航班时,需要输入要删除的航班的航班号;修改航班时间时,需要输入要修改的航班的航班号,修改后的航班起飞时间和抵达时间。
输出形式
在所有操作后的输出中都显示操作是否正确以及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。 录入航班情况时,输出显示添加航班信息是否成功。
客户订票时,当客户输入起飞抵达城市后,输出可供客户选择的航班信息;客户选择了航班后,输入提示信息告知用户订票是否成功。
客户退票时,输出客户退票成功或者无此客户,无法退票。
查询航班时,输出显示对应的航班信息,或者输出提示信息告知没有相应的航班信息。 查询订单时,输出显示对应的订单信息,或者输出提示信息告知没有相应的订单信息。 修改航班时,输出对应的提示的信息,提示操作是否成功。
功能要求
(1)可以录入航班情况,数据存储在一个数据文件中;
(2)可以查询某个航线的情况:输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓;输入起飞抵达城市,查询飞机航班情况;
(3)可以订票,订票情况存在一个数据文件中(如果该航班已经无票,提供相关可选航班);
(4)可退票并且退票后修改相关数据文件;
(5)客户资料:姓名,证件号,订票数量及航班情况,订单要有编号; (6)修改航班信息,当航班信息改变可修改航班数据文件;
(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
2. 概要设计
数据结构
(1)航班的信息:航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞时间、降落时间、起飞城市、抵达城市、航班票价、票价折扣、确定航班是否满仓和空座数九个数据项: 航班号 起飞 降落 起飞 抵达 航班 空座数 票价 票价 时间 时间 城市 城市 是否满仓 折扣 字符串 字符串 字符串 字符串 字符串 整数 (int) 单链表如下:
D1 D2 h
每个结点包括数据域和指针域: 数据域 指针域
C语言描述如下:
typedef struct flightnode{ char air_num[10]; 主函数 整数 浮点数 浮点数 (int) (float) (float) D3 ^ 详细设计
录入 航班信息
浏览 按航 按起 全部 班号 飞抵 航班 查询 达城 信息 航班 市查 浏览 按订 按客 全部 单号 户姓 订单 查询 名和 信息 订单 证件 增加 删除 修改 航班 航班 航班 信息 信息 起飞 抵达 订 票 退 票 查询航班 查询订单 修改航班信息 退 出
录入航班信息模块
在主函数中输入“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_time,char* end_time,int left,float price,float price_discount,int isFull)函数,用malloc函数申请一个航班结点,并用指针*q指向,将航班信息赋到新申请的结点中,p->next=q;p=p->next;该操作将该结点插入航班链表中。流程图如下:
开始
flightnode *p=h; N p->next!=NULL
Y p=p->next
N
mark==1
Y 输入航班信息 调用insert_flight函数 完成航班信息的录入
是否继续录入航班信息
“是”输入“1”mark=1
“否”输入“0”mark=0
结束