基于C++的火车票管理系统C++课程设计.docx
《基于C++的火车票管理系统C++课程设计.docx》由会员分享,可在线阅读,更多相关《基于C++的火车票管理系统C++课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于C++的火车票管理系统C++课程设计
信息科学与技术学院
《程序设计基础》课程设计报告
题目名称:
车票管理系统
专业班级:
电子信息工程
10级2班
学生姓名:
王彪
樊江涛
学生学号:
2010508115
2010508131
指导教师:
高攀
完成日期:
2011-01
1.课程设计综述
1.1课程设计的目的
让我们更加深入的了解C++的,使我们一学期学习到的东西得到实践.
1.2课程设计的题目
火车票管理系统
1.3题目要求
用c++设计一个系统,能提供下列服务:
(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状态(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:
可按班次号查询,可按终点站查询
(4)售票和退票功能
A:
当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:
退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
2方案选择
1)算法设计说明
由主函数进入,弹出主菜单界面,通过Switch语句选择需要的功能,可以选择班次录入,浏览班次信息,查询班次信息,购票和退票以及退出系统,以完成不同的操作.其中查询班次信息中还可以由班次查询或者终点站查询.整个系统的文件载入用一个文件载入函数承当.
3详细设计
3.1流程图
开始
Main函数,进入Switch语句
班次录入子函数
浏览班次子函数
查询子函数
购买车票子函数
退订车票子函数
按照班次查询
按照终点站查询
返回到主菜单
退出程序子函数
结束
3.2源程序
#include
#include
#include
#include
usingnamespacestd;
voidwelcome();//欢迎子函数
voidchoose();//选择子函数
voidbanciluru();//班次录入子函数
voidliulanbancixinxi();//浏览班次信息子函数
voidshoupiao();//售票子函数
voidtuipiao();//退票子函数
voidquit();//退出子函数
voidchaxun();//查询子函数
intloading();//文件载入子函数
constintMAX=20;//使数组最大值可调
constintN=50;
structtime//时间结构体,为了与系统时间做比较.
{
inthour;
intminutes;
};
structticket//车票结构体,包含车次,时间结构体,起点,终点,行车时间,额定载客量,已订票人数
{
intNumber;
structtimeSetout;
charQidian[MAX];
charZhongdian[MAX];
floatLasttime;
intFixnumber;
intFixednumber;
}car[N];
//主函数
intmain()
{
welcome();
return0;
}
//欢迎子函数
voidwelcome()
{
cout<<"________________________________________________________"<cout<<"|欢*迎*使*用*火*车*票*管*理*系*统|"<cout<<"||"<cout<<"|本管理系统有以下功能:
|"<cout<<"||"<cout<<"|1班次录入|"<cout<<"|2浏览班次信息|"<cout<<"|3查询火车信息|"<cout<<"|4购买火车票|"<cout<<"|5退订火车票|"<cout<<"|6退出系统|"<cout<<"|______________________________________________________|"<cout<<"请输入所要执行功能前的数字:
"<choose();
}
//选择子函数
voidchoose()
{
stringi;
cin>>i;
if(i=="1")
banciluru();
if(i=="2")
liulanbancixinxi();
if(i=="3")
chaxun();
if(i=="4")
shoupiao();
if(i=="5")
tuipiao();
if(i=="6")
quit();
else
{
cout<<"输入有误!
请在数字1-5之间重新您的输入选择!
"<choose();
}
}
//班次录入子函数
voidbanciluru()
{
stringt="1";
ofstreamoutfile;
out("班次信息.txt",ios:
:
app);
for(inti=0;t=="1";i++)
{
cout<<"请输入需要添加的火车班次:
"<cin>>car[i].Number;
cout<<"请输入此班次发车时间(格式:
先输入小时,回车,再输入分钟):
"<cin>>car[i].Setout.hour;
cin>>car[i].Setout.minutes;
cout<<"请输入出发站:
"<cin>>car[i].Qidian;
cout<<"请输入终点站:
"<cin>>car[i].Zhongdian;
cout<<"请输入行车时间:
"<cin>>car[i].Lasttime;
cout<<"请输入额定载客量:
"<cin>>car[i].Fixnumber;
cout<<"请输入已订票人数:
"<cin>>car[i].Fixednumber;
outfile<cout<<"是否继续录入?
(是请输1,否请输任意键返回主菜单)"<cin>>t;
if(t!
="1")
{
welcome();
}
}
out();
cout<<"输入回车键返回"<getchar();
getchar();
welcome();
}
//浏览班次子函数
voidliulanbancixinxi()
{
intc;
c=loading();
cout<<"班次"<<""<<"发车时间"<<""<<"起点站"<<""<<"终点站"<<""<<"行车时间"<<""<<"额定载客量"<<""<<"已订票人数"<for(inti=0;i{
cout<"<time_ttval;
structtm*now;
tval=time(NULL);
now=localtime(&tval);
if((now->tm_hour==car[i].Setout.hour&&now->tm_min>car[i].Setout.minutes)||(now->tm_hour>car[i].Setout.hour))
cout<<"此车已发出"<}
cout<<"输入回车键返回"<getchar();
getchar();
welcome();
}
//车次查询子函数
voidNumbersearch();
voidFinalsearch();
voidchaxun()
{
stringt;
cout<<"1.按班次查询"<cout<<"2.按终点站查询"<cout<<"请输入您想选择的查询方法前的数字:
"<cin>>t;
if(t=="1")
Numbersearch();
if(t=="2")
Finalsearch();
if(t!
="1"||t!
="2")
{
cout<<"输入有误,请重新输入"<chaxun();
}
}
//班次查询子函数
voidNumbersearch()
{
loading();
intSearchNumber;
cout<<"请输入您需要查找的班次号:
"<cin>>SearchNumber;
cout<<"班次"<<""<<"发车时间"<<""<<"起点站"<<""<<"终点站"<<""<<"行车时间"<<""<<"额定载客量"<<""<<"已订票人数"<cout<"<cout<<"输入回车键返回"<getchar();
getchar();
welcome();
}
//终点站查询子函数
voidFinalsearch()
{
intR;
R=loading();
inti;
charAddress[MAX];
cout<<"请输入终点站名称:
"<cin>>Address;
cout<<"班次"<<""<<"发车时间"<<""<<"起点站"<<""<<"终点站"<<""<<"行车时间"<<""<<"额定载客量"<<""<<"已订票人数"<for(i=0;i{
if((strcmp(Address,car[i].Zhongdian))==0)
cout<"<}
cout<<"输入回车键返回"<getchar();
getchar();
welcome();
}
//购买火车票子函数
voidshoupiao()
{
intR;
R=loading();
inti;
cout<<"请输入要订购的车票的班次:
"<cin>>i;
if(i<=0||i>R)
{
cout<<"对不起,今天没有这趟车,请明天再来,谢谢使用!
"<cout<<"输入回车键返回"<getchar();
getchar();
welcome();
}
time_ttval;
structtm*now;
tval=time(NULL);
now=localtime(&tval);
if((now->tm_hour==car[i-1].Setout.hour&&now->tm_mintm_hour{
if(car[i-1].Fixednumber{
(car[i-1].Fixednumber)++;
ofstreamoutfile;
out("班次信息.txt",ios:
:
out);
for(i=0;i{
outfile<}
out();
cout<<"你的订票成功,请按时上车,谢谢使用!
"<}
elsecout<<"对不起,今天的这趟车的票已卖完,请明天再来,谢谢合作"<}
elsecout<<"对不起,今天的这趟车已发出,请明天再来,谢谢合作"<cout<<"输入回车键返回"<getchar();
getchar();
welcome();
}
//退订火车票子函数
voidtuipiao()
{
intR;
R=loading();
inti;
cout<<"请输入要退购的车票的班次:
"<cin>>i;
if(i<=0||i>R)
{
cout<<"对不起,今天没有这趟车,无法完成退票.谢谢使用!
"<cout<<"输入回车键返回"<getchar();
getchar();
welcome();
}
time_ttval;
structtm*now;
tval=time(NULL);
now=localtime(&tval);
if((now->tm_hour==car[i-1].Setout.hour&&now->tm_mintm_hour{
if(car[i-1].Fixednumber>=1)
{
car[i-1].Fixednumber-=1;
ofstreamoutfile;
out("班次信息.txt",ios:
:
out);
for(i=0;i{
outfile<}
out();
cout<<"退订车票成功,谢谢使用!
"<}
elsecout<<"对不起,今天的这趟车的票尚未卖出,无法完成退票!
"<}
elsecout<<"对不起,今天的这趟车已发出,无法完成退票!
"<cout<<"输入回车键返回"<getchar();
getchar();
welcome();
}
//退出子函数
voidquit()
{
cout<<"*********************谢谢使用本系统,欢迎下次继续使用***********************"<}
//文件载入子函数
intloading()
{
inti;
ifstreaminfile;
in("班次信息.txt",ios:
:
in);
if(!
infile)
{
cout<<"请查看原文件是否存在!
"<cout<<"按任意键返回";
getchar();
getchar();
welcome();
}
for(i=0;!
in();i++)
{
infile>>car[i].Number>>car[i].Setout.hour>>car[i].Setout.minutes>>car[i].Qidian>>car[i].Zhongdian>>car[i].Lasttime>>car[i].Fixnumber>>car[i].Fixednumber;
}
returni-1;
}
4测试
主菜单:
班次录入:
浏览班次信息:
查询火车信息:
测试中发现订购和退订车票后,虽然已订购车票数实际上有增减,但不能存入到文件中及时保存.后来通过以文件覆盖的方法重新录入一次文件得以解决.测试中还发现若时间是整点的话,分钟的0只能是一个0,因为分钟定义的格式是int.,但若果改成char格式之后和系统时间比较的函数将不成立.所以这个程序仍然存在这样的一个问题.
5课程设计总结
通过这次的课程设计,我发现我还有好多的不足之处,还有好多知识不能很好的运用,而且题目中的一个要求没有正常的完成.我觉得我们应该花更多的时间去查找资料,因为仅凭自己已学的知识是无法完成这些内容的.
这次课程设计我用了9个子函数去完成,分开完成各个函数并验证其正确性,这样的方法让我能够顺利完成整个系统.
不足之处还有好多,我应该在以后的学习中更加努力完善.
6参考书目:
[1]谭浩强,《C++程序设计》,北京,清华大学出版社,2006年.