班次查询,退票,订票,终点站处会报错
源代码如下
#include<iostream>
#include<fstream>
#include<string.h>
#include<cstdio>
#include<conio.h>
#include<windows.h>
using namespace std;
const int MAX=999999; //使数组最大值可调
const int MIN=1;
struct time //时间结构体,为了与系统时间做比较.
{
int hour;
int minutes;
};
struct ticket //车票结构体,包含车次,时间结构体,起点,终点,行车时间,额定载客量,已订票人数
{
string Number;
struct time Setout;
string Qidian;
string Zhongdian;
string Lasttime;
int Fixnumber;
int Fixednumber;
ticket *Next;
}car[MIN];
class ticketman
{
private:
ticket *ticketHead;
public:
ticketman(){ticketHead=NULL;}
void banciluru(); //班次录入子函数
void liulanbancixinxi(); //浏览班次信息子函数
void shoupiao(); //售票子函数
void tuipiao(); //退票子函数
void chaxun(); //查询子函数
void Finalsearch();
void Numbersearch();
int loading();
};
//主函数
void ShowForm();
int main()
{
int sel;
ticketman ticketAdmin;
while (1)
{
system("cls");
ShowForm();
cin>>sel;
switch (sel)
{
case 1: ticketAdmin.banciluru();break;
case 2: ticketAdmin.liulanbancixinxi(); break;
case 3: ticketAdmin.shoupiao(); break;
case 4: ticketAdmin.tuipiao(); break;
case 5: ticketAdmin.chaxun(); break;
case 0: return 0;
}
cout<<endl;
fflush(stdin);
cout<<"按任意键返回主菜单:"<<endl;
getch();
}
}
void ShowForm()
{
cout<<" 欢迎使用火车订票系统 "<<endl;
cout<<" "<<endl;
cout<<" *******************************"<<endl;
cout<<" * (1) 录入火车信息 *"<<endl;
cout<<" * (2) 浏览火车信息 *"<<endl;
cout<<" * (3) 查询路线信息 *"<<endl;
cout<<" * (4) 售票 *"<<endl;
cout<<" * (5) 退票 *"<<endl;
cout<<" * (0) 退出程序 *"<<endl;
cout<<" *******************************"<<endl;
cout<<" "<<endl;
cout<<" 请输入数字进行选择:";
}
//班次录入子函数
void ticketman::banciluru()
{
string t="1";
ofstream outfile;
outfile.open("班次信息.txt",ios::app);
for(int i=0;t=="1";i++)
{
cout<<"请输入需要添加的火车班次:"<<endl;
cin>>car[i].Number;
cout<<"请输入此班次发车时间(格式:先输入小时,回车,再输入分钟):"<<endl;
cin>>car[i].Setout.hour;
cin>>car[i].Setout.minutes;
cout<<"请输入出发站:"<<endl;
cin>>car[i].Qidian;
cout<<"请输入终点站:"<<endl;
cin>>car[i].Zhongdian;
cout<<"请输入行车时间:"<<endl;
cin>>car[i].Lasttime;
cout<<"请输入额定载客量:"<<endl;
cin>>car[i].Fixnumber;
cout<<"请输入已订票人数:"<<endl;
cin>>car[i].Fixednumber;
outfile<<car[i].Number<<" "<<car[i].Setout.hour<<" "<<car[i].Setout.minutes<<" "<<car[i].Qidian<<" "<<car[i].Zhongdian<<" "<<car[i].Lasttime<<" "<<car[i].Fixnumber<<" "<<car[i].Fixednumber<<endl;
cout<<"是否继续录入?(是请输1,否请输任意键返回主菜单)"<<endl;
cin>>t;
outfile.close();
cout<<"输入回车键返回"<<endl;
}
//浏览班次子函数
void ticketman::liulanbancixinxi()
{
int c;
c=loading();
cout<<"班次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载客量"<<" "<<"已订票人数"<<endl;
for(int i=0;i<c;i++)
{
cout<<car[i].Number<<" "<<car[i].Setout.hour<<":"<<car[i].Setout.minutes<<" "<<car[i].Qidian<<" "<<car[i].Zhongdian<<" "<<car[i].Lasttime<<" "<<car[i].Fixnumber<<" "<<car[i].Fixednumber<<endl;
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
if((now-> tm_hour==car[i].Setout.hour&&now->tm_min>car[i].Setout.minutes)||(now->tm_hour>car[i].Setout.hour))
cout<<"此车已发出"<<endl;
}
cout<<"输入回车键返回"<<endl;
}
//车次查询子函数
void ticketman::chaxun()
void Numbersearch()
void Finalsearch()
{
string t;
cout<<"1.按班次查询"<<endl;
cout<<"2.按终点站查询"<<endl;
cout<<"请输入您想选择的查询法前的数字:"<<endl;
cin>>t;
if(t=="1")
Numbersearch();
if(t=="2")
Finalsearch();
if(t!="1"||t!="2")
{
cout<<"输入有误,请重新输入"<<endl;
chaxun();
}
};
//班次查询子函数
void ticketman::Numbersearch()
{
loading();
int SearchNumber;
cout<<"请输入您需要查找的班次号:"<<endl;
cin>>SearchNumber;
cout<<"班次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载客量"<<" "<<"已订票人数"<<endl;
cout<<car[SearchNumber-1].Number<<" "<<car[SearchNumber-1].Setout.hour<<":"<<car[SearchNumber-1].Setout.minutes<<" "<<car[SearchNumber-1].Qidian<<" "<<car[SearchNumber-1].Zhongdian<<" "<<car[SearchNumber-1].Lasttime<<" "<<car[SearchNumber-1].Fixnumber<<" "<<car[SearchNumber-1].Fixednumber<<endl;
cout<<"输入回车键返回"<<endl;
}
//终点站查询子函数
void ticketman::Finalsearch()
{
int R;
R=loading();
int i;
char Address[MAX];
cout<<"请输入终点站名称:"<<endl;
cin>>Address;
cout<<"班次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载客量"<<" "<<"已订票人数"<<endl;
for(i=0;i<R;i++)
{
if((strcmp(Address,car[i].Zhongdian))==0)
cout<<car[i].Number<<" "<<car[i].Setout.hour<<":"<<car[i].Setout.minutes<<" "<<car[i].Qidian<<" "<<car[i].Zhongdian<<" "<<car[i].Lasttime<<" "<<car[i].Fixnumber<<" "<<car[i].Fixednumber<<endl;
}
cout<<"输入回车键返回"<<endl;
}
//购买火车票子函数
void ticketman::shoupiao()
{
int R;
R=loading();
int i;
cout<<"请输入要订购的车票的班次:"<<endl;
cin>>i;
if(i<=0||i>R)
{
cout<<"对不起,今天没有这趟车,请明天再来,使用!"<<endl;
cout<<"输入回车键返回"<<endl;
}
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
if((now->tm_hour==car[i-1].Setout.hour&&now->tm_min<car[i-1].Setout.minutes)||(now->tm_hour<car[i-1].Setout.hour))
{
if(car[i-1].Fixednumber<car[i-1].Fixnumber)
{
(car[i-1].Fixednumber)++;
ofstream outfile;
outfile.open("班次信息.txt",ios::out);
for(i=0;i<R;i++)
{
outfile<<car[i].Number<<" "<<car[i].Setout.hour<<" "<<car[i].Setout.minutes<<" "<<car[i].Qidian<<" "<<car[i].Zhongdian<<" "<<car[i].Lasttime<<" "<<car[i].Fixnumber<<" "<<car[i].Fixednumber<<endl;
}
outfile.close();
cout<<"你的订票成功,请按时上车,使用!"<<endl;
}
else cout<<"对不起,今天的这趟车的票已卖完,请明天再来,合作"<<endl;
}
else cout<<"对不起,今天的这趟车已发出,请明天再来,合作"<<endl;
cout<<"输入回车键返回"<<endl;
}
//退订火车票子函数
void ticketman::tuipiao()
{
int R;
R=loading();
int i;
cout<<"请输入要退购的车票的班次:"<<endl;
cin>>i;
if(i<=0||i>R)
{
cout<<"对不起,今天没有这趟车,无法完成退票.使用!"<<endl;
cout<<"输入回车键返回"<<endl;
}
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
if((now->tm_hour==car[i-1].Setout.hour&&now->tm_min<car[i-1].Setout.minutes)||(now->tm_hour<car[i-1].Setout.hour))
{
if(car[i-1].Fixednumber>=1)
{
car[i-1].Fixednumber-=1;
ofstream outfile;
outfile.open("班次信息.txt",ios::out);
for(i=0;i<R;i++)
{
outfile<<car[i].Number<<" "<<car[i].Setout.hour<<" "<<car[i].Setout.minutes<<" "<<car[i].Qidian<<" "<<car[i].Zhongdian<<" "<<car[i].Lasttime<<" "<<car[i].Fixnumber<<" "<<car[i].Fixednumber<<endl;
}
outfile.close();
cout<<"退订车票成功,使用!"<<endl;
}
else
cout<<"对不起,今天的这趟车的票尚未卖出,无法完成退票!"<<endl;
}
else
cout<<"对不起,今天的这趟车已发出,无法完成退票!"<<endl;
cout<<"输入回车键返回"<<endl;
}
}
//文件载入子函数
int loading()
{
int i;
ifstream infile;
infile.open("班次信息.txt",ios::in);
if(!infile)
{
cout<<"请查看原文件是否存在!"<<endl;
cout<<"按任意键返回";
}
for(i=0;!infile.eof();i++)
{
infile>>car[i].Number>>car[i].Setout.hour>>car[i].Setout.minutes>>car[i].Qidian>>car[i].Zhongdian>>car[i].Lasttime>>car[i].Fixnumber>>car[i].Fixednumber;
}
return i-1;
}
loading函数每次都没有关闭文件啊