铁路售票管理系统完整版.docx
《铁路售票管理系统完整版.docx》由会员分享,可在线阅读,更多相关《铁路售票管理系统完整版.docx(23页珍藏版)》请在冰豆网上搜索。
铁路售票管理系统完整版
HENsystemofficeroom【HEN16H-HENS2AHENS8Q8-HENH1688】
铁路售票管理系统
《C++程序设计》
课程设计说明书
题目
铁路售票系统
学号
姓名
指导教师
日期
内蒙古科技大学课程设计任务书
课程名称
面向对象程序设计A课程设计
设计题目
铁路售票管理系统的设计
指导教师
周李涌
时间
2013-2014秋学期第17、18周
一、教学要求
1.巩固和加深学生对C++语言课程的基本知识的理解和掌握
2.掌握C++语言编程和程序调试的基本技能
3.利用C++语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C++语言解决实际问题的能力
二、设计资料及参数
用C++设计一个系统,能提供下列服务:
(1)录入车次信息,格式为:
车次
发车时间
起始
终点
硬座票价
剩余座位
k264
20:
30
包头
北京
110
200
可不定时地增加车次数据。
(2)浏览车次信息,可显示出所有车次,如果当前系统时间超过了某车次的发车时间,则显示“此班列车已发出”的提示信息。
(3)查询路线:
可按车次编号查询,可按起始站,终点站查询
(4)售票和退票功能
A:
查询车次或站点。
当剩余座位数大于0,并且当前系统时间小于发车时间时才能售票,售票后自动更新剩余座位数。
B:
退票时,输入退票的车次,当本班列车未发出时才能退票,退票后自动更新剩余座位数。
三、设计要求及成果
根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统中的各个实体之间的关系及其属性和行为;
(2)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述(包括属性和力一法);
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)提交课程设计报告:
完成系统总结报告以及系统使用说明书
0
0
0
1
2
3
3
第1章需求分析
用C++设计一个系统,能提供下列服务:
(1)录入车次信息,格式为:
车次
发车时间
起始
终点
硬座票价
剩余座位
k264
20:
30
包头
北京
110
200
可不定时地增加车次数据。
(2)浏览车次信息,可显示出所有车次,如果当前系统时间超过了某车次的发车时间,则显示“此班列车已发出”的提示信息。
(3)查询路线:
可按车次编号查询,可按起始站,终点站查询
(4)售票和退票功能
A:
查询车次或站点。
当剩余座位数大于0,并且当前系统时间小于发车时间时才能售票,售票后自动更新剩余座位数。
B:
退票时,输入退票的车次,当本班列车未发出时才能退票,退票后自动更新剩余座位数。
第2章总体设计
1.用结构框图表示各个功能之间的关系。
2.将框图中系统的各个功能用文字详细的描述。
1)初始化:
在未添加过列车信息的情况下,管理员进入系统初次录入列车信息。
2)添加:
管理员添加列车信息。
3)浏览:
浏览列车信息,显示车次、发车时间、起始站、终点站、硬座票价、剩余座位、列车是否发出。
4)查找:
查找列车信息(分别为按车次、起始站、终点站)。
5)订票:
订购车票;已发出的列车不能订票。
6)退票:
退还车票;已发出的列车不能退票。
第3章类的设计
3.1user类的设计(第一个类)
1.画出类图
User
数据成员
structTime
{
inthour;
intminute;
};
charnum[10];
Timetime;
charstart[20];
charend[20];
intprice;
intcount;
函数成员
voidprint();
voidsearch();
voiddingpiao();
voidtuipiao();
2.对类的函数成员的说明
在第一个类中定义了浏览函数、查找函数、订票函数、退票函数
函数的首部:
1)浏览函数:
输入了当地时间、车次、列车发出时间、起始站、终点站、剩余车票;
进行了选择对象与输出流操作;
输出了当地时间,不同车次的车次编号、列车发出时间、起始站、终点
站、剩余车票、列车状态;
2)查找函数:
输入了车次(或起始站或终点站)。
进行输入车次(或起始站或终点站)与数据库内的车票信息的匹配。
输出了相匹配的车次的信息。
3)订票函数:
输入了车次(或起始站或终点站)。
进行输入车次(或起始站或终点站)与数据库内的车票信息的匹配。
判断是否允许
被购买,然后进行是否购买。
刷新车票。
输出车票已订购。
4)退票函数:
输入了车次(或起始站或终点站)。
进行输入车次(或起始站或终点站)与数据库内的车票信息的匹配。
判断是否允许
被退票,然后进行是否退票。
刷新车票。
输出车票已退还。
3.2service类的设计(第二个类)
1.画出类图
service
数据成员:
structTime
{
inthour;
intminute;
};
charnum[10];
Timetime;
charstart[20];
charend[20];
intprice;
intcount;
函数成员:
voidchushihua();
voidadd();
友元函数:
friendvoidckym();
friendvoidglyym();
friendvoidsfyz();
friendvoidsave();
friendvoidread();
friendvoidinput();
friendvoiddisplay(intj);
friendvoidsearch_CC();
friendvoidsearch_QS();
friendvoidsearch_ZD();
2.对类的函数成员的说明
1)初始化函数:
输入了初次对象的车次、列车发出时间、起始站、终点站、剩余车票数。
进行了车票信息的储存。
结果将车票信息保存在了。
2)增添函数:
输入了不同对象的车次、列车发出时间、起始站、终点站、剩余车票数。
进行了车票信息的储存。
结果将车票信息保存在了。
第4章详细设计
4.1工程视图
4.2类图视图
4.3主程序流程图
Y
N
N
Y
0N
1-6Y
0
1-4
4.4主要算法的流程图
初始化函数:
Y
N
添加模块:
Y
N
查询模块:
123
订票函数:
N
Y
Y
N
退票函数:
N
Y
Y
N
第5章测试
程序的运行结果截图:
第6章总结
感谢老师的辛苦教学与悉心指导,通过本次课程设计,让我更加深刻的理解到了C++得运用,这门语言的奥妙之处。
相信这次实训会让我在今后的学习中受益匪浅。
附录:
程序代码
#include<>
#include<>
#include<>um;
cout<<"请输入起始站:
"<cin>>ticket[g_num].start;
cout<<"请输入终点站:
"<cin>>ticket[g_num].end;
cout<<"请输入时间(时):
"<cin>>ticket[g_num].;
cout<<"请输入时间(分):
"<cin>>ticket[g_num].;
cout<<"请输入票价:
"<cin>>ticket[g_num].price;
cout<<"请输入车票数:
"<cin>>ticket[g_num].count;
save();
}
voidsave()
{
ofstreamfile("",ios:
:
in);
for(intj=0;j<=g_num;j++)
{
file<file<file<file<file<file<file<}
();
cout<<"信息已存入文件"<}
voidread()um;
file>>ticket[g_num].;
file>>ticket[g_num].;
file>>ticket[g_num].start;
file>>ticket[g_num].end;
file>>ticket[g_num].price;
file>>ticket[g_num].count;
}
g_num--;
();
cout<<"读取完毕!
"<}
voiddisplay(intj)
{
cout<<"
<<t=:
:
time(NULL);
tm*pt=localtime(&t);
if(ticket[j].tm_hour)
cout<<"此班列车已发出";
elseif(ticket[j].==pt->tm_hour&&ticket[j].<=pt->tm_min)
cout<<"此班列车已发出";
elsecout<<"正常";
cout<}
voidoutput()tm_hour)
{
cout<<"此班列车已发出,不能订票!
!
";
cout<<"请按回车键返回上层菜单"<getchar();
strcpy(ii,"n");
break;
}
elseif(ticket[j].==pt->tm_hour&&ticket[j].<=pt->tm_min)
{
cout<<"此班列车已发出,不能订票!
";
getchar();
strcpy(ii,"n");
break;
}
do
{
cout<<"请输入您要订的车票数(以回车键结束):
";
cin>>n;
if(n<=0)
{
cout<<"输入错误!
至少需订1张车票。
"<}
elseif(ticket[j].count!
=0&&ticket[j].count>=n)
{
ticket[j].count=ticket[j].count-n;
cout<<"订票成功!
";
break;
}
elseif(ticket[j].count==0)
{
cout<<"对不起,你所选择的列车的车票已售完!
"<break;
}
elseif(ticket[j].count{
cout<<"对不起,你所选择的列车只剩余"<cout<<"是否需要重新输入车票数?
请输入y或n以回车键结束:
";
cin>>a;
}
}while(!
strcmp(a,"y"));
cout<<"是否需要重新订购其他车票?
请输入y或n以回车键结束:
";
cin>>a;
}while(!
strcmp(a,"y"));
}
/***********************************退票模块*******************************************/
voiduser:
:
tuipiao()
{
system("cls");
tm*pt=localtime(&t);
intn;
chara[10];
do
{
search();
if(!
strcmp(ii,"n"))
{
cout<<"对不起!
没有找到您所需要的列车,所以不能退票。
"<cout<<"请按回车键返回上层菜单"<strcpy(ii,"n");
getchar();
return;
}
if(ticket[j].tm_hour)
{
cout<<"此班列车已发出,不能退票!
!
"<strcpy(ii,"n");
getchar();
break;
}
elseif(ticket[j].==pt->tm_hour&&ticket[j].<=pt->tm_min)
{
cout<<"此班列车已发出,不能退票!
"<strcpy(ii,"n");
getchar();
break;
}
cout<<"请输入您要退的车票数:
"<cin>>n;
if(n<=0)
cout<<"输入错误!
至少需退1张车票。
"<else
{
ticket[j].count=ticket[j].count+n;
cout<<"退票成功!
";
}
cout<<"是否继续?
请键入y或n以回车键结束:
"<cin>>a;
}while(!
strcmp(a,"y"));
}
/**************************************查询模块*********************************************************************/
voiduser:
:
search()车次查询"<"\t2.按起始站查询"<cout<<"请选择1或2或3,以回车键结束:
";
cin>>n;
for(;n!
=1&&n!
=2&&n!
=3;)
{
cout<<"指令错误!
请重新输入!
"<cin>>n;
}
switch(n)
{
case1:
search_CC();
break;
case2:
search_QS();
break;
case3:
search_ZD();
break;
}
}
voidsearch_CC()um)==0)
{
cout<<"你所要查询的列车信息为:
"<cout<<"车次\t"<<"起始站\t"<<"终点站\t"<<"发车时间\t"<<"票价\t"<<"剩余票数\t"<<"状态"<display(j);
cout<<"\n查询完毕,按回车键继续"<strcpy(ii,"y");
getchar();
return;
}
}
cout<<"\n对不起,没有您需要的信息!
"<cout<<"是否重新查找?
请键入y或n以回车键结束";
cin>>ii;
}while(!
strcmp(ii,"y"));
}
voidsearch_QS()tart)==0)
{
cout<<"你所要查询的列车信息为:
"<cout<<"车次\t"<<"开车时间\t"<<"起始\t"<<"终点\t"<<"票价\t"
<<"剩余座位\t"<<"状态\t"<display(j);
cout<<"\n查询完毕,按回车键继续"<strcpy(ii,"y");
getchar();
return;
}
}
cout<<"\n对不起,没有您需要的信息!
"<cout<<"是否重新查找?
请键入y或n以回车键结束";
cin>>ii;
}while(!
strcmp(ii,"y"));
}
voidsearch_ZD()nd)==0)
{
cout<<"你所要查询的列车信息为:
"<cout<<"车次\t"<<"开车时间\t"<<"起始\t"<<"终点\t"<<"票价\t"
<<"剩余座位\t"<<"状态\t"<display(j);
cout<<"\n查询完毕,按回车键继续"<strcpy(ii,"y");
getchar();
return;
}
}
cout<<"\n对不起,没有您需要的信息!
"<cout<<"是否重新查找?
请键入y或n以回车键结束";
cin>>ii;
}while(!
strcmp(ii,"y"));
}
/*******************************************************浏览模块*****************************************************/
voiduser:
:
print()览车次信息"<cout<<"2.查找车次信息"<cout<<"3.订票业务"<cout<<"4.退票业务"<cout<<"0.退出"<cout<<"********************************************************************************"<cout<<"请输入选项前数字(回车键结束):
"<cin>>j;
switch(j)
{
case1:
ticket[9].print();
break;
case2:
ticket[9].search();
break;
case3:
ticket[9].dingpiao();
break;
case4:
ticket[9].tuipiao();
break;
case0:
save();
cout<<"谢谢使用,您已退出乘客系统,再见"<break;
}
}while(j!
=0);
}
voidglyym()hushihua();
intj;
do
{
cout<<"********************************************************************************";
cout<<"1.增加车次信息"<cout<<"2.浏览车次信息"<cout<<"3.查找车次信息"<cout<<"4.订票业务"<cout<<"5.退票业务"<cout<<"0.退出"<cout<<"********************************************************************************";
cout<<"请输入选项前数字(回车键结束):
";
cin>>j;
switch(j)
{
case1:
ticket[9].add();
break;
case2:
ticket[9].print();
break;
case3:
ticket[9].search();
break;
case4:
ticket[9].dingpiao();
break;
case5:
ticket[9].tuipiao();
break;
case0:
save();
cout<<"谢谢使用,您已退出管理员系统,再见"<break;
}
}while(j!
=0);
}
voidsfyz()理员"<cin>>sf;
if(sf==1)
{
cout<<"请输入密码:
";
cin>>code;
while(code!
=1)//管理员密码为1
{
cout<<"指令错误!
请重新输入!
"<cin>>code;
}
glyym();//调用管理员选择页面函数
}
elseif(sf==2)
{
ckym();//调用乘客界面
}
}while(sf!
=0);
}
voidmain()
{
cout<<"》》》》》》》》》》》》》》》欢迎使用铁路订票系统《《《《《《《《《《《《《《《"<cout<<"\t\t\t\t\t\t☆☆"<sfyz();//调用身份验证函数
cout<<"谢谢使用,再见!
!
"<}