1. 题目
本课程设计的题目为:飞机订票系统。
2. 项目描述
基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票,退票以及航班的查询和修改等基本功能。
3. 数据及其逻辑结构分析
(1)航班的信息:航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞时间、降落时间、起飞城市、抵达城市、航班票价、票价折扣、确定航班是否满仓和空座数九个数据项:
航班号 |
起飞 时间 |
降落 时间 |
起飞 城市 |
抵达 城市 |
航班 是否满仓 |
空座数 |
票价 |
票价 折扣 |
字符串 |
字符串 |
字符串 |
字符串 |
字符串 |
整数 (int) |
整数 (int) |
浮点数 (float) |
浮点数 (float) |
每个结点包括数据域和指针域:
数据域 |
指针域 |
C语言描述如下:
typedef struct flightnode{
char flight_num[10];//航班号
char start_time[10];//起飞时间
char end_time[10];//抵达时间
char start_place[20];//起飞城市
char end_place[20]; //抵达城市
int left; //空座数
float price; //票价
float price_discount;//票价折扣
int isFull; //航班是否满仓
struct flightnode *next;//指向下一个结点
}flightnode;//航班结点
(2)客户的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号、航班号、订票数量和订单号五个数据项:
姓名 |
证件号 |
航班号 |
订票数量 |
订单号 |
字符串 |
字符串 |
字符串 |
整数(int) |
整数(int) |
每个结点包括数据域和指针域:
数据域 |
指针域 |
C语言描述如下:
typedef struct passengernode{//定义客户资料结点
char name[20]; //姓名
char ID_num[20]; //证件号
char flight_num[10];//航班号
int order_num; //订单号
int ticket_num; //订票数量
struct passengernode *next;//指向下一个结点
}passengernode;/客户结点
(3)客户链表:每个数据元素包括头指针和尾指针两个数据项:
每个结点包括两个指针域:
头指针域 |
尾指针域 |
C语言描述如下:
typedef struct passengerList{
passengernode *head;
passengernode *rear;
}passengerList;
4. 数据的存储结构设计
程序运行时会从文件中将航班数据调入内存,并且以单链表的存储方式进行存储。每个链表结点的数据域有一个用户自定义结构体组成,结构体内包含有详细的航班有关信息。
5. 系统模块组成
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 isFull)函数,将新航班结点插入航班链表中。
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)函数,将新客户结点插入客户链表中。
3 客户退票模块
void cancel(passengerList *&PList,flightnode *&h)函数调用int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num)函数,将相应的顾客结点删除,并修改相应的航班信息。
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,char *flight_num)按航班号对航班进行查询。
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)按客户姓名和证件号对订单进行查询。
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(flightnode *&h,passengerList *&PList)函数修改指定航班的起飞抵达时间。
项目实现结果
(1) 编译链接后显示菜单