资源描述
. .
信息科学与技术学院
?程序设计根底?课程设计报告
题目名称:
车票管理系统
专业班级:
电子信息工程
10级2班
学生XX:
彪
樊江涛
学生学号:
2021508115
2021508131
指导教师:
高 攀
完成日期:2021-01
目 录
1 课程设计综述—————————————————3
1.1 课程设计的目的———————————————3
1.2 课程设计的题目———————————————3
1.3 题目要求——————————————————3
2概要设计———————————————————3
3 详细设计———————————————————4
3.1 流程图———————————————————4
3.2 源程序——————————————————4
4 测试———————————————————5
5 课程设计总结—————————————————5
. .word.zl.
. .
. .word.zl.
. .
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 <iostream>
#include <fstream>
#include <string>
#include<time.h>
using namespace std;
void wele(); //欢迎子函数
void choose(); //选择子函数
void banciluru(); //班次录入子函数
void liulanbancixinxi(); //浏览班次信息子函数
void shoupiao(); //售票子函数
void tuipiao(); //退票子函数
void quit(); //退出子函数
void chaxun(); //查询子函数
int loading(); //文件载入子函数
const int MAX=20; //使数组最大值可调
const int N=50;
struct time //时间构造体,为了与系统时间做比较.
{
int hour;
int minutes;
};
struct ticket //车票构造体,包含车次,时间构造体,起点,终点,行车时间,额定载客量,已订票人数
{
int Number;
struct time Setout;
char Qidian[MAX];
char Zhongdian[MAX];
float Lasttime;
int Fixnumber;
int Fixednumber;
}car[N];
//主函数
int main()
{
wele();
return 0;
}
//欢迎子函数
void wele()
{
cout<<"________________________________________________________"<<endl;
cout<<"| 欢 * 迎 * 使 * 用 * 火 * 车 * 票 * 管 * 理 * 系 * 统 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 本管理系统有以下功能: |"<<endl;
cout<<"| |"<<endl;
cout<<"| 1 班次录入 |"<<endl;
cout<<"| 2 浏览班次信息 |"<<endl;
cout<<"| 3 查询火车信息 |"<<endl;
cout<<"| 4 购置火车票 |"<<endl;
cout<<"| 5 退订火车票 |"<<endl;
cout<<"| 6 退出系统 |"<<endl;
cout<<"|______________________________________________________|"<<endl;
cout<<"请输入所要执行功能前的数字: "<<endl;
choose();
}
//选择子函数
void choose()
{
string i;
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之间重新您的输入选择!"<<endl;
choose();
}
}
//班次录入子函数
void banciluru()
{
string t="1";
ofstream outfile;
outfile.open("班次信息.txt",ios::app);
for(int i=0;t=="1";i++)
{
cout<<"请输入需要添加的火车班次:"<<endl;
cin>>car[i].Number;
cout<<"请输入此班次发车时间(格式:先输入小时,回车,再输入分钟):"<<endl;
cin>>car[i].Setout.hour;
cin>>car[i].Setout.minutes;
cout<<"请输入出发站:"<<endl;
cin>>car[i].Qidian;
cout<<"请输入终点站:"<<endl;
cin>>car[i].Zhongdian;
cout<<"请输入行车时间:"<<endl;
cin>>car[i].Lasttime;
cout<<"请输入额定载客量:"<<endl;
cin>>car[i].Fixnumber;
cout<<"请输入已订票人数:"<<endl;
cin>>car[i].Fixednumber;
outfile<<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<<endl;
cout<<"是否继续录入?(是请输1,否请输任意键返回主菜单)"<<endl;
cin>>t;
if(t!="1")
{
wele();
}
}
outfile.close();
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
wele();
}
//浏览班次子函数
void liulanbancixinxi()
{
int c;
c=loading();
cout<<"班次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载客量"<<" "<<"已订票人数"<<endl;
for(int i=0;i<c;i++)
{
cout<<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<<endl;
time_t tval;
struct tm *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<<"此车已发出"<<endl;
}
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
wele();
}
//车次查询子函数
void Numbersearch();
void Finalsearch();
void chaxun()
{
string t;
cout<<"1.按班次查询"<<endl;
cout<<"2.按终点站查询"<<endl;
cout<<"请输入您想选择的查询法前的数字:"<<endl;
cin>>t;
if(t=="1")
Numbersearch();
if(t=="2")
Finalsearch();
if(t!="1"||t!="2")
{
cout<<"输入有误,请重新输入"<<endl;
chaxun();
}
}
//班次查询子函数
void Numbersearch()
{
loading();
int SearchNumber;
cout<<"请输入您需要查找的班次号:"<<endl;
cin>>SearchNumber;
cout<<"班次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载客量"<<" "<<"已订票人数"<<endl;
cout<<car[SearchNumber-1].Number<<" "<<car[SearchNumber-1].Setout.hour<<":"<<car[SearchNumber-1].Setout.minutes<<" "<<car[SearchNumber-1].Qidian<<" "<<car[SearchNumber-1].Zhongdian<<" "<<car[SearchNumber-1].Lasttime<<" "<<car[SearchNumber-1].Fixnumber<<" "<<car[SearchNumber-1].Fixednumber<<endl;
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
wele();
}
//终点站查询子函数
void Finalsearch()
{
int R;
R=loading();
int i;
char Address[MAX];
cout<<"请输入终点站名称:"<<endl;
cin>>Address;
cout<<"班次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载客量"<<" "<<"已订票人数"<<endl;
for(i=0;i<R;i++)
{
if((strcmp(Address,car[i].Zhongdian))==0)
cout<<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<<endl;
}
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
wele();
}
//购置火车票子函数
void shoupiao()
{
int R;
R=loading();
int i;
cout<<"请输入要订购的车票的班次:"<<endl;
cin>>i;
if(i<=0||i>R)
{
cout<<"对不起,今天没有这趟车,请明天再来,使用!"<<endl;
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
wele();
}
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
if((now->tm_hour==car[i-1].Setout.hour&&now->tm_min<car[i-1].Setout.minutes)||(now->tm_hour<car[i-1].Setout.hour))
{
if(car[i-1].Fixednumber<car[i-1].Fixnumber)
{
(car[i-1].Fixednumber)++;
ofstream outfile;
outfile.open("班次信息.txt",ios::out);
for(i=0;i<R;i++)
{
outfile<<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<<endl;
}
outfile.close();
cout<<"你的订票成功,请按时上车,使用!"<<endl;
}
else cout<<"对不起,今天的这趟车的票已卖完,请明天再来,合作"<<endl;
}
else cout<<"对不起,今天的这趟车已发出,请明天再来,合作"<<endl;
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
wele();
}
//退订火车票子函数
void tuipiao()
{
int R;
R=loading();
int i;
cout<<"请输入要退购的车票的班次:"<<endl;
cin>>i;
if(i<=0||i>R)
{
cout<<"对不起,今天没有这趟车,无法完成退票.使用!"<<endl;
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
wele();
}
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
if((now->tm_hour==car[i-1].Setout.hour&&now->tm_min<car[i-1].Setout.minutes)||(now->tm_hour<car[i-1].Setout.hour))
{
if(car[i-1].Fixednumber>=1)
{
car[i-1].Fixednumber-=1;
ofstream outfile;
outfile.open("班次信息.txt",ios::out);
for(i=0;i<R;i++)
{
outfile<<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<<endl;
}
outfile.close();
cout<<"退订车票成功,使用!"<<endl;
}
else cout<<"对不起,今天的这趟车的票尚未卖出,无法完成退票!"<<endl;
}
else cout<<"对不起,今天的这趟车已发出,无法完成退票!"<<endl;
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
wele();
}
//退出子函数
void quit()
{
cout<<"*********************使用本系统,欢迎下次继续使用***********************"<<endl;
}
//文件载入子函数
int loading()
{
int i;
ifstream infile;
infile.open("班次信息.txt",ios::in);
if(!infile)
{
cout<<"请查看原文件是否存在!"<<endl;
cout<<"按任意键返回";
getchar();
getchar();
wele();
}
for(i=0;!infile.eof();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;
}
return i-1;
}
4 测试
主菜单:
班次录入:
浏览班次信息:
查询火车信息:
测试中发现订购和退订车票后,虽然已订购车票数实际上有增减,但不能存入到文件中及时保存.后来通过以文件覆盖的法重新录入一次文件得以解决.测试中还发现假设时间是整点的话,分钟的0只能是一个0,因为分钟定义的格式是int.,但假设果改成char格式之后和系统时间比较的函数将不成立.所以这个程序仍然存在这样的一个问题.
5 课程设计总结
通过这次的课程设计,我发现我还有好多的缺乏之处,还有好多知识不能很好的运用,而且题目中的一个要求没有正常的完成.我觉得我们应该花更多的时间去查找资料,因为仅凭自己已学的知识是无法完成这些容的.
这次课程设计我用了9个子函数去完成,分开完成各个函数并验证其正确性,这样的法让我能够顺利完成整个系统.
缺乏之处还有好多,我应该在以后的学习中更加努力完善.6参考书目:
[1] 谭浩强,?C++程序设计?,,清华大学,2006年.
. .word.zl.
展开阅读全文