航空客运订票系统.docx
- 文档编号:24803559
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:25
- 大小:213.83KB
航空客运订票系统.docx
《航空客运订票系统.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统.docx(25页珍藏版)》请在冰豆网上搜索。
航空客运订票系统
航空客运订票系统
设计报告
姓名:
班级:
学号:
学院:
专业:
指导:
2013.6.20
目录
1.需求分析1
1.1概述1
1.2数据需求1
1.3功能性需求2
1.4其他需求2
2.概要设计3
2.1数据结构定义3
3.详细设计5
3.1系统模块图5
3.2数据结构定义6
3.3主要模块算法描述8
1.数据的输入和保存8
4.系统实现10
4.1开发环境10
4.2运行界面10
4.3测试用例13
6.参考文献14
7.源程序14
1.需求分析
该项目是制作一个航空客运订票系统,编写系统需求分析的目的是明确软件的功能、界面,使得系统分析人员及软件开发人员能清楚地了解用户的需求,方便开发工作。
1.1概述
随着出行人数越来越多,航空客运所占的比例越来越多,机场的售票压力越来越大,此软件意在解决机场的售票问题让更多的人在家就能购买机票,减轻机场负担。
1.2数据需求
两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。
由于预约人数无法预计,队列也应以链表作存储结构。
整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。
每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。
1.3功能性需求
1.主界面模块:
供用户选择使用本系统的各个功能。
2.录入航线信息模块:
可以录入飞行目的地、航线号、飞机号、时间、一等舱数量、二等舱数量、三等舱数量。
为以后的模块提供数据。
3.查询模块:
用户输入目的地后,会显示飞往该地的航班、飞机号、起飞时间、一等舱剩余票数、二等舱剩余票数、三等舱剩余票数。
4.订票模块:
用户输入目的地后,会显示飞往该地的航班、飞机号、起飞时间、一等舱剩余票数、二等舱剩余票数、三等舱剩余票数。
提示用户是否订票,旅客订票成功后会显示订票成功。
不成功会提示旅客进入排队等票。
5.退票模块:
用户输入目的地后,会显示飞往该地的航班、飞机号、起飞时间、一等舱剩余票数、二等舱剩余票数、三等舱剩余票数。
提示用户是否退票,旅客退票成功后会显示退票成功。
1.4其他需求
①界面简洁,美观
②程序实用交互性好
2.概要设计
本系统主要使用动态链表保存机票信息,使用队列保存排队的客人信息。
其中包含有航线号、飞机号、时间、一等舱票数、二等舱票数、三等舱票数、旅客的姓名和订票信息。
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
划分出来的模块相对独立但又相关,且容易理解。
2.1数据结构定义
抽象数据类型
1.等候队列类型
ADTWQUEUE
{
数据对象:
D={ai∈乘客信息,I=1,2,…,n,n≥0}
数据关系:
R={
基本操作:
InitQueue(WQueue&Q)
初始条件:
Q为WQueue类型
操作结果:
构造一个空的队列Q
EnQueue(WQueue&Q,ElemTypepa)
初始条件:
队列Q已存在。
操作结果:
pa入队列
DeQueue(WQueue&Q,ElemTypep)
初始条件:
Q为非空队列。
操作结果:
删除Q的队头元素。
}ADTWQUEUE
链表类型
ADTLinklist
{数据对象:
D={ai∈信息,I=1,2,…,n,n≥0}
数据关系:
R={
基本操作:
InitLink(passenger&Pa)
操作结果:
构造一个空的链表Pa
InsertList(passengerL,ElemTypepa)
初始条件:
动态链表L已存在。
操作结果:
pa插入链表。
search_delet(passengerL,ElemTypepa)
初始条件:
线性链表L已经存在且非空。
操作结果:
删除L中pa内容相同的元素。
}ADTLinklist
数组类型
Enter(ALAirline[MAX])
操作结果:
构建AL类型的Airline数组
订票类型
Book(AL&line)
操作结果:
P=N退出订票;
P=Y确认订票;
Q=N退出排队;
Q=Y确认排队;
3.详细设计
本节介绍了首相数据类型的计算机实现,其中包括ADT的种类,功能的种类及实现,数据结构的定义,常量的定义,函数原型声明及伪代码算法。
还介绍了每个功能所对应的操作算法的实现。
3.1系统模块图
3.2数据结构定义
structseat
{
intfirst;//一等舱
intsecond;//二等舱
intthird;//三等舱
};/
structElemType
{
charname;//姓名
seatticket;//舱位
};//ElemType
typedefstructLNode
{
charname;//姓名
seatticket;//舱位
structLNode*next;//定义指针保存下一项地址
}LNode,*passenger;
typedefstructWQueue
{
passengerfront;//队头指针
passengerrear;//队尾指针
}WQueue;
structAL
{
charEPlace;//终点站
intFNo;//航班号
intPNo;//飞机号
intTime;//时间
seatTicket;//总票量,用结构体seat
passengerBPassenger;//已经订票的乘客,next存放已经订票的乘客链表的表地址
seatRTicket;//剩余的票额
passengerwait;//候补队列,next存放队头地址
};
3.3主要模块算法描述
1.数据的输入和保存
2.查询
3.订票
4.退票
4.系统实现
本节介绍了系统实现的开发环境,包括硬件环境,软件环境,以及运行界面展示。
最后显示了该系统实现后每个功能的实现结果。
4.1开发环境
硬件环境
电脑型号:
笔记本
处理器:
英特尔Corei5
主板:
华硕
显卡:
NVIDIA
软件环境
操作系统:
Windows7旗舰版64位(DirectX11)。
开发软件:
MicrosoftVisualC++6.0。
4.2测试用例
4.3测试结果
4.2运行界面
选择4录入航班信息:
选择1查询航班:
选择2订票:
选择3退票
4.3测试用例
输入a,1,10,1,3,5,10b,2,20,2,3,5,10c,3,30,3,3,5,10
当输出“请输入目的地”时,请任意输入一个一个字符的地名,会输出终点站、飞机号、航班号以及一、二、三等舱的余票额。
接下来,程序输出“是否需要订票”,如果要,请输入“Y”,程序会输出“请输入名字和票数:
”请输入你的姓名(一个字符)和订票额(一等、二等、三等),订票成功后会输出“订票成功,感谢使用。
如果不要订票,请输入“N”,程序将输出“感谢使用。
”当程序输出“是否退票。
”时,操作与订票基本一致。
5.总结
这次课程设计进行了整整两个星期,虽然一整天都在电脑房里对着电脑,很枯燥,也很辛苦,但是我觉得还是很有收获的。
这是我们第一次自己去设计一个比较系统的程序,对我们来说也是一个很好的锻炼。
首先,为了能写出程序,我将以前所学都好好的巩固了一遍,并且努力的去灵活的运用。
起码现在对结构体,链表的操作还是熟练了很多。
以前一些很模糊的知识点,通过这次练习,很多都清楚起来。
其次,平时都是编写一些单个的操作,这次需要自己写出一个可以实现几个功能的系统性的程序,刚开始时是一头雾水,但经过大家的讨论,自己的摸索,也慢慢找到了方法。
这让我体会到,在编写程序时,不仅需要扎实的知识,还要有细心周到的考虑,同学之间的合作也是很重要的。
在这两个星期里,我觉得发现了自己还有很多很多的不足,也深刻的体会到了自己还有很多东西要学,而且要真的掌握,还得多用心,多用脑。
计算机的确不好学,但只要努力就会有收获。
这次程序是写了不少,但还是没能运行出一个正确的结果,不过我相信,经过以后的学习和努力,是肯定能做出一个好的程序来的!
6.参考文献
[1]数据结构(C语言版)
[2]C语言程序设计(第四版)
7.源程序
#include
#include
#include
#include
#defineMAX3
#defineN10
#defineM10
#defineOK1
#defineERROR0
structseat
{
intfirst;
intsecond;
intthird;
};//舱位
structElemType
{
charname;
seatticket;
};//ElemType
typedefstructLNode
{
charname;
seatticket;
structLNode*next;
}LNode,*passenger;
typedefstructWQueue
{
passengerfront;
passengerrear;
}WQueue;//候补队列
structAL
{
charEPlace;//终点站
intFNo;//航班号
intPNo;//飞机号
intTime;//时间
seatTicket;//总票量,用结构体seat
passengerBPassenger;//已经订票的乘客,next存放已经订票的乘客链表的表地址
seatRTicket;//剩余的票额
passengerwait;//候补队列,next存放队头地址
};
intInitLink(passenger&Pa)
{
Pa=(passenger)malloc(sizeof(LNode));
if(!
Pa)returnERROR;
Pa->name=0;
Pa->ticket.first=0;
Pa->ticket.second=0;
Pa->ticket.third=0;
Pa->next=NULL;
returnOK;
}//建立乘客链表
intInitQueue(WQueue&Q)
{
Q.front=Q.rear=(passenger)malloc(sizeof(LNode));
if(!
Q.front)
returnERROR;
Q.front->next=NULL;
returnOK;
}//建立候补队列
intEnQueue(WQueue&Q,ElemTypepa)
{
passengerp;
p=(passenger)malloc(sizeof(LNode));
if(!
p)returnERROR;
p->name=pa.name;
p->ticket.first=pa.ticket.first;
p->ticket.second=pa.ticket.second;
p->ticket.third=pa.ticket.third;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
returnOK;
}//入队列
intInsertList(passengerL,ElemTypepa)
{
passengerp,q;
p=L;
while(p->next&&p)
p=p->next;
q=(passenger)malloc(sizeof(LNode));
q->name=pa.name;
q->ticket.first=pa.ticket.first;
q->ticket.second=pa.ticket.second;
q->ticket.third=pa.ticket.third;
q->next=NULL;
p->next=q;
returnOK;
}//乘客链表的插入
intDeQueue(WQueue&Q,ElemTypep)
{
passengerq;
if(Q.front==Q.rear)
returnERROR;
q=Q.front->next;
p.name=q->name;
p.ticket.first=q->ticket.first;
p.ticket.second=q->ticket.second;
p.ticket.third=q->ticket.third;
Q.front->next=q->next;
if(Q.rear==q)
Q.front=Q.rear;
returnOK;
}//出队列
intsearch_delet(passengerL,ElemTypepa)
{
passengerp,q;
p=L;
while(p->next)
{
if(p->next->name==pa.name)
break;
elsep=p->next;
}
q=p->next;
p->next=q->next;
free(q);
returnOK;
}//乘客链表删除
intEnter(ALAirline[MAX])
{
inti;
printf("请依次输入目的地,航班号,飞机号,时间,一等舱票数,二等舱票数,三等舱票数\n");
for(i=0;i { scanf("%c,%d,%d,%d,%d,%d,%d",&Airline[i].EPlace,&Airline[i].FNo,&Airline[i].PNo,&Airline[i].Time,&Airline[i].Ticket.first,&Airline[i].Ticket.second,&Airline[i].Ticket.third); passengerPa=0; InitLink(Pa); Airline[i].BPassenger=Pa; WQueueQ; InitQueue(Q); Airline[i].wait=Q.rear; Airline[i].RTicket.first=Airline[i].Ticket.first; Airline[i].RTicket.second=Airline[i].Ticket.second; Airline[i].RTicket.third=Airline[i].Ticket.third; fflush(stdin); } returnOK; }//输入航线信息 intSearch(charplace,ALAirline[MAX]) { inti; for(i=0;i { if(place==Airline[i].EPlace) { printf("EPlace: %c\nPNo: %d\nFNo: %d\nTime: %d\n",Airline[i].EPlace,Airline[i].PNo,Airline[i].FNo,Airline[i].Time); printf("剩余票数: \n"); printf("first: %dsecond: %dthird: %d\n",Airline[i].RTicket.first,Airline[i].RTicket.second,Airline[i].RTicket.third); break; } } returni; }//查找 intBook(AL&line) { charp,q; WQueueQ; Q.rear=line.wait; passengerPa=line.BPassenger; ElemTypepa; printf("是否需要订票(y/n)? \n"); fflush(stdin); scanf("%c",&p); if(p=='n') printf("感谢使用。 \n"); else { if(line.RTicket.first<=0||line.RTicket.second<=0||line.RTicket.third<=0) { printf("是否排队(y/n)? \n"); fflush(stdin); scanf("%c",&q); if(q=='n') printf("感谢使用。 \n"); elseprintf("请输入名字和票数等待排队: "); fflush(stdin); scanf("%c,%d,%d,%d",&pa.name,&pa.ticket.first,&pa.ticket.second,&pa.ticket.third); EnQueue(Q,pa); printf("排队成功。 \n"); } else { printf("请输入姓名和票数: : \n"); scanf("%c,%d,%d,%d",&pa.name,&pa.ticket.first,&pa.ticket.second,&pa.ticket.third); InsertList(Pa,pa); line.RTicket.first=line.RTicket.first-pa.ticket.first; line.RTicket.second=line.RTicket.second-pa.ticket.second; line.RTicket.third=line.RTicket.third-pa.ticket.third; } } returnOK; }//Book intReturn(AL&line) { ElemTypepa,pb; printf("是否退票。 \n"); charp; WQueueQ; Q.rear=line.wait; fflush(stdin); scanf("%c",&p); if(p=='y') { printf("请输入名字和票数: "); fflush(stdin); scanf("%c,%d,%d,%d",&pa.name,&pa.ticket.first,&pa.ticket.second,&pa.ticket.third); search_delet(line.BPassenger,pa); line.RTicket.first=line.RTicket.first+pa.ticket.first; line.RTicket.second=line.RTicket.second+pa.ticket.second; line.RTicket.third=line.RTicket.third+pa.ticket.third; } elseprintf("感谢使用。 \n"); returnOK; }//退票 voidprintf_mian() { printf("|—————————————————|\n"); printf("|航空客运订票系统|\n"); printf("|—————————————————|\n"); printf("||\n"); printf("||\n"); printf("|请选择您需要的服务: |\n"); printf("|1.查询航班|\n"); printf("|2.订票系统|\n"); printf("|3.退票系统|\n"); printf("|4.航线编辑|\n"); printf("|5.退出系统|\n"); printf("|—————————————————|\n"); } intmain() { charEplace; intn; ALpa; ALp[MAX]; do { printf_mian(); scanf("%d",&n); inti; switch(n) { case1: printf("请输入目的地: ");fflush(stdin);scanf("%c",&Eplace);i=Search(Eplace,p);printf("\n\n查询完毕,3秒后返回主菜单。 \n\n");Sleep(3000);break; case2: printf("请输入目的地: ");fflush(stdin);scanf("%c",&Eplace);i=Search(Eplace,p);Book(p[i]);printf("\n\n订票成功,3秒后返回主菜单。 \n\n");Sleep(3000);break; case3: printf("请输入目的地: ");fflush(stdin);scanf("%c",&Eplace);i=Search(Eplace,p);Return(p[i]);printf("\n\n退票成功,3秒后返回主菜单。 \n\n");Sleep(3000);break; case4: fflush(stdin);Enter(p);printf("\n\n航线编辑完毕,3秒后返回主菜单。 \n\n");Sleep(3000);break; default: exit(0); } fflush(stdin); }while(n==1||n==2||n==3||n==4); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航空 客运 订票 系统