航空客运订票系统方案.docx
- 文档编号:8817469
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:32
- 大小:471.70KB
航空客运订票系统方案.docx
《航空客运订票系统方案.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统方案.docx(32页珍藏版)》请在冰豆网上搜索。
航空客运订票系统方案
洛阳理工学院
课程设计报告
课程名称数据结构课程设计
设计题目航空客运订票系统
专
课程设计任务书
设计题目:
航空客运订票系统__________________________________
_________________________________________________________
设计容与要求:
容:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票:
可退票,退票后修改相关数据文件;
客户资料有,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
课程设计评语
成绩:
指导教师:
_______________
年月日
一.问题描述
通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票:
可退票,退票后修改相关数据文件;
客户资料有,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
二.基本要求
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
三.数据结构
typedefstructYidingkehu//单链表
{
charname[15];//已订票的客户
charID[15];//已订票的客户证件号
intdingpiaoshu;//已订票数量
structYidingkehu*next1;
}Yidingkehu,*Link;
typedefstructWeidingkehu//单链队
{
charname[15];//预订票的客户
charID[15];//预订票的客户证件号
intyudingpiao;//要订票数量
structWeidingkehu*next2;//下一个链队结点指针
}Weidingkehu,*Qptr;
typedefstruct
{
Qptrfront;//单链队头结点
Qptrrear;//单链队尾结点
}linkQueue;
typedefstructHangxian//创建一个航线的结构体
{
charhangbanhao[15];//航班号
charfeijihao[15];//飞机号
intqifeishijian;//起飞时间
intjiangluoshijian;
intlevel;//仓位
intyupiao;//余票
intpiaojia;//票价
intzhekou;//折扣
charzhongdianzhan[15];//降落城市
structHangxian*next;//指向下一个链结点的指针
structYidingkehu*yiding;//定义一个指向已订票客户的头结点指针
structWeidingkehu*yudingqueue;
}Hangxian,*Linklist;
四.总体设计
主函数
录入功能
查询功能
订票功能
退票功能
修改功能
通过目的地查询
通过航班号查询
五.详细设计
5.1录入功能voidlurugongneng()
通过调用LinklistInitLinklist()和intInsertLinklist(Linklist&L)函数录入航线信息,通过1或者2来控制是否继续输入,输入的航线信息包括航班号,飞机号,终点站,起飞时间,降落时间,仓位,票价,折扣和余票数。
5.2查询功能voidchaxungongnen()
查询分为按目的地查询和按航班号查询,通过voidchaxungongnen()函数调用voidmddchaxun()//通过目的地查询函数和voidhbhchaxun()//通过航班号查询函数。
通过n控制功能选择,通过输入的目的地和航班号查询是否有该航班信息,若找到,则输出该航班信息,否则提示用户没找到,退出。
5.3订票功能voiddingpiaogongnen()
定义Linklist类型的L来指向链表头Yidingkehu*h=H,*h1定义客户的结点,方便插入与删除,intm=1,piao,n(票数);intydpiao=0,yd=0;订票时输入终点站,,如果找到,输入用户,证件号和票数,如果余票不足,提醒用户重新订票,否则订票成功,否则提示用户无此航班。
5.4退票功能voidtuipiaogongnen()
intm=1,piao定义相应变量,通过输入航班号查找是否有退票的航班,如果有,输出该航班的信息并输入用户的和订票数,如果符合,使余票数减一,退票成功,如果没有,提示用户输入有误,退出。
5.5修改功能voidxiugaigongnen()
定义Linklistp=L;intm,输入要修改的飞机号,如果找到,输出该航班信息并且输入修改后的航班信息,如果没找到,提示用户无此航班,退出。
。
六.测试与调试
6.1程序的模块
录入功能:
原始数据的输入。
查询功能:
根据客户需要,查询相关航线。
订票功能:
满足客户的订票任务。
退票功能:
根据客户的不同情况,支持客户的退票请求。
修改功能:
根据要求修改航班信息。
退出功能:
退出系统。
6.2程序的调试
(1)程序在起初设计的时候,经常出现溢出错误,而且不只一处。
为了修正这些溢出错误,耗费了大量的时间,修正解释之后再看源程序,才发现原来只是因为开始的
函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作
(2)由于忘记了一些c语言的规使得在调试过程中一些错误没有发现。
例如,调用函数时,数组只需要传递数组名即可;字符‘0’和整型的0是不同的,不可以直接对其画等号。
(3)测试用例具有一定的广泛性。
运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果,说明程序具有一定的可靠性和稳定性。
6.3测试结果
图
6-1录入功能
图
6-2通过目的地查询
图
6-3通过航班号查询
图
6-4订票功能
图
6-5退票功能
图6-6修改功能
七.源程序清单
#include
#include
#include
#include
#defineok1
typedefstructYidingkehu//单链表
{
charname[15];//已订票的客户
charID[15];//已订票的客户证件号
intdingpiaoshu;//已订票数量
structYidingkehu*next1;
}Yidingkehu,*Link;
typedefstructWeidingkehu//单链队
{
charname[15];//预订票的客户
charID[15];//预订票的客户证件号
intyudingpiao;//要订票数量
structWeidingkehu*next2;//下一个链队结点指针
}Weidingkehu,*Qptr;
typedefstruct
{
Qptrfront;//单链队头结点
Qptrrear;//单链队尾结点
}linkQueue;
typedefstructHangxian//创建一个航线的结构体
{
charhangbanhao[15];//航班号
charfeijihao[15];//飞机号
intqifeishijian;//起飞时间
intjiangluoshijian;
intlevel;//仓位
intyupiao;//余票
intpiaojia;//票价
intzhekou;//折扣
charzhongdianzhan[15];//降落城市
structHangxian*next;//指向下一个链结点的指针
structYidingkehu*yiding;//定义一个指向已订票客户的头结点指针
structWeidingkehu*yudingqueue;
}Hangxian,*Linklist;
structHangxian*L=NULL;//定义全局量
structYidingkehu*H;//为已订票客户链队来申请空间
linkQueueQ;//linkQueue类型的来申请空间
LinklistInitLinklist();//声明
intInsertLinklist(Linklist&head1);//声明
voidhbhchaxun();//通过航班号查询
voidmddchaxun();//通过目的地查询
voidlurugongneng();//初始化录入功能
voidchaxungongnen();//查询功能
voiddingpiaogongnen();//订票功能
voidtuipiaogongnen();//退票功能
voidxiugaigongnen();//修改功能
voidmain()
{
H=(structYidingkehu*)malloc(sizeof(Yidingkehu));
Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));
InitLinklist();
intn;
do//菜单
{
printf("\t欢迎使用航空客运订票系统\n");
printf("\t++++++++++++++++++++++++++++++\n");
printf("\t==>1.录入功能==\n");
printf("\t==>2.查询功能==\n");
printf("\t==>3.订票功能==\n");
printf("\t==>4.退票功能==\n");
printf("\t==>5.修改功能==\n");
printf("\t==>6.退出==\n");
printf("\t++++++++++++++++++++++++++++++\n");
printf("\t请选择:
");
scanf("%d",&n);
printf("\n");
switch(n)
{
case1:
lurugongneng();break;//录入功能
case2:
chaxungongnen();break;//查询功能
case3:
dingpiaogongnen();break;//订票功能
case4:
tuipiaogongnen();break;//退票功能
case5:
xiugaigongnen();break;//修改功能
default:
exit(0);
}
}
while(n==1||n==2||n==3||n==4||n==5);
}
voidlurugongneng()
{
intj=1,m;
do{
if(!
InsertLinklist((Linklist)L))//向其中加入航班信息
{
printf("存已满\n");
exit(OVERFLOW);
}//向链表中加一结点
printf("\t是否要输入下一个航线记录?
\n");
printf("\t是请输入1\n");
printf("\t否请输入2\n\t");
scanf("%d",&m);//在这里依靠人来决定是否输入下一条航线记
}
while(m==1);
}
LinklistInitLinklist()
{
L=(Linklist)malloc(sizeof(Hangxian));
if(!
L)exit(OVERFLOW);
L->next=NULL;//建立一个带有头结点的单链表
return(L);
}
intInsertLinklist(Linklist&L)//向航线链表添加新的结点
{
Linklistp;
p=(Linklist)malloc(sizeof(Hangxian));//为一个新的结点分配空间
if(!
p)exit(OVERFLOW);
printf("\t请依次输入下面几项容:
\n\n");
printf("航班号:
");
scanf("%s",p->hangbanhao);
printf("飞机号:
");
scanf("%s",p->feijihao);
printf("终点站:
");
scanf("%s",p->zhongdianzhan);
printf("起飞时间:
");
scanf("%d",&p->qifeishijian);
printf("降落时间:
");
scanf("%d",&p->jiangluoshijian);
printf("仓位:
");
scanf("%d",&p->level);
printf("票价:
");
scanf("%d",&p->piaojia);
printf("折扣:
");
scanf("%d",&p->zhekou);
printf("余票数:
");
scanf("%d",&p->yupiao);
p->yiding=(Yidingkehu*)malloc(sizeof(Yidingkehu));//为它申请空间
p->yudingqueue=Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));//为它申请空间
p->next=L->next;
L->next=p;//链表中的插入一个结点
return(ok);
}
voidchaxungongnen()
{
intn;
printf("\t查找航班信息\n");
printf("\t+++++++++++++++++++++++++++++\n");
printf("\t==>1.通过目的地查询==\n");
printf("\t==>2.通过航班号查询==\n");
printf("\t+++++++++++++++++++++++++++++\n");
printf("\t请选择:
");
scanf("%d",&n);
switch(n)
{
case1:
mddchaxun();break;
case2:
hbhchaxun();break;
default:
break;
}
}
voidmddchaxun()//通过目的地查询
{
charc[15];
Linklistp=L;
intm;
printf("\t请输入要查询的目的地:
");
scanf("%s",c);
do
{
p=p->next;
if(p)
{
if(strcmpi((*p).zhongdianzhan,c)==0)
{
printf("\t*航班信息*\n");
printf("\t航班号:
%s\n",p->hangbanhao);
printf("\t飞机号:
%s\n",p->feijihao);
printf("\t起飞时间:
%d\n",p->qifeishijian);
printf("\t降落时间:
%d\n",p->jiangluoshijian);
printf("\t余票:
%d\n",p->yupiao);
printf("\t票价:
%d\n",p->piaojia);
printf("\t折扣:
%d\n",p->zhekou);
break;
}
}
else//如果不匹配的话
{
printf("\t对不起没有你要找的目的地:
\n");
m=0;
}
}
while(m!
=0);
}
voidhbhchaxun()//通过航班号查询
{
charc[15];
Linklistp=L;
intm;
printf("\t请输入要查询的航班号:
");
scanf("%s",c);
do
{
p=p->next;
if(p)
{
if(strcmpi((*p).hangbanhao,c)==0)
{
printf("\t*航班信息*\n");
printf("\t航班号:
%s\n",p->hangbanhao);
printf("\t飞机号:
%s\n",p->feijihao);
printf("\t起飞时间:
%d\n",p->qifeishijian);
printf("\t降落时间:
%d\n",p->jiangluoshijian);
printf("\t余票:
%d\n",p->yupiao);
printf("\t票价:
%d\n",p->piaojia);
printf("\t折扣:
%d\n",p->zhekou);
break;
}
}
else//如果不匹配的话
{
printf("\t对不起没有你要找的航班号:
\n");
m=0;
}
}
while(m!
=0);
}
voiddingpiaogongnen()
{
inti;
Linklistp=L;//Linklist类型的L来指向链表头
Yidingkehu*h=H,*h1;//Yidingkehu定义客户的结点,方便插入与删除
linkQueueq=Q;//linkQueue类型的来,方便插入与删除
structWeidingkehu*q3;
charc[15];
intm=1,piao,n;
intydpiao=0,yd=0;
printf("请输入终点站名:
\n");
scanf("%s",c);
p=L->next;
if(p)
{
do//查找一下,是否有这个航班
{
if(!
p)
{
printf("对不起没有你要找的航班:
\n\n");
}
m=strcmpi(p->zhongdianzhan,c);//通过比较来判定
if(m==0)
{
printf("\t*航班信息*\n");
printf("\t航班号:
%s\n",p->hangbanhao);
printf("\t飞机号:
%s\n",p->feijihao);
printf("\t起飞时间:
%d\n",p->qifeishijian);
printf("\t降落时间:
%d\n",p->jiangluoshijian);
printf("\t余票:
%d\n",p->yupiao);
printf("\t票价:
%d\n",p->piaojia);
printf("\t折扣:
%d\n",p->zhekou);
break;
}
elsep=p->next;
}while(m!
=0);
if(m==0)//当有该航班时,进行订票
{
do{
printf("\n请输入你要定的票数:
\n");
scanf("%d",&piao);
if(piao<=p->yupiao)
{
h=p->yiding;
if(h)
{
h1=h;
h=h->next1;
h=(structYidingkehu*)malloc(sizeof(Yidingkehu));
for(i=0;i { printf("请输入你的名字: \n"); scanf("%s",h->name); printf("请输入你的证件号: \n"); scanf("%s",h->ID); h->dingpiaoshu=piao; h->next1=h1->next1; h1->next1=h; p->yupiao=p->yupiao-piao; printf("订票成功\n编号为%s\n",h->ID); } m=2; } } else//余票量不足时 { printf("余票量: %d\n",p->yupiao); printf("对不起,余票%d不足,不能完成订票\n",p->yupiao); printf("是否要重新订票? \n"); printf("需要请输入1否则请按2预定请输入3: \n"); scanf("%d",&m); while(m==3) { printf("对不起,该航班的票已售完\n"); q.front=p->yudingqueue; if(q.front==q.rear) printf("没有人预定票,是否要预定? \n"); elseif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航空 客运 订票 系统 方案