要求设计车票管理系统供管理员和顾客使用。主窗口包含1.管理员登录2.普通顾客登录3.退出,请输入选择。管理员窗口包含1.增加车次2.查看所有车次信息3.车辆信息查询4.注销车次5.退出,请输入选择。普通顾客窗口包含1.车辆信息查询2.购买车票3.退票4.退出,请输入选择:
1条回答 默认 最新
- CSDN专家-黄老师 2021-07-05 12:21关注
#include<iostream> #include<fstream> #include<string> #include<iomanip> #include<time.h> using namespace std; class Bus_infor{ private: static int Bus_no; char start[20],end[20]; int Bus_order,all_tickted; int tickted; int Hour_start,Minute_start; float Gohour; public: Bus_infor(); ~Bus_infor(); Bus_infor *next; void input(); void input(ifstream &is);//读取函数 void output(); void output(ofstream &os);//写入函数 void Order_tickt(int n); void Unorder_tickt(int n); void Gettime_start(); bool Gettime(); inline int Get_all_tickted(){return all_tickted;} int Get_tickted(){return tickted;} int Get_bus_order(){return Bus_order;} string Get_end()const; }; int Bus_infor::Bus_no=1; Bus_infor::Bus_infor(){ Bus_no++; tickted=0; } Bus_infor::~Bus_infor(){ Bus_no--; } void Bus_infor::input(){ cout<<"\t\t\t请按提示输入:"<<endl; 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)?"; char a;cin>>a; if(a=='Y'||a=='y')tickted=0; } void Bus_infor::input(ifstream &is){ is>>Bus_order>>Hour_start>>Minute_start>>start>>end>>Gohour>>all_tickted>>tickted; is.get(); } void Bus_infor::output(){ cout<<" "<<Bus_order<<"\t"; if(Minute_start==0) { cout<<Hour_start<<":"<<Minute_start<<"0\t"; } else { cout<<Hour_start<<":"<<Minute_start<<"\t"; } cout<<start<<"\t"<<end<<"\t"<<Gohour<<"\t "<<all_tickted<<"\t "<<tickted; if(!Gettime()) cout<<"\t此班飞机已出发!"<<endl; else cout<<"\t 此班飞机未出发!"<<endl; } void Bus_infor::output(ofstream &os){ os<<setw(6)<<Bus_order<<setw(15)<<Hour_start <<setw(15)<<Minute_start<<setw(15)<<start <<setw(6)<<end<<setw(15)<<Gohour <<setw(15)<<all_tickted<<setw(15)<<tickted<<endl; } void Bus_infor::Gettime_start(){ cout<<"请输入始发时间(时分)"; while(1){ cin>>Hour_start>>Minute_start; if(cin.fail()){ cout<<"\n输入时间格式错误,请重新输入!"; cin.clear(); cin.get(); } else if(Hour_start<0||Hour_start>24||Minute_start<0||Minute_start>60) cout<<"\n输入时间格式出错,请重新输入:"; else break; } } bool Bus_infor::Gettime(){ struct tm *local; time_t t; t=time(NULL); local=localtime(&t);//获取当前系统时间 if((local->tm_hour<Hour_start)||(local->tm_hour==Hour_start&&local->tm_min<=Minute_start))return 1; else return 0; } void Bus_infor::Order_tickt(int n){ tickted+=n; } void Bus_infor::Unorder_tickt(int n){ tickted-=n; } string Bus_infor::Get_end()const{ string s=end; return s; } //====================另外一个类出来啦===================================================================== class Bus_link{ public: Bus_link(){head=new Bus_infor;head->next=NULL;key=0;} ~Bus_link(){delete head;} void input(); void mend();//修改车票信息 void del(); int find(Bus_infor **p,int num,char *pn);//查找函数 void found(); void show(); void Order(); void Unorder(); void save(); void begin(); void clear(); void about(); char mainmenu(); void setkey(int k){key=k;} int getkey(){return key;} private: Bus_infor *head; int key; int password; }; void Bus_link::input(){ if(password==1){ Bus_infor *p,*p2=NULL; p=head; int n=1; while(p->next) p=p->next; while(n){ p2=new Bus_infor; p2->input(); p->next=p2; p2->next=NULL; p=p->next; Bus_link::setkey(1); cout<<"\t\t请继续,按返回:"; cin>>n; if(!cin)throw string("输入数据错误"); } } else cout<<"\t\t对不起,游客不能录入车票信息"<<endl; } void Bus_link::show() { cout<<"客车基本信息如下:"<<endl <<"班次发车时间 起始站 终点站 行车时间 额定载量 已订票人数 当前状况"<<endl; Bus_infor *p; p=head; while(p->next){ (p->next)->output(); p=p->next; } } void Bus_link::found(){ Bus_infor *p; int num,n; char name[20]; do{ cout<<"\t\t1:按班次查询,2:按终点站查询:"; cin>>n; if(!cin)throw string("数据输入错误"); }while(n<1||n>2); if(n==1){ cout<<"\t\t\t输入班次:"; cin>>num; if(!cin)throw string("数据输入错误"); } if(n==2){ cout<<"\t\t\t输入终点站:"; cin>>name; if(!cin)throw string("数据输入错误"); } if(!find(&p,num,name)){ cout<<"\t\t找不到你呀查找的内容!"<<endl; return; } } int Bus_link::find(Bus_infor **p1,int num,char *pn){ Bus_infor *p; p=head; int t=0; while(p->next){ (*p1)=p; if((p->next)->Get_bus_order()==num||(p->next)->Get_end()==pn){ cout<<"客户基本信息如下:"<<endl <<"班次发车时间 起始站 终点站 行车时间 额定载量 已订票人数 当前状况"<<endl; (p->next)->output(); t=1; } p=p->next; } return t; } void Bus_link::del(){ if(password==1){ Bus_infor *p,*p2; int num;char name[20]; cout<<"\t\t输入班次号"; cin>>num; if(!cin)throw string("数据输入错误"); if(!find(&p,num,name)){ cout<<"\t\t找不到你要删除的内容!"<<endl; return; } cout<<"\n\t\t确定删除(Y/N)?"; char a;cin>>a; if(a=='Y'||a=='y'){ p2=p->next; p->next=p2->next; delete p2; Bus_link::setkey(1); } } else cout<<"\n\t对不起,游客不能删除车票信息"<<endl; } void Bus_link::mend() { if(password==1){ Bus_infor *p; int num; char name[20]; cout<<"\t\t\t输入班次号:"; cin>>num; if(!cin)throw string("数据输入错误!"); if(!find(&p,num,name)){ cout<<"\t\t找不到你要想修改的内容!"<<endl; return; } (p->next)->input(); Bus_link::setkey(1); } else cout<<"\n\t对不起,游客不能删除车票信息"<<endl; } void Bus_link::Order(){ if(password==1){ Bus_infor *p; cout<<"\n\t\t确定购票(Y/N)?"; char a;cin>>a; if(a=='y'||a=='Y'){ int num; cout<<"\n\t\t输入班次号:"; cin>>num; if(!cin)throw string("输入数据错误"); if(!find(&p,num,"^")){ cout<<"\n\t\t找不到你要订票的车辆信息!"<<endl;return; } p=p->next; if(!(p->Gettime())){ cout<<"\n\t\t你要订票的车辆已经出发"<<endl;return; } cout<<"\n\t\t输入要定的票数:"; int n;cin>>n; if(!cin)throw string("输入数据错误"); if((p->Get_tickted()+n)<=p->Get_all_tickted()) p->Order_tickt(n); else cout<<"\n\t\t对不起,没有足够的票数"<<endl; } else if(a=='n'||a=='N')cout<<"谢谢使用"<<endl; else cout<<"\n\t\t输入字符不确定"<<endl; Bus_link::setkey(1); } else cout<<"\n\t\t对不起,订购车票请在管理员处购买"<<endl; } void Bus_link::Unorder() { if(password==1){ Bus_infor *p; cout<<"\n\t\t确定退票(Y/N)?"; char X;cin>>X; if(X=='Y'||X=='y'){ int num; cout<<"\n\t\t输入班次号:"; cin>>num; if(!cin)throw string("数据输入错误"); if(!find(&p,num,"^")){ cout<<"\n\t\t找不到你要退票的车辆内容!"<<endl;return; } if(!(p->Gettime())){ cout<<"\n\t\t你要退票的车辆已经出发!"<<endl; return; } cout<<"\n\t\t输入要退的票数 "; int n;cin>>n; if(!cin)throw string("数据输入错误"); p=p->next; if((p->Get_tickted()-n)>=0)p->Unorder_tickt(n); else cout<<"\n\t\t对不起,数据出错!"<<endl; } else if(X=='n'||X=='N')cout<<"谢谢使用"<<endl; else cout<<"\n\t\t输入字符不确定"<<endl; Bus_link::setkey(1); } else cout<<"\n\t\t对不起,退还车票请在管理员处退还"<<endl; } void Bus_link::save(){ if(password==1){ Bus_infor *p; p=head; ofstream os("bus.txt",ios::out|ios::binary|ios::ate);//文件以输出方式打开 if(Bus_link::getkey()==1) { while(p->next){ (p->next)->output(os); p=p->next; } } cout<<"\t\t\t文件已保存"<<endl; Bus_link::setkey(0); } else cout<<"\n\t\t对不起,游客无法保存车票信息"<<endl; } void Bus_link::about() { cout<<endl<<"关于车票保管系统"<<endl<<"-------------"<<endl; cout<<"使用说明:"<<endl; cout<<"\t1.请按照提示输入正确格式,以保证系统正常运行;"<<endl; } void Bus_link::begin(){ password=0; Bus_infor *p,*p2; p=head; clear(); long t; ifstream is("bus.txt",ios::in|ios::binary|ios::ate);//以输入方式打开 if(!is){ ofstream os("bus.txt",ios::out);//以输出方式打开 os.close() ;//关闭文件 return; } int num=-1; while(1){ num=-1; t=is.tellg();//记录当前位置 is>>num; is.seekg(t);//移动到当前位置 if(num<0){ is.close(); return ; } p2=new Bus_infor; p2->input(is);//输入is对象内容 p->next=p2; p2->next=NULL; p=p->next; } } void Bus_link::clear(){ Bus_infor *p,*p2; p=head->next; while(p){ p2=p; p=p->next; delete p2; } } char Bus_link::mainmenu(){ struct tm *local; char s1[128]; time_t t; t=time(NULL); local=localtime(&t); strftime(s1,128,"%Y-%m-%d %H:%M",local);//按照指定的格式,把 时间保存在s1字符串中 string s;//定义字符串,来判断功能选择是否输入错误 cout<<"\n\n--------欢迎使用车票管理系统----------"<<endl<<endl; cout<<"==========================================="<<endl; cout<<"||========================================||"<<endl; cout<<"||1.录入车票信息 2.浏览车票信息 ||"<<endl; cout<<"||3.查询车票信息 4.删除车票信息 ||"<<endl; cout<<"||5.修改车票信息 6.订购车票信息 ||"<<endl; cout<<"||7.退还车票信息 8.保存车票信息 ||"<<endl; cout<<"||9.关于车票系统 0.退出系统 ||"<<endl; cout<<"||========================================||"<<endl; cout<<"============================================"<<endl; cout<<"\t\t\t\t "<<s1<<endl<<endl; while(password==0){ cout<<"\t\t请选择用户(1。管理员;2.游客):"; int n;cin>>n; if(!cin)throw string("数据输入错误"); if(n==1){ cout<<"\n\t\t请输入管理员密码:"; int m;cin>>m; if(m==123456){ password=1; cout<<endl; break; } else cout<<"\n\t\t密码输入不正确\n"<<endl; } else { password=2;//游客身份 break; } } cout<<" 请选择功能按钮:"; while(true){ cin>>s; if(s.length()!=1||s[0]<'0'||s[0]>'9')//s.length()返回字符串长度 cout<<"输入错误,请重新选择功能按钮:"; else break; } return s[0]; } //============================主函数来啦================ int main(){ Bus_link pp; int k=1; string s; pp.begin(); try{ while(k==1){ system("cls"); s=pp.mainmenu(); switch(s[0]){ case '1':pp.input();break;//录入车票信息 case '2':pp.show();break;//浏览车票信息 case '3':pp.found();break;// 查询车票信息 case '4':pp.del();break;//删除车票信息 case '5':pp.mend();break;//修改车票信息 case '6':pp.Order();break;//订购车票 case '7':pp.Unorder();break;//退还车票信息 case '8':pp.save();break;//保存 车票信息 case '9':pp.about();break;//关于车票系统 case '0':k=0;break; } if(k==1){ cout<<"\n\t\t\t是否返回主菜单? (1.是 2.不是):"; cin>>k; if(!cin)throw string ("数据输入错误"); } if(k==0){ if(pp.getkey()==1){ cout<<"\t\t\t是否保存?(1.保存 0.不保存):"; cin>>k; if(!cin)throw string("数据输入错误"); if(k==1) pp.save(); pp.clear(); k=0; } } } } catch(string s){ cout<<s<<"为保护系统不崩溃,将自退出系统!"<<endl; system("pause"); } return 0; }
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 5无用
悬赏问题
- ¥66 换电脑后应用程序报错
- ¥50 array数据同步问题
- ¥15 pic16F877a单片机的外部触发中断程序仿真失效
- ¥15 Matlab插值拟合差分微分规划图论
- ¥15 keil5 target not created
- ¥15 C/C++数据与算法请教
- ¥15 怎么找志同道合的伙伴
- ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
- ¥20 关于#Mathcad符号引擎无响应#的问题,如何解决?
- ¥50 爬虫预算充足,跪巨佬