车票管理系统.docx
《车票管理系统.docx》由会员分享,可在线阅读,更多相关《车票管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
车票管理系统
石河子大学
课程设计报告
《车票管理系统》
目录
一、课程设计题目…………………………………………1
二、程序运行流程图………………………………………2
三、程序设计的想法和具体思路…………………………3
四、参考文献………………………………………………3
附件一:
设计进度……………………………………………………4
附件二:
源代码………………………………………………………4
一、课程设计题目
C++题目二十三:
车票管理系统(限最多2人完成)
一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。
如
班次发车时间起点站终点站行车时间额定载量已定票人数
18:
00郫县广汉24530
26:
30郫县成都0.54040
37:
00郫县成都0.54020
410:
00郫县成都0.5402
…
(一)功能要求:
用C/C++设计一系统,能提供下列服务:
(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:
可按班次号查询,可按终点站查询
(4)售票和退票功能
A:
当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:
退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
(二)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档
二、程序运行流程图
三、运行结果
1:
2:
四、参考文献
李春葆,曾平,刘斌,《C++语言程序设计题典》,北京,清华大学出版社,2003年
五、总结
编这个程序历经半个多月,本以为可以很轻松完成的程序改了又改,又参考了许多资料,看了很多相关方面的书籍和从网站找一些相关资料,才断断续续完成这个管理系统。
做题的时候意识到自己的知识不是很牢固,有待加强,并且指针方面的运用能力比较差。
课程设计使我们通过解决一个实际问题,巩固和加深所学课程,提高了我们分析和编写程序的能力,为我们以后的学习提供了很好的帮助,更为毕业设计和毕业以后从事计算机方面的工作奠定了基础。
通过两周多的编程,我们对已学的专业知识有了比较深刻的认识,同时在查找资料或和其他同学交流的过程中,发现了一些问题,所以在设计的时候,遇到了很多困难。
在对所学的有限知识的理解和掌握下,在查找资料以及大家共同努力学习和讨论后终于把课题做完。
但因为对专业知识没有很深的认识,所以其中难免有一些是错误的或者是不合理的,希望老师多指教。
附件一:
设计进度
6月1日
类的模块和基本思路的构划,具有初步的函数结构、类的结构、和程序的总体运行结构。
6月4日
对前一次的构想进行初步的函数构造、类的的创建等。
6月8日
对函数和类中存在的问题进行改善
6月12日
将初步形成的函数和类连接在一个CPP文件中,进行第一次程序的测试,并对程序在测试的过程中产生的错误进行更正。
6月15日
对整个系统进行第二次测试,更改错误,改善程序的繁琐性,将程序简化。
6月17日
最后一次对系统进行测试,将系统进行美化,最终完成此次课程设计——图书管理系统。
附件二:
源代码
#include
#include
#include
#include
#include
usingnamespacestd;
classBus_infor{
intNo;
staticintBus_No;
charstart[20];
charend[20];
intBus_order;
intall_tickted;
inttickted;
intHour_start,Minute_start,Hour_end,Minute_end;
intHour;intMinute;
public:
Bus_infor*next;
Bus_infor();
~Bus_infor();
intGet_no();
intGet_all_tickted();
intGet_tickted();
intGet_bus_order();
char*Get_start();
char*Get_end();
voidaddr();
voidOrder_tickt(intn);
voidUnorder_tickt(intn);
voidGetTime_start();
voidGetTime_end();
voidShowTime();
voidGetTime();
voidShow_infor();
voidinput()
{
cout<<"\t\t\t按提示输入:
"<cout<<"\t\t输入车次:
";
cin>>Bus_order;
cout<<"请输入车的额定座位数:
";
cin>>all_tickted;
GetTime_start();
GetTime_end();
addr();
chara;
cout<<"是否清空售票(y/n)?
"<>a;
if(a=='y')tickted=0;
}
voidinput(ifstream&is)
{
is>>Bus_order>>start>>end>>all_tickted>>tickted>>Hour_start>>Minute_start>>Hour_end>>Minute_end;
is.get();
}
voidoutput()
{cout<<"客车基本信息如下:
"<cout<<"车次:
"<<<"始发站:
"<<<"终点站:
"<<<"额定人数:
"<<<"已售票"<<<"始发时间"<"<"<}
voidoutput(ofstream&os)
{
os<<<<<<<<<<}
};
intBus_infor:
:
Bus_No=1;
voidBus_infor:
:
GetTime_start(){
intNewH=0,NewM=0;
cout<<"请输入始发时间:
"<cin>>NewH>>NewM;
Hour_start=NewH;
Minute_start=NewM;
}
voidBus_infor:
:
GetTime_end(){
intNewH=0,NewM=0;
cout<<"请输入到站时间:
"<cin>>NewH>>NewM;
Hour_end=NewH;
Minute_end=NewM;
}
voidBus_infor:
:
GetTime(){
if(Minute_end>=Minute_start){Minute=(Minute_end-Minute_start);Hour=(Hour_end-Hour_start);}
else{Minute=(Minute_end-Minute_start+60);Hour=(Hour_end-Hour_start-1);}
}
voidBus_infor:
:
ShowTime(){
cout<"<cout<"<cout<"<}
Bus_infor:
:
Bus_infor(){
No=Bus_No++;
tickted=0;
}
Bus_infor:
:
~Bus_infor(){Bus_No--;}
//settheaddr
voidBus_infor:
:
addr(){
cout<<"请输入起始站与终点站:
"<chara[20];charb[20];
cin>>a;cin>>b;
strcpy(start,a);strcpy(end,b);
}
//Getthestartaddr
char*Bus_infor:
:
Get_start(){
returnstart;
}
//Gettheendaddr
char*Bus_infor:
:
Get_end(){
returnend;
}
//Gettheno
intBus_infor:
:
Get_no(){
returnNo;
}
intBus_infor:
:
Get_all_tickted(){
returnall_tickted;
}
intBus_infor:
:
Get_tickted(){
returntickted;
}
intBus_infor:
:
Get_bus_order(){
returnBus_order;
}
//orderthetickt
voidBus_infor:
:
Order_tickt(intn){
tickted=tickted+n;
}
voidBus_infor:
:
Unorder_tickt(intn){
tickted=tickted-n;
};
classBus_link{
public:
Bus_link(){head=newBus_infor;head->next=NULL;key=0;}
//~Bus_link(){deletehead;}
voidinput();
voidmend();
voiddel();
intfind(Bus_infor**p,intnum,char*pn);
intfind1(Bus_infor**p,intnum,char*pn);
voidfound();
voidshow();
voidOrder();
voidUnorder();
voidsave();
voidbegin();
voidclear();
charmainmenu();
intgetkey(){returnkey;}
voidsetkey(intk){key=k;}
private:
Bus_infor*head;
intkey;
};
//录入函数
voidBus_link:
:
input()
{
Bus_infor*p,*p2=NULL;
p=head;
intn;
while(p->next)
p=p->next;
while(n)
{
p2=newBus_infor;
p2->input();
p->next=p2;
p2->next=NULL;
p=p->next;
Bus_link:
:
setkey
(1);
cout<<"\t\t\t按1继续,按0返回:
";
cin>>n;
}
}
//定票函数
voidBus_link:
:
Order(){
Bus_infor*p;
cout<<"确定购票(y/n)?
"<charX;cin>>X;
if(X=='y'){
intnum;
cout<<"\t\t\t输入车次号:
";
cin>>num;
if(!
find1(&p,num,"^"))
{
cout<<"\t\t找不到你要定票的车辆的内容!
"<return;
}
cout<<"输入要定的票数 ";
intn;cin>>n;
p=p->next;
if((p->Get_tickted()+n)<=p->Get_all_tickted())
p->Order_tickt(n);
elsecout<<"对不起,没有足够的票数。
"<}
elseif(X=='n')cout<<"谢谢使用"<elsecout<<"输入字符不确定"<Bus_link:
:
setkey
(1);
}
//退票函数
voidBus_link:
:
Unorder(){
Bus_infor*p;
cout<<"确定退票(y/n)?
"<charX;cin>>X;
if(X=='y'){
intnum;
cout<<"\t\t\t输入车次号:
";
cin>>num;
if(!
find1(&p,num,"^"))
{
cout<<"\t\t找不到你要定票的车辆的内容!
"<return;
}
cout<<"输入要退的票数 ";
intn;cin>>n;
p=p->next;
if((p->Get_tickted()-n)>=0)
p->Unorder_tickt(n);
elsecout<<"对不起,数据出错!
。
"<}
elseif(X=='n')cout<<"谢谢使用"<elsecout<<"输入字符不确定"<Bus_link:
:
setkey
(1);
}
//查找函数
voidBus_link:
:
found()
{
Bus_infor*p;
intnum=-1,n=9;
charname[20]="^";
do
{
cout<<"\t\t1:
按车次查找,2:
按终点站查找:
";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入车次:
";
cin>>num;
}
if(n==2)
{
cout<<"\t\t\t输入终点站:
";
cin>>name;
}
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要查找的内容!
"<return;
}
}
//子查找函数1
intBus_link:
:
find(Bus_infor**p1,intnum,char*pn)
{
Bus_infor*p;
p=head;
intt=0;
while(p->next)
{
(*p1)=p;
if((p->next)->Get_bus_order()==num||!
strcmp((p->next)->Get_end(),pn))
{(p->next)->output();t=1;}
p=p->next;
}
returnt;
}
//子查找函数2
intBus_link:
:
find1(Bus_infor**p1,intnum,char*pn)
{
Bus_infor*p;
p=head;
intt=0;
while(p->next)
{
(*p1)=p;
if((p->next)->Get_bus_order()==num||!
strcmp((p->next)->Get_end(),pn))
{return1;}
p=p->next;
}
return0;
}
//删除函数
voidBus_link:
:
del()
{
Bus_infor*p,*p2;
intnum;
cout<<"\t\t\t输入车次号:
";
cin>>num;
if(!
find(&p,num,"^"))
{
cout<<"\t\t找不到你要删除的内容!
"<return;
}
p2=p->next;
p->next=p2->next;
deletep2;
Bus_link:
:
setkey
(1);
}
//显示函数
voidBus_link:
:
show()
{
Bus_infor*p;
p=head;
while(p->next)
{
(p->next)->output();
p=p->next;
}
}
//修改函数
voidBus_link:
:
mend()
{
Bus_infor*p;
intnum=-1;
charname[20]="^";
cout<<"\t\t\t输入车次号:
";
cin>>num;
if(!
find1(&p,num,name))
{
cout<<"\t\t找不到你要修改的内容!
"<return;
}
(p->next)->output();
(p->next)->input();
Bus_link:
:
setkey
(1);
}
//保存函数
voidBus_link:
:
save()
{
Bus_infor*p;
p=head;
ofstreamos("bus.txt",ios:
:
out);
if(Bus_link:
:
getkey()==1)
{
while(p->next)
{
(p->next)->output(os);
p=p->next;
}
}
cout<<"\t\t\t文件已保存!
"<Bus_link:
:
setkey(0);
}
//初始化函数
voidBus_link:
:
begin()
{
Bus_infor*p,*p2;
p=head;
clear();
longt;
ifstreamis("bus.txt",ios:
:
in);
if(!
is)
{
ofstreamos("bus.txt",ios:
:
out);
os.close();
return;
}
intnum=-1;
while
(1)
{
num=-1;
t=is.tellg();
is>>num;
is.seekg(t);
if(num<0)
{
is.close();
return;
}
p2=newBus_infor;
p2->input(is);
p->next=p2;
p2->next=NULL;
p=p->next;
}
}
//清空函数
voidBus_link:
:
clear()
{
Bus_infor*p,*p2;
p=head->next;
while(p)
{
p2=p;
p=p->next;
deletep2;
}
}
//主选菜单函数
charBus_link:
:
mainmenu()
{
charn[6];
cout<<"\n\n ————欢迎使用车票管理系统———"<cout<<"---------------------------------------------------------"<<<"---------------------------------------------------------"<<<"---------------------------------------------------------"<<<"1.录入车票信息2.浏览车票信息"<<<"3.查询车票信息4.删除车票信息"<<<"5.修改车票信息6.定购车票信息"<<<"7.退还车票信息8.保存车票信息"<<<"0:
退出系统 "<<<"---------------------------------------------------------"<<<"---------------------------------------------------------"<<<"请选择功能按钮:
";
cin>>n;
returnn[0];
}
//主函数
intmain()
{
Bus_linkpp;
intk=1;
charn;
pp.begin();
while(k==1)
{
n=pp.mainmenu();//调用主菜单函数
switch(n)
{
case'1':
pp.input();break;//录入车票信息
case'2':
pp.show();break;//浏览车票信息
case'3':
pp.found();break;//查询车票信息
case'4':
pp.del();break;//删除车票信息
case'5':
pp.mend();break;//修改车票信息
case'6':
pp.Order();break;//保存车票信息
case'7':
pp.Unorder();break;//退还车票信息
case'8':
pp.save();break;//保存车票信息
case'0':
//退出系统
if(pp.getkey()==1)
{
cout<<"\t\t\t是否保存?
1:
保存0:
不保存:
";
cin>>k;
if(k==1)
pp.save();
}
pp.clear();
k=0;
break;
}
}
return0;
}