航空售票系统设计报告.docx

上传人:b****3 文档编号:3820959 上传时间:2022-11-25 格式:DOCX 页数:24 大小:254.84KB
下载 相关 举报
航空售票系统设计报告.docx_第1页
第1页 / 共24页
航空售票系统设计报告.docx_第2页
第2页 / 共24页
航空售票系统设计报告.docx_第3页
第3页 / 共24页
航空售票系统设计报告.docx_第4页
第4页 / 共24页
航空售票系统设计报告.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

航空售票系统设计报告.docx

《航空售票系统设计报告.docx》由会员分享,可在线阅读,更多相关《航空售票系统设计报告.docx(24页珍藏版)》请在冰豆网上搜索。

航空售票系统设计报告.docx

航空售票系统设计报告

算法与数据结构

课程设计报告

 

设计题目:

航空客运订票系统

 

专业计科院网络工程

班级11102

学生

学号

指导教师

 

2013年第二学期

一、设计目的……………………………………………………..………2

二、需求分析……………………………………………………..………2

三、概要分析……………………………………………………..………2

四、源程序清单……………………………………………………………………………….…....3

五、详细设计和源代码………………………………………………..…3

六、算法分析………………………………………………..…………………………….…………6

七、调试分析……………………………………………………………11

八、用测试数据去验证算法及程序的正确性……………………...….11

九、课程设计总结………………………………………...………….....14

十、指导老师意见………………………………………………….....…..15

一、设计目的

1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。

2、提高程序设计和调试能力。

学生通过上机实习,验证自己设计的算法的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

3、初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。

4、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

5、培养根据选题需要选择学习书籍,查阅文献资料的自学能力。

二、需求分析

1、系统名称:

航空客运订票系统

航空客运订票的业务活动包括:

查询航线、客票预定和办理退票等。

要求在TC或VC环境下设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

2、要求:

(1)每条航线所涉及的信息有:

终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。

(2)作为模拟系统,全部数据可以只存放在内存中。

(3)通过此系统可以实现如下功能:

①录入功能:

可以录入航班情况

②查询功能:

根据客户提供的终点站名进行查询,可以输出以下信息:

航班号、飞机号、星期几飞行和余票量等。

也可以根据航班号,查询飞机某个航线的情况。

订票功能:

根据客户提出的要求(姓名、终点站名、订票数量)查询该航班的余票量情况。

如尚有足够的余票,则为客户办理订票手续;若已满员或余票量少于订票数量,则需要重新询问客户要求,如需要,可登记排队候补。

④退票功能:

根据客户提供的情况(姓名、日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续。

三、概要分析

1、分析问题,给出数学模型,设计相应的数据结构。

(1)己订票的客户名单可以用线性表来实现。

为查找方便,线性表应按照客户姓名有序,

并且为了插入和删除的方便,应以链表作为存储结构。

(2)等候替补的客户名单也有可能出现退票的情况,故用链表来实现。

(3)需将输入的航班情况登录到一张线性表上(用顺序存储结构或链表存储结构)。

为了查询的方便,可以将航班情况按照航班有序或按照终点站名有序建立线性表。

每条航线是这张线性表的一个记录,包含上述8个域,其中已订票的客户名单域是指向己订票的客户名单链表的头指针,等候替补的客户名单域是指向队头和队尾的指针。

2、算法设计

在已经选择好数据结构的前提下,为解决问题设计算法。

(1)确定所需模块

对于稍复杂的程序设计,要充分利用模块化程序设计方法,自顶向下,逐步细化,在整体思路确定的情况下,考虑所需模块数,各模块完成功能以及模块之间的数据联系和调用关系。

(2)各子模块功能描述

给出主要模块的算法描述,用流程图或伪代码表示。

(3)模块之间的调用关系

给出算法各模块之间的关系图示

3、源程序清单

为了提高工作效率,充分利用上机调试程序的时间,要求学生在上机之前给出源程序清单。

4、用测试数据去验证算法及程序的正确性

5、算法分析

经过上机调试,源程序运行正确,并且实现算法要求的功能,解决课程设计题目中给出的问题后,分析算法的时间复杂度和空间复杂度。

四、源程序清单:

intmain();//主菜单

intEntering();//录入航线

intSearch();//查询信息

intReserve();//订票

intRefund();//退票

五、详细设计和源代码

定义:

typedefstructYidingkehu{//单链表

charname[15];//已订票的客户姓名

intdingpiaoshu;//已订票数量

structYidingkehu*next1;//

}Yidingkehu,*Link;

typedefstructWeidingkehu{//单链队

charname[15];//预订票的客户姓名

intyudingpiao;//要订票数量

structWeidingkehu*next2;//下一个链队结点指针

}Weidingkehu,*Qptr;

typedefstructyuding{

Qptrfront;//单链队头结点

Qptrrear;//单链队尾结点

}linkQueue;

typedefstructHangxian{//创建一个含有六个信息的结构体

charhangbanhao[15];//航班号-

charfeijihao[15];//飞机号

intfeixingriqi;//起飞时间

intchenkerenshu;//座位数

intyupiao;//余票

charzhongdianzhai[15];//降落城市

structHangxian*next;//指向下一个链结点的指针

structYidingkehu*yiding;//定义一个指向已订票客户的头结点指针

structWeidingkehu*yudingqueue;//或structyudingyudingqueue;

}Hangxian,*Linklist;

1.main

六、算法设计

模块图:

 

2.Entering

3.Search

4.Reserve

5.Refund

 

模块说明:

(1)显示主菜单并根据输入调用相应函数。

(2)将航班信息存入程序。

(3)根据航班号或终点站查询信息,浏览所有航班信息。

(4)输入姓名、订票数订票,若余票不足提示是否预订。

(5)显示退票主菜单并根据输入调用相应函数。

选择退订票或预订票,输入姓名、退票数退票。

若退订票,退票成功后然后查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续。

模块算法描述(伪代码):

主要函数

intEntering(Hangxian&first)//录入航线

{

Hangxian*last;

last=first.next;

Hangxian*p=(Hangxian*)malloc(sizeof(Hangxian));

cout<<"输入航班号:

";

cin>>p->hangbanhao;

cout<<"输入飞机号:

";

cin>>p->feijihao;

cout<<"输入起飞时间:

";

cin>>p->feixingriqi;

cout<<"输入座位数:

";

cin>>p->chenkerenshu;

cout<<"输入降落城市:

";

cin>>p->zhongdianzhai;

p->yupiao=p->chenkerenshu;

p->next=NULL;

p->yiding=NULL;

p->yudingqueue=NULL;

if(last==NULL)

first.next=p;

else

{

while(last->next!

=NULL)

{

last=last->next;

}

last->next=p;

}

return0;

}

intSearch(Hangxian&first)//查询航线

{

Hangxian*s;

s=first.next;

chara[10];

intn;

inti=1;

do{

cout<<"*****************************************************************************\n";

cout<<"******1:

终点站查询2:

航班号查询3:

退出******\n";cout<<"*****************************************************************************\n";

cin>>n;

switch(n)

{

case1:

cout<<"输入终点站名:

";

cin>>a;

while(s!

=NULL)

{

if(strcmp(s->zhongdianzhai,a)==0)

{

cout<<"到达该终点站航班信息:

\n";

cout<<"航班号:

"<hangbanhao<<"";

cout<<"飞机号:

"<feijihao<<"";

cout<<"起飞时间:

"<feixingriqi<<"";

cout<<"终点站:

"<zhongdianzhai<<"";

cout<<"余票量:

"<yupiao<

i++;

}

s=s->next;

}

if(i==1)

{

cout<<"到达该终点站的航班不存在,请重新输入\n";

return0;

}

break;

case2:

cout<<"输入航班号:

";

cin>>a;

while(s!

=NULL)

{

if(strcmp(s->hangbanhao,a)==0)

{

cout<<"该航班号信息:

\n";

cout<<"航班号:

"<hangbanhao<<"";

cout<<"飞机号:

"<feijihao<<"";

cout<<"起飞时间:

"<feixingriqi<<"";

cout<<"终点站:

"<zhongdianzhai<<"";

cout<<"余票量:

"<yupiao<

i++;

}

s=s->next;

}

if(i==1)

{

cout<<"该航班不存在,请重新输入\n";

return0;

}

case3:

break;

default:

cout<<"错误,请重新输入\n";

}

}

while(n!

=3);

return0;

}

intReserve(Hangxian&first)//订票

{

Hangxian*s;

s=first.next;

chara[10];

inti=1;

intnum;

cout<<"输入终点站名:

\n";

cin>>a;

while(s!

=NULL)

{

if((strcmp(s->zhongdianzhai,a)==0))

{

cout<<"航班号:

";

cout<hangbanhao<<"";

cout<<"飞机号:

";

cout<feijihao<<"";

cout<<"起飞时间:

";

cout<feixingriqi<<"";

cout<<"余票量:

";

cout<yupiao<

i++;

}

s=s->next;

}

if(i==1)

{

cout<<"您选择的航班不存在,请重新操作\n";

return0;

}

cout<<"输入需订票航班号:

";

cin>>a;

cout<<"输入需订票数:

";

cin>>num;

s=first.next;

while(s!

=NULL)

if(strcmp(s->hangbanhao,a)==0)

break;

if(s->yupiao>=num)

{

Yidingkehu*p=(Yidingkehu*)malloc(sizeof(Yidingkehu));

Yidingkehu*q;

q=s->yiding;

cout<<"输入乘客姓名:

";

cin>>p->name;

p->next1=NULL;

p->dingpiaoshu=num;

if(q==NULL)

s->yiding=p;

while(q!

=NULL)

{

if(strcmp(q->name,p->name)==0)

{

cout<<"该姓名乘客已存在,请重新操作\n";

return0;

}

q=q->next1;

}

q=p;

s->yupiao-=num;

q->dingpiaoshu=num;

cout<<"订票成功!

\n";

return0;

}

else

{

charn;

cout<<"抱歉,余票不够!

若想排队候补请输入'e',否则按任意键退出";

cin>>n;

if(n=='e')

{

Weidingkehu*p=(Weidingkehu*)malloc(sizeof(Weidingkehu));

Weidingkehu*q;

q=s->yudingqueue;

cout<<"输入预订乘客姓名:

";

cin>>p->name;

p->next2=NULL;

p->yudingpiao=num;

if(q==NULL)

s->yudingqueue=p;

while(q!

=NULL)

{if(strcmp(q->name,p->name)==0)

{

cout<<"该乘客预定已存在,请重新操作\n";

return0;

}

q=q->next2;

}

q=p;

q->yudingpiao=num;

cout<<"预定票成功!

\n";

return0;

}

}

}

intYDRefund(Hangxian&first)//退已订的票

{

Hangxian*s;

Yidingkehu*p=(Yidingkehu*)malloc(sizeof(Yidingkehu));

charname[10],hangbanhao[10];

cout<<"输入航班号:

\n";

cin>>hangbanhao;

cout<<"输入姓名:

\n";

cin>>name;

s=first.next;

while(s!

=NULL)

{

if(strcmp(s->hangbanhao,hangbanhao)==0)

break;

s=s->next;

}

if(s==NULL)

{

cout<<"该航班不存在,请重新操作\n";

return0;

}

else

{

p=s->yiding;

if(p==NULL)

{

cout<<"该航班没有已定客户,请重新操作\n";

return0;

}

if(p->next1==NULL)

{

if(strcmp(p->name,name)==0)

{

s->yupiao+=s->yiding->dingpiaoshu;

free(s->yiding);

s->yiding=NULL;

cout<<"退票成功\n";

}

else

{

cout<<"该航班乘客中没有该姓名乘客,请重新操作\n";

return0;

}

}

else

{

while(p->next1!

=NULL)

{

if(strcmp(p->next1->name,name)==0)

break;

p=p->next1;

}

p=p->next1;

if(p!

=NULL)

{

s->yupiao+=p->dingpiaoshu;

free(p);

p=p->next1;

cout<<"退票成功\n";

}

else

{

cout<<"该航班乘客中没有该姓名乘客,请重新操作\n";

return0;

}

}

}

if(s->yudingqueue!

=NULL)//查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续

{

yudingq;

q.front=q.rear=(Weidingkehu*)malloc(sizeof(Weidingkehu));

q.front=s->yudingqueue;

Yidingkehu*m;

while(s->yupiao>=q.front->yudingpiao)//查询余票量是否满足客户订票数量

{

if(s->yiding==NULL)

{

Yidingkehu*n=(Yidingkehu*)malloc(sizeof(Yidingkehu));

n->dingpiaoshu=q.front->yudingpiao;

strcpy(n->name,q.front->name);

n->next1=NULL;

s->yiding=n;

s->yupiao-=n->dingpiaoshu;

cout<<"该乘客"<name<<"预定的机票已到,"<dingpiaoshu<<"张,请注意验收\n";

}

else

{

m=s->yiding;

while(m->next1!

=NULL)

m=m->next1;

Yidingkehu*n=(Yidingkehu*)malloc(sizeof(Yidingkehu));

n->dingpiaoshu=q.front->yudingpiao;

strcpy(n->name,q.front->name);

n->next1=NULL;

m->next1=n;

s->yupiao-=n->dingpiaoshu;

cout<<"该乘客"<name<<"预定的机票已到,"<dingpiaoshu<<"张,请注意验收\n";

}

q.front=q.front->next2;

s->yudingqueue=q.front;

if(q.front==NULL)

break;

}

}

return0;

}

intWDRefund(Hangxian&first)//退预订票

{

Hangxian*s;

Weidingkehu*p=(Weidingkehu*)malloc(sizeof(Weidingkehu));

charname[10],hangbanhao[10];

cout<<"输入航班号:

";

cin>>hangbanhao;

cout<<"输入姓名:

";

cin>>name;

s=first.next;

while(s!

=NULL)

{

if(strcmp(s->hangbanhao,hangbanhao)==0)

break;

s=s->next;

}

if(s==NULL)

{

cout<<"该航班不存在,请重新操作\n";

return0;

}

else

{

p=s->yudingqueue;

if(p==NULL)

{

cout<<"该航班没有预定客户,请重新操作\n";

return0;

}

if(p->next2==NULL)

{

if(strcmp(p->name,name)==0)

{

free(s->yudingqueue);

s->yudingqueue=NULL;

cout<<"退预订票成功!

\n";

return0;

}

else

{

cout<<"预定乘客中没有该姓名乘客,请重新操作\n";

return0;

}

}

else

{

while(p->next2!

=NULL)

{

if(strcmp(p->next2->name,name)==0)

break;

p=p->next2;

}

if(p->next2==NULL)

{

cout<<"该航班不存在,请重新操作\n";

return0;

}

else

{

free(p->next2);

p->next2=p->next2->next2;

}

}

}

return0;

}

intRefund(Hangxian&first)//退票界面

{

intn;

do

{

cout<<"*****************************************************************************\n";

cout<<"**********1:

退订票2:

退预定票3.退出**********\n";

cout<<"*****************************************************************************\n";

cin>>n;

switch(n)

{

case1:

YDRefund(first);

break;

case2:

WDRefund(first);

break;

case3:

break;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1