数据结构课程设计报告(航班管理系统)分解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档