简易版12306

本文详细介绍了一个12306购票系统的功能模块设计与实现过程,包括购票、退票、改签等功能,以及管理员如何管理站点、乘客信息等。系统通过类的封装实现了时间、站点、乘客、记录等核心数据的管理,提供了查询、添加、删除、修改等操作。

12306最重要的功能就是实现购票,退票,改签三大功能,这些属于乘客要实现的功能。购票,就像我们平时乘车买票,需要规范输入自己的姓名,手机号,还有身份证号,然后调取数据判读信誉度是否可以买票。退票查找到个人的狗牌记录然后删除。改签其实就是先退票后购票,然后稍微改动一下。

管理员需要实现对站点的增加,两个站之间增加一个站点,输入站点的名称,经过的车次号,到站时间,出站时间,在这个站点放多少票。删除站点就把次站点的所有信息删除。修改站点,我是先把站点的所有信息删除然后再添加新的站点信息。增加乘客信息,需要添加乘客的姓名,手机号,身份证号,还有信誉度,信誉度不足的乘客是不允许乘车的,管理乘客功能主要就是对乘客的信誉度进行管理,如果该乘客做了违法乱纪的事情,就把他的信誉度变为0,不可乘车买票。               接下来就是查询功能,查询的话要根据车次号来查询把中间经过的站点还有到站时间,出站时间全部输出。还要根据始发站和终点站来查询,然后把有座的列车都输出来,并且输出始发时间和到站时间。还需要查询每个乘客的乘车记录,输入姓名就能查询到乘车记录,包括始发站,终点站,车次号,发车时间,到站时间。查询功能是乘客和管理员都有使用的,所以单独写一个类,然后用来继承。

直接上代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
using namespace std;
class Time
{
    int hour;
    int minute;
public:
    Time() {}
    Time(int h,int m):hour(h),minute(m) {}
    int gethour()
    {
        return hour;
    }
    int getminute()
    {
        return minute;
    }
    friend ostream&operator<<(ostream&os,const Time&T);
    friend istream&operator>>(istream&is,Time&T);
    bool operator<(const Time&T1)const
    {
        return hour!=T1.hour?
               hour<T1.hour:minute<T1.minute;
    }
    bool operator>(const Time&T1)const
    {
        return hour!=T1.hour?
               hour>T1.hour:minute>T1.minute;
    }
    bool operator+(const Time&T1)const
    {
        if(hour==T1.hour&&minute==T1.minute)
            return true;
        return false;
    }
};

ostream&operator<<(ostream&os,const Time & T)
{
    os<<T.hour<<":"<<T.minute;
    return os;
}

istream&operator>>(istream&is,Time & T)
{
    while(1)
    {
        is>>T.hour>>T.minute;
        if(T.hour<0||T.hour>24||T.minute<0||T.minute>60)
            continue;
        else
            break;
    }
    return is;
}

class Station
{
    string StationName;//站点名称
    string StationTrain;//车次号
    Time TimeTo;//到站时间
    Time TimeFrom;//出站时间
    int TicketNum;//到达下一站的车票数量
public:
    Station() {}
    Station(string sn,string st,Time tt,Time tf,int tn):StationName(sn),StationTrain(st),TimeTo(tt),TimeFrom(tf),TicketNum(tn) {}
    string getStationName()
    {
        return StationName;
    }
    string getStationTrain()
    {
        return StationTrain;
    }
    Time getTimeTo()
    {
        return TimeTo;
    }
    Time getTimeFrom()
    {
        return TimeFrom;
    }
    int getTicketNum()
    {
        return TicketNum;
    }
    string setStationName(string sn)
    {
        StationName=sn;
        return StationName;
    }
    string setStationTrain(string st)
    {
        StationTrain=st;
        return StationTrain;
    }
    Time setTimeTo(Time tt)
    {
        TimeTo=tt;
        return TimeTo;
    }
    Time setTimeFrom(Time tf)
    {
        TimeFrom=tf;
        return tf;
    }
    int setTicketNum(int tn)
    {
        TicketNum=tn;
        return TicketNum;
    }
    void print()
    {
        cout<<StationName<<" "<<StationTrain<<" "<<TimeTo<<" "<<TimeFrom<<" "<<TicketNum<<endl;
    }
    friend ostream&operator<<(ostream&os,Station&S);
    friend istream&operator>>(istream&is,Station&S);
};

ostream &operator<<(ostream &os,Station&S)
{
    os<<S.StationName<<" "<<S.StationTrain<<" "<<S.TimeTo<<" "<<S.TimeFrom<<" "<<S.TicketNum<<endl;
    return os;
}

istream &operator>>(istream &is,Station&S)
{
    is>>S.StationName>>S.StationTrain>>S.TimeTo>>S.TimeFrom>>S.TicketNum;
    return is;
}

/*int main()
{
    string sn,st;
    Time t1,t2;
    int tn;
    cin>>sn>>st>>t1>>t2>>tn;
    Station S(sn,st,t1,t2,tn);
    S.print();
    tn--;
    S.setTicketNum(tn);
    //S.print();
    cout<<S;
    return 0;
}*/

class Passenger
{
    string name;//乘客姓名
    string IDNumber;//乘客身份证号
    string telNumber;//乘客手机号
    bool reputation;//乘客信誉度,默认可以买票
public:
    Passenger(string na,string id,string tel):name(na),IDNumber(id),telNumber(tel)
    {
        reputation=true;
    }
    Passenger()
    {
        reputation=true;
    }
    string getname()
    {
        return name;
    }
    string getIDNumber()
    {
        return IDNumber;
    }
    string gettelNumber()
    {
        return telNumber;
    }
    bool getreputation()
    {
        return reputation;
    }
    string setname(string na)
    {
        name=na;
        return name;
    }
    string setIDNumber(string id)
    {
        IDNumber=id;
        return IDNumber;
    }
    string settelNumber(string tel)
    {
        telNumber=tel;
        return telNumber;
    }
    bool setreputation(bool re)
    {
        reputation=!re;
        return reputation;
    }
    void print()
    {
        cout<<name<<" "<<IDNumber<<" "<<telNumber<<" "<<reputation<<endl;
    }
    friend ostream&operator<<(ostream&os,Passenger&P);
    friend istream&operator>>(istream&is,Passenger&P);
};

ostream&operator<<(ostream &os,Passenger&P)
{
    os<<P.name<<" "<<P.IDNumber<<" "<<P.telNumber<<" "<<P.reputation<<endl;
    return os;
}

istream&operator>>(istream &is,Passenger&P)
{
    while(1)
    {
        is>>P.name>>P.IDNumber>>P.telNumber;
        if(P.IDNumber.size()!=18||P.telNumber.size()!=11)
            continue;
        else
            break;
    }
    //is>>P.name>>P.IDNumber>>P.telNumber>>P.reputation;
    return is;
}

/*int main()
{
    string na,id;
    ll tel;
    cin>>na>>id>>tel;
    Passenger P(na,id,tel);
    P.print();
    bool re=P.getreputation();
    P.setreputation(re);
    cout<<P;
}*/

class Jilu
{
    string Passengername;//乘客姓名
    string trainnum;//列车号
    string initialstation;//始发站
    string terminal;//终点站
    Time setoff;//发车时间
    Time arrive;//到站时间
public:
    Jilu() {}
    Jilu(string pn,string tn,string is,string te,Time se,Time ar):
        Passengername(pn),trainnum(tn),initialstation(is),terminal(te),setoff(se),arrive(ar) {}
    string getPassengername()
    {
        return Passengername;
    }
    string gettrainnum()
    {
        return trainnum;
    }
    string getinitialstation()
    {
        return initialstation;
    }
    string getterminal()
    {
        return terminal;
    }
    Time getsetoff()
    {
        return setoff;
    }
    Time getarrive()
    {
        return arrive;
    }
    void print()
    {
        cout<<Passengername<<" "<<trainnum<<" "<<initialstation<<" "<<terminal<<" "<<setoff<<" "<<arrive<<endl;
    }
    friend ostream&operator<<(ostream&os,Jilu&J);
    friend istream&operator>>(istream&is,Jilu&J);
};

ostream&operator<<(ostream &os,Jilu&J)
{
    os<<J.Passengername<<" "<<J.trainnum<<" "<<J.initialstation<<" "<<J.terminal<<" "<<J.setoff<<" "<<J.arrive<<endl;
    return os;
}

istream&operator>>(istream &is,Jilu&J)
{
    is>>J.Passengername>>J.trainnum>>J.initialstation>>J.terminal>>J.setoff>>J.arrive;
    return is;
}

/*int main()
{
    string pn,tn,is,te;
    Time t1,t2;
    cin>>pn>>tn>>is>>te>>t1>>t2;
    Jilu J(pn,tn,is,te,t1,t2);
    J.print();
    cin>>J;
    cout<<J;
}*/

class Search
{
protected:
    vector<Station>St;
    multimap<string,int>m1;//按照站点名字查询
    multimap<string,int>::iterator m11,m12,m13,m14;
    multimap<string,int>m2;//按照车次号查询
    multimap<string,int>::iterator m21,m22;
    vector<Jilu>Ji;
    multimap<string,int>m4;//按照姓名号查询记录
    multimap<string,int>::iterator m41,m42;
public:
    Search()
    {
        St.clear();
        m1.clear();
        m2.clear();
        Ji.clear();
        m4.clear();
        loadstation();
        loadjilu();
    }
    void loadstation();
    void loadjilu();
    void printstation();
    void printjilu();
    void searchbystation();
    void searchbytrain();
    void searchjilu();
};

void Search::loadstation()
{
    ifstream infile("2018216487-邵光亮-station.txt",ios::in);
    Station S;
    while(infile>>S)
    {
        St.push_back(S);
        m1.insert(make_pair(S.getStationName(),St.size()-1));
        m2.insert(make_pair(S.getStationTrain(),St.size()-1));
    }
    infile.close();
}

void Search::loadjilu()
{
    ifstream infile("2018216487-邵光亮-jilu.txt",ios::in);
    Jilu J;
    while(infile>>J)
    {
        Ji.push_back(J);
        m4.insert(make_pair(J.getPassengername(),Ji.size()-1));
    }
    infile.close();
}

void Search::printstation()
{
    multimap<string,int>::iterator mn;
    for(mn=m1.begin(); mn!=m1.end(); mn++)
    {
        cout<<St[mn->second]<<endl;
    }
}

/*int main()
{
    Search se;
    se.printstation();
}*/

void Search::printjilu()
{
    multimap<string,int>::iterator mn;
    for(mn=m4.begin(); mn!=m4.end(); mn++)
    {
        cout<<Ji[mn->second]<<endl;
    }
}

/*int main()
{
    Search se;
    se.printjilu();
}*/

void Search::searchbytrain()
{
    string st;
    cin>>st;
    m21=m2.lower_bound(st);
    m22=m2.upper_bound(st);
    /*cout<<st<<endl;
    cout<<m21->second<<endl;
    cout<<m22->second<<endl;*/
    multimap<string,int>::iterator mn;
    if(m21==m22)
    {
        cout<<"无该车次信息"<<endl;
        return ;
    }
    for(mn=m21; mn!=m22; mn++)
    {
        cout<<St[mn->second]<<endl;
    }
}

/*int main()
{
   Search Se;
   Se.searchbytrain();
   Se.searchbytrain();
}*/

void Search::searchbystation()
{
    string sf,st;
    string train1,train2;
    cin>>sf>>st;
    m11=m1.lower_bound(sf);
    m12=m1.upper_bound(sf);
    m13=m1.lower_bound(st);
    m14=m1.upper_bound(st);
    /*cout<<sf<<endl;
    cout<<m11->second<<" "<<m12->second<<endl;
    cout<<m13->second<<" "<<m14->second<<endl;*/
    if(m11==m12||m13==m14)
    {
        cout<<"无该车次信息"<<endl;
        return ;
    }
    multimap<string,int>::iterator mn;
    multimap<string,int>::iterator mm;
    for(mn=m11; mn!=m12; mn++)
    {
        train1=St[mn->second].getStationTrain();
        //cout<<train1<<endl;
        for(mm=m13; mm!=m14; mm++)
        {
            train2=St[mm->second].getStationTrain();
            if(train2==train1)
            {
                if(St[mn->second].getTicketNum()!=0)
                cout<<train1<<" "<<sf<<" "<<St[mn->second].getTimeTo()<<" "<<St[mn->second].getTimeFrom()<<" "<<st<<" "
                    <<St[mm->second].getTimeTo()<<" "<<St[mm->second].getTimeFrom()<<" "<<St[mn->second].getTicketNum()<<endl<<endl;
            }
        }
    }
}

/*int main()
{
    Search Se;
    //cout<<"1"<<endl;
    Se.searchbystation();
    Se.searchbystation();
}*/

void Search::searchjilu()
{
    string na;
    cin>>na;
    m41=m4.lower_bound(na);
    m42=m4.upper_bound(na);
    if(m41==m42)
    {
        cout<<"无该乘客买票信息"<<endl;
        return ;
    }
    multimap<string,int>::iterator mn;
    for(mn=m41; mn!=m42; mn++)
    {
        cout<<Ji[mn->second]<<endl;
    }
}

/*int main()
{
    Search se;
    se.searchjilu();
    se.searchjilu();
}*/

class AdminOp:public Search
{
public:
    vector<Passenger>Pa;
    multimap<string,int>m3;//按照姓名查询
    multimap<string,int>::iterator m31,m32;
public:
    AdminOp()
    {
        Pa.clear();
        m3.clear();
        loadpassenger();
    }
    ~AdminOp()
    {
        savestation();
        savepassenger();
    }
    void loadpassenger();
    void savestation();
    void savepassenger();
    void printpassenger();
    void addpassenger();
    void managepassenger();
    void addstation();
    void deletestation();
    void modifystation();
};

void AdminOp::loadpassenger()
{
    ifstream infile("2018216487-邵光亮-passenger.txt",ios::in);
    Passenger P;
    while(infile>>P)
    {
        Pa.push_back(P);
        m3.insert(make_pair(P.getname(),Pa.size()-1));
    }
    infile.close();
}

void AdminOp::savepassenger()
{
    ofstream outfile("savepassenger.txt",ios::out);
    if(!outfile)
        return;
    multimap<string,int>::iterator mn;
    for(mn=m3.begin(); mn!=m3.end(); mn++)
    {
        outfile<<Pa[mn->second]<<endl;
    }
    outfile.close();
}

void AdminOp::savestation()
{
    ofstream outfile("savestation.txt",ios::out);
    if(!outfile)
        return;
    multimap<string,int>::iterator mn;
    for(mn=m1.begin(); mn!=m1.end(); mn++)
    {
        outfile<<St[mn->second]<<endl;
    }
    outfile.close();
}

void AdminOp::printpassenger()
{
    int i;
    for(i=0; i<Pa.size(); i++)
    {
        cout<<Pa[i]<<endl;
    }
}

/*int main()
{
    AdminOp A;
    A.printpassenger();
}*/

void AdminOp::addpassenger()
{
    string na,id,tel;
    while(1)
    {
        cin>>na>>id>>tel;
        if(id.size()!=18||tel.size()!=11)
            continue;
        else
            break;
    }
    Passenger P(na,id,tel);
    Pa.push_back(P);
    m3.insert(make_pair(P.getname(),Pa.size()-1));
}

/*int main()
{
    AdminOp A;
    A.addpassenger();
    A.printpassenger();
}*/

void AdminOp::managepassenger()
{
    string na;
    cin>>na;
    multimap<string,int>::iterator mn;
    mn=m3.find(na);
    bool re=Pa[mn->second].getreputation();
    Pa[mn->second].setreputation(re);
    //cout<<Pa[mn->second].getreputation()<<endl;
}

/*int main()
{
    AdminOp A;
    A.printpassenger();
    A.managepassenger();
    A.printpassenger();
}*/

void AdminOp::addstation()
{
    string sn,t;
    Time st,sf;
    int tn;
    Station S;
    cin>>S;
    St.push_back(S);
    m1.insert(make_pair(S.getStationName(),St.size()-1));
    m2.insert(make_pair(S.getStationTrain(),St.size()-1));
}

/*int main()
{
    AdminOp A;
    A.printstation();
    A.addstation();
    A.addstation();
    A.searchbytrain();
    A.searchbystation();
}*/

void AdminOp::deletestation()
{
    string sn,st,st1;
    cin>>sn>>st;
    multimap<string,int>::iterator mn;
    m11=m1.lower_bound(sn);
    m12=m1.upper_bound(sn);
    if(m11==m12)
    {
        cout<<"无该车次信息"<<endl;
        return ;
    }
    for(mn=m11; mn!=m12; mn++)
    {
        st1=St[mn->second].getStationTrain();
        if(st1==st)
        {
            //cout<<St[mn->second]<<endl;
            m1.erase(mn);
        }
    }
    m11=m2.lower_bound(st);
    m12=m2.upper_bound(st);
    if(m11==m12)
    {
        cout<<"无该车次信息"<<endl;
        return ;
    }
    for(mn=m11; mn!=m12; mn++)
    {
        st1=St[mn->second].getStationName();
        if(st1==sn)
        {
            //cout<<St[mn->second]<<endl;
            m2.erase(mn);
        }
    }
}

/*int main()
{
    AdminOp A;
    A.printstation();
    A.deletestation();
}*/

void AdminOp::modifystation()
{
    string na,st,st1;
    Time t1,t2;
    bool flag=0;
    cin>>na>>st>>t1>>t2;
    multimap<string,int>::iterator mn;
    m11=m1.lower_bound(na);
    m12=m1.upper_bound(na);
    if(m11==m12)
    {
        cout<<"无该车次信息"<<endl;
        return ;
    }
    for(mn=m11; mn!=m12; mn++)
    {
        st1=St[mn->second].getStationTrain();
        if(st1==st)
        {
            flag=1;
            St[mn->second].setStationName(na);
            St[mn->second].setStationTrain(st);
            St[mn->second].setTimeTo(t1);
            St[mn->second].setTimeFrom(t2);

        }
    }
    if(flag==0)
    {
        cout<<"无该车次信息"<<endl;
    }
}

/*int main()
{
    AdminOp A;
    A.modifystation();
    A.modifystation();
    A.modifystation();
    //A.searchbystation();
    //A.searchbytrain();
    A.printstation();
    A.printpassenger();
}*/

class PassengerOp:public Search
{
    AdminOp u;
public:
    PassengerOp() {};
    ~PassengerOp()
    {
        savejilu();
    };

    void savejilu();
    void buyticket();
    void returnticket();
    void changeticket();
};

void PassengerOp::savejilu()
{
    ofstream outfile("savejilu.txt",ios::out);
    if(!outfile)
        return;
    multimap<string,int>::iterator mn;
    for(mn=m4.begin(); mn!=m4.end(); mn++)
    {
        outfile<<Ji[mn->second]<<endl;
    }
    outfile.close();
}

/*int main()
{
    PassengerOp P;
    P.printjilu();
}*/

void PassengerOp::buyticket()
{
    string pn,sf,st,t,s1;
    int num;
    Time t1,t2,t3;
    bool flag=0;//判断有无该车次
    bool flag1=0;
    cin>>pn>>t>>sf>>st;
    bool re;//判断信誉度是否可以买票
    multimap<string,int>::iterator mn;
    mn=u.m3.find(pn);
    re=u.Pa[mn->second].getreputation();
    //cout<<u.Pa[mn->second].getIDNumber()<<endl;
    //cout<<re<<endl;
    if(re==0)
    {
        cout<<"信誉度不足,无法购票"<<endl;
        return ;
    }
    else
    {
        m11=m1.lower_bound(sf);
        m12=m1.upper_bound(sf);
        if(m11==m12)
        {
            cout<<"无该车次信息"<<endl;
            return ;
        }
        for(mn=m11; mn!=m12; mn++)
        {
            s1=St[mn->second].getStationTrain();
            if(s1==t)
            {
                flag=1;
                t1=St[mn->second].getTimeFrom();
                break;
            }
        }
        m11=m1.lower_bound(st);
        m12=m1.upper_bound(st);
        if(m11==m12)
        {
            cout<<"无该车次信息"<<endl;
            return ;
        }
        for(mn=m11; mn!=m12; mn++)
        {
            s1=St[mn->second].getStationTrain();
            if(s1==t)
            {
                flag1=1;
                t2=St[mn->second].getTimeTo();
                break;
            }
        }
        //cout<<t1<<":"<<t2<<endl;
        if(flag==1&&flag1==1)
        {
            m21=m2.lower_bound(t);
            m22=m2.upper_bound(t);
            for(mn=m21; mn!=m22; mn++)
            {
                num=St[mn->second].getTicketNum();
                t3=St[mn->second].getTimeFrom();
                if(num==0)
                {
                    if(t1+t3)
                    {
                        cout<<"余票不足"<<endl;
                        return;
                    }
                    if((t1<t3)&&(t2>t3))
                    {
                        cout<<"余票不足"<<endl;
                        return;
                    }
                }
            }
            //cout<<flag<<endl;
            for(mn=m21; mn!=m22; mn++)
            {
                num=St[mn->second].getTicketNum();
                t3=St[mn->second].getTimeFrom();
                if(t1+t3)
                {
                    num--;
                    St[mn->second].setTicketNum(num);
                }
                if((t1<t3)&&(t2>t3))
                {
                    num--;
                    St[mn->second].setTicketNum(num);
                }
            }
            Jilu J(pn,t,sf,st,t1,t2);
            Ji.push_back(J);
            m4.insert(make_pair(J.getPassengername(),Ji.size()-1));
        }
        else
        {
            cout<<"无该车次信息"<<endl;
        }
    }
}

/*int main()
{
    PassengerOp P;
    AdminOp A;
    P.printjilu();
    //A.managepassenger();
    //A.printpassenger();
    P.buyticket();
    //P.buyticket();
    //P.buyticket();
    P.printjilu();
    P.printstation();
}*/

void PassengerOp::returnticket()
{
    string pn,t,sf,st,s,ss,tt;
    cin>>pn>>t>>sf>>st;
    Time t1,t2,t3;
    int num;
    bool flag=0;
    multimap<string,int>::iterator mn;
    m41=m4.lower_bound(pn);
    m42=m4.upper_bound(pn);
    if(m42==m41)
    {
        cout<<"没有查询到您的乘车记录"<<endl;
        return ;
    }
    for(mn=m41; mn!=m42; mn++)
    {
        tt=Ji[mn->second].gettrainnum();
        s=Ji[mn->second].getinitialstation();
        ss=Ji[mn->second].getterminal();
        if(s==sf&&ss==st&&t==tt)
        {
            flag=1;
            t1=Ji[mn->second].getsetoff();
            t2=Ji[mn->second].getarrive();
            m4.erase(mn);
            break;
        }
    }
    if(flag==0)
    {
        cout<<"没有查询到您乘坐该列车的信息"<<endl;
    }
    //cout<<t1<<" "<<t2<<endl;
    m21=m2.lower_bound(t);
    m22=m2.upper_bound(t);
    for(mn=m21; mn!=m22; mn++)
    {
        num=St[mn->second].getTicketNum();
        t3=St[mn->second].getTimeFrom();
        if(t1+t3)
        {
            //cout<<"1"<<endl;
            num++;
            St[mn->second].setTicketNum(num);
        }
        if((t1<t3)&&(t2>t3))
        {
            //cout<<"1"<<endl;
            num++;
            St[mn->second].setTicketNum(num);
        }
    }
}

/*int main()
{
    PassengerOp P;
    P.printjilu();
    //P.printstation();
    P.returnticket();
    P.returnticket();
    P.returnticket();
    P.returnticket();
    P.printjilu();
    //P.printstation();
}*/

void PassengerOp::changeticket()
{
    string pn,t,sf,st,s,ss,tt,s1;
    Time t1,t2,t3;
    int num;
    cin>>pn>>t>>sf>>st;//输入原来的车票信息
    multimap<string,int>::iterator mn;
    m41=m4.lower_bound(pn);
    m42=m4.upper_bound(pn);
    for(mn=m41; mn!=m42; mn++)
    {
        tt=Ji[mn->second].gettrainnum();
        s=Ji[mn->second].getinitialstation();
        ss=Ji[mn->second].getterminal();
        if(s==sf&&ss==st&&t==tt)
        {
            t1=Ji[mn->second].getsetoff();
            t2=Ji[mn->second].getarrive();
            m4.erase(mn);
            break;
        }
    }
    m21=m2.lower_bound(t);
    m22=m2.upper_bound(t);
    for(mn=m21; mn!=m22; mn++)
    {
        num=St[mn->second].getTicketNum();
        t3=St[mn->second].getTimeFrom();
        if(t1+t3)
        {
            //cout<<"1"<<endl;
            num++;
            St[mn->second].setTicketNum(num);
        }
        if((t1<t3)&&(t2>t3))
        {
            //cout<<"1"<<endl;
            num++;
            St[mn->second].setTicketNum(num);
        }
    }
    cin>>pn>>t>>sf>>st;//输入要改签的车次信息
    m11=m1.lower_bound(sf);
    m12=m1.upper_bound(sf);
    if(m11==m12)
    {
        cout<<"无该车次信息"<<endl;
        return ;
    }
    for(mn=m11; mn!=m12; mn++)
    {
        s1=St[mn->second].getStationTrain();
        if(s1==t)
        {
            t1=St[mn->second].getTimeFrom();
            break;
        }
    }
    m11=m1.lower_bound(st);
    m12=m1.upper_bound(st);
    if(m11==m12)
    {
        cout<<"无该车次信息"<<endl;
        return ;
    }
    for(mn=m11; mn!=m12; mn++)
    {
        s1=St[mn->second].getStationTrain();
        if(s1==t)
        {
            t2=St[mn->second].getTimeTo();
            break;
        }
    }
    //cout<<t1<<" "<<t2<<endl;
    m21=m2.lower_bound(t);
    m22=m2.upper_bound(t);
    //m22--;
    for(mn=m21; mn!=m22; mn++)
    {
        num=St[mn->second].getTicketNum();
        t3=St[mn->second].getTimeFrom();
        if(t1+t3)
        {
            num--;
            St[mn->second].setTicketNum(num);
        }
        if((t1<t3)&&(t2>t3))
        {
            num--;
            St[mn->second].setTicketNum(num);
        }
    }
    Jilu J(pn,t,sf,st,t1,t2);
    Ji.push_back(J);
    m4.insert(make_pair(J.getPassengername(),Ji.size()-1));
}

/*int main()
{
    PassengerOp P;
    P.printjilu();
    P.printstation();
    P.changeticket();
    P.printjilu();
    P.printstation();
}*/

int main()
{
    ios::sync_with_stdio(false);
    AdminOp A;
    PassengerOp P;
    /*A.printjilu();
    A.printpassenger();
    A.printstation();
    A.searchbystation();
    A.searchbytrain();
    A.searchjilu();
    A.addpassenger();
    A.managepassenger();
    A.printpassenger();
    A.addstation();
    A.deletestation();
    A.modifystation();
    P.printjilu();
    P.buyticket();
    P.printjilu();
    P.returnticket();
    P.printjilu();
    P.changeticket();
    P.printjilu();*/
    A.printjilu();
    P.returnticket();
    P.printjilu();
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值