数据结构课程设计报告(航班管理系统)分解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计报告
班级:
指导老师
日期:2014年12月
【需求分析】
2.航空订票系统
试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。采用链式存储结构。要求:
系统能实现的操作和功能如下:
(1)航班信息管理。
(2)查询航线,按以下几种方式查询:
①按航班号查询;
②按起点站查询;
③按终点站查询;
④按日期查询;
每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。
(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。若需要,可登记排队候补。(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
【设计】2.1 设计思想
(1)数据结构设计
①.‘航班信息数据结构’
采用链式储存结构,并且设置链接‘订票乘客名单域’和‘排队等候名单域’的借口。
设计如下:
/*航班信息数据结构 */
typedef struct Airp
{
char airnum[10];//航班号
char planenum[10];//机型
char departure[10];//起飞机场
char terminal[10];//降落机场
char weekday[5];//日期
struct time uptim;//起飞时间
time downtim;// 降落时间
time flytim;// 飞行时间
int price;//价格
int tkt_ful;//乘员定额
int tkt_sur;//余票量
Book_list *book;//订票客户名单
Wait_list wait;//等待候补客户名单
Airp *next;
}lineinfo;//
②‘订票乘客名单域’
采用链式存储结构,以单链表形成名单列表。设计如下:
/*订票乘客名单域 */
typedef struct book
{
char name[10]; //乘客姓名
int ord_num; //数量
int ord_grd; //舱位等级
struct book *next; //指向下一名乘客
}Book_list;
③‘排队等候队列名单域’
采用链式储存,以单链表形成名单列表。设计如下:
/*排队等候队列名单域*/
typedef struct wait
{
char name[10]; //乘客姓名
int ord_num; //欲订票数量
struct wait *next; //指向下一名乘客
}wat_queue;
排队队列指针设计如下:
// 排队等候队列头尾指针
typedef struct qwait
{
wat_queue *front; //队头指针
wat_queue *rear; //队尾指针
}Wait_list;
④‘时间数据结构’。
程序定义了一个(**:**)型的时间数据结构,使时间更加精确易读。
设计如下:
//(**:**)型时间数据结构
typedef struct time
{
int hour; //时
int mint; //分
}time;
(1)算法设计
主要算法包括:
①航线信息显示函数:void print(Airp *head)
②航线录入函数:void enter()
③航线删除函数:void Delete()
④航线查询函数:
//a.按航班号查询:Airp* search_1()
设计如下:
Airp* search_1()
{
输入航班号airnum;
while(‘航班信息数据结构’next节点不为空)
{
已存航班号是否有与airnum相同的航班号;
}
若没有相同航班号("对不起,未能找到您所要查找的航班!");
getchar();
return NULL;
}
//b.按起飞站查询:void search_2(),与 a.函数相似,只改变查询变量为起飞站‘s->departure’;
//c.按终点站查询:void search_3(),与 a.函数相似,只改变查询变量为终点站‘s->terminal’
//d.按日期查询:void search_4(),与a.函数相似,只改变查询变量为日期‘s->weekday’
⑤订票业务办理:
//a.订票模块:void or_tkt()
设计如下:
void or_tkt()
{
If(没有查询航班) 函数结束;
输入订票量amount;
if(amount>余票量s->tkt_ful)
{
输出("\n对不起,没有足够的余票!");
函数结束;
}
if(amount<=s->tkt_sur)
{
for(i=0;i 输入订票人姓名和舱位等级; } for(i=0;i { printf("%s的座位号是:%d\n",name,s->tkt_ful-s->tkt_sur+i+1); } s->tkt_sur-=amount; printf("订票成功!"); 输出费用; } else