数据结构程序设计飞机订票系统.docx
《数据结构程序设计飞机订票系统.docx》由会员分享,可在线阅读,更多相关《数据结构程序设计飞机订票系统.docx(23页珍藏版)》请在冰点文库上搜索。
![数据结构程序设计飞机订票系统.docx](https://file1.bingdoc.com/fileroot1/2023-7/7/33fabfe3-3654-4e42-803a-6cb766f7402b/33fabfe3-3654-4e42-803a-6cb766f7402b1.gif)
数据结构程序设计飞机订票系统
学号
天津城市建设学院
数据结构课程设计
设计说明书
飞机订票系统
起止日期:
2011年12月12日至2011年12月16日
学生
班级
成绩
指导教师(签字)
电子与信息工程系
2011年12月16日
天津城市建设学院
课程设计任务书
2011—2012学年第1学期
电子与信息工程系软件工程专业班级
课程设计名称:
数据结构课程设计
设计题目:
飞机订票系统
完成期限:
自2011年12月12日至2011年12月16日共1周
设计依据、要求及主要容(可另加附页):
一、设计目的
熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求
(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;
(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;
(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;
(4)认真编写课程设计报告。
三、设计容
订票系统
1)问题描述
(1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
(2)查询:
可以查询某个航线的情况 可以输入起飞抵达城市,查询飞机航班情况;
(3)订票:
(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
(4)退票:
可退票,退票后修改相关数据文件;
客户资料有,证件号,订票数量及航班情况,订单要有编号。
(5)修改航班信息:
当航班信息改变可以修改航班数据文件
2)基本要求
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能
一、需求分析
本课程设计的名称是飞机订票系统,本系统主要是描述了顾客在订飞机票时的一些具体情况,包括录入航班、乘客情况,查询是否还有该顾客要乘坐的飞机以及剩余的票,之后是确定乘客订票管理,然后当乘客有突发情况发生时会伴随着退票的发生。
这就是产生订票系统产生的原因。
二、问题求解
当我们遇到飞机订票这件事情的时候,我们通常发生的地点是飞机场,首先,我们应该到售票大厅去购买飞机票,因此,我根据我学过的C++中学过的结构体struct,它相当于其他高级语言中的高级记录。
因此定义了一个airline结构体来存储变量:
structairline{};
air_num(班次号),shortbegin_hour(起飞时间小时),shortbegin_minute(起飞时间分钟),charbegin_name[10](起始站点),charend_name[10](终点站名),floatfly_time(飞行时间),inttotal(乘员总定额),inttotal_already(已订票人数),boolexist(航班状态),intfare;(飞机票价)
定义了structairlineb[N]{};(N规定不能大于50)来实现存储:
1
12
0
天津
2
145
130
true
1000
2
6
30
0.5
140
140
true
2000
3
22
0
2.5
120
120
true
2500
4
15
0
天津
2
120
120
true
3000
首先就要查询是否有该路线的票,如果有的话则进行购买,即要通过把信息录入input()方法来实现。
则要录入航班号(air_num),起飞时间(begin_hour,begin_minute),飞行时间(fly_time),起始站(begin_name),终点站(end_name)等。
在查找find()方法中,首先定义一个计数器k=-1,然后读入文件信息,输入要查询的终点站名称end,用strcmp()是用来比较end_name和end字符串的大小,它的返回值是int类型。
如果有此终点站,则调用output(i)方法,打印出符合条件的航班信息,然后把i的值付给计数器k。
如果k==-1,则显示不存在此航班。
在浏览check()方法中,显示已有的航班班次,调用output()方法来显示信息,紧着着要调用time()来判断航班是否发出并输出。
可能还有一种情况需要考虑,当飞机起飞了,则既不能订票也不能退票了,这是通过时间的比较来实现的,再次运用了电脑上的事件系统#include(系统窗口时间),建立方法stringtime(shortbegin_hour,shortbegin_minute)来调用系统时间函数和输入的时间作比较,判断此时的时间和电脑现在系统的大小来比较,如果输入的时间的小时数大于电脑系统里面的小时数或者输入的小时数和电脑系统的小时数相等&&输入的分钟数大于电脑系统的分钟数,其代码实现如下:
(if((begin_hour订票时,首先应输入飞机班次编号(cin>>num1),因为事先在结构体里存储了四个航班信息,所以如果输入的num1在b[i].air_num(即编号1~4),则会cout<<“航班已存在”。
否则判断该班次是否还有票,if(b[i].total==b[i].total_already)则说明票以售完,反之计算出剩余票数的数:
b[i].total-b[i].total_already,再输入购票的数cin>>num2,然后拿num2的大小和总票数减去已经售出的票数的大小作比较,if(b[i].total-b[i].total_already>num2),接着询问乘客是否去热定要购票if(ch=='y'||ch=='Y'),进而进行下一步,然后在判断飞机是否已经起飞,如果没起飞则订票成功,返回"订票成功,祝您旅途愉快!
",然后调用save()来把订票后的信息存起来。
反之无法办理。
然后,一旦乘客往里或者把票给丢了,售票员也能通过乘客的信息查询到该乘客是否确实买过票,这就通过find()来查找,如果要浏览班次则需要check()来实现。
此程序的output()方法是用来在控制台显示给售票员看的,所以要清楚明了,便于操作。
三、总体设计
1.程序设计组成框图:
2.程序设计流程图
四、详细设计
1.根据飞机订票系统的可设要求,要实现以下功能:
(1)录入:
录入航班情况
(2)查询:
可以查询某个航线的情况
可以输入抵达城市,查询飞机航班情况;
(3)订票:
1)先判断飞机是否起飞,如果发出航班则订票失败,否则可以订机票。
2)当有余票时显示剩余票数,则可以订票成功,如果没有余票,则订票失败。
(4)退票:
1)先判断飞机是否起飞,如果发出航班则订票失败,否则可以订机票。
2)当有余票时显示剩余票数,则可以退票成功,如果没有余票,则退票失败。
2.具体的方法及函数调用的思想:
(1)struct:
//它相当于一种记录
定义要存储的变量:
可以通过以下的声明来建立如图的数据类型
intair_num;//班次号
shortbegin_hour;//起飞时间小时
shortbegin_minute;//起飞时间分钟
charbegin_name[10];//起始站点
charend_name[10];//终点站名
floatfly_time;//飞行时间
inttotal;//乘员总定额
inttotal_already;//已订票人数
boolexist;//航班状态
intfare;//飞机票价
定义一个结构体来存储四个航班信息:
{}里的变量依次表示为:
航班号,起飞时间(小时),起飞时间(分钟),起始站点,终点站名,飞行时间,成员定额,已订票人数,航班状态;
{1,12,0,"天津","",2,145,130,true,1000},
{2,6,30,"","",0.5,140,140,true,2000},
{3,22,0,"","",2.5,140,120,true,2500},
{4,15,0,"天津","",2,140,120,true,3000}
1
12
0
天津
2
145
130
true
1000
2
6
30
0.5
140
140
true
2000
3
22
0
2.5
120
120
true
2500
4
15
0
天津
2
120
120
true
3000
3.方法的实现:
1)save();//保存航班信息
因为可设要求把数据存储在文件中,所以必须编写此保存方法,因此用到fstream头文件名(fstream是iostream类的派生)用来支持对磁盘文件的输入输出,信息保存在airpline.txt文件中。
2)read();//读取航班信息
read方法是用来读取airpline.txt文件中航班数据的,ios:
in以输入方式打开文件
3)input();//录入
input()方法的功能就是录入航班号i,起飞时间(小时)begin_hour,起飞时间(分钟)begin_minute,起始地点名称begin_name,种植地点名称end_name,飞行时间fly_time,总载客量total,已订票人数total_already,飞机票价fare,航班状态exist。
变量inti=4,因为事先已经录入4个编号为1~4的航班号,因此当输入1~4的航班号时会提醒此航班号已存在,因而在控制台输入的航班号必须大于4而小于50。
变量intj=0;则j+1表示录入第(j+1)个航班班次的信息
4)find();//查询,按终点站来查询
根据已有的飞机信息来依据终点信息来查询航班。
首先要调用读取机票信息函数,读取要查询的机票信息,既read()方法。
并且在方法中有一个计数器k,当k=-1时输出无此航班的飞机,反之根据终点站名字来查询航班信息。
5)stringtime(shortbegin_hour,charbegin_minute);//调用系统时间
当输入起飞时间与该电脑里的时间作比较,当电脑现在的时间比输入起飞时间大的话,则说明飞机已经起飞。
通过线面的语句来实现:
(begin_hour6)order();//办理订票函数
当订票的时候,首先要输入要订票的航班号,因此在这之后应读入在系统中的航班信息,当输入航班编号后如无此航班号,则失败,反之先判断次航班是否已经起飞if((b[i].begin_hour>sys.wHour)||(b[i].begin_hour==sys.wHour&&b[i].begin_minute>sys.wMinute)),如果没起飞,在判断是否还有余票if(b[i].total==b[i].total_already),如果有,计算剩余的多少票b[i].total-b[i].total_already,进而订在剩余票数的围购票,如果与之相反,则证明飞机已经起飞也就是说已经订不到票了。
7)refund();//办理退票函数
思路类似于订票,首先要数如要退票的航班号,并且在这之后读入系统中的航班信息,当输入航班编号后如无此航班号,则失败,反之先判断次航班是否已经起飞if((b[i].begin_hour>sys.wHour)||(b[i].begin_hour==sys.wHour&&b[i].begin_minute>sys.wMinute)),如果没起飞,确定退票数完成退票操作。
如果与之相反,则证明飞机已经起飞了,无法进行退票业务了。
五、调试与测试
六、关键源程序清单和执行结果
1.源程序:
#include
#include//strcmp()是用来比较大小的,它是C++中头文件(字符串函数)
#include//系统窗口时间
usingnamespacestd;
constintN=50;
structairline
{intair_num;//班次号
shortbegin_hour;//起飞时间小时
shortbegin_minute;//起飞时间分钟
charbegin_name[10];//起始站点
charend_name[10];//终点站名
floatfly_time;//飞行时间
inttotal;//乘员总定额
inttotal_already;//已订票人数
boolexist;//航班状态
intfare;//飞机票价
};
structairlineb[N]={
//航班号,起飞时间(小时),起飞时间(分钟),起始站点,终点站名,飞行时间,成员定额,已订票人数,航班状态
{1,12,0,"天津","",2,145,130,true,1000},
{2,6,30,"","",0.5,140,140,true,2000},
{3,22,0,"","",2.5,140,120,true,2500},
{4,15,0,"天津","",2,140,120,true,3000}
};
//声明全局变量
intn=0;//航班数量
//函数声明
voidinput();//录入
voidfind();//查询,按终点站来查询
stringtime(shortbegin_hour,charbegin_minute);//调用系统时间
voidorder();//办理订票函数
voidrefund();//办理退票函数
voidinput()//录入班次信息函数
{
if(n<=0)
{
cout<<"请输入录入班次的数量:
"<cin>>n;
}
for(inti=4,j=0;i{
cout<<"正在录入第"<\n";
cout<<"------------------------------\n";
cout<<"请输入班次的编号(1-50):
";
cin>>b[i].air_num;
if(b[i].air_num>50||b[i].air_num<1)
{cout<<"输入编号错误!
"<for(intj=0;j
{
if(b[i].air_num!
=b[j].air_num)continue;
else{cout<<"录入失败,此编号的班次已经存在!
"<}
if(j>=i)
{
cout<<"请输入班次的起飞时间:
"<";
cin>>b[i].begin_hour;cout<<"分钟为:
";
cin>>b[i].begin_minute;
cout<<"请输入班次的起始地点:
";
cin>>b[i].begin_name;
cout<<"请输入班次的终到地点:
";
cin>>b[i].end_name;
if(strcmp(b[i].end_name,b[i].begin_name)==0)
{cout<<"输入错误!
起始地点和终到地点不应该相同!
"<cout<<"请输入班次的飞行时间(hour):
";
cin>>b[i].fly_time;
cout<<"请输入固定的载客量:
";
cin>>b[i].total;
cout<<"请输入已订票人数:
";
cin>>b[i].total_already;
cout<<"请输入飞机票价:
";
cin>>b[i].fare;
b[i].exist=true;
cout<<"-----已成功录入!
-----\n";
}
}
}
stringtime(shortbegin_hour,shortbegin_minute)//调用系统时间函数
{
SYSTEMTIMEsys;//系统时间sys
GetLocalTime(&sys);//获得本地电脑时间
stringstr;
if((begin_hourstr="已发出!
";
elsestr="未发出!
";
returnstr;
}
voidoutput(inti)
{
cout<<"----------------------\n";
cout<<"班次号"<<""<<"起飞时间"<<""<<"起始站"<<""<<"终点站"<<""<<
"飞行时间"<<""<<"固定载客量"<<""<<"已订票人数"<<""<<"飞机票价"<<""<<"飞机状态"<cout<<""<
"<
<
<
}
voidfind()//查询班次信息函数
{
intk=-1;//计数器
charend[10];
cout<<"请输入要查询的终点站:
\n";
cin>>end;
for(inti=0;iif(strcmp(b[i].end_name,end)==0)//strcmp()是用来比较大小的,它是C++中头文件(字符串函数)
//中定义的一个用于对两组字符串进行比较的函数,它的返回值是int类型。
{
output(i);
k=i;
}
if(k==-1)
cout<<"不存在至此的航班"<}
voidcheck()//浏览班次函数
{
cout<<"已有的航班班次为:
"<for(inti=0;i{
output(i);
cout<