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

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


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c++城市公交查询系统 1.设有一文件对象in_file,若在while循环中用in_file>> 每次从文件中得到一个字符串直到文件结束, 如果用in_file直接来判断文件是否结束, 则文件末的那个字符串会得到两次。 而用文件in_file.eof()来判断则会得到正确的结果。 2.用delete []释放字符串空间时,老是有问题, 其中的原因之一是你原来申请的空间不够大, 后来往这个空间中放了过多的内容以至越界, 这时候会发生运行时的错误。 3.把一个对象作为参数传给另一个对象的成员函数时, 程序不能正常结束,即系统删除对象时有问题; 而使用指针或者引用传递参数时不仅不会出现问题, 而且可以人为的删除对象。 我个人认为这很有可能是值传递的原因, 当把一个对象作为实参传给一个函数时,函数形参拷贝了实参的值, 这时,如果对象有指针成员,那么形参的指针成员的值和 实参的指针成员的值将完全一样, 即它们指向的是同一块内存,所以当函数调用结束的时候, 函数的形参将会被系统撤消, 这时,形参调用析构函数,释放用new动态申请的内存。在函数的外面, 作为实参的对象的指针成员其实已经被撤消了,所以当程序结束, 系统撤消这个对象时,这个对象又要调用析构函数来释放指针成员, 但这时指针其实已经指向了非法的空间,导致出错。 bus 文件夹的内容记录的是每条线路的信息,对应于bus 类。 每个文件以线路名称(即车名,忽略前面的k)命名。 每个文件的内容组织如下:(共分为6行,以回车键作为行结束标志) 第一行为“线路名称:#### ”,其中####用具体的线路名称代替; 第二行为“上行站点:####”。 第三行为“下行站点:####”。 第四行为“首班车时间:####”。 第五行为“末班车时间:####”。 第六行为“票价:####”。 注:若不分“上行站点”和“下行站点”, 则第二行为“站点名称:####”, 第三行为空行;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值