车票管理系统.docx

上传人:b****8 文档编号:24051819 上传时间:2023-05-23 格式:DOCX 页数:26 大小:22.56KB
下载 相关 举报
车票管理系统.docx_第1页
第1页 / 共26页
车票管理系统.docx_第2页
第2页 / 共26页
车票管理系统.docx_第3页
第3页 / 共26页
车票管理系统.docx_第4页
第4页 / 共26页
车票管理系统.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

车票管理系统.docx

《车票管理系统.docx》由会员分享,可在线阅读,更多相关《车票管理系统.docx(26页珍藏版)》请在冰豆网上搜索。

车票管理系统.docx

车票管理系统

/*车票管理系统*/

#include//数据流输入输出

#include//字符串操作

#include//文件输入输出

#include//时间库函数

#include//输入输出格式符

usingnamespacestd;//命名空间

classBus_infor//车辆信息类

{

protected:

intnum;//班次

stringstart;//起点站

stringend;//终点站

intall_tickted;//额定载量

inttickted;//已定票人数

intHour,Minute;//发车时间

floatGoHour;//行车时间

public:

Bus_infor*next;

voidinput();//录入函数

voidinput(ifstream&infile);//读取函数

voidoutput();//输出函数

voidoutput(ofstream&outfile);//写入函数

voidOrder_tickt(intn);//定票函数

voidUnorder_tickt(intn);//退票函数

voidGo_start();//获取发车时间函数

boolGo();//判断当前班次状况函数

intGet_all_tickted(){returnall_tickted;}//返回额定载量

intGet_tickted(){returntickted;}//返回已定票人数

intGet_bus_num(){returnnum;}//返回班次号

stringGet_end();//返回终点站的字符串

};

classBus_do//信息处理类

{

public:

Bus_do(){head=newBus_infor;head->next=NULL;g=0;}//带参数的构造函数

~Bus_do(){deletehead;}//析构函数

voidinput();//录入车票信息

voidmend();//修改车票信息

voiddel();//删除车票信息

Bus_infor*find(intnum);//查找函数

Bus_infor*find(stringgold);

voidfound();//查询车票信息

voidshow();//显示车票信息

voidOrder();//定购车票信息

voidUnorder();//退还车票信息

voidsave();//保存车票信息

voidbegin();//初始化车票信息

voidclear();//清除函数

voidabout();//关于车票信息

charmainmenu();//主菜单函数

voidsetg(intk){g=k;}//设置系统修改标志

intgetg(){returng;}//返回系统修改标志

boolland();//管理员登陆

voidselect(int);//选择功能

private:

intg;//系统修改标志

Bus_infor*head;

};

Bus_dod;

voidBus_do:

:

about()//系统说明

{

system("cls");//清屏

cout<

<<"──────────────────────────────"<

cout<<"使用说明:

"<

<<"\t1.请按照操作提示正确输入,以保证系统正常运行。

"<

<<"\t2.管理员登陆时,需输入密码。

"<

<<"\t3.车票信息保存于本程序目录下,可以参考。

"<

<<"\t4.如果密码输入错误三次则系统自动退出,防止他人乱改信息导致系统瘫痪。

"<

<<"\t5.录入信息后记得保存,系统不会自动保存。

"<

<<"\t6.本系统并非对所有的误输都有恰当的处理,还请按提示输入。

"<

<<"\t7.可以多次订票,班次也可以有多种。

"<

<<"\t8.作者水平不高,还请多提建议,以便日后改进。

"<

<<"──────────────────────────────"<

}

boolBus_do:

:

land()//管理员登录

{

Bus_dob;//定义处理类对象

b.about();//输出系统说明

strings;

inti=0;//计数变量

cout<<"请输入管理员密码:

"<

while

(1)

{

cin>>s;

if(s=="123456")//输入正确

returntrue;//返回正确

else//输错了

{

cout<<"输入密码错误,请重新输入:

";//输出提示信息

i++;//计数变量自加

if(i>=3)//连输三次错误

break;//跳出循环

}

}

cout<<"输入错误三次!

系统自动退出!

"<

system("pause");//显示暂停

returnfalse;//返回错误

}

voidBus_do:

:

begin()//文件初始化链表

{

Bus_infor*p,*p2;//定义两信息类指针

p=head;//p指向头结点

ifstreaminfile("bus.txt",ios:

:

in);//文件以输入方式打开

if(!

infile)//文件打开失败

{

ofstreamoutfile("bus.txt",ios:

:

out);//若无此文件文件以输出方式打开为了建立新文档

outfile.close();//关闭文件

return;//函数调用结束

}

while(!

infile.eof())

{

p2=newBus_infor;

p2->input(infile);

p->next=p2;

p2->next=NULL;

p=p->next;

}

infile.close();

p=head;

while(p->next)

{

p2=p;

p=p->next;

}

p2->next=NULL;

}

voidBus_do:

:

select(intk)

{

chars;

d.begin();

while(k)

{

system("cls");//清屏

s=d.mainmenu();//调用主菜单函数

switch(s)

{

case'1':

d.input();break;//录入车票信息

case'2':

d.show();break;//浏览车票信息

case'3':

d.found();break;//查询车票信息

case'4':

d.del();break;//删除车票信息

case'5':

d.mend();break;//修改车票信息

case'6':

d.Order();break;//保存车票信息

case'7':

d.Unorder();break;//退还车票信息

case'8':

d.save();break;//保存车票信息

case'9':

d.about();break;//关于车票系统

case'0':

return;//退出系统

}

cout<<"\n\t\t\t是否返回主菜单?

1┄是0┄不是:

";

cin>>k;

}

}

voidBus_infor:

:

input()//无参输入函数用于录入班次信息

{

cout<<"请输入班次:

";//设置班次

while

(1)

{

cin>>num;//输入班次

if(cin.fail())//判断输入的数据类型是否有错

{

cout<<"\n班次输入错误,请重新输入:

";

cin.clear();//清除错误状态

cin.get();//重输

}

elsebreak;//输入正确则跳出循环

}

cout<<"请输入车的额定座位数:

";//设置额定座位

while

(1)

{

cin>>all_tickted;//输入额定座位

if(cin.fail())//判断输入的数据类型是否有错

{

cout<<"\n座位数输入错误,请重新输入:

";

cin.clear();//清除错误状态

cin.get();//重输

}

elsebreak;//输入正确则跳出循环

}

Go_start();//调用始发时间函数设置始发时间

cout<<"请输入行车时间:

";//设置行车时间

while

(1)

{

cin>>GoHour;

if(cin.fail())//判断输入的数据类型是否有错

{

cout<<"\n行车时间输入错误,请重新输入:

";

cin.clear();

cin.get();

}

elsebreak;

}

cout<<"请输入起始站:

";//设置起始站

while

(1)

{

cin>>start;

if(cin.fail())//判断输入的数据类型是否有错

{

cout<<"\n起点输入错误,请重新输入:

";

cin.clear();

cin.get();

}

elsebreak;

}

cout<<"请输入终点站:

";//输入终点站

while

(1)

{

cin>>end;

if(cin.fail())//判断输入的数据类型是否有错

{

cout<<"\n终点站输入错误,请重新输入:

";

cin.clear();

cin.get();

}

elsebreak;

}

cout<<"请输入已售票数:

";//输入已售票数

while

(1)

{

cin>>tickted;

if(cin.fail()||tickted>all_tickted)

{

cout<<"\n已售票数输入错误,请重新输入:

";

cin.clear();

cin.get();

}

elsebreak;

}

}

voidBus_infor:

:

input(ifstream&infile)//带参录入函数向链表输入

{

infile>>num>>Hour>>Minute>>start>>end>>GoHour>>all_tickted>>tickted;

}

voidBus_infor:

:

output()

{

cout<

cout<

(2)<

"<

(2)<

cout<

if(!

Go())//调用Go函数判断汽车状态

cout<<"\t此班已出发"<

else

cout<<"\t此班未出发"<

}

voidBus_infor:

:

output(ofstream&outfile)//向文件输出信息

{

outfile<

<

<

<

<

<

<

<

<

}

voidBus_infor:

:

Go_start()//设置始发时间

{

cout<<"请输入始发时间(时分24h制):

";//输出提示信息

while

(1)

{

cin>>Hour>>Minute;

if(cin.fail())//判断输入的数据类型是否有错

{

cout<<"\n时间输入错误,请重新输入:

";

cin.clear();

cin.get();

}

elseif(Hour<0||Hour>24||Minute<0||Minute>60)

cout<<"\n时间格式出错,请重新输入:

";//判断时间格式是否出错,小时不能小于0大于24,分钟不能小于0大于60

else

break;

}

}

boolBus_infor:

:

Go()//判断汽车是否发出

{

structtm*local;//定义tm结构体指针

time_tt;//定义time_t类型指针

t=time(NULL);//初始化为空指针

local=localtime(&t);//获取当前系统时间,并赋值给local指针

if(local->tm_hourtm_hour==Hour&&local->tm_min<=Minute))returntrue;

else

returnfalse;//返回表示班次已出发

}

voidBus_infor:

:

Order_tickt(intn)//订票处理函数

{

tickted=tickted+n;//已定票数加上刚定票数

}

voidBus_infor:

:

Unorder_tickt(intn)//退票处理函数

{

tickted=tickted-n;//已定票数更改

}

stringBus_infor:

:

Get_end()//获取终点站

{

strings=end;

returns;//返回end

}

voidBus_do:

:

input()//向链表尾部录入车票信息

{

system("cls");//清屏

cout<<"当前车票销售信息:

"<

Bus_do:

:

show();//调用show函数显示当前车辆信息

Bus_infor*p1,*p2=NULL;//定义对象指针

p1=head;//将头指针赋给p1

intn=1;//定义循环控制变量

while(p1->next)//当头结点后有数据时执行循环,头结点为空也不会执行循环

p1=p1->next;

while(n){

p2=newBus_infor;

p2->input();

p1->next=p2;p2->next=NULL;

p1=p1->next;

Bus_do:

:

setg

(1);

cout<<"\t\t\t按1继续,按0返回:

";cin>>n;

if(!

cin)

throwstring("输入错误");

}

}

voidBus_do:

:

show()//显示车辆信息

{

system("cls");//清屏

cout<<"客车基本信息如下:

"<

<<"班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"<

Bus_infor*p;//定义车辆信息类对象指针

p=head;//指向链表头部,启用链表信息

while(p->next)//只要下一结点不为空则执行循环

{//此循环功能在于输出所有车辆信息

p=p->next;//P指向下一节点

p->output();//调用next所指对象的输出信息函数,头结点未存放数据只是初始化了next

}

}

voidBus_do:

:

found()//信息分类查找函数

{

system("cls");//清屏

intm,n;//定义辅助变量

stringgold;//定义字符串存放终点站

cout<<"\t\t1:

按班次查找,2:

按终点站查找:

";//输出提示信息

cin>>n;//输入选择

if(!

cin)

throwstring("输入错误");

if(n==1)//表示按班次查找

{

cout<<"\t\t\t输入班次:

";//输出提示信息

cin>>m;

if(!

cin)

throwstring("输入错误");

if(!

find(m))//调用find函数查找

{

cout<<"\t\t找不到你要查找的内容!

"<

return;//函数调用结束

}

return;//函数调用结束

}

if(n==2)//表示按终点站查找

{

cout<<"\t\t\t输入终点站:

";//输出提示信息

cin>>gold;//输入终点站

if(!

find(gold))//调用find函数,完成查找和输出

{

cout<<"\t\t找不到你要查找的内容!

"<

return;//函数调用结束

}

return;//函数调用结束

}

}

Bus_infor*Bus_do:

:

find(intnum)

{

system("cls");//清屏

Bus_infor*p;//定义辅助指针

p=head;//指向链表头结点

while(p->next)//当链表未至尾部时执行循环

{

if((p->next)->Get_bus_num()==num)//班次匹配上则输出所查到的车辆信息

{

cout<<"客车基本信息如下:

"<

<<"班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"<

(p->next)->output();//调用输出函数

returnp;//表示找到,返回的是目标结点的前一结点

}

p=p->next;//指向下一节点

}

returnNULL;

}

Bus_infor*Bus_do:

:

find(stringgold)

{

system("cls");//清屏

Bus_infor*p;//定义辅助指针

p=head;//指向链表头结点

while(p->next)//当链表未至尾部时执行循环

{

if((p->next)->Get_end()==gold)//班次匹配上则输出所查到的车辆信息

{

cout<<"客车基本信息如下:

"<

<<"班次发车时间起点站终点站行车时间额定载量已定票人数当前状况"<

(p->next)->output();//调用输出函数

returnp;//表示找到,返回的是目标结点的前一结点

}

p=p->next;//指向下一节点

}

returnNULL;

}

voidBus_do:

:

del()//删除车辆信息函数

{

system("cls");//清屏

Bus_infor*p1,*p2,*p3;//定义两对象指针用于链表操作

intm;

stringgold;//定义相应变量

cout<<"\t\t\t输入班次号:

";//输出提示信息

cin>>m;

if(!

cin)

throwstring("输入错误");

p1=find(m);//调用查找函数

if(!

p1)//判断函数返回值是否为NULL

{

cout<<"\t\t找不到你要删除的内容!

"<

return;//函数调用结束

}

cout<<"\n\t\t\t确定删除(y/n)?

";//显示将要删除数据信息供用户核对

chara;

cin>>a;//输入指示

if(a=='y'||a=='Y')

{//因为头结点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况

if((p1->next)->next==NULL)//目标结点为尾结点时

{

p2=p1->next;//p2指向目标结点

p1->next=NULL;//p1连接目标结点的next域重新赋值为空指针

deletep2;//释放目标空间

}

else

{//目标结点为中间节点时

p2=p1->next;//p2指向目标结点

p3=(p1->next)->next;//p3指向目标结点下一结点

p1->next=p3;//连接目标结点前后结点

deletep2;//释放目标结点

}

Bus_do:

:

setg

(1);//标记为修改

}

}

voidBus_do:

:

mend()//修改函数

{

system("cl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1