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; }