数据结构飞机订票课程设计报告.docx
《数据结构飞机订票课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构飞机订票课程设计报告.docx(33页珍藏版)》请在冰豆网上搜索。
![数据结构飞机订票课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-1/10/b23f0974-49ef-4d9e-a345-cd9a899c7dc1/b23f0974-49ef-4d9e-a345-cd9a899c7dc11.gif)
数据结构飞机订票课程设计报告
数据结构
课程设计实践报告
设计题目:
姓名:
专业:
计算机科学与技术
学号:
指导老师:
一.设计要求………………………………3
二.算法思想和程序结构…………………4
三.调试过程………………………………5
四.运行结果………………………………7
五.心得体会………………………………14
一.设计要求:
1.录入:
录入航班及客户资料,数据分别存入两个数据文件中,取名为“airline.dat”和“customer.dat”。
2.查询:
查询某个航线的情况(如:
输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓;输入起飞和抵达城市,查询飞机航班;)
3.订票:
如果该航班已经无票,可以提供相关可选择航班。
4.退票:
退票后修改相关数据文件。
客户资料要有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件。
二.设计思想
为了方便编写程序,我采用了比较简单的方法,从main主函数中指向5个函数,并且全部定义为void型,可以指向任意类型的数据,提高兼容性。
用switch选择语句来指向调用函数,再对5个调用函数进行定义。
这样函数之间彼此循环构成了一个完整的函数。
并且用结构体的形式存储航班和乘客信息,方便灵活使用。
Main函数
菜单
三.调试过程
由于学的知识不是很牢靠也不是很熟练,在最开始的时候老是范一些小错误,而且很多语法错误,忘了写全{}就会出现很多个错误,在一个庞大的程序里面找这些错误再一一改正,很可能还是不能运行,但是多加一个}就很可能全部错误都搞定。
调试的时候很多地方都是牵一发而动全身,特别是修改的时候,修改一个变量就得把其他部分的都改掉,不然就会一直出现错误。
还经常忘了定义变量就用,不过看英文提示面前能看懂,也能找到相应的错误。
在把语法小错误解决之后就剩下运行了,但是运行的情况不容乐观,很多地方不是我想要的结果。
比如在最开始要初始化程序,就是把预先输入好的几个客户信息存档,这个工作必须在进入程序时就得进行,不然文件里面没有内容。
但是在每次返回主菜单的时候又不能初始化,那样的话就存不进去了。
所以我想出了用两个菜单函数的办法,这样可以选择是否需要初始化。
在退票的时候,由于需要在一个循环里面一直的判断并且存储,如果判断出输入的名字在文件中没有的话就输出“没有你的信息,请查证后再操作!
”,但是随着每一次循环如果找不到信息就得输出一次,这样就会不停地输出那句话。
我想了很久想出来用一个中间变量a来解决,如果名字像匹配就让a=0,不匹配就让a=1,这样就能避免一直的循环,直接在后面判断a的值就能知道判断的结果,然后做出相应的结果,运行的时候终于解决了这个问题。
在其他的几个函数里面我也遭遇到了同样的问题,就是在判断的时候屏幕上一直不停地输出信息,我采取了同样的方法解决了问题。
同样用定义中间变量值的办法。
还有就是存储问题了。
在开始的时候我直接用输出流对象来存储到文件里面,后来打开文件,里面确实有数据,但是在调出数据,也就是在查询客户信息的时候,尽管我输入的是已经存在的客户姓名,但是系统却找不到客户信息。
后来查阅了资料才知道,我存储的时候数据间没有间隔,在读取的时候就不能分别数据了,应该在存储的时候在每个数据间加入一个空格符号,来分开每一个数据。
这样终于搞定了,系统能正常识别数据了。
四.运行结果
1、首先进入系统提示是否是第一次进入,如果是第一次就进行初始化。
否则直接进入主菜单:
第一次进入,初始化!
并且进入主菜单:
2、进行第一个功能选项:
订票业务:
3、下面为第二个功能选项:
查询航班信息
输入航班号或者出发到达地,就会自动输出航班的相关信息。
也可以查询所有航班,并输出相关乘客信息。
4、第三个功能选项,修改航班信息:
包括航班的所有信息。
可以根据航班号以及航班航线进行查找并修改。
5、第四项功能:
订票业务
可以根据航班号以及航班航线进行订票,如果无直达航班,则提供中转航班进行性订票。
5、第五项功能:
退票业务
输入客户证件号及航班号进行退票。
6、退出系统
六.心得体会
本次程序设计所用时间较长,工作量很饱满,而且所用的知识很多,但是我们平常在课堂上所学的知识很有限,这就需要我大量的自学书本和课外的其他书籍上的知识。
为了让程序容易使人看懂,我用到的知识点不是非常多,大都是一些基本知识,我能熟练地运用这些知识编程也算一个很大的成功了。
C++设计实践是对之前学过的知识的加深和巩固,之前学得较浅,实践的机会不多,这次实践让我对C++程序有了更加深入的了解,心理也由原来的不喜欢到喜欢,感觉很有意思也很有用,可也设计一些有用的或者是自己喜欢的程序。
最令我收益的是写程序的过程和调试修改的过程,因为之前我们就学了几章,没有把知识学习全面,因此编写起来是有难度的,在预先想好程序结构后,就开是卡看书,一个函数一个函数来编写,不懂的地方就上网搜或是请教一下同学,当终于把程序写出来的时候,内心里又有一种说不出来的激动,我感觉这很符合大学的教育观念,是对个人自主学习能力的一个锻炼。
在接下来就是调试,虽然出了很多的错误,虽然自己也被搞的焦头烂额,但我还是很兴奋,一点点找线索,找到问题,再解决。
现在程序终于能较好的运行出来了,当然,还存在一些瑕疵,但通过这个暑假的实践学习,我收获的不仅仅是这一个程序,我的自学能力,以及寻找问题解决问题的能力也得到了很好的锻炼。
源代码:
#include
#include
#include
usingnamespacestd;
structflight
{
intnum;
charplace1[10];
charplace[10];
charplace2[10];
chartime1[20];
chartime[20];
chartime2[20];
intprice1;
intprice2;
intprice;
chardiscount[10];
intdticket;
intyticket;
}fl[20]={{101,"南京","武汉","北京","09-01-13:
00","09-01-16:
00","09-01-18:
00",2700,3000,5600,"50%",1,99},
{102,"新疆","哈尔滨","上海","09-01-09:
00","09-01-15:
00","09-01-21:
00",4000,4500,7800,"70%",1,99},
{103,"杭州","海南","广州","09-01-12:
00","09-01-14:
00","09-01-16:
00",2100,2000,3400,"20%",1,99}};
structcustomer
{
charname[10];
intnum;
charid[20];
intprice;
intticket;//订票数量
intseat;//座位号
}cu[300]={{"张三",101,"321002",5600,1,1},{"李四",102,"225006",7800,1,1},{"王五",103,"210023",3400,1,1}};//定义结构体
structticketnum
{
charplace1[10];
charplace2[10];
intyticket1;
intyticket2;
}ti[20]={{"","",99,99},{"","",99,99},{"","",99,99}};
intcnum=3;//定义客户编号
intfnum=3;//定义飞机编号
voidlist();
voidinput();
voiddingpiao();
voidtuipiao();
voidsearch();
voidchange();
voidmenu();//函数声明
voidchushi();
voidmain()
{
intx;
cout<<"第一次使用请按1进行初始化,按任意数字继续:
";
cin>>x;
if(x==1)
chushi();
else
menu();
}//主函数
voidmenu()
{
inti;
cout<<"*************航空订票系统*************"<cout<<"*** ***"<cout<<"***1.录入业务2.查询航班信息***"<cout<<"***3.修改航班信息4.订票业务***"<cout<<"***5.退票业务6.退出系统***"<cout<<"******"<cout<<"********************************************************"<ifstreaminfile1("airline.dat");
ifstreaminfile2("customer.dat");
for(i=0;i<20;i++)
{
infile1>>fl[i].num>>fl[i].place1>>fl[i].place>>fl[i].place2>>fl[i].time1>>fl[i].time>>fl[i].time2>>fl[i].price1>>fl[i].price2>>fl[i].price>>fl[i].discount>>fl[i].dticket>>fl[i].yticket>>ti[i].yticket1>>ti[i].yticket2;
}
for(i=0;i<300;i++)
{
infile2>>cu[i].name>>cu[i].num>>cu[i].id>>cu[i].price>>cu[i].ticket>>cu[i].seat>>cnum;
}
infile1.close();
infile2.close();//读取数据
cout<<"请输入业务代码:
";
list();
}
voidchushi()
{
inti,j;
ofstreamoutfile("airline.dat");
ofstreamfile("customer.dat");
//outfile<<"航班号起点站终点站起飞时间到达时间票价折扣已订票数剩余票数"<//file<<"顾客姓名航班号证件号订票数量座位号订单号"<for(i=0;i<3;i++)
{
j=i+1;
outfile<<<file<}
outfile.close();
file.close();
cout<<"初始化已完毕!
"<menu();
}//存储数据
voidlist()
{
inta;
cin>>a;
cout<while(a<1||a>6)
{
cout<<"输入错误,请重新输入:
";
cin>>a;
cout<}
switch(a)
{
case1:
input();
break;
case2:
search();
break;
case3:
change();
break;
case4:
dingpiao();
break;
case5:
tuipiao();
break;
case6:
exit
(1);
default:
{
cout<<"输入错误,请重新输入正确的代码:
";
list();
}//输入代码
}
}
voidinput()/////////////////////////////////////////////////////////////////////录入
{
ofstreamoutfile("airline.dat",ios:
:
app);
inty,i;
cout<<"一共要录入的航班数:
"<cin>>y;
cout<<"请依次输入航班信息:
"<cout<<"**********************************************************************"<for(i=0;i{
cout<<"请输入航班号:
"<cin>>fl[i+fnum].num;
cout<<"请输入起始站:
"<cin>>fl[i+fnum].place1;
cout<<"请输入中转站:
"<cin>>fl[i+fnum].place;
cout<<"请输入终点站:
"<cin>>fl[i+fnum].place2;
cout<<"请输入起飞时间:
"<cin>>fl[i+fnum].time1;
cout<<"请输入中转时间:
"<cin>>fl[i+fnum].time;
cout<<"请输入降落时间:
"<cin>>fl[i+fnum].time2;
cout<<"请输入票价1:
"<cin>>fl[i+fnum].price1;
cout<<"请输入票价2:
"<cin>>fl[i+fnum].price2;
cout<<"请输入总票价:
"<cin>>fl[i+fnum].price;
cout<<"请输入票价折扣:
"<cin>>fl[i+fnum].discount;
cout<<"请输入已经订购机票:
"<cin>>fl[i+fnum].dticket;
cout<<"请输入剩余机票数:
"<cin>>fl[i+fnum].yticket;
ti[i+fnum].yticket1=fl[i+fnum].yticket;
ti[i+fnum].yticket2=fl[i+fnum].yticket;
cout<<<outfile<<<fnum=fnum+1;
}
outfile.close();
menu();
}////////////////////////////////////////////////////////////////////////////////录入
voiddingpiao()//////////////////////////////////////////////////////////////////订票
{
charname[10];
charplace1[10];
charplace2[10];
intnum,i,j,t,k,temp,cho;
intx,y;
charid[20];
cout<<"请输入你的姓名,证件号和订票方式:
"<cout<<"姓名:
";
cin>>name;
cout<cout<<"证件号:
";
cin>>id;
cout<cout<<"1.航班号:
"<"<cin>>cho;
switch(cho)
{
case1:
{
cout<<"输入航班号:
"<cin>>num;
for(i=0;i<300;i++)
if((strcmp(id,cu[i].id)==0)&&num==cu[i].num)
{
cout<<"您已经定过该航班,要返回主菜单吗?
输入1返回";
cin>>t;
if(t==1)
menu();
}
for(i=0;i<300;i++)
if(id!
=cu[i].id)
for(j=0;jif(fl[j].num==num)
temp=j;
if(fl[temp].yticket>0)//判断有没有余票
{
cout<<"此航班还有余票,要订票吗?
输入1订票,其他数字退出";
cin>>x;
switch(x)
{
case1:
{
cout<<"该航班订几张票?
";
cin>>y;
for(k=0;kif(fl[k].num==num)
{
cnum=cnum+1;
strcpy(cu[cnum].name,name);
cu[cnum].num=num;
cu[cnum].price=fl[k].price;
cu[cnum].ticket=y;
cu[cnum].seat=fl[k].dticket+1;
strcpy(cu[cnum].id,id);
fl[k].dticket=fl[k].dticket+y;
fl[k].yticket=fl[k].yticket-y;
ofstreamoutfile1("airline.dat");
for(j=0;joutfile1<<<ofstreamoutfile2("customer.dat",ios:
:
app);
outfile2<cout<<"订票成功!
"<<<"客户信息:
"<"<"<<<"证件号:
"<"<"<"<"<outfile1.close();
outfile2.close();
cout<<"1.返回主菜单2.退出:
";
cin>>temp;
menu();
}
};