C++火车票课设.docx
《C++火车票课设.docx》由会员分享,可在线阅读,更多相关《C++火车票课设.docx(52页珍藏版)》请在冰豆网上搜索。
![C++火车票课设.docx](https://file1.bdocx.com/fileroot1/2023-1/3/0946d799-ea66-4f8a-b4cb-6fc5ce92a048/0946d799-ea66-4f8a-b4cb-6fc5ce92a0481.gif)
C++火车票课设
面向对象课程设计
火车票务管理系统
一.题目及要求.............................................................................................
2.需求分析
1.题目及要求
1.题目
火车票包括硬座硬卧和软卧,实现火车票信息的增加删除修改销售统计查询灯捻功能,程序需以菜单方式工作
2.要求
(1)源文件采用多文件的工程结构
(2)数据存储采用文件形式
(3)标准的C++输入输出
(4)功能完善,适当的注释
(5)关于文件的内容需要自学
2.需求分析
系统的要求如下:
需求描述:
1.系统功能
(1)火车信息录入。
包括车次、日期、级别起点、终点、开车时间、行车时间、票价额定载量已订票人数。
数据存入数据文件huoche.txt中。
(2)火车信息浏览
(3)火车信息查询。
按照车次查询
按终点查询
按起点查询
(4)删除火车票信息
(5)修改火车票信息
(6)订购火车票
(7)退还火车票
(8)保存火车票信息
(9)统计
按终点统计车次
按起点统计车次
2.系统主界面应有以下功能选项
录入火车时刻信息
火车信息浏览
查询火车时刻信息
删除火车票信息
修改火车票信息
订购火车票
退还火车票
保存火车票信息
统计火车车次
退出
3.概要设计
1./*头文件*/
#include
#include
#include
#include
#include
2.火车票信息录入类和函数的定义
classTrian_infor
{
intNo;//信息个数
staticintTrian_No;//车次
charjibie[20];//级别
charstart[20];//起点
charend[20];//终点
intdata;//日期
intTrian_order;//订票
intall_tickted;//额定载量
inttickted;//已订票人数
intHour_start,Minute_start,Hour_end,Minute_end;//开车时间(时分)行车时间(时分)
intHour;//时
intMinute;//分
intprice;//票价
public:
Trian_infor*next;
Trian_infor();
~Trian_infor();
intGet_no();
intGet_trian_order();
intGet_data();
intGet_price();
char*Get_jibie();
char*Get_start();
char*Get_end();
intGet_all_tickted();
intGet_tickted();
voidaddr();
voidOrder_tickt(intn);//订票
voidUnorder_tickt(intn);//退票
voidGetTime_start();
voidGetTime_end();
voidShowTime();
voidGetTime();
voidShow_infor();//信息浏览
3.火车票信息实现功能的类
classTrian_link//链表
{
public:
Trian_link(){head=newTrian_infor;head->next=NULL;key=0;}
voidinput();//录入
voidmend();//修改
voidsee();
voiddel();//删除
intfind(Trian_infor**p,intnum,char*pn);
intfind1(Trian_infor**p,intnum,char*pn);
voidfound();//查询
voidtongji();//统计
voidshow();//浏览
voidOrder();//订票
voidUnorder();//退票
voidsave();//保存信息
voidbegin();
voidclear();
charmainmenu();//菜单
intgetkey(){returnkey;}
voidsetkey(intk){key=k;}
private:
Trian_infor*head;
intkey;
};
4.详细设计
#include
#include
#include
#include
#include
usingnamespacestd;
classTrian_infor
{
intNo;//信息个数
staticintTrian_No;//车次
charjibie[20];//级别
charstart[20];//起点
charend[20];//终点
intdata;//日期
intTrian_order;//订票
intall_tickted;//额定载量
inttickted;//已订票人数
intHour_start,Minute_start,Hour_end,Minute_end;//开车时间(时分)行车时间(时分)
intHour;//时
intMinute;//分
intprice;//票价
public:
Trian_infor*next;
Trian_infor();
~Trian_infor();
intGet_no();
intGet_trian_order();
intGet_data();
intGet_price();
char*Get_jibie();
char*Get_start();
char*Get_end();
intGet_all_tickted();
intGet_tickted();
voidaddr();
voidOrder_tickt(intn);//订票
voidUnorder_tickt(intn);//退票
voidGetTime_start();
voidGetTime_end();
voidShowTime();
voidGetTime();
voidShow_infor();//信息浏览
voidinput()//信息输入
{
cout<<"按提示输入:
"<cout<<"输入车次:
";
cin>>Trian_order;
cout<<"输入日期:
";
cin>>data;
cout<<"请输入级别:
";
cin>>jibie;
cout<<"输入票价:
";
cin>>price;
GetTime_start();
GetTime_end();
addr();
cout<<"请输入车的额定载量:
";
cin>>all_tickted;
chara;
cout<<"是否清空售票(y/n)?
"<cin>>a;
if(a=='y')tickted=0;
}
voidinput(ifstream&is)
{
is>>Trian_order>>data>>jibie>>price>>Hour_start>>Minute_start>>Hour_end>>Minute_end>>start>>end>>all_tickted>>tickted;
is.get();
}
voidoutput()//信息的输出
{
cout<<"\t\t\t列车基本信息如下:
"<cout<<"车次:
"<<<"\t日期:
"<<<"\t级别:
"<<<"\t票价:
"<<<"\t发车时间:
"<"<<<"\t行车时间"<"<<<"\t起点站:
"<<<"\t终点站:
"<<<"\t额定载量"<"<}
voidoutput(ofstream&os)
{
os<<<<<<<<<<<<<}
};
intTrian_infor:
:
Trian_No=0;
voidTrian_infor:
:
GetTime_start()//开车时间的输入
{
intNewH=0,NewM=0;
cout<<"请输入开车时间:
"<cin>>NewH>>NewM;
Hour_start=NewH;
Minute_start=NewM;
}
voidTrian_infor:
:
GetTime_end()//行车时间的输入
{
intNewH=0,NewM=0;
cout<<"请输入行车时间:
"<cin>>NewH>>NewM;
Hour_end=NewH;
Minute_end=NewM;
}
voidTrian_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);}
}
voidTrian_infor:
:
ShowTime()//显示时间
{
cout<"<cout<"<cout<"<}
voidTrian_infor:
:
Show_infor()//显示火车信息
{
cout<cout<cout<cout<cout<"<cout<"<cout<"<cout<cout<cout<cout<}
Trian_infor:
:
Trian_infor()//火车信息的个数的加
{
No=Trian_No++;
tickted=0;
}
Trian_infor:
:
~Trian_infor()//火车信息的个数的减
{Trian_No--;}
voidTrian_infor:
:
addr()//输入起点和终点
{
cout<<"请输入起点站:
"<chara[20];
cin>>a;
strcpy(start,a);
cout<<"请输入终点站:
"<charb[20];
cin>>b;
strcpy(end,b);
}
intTrian_infor:
:
Get_no()//获得信息个数
{
returnNo;
}
intTrian_infor:
:
Get_trian_order()//获得订票信息
{
returnTrian_order;
}
intTrian_infor:
:
Get_data()//获得日期信息
{
returndata;
}
char*Trian_infor:
:
Get_jibie()//获得级别信息
{
returnjibie;
}
intTrian_infor:
:
Get_price()//获得票价信息
{
returnprice;
}
char*Trian_infor:
:
Get_start()//获得起点信息
{
returnstart;
}
char*Trian_infor:
:
Get_end()//获得终点信息
{
returnend;
}
intTrian_infor:
:
Get_all_tickted()//获得额定载量信息
{
returnall_tickted;
}
intTrian_infor:
:
Get_tickted()//获得已订票认数信息
{
returntickted;
}
voidTrian_infor:
:
Order_tickt(intn)//订票数
{
tickted=tickted+n;
}
voidTrian_infor:
:
Unorder_tickt(intn)//退票数
{
tickted=tickted-n;
};
classTrian_link//链表
{
public:
Trian_link(){head=newTrian_infor;head->next=NULL;key=0;}
voidinput();//录入
voidmend();//修改
voidsee();
voiddel();//删除
intfind(Trian_infor**p,intnum,char*pn);
intfind1(Trian_infor**p,intnum,char*pn);
voidfound();//查询
voidtongji();//统计
voidshow();//浏览
voidOrder();//订票
voidUnorder();//退票
voidsave();//保存信息
voidbegin();
voidclear();
charmainmenu();//菜单
intgetkey(){returnkey;}
voidsetkey(intk){key=k;}
private:
Trian_infor*head;
intkey;
};
voidTrian_link:
:
input()//链接输入
{
Trian_infor*p,*p2=NULL;
p=head;
intn=1;
while(p->next)
p=p->next;
while(n)
{
p2=newTrian_infor;
p2->input();
p->next=p2;
p2->next=NULL;
p=p->next;
Trian_link:
:
setkey
(1);
cout<<"\t\t\t按1继续,按0返回:
";
cin>>n;
}
}
voidTrian_link:
:
Order()//连接订票
{
Trian_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);
cout<<"谢谢使用"<elsecout<<"对不起,没有足够的票数。
"<}
elseif(X=='n')cout<<"谢谢使用"<elsecout<<"输入字符不确定"<Trian_link:
:
setkey
(1);
}
voidTrian_link:
:
Unorder()//链接退票
{
Trian_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<<"输入字符不确定"<Trian_link:
:
setkey
(1);
}
voidTrian_link:
:
found()//查询链接
{
Trian_infor*p;
intnum=-1,n=9;
charname1[20]="";
charname2[20]="";
do
{
cout<<"\t\t1:
按车次查找,2:
按起点点站查找,3:
按终点站查找:
";
cin>>n;
}while(n<1||n>3);
if(n==1)
{
cout<<"\t\t\t输入车次:
";
cin>>num;
}
if(n==2)
{
cout<<"\t\t\t输入起点站:
";
cin>>name1;
}
if(n==3)
{
cout<<"\t\t\t输入终点站:
";
cin>>name2;
}
if(!
find(&p,num,name1))
{
cout<<"\t\t找不到你要查找的内容!
"<return;
}
}
voidTrian_link:
:
tongji()//统计链接
{
Trian_infor*p;
intnum=-1,n=10;
charname[20]="^";
do
{
cout<<"\t\t1:
按起点统计车次数,2:
按终点统计车次数:
";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入起点站:
";
cin>>name;
}
if(n==2)
{
cout<<"\t\t\t输入终点站:
";
cin>>name;
}
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要查找的内容!
"<return;
}
}
intTrian_link:
:
find(Trian_infor**p1,intnum,char*pn)//查找车次起点终点
{
Trian_infor*p;
p=head;
intt=1;
while(p->next)
{
(*p1)=p;if((p->next)->Get_trian_order()==num||!
strcmp((p->next)->Get_start(),pn)||!
strcmp((p->next)->Get_end(),pn))
{
(p->next)->output();
t=1;
}
p=p->next;
}
returnt;
}
intTrian_link:
:
find1(Trian_infor**p1,intnum,char*pn)//查找车次起点终点
{
Trian_infor*p;
p=head;
intt=0;
while(p->next)
{
(*p1)=p;
if((p->next)->Get_trian_order()==num||!
strcmp((p->next)->Get_start(),pn)||!
strcmp((p->next)->Get_end(),pn))
{return1;}
p=p->next;
}
return0;
}
voidTrian_link:
:
del()//删除链接
{
Trian_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;
Trian_link:
:
setkey
(1);
}
voidTrian_link:
:
show()//浏览链接
{
Trian_infor*p;
p=head;
while(p->next)
{
(p->next)->output();
p=p->next;
}
}