c课程设计车票管理系统.docx
《c课程设计车票管理系统.docx》由会员分享,可在线阅读,更多相关《c课程设计车票管理系统.docx(26页珍藏版)》请在冰点文库上搜索。
c课程设计车票管理系统
封面
作者:
PanHongliang
仅供个人学习
#include//数据流输入/输出
#include//文件输入/输出
#include//字符串操作
#include//参数化输入/输出
#include//时间库函数
usingnamespacestd。
//命名空间
classBus_infor
{
private:
staticintBus_No。
//静态数据成员,统计当前所有地Bus_infor对象地数目
charstart[20]。
//起点站
charend[20]。
//终点站
intBus_order。
//班次号
intall_tickted。
//额定载量
inttickted。
//已定票人数
intHour_start,Minute_start。
//发车时间
floatGoHour。
//行车时间
public:
Bus_infor()。
~Bus_infor()。
Bus_infor*next。
voidinput()。
//录入函数
voidinput(ifstream&is)。
//读取函数
voidoutput()。
//输出函数
voidoutput(ofstream&os)。
//写入函数
voidOrder_tickt(intn)。
//定票函数
voidUnorder_tickt(intn)。
//退票函数
voidGetTime_start()。
//获取发车时间函数
boolGetTime()。
//判断当前班次状况函数
intGet_all_tickted(){returnall_tickted。
}//内联函数,返回额定载量
intGet_tickted(){returntickted。
}//返回已定票人数
intGet_bus_order(){returnBus_order。
}//返回班次号
stringGet_end()const。
//返回终点站地字符串
}。
intBus_infor:
:
Bus_No=1。
Bus_infor:
:
Bus_infor()
{
Bus_No++。
tickted=0。
}
Bus_infor:
:
~Bus_infor()
{
Bus_No--。
}
voidBus_infor:
:
input()
{
cout<<"\t\t\t按提示输入:
"<cout<<"输入班次:
"。
while
(1)
{
cin>>Bus_order。
if(cin.fail())//判断输入地数据类型是否有错
{
cout<<"\n班次输入错误,请重新输入:
"。
cin.clear()。
cin.get()。
}
else
break。
}
cout<<"请输入车地额定座位数:
"。
while
(1)
{
cin>>all_tickted。
if(cin.fail())//判断输入地数据类型是否有错
{
cout<<"\n座位数输入错误,请重新输入:
"。
cin.clear()。
cin.get()。
}
else
break。
}
GetTime_start()。
cout<<"请输入行车时间:
"。
while
(1)
{
cin>>GoHour。
if(cin.fail())//判断输入地数据类型是否有错
{
cout<<"\n行车时间输入错误,请重新输入:
"。
cin.clear()。
cin.get()。
}
else
break。
}
cout<<"请输入起始站与终点站:
"。
cin>>start。
cin>>end。
cout<<"是否清空售票(y/n)?
"。
chara。
cin>>a。
if(a=='y'||a=='Y')tickted=0。
}
voidBus_infor:
:
input(ifstream&is)
{
is>>Bus_order>>Hour_start>>Minute_start>>start>>end>>GoHour>>all_tickted>>tickted。
is.get()。
}
voidBus_infor:
:
output()
{
cout<<""<if(Minute_start==0)//判断发车时地分钟时刻,若为分则在后面多显示个,以符合时间格式
{
cout<"<}
else
{
cout<"<}
cout<if(!
GetTime())
cout<<"\t此班已出发"<else
cout<<"\t此班未出发"<}
voidBus_infor:
:
output(ofstream&os)
{
os<<<<<<<<<}
voidBus_infor:
:
GetTime_start()
{
cout<<"请输入始发时间(时分):
"。
while
(1)
{
cin>>Hour_start>>Minute_start。
if(cin.fail())//判断输入地数据类型是否有错
{
cout<<"\n时间输入错误,请重新输入:
"。
cin.clear()。
cin.get()。
}
elseif(Hour_start<0||Hour_start>24||Minute_start<0||Minute_start>60)
cout<<"\n时间格式出错,请重新输入:
"。
////判断时间格式是否出错,小时不能小于大于,分钟不能小于大于
else
break。
}
}
boolBus_infor:
:
GetTime()
{
structtm*local。
time_tt。
t=time(NULL)。
local=localtime(&t)。
//获取当前系统时间
if(local->tm_hourtm_hour==Hour_start&&local->tm_min<=Minute_start))
return1。
//比较当前时间与发车时间,获得班次地当前状况,返回表示班次未出发
else
return0。
//返回表示班次已出发
}
voidBus_infor:
:
Order_tickt(intn)
{
tickted=tickted+n。
}
voidBus_infor:
:
Unorder_tickt(intn)
{
tickted=tickted-n。
}
stringBus_infor:
:
Get_end()const
{
strings=end。
returns。
}
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)。
//查找函数
voidfound()。
//查询车票信息
voidshow()。
//显示车票信息
voidOrder()。
//定购车票信息
voidUnorder()。
//退还车票信息
voidsave()。
//保存车票信息
voidbegin()。
//初始化车票信息
voidclear()。
//清除函数
voidabout()。
//关于车票信息
charmainmenu()。
//主菜单函数
voidsetkey(intk){key=k。
}//设置系统修改标志
intgetkey(){returnkey。
}//返回系统修改标志
private:
Bus_infor*head。
//链表指针
intkey。
//系统修改标志
intpassword。
//管理员登陆标志
}。
voidBus_link:
:
input()
{
if(password==1)
{
Bus_infor*p,*p2=NULL。
p=head。
intn=1。
//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按继续,按返回:
"。
cin>>n。
if(!
cin)
throwstring("数据输入错误")。
}
}
else
cout<<"\n\t\t对不起,游客不能录入车票信息"<}
voidBus_link:
:
show()
{
cout<<"客车基本信息如下:
"<<<"班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"<Bus_infor*p。
p=head。
while(p->next)
{
(p->next)->output()。
p=p->next。
}
}
voidBus_link:
:
found()
{
Bus_infor*p。
intnum,n。
charname[20]。
do
{
cout<<"\t\t1:
按班次查找,2:
按终点站查找:
"。
cin>>n。
if(!
cin)
throwstring("数据输入错误")。
}while(n<1||n>2)。
if(n==1)
{
cout<<"\t\t\t输入班次:
"。
cin>>num。
if(!
cin)
throwstring("数据输入错误")。
}
if(n==2)
{
cout<<"\t\t\t输入终点站:
"。
cin>>name。
}
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要查找地内容!
"<return。
}
}
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||(p->next)->Get_end()==pn)
{
cout<<"客车基本信息如下:
"<<<"班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"<(p->next)->output()。
t=1。
}
p=p->next。
}
returnt。
}
voidBus_link:
:
del()
{
if(password==1)
{
Bus_infor*p,*p2。
intnum。
charname[20]。
cout<<"\t\t\t输入班次号:
"。
cin>>num。
if(!
cin)
throwstring("数据输入错误")。
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要删除地内容!
"<return。
}
cout<<"\n\t\t\t确定删除(y/n)?
"。
chara。
cin>>a。
if(a=='y'||a=='Y')
{
p2=p->next。
p->next=p2->next。
deletep2。
Bus_link:
:
setkey
(1)。
}
}
else
cout<<"\n\t\t对不起,游客不能删除车票信息"<}
voidBus_link:
:
mend()
{
if(password==1)
{
Bus_infor*p。
intnum。
charname[20]。
cout<<"\t\t\t输入班次号:
"。
cin>>num。
if(!
cin)
throwstring("数据输入错误")。
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要修改地内容!
"<return。
}
(p->next)->input()。
Bus_link:
:
setkey
(1)。
}
else
cout<<"\n\t\t对不起,游客不能修改车票信息"<}
voidBus_link:
:
Order()
{
if(password==1)
{
Bus_infor*p。
cout<<"\n\t\t\t确定购票(y/n)?
"。
charX。
cin>>X。
if(X=='y'||X=='Y'){
intnum。
cout<<"\n\t\t\t输入班次号:
"。
cin>>num。
if(!
cin)
throwstring("数据输入错误")。
if(!
find(&p,num,"^"))
{
cout<<"\n\t\t找不到你要定票地车辆地内容!
"<return。
}
p=p->next。
if(!
(p->GetTime()))//判断要定票地车辆是否已经出发,若已经出发则不允许定票
{
cout<<"\n\t\t你要订票地车辆已出发!
"<return。
}
cout<<"\n\t\t\t输入要定地票数 "。
intn。
cin>>n。
if(!
cin)
throwstring("数据输入错误")。
if((p->Get_tickted()+n)<=p->Get_all_tickted())
p->Order_tickt(n)。
elsecout<<"\n\t\t对不起,没有足够地票数."<}
elseif(X=='n'||X=='N')cout<<"谢谢使用"<elsecout<<"\n\t\t\t输入字符不确定"<Bus_link:
:
setkey
(1)。
}
else
cout<<"\n\t\t对不起,订购车票请在管理员处购买"<}
voidBus_link:
:
Unorder()
{
if(password==1)
{
Bus_infor*p。
cout<<"\n\t\t\t确定退票(y/n)?
"。
charX。
cin>>X。
if(X=='y'||X=='Y'){
intnum。
cout<<"\n\t\t\t输入班次号:
"。
cin>>num。
if(!
cin)
throwstring("数据输入错误")。
if(!
find(&p,num,"^"))
{
cout<<"\n\t\t找不到你要退票地车辆地内容!
"<return。
}
if(!
(p->GetTime()))//判断要定票地车辆是否已经出发,若已经出发则不允许定票
{
cout<<"\n\t\t你要退票地车辆已出发!
"<return。
}
cout<<"\n\t\t\t输入要退地票数 "。
intn。
cin>>n。
if(!
cin)
throwstring("数据输入错误")。
p=p->next。
if((p->Get_tickted()-n)>=0)
p->Unorder_tickt(n)。
elsecout<<"\n\t\t\t对不起,数据出错!
."<}
elseif(X=='n'||X=='N')cout<<"谢谢使用"<elsecout<<"\n\t\t\t输入字符不确定"<Bus_link:
:
setkey
(1)。
}
else
cout<<"\n\t\t对不起,退还车票请在管理员处退还"<}
voidBus_link:
:
save()
{
if(password==1)
{
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)。
}
else
cout<<"\n\t\t对不起,游客无法保存车票信息"<}
voidBus_link:
:
about()
{
cout<cout<<"使用说明:
"<<<"\t1.请按照操作提示输入正确地格式,以保证系统正常运行。
"<<<"\t2.当使用管理员登陆时,需输入密码,可进行对系统地所有操作。
"<<<"\t3.当使用游客身份登陆时,无需输入密码,但只能浏览和查询车票信息。
"<<<"\t4.车票信息用文本文档格式,保存在本程序文件夹目录下,可以直接打开查看."<<<"系统说明:
"<<<"\t本系统为课程设计作品,可以简易地进行车票管理,欢迎提出意见和建议"<<<"\t内蒙古科技大学软件专业14届学生设计\t"<}
voidBus_link:
:
begin()
{
password=0。
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)。
//输入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()
{
structtm*local。
chars1[128]。
time_tt。
t=time(NULL)。
local=localtime(&t)。
strftime(s1,128,"%Y-%m-%d%H:
%M",local)。
//按照指定地格式,把时间保存在s1字符串里面
strings。
//定义字符串s,来判断功能选择是否输入错误
cout<<"\n\n欢迎使用车票管理系统"<cout<<"1.录入车