c课程设计车票管理系统.docx
《c课程设计车票管理系统.docx》由会员分享,可在线阅读,更多相关《c课程设计车票管理系统.docx(22页珍藏版)》请在冰点文库上搜索。
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