资源描述
信息科学与技术学院
《程序设计基本》课程设计报告
题目名称:
车票管理系统
专业班级:
电子信息工程
10级2班
学生姓名:
王彪
樊江涛
学生学号:
指引教师:
高 攀
完毕日期:-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
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 welcome(); //欢迎子函数
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()
{
welcome();
return 0;
}
//欢迎子函数
void welcome()
{
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")
{
welcome();
}
}
outfile.close();
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
welcome();
}
//浏览班次子函数
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();
welcome();
}
//车次查询子函数
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();
welcome();
}
//终点站查询子函数
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();
welcome();
}
//购买火车票子函数
void shoupiao()
{
int R;
R=loading();
int i;
cout<<"请输入要订购车票班次:"<<endl;
cin>>i;
if(i<=0||i>R)
{
cout<<"对不起,今天没有这趟车,请明天再来,谢谢使用!"<<endl;
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
welcome();
}
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();
welcome();
}
//退订火车票子函数
void tuipiao()
{
int R;
R=loading();
int i;
cout<<"请输入要退购车票班次:"<<endl;
cin>>i;
if(i<=0||i>R)
{
cout<<"对不起,今天没有这趟车,无法完毕退票.谢谢使用!"<<endl;
cout<<"输入回车键返回"<<endl;
getchar();
getchar();
welcome();
}
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();
welcome();
}
//退出子函数
void quit()
{
cout<<"*********************谢谢使用本系统,欢迎下次继续使用***********************"<<endl;
}
//文献载入子函数
int loading()
{
int i;
ifstream infile;
infile.open("班次信息.txt",ios::in);
if(!infile)
{
cout<<"请查看原文献与否存在!"<<endl;
cout<<"按任意键返回";
getchar();
getchar();
welcome();
}
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++程序设计》,北京,清华大学出版社,.
展开阅读全文