班车信息管理
一交通公司,班车系统的数据包括如下两部分:
①班车信息:班交及车号、最大载客数、起点、开车时间、终地点、到达终点站时间,单价;
② 乘客信息:车次及车号、身份证号码、姓名、性别、出生年月、座位号。
乘客订票的主要方式是:乘客提供起点、时间、终点、订票数等订票要求,根据事先保存的班数据决定乘客能否订票?只有全部满足了乘客的订票要求并且所订班次有足够的未订座位之后才能完成订票处理,并且修改该班次的未订座位数(每个班的未订座位数的初始值就是该班次的最大载客数);否则,订票失败,并且给出不能订票的原因。
功能要求 :
⑴ 增加班次记录。将新的次班记录增加到原有的次班数据中。在进行处理时必须检查所要增加的班次记录是否存在,如果已经存在,应给出提示信息后停止增加;
⑵ 班次取消。如果某班次的乘客数太少(已订票的少于本次班次最大载客数的10%),将取消该班次,但该班欠的记录仍然保存在原有的班数据中;
⑶ 班次查询。应该有以下几种基本的查询方式:按班次号、按起点和时间、按终地点,和时间;
⑷ 班次订票。按上述问题描述中的乘客订票方式完成班次订票处理。
⑸ 设计一个菜单,至少具有上述操作要求的基本功能。
/*************班车信息管理系统*********/
/***********头文件**************/
#include<iostream>
#include<time.h>
#include<windows.h>
#include <stdlib.h>
#include<stdio.h>
#include <fstream>
#include<iomanip>
#include<string.h>
/***************************************/
using namespace std; //使用名字空间std
#define uchar unsigned char
#define uint unsigned int
const int MAX=20; //最大班次容量(可修改 )
const int N=1000; //最大乘客容量(可修改 )
/***********子函数声明************/
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); //将乘客信息写入txt文件
void car_write_file(int i); //将班车信息写入txt文件
int car_read_file(); //将班车信息从txt文件读出
int pas_read_file(); //将乘客信息从txt文件读出
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; //最大车载容量
int ticket_num; //剩余票数
char starting[20]; //起点
struct time start_time; //开车时间
char destination[20]; //终点
float route_time; //行程时间
int price; //票价
}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 02");
welcome();
return 0;
}
void welcome()//主菜单界面
{
system("cls");
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;
ofstream writefile1;
writefile1.open("乘客信息.txt",ios::app);
writefile1.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 确认进入班次管理系统: "<<endl;
cout<<"请输入:";
cin>>t;
while(t=='1')
{
for(i=0;t=='1';i++)
{
cout<<"班车信息管理系统 : "<<endl;
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>按照班次号查询"<<endl;
cout<<"<2>按照起点查询"<<endl;
cout<<"<3>按照终点查询"<<endl;
cout<<"<4>按照时间查询"<<endl;
cout<<"输入其他序号则返回主菜单"<<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<<"班次号 "<<"发车时间 "<<"起点站 "<<"终点站 "<<"行程时间(分)"<<"最大载客量 "<<"剩余票数 "<<"票价"<<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<<"班次号 "<<"发车时间 "<<"起点站 "<<"终点站 "<<"行程时间(分)"<<"最大载客量 "<<"剩余票数 "<<"票价"<<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<<"班次号 "<<"发车时间 "<<"起点站 "<<"终点站 "<<"行程时间(分)"<<"最大载客量 "<<"剩余票数 "<<"票价"<<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<<"班次号 "<<"发车时间 "<<"起点站 "<<"终点站 "<<"行程时间(分)"<<"最大载客量 "<<"剩余票数 "<<"票价"<<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;
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;
cout<<"<1>增加订票量"<<endl;
cout<<"<2>减少订票量,(输入其他返回主菜单)"<<endl;
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");
ofstream writefile1;
writefile1.open("乘客信息.txt",ios::app);
writefile1.close;
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;
}
else
cout<<endl;
}
bool time_compare(int i)//与系统时间比较,返回0表示时间已经过去
{
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)//将班次信息写入txt文件中
{
ofstream writefile;
if(i==0)
writefile.open("班次信息.txt",ios::out);
else
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();
}
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)//将乘客信息写入txt文件中
{
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;
cout<<" | |"<<endl;
cout<<" △△△△△△△△△△△△△△△△△△△△△△△△△△△△△△"<<endl;
Sleep(3000);
system("cls");
}
菜单首页
先输入序号4进入班车管理系统,否则其他操作无法实现
输入了几个班车信息后,回到主菜单选择序号5,浏览班车信息
接着在主菜单中进入序号为1的订票系统进行订票
在此页面定完票后会出现一个个人信息的录入框,在里面输入个人信息
接着我们可以回到主菜单,再次选择序号5浏览班次信息,可以发现车票数发生了改变
如若需要修改车票的数量,可以选择进入序号为3的车票修改系统
如若要根据我们自己的需求来查询班车信息,可以选择序号为2的查询系统
如若已经完成所有操作,可以选择退出系统结束本次操作