面向对象C++航空售票系统.docx
《面向对象C++航空售票系统.docx》由会员分享,可在线阅读,更多相关《面向对象C++航空售票系统.docx(27页珍藏版)》请在冰豆网上搜索。
![面向对象C++航空售票系统.docx](https://file1.bdocx.com/fileroot1/2023-2/9/ac947f0c-5544-404c-9351-2a6b03787962/ac947f0c-5544-404c-9351-2a6b037879621.gif)
面向对象C++航空售票系统
大连科技学院
面向对象程序设计课程设计
题目航空售票管理系统
学生姓名李易霖专业班级计算机10-1
指导教师刘瑞杰职称 讲师
所在单位信息科学系软件工程教研室
教学部主任王立娟
完成日期2012年7月6日
课程设计报告单
学号
1001020112
姓名
李易霖
专业班级
计算机10-1
考核项目
评分
备注
1
平时工作态度及遵守纪律情况
(10分)
2
掌握基本理论、关键知识、基本技能的程度和阅读参考资料的水平
(10分)
3
独立工作能力、综合运用所学知识分析和解决问题能力及实际工作能力提高的程度
(20分)
4
完成课程设计说明书及软件的情况与水平(小组分工情况、规范性、整洁清楚、叙述完整性、思路清晰程度、工作量及实际运行情况和创新性)
(60分)
总评成绩
综合评定:
(优、良、中、及格、不及格)
指导教师签字:
2012年7月6日
《面向对象程序设计课程设计》任务书
一、课程设计任务及要求:
任务:
针对小型信息管理系统或若干综合性设计题目,选择一种软件开发模型,完成从需求分析、系统设计、系统实现,软件测试的全过程。
要求:
(1)根据软件系统开发的一般原则,完成相应系统的功能设计,完成主要功能模块的程序实现并进行测试训练,给出代码运行结果和相应的设计文档。
可以分组进行,但所有学生必须经历整个系统的开发全过程,以便加深对系统开发全过程的认识。
(2)提交课程设计报告。
(3)指标:
要求完成课程设计报告3000字以上(约二十页);完成所设计的题目,设计题目的语句行数的和在200行语句以上。
二、工作量
2周(10个工作日)时间
三、计划安排
第1个工作日:
查找相关资料、书籍,阅读示例文档,选择题目。
第2个工作日-第4个工作日:
设计程序结构、模块图。
第5个工作日-第9个工作日:
完成程序的编码,并且自己调试、测试。
穿插进行课程设计报告的撰写。
第10个工作日:
上交课程设计报告,由教师检查软件测试效果、检查课程设计报告,给出学生成绩。
指导教师签字:
2012年6月25日
题目:
航空售票管理系统
1.需求分析
航空售票管理系统可以根据乘客和管理人员的要求,进行方便快速的查询、购票、退票和管理等工作。
本系统可以在功能上实现更新航班信息浏览航班信息查询,以及航班信息订票和退票这四个主要的功能。
2.概要设计
程序的结构图如下
如上图,程序中各功能模块所需的数据都直接取自文件,这样保证了各模块的独立性和数据的安全性。
并且只有相应的模块进行写的操作,并且数据的写入不必依赖其他模块,这样使用户可以仅使用其中某一项功能,而不必进行多余的操作。
3.详细设计
首先根据问题描述抽象出一个航班类,封装了航班的数据信息和方法。
数据里主要有航班的航班号、起飞时间、站点等信息,方法主要是对该类中数据的值的输入、输出对本班次机票的管理,对时间、站名等的核对,另外为了方便对文件的输出和读取,还以友元的形式重载了提取和插入运算符。
该系统总共包含四大功能模块:
1更新航班信息功能模块
该模块为对航班信息的操作,仅向管理员开放使用,普通用户不能使用该功能对航班信息进行操作,故进入该功能需进行身份验证。
可不定时地增加航班数据。
该模块又被分为五个子功能模块——信息库的重建、信息的插入、修改、删除和清空数据。
2浏览航班信息
浏览航班信息,可显示出所有航班,如果当前系统时间超过了某航班的起飞时间,则显示“此次航班已发出”的提示信息,完成将文件中的航班信息按照要求格式全部输出。
3查询航班信息
可以实现按航班号和按站点的查询并将查询到的信息输出。
4订票和退票系统
A:
查询航班编号或站点。
当剩余座位数大于0,并且当前系统时间小于起飞时间时才能售票,售票后自动更新剩余座位数。
B:
退票时,输入退票的班次,当本班航班未发出时才能退票,退票后自动更新剩余座位数。
该模块根据订票和退票操作的相似性,将这两种操作放在一起。
另外,由于各模块函数是直接对文件进行操作,所以各功能模块是相互独立的。
4.编码
intmain()
{
Traffic_systemcivil_aviation;
//若文件不存在,则新建文件
ofstreamnewfile("flightinformation.txt",ios:
:
app);
if(!
newfile)
{
cerr<<"文件\"flightinformation.txt\"无法打开!
\n";
exit
(2);
}
newfile.close();
inttab;
while
(1)
{
cout<<"\n>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎进入航空售票管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
<<"******主菜单:
***********"
<<"******1——更新航班信息(需管理员身份验证)2——浏览航班信息***********"
<<"******3——查询航班信息4——订票和退票***********"
<<"******5——清屏0——退出系统***********"
<<"********************************************************************************"
<<"你需要做什么?
(选择0~4)"<cin>>tab;
while(!
(tab==1||tab==2||tab==3||tab==4||tab==5||tab==0))
{
cout<<"请输入正确选择(0~4):
";
cin>>tab;
}
switch(tab)
{
case1:
{
civil_aviation.Manage();
break;
}//航线管理
case2:
{
civil_aviation.Scan();
break;
}//订票办理
case3:
{
civil_aviation.Search();
break;
}//退票办理
case4:
{
civil_aviation.BookRefund();
break;
}
case5:
system("cls");break;
case0:
return0;//退出系统
}
}
}
5.调试分析
程序编写完成后,主要出现的是各种语法错误,如字母打错了,字母少打了,字母大小写错了,符号错了或少打了等等一系列错误。
有时候一个小小的错误会让程序运行不了,在反复的调试检查的过程中,我把这些细小的错误全部都找出来,最后程序终于能执行了。
还有就是存储问题了。
在开始的时候我一直按照书上的直接用输出流对象来存储到文件里面,后来打开文件,里面确实有数据,但是在调出数据,也就是在查询客户信息的时候,尽管我输入的是已经存在的客户姓名,但是系统却找不到客户信息。
我存储的时候数据间没有间隔,在读取的时候就不能分别数据了,应该在存储的时候在每个数据间加入一个空格符号,来分开每一个数据。
系统能正常识别数据了。
6.测试结果及运行效果
1、首先进入系统提示是否是第一次进入,如果是第一次就进行初始化,讲预先的几个乘客信息存档。
否则直接进入主菜单:
第一次进入,初始化!
并且进入主菜单:
提示输入业务代码,如果输入的不是以上业务代码则提示输入错误:
图4输入错误
2、进行第一个功能选项:
订票业务:
如果已经存在此客户的信息则会出现下面情况:
则提示已经定过航班,问是否进入主菜单。
如果输入的客户在档案里面没有则进行正常订票:
3、第二项功能:
退票业务:
输入客户姓名和航班,将其信息删除。
并提示是否返回主菜单。
为了验证是否删除了客户信息,可以进行查询客户信息业务和查询全部信息业务:
图8查询信息确认
显示没有刚刚已经退订客户的信息。
显示出没有刚刚已退订客户的信息,并且航班的信息随之调整,订票数和余票数自动修改为正确值。
图9查询信息确认
4、下面为第三个功能选项:
查询客户信息,输入客户姓名,就会自动输出客户的相关信息。
如果没有客户信息则输出以下内容,并且提示是否进入到主菜单。
5、查询全部信息:
包括所有客户信息和所有航班的信息
图13全部信息
6、退出系统:
退出:
7.系统开发所用到的技术
这个航空售票管理系统中,应用的是C++程序设计语言。
C++和C的不同在于C++的功能更强大更完善,支持中文输入,是兼顾面向对象的特点的程序设计语言。
为了方便编写程序,我采用了比较简单的方法,从main主函数中指向5个函数,并且全部定义为void型,可以指向任意类型的数据,提高兼容性。
用switch选择语句来指向调用函数,再对5个调用函数进行定义。
这样函数之间彼此循环构成了一个完整的函数。
8.课程设计总结
经过这次的课程设计,我认识到把课堂上老师讲的知识运用到实际操作中的重要性。
我这次课程设计的题目是航空订票系统,在开始阶段,根本无从下手,后来通过查阅一些相关资料和老师的耐心讲解,最终成功完成整个程序的设计。
通过这次课设我对C++语言中的类的定义、运算符重载等知识有了进一步的理解,对流程图的画法更加熟练,对程序的开发思路有了一定的理解,我想这在以后的学习和工作中都会有帮助的,更使我意识到了学习C++语言的重要性。
另外,对程序的不断调试,是我的查错能力有了很大的提高。
本次程序设计所用时间较长,工作量很饱满,而且所用的知识很多,但是我们平常在课堂上所学的知识很有限,这就需要我大量的自学书本和课外的其他书籍上的知识。
C++设计实践是对之前学过的知识的加深和巩固,之前学得较浅,实践的机会不多,这次实践让我对C++程序有了更加深入的了解,心理也由原来的不喜欢到喜欢,感觉很有意思也很有用,可也设计一些有用的或者是自己喜欢的程序。
最令我收益的是写程序的过程和调试修改的过程,因为之前我们就学了几章,没有把知识学习全面,因此编写起来是有难度的,在预先想好程序结构后,就开是卡看书,一个函数一个函数来编写,不懂的地方就上网搜或是请教一下同学,当终于把程序写出来的时候,内心里又有一种说不出来的激动,我感觉这很符合大学的教育观念,是对个人自主学习能力的一个锻炼。
在接下来就是调试,虽然出了很多的错误。
但在我不断找错下现在程序终于能较好的运行出来了,当然,还存在一些瑕疵,但通过这近两周的实践学习,我收获的不仅仅是这一个程序,我的自学能力,以及寻找问题解决问题的能力也得到了很好的锻炼,使我的专业水平提高了不少。
从这次课程设计中我付出了很多也收获了很多。
参考文献
[1]《C++程序设计》谭浩强,清华大学出版社
[2]《VisualC++面向对象程序设计程》刘瑞新主编,曹建春,沈淑娟,张连堂等编著,机械工业出版社
[3]《C++程序设计》吴乃陵,况迎辉北京:
高等教育出版社
附录全部代码
#include
#include
#include
usingnamespacestd;
structflight
{intfligh;
intnum;
charplace[10];
intdticket;
intyticket;
}fl[10]={{101,01,"北京",1,99},
{102,02,"上海",1,99},
{103,03,"广州",1,99}};
structcustomer
{charname[10];
intseat;
intnum;
}cu[300]={{"张三",01,101},{"李四",01,102},{"王麻子",01,103}};//定义结构体
intcnum=3;//定义客户编号
voidlist();
voiddingpiao();
voidtuipiao();
voidchaxun();
voidchaxun();
voidchaxunquanbu();
voidcaidan1();//函数声明
voidcaidan2();
voidchushi();
voidmain()
{cout<<"欢迎使用航空订票系统制作者李易霖—版权所有,XX~"<caidan2();
}//主函数
voidcaidan1()
{inti;
cout<<"*************航空订票系统v2012*************"<cout<<"*** ***"<cout<<"***1.订票业务2.退票业务***"<cout<<"***3.查询客户信息4.查询全部信息***"<cout<<"***5.退出系统***"<cout<<"******"<cout<<"***如果是第一次使用本系统,请载入初始信息~谢谢~***"<cout<<"*********************************************************"<ifstreaminfile1("airline.dat");
ifstreaminfile2("customer.dat");
for(i=0;i<3;i++){infile1>>fl[i].fligh>>fl[i].num>>fl[i].place>>fl[i].dticket>>fl[i].yticket;}
for(i=0;i<300;i++){infile2>>cu[i].name>>cu[i].num>>cu[i].seat>>cnum;}
infile1.close();infile2.close();//读取数据
cout<<"请输入业务代码:
";
list();
}//菜单1
voidcaidan2()
{intt;
cout<<"第一次启动本软件请输入1,否则请输入2:
";cin>>t;
if(t==1)chushi();elsecaidan1();}//菜单2
voidchushi()
{inti;
ofstreamoutfile("airline.dat");
ofstreamfile("customer.dat");
for(i=0;i<3;i++)
{outfile<<<<<file<outfile.close();file.close();
cout<<"初始化已完毕!
"<caidan1();
}//存储数据
voidlist()
{inta;
cin>>a;cout<switch(a)
{case1:
dingpiao();break;
case2:
tuipiao();break;
case3:
chaxun();break;
case4:
chaxunquanbu();break;
case5:
;break;
default:
{cout<<"输入错误,请重新输入正确的代码:
";list();}//输入代码
}
}
voiddingpiao()///////////////////////////////////////////////////////////订票
{charname[10];
intnum,i,t,j,k,temp;
intx;
cout<<"请输入你的姓名和想订的航班号:
"<cout<<"姓名:
";cin>>name;
cout<cout<<"航班号:
";cin>>num;
for(i=0;i<300;i++)
if(strcmp(name,cu[i].name)==0)
{cout<<"您已经定过航班,要返回主菜单吗?
(1.返回/2.退出)";
cin>>t;switch(t)
{case1:
caidan1();break;
default:
break;}
}
for(i=0;i<300;i++)
if(name!
=cu[i].name)
for(j=0;j<10;j++)
if(fl[j].fligh==num)temp=j;
if(fl[temp].yticket<=100){cout<<"此航班还有余票,要订票吗?
(1.是/2.否)";
cin>>x;
switch(x)
{case1:
{for(k=0;k<3;k++)
if(fl[k].fligh==num)
{
fl[k].dticket=fl[k].dticket+1;fl[k].yticket=fl[k].yticket-1;cnum=cnum+1;
strcpy(cu[cnum].name,name);cu[cnum].num=num;
cu[cnum].seat=fl[k].dticket;
ofstreamoutfile1("airline.dat");
for(j=0;j<3;j++)
outfile1<ofstreamoutfile2("customer.dat",ios:
:
app);
outfile2<cout<<"订票成功!
"<<<"客户信息:
"<"<"<outfile1.close();outfile2.close();
cout<<"1.返回主菜单2.退出:
";cin>>temp;
if(temp==1)caidan1();else;
}};break;
default:
caidan1();break;}}elsecout<<"此航班票已经售完,请订其他航班次的票~";
}///////////////////////////////////////////////////////////////////////////////////////////////////////订票
voidtuipiao()/////////////////////////////////////////////////////////////////////////////////////////退票
{charname[10];
inti,temp,t,num,a,j;
structtmp;
cout<<"请输入您的姓名和航班号:
"<cout<<"姓名:
";cin>>name;cout<<"航班号:
";cin>>num;cout<for(i=0;i<300;i++)
{if(strcmp(cu[i].name,name)==0)
{a=0;cout<<"确定退订吗?
(1.是2.否):
";cin>>temp;
if(temp==1)
{ofstreamoutfile1("airline.dat");
ofstreamoutfile2("customer.dat");
for(j=0;j<=i;j++)
outfile2<for(t=0;t<3;t++)
{if(fl[t].fligh==num){fl[t].dticket=fl[t].dticket-1;fl[t].yticket=fl[t].yticket+1;}}
for(t=0;t<3;t++)
outfile1<}
}
elsea!
=0;}
if(a!
=0)cout<<"没有你的信息,请查证后再操作!
";
cout<<"返回主菜单?
1.是2.否:
";cin>>temp;
if(temp==1)caidan1();}
////////////////////////////////////////////////////////////////////退票
voidchaxun()
{charname[10];
inttemp,i,a;
cout<<"请输入你的姓名:
";cin>>name;
for(i=0;i<300;i++)
if(strcmp(cu[i].name,name)==0){temp=i;a=0;}
cout<<"*****乘客信息*****"<"<<<"航班号:
"<"<if(a!
=0)cout<<"没有你的信息,请查证后再操作!
"<cout<<"返回主菜单?
1.是2.否";cin>>temp;
if(temp==1)caidan1();
}//查