c++铁路售票管理系统的设计.docx
《c++铁路售票管理系统的设计.docx》由会员分享,可在线阅读,更多相关《c++铁路售票管理系统的设计.docx(19页珍藏版)》请在冰豆网上搜索。
c++铁路售票管理系统的设计
《C++程序设计》
课程设计说明书
题目
铁路售票管理系统的设计
学号
姓名
指导教师
王丽颖
日期
2014-2015秋学期第16、17周
内蒙古科技大学课程设计任务书
课程名称
面向对象程序设计A课程设计
设计题目
铁路售票管理系统的设计
指导教师
王丽颖
时间
2014-2015秋学期第16、17周
一、教学要求
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)提交课程设计报告:
完成系统总结报告以及系统使用说明书
第1章需求分析
用C++设计一个系统,能提供下列服务:
(1)录入车次信息,格式为:
车次
发车时间
起始
终点
硬座票价
剩余座位
k264
20:
30
包头
北京
110
200
可不定时地增加车次数据。
(2)浏览车次信息,可显示出所有车次,如果当前系统时间超过了某车次的发车时间,则显示“此班列车已发出”的提示信息。
(3)查询路线:
可按车次编号查询,可按起始站,终点站查询
(4)售票和退票功能
A:
查询车次或站点。
当剩余座位数大于0,并且当前系统时间小于发车时间时才能售票,售票后自动更新剩余座位数。
B:
退票时,输入退票的车次,当本班列车未发出时才能退票,退票后自动更新剩余座位数。
第2章总体设计
1.
用结构图表示各功能间关系
2.功能模块描述
车次录入
录入车次,发车时间,起始站,终点站,硬座票价,剩余座位。
车次浏览
浏览车次信息,可显示出所有车次,如果当前系统时间超过了某车次的发车时间,则显示“此班列车已发出”的提示信息
车次查询
查询路线:
可按车次编号查询,可按终点站查询
售票
查询车次或站点。
当剩余座位数大于0,并且当前系统时间小于发车时间时才能售票,售票后自动更新剩余座位数。
退票
退票时,输入退票的车次,当本班列车未发出时才能退票,退票后自动更新剩余座位数。
第3章类的设计
3.1Busman类的设计
1.画出类图
Busman
stringNum;
stringSetoutTime;
stringBegPlace;
stringEndPlace;
stringPrice;
intCapacity;
intHumNum;
voidFoundInfo();
voidSearchInfo();
voidShowInfo();
voidExitTicket();
voidSellTicket();
图3.1类图
2.对类的函数成员的说明
voidFoundInfo();输入1;进行火车票录入操作;返回建立成功按任意键返回
voidSearchInfo();输入2;进行浏览火车票操作;返回火车票信息按任意键返回
voidShowInfo();输入3;进行查询路线信息查询操作;返回火车路线信息按任意键返回
voidSellTicket();输入4;进行售票操作;返回火车票购买成功或者已发车按任意键返回
voidExitTicket();输入5;进行退票操作;返回退票成功或者该车已发无法退票按任意键返回
第4章详细设计
4.1工程视图
图4.1工程视图
4.2类图视图
图4.2类图视图
4.3主程序流程图
图4.3主程序流程图
第5章测试
5.1车次信息录入
5.2车次信息浏览
5.3车次信息查找
5.4售票
5.5退票
第6章总结
经历过基本几天都在看程序的时间,我发现我懂的太少,要学的太多。
原以为会很轻松,但还是遇到很多问题,以前上课时从未想到过。
对文件的操作我一直都没注意,学习与实践果然是不可分割的。
本次课程设计在老师的帮助和自己的努力下终于能够成功运行,使我感到非常高兴以及提高了自己的编程信心,虽然这次课程设计的题目实现比较简单和不实用但毕竟是自己将近两个星期的努力地结果。
在期间我对编程的理念理解又加深了一点,他是我明白好的算法或者是好的逻辑思维对编程的重要性,当费很大劲才把程序调运行的时候那种感觉实在是太好了。
在本次课程设计活动中,我明显的感觉到自己知识的欠缺和实际动手能的差劲。
尤其是在传值传参的函数调用时更体现的非常明显,感觉自己的书本学的不透、学的不扎实。
有些地方更本就不会,不如说文件的操作,比如说系统时间的获取等以前在上课或作习题时更本就不会考虑的问题在课程设计当中完全暴露出来。
此次实习加强了我的理解,很多以前迷糊的概念得到了明确,亦让我感到计算机语言的强大之处。
一句诗概括此次实践,“山重水复疑无路,柳暗花明又一村”;如今实践已然结束,但是对于计算机语言的学习决不能放松,“雄关漫道真如铁,而今迈步从头越”。
现在的世界是信息化的,路漫漫其修远兮,吾将上下而求索。
感谢老师抽出时间的指导,同时亦感谢大家这些天来的支持与帮助。
附录:
程序代码
#include
#include
#include
#include
#include
#include
usingnamespacestd;
structnode
{
stringNum;
stringSetoutTime;
stringBegPlace;
stringEndPlace;
stringPrice;
intCapacity;
intHumNum;
node*Next;
};
classBusman
{
private:
node*BusHead;
public:
Busman(){BusHead=NULL;}
voidFoundInfo();
voidSearchInfo();
voidShowInfo();
voidExitTicket();
voidSellTicket();
};
voidBusman:
:
FoundInfo()
{
node*p=NULL,*q;
inti,n;
cout<<"\n录入班次信息:
\n";
cout<<"记录总数:
";
cin>>n;
for(i=0;i{
q=p;
p=newnode;
cout<<"班次:
";
cin>>p->Num;
cout<<"发车时间:
";
cin>>p->SetoutTime;
cout<<"起始站:
";
cin>>p->BegPlace;
cout<<"终点站:
";
cin>>p->EndPlace;
cout<<"硬座票价:
";
cin>>p->Price;
cout<<"剩余座位:
";
cin>>p->Capacity;
p->HumNum=0;
if(Busman:
:
BusHead==NULL)
Busman:
:
BusHead=p;
else
q->Next=p;
cout<}
p->Next=NULL;
cout<<"建立完毕!
"<}
voidBusman:
:
ShowInfo()
{
stringtime;
node*p;
cout<<"当前时间为:
";
cin>>time;
cout<<"班次"<<"\t"<<"发车时间"<<""<<"起始站"<<"\t"<<"终点站"<<""<<"硬座票价"<<"\t"<<"客载量"<<""<<"订票人数"<<"发出"<for(p=Busman:
:
BusHead;p!
=NULL;p=p->Next)
{
cout<Num<<"\t"<SetoutTime<<"\t"<BegPlace<<"\t"<EndPlace<<"\t"<Price<<"\t"<Capacity<<"\t"<HumNum;
if(time>=p->SetoutTime)cout<<"(已发车)"<elsecout<<"(未发车)"<}
}
voidBusman:
:
SearchInfo()
{
intsel;
strings;
node*p;
cout<<"
(1)班次查找"<cout<<"
(2)终站查找"<cout<<">>>>选择:
";
cin>>sel;
if(sel==1)
{
cout<<"输入查找的班次号:
";
cin>>s;
}
elseif((sel=2))
{
cout<<"输入查找的终点名称:
";
cin>>s;
}
cout<<"班次"<<"\t"<<"发车时间"<<""<<"起始站"<<"\t"<<"终点站"<<""<<"硬座票价"<<"\t"<<"客载量"<<""<<"订票人数"<<"发出"<for(p=Busman:
:
BusHead;p!
=NULL;p=p->Next)
{
if((sel==1&&p->Num==s)||(sel==2&&p->EndPlace==s))
{
cout<Num<<"\t"<SetoutTime<<"\t"<BegPlace<<"\t"<EndPlace<<"\t"<Price<<"\t"<Capacity<<"\t"<HumNum;
break;
}
}
if(p==NULL)
cout<<"未找到!
"<}
voidBusman:
:
ExitTicket()
{
strings,t;
node*p;
cout<<"退票的班次是:
";
cin>>s;
for(p=BusHead;p!
=NULL;p=p->Next)
if(p->Num==s)break;
if(p==NULL)
{
cout<<"未找到班次!
"<return;
}
cout<<"当前时间是:
";
cin>>t;
if(tSetoutTime)
{
p->HumNum--;
cout<<"退票成功!
"<}
else
{
cout<<"该车已发无法退票!
"<}
}
voidBusman:
:
SellTicket()
{
stringt,s;
node*p;
cout<<"售票的班次是:
";
cin>>s;
for(p=BusHead;p!
=NULL;p=p->Next)
if(p->Num==s)break;
if(p==NULL)
{
cout<<"未找到班次!
"<return;
}
cout<<"当前时间是:
";
cin>>t;
if(tSetoutTime&&p->HumNum+1<=p->Capacity)
{
p->HumNum++;
cout<<"售票成功!
"<}
else
{
cout<<"该车已发或客载量已满!
"<}
}
voidShowForm();
intmain()
{
intsel;
BusmanBusAdmin;
while
(1)
{
system("cls");
ShowForm();
cin>>sel;
switch(sel)
{
case1:
BusAdmin.FoundInfo();break;
case2:
BusAdmin.ShowInfo();break;
case3:
BusAdmin.SearchInfo();break;
case4:
BusAdmin.SellTicket();break;
case5:
BusAdmin.ExitTicket();break;
case0:
return0;
}
cout<fflush(stdin);
cout<<"按任意键返回主菜单:
"<getch();
}
}
voidShowForm()
{
cout<<"欢迎使用火车订票系统"<cout<<""<cout<<"*******************************"<cout<<"*
(1)录入火车信息*"<cout<<"*
(2)浏览火车信息*"<cout<<"*(3)查询路线信息*"<cout<<"*(4)售票*"<cout<<"*(5)退票*"<cout<<"*(0)退出程序*"<cout<<"*******************************"<cout<<""<cout<<"请输入数字进行选择:
";
}