C++班车管理系统课程设计

来源:互联网 发布:windows哪个版本好用 编辑:程序博客网 时间:2024/04/28 23:20
C++课程设计:班车信息管理

  一交通公司,班车系统的数据包括如下两部分:

①班车信息:班交及车号、最大载客数、起点、开车时间、终地点、到达终点站时间,单价;

② 乘客信息:车次及车号、身份证号码、姓名、性别、出生年月、座位号。

乘客订票的主要方式是:乘客提供起点、时间、终点、订票数等订票要求,根据事先保存的班数据决定乘客能否订票?只有全部满足了乘客的订票要求并且所订班次有足够的未订座位之后才能完成订票处理,并且修改该班次的未订座位数(每个班的未订座位数的初始值就是该班次的最大载客数);否则,订票失败,并且给出不能订票的原因。

功能要求 :

⑴ 增加班次记录。将新的次班记录增加到原有的次班数据中。在进行处理时必须检查所要增加的班次记录是否存在,如果已经存在,应给出提示信息后停止增加;

⑵ 班次取消。如果某班次的乘客数太少(已订票的少于本次班次最大载客数的10%),将取消该班次,但该班欠的记录仍然保存在原有的班数据中;

⑶ 班次查询。应该有以下几种基本的查询方式:按班次号、按起点和时间、按终地点,和时间;

⑷ 班次订票。按上述问题描述中的乘客订票方式完成班次订票处理。

⑸ 设计一个菜单,至少具有上述操作要求的基本功能。

 

 

 

/**************************************************燊哥水陆空通客运订票系统***************************************************//***********头文件**************/#include<iostream>#include<ctime>#include<windows.h>#include <cstdlib> #include<cstdio>#include <fstream>#include<iomanip>#include<cstring>using namespace std;                 #define uint unsigned int1#define uchar unsigned charconst int MAX=24;                     const int N=1100;                    void choose();                      void welcome();                     void pas_booking();                 void sta_increase();                void pas_change();                  void ticket_increase();             void ticket_decrease();             void sta_scan();                    void pas_search();                  void code_search();                 void start_search();                void end_search();                  void time_search();                 void quit();                        void pas_write_file(int j);         void car_write_file(int i);         int car_read_file();                int pas_read_file();                void display_car(int i);            bool time_compare(int i);           char temp,i,x,j;int m,y,num,k;struct time{int hour;int min;};struct date{int year;int month;int day;};struct bus{char bus_code[4];    int  max_num;        char starting[20];    char destination[20];    struct time start_time;   float route_time;      int price;               int  ticket_num;     }bus[MAX],BUS[MAX];struct passager{char bus_code[4];    char ID_num[20];     char name[20];       char sex[4];            struct date birthday;int  seat_num;       }passager[N],p1;int main(){    system("Color f0");welcome();    return 0;}void welcome(){system("cls");cout<<endl;cout<<"================>▂< >0< >^< >ω< >﹏< >△< >▽<================"<<endl;cout<<"【***************************************************************************】"<<endl;cout<<"【                                                                           】"<<endl;       cout<<"【                         欢迎光临燊哥水陆空通客运站                        】"<<endl;       cout<<"【                                                                           】"<<endl;      cout<<"【                          您的满意是我们前进的动力                         】"<<endl;      cout<<"=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+="<<endl;cout<<"||  尊敬的旅客朋友:下面是本站的订票指导,请按照正确的流程订票,谢谢!!!!!!   ||"<<endl;cout<<"||+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++||"<<endl;cout<<"||                                                                           ||"<<endl;cout<<"||                          ①  旅客班次订票请按“1”                        ||"<<endl;cout<<"||                          ②  旅客班次查询请按“2”                        ||"<<endl;cout<<"||                          ③  旅客增减车票请按“3”                        ||"<<endl;cout<<"||                          ④  车站添加班次请按“4”                        ||"<<endl;cout<<"||                          ⑤  车站班次浏览请按“5”                        ||"<<endl;cout<<"||                          ⑥  退出订票系统请按“6”                        ||"<<endl;cout<<"||                                                                           ||"<<endl;cout<<"==============================================================================="<<endl;cout<<endl;  ofstream writefile;writefile.open("班次信息.txt",ios::app);writefile.close;    choose();}void choose(){cout<<"请根据您需要的操作输入序号:";cin>>temp;    switch(temp){    case '1':   system("cls");pas_booking();        case '2':    pas_search();    case '3':            pas_change();case '4':sta_increase();case '5':sta_scan();case '6':quit();exit(1);default:        cout<<"对不起!您所输入的序号错误,请重新输入!"<<endl;choose();}}void sta_increase(){system("cls");char t,a;m=car_read_file();    cout<<"是否进入添加班车功能?(是则输入‘1’,输入其他返回):";cin>>t;while(t=='1'){for(i=0;t=='1';i++){cout<<"请输入您需要添加班车的班次(大写字母+数字):";cin>>BUS[i].bus_code;for(k=0;k<m;k++){if(strcmp(bus[k].bus_code,BUS[i].bus_code)==0){cout<<"该班次车号已存在!请重新输入:";cin>>BUS[i].bus_code;}}cout<<"请输入该班次的最大载客量:";cin>>BUS[i].max_num;BUS[i].ticket_num=BUS[i].max_num;cout<<"请分别输入发车班次的具体时间";cin>>BUS[i].start_time.hour;cin>>BUS[i].start_time.min;cout<<"请输入班次起点:";cin>>BUS[i].starting;cout<<"请输入班次终点:";cin>>BUS[i].destination;cout<<"请输入行程时间(分钟):";cin>>BUS[i].route_time;cout<<"请输入班次票价(元):";cin>>BUS[i].price;cout<<"确定要保存?——保存:Y/y。输入其他不保存==";cin>>a;if(a=='Y'||a=='y'){              ofstream writefile;writefile.open("班次信息.txt",ios::app);writefile<<BUS[i].bus_code<<"  "<<BUS[i].max_num<<"  "<<BUS[i].ticket_num<<"   ";writefile<<BUS[i].start_time.hour<<" "<<BUS[i].start_time.min<<"  "<<BUS[i].starting<<"  ";writefile<<BUS[i].destination<<"  "<<BUS[i].route_time<<"  "<<BUS[i].price<<endl;writefile.close();}else{i--;} cout<<"是否继续添加车程?——是:输入“1”。输入其他返回主菜单";cin>>t;system("cls");}}    system("cls");    welcome();} void pas_search(){system("cls");cout<<"按“1”班次号查询"<<"按“2”起点查询"<<"按“3”终点查询"<<"按“4”时间查询"<<"输入其他返回主菜单"<<endl;cout<<"请输入:";cin>>temp; switch(temp){    case '1':code_search();        case '2':start_search();case '3':            end_search();case '4':time_search();default: system("cls");             welcome(); }}void code_search(){system("cls");char code[4];bool flag=0;m=car_read_file();cout<<"输入您所要查询的班次号:";cin>>code;for(i=0;i<m;i++){if(strcmp(code,bus[i].bus_code)==0){flag=1;cout<<"班次号 "<<"\t发车时间 "<<"\t起点站  "<<"\t终点站  "<<"\t行程时间(分)"<<"\t最大载客量  "<<"\t剩余票数  "<<"\t票价"<<endl;display_car(i);cout<<endl;}}if(flag==0){cout<<"对不起,您所查询的班次不存在"<<endl;}cout<<"是否继续查询?是:输入“1”;输入其他则不查询:";cin>>x;if(x=='1'){pas_search();}pas_booking();}void start_search(){system("cls");char start[20];bool flag=0;m=car_read_file();cout<<"输入您所要查询的起点地址:";cin>>start;for(i=0;i<m;i++){if(strcmp(start,bus[i].starting)==0){flag=1;cout<<"班次号 "<<"\t发车时间 "<<"\t起点站  "<<"\t终点站  "<<"\t行程时间(分)"<<"\t最大载客量  "<<"\t剩余票数  "<<"\t票价"<<endl;display_car(i);cout<<endl;}}if(flag==0){cout<<"对不起,您所查询的班次不存在"<<endl;}cout<<"是否继续查询?是:输入“1”;输入其他则不查询:";cin>>x;if(x=='1'){pas_search();}pas_booking();}void end_search(){system("cls");char end[20];bool flag=0;m=car_read_file();cout<<"输入您所要查询的终点地址:";cin>>end;for(i=0;i<m;i++){if(strcmp(end,bus[i].destination)==0){flag=1;cout<<"班次号 "<<"\t发车时间 "<<"\t起点站  "<<"\t终点站  "<<"\t行程时间(分)"<<"\t最大载客量  "<<"\t剩余票数  "<<"\t票价"<<endl;display_car(i);cout<<endl;}}if(flag==0){cout<<"对不起,您所查询的班次不存在"<<endl;}cout<<"是否继续查询?是:输入“1”;输入其他则不查询:";cin>>x;if(x=='1'){pas_search();}pas_booking();}void time_search(){system("cls");int hour1;int min1;bool flag=0;m=car_read_file();cout<<"输入您所要查询班次的时间(时,分):";cin>>hour1>>min1;for(i=0;i<m;i++){if((hour1==bus[i].start_time.hour)&&(min1==bus[i].start_time.min)){flag=1;cout<<"班次号 "<<"\t发车时间 "<<"\t起点站  "<<"\t终点站  "<<"\t行程时间(分)"<<"\t最大载客量  "<<"\t剩余票数  "<<"\t票价"<<endl;display_car(i);cout<<endl;}}if(flag==0){cout<<"对不起,您所查询的班次不存在"<<endl;}cout<<"是否继续查询?是:输入“1”;输入其他则不查询:";cin>>x;if(x=='1'){pas_search();}pas_booking();}void pas_booking(){cout<<"进入订票功能?(是则输入“1”,输入其他返回主菜单):";cin>>x;while(x=='1'){char start[20],end[20];struct time starttime;int num;bool flag=0;m=car_read_file();cout<<"按照要求输入订票信息:"<<endl;cout<<"请输入所订车票的起点站:";cin>>start;cout<<"请输入终点站:";cin>>end;cout<<"请输入开车时间(时,分):";cin>>starttime.hour;cin>>starttime.min;cout<<"请输入所需订购的票数:";cin>>num;for(i=0;i<m;i++){if((strcmp(start,bus[i].starting)==0)&&(strcmp(end,bus[i].destination)==0)){if((starttime.hour==bus[i].start_time.hour)&&(starttime.min==bus[i].start_time.min)){if(num<=bus[i].ticket_num){flag=1;char n;if(!time_compare(i)){system("cls");cout<<"抱歉,该车已发出,无法订票!"<<endl;Sleep(2000);system("cls");pas_booking();}cout<<"恭喜你,存在您所要购买的车票,是否进行订票?是:输入“1”,输出其他则不订票:";cin>>n;if(n=='1'){system("cls");cout<<"请按照要求输入您的个人信息:"<<endl;cout<<"请输入您的身份证号:";cin>>p1.ID_num;cout<<"请输入您的姓名:";cin>>p1.name;cout<<"请输入您的性别:";cin>>p1.sex;cout<<"请输入您的出生日期(年,月,日):";cin>>p1.birthday.year>>p1.birthday.month>>p1.birthday.day;p1.seat_num=num;cout<<"确定订票?(是则输入“1”,输入其他则不订票):"<<endl;cin>>n;if(n=='1'){strcpy(p1.bus_code,bus[i].bus_code);int money;bus[i].ticket_num-=num;money=p1.seat_num*bus[i].price;ofstream writefile1;                                writefile1.open("乘客信息.txt",ios::app);                                writefile1<<p1.bus_code<<"  "<<p1.ID_num<<"  "<<p1.name<<"  "<<p1.sex<<"  "<<p1.birthday.year<<" "<<p1.birthday.month<<" "<<p1.birthday.day<<" "<<p1.seat_num<<endl;writefile1.close();cout<<"您的订票成功!"<<endl;cout<<"车票信息:"<<endl;cout<<"班次号   开车时间    购票数(张)  单价(元)  总计(元)"<<endl;cout<<p1.bus_code<<"\t  "<<starttime.hour<<":"<<starttime.min<<"\t\t"<<p1.seat_num<<"\t    "<<bus[i].price<<"\t    "<<money<<endl;cout<<"温馨提示:请乘客提前15分钟侯车!"<<endl<<endl;for(i=0;i<m;i++){car_write_file(i);}}}}}}}if(flag==0){cout<<"对不起,没有符合您要求的车票!您可以通过查询功能了解车站班车信息。"<<endl;}cout<<"确定需要继续订票?(确定则输入“1”,输入其他退出订票):";cin>>x;system("cls");}welcome();}void pas_change(){system("cls");cout<<"是否需要改变已订车票的数量?(是:输入“1”;输入其他则返回主菜单):";cin>>x;bool flag=0;while(x=='1'){char ID[20],code1[4];m=pas_read_file();y=car_read_file();cout<<"请输入您购票时所用的身份证号码:";cin>>ID;cout<<"请输入您的班车车号:";cin>>code1;for(int k=0;k<m;k++){if((strcmp(ID,passager[k].ID_num)==0)&&(strcmp(code1,passager[k].bus_code)==0)){flag=1;cout<<"请确认您的个人信息?"<<endl;cout<<"班车号\t身份证号\t 姓名\t性别  出生日期\t订票数量"<<endl;cout<<passager[k].bus_code<<"\t"<<passager[k].ID_num<<"\t"<<passager[k].name<<"   "<<passager[k].sex<<"\t"<<passager[k].birthday.year<<"/";        cout<<passager[k].birthday.month<<'/'<<passager[k].birthday.day<<"\t"<<passager[k].seat_num;for(i=0;strcmp(bus[i].bus_code,passager[k].bus_code)!=0;i++);if(!time_compare(i)){ if(bus[i].max_num>(bus[i].max_num-bus[i].ticket_num)*10) { cout<<"(班车已取消)"; } else {    cout<<"(班车已发出)"; } Sleep(3000);pas_change();}cout<<endl<<"请输入您所要的操作!"<<endl;cout<<"<1>增加订票量;<2>减少订票量;(输入其他返回主菜单):";cin>>temp;switch(temp){case '1':ticket_increase();case '2':ticket_decrease();default:system("cls");welcome();}}}if(flag==0){cout<<"找不到您所订的票,请确认您的身份证号码!"<<endl;}cout<<"是否需要继续修改票数?是:“1”,输入其他返回主菜单:";cin>>x;system("cls");}system("cls");welcome();}void ticket_increase(){int num;cout<<endl<<"输入您所增加的车票量:";cin>>num;while(num>bus[i].ticket_num){cout<<"您输入的数量多于本车所剩票数!请重新输入!"<<endl;cin>>num;}cout<<"确定增加票?(是则输入“1”;输入其他则取消退票):";cin>>x;while(x=='1'){passager[k].seat_num+=num;bus[i].ticket_num-=num;for(i=0;i<m;i++){pas_write_file(i);}for(i=0;i<y;i++){car_write_file(i);}cout<<"增加车票成功!"<<endl;cout<<"等待5秒钟返回主菜单。。。";Sleep(5000);}system("cls");pas_change();}void ticket_decrease(){int num;cout<<endl<<"输入您所要退的车票量:";cin>>num;while(num>passager[k].seat_num){cout<<"您输入的数量多于您所订的票数!请重新输入!"<<endl;cin>>num;}cout<<"确定要退票?是:输入“1”;输入其他则取消退票:";cin>>x;if(x=='1'){passager[k].seat_num-=num;bus[i].ticket_num+=num;if(passager[k].seat_num==0){for(int n=1;n<=m-k;n++){passager[k+n-1]=passager[k+n];}m--;}for(i=0;i<m;i++){pas_write_file(i);}for(i=0;i<y;i++){car_write_file(i);}cout<<"退票成功!"<<endl;}system("cls");pas_change();}void sta_scan(){ system("cls"); y=pas_read_file();     m=car_read_file();  cout<<"班次号 "<<"发车时间 "<<"起点站  "<<"终点站\t  "<<"行程时间(分)"<<"最大载客量  "<<"剩余票数  "<<"票价"<<endl; for(i=0;i<m;i++) {display_car(i); } cout<<endl; cout<<"输入任意数退出:"; cin>>x;system("cls"); welcome();}void display_car(int i){cout<<bus[i].bus_code<<"\t"<<bus[i].start_time.hour<<":"<<bus[i].start_time.min<<"\t";cout<<bus[i].starting<<"\t"<<bus[i].destination<<"    "<<bus[i].route_time<<"\t     ";    cout<<bus[i].max_num<<"\t          "<<bus[i].ticket_num<<"\t    "<<bus[i].price;if(!time_compare(i)){ if(bus[i].max_num>(bus[i].max_num-bus[i].ticket_num)*10) { cout<<"(班次取消)"<<endl; } else cout<<"   (已发车)"<<endl;}elsecout<<endl;}bool time_compare(int i){        time_t ti;struct tm *now;ti=time(NULL);now=localtime(&ti);if((now->tm_hour==bus[i].start_time.hour&&now->tm_min>=bus[i].start_time.min)||(now->tm_hour>bus[i].start_time.hour)){return 0;}return 1;}void car_write_file(int i){ofstream writefile;if(i==0)writefile.open("班次信息.txt",ios::out);elsewritefile.open("班次信息.txt",ios::app);writefile<<bus[i].bus_code<<"  "<<bus[i].max_num<<"  "<<bus[i].ticket_num<<"   ";writefile<<bus[i].start_time.hour<<" "<<bus[i].start_time.min<<"  "<<bus[i].starting<<"  ";writefile<<bus[i].destination<<"  "<<bus[i].route_time<<"  "<<bus[i].price<<endl;writefile.close();}int car_read_file(){int i1;ifstream readfile;readfile.open("班次信息.txt",ios::in);for(i1=0;!readfile.eof();i1++){readfile>>bus[i1].bus_code>>bus[i1].max_num>>bus[i1].ticket_num>>bus[i1].start_time.hour;readfile>>bus[i1].start_time.min>>bus[i1].starting>>bus[i1].destination>>bus[i1].route_time;readfile>>bus[i1].price;}readfile.close();return i1-1;}int pas_read_file(){int i1;ifstream readfile;readfile.open("乘客信息.txt",ios::in);for(i1=0;!readfile.eof();i1++){readfile>>passager[i1].bus_code>>passager[i1].ID_num>>passager[i1].name>>passager[i1].sex>>passager[i1].birthday.year>>passager[i1].birthday.month;readfile>>passager[i1].birthday.day>>passager[i1].seat_num;}readfile.close();return i1-1;}void pas_write_file(int j){      ofstream writefile1;  if(j==0)      writefile1.open("乘客信息.txt",ios::out);  else  writefile1.open("乘客信息.txt",ios::app);  writefile1<<passager[j].bus_code<<"  "<<passager[j].ID_num<<"  "<<passager[j].name<<"  "<<passager[j].sex<<"  "<<passager[j].birthday.year<<" "<<passager[j].birthday.month<<" "<<passager[j].birthday.day<<" "<<passager[j].seat_num<<endl;  writefile1.close();}void quit(){system("cls");cout<<endl;cout<<"           ————————————————————————————————————————"<<endl;cout<<"           |                     ********谢谢您搭乘本次客车*********                      |"<<endl;    cout<<"           |          **********您的满意是我们前进的动力,欢迎下次乘车**********          |"<<endl;cout<<"      ————————————————————————————————————————"<<endl;Sleep(3000);system("cls");}


 


 

 

这就是整个课程设计,因为最近考试周,事情比较多,加上能力有限,只能到这里了,不足的地方就请明哥见谅吧。

0 0