数据结构航空客运订票系统Word文件下载.docx
- 文档编号:20258147
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:23
- 大小:150.14KB
数据结构航空客运订票系统Word文件下载.docx
《数据结构航空客运订票系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构航空客运订票系统Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
|ai-1,ai∈D,i=2,…,n}
Operation:
airline*find_fin()//根据客户提出的终点站名输出航线信息
airline*find_air()//根据客户提出的航班号查询航班信息
airline*find_plane()//根据客户提出的飞机号查询航班信息
airline*find_date()//根据客户提出的飞行日期查询航班信息
voidsearch()//根据客户提出的要求输出航线信息
voidlist()//全部航线的信息
voidbooklist()//订票客户名单
linklist*addlink(linklist*,int,char,int)//增加订票的客户信息
voidsort_ticket()//按剩余票数排序
endADT
1.2队列的抽象数据类型定义
ADTQueue
linkqueueplusqueue(linkqueue,char,int)//增加排队等候的客户名单
endADT
2、本程序包含三个模块
(1)主程序模块:
voidmain()
{初始化;
Do{
输入指令;
处理指令;
}while(指令!
=”退出”);
}
(2)已买票的乘客的链表模块——实行对买票乘客信息的管理
(3)排队买票乘客的队列模快——实行对排队买票乘客信息的管理
3、各模块之间的调用关系
Insertline()
more()
三、详细设计
1、为简化问题,本系统假设只有五条航线
#defineMAX5//定义航线量的最大值
2、客户的存储信息:
结点中保存的信息包括姓名,订票量,舱位等级
typedefstructbook
{charname[10];
//客户姓名
intamount;
//订票量
intlevel;
//舱位等级
book*next;
}linklist;
3、航班的存储信息:
结点中保存的信息包括终点站名,航班号,飞机号,飞行日期,乘员定额,余票量。
structairline
{charfin_name[10];
//终点站名
charair_name[10];
//航班号
charplane_name[10];
//飞机号
chardate[10];
//飞行日期
intticket_amount;
//乘员定额
intticket_left;
//余票量
linklist*book;
linkqueuewait;
}linkinfo;
为了方便调用乘员的信息和排队等候的客户信息,设置指针分别指向乘员名单和等候替补的客户名单。
4、根据客户提出的要求查询航班信息
structairline*find_fin()//根据客户提出的终点站名输出航线信息
{structairline*info;
charname[10];
inti=0;
info=start;
cout<
<
"
请输入终点站名:
;
cin>
>
name;
while(i<
=MAX)
{if(strcmp(name,info->
fin_name)){info++;
i++;
}
elsebreak;
}
if(i>
MAX)
对不起,该航线未找到!
\n"
else
{cout<
终点站名"
\t"
航班号"
飞机号"
飞行日期"
乘员定额"
余票量\n"
show(info);
return0;
按照输入的终点站名从第一条航线开始依次比较对应的链表结点存储的信息(info->
fin_name),若有相同的则输出该条航线的信息,若没有则返回。
structairline*find_air()//根据客户提出的航班号查询航班信息
charnumber[10];
请输入航班号:
number;
{if(strcmp(number,info->
air_name)){info++;
else{returninfo;
对不起,该航线未找到\n"
structairline*find_plane()//根据客户提出的飞机号查询航班信息
{structairline*info;
chara[10];
请输入飞机号:
cin.getline(a,10);
{if(strcmp(a,info->
plane_name)){info++;
elsereturninfo;
structairline*find_date()//根据客户提出的飞行日期查询航班信息
inti;
请输入飞行日期:
{if(strcmp(a,info->
date)){info++;
cout<
5、办理订票业务
voidorder()//办理订票业务
intamount,level;
intflag=0;
请输入查询航班的方式:
选择航线查找方式查找航线;
请输入你订票所需要的数量:
amount;
if(票数满足)将客户信息添加到已定票客户名单;
else若满员或余票额少于订票额,询问客户是否需要进行排队等候
根据客户提出的要求先找到航班(search()),再根据客户的订票量与结点中所存储的信息(info->
ticket_amount)比较,符合要求,则进行订票,询问客户的姓名,舱位等级,在订票乘员名单域(addlink())中添加客户信息,得到该客户的座位号后,该航线余票量(info->
ticket_left)应为之前的余票量减去该客户的订票量。
6、办理退票业务
voidreturn_ticket()//退票
node*t,*back,*m,*n;
intlevel;
linklist*p1,*p2,*head;
head=info->
book;
p1=head;
请输入你的姓名(退票客户):
while(p1)
{if(!
strcmp(name,p1->
name))break;
p2=p1;
p1=p1->
next;
if(没找到该客户的信息L)
对不起,你没有订过票!
return;
}//未找到该订票客户,退出
else//若信息查询成功
{删除订票客户名单该订票客户的信息}
info->
book=head;
//将航线名单域指向订票单链表的头指针
m=(info->
wait).front;
//*m指向排队等候名单队列的头结点
n=(info->
wait).rear;
//*n指向排队等候名单队列的尾结点
t=m;
//*t为当前满点条件的排队候补名单域
while(t)
{if(满足条件者为头结点)
{为在头结点存储的信息对应的客户订票}
back=t;
t=t->
if(满足条件者不为头结点)
{为满足条件的客户订票}
if(排队等候的客户名单里没有信息)break;
根据客户提出的要求先找到航班(search()),再根据客户的姓名与结点中所存储的信息(info->
name)比较,符合要求,则进行退票,在订票乘员名单域(addlink())中删除客户信息,该航线余票量(info->
ticket_left)应为之前的余票量加上该客户的订票量。
再在排队等候的客户名单队列(queue())里寻找符合要求的客户(info->
ticket_left=info->
wait.front->
amount),进行订票。
四、运行与测试
1、运行程序,显示菜单,见图1
2、选择“1”浏览航线信息,见图2
3、选择“2”浏览已订票客户信息,见图3
4、选择“3”查询航线,见图4
5、选择“4”办理订票业务,见图5
6、选择“5”办理退票业务,见图6
7、选择“6”查看剩余票数并排序。
见图7
8、选择“0”退出程序。
五、总结与体会
课程设计是教学中的一个重要环节,对于我们学生来说是一次不可多得的锻炼机会。
通过这次的课程设计,我们不仅可以系统地复习、巩固课程的知识,而且还可以学到如何把书本上的知识运用于解决实际问题中来。
通过这学期的学习,我认为要学好数据结构这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固自我的知识。
通过上机实验,我们能对数据结构更加深入了解,并且能够发现平时在书面作业中比较容易令人忽略的细节问题。
要做出一个具体问题的解法,需要的不仅仅是老师灌输给我们的知识,在探索的过程中,我们会自觉地去寻找、关注相关方面的消息和知识。
所以说,这也是我们自身不断积累知识的过程。
在这次的数据结构课程设计过程中,我发现之前学过的C++知识是学习数据结构的基础,之前的C++学习有些薄弱,对这门课程有了一定的影响,还是要在假期的时候再巩固一下。
未来的两年多,还有很多的专业课要学习,知识本来就是相通的,特别是计算机编程中的各种语言,我应该要好好这些学过的知识真正变成自己的知识,才能为以后的学习打好基础。
六、附源程序
#include<
iostream>
cmath>
cstring>
cstdlib>
cstdio>
#defineMAX5//定义航线量的最大值
usingnamespacestd;
typedefstructbook
book*next;
typedefstructwait
//姓名
//所需票数
wait*next;
}node,*ptr;
typedefstructqueue
{ptrfront;
//等候替补的客户名单的队头指针
ptrrear;
//等候替补的客户名单的队尾指针
}linkqueue;
structairline
//乘员名单,指向乘员名单链表的头指针
//等候替补的客户名单,分别指向排队等候名单队头队尾的指针
structairline*start;
structairlineair[MAX]=
{{"
Paris"
"
1"
P001"
SAT"
2,3},{"
Toronto"
2"
T002"
SUN"
1,2},{"
NewYork"
3"
N003"
MON"
3,5},
{"
HongKong"
4"
H004"
WED"
Cairo"
5"
C005"
TUE"
3,4}
};
voidshow(structairline*info)//每条航线的基本信息
{cout<
info->
fin_name<
air_name<
plane_name<
date<
ticket_amount<
ticket_left<
structairline*find_fin()//根据客户提出的终点站名输出航线信息
charname[10];
inti=0;
info=start;
cin>
while(i<
{if(strcmp(name,info->
elsebreak;
if(i>
else
show(info);
return0;
charnumber[10];
{if(strcmp(number,info->
else{returninfo;
chara[10];
cin.getline(a,10);
elsereturninfo;
inti;
voidsearch()//根据客户提出的要求输出航线信息
intflag=0;
航班号--->
1\n"
终点站--->
2\n"
飞行日期->
3\n"
for(;
!
flag;
)
{
i;
switch(i)
{
case1:
info=find_air();
flag=1;
break;
case2:
info=find_fin();
case3:
info=find_date();
default:
printf("
操作错误,请重新输入\n"
);
voidlist()//全部航线的信息
{structairline*info;
{show(info);
info++;
i++;
voidbooklist()//订票客户名单
linklist*p;
p=info->
if(p!
=NULL)
客户姓名"
订票数量"
舱位等级\n"
while(p)
p->
name,p->
amount,p->
level;
p=p->
该航线没有客户信息!
linklist*addlink(linklist*head,intamount,charname[],intlevel)//增加订票的客户信息
{linklist*p1,*new1;
p1=head;
new1=(linklist*)malloc(sizeof(linklist));
if(!
new1){cout<
\nOutofmemery\n"
return0;
strcpy(new1->
name,name);
new1->
amount=amount;
level=level;
next=NULL;
head)//原无订票客户信息
{head=new1;
new1->
else{head=new1;
next=p1;
returnhead;
linkqueueplusqueue(linkqueueq,charname[],intamount)//增加排队等候的客户名单
{ptrnew2;
new2=(ptr)malloc(sizeof(node));
strcpy(new2->
new2->
if(q.front==NULL)//原排队等候客户名单为空
q.front=new2;
elseq.rear=new2;
returnq;
voidorder()//办理订票业务
intamount,level;
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 航空 客运 订票 系统