综合程序设计

班车信息管理

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

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

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

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

功能要求 :

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

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

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

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

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

 

 

/*****班车信息管理系统*****/
#include<iostream> 
#include<windows.h>  
#include <stdlib.h>
#include<time.h>   
#include<stdio.h>  
#include <fstream>  
#include<iomanip>  
#include<string.h> 
#include<cstdlib>
using namespace std;


void zjbc();        //增加班次函数
bool bcqx(int);        //班次取消函数
void bccx();        //班次查询函数
void bcdp();        //班次订票函数
void bccx_bus_num();  //班次号查询子函数
void bccx_start();    //起点和开车时间查询子函数
void bccx_desti();    //终点和开车时间查询子函数
bool time_compare(int);//时间比较函数




struct bus               //班车信息  
{  
    char bus_num[10];    //班交车号  
    int  max_num;        //最大载客数  
    int  shengyu;        //剩余票数  
    char starting[20];   //起点  
    int s_time_hour; //开车时间
int s_time_min;
    char desti[20];      //终点  
    int d_time_hour; //到达终点站时间
int d_time_min;
    int price;           //单价 
}bus[100],busm[100];  
struct pa          //旅客信息  
{  
    char bus_num[10];    //班交车号  
    char ID_num[20];     //旅客身份证号  
    char name[20];       //旅客姓名  
    char sex[4];         //旅客性别  
    char birthday[10];   //旅客出生日期  
    int  seat_num;       //座位号 
      
}pa[1000]={"","","","","",0};


int i,j=0;


int main()        //主函数
{


h: cout<<"欢迎进入班车信息管理系统!"<<endl
<<"请按提示操作:"<<endl
<<"注意:开车前五分钟停止售票!!"<<endl
<<"1、增加班次记录"<<endl
<<"2、班次查询"<<endl
<<"3、班次订票"<<endl
<<"4、退出系统"<<endl
<<"请选择您需要的功能操作:";
f: int a;
cin>>a;
switch(a)
{
case 1:
zjbc();
goto h;
break;
case 2:
bccx();
goto h;
break;
case 3:
system("cls");
bcdp();
goto h;
break;
case 4:
system("cls");
cout<<"谢谢使用!"<<endl;
break;
default:
cout<<"输入有误,重新输入:";
goto f;
}
return 0;
}


void zjbc()    //增加班次函数
{
system("cls");
l: ifstream ifile;
ifile.open("d:\\班次信息.txt");
for(int i1=0;!ifile.fail();i1++)  
    {
char p1,p2;
ifile>>bus[i1].bus_num>>bus[i1].max_num
>>bus[i1].shengyu>>bus[i1].starting
>>bus[i1].s_time_hour>>p1>>bus[i1].s_time_min
>>bus[i1].desti >>bus[i1].d_time_hour>>p2
>>bus[i1].d_time_min>>bus[i1].price ;
}
ifile.close();
i=i1;
cout<<"请输入班交车号:";
cin>>busm[i].bus_num ;
if(i!=0)
{
for(int k=0;k<=i-1;k++)
{
if(strcmp(bus[k].bus_num,busm[i].bus_num )==0)
{
cout<<bus[k].bus_num<<"班次已存在!请重新输入班交车号:";
cin>>busm[i].bus_num;
}
}
}
cout<<"请输入最大载客数:";
cin>>busm[i].max_num;
cout<<"请输入剩余票数:";
cin>>busm[i].shengyu ;
cout<<"请输入起点:";
cin>>busm[i].starting ;
cout<<"请输入开车时间(时、分):";
cin>>busm[i].s_time_hour;
cin>>busm[i].s_time_min;
cout<<"请输入终点:";
cin>>busm[i].desti ;
cout<<"请输入到达终点站时间(时、分):";
cin>>busm[i].d_time_hour;
cin>>busm[i].d_time_min;
cout<<"请输入单价:";
cin>>busm[i].price ;
cout<<"确定增加此班次?(确定按1;放弃按其它键):";
char b;
cin>>b;
if(b=='1')
{
ofstream ofile;
ofile.open("d:\\班次信息.txt",ios::out | ios::app);
ofile<<busm[i].bus_num <<' '<<busm[i].max_num <<' '<<busm[i].shengyu<<' ';
ofile<<busm[i].starting<<' '<<setfill('0')<<setw(2)<<busm[i].s_time_hour<<":"
<<setfill('0')<<setw(2)<<busm[i].s_time_min;
ofile<<' '<<busm[i].desti<<' '<<setfill('0')<<setw(2)<<busm[i].d_time_hour
<<":"<<setfill('0')<<setw(2)<<busm[i].d_time_min
<<' '<<busm[i].price <<endl;
ofile.close();
}
cout<<"是否继续增加班次?(是按1,按其它键返回主菜单):";
char c;
cin>>c;
if(c=='1')
goto l;
system("cls");
}


bool bcqx(int i)   //班次取消函数,返回0表示取消班次
{
ifstream ifile;
ifile.open("d:\\班次信息.txt");
for(int i1=0;!ifile.fail();i1++)  
    {
char p1,p2;
ifile>>bus[i1].bus_num>>bus[i1].max_num
>>bus[i1].shengyu>>bus[i1].starting
>>bus[i1].s_time_hour>>p1>>bus[i1].s_time_min
>>bus[i1].desti >>bus[i1].d_time_hour>>p2
>>bus[i1].d_time_min>>bus[i1].price ;
}
ifile.close();
time_t ti;
struct tm *now;
ti=time(NULL);
now=localtime(&ti);
if((now->tm_hour==bus[i].s_time_hour &&now->tm_min-5>=bus[i].s_time_min )
||(now->tm_hour>bus[i].s_time_hour ))
if(bus[i1].max_num*0.1>bus[i1].max_num-bus[i1].shengyu)
return 0;
return 1;
}


void bccx()  //班次查询函数
{
g: system("cls");
cout<<"您可以采用以下方式查询:"<<endl;
cout<<"1、按班次号查询;"<<endl;
cout<<"2、按起点和开车时间查询;"<<endl;
cout<<"3、按终点和开车时间查询;"<<endl;
cout<<"请选择查询方式(按其它数字返回主菜单):";
int a;
cin>>a;
switch(a)
{
case 1:
bccx_bus_num();
goto g;
break;
case 2:
bccx_start();
goto g;
break;
case 3:
bccx_desti();
goto g;
break;
default:
system("cls");
}


}


void bccx_bus_num()   //班次号查询子函数
{
system("cls");
ifstream ifile;
ifile.open("d:\\班次信息.txt");
for(int i1=0;!ifile.fail();i1++)  
    {
char p1,p2;
ifile>>bus[i1].bus_num>>bus[i1].max_num
>>bus[i1].shengyu>>bus[i1].starting
>>bus[i1].s_time_hour>>p1>>bus[i1].s_time_min
>>bus[i1].desti >>bus[i1].d_time_hour>>p2
>>bus[i1].d_time_min>>bus[i1].price ;
}
ifile.close();
r: cout<<"请输入要查询的班次号:";
char d[10];
bool t=0;
cin>>d;
for(int k=0;k<=i1-1;k++)
{
if(strcmp(bus[k].bus_num,d)==0)
{
t=1;
cout<<"班次"<<'\t'<<"最大载客数"<<'\t'<<"剩余票数"
<<'\t'<<"起点"<<'\t'<<"开车时间"<<'\t'<<"终点"<<'\t'
<<"到达终点站时间"<<'\t'<<"单价(元)"<<endl;
cout<<bus[k].bus_num<<'\t'<<bus[k].max_num
<<"\t\t"<<bus[k].shengyu<<"\t\t"<<bus[k].starting
<<'\t'<<setfill('0')<<setw(2)<<bus[k].s_time_hour<<":"
<<setfill('0')<<setw(2)<<bus[k].s_time_min ;
cout<<"\t\t"<<bus[k].desti<<'\t'<<setfill('0')<<setw(2)
<<bus[k].d_time_hour<<":"<<setfill('0')<<setw(2)
<<bus[k].d_time_min<<"\t\t"<<bus[k].price <<endl;
}
}
if(t==0)
cout<<"无信息"<<endl;
cout<<"继续查询?(是按1,否按其它键):";
char w;
cin>>w;
if(w=='1')
goto r;
bcdp();
}
void bccx_start()   //起点和开车时间查询子函数
{
system("cls");
ifstream ifile;
ifile.open("d:\\班次信息.txt");
for(int i1=0;!ifile.fail();i1++)  
    {
char p1,p2;
ifile>>bus[i1].bus_num>>bus[i1].max_num
>>bus[i1].shengyu>>bus[i1].starting
>>bus[i1].s_time_hour>>p1>>bus[i1].s_time_min
>>bus[i1].desti >>bus[i1].d_time_hour>>p2
>>bus[i1].d_time_min>>bus[i1].price ;
}
ifile.close();
c: cout<<"请输入起点:";
char s[20];
cin>>s;
cout<<"请输入开车时间:";
int t_h,t_m;
cin>>t_h;cin>>t_m;
bool m=0;
for(int k=0;k<=i1-1;k++)
{
if((strcmp(bus[k].starting,s)==0)&&(bus[k].s_time_hour==t_h)&&(bus[k].s_time_min==t_m))
{
m=1;
cout<<"班次"<<'\t'<<"最大载客数"<<'\t'<<"剩余票数"
<<'\t'<<"起点"<<'\t'<<"开车时间"<<"终点"<<'\t'
<<"到达终点站时间"<<'\t'<<"单价(元)"<<endl;
cout<<bus[k].bus_num<<'\t'<<bus[k].max_num
<<"\t\t"<<bus[k].shengyu<<"\t\t"<<bus[k].starting
<<'\t'<<setfill('0')<<setw(2)<<setfill('0')<<setw(2)
<<bus[k].s_time_hour<<":"<<setfill('0')<<setw(2)<<bus[k].s_time_min ;
cout<<"\t\t"<<bus[k].desti<<'\t'<<setfill('0')<<setw(2)<<bus[k].d_time_hour<<":"
<<setfill('0')<<setw(2)<<bus[k].d_time_min<<"\t\t"<<bus[k].price <<endl;
}
}
if(m==0)
cout<<"无信息"<<endl;
cout<<"继续查询?(是按1,否按其它):";
char w;
cin>>w;
if(w=='1')
goto c;
bcdp();
}
void bccx_desti()   //终点和开车时间查询子函数
{
system("cls");
ifstream ifile;
ifile.open("d:\\班次信息.txt");
for(int i1=0;!ifile.fail();i1++)  
    {
char p1,p2;
ifile>>bus[i1].bus_num>>bus[i1].max_num
>>bus[i1].shengyu>>bus[i1].starting
>>bus[i1].s_time_hour>>p1>>bus[i1].s_time_min
>>bus[i1].desti >>bus[i1].d_time_hour>>p2
>>bus[i1].d_time_min>>bus[i1].price ;
}
ifile.close();
c: cout<<"请输入终点:";
char s[20];
cin>>s;
cout<<"请输入开车时间:";
int t_h,t_m;
cin>>t_h;cin>>t_m;
bool m=0;
for(int k=0;k<=i1-1;k++)
{
if((strcmp(bus[k].starting,s)==0)&&(bus[k].s_time_hour==t_h)&&(bus[k].s_time_min==t_m))
{
m=1;
cout<<"班次"<<'\t'<<"最大载客数"<<'\t'<<"剩余票数"
<<'\t'<<"起点"<<'\t'<<"开车时间"<<"终点"<<'\t'
<<"到达终点站时间"<<'\t'<<"单价(元)"<<endl;
cout<<bus[k].bus_num<<'\t'<<bus[k].max_num
<<"\t\t"<<bus[k].shengyu<<"\t\t"<<bus[k].starting
<<'\t'<<setfill('0')<<setw(2)<<bus[k].s_time_hour<<":"
<<setfill('0')<<setw(2)<<bus[k].s_time_min ;
cout<<"\t\t"<<bus[k].desti<<'\t'<<setfill('0')<<setw(2)<<bus[k].d_time_hour<<":"
<<setfill('0')<<setw(2)<<bus[k].d_time_min<<"\t\t"<<bus[k].price <<endl;
}
}
if(m==0)
cout<<"无信息"<<endl;
cout<<"继续查询?(是按1,否按其他):";
char w;
cin>>w;
if(w=='1')
goto c;
bcdp();

}








void bcdp()  //班次订票函数
{
e:cout<<"是否进入订票功能?(是按1,输入其他返回主菜单):";
  char x;
  cin>>x;
  while(x=='1')
  {
 char start[20],end[20];
 int t_h,t_m;
 int num;
 bool flag=0;
 ifstream ifile;
 ifile.open("d:\\班次信息.txt");
 for(int i1=0;!ifile.fail();i1++)
 {
 char p1,p2;
 ifile>>bus[i1].bus_num>>bus[i1].max_num
 >>bus[i1].shengyu>>bus[i1].starting
 >>bus[i1].s_time_hour>>p1>>bus[i1].s_time_min
 >>bus[i1].desti >>bus[i1].d_time_hour>>p2
 >>bus[i1].d_time_min>>bus[i1].price ;
 }
 ifile.close();
 cout<<"按照要求输入订票信息:"<<endl;
 cout<<"请输入起点:";
 cin>>start;
 cout<<"请输入终点:";
 cin>>end;
 cout<<"请输入开车时间(时,分):";
 cin>>t_h;
 cin>>t_m;
 cout<<"请输入所需订购的票数:";
 cin>>num;
 for(int k=0;k<=i1-1;k++)
 {
 if((strcmp(start,bus[k].starting)==0)&&(strcmp(end,bus[k].desti)==0))
 {
 if((t_h==bus[k].s_time_hour)&&(t_m==bus[k].s_time_min))
 {
 if(num<=bus[k].shengyu)
 {
 flag=1;
 char n;
 if(!bcqx(k))
 {
 system("cls");
 cout<<"该班次已取消!"<<endl;
 Sleep(2000);
 system("cls");
 goto e;
 }
 if(!time_compare(k))
 {
 system("cls");
 cout<<"售票时间已过,无法订票!"<<endl;
 Sleep(2000);
 system("cls");
 goto e;
 }
 cout<<"存在您要购买的车票,是否订票?是按1,输出其他则不订票:";
 cin>>n;
 if(n=='1')
 {
 system("cls");
 cout<<"请按照要求输入您的个人信息:"<<endl;
 cout<<"请输入您的身份证号:";
 cin>>pa[j].ID_num ;
 cout<<"请输入您的姓名:";
 cin>>pa[j].name ;
 cout<<"请输入您的性别:";
 cin>>pa[j].sex ;
 cout<<"请输入您的出生日期(年,月,日):";
 cin>>pa[j].birthday ;
 pa[j].seat_num+=num;
 cout<<"确定订票?(是按1,输入其他不订票):"<<endl;
 cin>>n;
 if(n=='1')
 {
 strcpy(pa[j].bus_num ,bus[k].bus_num );
 int money;
 bus[k].shengyu-=num;
 money=num*bus[k].price;
 cout<<"订票成功!"<<endl;
 cout<<"车票信息:"<<endl;
 cout<<"班次号   开车时间    购票数(张)  单价(元)  总计(元)"<<endl;
 cout<<pa[j].bus_num <<"\t  "<<bus[k].s_time_hour <<":"<<setfill('0')<<setw(2)<<bus[k].s_time_min <<"\t\t"
 <<pa[j].seat_num<<"\t    "<<bus[k].price<<"\t    "<<money<<endl;
 ofstream ofile;
 ofile.open("d:\\乘客信息.txt",ios::out | ios::app);
 ofile<<pa[j].bus_num <<"\t"<<pa[j].ID_num <<"\t"
 <<pa[j].name <<"\t"<<pa[j].sex <<"\t"
 <<pa[j].birthday<<"\t"<<pa[j].seat_num<<endl;
 ofile.close();
 j++;
 for(int q=0;q<i1-1;q++)
 {
 ofstream ofile;
 ofile.open("d:\\班次信息.txt",ios::out);
 ofile<<bus[q].bus_num <<'\t'<<bus[q].max_num <<'\t'<<bus[q].shengyu<<'\t';
 ofile<<bus[q].starting<<'\t'<<setfill('0')<<setw(2)<<bus[q].s_time_hour<<":"
 <<setfill('0')<<setw(2)<<bus[q].s_time_min;
 ofile<<'\t'<<bus[q].desti<<'\t'<<setfill('0')<<setw(2)<<bus[q].d_time_hour
 <<":"<<setfill('0')<<setw(2)<<bus[q].d_time_min
 <<'\t'<<bus[q].price <<endl;
 ofile.close();
 }
 }
 }
 }
 }
 }
 }
 if(flag==0)
 {
 cout<<"对不起,没有符合您要求的车票!"<<endl;
 }
 cout<<"确定需要继续订票?(确定则输入“1”,输入其他退出订票):";
 cin>>x;
 system("cls");
 }



bool time_compare(int i)//与系统时间比较,返回0表示时间已经过去
{
ifstream ifile;
ifile.open("d:\\班次信息.txt");
for(int i1=0;!ifile.fail();i1++)  
    {
char p1,p2;
ifile>>bus[i1].bus_num>>bus[i1].max_num
>>bus[i1].shengyu>>bus[i1].starting
>>bus[i1].s_time_hour>>p1>>bus[i1].s_time_min
>>bus[i1].desti >>bus[i1].d_time_hour>>p2
>>bus[i1].d_time_min>>bus[i1].price ;
}
ifile.close();
time_t ti;
struct tm *now;
ti=time(NULL);
now=localtime(&ti);
if((now->tm_hour==bus[i].s_time_hour &&now->tm_min-5>=bus[i].s_time_min )
||(now->tm_hour>bus[i].s_time_hour ))
{
return 0;
}
return 1;
}  
 

主菜单

增加班次界面

查询界面

定票界面

 

退出系统

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值