m0_57323252 2021-07-05 12:15 采纳率: 100%
浏览 450
已采纳

c++汽车站车票管理

要求设计车票管理系统供管理员和顾客使用。主窗口包含1.管理员登录2.普通顾客登录3.退出,请输入选择。管理员窗口包含1.增加车次2.查看所有车次信息3.车辆信息查询4.注销车次5.退出,请输入选择。普通顾客窗口包含1.车辆信息查询2.购买车票3.退票4.退出,请输入选择:

  • 写回答

1条回答 默认 最新

  • CSDN专家-黄老师 2021-07-05 12:21
    关注
    #include<iostream>
    #include<fstream>
    #include<string>
    #include<iomanip>
    #include<time.h>
    using namespace std;
    class Bus_infor{
        private:
            static int Bus_no;
            char start[20],end[20];
            int Bus_order,all_tickted;
            int tickted;
            int Hour_start,Minute_start;
            float Gohour;
        public:
            Bus_infor();
            ~Bus_infor();
            Bus_infor *next;
            void input();
            void input(ifstream &is);//读取函数
            void output();
            void output(ofstream &os);//写入函数
            void Order_tickt(int n);
            void Unorder_tickt(int n);
            void Gettime_start();
            bool Gettime();
            inline int Get_all_tickted(){return all_tickted;}
            int Get_tickted(){return tickted;}
            int Get_bus_order(){return Bus_order;}
            string Get_end()const;
    };
    int Bus_infor::Bus_no=1;
    Bus_infor::Bus_infor(){
        Bus_no++;
        tickted=0;
    }
    Bus_infor::~Bus_infor(){
        Bus_no--;
    }
    void Bus_infor::input(){
        cout<<"\t\t\t请按提示输入:"<<endl;
        cout<<"输入班次:";
        while(1){
            cin>>Bus_order;
            if(cin.fail()){
                cout<<"\n班次输入错误,请重新输入:";
                cin.clear();
                cin.get();
            }
            else break;
        }
        cout<<"请输入车的额定座位数:";
        while(1){
            cin>>all_tickted;
            if(cin.fail()){
                cout<<"\n座位数输入错误,请重新输入:";
                cin.clear();
                cin.get();
            }
            else break;
        }
        Gettime_start();
        cout<<"请输入行车时间:";
        while(1){
            cin>>Gohour;
            if(cin.fail()){
                cout<<"\n行车时间输入错误,请重新输入:";
                cin.clear();
                cin.get();
            }
            else break;
        }
        cout<<"请输入起始站和终点站:";
        cin>>start;
        cin>>end;
        cout<<"是否清空售票(Y/N)?";
        char a;cin>>a;
        if(a=='Y'||a=='y')tickted=0;
    }
     
    void Bus_infor::input(ifstream &is){
        is>>Bus_order>>Hour_start>>Minute_start>>start>>end>>Gohour>>all_tickted>>tickted;
        is.get();
    }
     
    void Bus_infor::output(){
        cout<<" "<<Bus_order<<"\t";
        if(Minute_start==0)
        {
            cout<<Hour_start<<":"<<Minute_start<<"0\t";
        }
        else
        {
        cout<<Hour_start<<":"<<Minute_start<<"\t";
        }
        cout<<start<<"\t"<<end<<"\t"<<Gohour<<"\t  "<<all_tickted<<"\t  "<<tickted;
        if(!Gettime())
             cout<<"\t此班飞机已出发!"<<endl;
        else
              cout<<"\t 此班飞机未出发!"<<endl;
    }
     
    void Bus_infor::output(ofstream &os){
        os<<setw(6)<<Bus_order<<setw(15)<<Hour_start
          <<setw(15)<<Minute_start<<setw(15)<<start
          <<setw(6)<<end<<setw(15)<<Gohour
          <<setw(15)<<all_tickted<<setw(15)<<tickted<<endl;
    }
     
    void Bus_infor::Gettime_start(){
        cout<<"请输入始发时间(时分)";
        while(1){
            cin>>Hour_start>>Minute_start;
            if(cin.fail()){
                cout<<"\n输入时间格式错误,请重新输入!";
                cin.clear();
                cin.get();
            }
            else if(Hour_start<0||Hour_start>24||Minute_start<0||Minute_start>60)
                      cout<<"\n输入时间格式出错,请重新输入:";
            else break;
        }
    }
     
    bool Bus_infor::Gettime(){
        struct tm *local;
        time_t t;
        t=time(NULL);
        local=localtime(&t);//获取当前系统时间
        if((local->tm_hour<Hour_start)||(local->tm_hour==Hour_start&&local->tm_min<=Minute_start))return 1;
        else return 0;
    }
     
    void Bus_infor::Order_tickt(int n){
        tickted+=n;
    }
    void Bus_infor::Unorder_tickt(int n){
        tickted-=n;
    }
    string Bus_infor::Get_end()const{
        string s=end;
        return s;
    }
    //====================另外一个类出来啦=====================================================================
    class Bus_link{
        public:
            Bus_link(){head=new Bus_infor;head->next=NULL;key=0;}
            ~Bus_link(){delete head;}
            void input();
            void mend();//修改车票信息
            void del();
            int find(Bus_infor **p,int num,char *pn);//查找函数
            void  found();
            void show();
            void Order();
            void Unorder();
            void save();
            void begin();
            void clear();
            void about();
            char mainmenu();
            void setkey(int k){key=k;}
            int getkey(){return key;}
        private:
            Bus_infor *head;
            int key;
            int password;
    };
    void Bus_link::input(){
        if(password==1){
            Bus_infor *p,*p2=NULL;
            p=head;
            int n=1;
            while(p->next)
                   p=p->next;
            while(n){
                p2=new Bus_infor;
                p2->input();
                p->next=p2;
                p2->next=NULL;
                p=p->next;
                Bus_link::setkey(1);
                cout<<"\t\t请继续,按返回:";
                cin>>n;
                if(!cin)throw string("输入数据错误");
            }
        }
        else cout<<"\t\t对不起,游客不能录入车票信息"<<endl;
    }
    void Bus_link::show() {
        cout<<"客车基本信息如下:"<<endl
            <<"班次发车时间 起始站 终点站 行车时间 额定载量 已订票人数 当前状况"<<endl;
        Bus_infor *p;
        p=head;
        while(p->next){
            (p->next)->output();
            p=p->next;
        }
    }
     
    void Bus_link::found(){
        Bus_infor *p;
        int num,n;
        char name[20];
        do{
            cout<<"\t\t1:按班次查询,2:按终点站查询:";
            cin>>n;
            if(!cin)throw string("数据输入错误");
        }while(n<1||n>2);
        if(n==1){
            cout<<"\t\t\t输入班次:";
            cin>>num;
            if(!cin)throw string("数据输入错误");
        }
        if(n==2){
            cout<<"\t\t\t输入终点站:";
            cin>>name;
            if(!cin)throw string("数据输入错误");
        }
        if(!find(&p,num,name)){
            cout<<"\t\t找不到你呀查找的内容!"<<endl;
            return;
        }
    }
     
    int Bus_link::find(Bus_infor **p1,int num,char *pn){
        Bus_infor *p;
        p=head;
        int t=0;
        while(p->next){
            (*p1)=p;
            if((p->next)->Get_bus_order()==num||(p->next)->Get_end()==pn){
                cout<<"客户基本信息如下:"<<endl
                    <<"班次发车时间 起始站 终点站 行车时间 额定载量 已订票人数 当前状况"<<endl;
                (p->next)->output();
                t=1;
            }
            p=p->next;
        }
        return t;
    }
     
    void Bus_link::del(){
        if(password==1){
            Bus_infor *p,*p2;
            int num;char name[20];
            cout<<"\t\t输入班次号";
            cin>>num;
            if(!cin)throw string("数据输入错误");
            if(!find(&p,num,name)){
                cout<<"\t\t找不到你要删除的内容!"<<endl;
                return;
            }
            cout<<"\n\t\t确定删除(Y/N)?";
            char a;cin>>a;
            if(a=='Y'||a=='y'){
                p2=p->next;
                p->next=p2->next;
                delete p2;
                Bus_link::setkey(1);
            }
        }
        else cout<<"\n\t对不起,游客不能删除车票信息"<<endl;
    }
     void Bus_link::mend() {
         if(password==1){
             Bus_infor *p;
             int num;
             char name[20];
             cout<<"\t\t\t输入班次号:";
             cin>>num;
             if(!cin)throw string("数据输入错误!");
            if(!find(&p,num,name)){
                cout<<"\t\t找不到你要想修改的内容!"<<endl;
                return;
            }
            (p->next)->input();
            Bus_link::setkey(1);
         }
        else cout<<"\n\t对不起,游客不能删除车票信息"<<endl;
     }
     
     void Bus_link::Order(){
         if(password==1){
              Bus_infor *p;
              cout<<"\n\t\t确定购票(Y/N)?";
               char a;cin>>a;
               if(a=='y'||a=='Y'){
                   int num;
                   cout<<"\n\t\t输入班次号:";
                   cin>>num;
                   if(!cin)throw string("输入数据错误");
                if(!find(&p,num,"^")){
                     cout<<"\n\t\t找不到你要订票的车辆信息!"<<endl;return;
                }
                p=p->next;
                if(!(p->Gettime())){
                    cout<<"\n\t\t你要订票的车辆已经出发"<<endl;return;
                }
                cout<<"\n\t\t输入要定的票数:";
                int n;cin>>n;
                if(!cin)throw string("输入数据错误");
                if((p->Get_tickted()+n)<=p->Get_all_tickted())
                         p->Order_tickt(n);
                else cout<<"\n\t\t对不起,没有足够的票数"<<endl;
            }
               else if(a=='n'||a=='N')cout<<"谢谢使用"<<endl;
                else cout<<"\n\t\t输入字符不确定"<<endl;
                Bus_link::setkey(1);
               }
               else cout<<"\n\t\t对不起,订购车票请在管理员处购买"<<endl;
    }
     
    void Bus_link::Unorder()
    {
        if(password==1){
            Bus_infor *p;
            cout<<"\n\t\t确定退票(Y/N)?";
            char X;cin>>X;
            if(X=='Y'||X=='y'){
                int num;
                cout<<"\n\t\t输入班次号:";
                cin>>num;
                if(!cin)throw string("数据输入错误");
                if(!find(&p,num,"^")){
                    cout<<"\n\t\t找不到你要退票的车辆内容!"<<endl;return;
                }
                if(!(p->Gettime())){
                    cout<<"\n\t\t你要退票的车辆已经出发!"<<endl;
                    return;
                }
                cout<<"\n\t\t输入要退的票数 ";
                int n;cin>>n;
                if(!cin)throw string("数据输入错误");
                p=p->next;
                if((p->Get_tickted()-n)>=0)p->Unorder_tickt(n);
                else cout<<"\n\t\t对不起,数据出错!"<<endl;
            }
            else if(X=='n'||X=='N')cout<<"谢谢使用"<<endl;
            else cout<<"\n\t\t输入字符不确定"<<endl;
            Bus_link::setkey(1);
        }
         else cout<<"\n\t\t对不起,退还车票请在管理员处退还"<<endl;
    }
     
     
    void Bus_link::save(){
        if(password==1){
            Bus_infor *p;
            p=head;
            ofstream os("bus.txt",ios::out|ios::binary|ios::ate);//文件以输出方式打开
            if(Bus_link::getkey()==1) {
                while(p->next){
                    (p->next)->output(os);
                    p=p->next;
                }
            }
            cout<<"\t\t\t文件已保存"<<endl;
            Bus_link::setkey(0);
        }
        else cout<<"\n\t\t对不起,游客无法保存车票信息"<<endl;
    }
     
    void Bus_link::about() {
        cout<<endl<<"关于车票保管系统"<<endl<<"-------------"<<endl;
        cout<<"使用说明:"<<endl;
        cout<<"\t1.请按照提示输入正确格式,以保证系统正常运行;"<<endl;
    }
     
    void Bus_link::begin(){
        password=0;
        Bus_infor *p,*p2;
        p=head;
        clear();
        long t;
        ifstream is("bus.txt",ios::in|ios::binary|ios::ate);//以输入方式打开
        if(!is){
            ofstream os("bus.txt",ios::out);//以输出方式打开
            os.close() ;//关闭文件
            return;
        }
        int num=-1;
        while(1){
            num=-1;
            t=is.tellg();//记录当前位置
            is>>num;
            is.seekg(t);//移动到当前位置
            if(num<0){
                is.close();
                return ;
            }
            p2=new Bus_infor;
            p2->input(is);//输入is对象内容
            p->next=p2;
            p2->next=NULL;
            p=p->next;
        }
    }
     
    void Bus_link::clear(){
        Bus_infor *p,*p2;
        p=head->next;
        while(p){
            p2=p;
            p=p->next;
            delete p2;
        }
    }
     
    char Bus_link::mainmenu(){
        struct tm *local;
        char s1[128];
        time_t t;
        t=time(NULL);
        local=localtime(&t);
        strftime(s1,128,"%Y-%m-%d %H:%M",local);//按照指定的格式,把 时间保存在s1字符串中
        string s;//定义字符串,来判断功能选择是否输入错误
        cout<<"\n\n--------欢迎使用车票管理系统----------"<<endl<<endl;
        cout<<"==========================================="<<endl;
        cout<<"||========================================||"<<endl;
        cout<<"||1.录入车票信息       2.浏览车票信息     ||"<<endl;
        cout<<"||3.查询车票信息       4.删除车票信息     ||"<<endl;
        cout<<"||5.修改车票信息       6.订购车票信息     ||"<<endl;
        cout<<"||7.退还车票信息       8.保存车票信息     ||"<<endl;
        cout<<"||9.关于车票系统       0.退出系统         ||"<<endl;
        cout<<"||========================================||"<<endl;
        cout<<"============================================"<<endl;
        cout<<"\t\t\t\t       "<<s1<<endl<<endl;
        while(password==0){
            cout<<"\t\t请选择用户(1。管理员;2.游客):";
            int n;cin>>n;
            if(!cin)throw string("数据输入错误");
            if(n==1){
                cout<<"\n\t\t请输入管理员密码:";
                int m;cin>>m;
                if(m==123456){
                    password=1;
                    cout<<endl;
                    break;
                }
                else cout<<"\n\t\t密码输入不正确\n"<<endl;
            }
            else {
                 password=2;//游客身份
                 break;
            }
        }
        cout<<"           请选择功能按钮:";
        while(true){
            cin>>s;
            if(s.length()!=1||s[0]<'0'||s[0]>'9')//s.length()返回字符串长度
                  cout<<"输入错误,请重新选择功能按钮:";
                  else break;
        }
        return s[0];
    }
    //============================主函数来啦================
    int main(){
        Bus_link pp;
        int k=1;
        string s;
        pp.begin();
        try{
            while(k==1){
                system("cls");
                s=pp.mainmenu();
                switch(s[0]){
                     case '1':pp.input();break;//录入车票信息
                    case '2':pp.show();break;//浏览车票信息
                    case '3':pp.found();break;// 查询车票信息
                    case '4':pp.del();break;//删除车票信息
                    case '5':pp.mend();break;//修改车票信息
                    case '6':pp.Order();break;//订购车票
                    case '7':pp.Unorder();break;//退还车票信息
                    case '8':pp.save();break;//保存 车票信息
                    case '9':pp.about();break;//关于车票系统
                    case '0':k=0;break;
                }
                if(k==1){
                    cout<<"\n\t\t\t是否返回主菜单? (1.是 2.不是):";
                    cin>>k;
                    if(!cin)throw string ("数据输入错误");
                }
                if(k==0){
                    if(pp.getkey()==1){
                        cout<<"\t\t\t是否保存?(1.保存 0.不保存):";
                        cin>>k;
                        if(!cin)throw string("数据输入错误");
                        if(k==1)
                            pp.save();
                        pp.clear();
                        k=0;
                    }
                }
            }
        }
        catch(string s){
              cout<<s<<"为保护系统不崩溃,将自退出系统!"<<endl;
              system("pause");
        }
    return 0;
    }
    

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥20 关于#Mathcad符号引擎无响应#的问题,如何解决?
  • ¥50 爬虫预算充足,跪巨佬