当前位置:文档之家› c++课程设计-车票管理系统

c++课程设计-车票管理系统

#include<iostream> //数据流输入/输出#include<fstream> //文件输入/输出#include<string> //字符串操作#include<iomanip> //参数化输入/输出#include<time.h> //时间库函数using namespace std; //命名空间class Bus_infor{private:static int Bus_No; //静态数据成员,统计当前所有的Bus_infor对象的数目char start[20]; //起点站char end[20]; //终点站int Bus_order; //班次号int 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(); //判断当前班次状况函数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();}elsebreak;}cout<<"请输入车的额定座位数: ";while(1){cin>>all_tickted;if (cin.fail()) //判断输入的数据类型是否有错{cout << "\n座位数输入错误,请重新输入:";cin.clear();cin.get();}elsebreak;}GetTime_start();cout<<"请输入行车时间:";while(1){cin>>GoHour;if (cin.fail()) //判断输入的数据类型是否有错{cout << "\n行车时间输入错误,请重新输入:";cin.clear();cin.get();}elsebreak;}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;elsecout<<"\t 此班未出发"<<endl;}void Bus_infor::output(ofstream & os){os<<setw(6)<<Bus_order //setw()设置输出宽度<<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时间格式出错,请重新输入:"; ////判断时间格式是否出错,小时不能小于大于,分钟不能小于大于elsebreak;}}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; //比较当前时间与发车时间,获得班次的当前状况,返回表示班次未出发elsereturn 0; //返回表示班次已出发}void Bus_infor::Order_tickt(int n){tickted=tickted+n;}void Bus_infor::Unorder_tickt(int n){tickted=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; //int n;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\t按继续,按返回: ";cin>>n;if(!cin)throw string("数据输入错误");}}elsecout<<"\n\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(!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\t输入班次号: ";cin>>num;if(!cin)throw string("数据输入错误");if( !find(&p,num,name) ){cout<<"\t\t找不到你要删除的内容!"<<endl;return;}cout<<"\n\t\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);}}elsecout<<"\n\t\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);}elsecout<<"\n\t\t对不起,游客不能修改车票信息"<<endl; }void Bus_link::Order(){if(password==1){Bus_infor *p;cout<<"\n\t\t\t确定购票(y/n)?";char X;cin>>X;if(X=='y'||X=='Y'){int num;cout<<"\n\t\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\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对不起,没有足够的票数。

相关主题