C++列车时刻查询开发进度记录

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

猜你喜欢

转载自blog.csdn.net/akz_lz/article/details/80764571