数据结构航空客运订票系统.docx
《数据结构航空客运订票系统.docx》由会员分享,可在线阅读,更多相关《数据结构航空客运订票系统.docx(30页珍藏版)》请在冰点文库上搜索。
数据结构航空客运订票系统
课程设计报告
课程名称:
数据结构
设计题目:
航空客运订票系统
院系:
班级:
设计者:
学号:
指导教师:
课程设计报告
一、题目分析
主要功能包括:
1、录入:
可以录入航班情况(如:
输入航班号,飞机编号,查询起降时间,起飞抵达城市,剩余的票数)。
2、查询:
可以查询某个航线的情况(如:
输入航班号,飞机编号,查询起降时间,起飞抵达城市,剩余的票数);可以输入降落城市及航班号,查询飞机航班情况。
3、订票:
根据客户要求(航班号、订票数量)查询该航班的余票数情况,若有余票,则可以订票;若余票数不足,则需要重新询问客户要求,否则不能完成订票。
4、退票:
可退票,根据客户的,订票数量查询是否为真实信息,为客户办理退票。
5、退出系统。
二、总体设计
拿到课程设计题目后,经过仔细的研究,还是决定做航空客运订票系统,它可以使自己很好的巩固在数据结构当中所学到的知识以及各算法,做到学以致用,并在运用的基础上,进一步去创新。
1、主程序流程图及其说明
主程序的流程图如下图所示:
利用switch语句,用户只需根据自己的需要,输入相应的命令即可达到效果。
例如,若需要查询航班信息时,则输入2;需要为客户预定机票时,则输入4;若需要退出系统,则输入5即可。
2、子程序流程图及其说明
⑴、录入航班信息的流程图及其说明:
主要功能是将新的航班信息写入新建链表中,然后把新链表与储存航班的链表合并,得到新的航班信息,实现对新航班的增加。
录入航班信息的流程图如下图所示:
⑵、查询航班信息流程图及其说明:
先输入所要查找的航班,可通过降落城市查询或根据航班号查询。
然后判断该航班是否存在,若存在,则输出相关的航班信息;若不存在,则提示该航班不存在。
查询航班信息的流程图如下图所示:
⑶、订票、退票流程图及其说明:
订票说明:
先输入降落城市,找到该航班并显示该航班信息,若找不到则提示不存在该航班。
再通过需要订票的数量来判断余票量是否足够。
若足够则录入客户,完成订票;若余票不足,则提示是否要取消并重新订票。
订票的流程图如下图所示:
退票说明:
先通过输入客户的及订票数目,确定是否存在该客户信息,若符合条件,则完成退票;若无该客户信息,则提示该航班没有人订票或者是该客户没有订该航班的票。
退票的流程图如下图所示:
三、详细设计
1、数据结构设计
typedefstructbooked
{//单链表
charname1[15];//已订票客户
intnumber1;//已订票数量
structbooked*next1;
}booked,*Link;
typedefstructbook
{//单链表
charname2[15];//预定票客户
intnumber2;//要订票数量
structbook*next2;//下一个链队结点指针
}book,*Qptr;
typedefstruct{
Qptrfront;//单链队头结点
Qptrrear;//单链队尾结点
}linkQueue;
2、函数说明
(1)主函数
main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。
(2)其他各功能函数包括
函数名
功能
voidenter()
录入航班信息
voidrefer()
查询航线信息
intInsertLinklist(Linklist&head1);
声明录入航班信息
voidcityrefer();
通过降落城市查询
voidflynumrefer();
通过航班号查询
voidreserve();
订票
voidrefund();
退票
3、分工函数设计(截图分析及相关说明)
⑴、主函数
voidmain()
{
H=(structbooked*)malloc(sizeof(booked));
Q.front=Q.rear=(Qptr)malloc(sizeof(book));//申请空间并初始化队列
InitLinklist();
intn;
do{//打印主界面
printf("\t+++++++++++++++++++++++++++++\n\n");
printf("\t*->1.录入航班信息*\n\n");
printf("\t*->2.查询航班信息*\n\n");
printf("\t*->3.订票功能*\n\n");
printf("\t*->4.退票功能*\n\n");
printf("\t*->5.退出*\n\n");
printf("\t+++++++++++++++++++++++++++++\n");
printf("\t请选择:
");
scanf("%d",&n);
printf("\n");
switch(n)
{
case1:
enter();//录入功能
break;
case2:
refer();//查询功能
break;
case3:
reserve();//订票功能
break;
case4:
refund();//退票功能
break;
case5:
printf("【感使用航空客运订票系统】\n");
break;//退出
}
}while(n==1||n==2||n==3||n==4);
}
[运行结果]:
2、录入航班信息
voidenter()//录入航班信息
{
intj=1,m;
do{
if(!
InsertLinklist(L))//向其中加入航班信息
{
printf("存已满\n");
}//向链表中加一结点
printf("\t是否要输入下一个航线记录?
\n");
printf("\t是请输入1\n");
printf("\t否请输入2\n");
scanf("%d",&m);//选择是否输入下一条航线
}while(m==1);
}
LinklistInitLinklist()
{
L=(Linklist)malloc(sizeof(fly));
if(!
L)
L->next=NULL;//建立一个带有头结点的单链表
return(L);
}
intInsertLinklist(Linklist&L)//向航线链表添加新的结点
{
Linklistp;
p=(Linklist)malloc(sizeof(fly));//为一个新的结点分配空间
printf("\t请依次输入下面几项容:
\n\n");
printf("航班号:
");
scanf("%s",p->flynum);
printf("飞机编号:
");
scanf("%s",p->plane);
printf("起飞城市:
");
scanf("%s",p->city1);
printf("降落城市:
");
scanf("%s",p->city);
printf("飞行日期:
");
scanf("%s",p->date);
printf("剩余的票数:
");
scanf("%d",&p->rest);
p->booked=(booked*)malloc(sizeof(booked));//申请存储空间
p->book=Q.front=Q.rear=(Qptr)malloc(sizeof(book));//申请存储空间
p->next=L->next;
L->next=p;
return1;
}
[运行结果]:
3、查询航班信息
①.通过降落城市查询
voidcityrefer()//通过降落城市查询
{
charc[15];
Linklistp=L;
intm;
printf("\t请输入你要查询的降落城市:
");
scanf("%s",c);
do{
p=p->next;
if(p)
{
if(stricmp((*p).city,c)==0)
{
printf("\t航班信息:
\n");
printf("\t航班号:
%s\n",p->flynum);
printf("\t飞机编号:
%s\n",p->plane);
printf("\t起飞城市:
%s\n",p->city1);
printf("\t降落城市:
%s\n",p->city);
printf("\t飞行日期:
%s\n",p->date);
printf("\t剩余的票数:
%d\n",p->rest);
break;
}
else
{
printf("\t【对不起,没有您要查找的降落城市.】\n\n");
m=0;
}
}
}while(m!
=0);
}
[运行结果]:
②.通过航班号查询
voidflynumrefer()//通过航班号查询
{
charc[15];
Linklistp=L;
intm;
printf("\t请输入你要查询的航班号:
");
scanf("%s",c);
do{
p=p->next;
if(p)
{
if(strcmpi((*p).flynum,c)==0)
{
printf("\t航班信息:
\n");
printf("\t航班号:
%s\n",p->flynum);
printf("\t飞机编号:
%s\n",p->plane);
printf("\t起飞城市:
%s\n",p->city1);
printf("\t降落城市:
%s\n",p->city);
printf("\t飞行日期:
%s\n",p->date);
printf("\t剩余的票数:
%d\n",p->rest);
break;
}
else
{
printf("\t【对不起,没有您要查找的航班.】\n");
m=0;
}
}
}while(m!
=0);
}
[运行结果]:
四、源程序代码
#include
#include
#include
#include
typedefstructbooked
{//单链表
charname1[15];//已订票客户
intnumber1;//已订票数量
structbooked*next1;
}booked,*Link;
typedefstructbook
{//单链表
charname2[15];//预定票客户
intnumber2;//要订票数量
structbook*next2;//下一个链队结点指针
}book,*Qptr;
typedefstruct{
Qptrfront;//单链队头结点
Qptrrear;//单链队尾结点
}linkQueue;
typedefstructfly
{//创建一个航线的结构体
charflynum[15];//航班号
charplane[15];//飞机编号
chardate[12];//飞行日期
charcity1[15];//起飞城市
charcity[15];//降落城市
intrest;//剩余的票数
structfly*next;//指向下一个链结点的指针
structbooked*booked;//定义一个指向已订票客户的头结点指针
structbook*book;
}fly,*Linklist;
structfly*L=NULL;//定义全局变量
structbooked*H;//为已订票客户链队来申请空间
linkQueueQ;//linkQueue类型的来申请空间
LinklistInitLinklist();//声明
intInsertLinklist(Linklist&head1);//声明录入航班信息
voidcityrefer();//通过降落城市查询
voidflynumrefer();//通过航班号查询
voidenter();//录入信息
voidrefer();//查询信息
voidreserve();//订票
voidrefund();//退票
voidmain()
{
H=(structbooked*)malloc(sizeof(booked));
Q.front=Q.rear=(Qptr)malloc(sizeof(book));//申请空间并初始化队列
InitLinklist();
intn;
do{//打印主界面
printf("\t+++++++++++++++++++++++++++++\n\n");
printf("\t*->1.录入航班信息*\n\n");
printf("\t*->2.查询航班信息*\n\n");
printf("\t*->3.订票功能*\n\n");
printf("\t*->4.退票功能*\n\n");
printf("\t*->5.退出*\n\n");
printf("\t+++++++++++++++++++++++++++++\n");
printf("\t请选择:
");
scanf("%d",&n);
printf("\n");
switch(n)
{
case1:
enter();//录入功能
break;
case2:
refer();//查询功能
break;
case3:
reserve();//订票功能
break;
case4:
refund();//退票功能
break;
case5:
printf("【感使用航空客运订票系统】\n");
break;//退出
}
}while(n==1||n==2||n==3||n==4);
}
voidenter()//录入航班信息
{
intj=1,m;
do{
if(!
InsertLinklist(L))//向其中加入航班信息
{
printf("存已满\n");
}//向链表中加一结点
printf("\t是否要输入下一个航线记录?
\n");
printf("\t是请输入1\n");
printf("\t否请输入2\n");
scanf("%d",&m);//选择是否输入下一条航线
}while(m==1);
}
LinklistInitLinklist()
{
L=(Linklist)malloc(sizeof(fly));
if(!
L)
L->next=NULL;//建立一个带有头结点的单链表
return(L);
}
intInsertLinklist(Linklist&L)//向航线链表添加新的结点
{
Linklistp;
p=(Linklist)malloc(sizeof(fly));//为一个新的结点分配空间
printf("\t请依次输入下面几项容:
\n\n");
printf("航班号:
");
scanf("%s",p->flynum);
printf("飞机编号:
");
scanf("%s",p->plane);
printf("起飞城市:
");
scanf("%s",p->city1);
printf("降落城市:
");
scanf("%s",p->city);
printf("飞行日期:
");
scanf("%s",p->date);
printf("剩余的票数:
");
scanf("%d",&p->rest);
p->booked=(booked*)malloc(sizeof(booked));//申请存储空间
p->book=Q.front=Q.rear=(Qptr)malloc(sizeof(book));//申请存储空间
p->next=L->next;
L->next=p;
return1;
}
voidrefer()//查询航线信息
{
intn;
printf("\t查找航线信息\n");
printf("\t++++++++++++++++++++++++++++++++\n\n");
printf("\t*->1.通过降落城市查询*\n\n");
printf("\t*->2.通过航班号查询*\n\n");
printf("\t++++++++++++++++++++++++++++++++\n");
printf("\t请选择:
");
scanf("%d",&n);
switch(n)
{
case1:
cityrefer();
break;
case2:
flynumrefer();
break;
default:
break;
}
}
voidcityrefer()//通过降落城市查询
{
charc[15];
Linklistp=L;
intm;
printf("\t请输入你要查询的降落城市:
");
scanf("%s",c);
do{
p=p->next;
if(p)
{
if(stricmp((*p).city,c)==0)
{
printf("\t航班信息:
\n");
printf("\t航班号:
%s\n",p->flynum);
printf("\t飞机编号:
%s\n",p->plane);
printf("\t起飞城市:
%s\n",p->city1);
printf("\t降落城市:
%s\n",p->city);
printf("\t飞行日期:
%s\n",p->date);
printf("\t剩余的票数:
%d\n",p->rest);
break;
}
else
{
printf("\t【对不起,没有您要查找的降落城市.】\n\n");
m=0;
}
}
}while(m!
=0);
}
voidflynumrefer()//通过航班号查询
{
charc[15];
Linklistp=L;
intm;
printf("\t请输入你要查询的航班号:
");
scanf("%s",c);
do{
p=p->next;
if(p)
{
if(strcmpi((*p).flynum,c)==0)
{
printf("\t航班信息:
\n");
printf("\t航班号:
%s\n",p->flynum);
printf("\t飞机编号:
%s\n",p->plane);
printf("\t起飞城市:
%s\n",p->city1);
printf("\t降落城市:
%s\n",p->city);
printf("\t飞行日期:
%s\n",p->date);
printf("\t剩余的票数:
%d\n",p->rest);
break;
}
else
{
printf("\t【对不起,没有您要查找的航班.】\n");
m=0;
}
}
}while(m!
=0);
}
voidreserve()//订票
{
Linklistp=L;//Linklist类型的L来指向链表头
booked*h=H,*h1;//booked定义客户的结点,以便插入与删除
charc[15];
intm=1,ticket;
intbookedt=0,bookt=0;
printf("请输入降落城市:
");
scanf("%s",c);
p=L->next;
if(p){
do{//查找是否有该航班
if(!
p)
{
printf("【对不起,没有您要查找的航班.】\n\n");
return;
}
m=stricmp(p->city,c);
//通过比较来判定
if(m==0)
{
printf("\t航班信息:
\n");
printf("\t航班号:
%s\n",p->flynum);
printf("\t飞机编号:
%s\n",p->plane);
printf("\t起飞城市:
%s\n",p->city1);
printf("\t降落城市:
%s\n",p->city);
printf("\t飞行日期:
%s\n",p->date);
printf("\t剩余的票数:
%d\n",p->rest);
}
else
p=p->next;//促使循环
}while(m!
=0);
if(m==0)
{//当有该航班时,进行订票
do{
printf("\n请输入您要订的票数:
\n");
scanf("%d",&ticket);
if(ticket<=p->rest)
{
h=p->booked;
if(h)
{
h1=h;
h=h->next1;
h=(structbooked*)malloc(sizeof(booked));
printf("请输入客户:
\n");
scanf("%s",h->name1);
h->number1=ticket;
h->next1=h1->next1;
h1->next1=h;
p->rest=p->rest-ticket;
printf("【订票成功!
】\n");
m=2;
}