6月26日
打了一天=-=比较累,加入了功能,display可以用了并且有了高大上的名字:车站信息管理。时间调度功能也分为了三个功能,给指定车次加车站,给指定车次安排时间,给指定车次减车站。加了几个search函数。大概还差增加整列列车和换乘查询。。换乘查询并没有 思路。。。几个错误检查还是比较好的。。
存在bug:emmm暂未发现,读入数据的bug好像解决了。。。。
#include<bits/stdc++.h>
using namespace std;
//
class Time
{
private:
int hour,minute;
public:
Time(){};
friend ostream& operator<<(ostream &os,Time &t);
friend istream& operator>>(istream &is,Time &t);
friend Time& operator+(Time &t,int n);
friend int operator-(Time &t,Time &t2);
bool operator<(const Time &t2)const;
void displayTime();
};
bool Time::operator<(const Time &t2)const
{
return hour!=t2.hour?hour<t2.hour:minute<t2.minute;
}
int operator-(Time &t,Time &t2)
{
int i;
i=t.minute-t2.minute;
return i;
}
Time& operator+(Time &t,int n)
{
t.minute=t.minute+n;
if(t.minute>60)
{
t.minute=t.minute-60;
t.hour++;
return t;
}
else
return t;
}
void Time::displayTime()
{
if(hour<10)
cout<<"0"<<hour;
else
if(hour>24)
cout<<hour-24<<"+1";
else
cout<<hour;
cout<<":";
if(minute<10)
cout<<"0"<<minute;
else
cout<<minute;
}
istream& operator>>(istream &is,Time &t)
{
is>>t.hour>>t.minute;
return is;
}
ostream& operator<<(ostream &os,Time &t)
{
os<<t.hour<<" "<<t.minute;
return os;
}
//
class Time2
{
private:
int month,day;
public:
Time2(){};
friend ostream& operator<<(ostream &os,Time2 &t);
friend istream& operator>>(istream &is,Time2 &t);
bool operator<(const Time2 &t2)const;
void displayTime();
};
ostream& operator<<(ostream &os,Time2 &t)
{
os<<t.month<<" "<<t.day;
return os;
}
istream& operator>>(istream &is,Time2 &t)
{
is>>t.month>>t.day;
return is;
}
bool Time2::operator<(const Time2 &t2)const
{
return month!=t2.month?month<t2.month:day<t2.day;
}
void Time2::displayTime()
{
cout<<month<<"月"<<day<<"日";
}
//
class Info
{
private:
string train_number;
string station;
Time arrival_time,departure_time;
int p;
public:
Info(){}
Info(string num,string sta,Time t1,Time t2);
void T_Info_display();
void S_Info_display();
void setP(int n){p=n;}
void setArrival_time(Time t1){arrival_time=t1;}
void setDeparture_time(Time t2){departure_time=t2;}
string getTrain_number(){return train_number;}
string getStation(){return station;}
Time getArrival_time(){return arrival_time;}
Time getDeparture_time(){return departure_time;}
friend ostream& operator<<(ostream &os,Info &info);
friend istream& operator>>(istream &is,Info &info);
};
Info::Info(string num,string sta,Time t1,Time t2)
{
train_number=num;
station=sta;
arrival_time=t1;
departure_time=t2;
p=t2-t1;
}
void Info::S_Info_display()
{
cout<<train_number<<" ";
arrival_time.displayTime();
cout<<" ";
departure_time.displayTime();
cout<<" "<<"停留"<<p<<"分钟"<<endl;
}
void Info::T_Info_display()
{
cout<<station<<" ";
arrival_time.displayTime();
cout<<" ";
departure_time.displayTime();
cout<<" "<<"停留"<<p<<"分钟"<<endl;
}
ostream& operator<<(ostream &os,Info &info)
{
os<<info.train_number<<" "<<info.station<<" "<<info.arrival_time<<" "<<info.departure_time<<" "<<info.p<<endl;
return os;
}
istream& operator>>(istream &is,Info &info)
{
is>>info.train_number>>info.station>>info.arrival_time>>info.departure_time>>info.p;
return is;
}
//
class Site
{
private:
string name;
int n;
vector<Info> information;
public:
Site():n(0){information.clear();}
Site(string name):n(0){information.clear();this->name=name;}
string getName(){return name;}
int getN(){return n;}
vector<Info>& getInfo(){return information;}
void setN(int n){this->n=this->n+n;}
int Site_searchTrain(string no);
void Site_Display();
void Site_Displays();
void Site_addTrain(Info);
friend ostream& operator<<(ostream &os,Site &s);
friend istream& operator>>(istream &is,Site &s);
};
int Site::Site_searchTrain(string no)
{
int i=0;
vector<Info>::iterator i_it;
for(i_it=information.begin();i_it!=information.end();i_it++,i++)
{
if(i_it->getTrain_number()==no)
{
return i;
}
}
return -1;
}
void Site::Site_Displays()
{
cout<<name<<endl;
}
void Site::Site_addTrain(Info temp)
{
n++;
information.push_back(temp);
}
void Site::Site_Display()
{
cout<<"站点名称:"<<name<<endl;
cout<<"共"<<n<<"班车次在此停靠"<<endl;
for(int i=0;i<n;i++)
{
information[i].S_Info_display();
}
}
ostream& operator<<(ostream &os,Site &s)
{
os<<s.name<<" "<<s.n<<" "<<endl;
for(int i=0;i<s.n;i++)
os<<s.information[i];
return os;
}
istream& operator>>(istream &is,Site &s)
{
s.information.clear();
is>>s.name;
if(s.name=="end")
return is;
is>>s.n;
for(int i=0;i<s.n;i++)
{
Info info;
is>>info;
s.information.push_back(info);
}
return is;
}
//
class Train
{
private:
string no;
vector<Info> information;
string start,end;
int n;
public:
Train():n(0){information.clear();}
string getNo(){return no;}
int getN(){return n;}
void setN(int n){this->n=this->n+n;}
vector<Info>& getInfo(){return information;}
// bool Site_Search(string);
// bool Date_Search(Time2,Time2);
// void add();
int Train_searchSite(string name);
void Train_addSite(Info);
void Train_Display();
void Train_DisplayAll();
void Train_Displays();
friend ostream& operator<<(ostream &os,Train &train);
friend istream& operator>>(istream &is,Train &train);
};
//void Train::add()
//{
// n=0;
// cout<<"请输入车次:";
// cin>>no;
// if(no=="-1")
// return;
// cout<<"请输入本次列车运行时间(月/日):";
// cin>>t2;
// cout<<"请输入途经站点以及抵达时间(时/分)停留时间(站点输入-1结束)"<<endl;
// while(1)
// {
// string s;
// cin>>s;
// if(s=="-1")break;
// Site si(s);
// site.push_back(si);
// n++;
// }
//}
int Train::Train_searchSite(string name)
{
vector<Info>::iterator i_it;
int i=0;
for(i_it=information.begin();i_it!=information.end();i++,i_it++)
{
if(i_it->getStation()==name)
return i;
}
return -1;
}
void Train::Train_Displays()
{
cout<<"车次:"<<no<<endl;
cout<<"始发站:"<<start<<" ";
cout<<"终点站:"<<end<<endl;
}
void Train::Train_addSite(Info temp)
{
vector<Info>::iterator i_it;
for(i_it=information.begin();i_it!=information.end();i_it++)
{
if(temp.getArrival_time()<i_it->getArrival_time())
{
information.insert(i_it,temp);
n++;
break;
}
}
}
void Train::Train_DisplayAll()
{
cout<<"车次:"<<no<<endl;
cout<<"始发站:"<<start<<" ";
cout<<"终点站:"<<end<<endl;
cout<<"途经站点"<<endl;
for(int i=0;i<n;i++)
{
cout<<i+1<<" ";
information[i].T_Info_display();
}
}
void Train::Train_Display()
{
cout<<"车次:"<<no<<endl;
cout<<"始发站:"<<start<<" ";
cout<<"终点站:"<<end<<endl;
cout<<"是否要查看详细信息(1是0否)";
bool flag;
cin>>flag;
if(flag)
{
cout<<"车次:"<<no<<endl;
cout<<"始发站:"<<start<<" ";
cout<<"终点站:"<<end<<endl;
cout<<"途经站点"<<endl;
for(int i=0;i<n;i++)
{
cout<<i+1<<" ";
information[i].T_Info_display();
}
}
else
return;
}
//bool Train::Date_Search(Time2 date1,Time2 date2)
//{
// if(date1<date2)
// {
// Time2 temp;
// temp=date1;
// date1=date2;
// date2=temp;
// }
// if(t2<date1&&date2<t2)
// return 1;
// else
// return 0;
//}
//bool Train::Site_Search(string s)
//{
// for(int i=0;i<n;i++)
// {
// if(site[i].getName()==s)
// {
// return 1;
// }
// }
// return 0;
//}
ostream& operator<<(ostream &os,Train &train)
{
os<<train.no<<" "<<train.start<<" "<<train.end<<" "<<train.n<<endl;
for(int i=0;i<train.n;i++)
{
os<<train.information[i];
}
return os;
}
istream& operator>>(istream &is,Train &train) //注意:每次Cin的时候会刷一下
{
train.information.clear();
is>>train.no;
if(train.no=="end")return is;
is>>train.start>>train.end>>train.n;
for(int i=0;i<train.n;i++)
{
Info info;
is>>info;
train.information.push_back(info);
}
return is;
}
//
class Admin
{
private:
vector<Train> t;
vector<Site> s;
public:
Admin(){load();}
~Admin(){save();}
int Site_search(string name);
void Site_add();
void Site_del();
void Dispatch();
void load();
void save();
void Train_display();
void Train_displays();
void Site_display();
void Site_displays();
void Train_displayAll();
};
void Admin::Site_displays()
{
cout<<"共有"<<s.size()<<"个站点"<<endl;
for(int i=0;i<s.size();i++)
{
cout<<i+1<<" ";
s[i].Site_Displays();
}
}
int Admin::Site_search(string name)
{
int i=0;
vector<Site>::iterator s_it;
for(s_it=s.begin();s_it!=s.end();s_it++,i++)
{
if(s_it->getName()==name)
return i;
}
return -1;
}
void Admin::Site_del()
{
string name;
vector<string> temp;
vector<Site>::iterator s_it;
int i=0,j=0,k=0;
bool bo1=1,bo2=1;
cout<<"请输入欲删除站点名称:"<<endl;
cin>>name;
for(i=0;i<s.size();i++)
{
if(s[i].getName()==name)
{
bo2=0;
s_it=s.begin()+i;
if(s[i].getN()!=0)
bo1=0;
s.erase(s_it);
break;
}
}
if(bo2==0)
{
for(j=0;j<t.size();j++)
{
for(k=0;k<t[j].getN();k++)
{
if(t[j].getInfo()[k].getStation()==name)
{
vector<Info>::iterator i_it;
i_it=t[j].getInfo().begin()+k;
t[j].setN(-1);
temp.push_back(t[j].getNo());
t[j].getInfo().erase(i_it);
cout<<*i_it;
}
}
}
cout<<"站点"<<name<<"删除成功"<<endl;
if(bo1)
cout<<"无关联车次"<<endl;
else
{
cout<<"关联车次"<<endl;
for(int s=0;s<temp.size();s++)
cout<<temp[s]<<" ";
cout<<endl;
}
}
if(bo2)
cout<<"未找到该站点"<<endl;
}
void Admin::Site_add() //并没有重复检查
{
string name;
cout<<"请输入欲添加站点名称:(-1结束)"<<endl;
cin>>name;
while(1)
{
if(name!="-1")
{
Site ts(name);s.push_back(ts);
cout<<"站点"<<name<<"添加成功"<<endl;
cout<<"请输入欲添加站点名称:(-1结束)"<<endl;
cin>>name;
}
else
break;
}
}
void Admin::Dispatch()
{
string train_num;
int i;
bool flag1=1;
Train_displays();
cout<<"请输入欲调度车次"<<endl;
cin>>train_num;
for(i=0;i<t.size();i++)
{
if(t[i].getNo()==train_num)
{flag1=0;break;}
}
if(flag1)
{
cout<<"无该车次,调度结束"<<endl;
return;
}
else
{
system("cls");
t[i].Train_DisplayAll();
int n;
cout<<"选择调度功能:1加站点2减站点3修改时间"<<endl;
cin>>n;
if(n==1)
{
Site_displays();
string name;
Time t1,t2;
int n;
cout<<"输入加入站点名"<<endl;
cin>>name;
cout<<"输入到站时间"<<endl;
cin>>t1;
cout<<"输入出发时间"<<endl;
cin>>t2;
n=Site_search(name);
if(n!=-1)
{
Info temp(train_num,name,t1,t2);
t[i].Train_addSite(temp);
s[n].Site_addTrain(temp);
cout<<"添加成功"<<endl;
}
else
{
cout<<"此站不存在,请添加此站点后再进行此操作"<<endl;
}
}
if(n==2)
{
string name;
int n;
cout<<"输入欲删站点名"<<endl;
cin>>name;
n=t[i].Train_searchSite(name);
if(n!=-1)
{
vector<Info>::iterator i_it1=t[i].getInfo().begin()+n;
t[i].getInfo().erase(i_it1);
t[i].setN(-1);
int n2=Site_search(name);
int n3=s[n2].Site_searchTrain(train_num);
vector<Info>::iterator i_it2=s[n2].getInfo().begin()+n3;
s[n2].getInfo().erase(i_it2);
s[n2].setN(-1);
cout<<"删除成功"<<endl;
}
else
cout<<"该车次无此站点"<<endl;
}
if(n==3)
{
string name;
Time t1,t2;
cout<<"请输入欲更时间的站点:";
cin>>name;
cout<<"请输入到站时间:";
cin>>t1;
cout<<"请输入离站时间:";
cin>>t2;
int n1,n2,n3;
n1=t[i].Train_searchSite(name);
t[i].getInfo()[n1].setArrival_time(t1);
t[i].getInfo()[n1].setDeparture_time(t2);
t[i].getInfo()[n1].setP(t2-t1);
n2=Site_search(name);
n3=s[n2].Site_searchTrain(train_num);
s[n2].getInfo()[n3].setArrival_time(t1);
s[n2].getInfo()[n3].setDeparture_time(t2);
s[n2].getInfo()[n3].setP(t2-t1);
}
}
}
void Admin::Site_display()
{
cout<<"共有"<<s.size()<<"个站点"<<endl<<endl;
for(int i=0;i<s.size();i++)
{
cout<<"第"<<i+1<<"个站点"<<endl;
s[i].Site_Display();
cout<<endl;
}
}
void Admin::Train_displays()
{
cout<<"共有"<<t.size()<<"班车次"<<endl<<endl;
for(int i=0;i<t.size();i++)
{
cout<<"第"<<i+1<<"班车次"<<endl;
t[i].Train_Displays();
cout<<endl;
}
}
void Admin::Train_displayAll()
{
cout<<"共有"<<t.size()<<"班车次"<<endl<<endl;
for(int i=0;i<t.size();i++)
{
cout<<"第"<<i+1<<"班车次"<<endl;
t[i].Train_DisplayAll();
cout<<endl;
}
}
void Admin::Train_display()
{
cout<<"共有"<<t.size()<<"班车次"<<endl<<endl;
for(int i=0;i<t.size();i++)
{
cout<<"第"<<i+1<<"班车次"<<endl;
t[i].Train_Display();
cout<<endl;
}
}
void Admin::save()
{
ofstream t_outfile("train.txt",ios::out);
if(!t_outfile)
return;
vector<Train>::iterator it;
for(it=t.begin();it!=t.end();it++)
{
t_outfile<<*it;
}
t_outfile<<"end";
t_outfile.close();
ofstream s_outfile("station.txt",ios::out);
if(!s_outfile)
return;
vector<Site>::iterator s_it;
for(s_it=s.begin();s_it!=s.end();s_it++)
{
s_outfile<<*s_it;
}
s_outfile<<"end";
s_outfile.close();
}
void Admin::load()
{
Train tr;
ifstream t_infile("train.txt",ios::in);
if(!t_infile)
return;
t.clear();
while(t_infile>>tr&&tr.getNo()!="end")
{
t.push_back(tr);
}
Site si;
ifstream s_infile("station.txt",ios::in);
if(!s_infile)
return;
s.clear();
while(s_infile>>si&&si.getName()!="end")
{
s.push_back(si);
}
s_infile.close();
t_infile.close();
// vector<Train>::iterator train_it; //输出查错
// vector<Site>::iterator site_it;
// for(train_it=t.begin();train_it!=t.end();train_it++)
// {
// cout<<*train_it;
// }
// for(site_it=s.begin();site_it!=s.end();site_it++)
// {
// cout<<*site_it;
// }
}
//
class Userop
{
private:
vector<Train> t;
vector<Site> s;
public:
Userop(){load();}
~Userop(){save();}
void load();
void save();
void station_search();
void train_search();
};
void Userop::train_search()
{
string no;
vector<Train>::iterator t_it=t.end(),it;
cout<<"输入车次吧!骚年!"<<endl;
cin>>no;
while(1)
{
for(it=t.begin();it!=t.end();it++)
{
if(it->getNo()==no)
t_it=it;
}
if(t_it!=t.end())
break;
else
{
cout<<"老哥,并没有这车,请重新输入:";
cin>>no;
}
}
t_it->Train_DisplayAll();
}
void Userop::station_search()
{
string start,end; //缺少错误检查的=-=
vector<Site>::iterator start_it=s.end(),end_it=s.end(),it;
cout<<"哇的一下输入上车站点:";
cin>>start;
while(1)
{
for(it=s.begin();it!=s.end();it++)
{
if(it->getName()==start)
start_it=it;
}
if(start_it!=s.end())
break;
else
{
cout<<"老哥,并没有这站,请重新输入:";
cin>>start;
}
}
cout<<"唔的一下输入下车站点:";
cin>>end;
while(1)
{
for(it=s.begin();it!=s.end();it++)
{
if(it->getName()==end)
end_it=it;
}
if(end_it!=s.end())
break;
else
{
cout<<"老哥,并没有这站,请重新输入:";
cin>>end;
}
}
int n,m,t=0;
vector<Info> tempInfo;
bool b=1;
n=start_it->getN();
m=end_it->getN();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(start_it->getInfo()[i].getTrain_number()==end_it->getInfo()[j].getTrain_number())
{
t++;
tempInfo.push_back(start_it->getInfo()[i]);
b=0;
}
}
}
if(!b)
{
cout<<"共找到"<<t<<"班车"<<endl;
for(int i=0;i<tempInfo.size();i++)
{
cout<<"车次:"<<tempInfo[i].getTrain_number()<<"到站时间:";
tempInfo[i].getArrival_time().displayTime();
cout<<endl;
}
}
if(b)
{
cout<<"没找到的说"<<endl;
}
}
void Userop::save()
{
ofstream t_outfile("train.txt",ios::out);
if(!t_outfile)
return;
vector<Train>::iterator it;
for(it=t.begin();it!=t.end();it++)
{
t_outfile<<*it;
}
t_outfile<<"end";
t_outfile.close();
ofstream s_outfile("station.txt",ios::out);
if(!s_outfile)
return;
vector<Site>::iterator s_it;
for(s_it=s.begin();s_it!=s.end();s_it++)
{
s_outfile<<*s_it;
}
s_outfile<<"end";
s_outfile.close();
}
void Userop::load()
{
Train tr;
ifstream t_infile("train.txt",ios::in);
if(!t_infile)
return;
t.clear();
while(t_infile>>tr&&tr.getNo()!="end")
{
t.push_back(tr);
}
t_infile.close();
Site si;
ifstream s_infile("station.txt",ios::in);
if(!s_infile)
return;
s.clear();
while(s_infile>>si&&si.getName()!="end")
{
s.push_back(si);
}
s_infile.close();
// vector<Train>::iterator train_it; //输出检测
// vector<Site>::iterator site_it;
// for(train_it=t.begin();train_it!=t.end();train_it++)
// {
// cout<<*train_it;
// }
// for(site_it=s.begin();site_it!=s.end();site_it++)
// {
// cout<<*site_it;
// }
}
//
int main()
{
Userop uop;
uop.train_search();
// Admin admin;
// admin.Dispatch();
// admin.Site_add();
// admin.Site_del();
// admin.Train_displayAll();
// admin.Site_display();
system("pause");
system("pause");
return 0;
}
6月25日
按照老师的数据结构改了一下代码,取消了加车功能,加入了用户的查询功能(但是我并不觉得老师的数据结构科学=-=),数据文件分为了train与station,display并不能用了。
存在bug:不同天的同样的车并不能区分出来,读入数据的时候,有时候会让数据文件消失(这个问题并不知道是为啥。。有的时候会发生)
#include<bits/stdc++.h>
using namespace std;
//
class Time
{
private:
int hour,minute;
public:
Time(){};
friend ostream& operator<<(ostream &os,Time &t);
friend istream& operator>>(istream &is,Time &t);
friend Time& operator+(Time &t,int n);
bool operator<(const Time &t2)const;
void displayTime();
};
bool Time::operator<(const Time &t2)const
{
return hour!=t2.hour?hour<t2.hour:minute<t2.minute;
}
Time& operator+(Time &t,int n)
{
t.minute=t.minute+n;
if(t.minute>60)
{
t.minute=t.minute-60;
t.hour++;
return t;
}
else
return t;
}
void Time::displayTime()
{
if(hour<10)
cout<<"0"<<hour;
else
if(hour>24)
cout<<hour-24<<"+1";
else
cout<<hour;
cout<<":";
if(minute<10)
cout<<"0"<<minute;
else
cout<<minute;
}
istream& operator>>(istream &is,Time &t)
{
is>>t.hour>>t.minute;
return is;
}
ostream& operator<<(ostream &os,Time &t)
{
os<<t.hour<<" "<<t.minute;
return os;
}
//
class Time2
{
private:
int month,day;
public:
Time2(){};
friend ostream& operator<<(ostream &os,Time2 &t);
friend istream& operator>>(istream &is,Time2 &t);
bool operator<(const Time2 &t2)const;
void displayTime();
};
ostream& operator<<(ostream &os,Time2 &t)
{
os<<t.month<<" "<<t.day;
return os;
}
istream& operator>>(istream &is,Time2 &t)
{
is>>t.month>>t.day;
return is;
}
bool Time2::operator<(const Time2 &t2)const
{
return month!=t2.month?month<t2.month:day<t2.day;
}
void Time2::displayTime()
{
cout<<month<<"月"<<day<<"日";
}
//
class Info
{
private:
string train_number;
string station;
Time arrival_time,departure_time;
int p;
public:
Info(){}
void Info_display();
string getTrain_number(){return train_number;}
string getStation(){return station;}
Time getArrival_time(){return arrival_time;}
Time getDeparture_time(){return departure_time;}
friend ostream& operator<<(ostream &os,Info &info);
friend istream& operator>>(istream &is,Info &info);
};
ostream& operator<<(ostream &os,Info &info)
{
os<<info.train_number<<" "<<info.station<<" "<<info.arrival_time<<" "<<info.departure_time<<" "<<info.p<<endl;
return os;
}
istream& operator>>(istream &is,Info &info)
{
is>>info.train_number>>info.station>>info.arrival_time>>info.departure_time>>info.p;
return is;
}
//
class Site
{
private:
string name;
int n;
vector<Info> information;
public:
Site():n(0){information.clear();}
string getName(){return name;}
int getN(){return n;}
vector<Info> getInfo(){return information;}
//void Site_Display();
friend ostream& operator<<(ostream &os,Site &s);
friend istream& operator>>(istream &is,Site &s);
};
//void Site::Site_Display()
//{
// cout<<name<<" ";arrival_time.displayTime();cout<<" ";departure_time.displayTime();cout<<" "<<"经停 "<<p<<"分钟"<<endl;
//}
ostream& operator<<(ostream &os,Site &s)
{
os<<s.name<<" "<<s.n<<" "<<endl;
for(int i=0;i<s.n;i++)
os<<s.information[i];
return os;
}
istream& operator>>(istream &is,Site &s)
{
s.information.clear();
is>>s.name;
if(s.name=="end")
return is;
is>>s.n;
for(int i=0;i<s.n;i++)
{
Info info;
is>>info;
s.information.push_back(info);
}
return is;
}
//
class Train
{
private:
string no;
vector<Info> information;
string start,end;
int n;
public:
Train():n(0){information.clear();}
string getNo(){return no;}
// bool Site_Search(string);
// bool Date_Search(Time2,Time2);
// void add();
// void Train_Display();
friend ostream& operator<<(ostream &os,Train &train);
friend istream& operator>>(istream &is,Train &train);
};
//void Train::add()
//{
// n=0;
// cout<<"请输入车次:";
// cin>>no;
// if(no=="-1")
// return;
// cout<<"请输入本次列车运行时间(月/日):";
// cin>>t2;
// cout<<"请输入途经站点以及抵达时间(时/分)停留时间(站点输入-1结束)"<<endl;
// while(1)
// {
// string s;
// cin>>s;
// if(s=="-1")break;
// Site si(s);
// site.push_back(si);
// n++;
// }
//}
//void Train::Train_Display()
//{
// cout<<"车次:"<<no<<" "<<"时间:";
// t2.displayTime();
// cout<<endl;
// vector<Site>::iterator it;
// cout<<"途经站点信息"<<endl;
// for(it=site.begin();it!=site.end();it++)
// {
// it->Site_Display();
// }
//}
//bool Train::Date_Search(Time2 date1,Time2 date2)
//{
// if(date1<date2)
// {
// Time2 temp;
// temp=date1;
// date1=date2;
// date2=temp;
// }
// if(t2<date1&&date2<t2)
// return 1;
// else
// return 0;
//}
//bool Train::Site_Search(string s)
//{
// for(int i=0;i<n;i++)
// {
// if(site[i].getName()==s)
// {
// return 1;
// }
// }
// return 0;
//}
ostream& operator<<(ostream &os,Train &train)
{
os<<train.no<<" "<<train.start<<" "<<train.end<<" "<<train.n<<endl;
for(int i=0;i<train.n;i++)
{
os<<train.information[i];
}
return os;
}
istream& operator>>(istream &is,Train &train) //注意:每次Cin的时候会刷一下
{
train.information.clear();
is>>train.no;
if(train.no=="end")return is;
is>>train.start>>train.end>>train.n;
for(int i=0;i<train.n;i++)
{
Info info;
is>>info;
train.information.push_back(info);
}
return is;
}
//
class Admin
{
private:
vector<Train> t;
vector<Site> s;
public:
Admin(){load();}
~Admin(){save();}
//void add();
void Dispatch();
void load();
void save();
// void traindisplay();
};
//void Admin::add()
//{
// while(1)
// {
// Train tr;
// tr.add();
// if(tr.getNo()=="-1")break;
// t.push_back(tr);
// }
//}
//void Admin::traindisplay()
//{
// vector<Train>::iterator it;
// for(it=t.begin();it!=t.end();it++)
// it->Train_Display();
//}
void Admin::save()
{
ofstream t_outfile("train.txt",ios::out);
if(!t_outfile)
return;
vector<Train>::iterator it;
for(it=t.begin();it!=t.end();it++)
{
t_outfile<<*it;
}
t_outfile<<"end";
t_outfile.close();
ofstream s_outfile("station.txt",ios::out);
if(!s_outfile)
return;
vector<Site>::iterator s_it;
for(s_it=s.begin();s_it!=s.end();s_it++)
{
s_outfile<<*s_it;
}
s_outfile<<"end";
s_outfile.close();
}
void Admin::load()
{
Train tr;
ifstream t_infile("train.txt",ios::in);
if(!t_infile)
return;
t.clear();
while(t_infile>>tr&&tr.getNo()!="end")
{
t.push_back(tr);
}
t_infile.close();
Site si;
ifstream s_infile("station.txt",ios::in);
if(!s_infile)
return;
s.clear();
while(s_infile>>si&&si.getName()!="end")
{
s.push_back(si);
}
s_infile.close();
vector<Train>::iterator train_it;
vector<Site>::iterator site_it;
for(train_it=t.begin();train_it!=t.end();train_it++)
{
cout<<*train_it;
}
for(site_it=s.begin();site_it!=s.end();site_it++)
{
cout<<*site_it;
}
}
//
class Userop
{
private:
vector<Train> t;
vector<Site> s;
public:
Userop(){load();}
~Userop(){save();}
void load();
void save();
void station_search();
};
void Userop::station_search()
{
string start,end; //缺少错误检查的=-=
vector<Site>::iterator start_it=s.end(),end_it=s.end(),it;
cout<<"哇的一下输入上车站点:";
cin>>start;
while(1)
{
for(it=s.begin();it!=s.end();it++)
{
if(it->getName()==start)
start_it=it;
}
if(start_it!=s.end())
break;
else
{
cout<<"老哥,并没有这站,请重新输入:";
cin>>start;
}
}
cout<<"唔的一下输入下车站点:";
cin>>end;
while(1)
{
for(it=s.begin();it!=s.end();it++)
{
if(it->getName()==end)
end_it=it;
}
if(end_it!=s.end())
break;
else
{
cout<<"老哥,并没有这站,请重新输入:";
cin>>end;
}
}
int n,m,t=0;
vector<Info> tempInfo;
bool b=1;
n=start_it->getN();
m=end_it->getN();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(start_it->getInfo()[i].getTrain_number()==end_it->getInfo()[j].getTrain_number())
{
t++;
tempInfo.push_back(start_it->getInfo()[i]);
b=0;
}
}
}
if(!b)
{
cout<<"共找到"<<t<<"班车"<<endl;
for(int i=0;i<tempInfo.size();i++)
{
cout<<"车次:"<<tempInfo[i].getTrain_number()<<"到站时间:";
tempInfo[i].getArrival_time().displayTime();
cout<<endl;
}
}
if(b)
{
cout<<"没找到的说"<<endl;
}
}
void Userop::save()
{
ofstream t_outfile("train.txt",ios::out);
if(!t_outfile)
return;
vector<Train>::iterator it;
for(it=t.begin();it!=t.end();it++)
{
t_outfile<<*it;
}
t_outfile<<"end";
t_outfile.close();
ofstream s_outfile("station.txt",ios::out);
if(!s_outfile)
return;
vector<Site>::iterator s_it;
for(s_it=s.begin();s_it!=s.end();s_it++)
{
s_outfile<<*s_it;
}
s_outfile<<"end";
s_outfile.close();
}
void Userop::load()
{
Train tr;
ifstream t_infile("train.txt",ios::in);
if(!t_infile)
return;
t.clear();
while(t_infile>>tr&&tr.getNo()!="end")
{
t.push_back(tr);
}
t_infile.close();
Site si;
ifstream s_infile("station.txt",ios::in);
if(!s_infile)
return;
s.clear();
while(s_infile>>si&&si.getName()!="end")
{
s.push_back(si);
}
s_infile.close();
vector<Train>::iterator train_it;
vector<Site>::iterator site_it;
for(train_it=t.begin();train_it!=t.end();train_it++)
{
cout<<*train_it;
}
for(site_it=s.begin();site_it!=s.end();site_it++)
{
cout<<*site_it;
}
}
//
int main()
{
Userop uop;
uop.station_search();
system("pause");
return 0;
}
6月21日
正常从文件读入,加入了列车日期,加入了到达站点的日期,加入了增加列车功能,display功能
#include<bits/stdc++.h>
using namespace std;
//
class Time
{
private:
int hour,minute;
public:
Time(){};
friend ostream& operator<<(ostream &os,Time &t);
friend istream& operator>>(istream &is,Time &t);
friend Time& operator+(Time &t,int n);
bool operator<(const Time &t2)const;
void displayTime();
};
bool Time::operator<(const Time &t2)const
{
return hour!=t2.hour?hour<t2.hour:minute<t2.minute;
}
Time& operator+(Time &t,int n)
{
t.minute=t.minute+n;
if(t.minute>60)
{
t.minute=t.minute-60;
t.hour++;
return t;
}
else
return t;
}
void Time::displayTime()
{
if(hour<10)
cout<<"0"<<hour;
else
if(hour>24)
cout<<hour-24<<"+1";
else
cout<<hour;
cout<<":";
if(minute<10)
cout<<"0"<<minute;
else
cout<<minute;
}
istream& operator>>(istream &is,Time &t)
{
is>>t.hour>>t.minute;
return is;
}
ostream& operator<<(ostream &os,Time &t)
{
os<<t.hour<<" "<<t.minute;
return os;
}
//
class Time2
{
private:
int month,day;
public:
Time2(){};
friend ostream& operator<<(ostream &os,Time2 &t);
friend istream& operator>>(istream &is,Time2 &t);
bool operator<(const Time2 &t2)const;
void displayTime();
};
ostream& operator<<(ostream &os,Time2 &t)
{
os<<t.month<<" "<<t.day;
return os;
}
istream& operator>>(istream &is,Time2 &t)
{
is>>t.month>>t.day;
return is;
}
bool Time2::operator<(const Time2 &t2)const
{
return month!=t2.month?month<t2.month:day<t2.day;
}
void Time2::displayTime()
{
cout<<month<<"月"<<day<<"日";
}
//
class Site
{
private:
string name;
Time arrival_time,departure_time;
int p;
public:
Site(){};
Site(string);
string getName(){return name;}
void Site_Display();
friend ostream& operator<<(ostream &os,Site &s);
friend istream& operator>>(istream &is,Site &s);
};
Site::Site(string s)
{
name=s;
cin>>arrival_time>>p;
departure_time=arrival_time+p;
}
void Site::Site_Display()
{
cout<<name<<" ";arrival_time.displayTime();cout<<" ";departure_time.displayTime();cout<<" "<<"经停 "<<p<<"分钟"<<endl;
}
ostream& operator<<(ostream &os,Site &s)
{
os<<s.name<<" "<<s.arrival_time<<" "<<s.departure_time<<" "<<s.p<<endl;
return os;
}
istream& operator>>(istream &is,Site &s)
{
is>>s.name>>s.arrival_time>>s.departure_time>>s.p;
return is;
}
//
class Train
{
private:
string no;
vector<Site> site;
Time2 t2;
int n;
public:
Train():n(0){};
string getNo(){return no;}
bool Site_Search(string);
bool Date_Search(Time2,Time2);
void add();
void Train_Display();
friend ostream& operator<<(ostream &os,Train &train);
friend istream& operator>>(istream &is,Train &train);
};
void Train::add()
{
n=0;
cout<<"请输入车次:";
cin>>no;
cout<<"请输入途经站点以及抵达时间停留时间(站点输入-1结束)"<<endl;
while(1)
{
string s;
cin>>s;
if(s=="-1")break;
Site si(s);
site.push_back(si);
n++;
}
}
void Train::Train_Display()
{
cout<<"车次:"<<no<<" "<<"时间:";
t2.displayTime();
cout<<endl;
vector<Site>::iterator it;
cout<<"途经站点信息"<<endl;
for(it=site.begin();it!=site.end();it++)
{
it->Site_Display();
}
}
bool Train::Date_Search(Time2 date1,Time2 date2)
{
if(date1<date2)
{
Time2 temp;
temp=date1;
date1=date2;
date2=temp;
}
if(t2<date1&&date2<t2)
return 1;
else
return 0;
}
bool Train::Site_Search(string s)
{
for(int i=0;i<n;i++)
{
if(site[i].getName()==s)
{
return 1;
}
}
return 0;
}
ostream& operator<<(ostream &os,Train &train)
{
os<<train.no<<" "<<train.t2<<" "<<train.n<<endl;
for(int i=0;i<train.n;i++)
{
os<<train.site[i];
}
return os;
}
istream& operator>>(istream &is,Train &train)
{
is>>train.no;
if(train.no=="end")return is;
is>>train.t2>>train.n;
for(int i=0;i<train.n;i++)
{
Site s;
is>>s;
train.site.push_back(s);
}
return is;
}
//
class Admin
{
private:
vector<Train> t;
//vector<Site> site;
public:
Admin(){load();}
~Admin(){save();}
void add();
void load();
void save();
void traindisplay();
};
void Admin::add()
{
while(1)
{
Train tr;
tr.add();
if(tr.getNo()=="-1")break;
t.push_back(tr);
}
}
void Admin::traindisplay()
{
vector<Train>::iterator it;
for(it=t.begin();it!=t.end();it++)
it->Train_Display();
}
void Admin::save()
{
ofstream t_outfile("train.txt",ios::out);
if(!t_outfile)
return;
vector<Train>::iterator it;
for(it=t.begin();it!=t.end();it++)
{
t_outfile<<*it;
}
t_outfile<<"end";
}
void Admin::load()
{
Train tr;
ifstream t_infile("train.txt",ios::in);
if(!t_infile)
return;
t.clear();
while(t_infile>>tr&&tr.getNo()!="end")
{
t.push_back(tr);
}
t_infile.close();
}
//
class Userop
{
private:
vector<Train> tr;
multimap<string,string[]> si;
};
//
int main()
{
Admin admin;
//admin.add();
admin.traindisplay();
return 0;
}