c++课程设计车票管理系统.docx
《c++课程设计车票管理系统.docx》由会员分享,可在线阅读,更多相关《c++课程设计车票管理系统.docx(26页珍藏版)》请在冰点文库上搜索。
c++课程设计车票管理系统
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;
}
}
#include〈iostream>//数据流输入/输出
#include〈fstream>//文件输入/输出
#include#include//参数化输入/输出
#include〈time。
h>//时间库函数
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<<”"<〈Bus_order<〈”\t”;
if(Minute_start==0)//判断发车时的分钟时刻,若为分则在后面多显示个,以符合时间格式
{
cout<"〈〈Minute_start〈<"0\t";
}
else
{
cout〈"〈〈Minute_start<<”\t”;
}
cout<〈start〈〈"\t”〈〈end〈<”\t”〈〈GoHour〈<”\t”<〈all_tickted<<"\t”<if(!
GetTime())
cout<〈"\t此班已出发"<else
cout〈<"\t此班未出发"<}
voidBus_infor:
:
output(ofstream&os)
{
os〈〈setw(6)〈〈Bus_order//setw()设置输出宽度
〈<<〈setw(15)<〈start
〈〈〈setw(15)<〈〈setw(15)<<〈setw(15)<〈tickted
〈〈endl;
}
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<〈"客车基本信息如下:
”〈〈endl
<〈"班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"<〈endl;
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找不到你要修改的内容!
”<〈endl;
return;
}
(p-〉next)—>input();
Bus_link:
:
setkey
(1);
}
else
cout<<"\n\t\t对不起,游客不能修改车票信息”<〈endl;
}
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输入字符不确定"〈〈endl;
Bus_link:
:
setkey
(1);
}
else
cout〈〈”\n\t\t对不起,订购车票请在管理员处购买”〈〈endl;
}
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你要退票的车辆已出发!
”<〈endl;
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对不起,数据出错!
.”<〈endl;
}
elseif(X=='n’||X=='N')cout〈<”谢谢使用"〈〈endl;
elsecout<<”\n\t\t\t输入字符不确定"〈〈endl;
Bus_link:
:
setkey
(1);
}
else
cout<〈”\n\t\t对不起,退还车票请在管理员处退还”<〈endl;
}
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对不起,游客无法保存车票信息”〈〈endl;
}
voidBus_link:
:
about()
{
cout〈〈endl〈〈”关于车票管理系统”<cout〈〈”使用说明:
”〈〈endl
<〈”\t1。
请按照操作提示输入正确的格式,以保证系统正常运行;"<〈endl
〈<"\t2。
当使用管理员登陆时,需输入密码,可进行对系统的所有操作;”〈<<”\t3.当使用游客身份登陆时,无需输入密码,但只能浏览和查询车票信息;"<〈endl
〈<”\t4.车票信息用文本文档格式,保存在本程序文件夹目录下,可以直接打开查看。
"〈<〈”系统说明:
"〈〈endl
<〈"\t本系统为课程设计作品,可以简易的进行车票管理,欢迎提出意见和建议"<〈〈"\t漳州师范学院计算机科学与工程系09非师四班\t”〈〈endl<}
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
〈<"┌─────────────────────────┐”<〈endl
〈〈”│┌──────────────────────┐│"<〈