数据结构课程设计报告
课程名称___
数据结构课程设计
_
题目名称 航空客运订票系统
学生学院__
计算机学院
______
专业班级_
学 号____ ______
学生姓名____
_ __
_
指导教师______
苏庆
__
__
2016 年 01 月 08 日
1. 需求分析
① 题目:
题目 5 航空客运订票系统
[问题描述]
航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空
客运订票系统,以使上述业务可以借助计算机来完成。
[基本要求]
(1) 每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员
定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级 1,2 或 3)以及等
候替补的客户名单(包括姓名、所需票量);
(2) 作为示意系统,全部数据可以只放在内存中;
(3) 系统能实现的操作和功能如下:
① 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行 ,
最近一天航班的日期和余票额;
② 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚
有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新
询问客户要求。若需要,可登记排队候补;
③ 承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询
该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为
他办理订票手续,否则依次询问其它排队候补的客户。
[测试数据]
由读者指定。
[实现提示]
两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户
姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队
列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上,由于航
线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表
上的一个记录,包含上述八个域、其中乘员名单域为指向乘员名单链表的头指针,等候替
补的客户名单域为分别指向队头和队尾的指针。
[选做内容]
当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其它航线情况。
读者还可充分发挥自己的想象力,增加你的系统的功能和其它服务项目。
② 分析
该程序可先预置录入航班信息,根据航班信息,查看全部航线信息、某个
航线信息、客票预订、办理退票、查看已订票客户名单等功能。
改程序首先初始化航班信息,再根据用户所需要的功能,执行相应操作。
对于功能选择,仅允许输入数字 1-6,若输入其他,则会提示输入正确序号并
要求重新输入,均以回车键为结束标志。输出时,会根据用户所需要的功能,
输出相应的内容。
由于整个程序的输入输出较简单,错误处理也相对简单,当输入错误的序
号等时,会提示输入错误,并允许重新输入;输入不存在的航班,会提示“不
存在该航班”并要求重新输入。
2. 概要设计
① 数据类型定义与宏定义:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 3 //用于标识航班数
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
int firstEnter = 1;//标识是否第一次进入系统,用于控制菜单栏出现与否
typedef int Status;
/*--------------------已订票的乘客信息------------------*/
typedef struct AlreadyBuyClient{
char clientName[10];//乘客姓名
char PhoneNum[12];//乘客手机号
int bookedTicketNum;//订票量
char Rank;//舱位等级
struct AlreadyBuyClient *Next;//指向下一个乘客
}AlreadyBuyClient;
/*--------------------等候的乘客信息------------------*/
typedef struct WaitClient {//链队列
char clientName[10];//乘客姓名
int wantedTicketNum;// 需要票量
struct WaitClient *next; //指向下一个乘客
}WaitClient,*WaitClientinfo;
typedef struct {
WaitClientinfo front;//排队的对头
WaitClientinfo rear;// 排队的队尾
}ClientQueue; //排队等票的队列
/*--------------------航班信息------------------*/
struct Flight{
char stopName[10];//终点站
char flightNum[5]; //航班号
char flyNum[5]; //飞机号
char flyTime[4];//飞行时间(周日)
char RecentTime[11];//最近一次飞行时间
int max;//乘员定额
int leftTicket;//剩余票量
int Price[3]; //舱位等级的价格