zoukankan      html  css  js  c++  java
  • 公交车管理系统

    案例目的

    某公交公司有车辆若干。现在,需要存储这些公交的编号、名称、类型、起点站和终点站,并显示全部信息。 类型包括普通车、空调车、双层车等。

    案例覆盖技能点

    a) C++基本语法和常用算法

    b) 文件操作

    c) 面向对象的使用

    案例需求 

    1)公交编号在生成公交车信息时同时生成,每输入一辆公交车信息编号顺序加1。 

    2)能按名称或者编号显示、查找、增加、删除和保存各类公交的信息。 

    功能列表:

    1)添加车辆

    添加车辆由键盘输入进行。输入时,程序会自动判断输入信息是否重复,若输入值不符合要求,则提示无法录入

    2)增加车辆信息

    在类中包含了增加车辆信息的函数,可以将录入的车辆信息增加到信息总表中。

    3)删除车辆信息

    删除车辆信息,这个车辆之后的车辆编号会减一。

    4)查找车辆信息

    查找车辆可以由编号、名称的方式完成。

    5)显示所有车辆信息以表格格式显示。

    code:

    #include <iostream>
    #include <cstdlib>
    #include <string.h>
    #include <stdio.h>
    #include<iomanip>
    #include <fstream>
    using namespace std;
    #define N 20    //公交车最多辆数
    class Bus
    {
        /*
         Bus类,用来描述车辆属性,包括number()
         name()、type()、start()、terminal()
        */
    public:
        int number;     //编号
        char name[10];    //名称(即路线)
        char type[10];    //车型
        char start[10];   //起点站
        char terminal[10];//终点站
        /*
        默认构造函数,将对象所有属性赋初值0或空字符串
        */
        Bus()
        {
            number=0;
            name[0]='0';
            type[0]='0';
            start[0]='0';
            terminal[0]='0';
        }
        Bus(int number1,char *name1,char *type1,char *start1,char *terminal1)
        {
            number=number1;
            strcpy(name,name1);
            strcpy(type,type1);
            strcpy(start,start1);
            strcpy(terminal,terminal1);
        }
        ~Bus();    //析构函数
    
    };
    
    class Company
    {
        /*
        拥有指向Bus类的对象数组指针,和所有的车辆信息处理函数
        */
    public:
        int size;
        Bus *bus[N];
        Bus *bus1;
    
        Company();
        ~Company();
        void welcome();                            //欢迎界面
        void Keyboard_entry();                     //键盘录入主菜单
        void AddBus();                             //增加车辆
        bool AddBus1(int number,char *name,char *type,char *start,char *terminal); //增加车辆
        void DeleteBus();                          //删除车辆
        bool DeleteBus2(int number);
        void FindBusNum();
        bool FindBusNum1(int number);                       //判断车辆信息是否存在,按序号查找车辆
        void FindBusNam();
        bool FindBusNam1(char *name1);                      //判断车辆信息是否存在,按名称查找车辆
        void FindBusStart();
        bool FindBusStart1(char *start1);                   //判断车辆信息是否存在,按始发站查找车辆
        void FindBusterminal();
        bool FindBusterminal1(char *terminal1);             //判断车辆信息是否存在,按终点站查找车辆
        void DispAll();                                     //显示全部车辆
        void show();                                        //用于删除车辆的显示全部车辆
        void Check_station();                               //查看所有车站
        void Save_file();                                   //存储到文件
        void File_input();                                  //从文件读取
    };
    
    Company::Company()                                      //Company类构造函数,初始化bus类
    {
        size=0;
        for(int i=0; i<N; i++)
        {
            bus[i]=NULL;
        }
    }
    
    Company::~Company() {}                                 //Company类析构函数
    
    void Company::welcome()                                //欢迎界面,主菜单
    {
        int choose;
        cout<<"------------------------------"<<endl;
        cout<<"    欢迎使用公交车管理系统    "<<endl;
        cout<<"------------------------------"<<endl<<endl;
        cout<<"请选择数据来源:"<<endl;
        cout<<"1、从文件输入"<<endl;
        cout<<"2、键盘录入"<<endl;
        cin>>choose;
        if(choose==1)
        {
            File_input();                                   //从文件读取信息
        }
        else if(choose==2)
        {
            Keyboard_entry();                               //键盘录入信息
        }
        else
        {
            cout<<"输入有误!请重新输入"<<endl;
            welcome();
        }
    }
    
    void Company::Keyboard_entry()                          //键盘录入,主菜单
    {
    
        int order;
        cout<<"请选择您要进行的操作:"<<endl;
        cout<<"    1、添加车辆"<<endl;
        cout<<"    2、删除车辆"<<endl;
        cout<<"    3、显示全部车辆"<<endl;
        cout<<"    4、查找车辆"<<endl;
        cout<<"    5、查看所有车站"<<endl;
        cout<<"    6、存储到文件"<<endl;
        cout<<"    7、退出程序"<<endl;
        cin>>order;
        switch(order)
        {
        case 1:
            AddBus();                    //增加车辆
            break;
        case 2:
            DeleteBus();                 //删除车辆
            break;
        case 3:
            DispAll();                   //显示全部车辆
            break;
        case 4:
            cout<<"请选择查找车辆的方式:"<<endl;
            cout<<"1、按名称查找"<<endl;
            cout<<"2、按编号查找"<<endl;
            cout<<"3、按始发站查找"<<endl;
            cout<<"4、按终点站查找"<<endl;
            cin>>order;
            if(order==1)
                FindBusNam();                   //判断车辆信息是否存在,按名称查找车辆
            else if(order==2)
                FindBusNum();                   //判断车辆信息是否存在,按序号查找车辆
            else if(order==3)
                FindBusStart();                 //判断车辆信息是否存在,按始发站查找车辆
            else if(order==4)
                FindBusterminal();              //判断车辆信息是否存在,按终点站查找车辆
            else
                cout<<"输入错误!退出程序..."<<endl;
            exit(1);
            break;
        case 5:
            Check_station();                    //查看所有车站
            break;
        case 6:
            Save_file();                        //存储到文件
            break;
        case 7:
            cout<<"您已退出程序!"<<endl;
            exit(1);
        default:
            cout<<"输入错误,请重新输入"<<endl;
            Keyboard_entry();
        }
    }
    
    void Company::File_input()
    {
        // 需要运用读入文件知识实现,
        int i=0;
        Bus *BB;
        ifstream infile("GJ.txt",ios::in);
        //以输入方式打开磁盘文件
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        for(i=0; i<size; i++)
        {
            BB=bus[i];
            infile>>BB->number>>BB->name>>BB->start>>BB->terminal;
            cout<<"添加公交车"<<BB->name<<"成功"<<endl;
        }
        cout<<"读取到"<<i<<"组数据"<<endl;
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry(); //读入文件后返回键盘录入
    }
    
    bool Company::AddBus1(int number,char *name,char *type,char *start,char *terminal)
    {
        int i;
        Bus *bb;
        bb= new Bus(number,name,type,start,terminal);
        for(i=0; i<size; i++)
        {
            bus1=bus[i];
            if(strcmp(bus1->name,name)==0)
            {
                if(strcmp(bus1->type,type)==0)
                {
                    if(strcmp(bus1->start,start)==0)
                    {
                        if(strcmp(bus1->terminal,terminal)==0)
                        {
                            cout<<"此公交车信息已存在,录入失败!"<<endl;
                            return false;
                        }
                    }
                }
            }
        }
        if(i==size)
        {
            bus[size]=bb;
            size++;
            cout<<"车辆信息录入成功!"<<endl;
            return true;
        }
        else
            return false;
    }
    
    void Company::AddBus()   //增加车辆
    {
        /*
        Company类的函数,用于判断输入的车辆信息是否重复,并将没有重复的信息增加到信息总表中去
        */
        int number22;       //编号
        char name22[10];    //名称(即路线)
        char type22[10];    //车型
        char start22[10];   //起点站
        char terminal22[10];//终点站
        int type;
        char ty[10];
        cout<<"-->>添加车辆"<<endl;
        cout<<"您正在增加车辆"<<endl;
        cout<<"请输入车辆编号:"<<endl;
        cin>>number22;
        cout<<"请输入车辆名称:"<<endl;
        cin>>name22;
        cout<<"请输入车辆类型:"<<endl;
        cout<<"0.其他 1.普通车 2.空调车 3.双层车"<<endl;
        cin>>type;
        switch(type)
        {
        case 0:
            strcpy(ty,"其他类型");
            strcpy(type22,ty);
            break;
        case 1:
            strcpy(ty,"普通车");
            strcpy(type22,ty);
            break;
        case 2:
            strcpy(ty,"空调车");
            strcpy(type22,ty);
            break;
        case 3:
            strcpy(ty,"双层车");
            strcpy(type22,ty);
            break;
        default:
            cout<<"输入有误!"<<endl;
            AddBus();
        }
        cout<<"请输入车辆起点:"<<endl;
        cin>>start22;
        cout<<"请输入车辆终点:"<<endl;
        cin>>terminal22;
        AddBus1(number22,name22,type22,start22,terminal22);
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry();
    }
    
    bool Company::DeleteBus2(int  number)
    {
        int i;
        for(i=0; i<size; i++)
        {
            bus1=bus[i];
            if(bus1->number==number)
            {
                for(int j=i; j<size; j++)
                {
                    bus1=bus[j];
                    (bus1->number)--;
                    bus[j]=bus[j+1];
                    if(j==size-1)
                        number=bus1->number ;
                }
                cout<<"该车信息已删除!"<<endl;
                size--;
                return true;
            }
        }
        if(i==size)
        {
            cout<<"未找到该车信息,无法删除!"<<endl;
            return false;
        }
        return false;
    }
    
    void Company::DeleteBus()     //删除车辆
    {
        /*
        Company类的函数,根据用户输入的车辆名称判断车辆信息是否存在,
        若存在,查找并显示所有此名称的车辆,再提示用户根据显示出的车辆信息选择要删车的车辆
        */
        int num;
        cout<<"-->>删除车辆"<<endl;
        show();
        cout<<"请选择要删除的车辆的编号:"<<endl;
        cin>>num;
        DeleteBus2(num);
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry();
    }
    
    bool Company::FindBusNum1(int number)
    {
        int i;
        for(i=0; i<size; i++)
        {
            bus1=bus[i];
            if(bus1->number==number)
            {
                cout<<bus1->number<<"号公交车的信息为:"<<endl;
                cout<<setiosflags(ios::left)<<"          *         "<<setw(8)<<"编号"<<setw(8)<<"名称"<<setw(8)<<"类型"<<setw(8)<<"起点站"<<setw(8)<<"终点站"<<"*"<<endl;
                cout<<setiosflags(ios::left)<<"          *         "<<setw(8)<<bus1->number<<setw(8)<<bus1->name<<setw(8)<<bus1->type<<setw(8)<<bus1->start<<setw(8)<<bus1->terminal<<setw(8)<<"*"<<endl;
                return true;
            }
        }
        if(i==size)
        {
            cout<<"无该车任何信息!"<<endl;
            return false;
        }
        return false;
    }
    
    void Company::FindBusNum()      //判断车辆信息是否存在,查找车辆
    {
        int account;
        cout<<"请输入要查找的车辆编号:";
        cin>>account;
        FindBusNum1(account);
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry();
    }
    
    bool Company::FindBusNam1(char *name1)
    {
        for(int i=0; i<size; i++)
        {
            bus1=bus[i];
            if(strcmp(bus1->name,name1)==0)
            {
                cout<<"路线名称为"<<bus1->name<<"的公交车的信息为:"<<endl;
                cout<<setiosflags(ios::left)<<"          *         "<<setw(8)<<"编号"<<setw(8)<<"名称"<<setw(8)<<"类型"<<setw(8)<<"起点站"<<setw(8)<<"终点站"<<"*"<<endl;
                cout<<setiosflags(ios::left)<<"          *         "<<setw(8)<<bus1->number<<setw(8)<<bus1->name<<setw(8)<<bus1->type<<setw(8)<<bus1->start<<setw(8)<<bus1->terminal<<setw(8)<<"*"<<endl;
                return true;
            }
            if(i==size)
            {
                cout<<"无该车任何信息!"<<endl;
                return false;
            }
            return false;
        }
    }
    
    void Company::FindBusNam()      //判断车辆信息是否存在,查找车辆
    {
        char name11[10];
        cout<<"请输入要查找车辆的名称:"<<endl;
        cin>>name11;
        FindBusNam1(name11);
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry();
    }
    
    bool Company::FindBusStart1(char *start1)
    {
        for(int i=0; i<size; i++)
        {
            bus1=bus[i];
            if(strcmp(bus1->start,start1)==0)
            {
                cout<<"始发站为"<<bus1->start<<"的公交车的信息为:"<<endl;
                cout<<setiosflags(ios::left)<<"                *"<<setw(8)<<"编号"<<setw(8)<<"名称"<<setw(8)<<"类型"<<setw(8)<<"起点站"<<setw(8)<<"终点站"<<"*"<<endl;
                cout<<setiosflags(ios::left)<<"                *"<<setw(8)<<bus1->number<<setw(8)<<bus1->name<<setw(8)<<bus1->type<<setw(8)<<bus1->start<<setw(8)<<bus1->terminal<<setw(8)<<"*"<<endl;
                return true;
            }
            if(i==size)
            {
                cout<<"无该车任何信息!"<<endl;
                return false;
            }
            return false;
        }
    }
    
    void Company::FindBusStart()      //判断车辆信息是否存在,查找车辆
    {
        char start11[10];
        cout<<"请输入要查找车辆的始发站:"<<endl;
        cin>>start11;
        FindBusStart1(start11);
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry();
    }
    
    bool Company::FindBusterminal1(char *terminal1)
    {
        for(int i=0; i<size; i++)
        {
            bus1=bus[i];
            if(strcmp(bus1->terminal,terminal1)==0)
            {
                cout<<"终点站为"<<bus1->terminal<<"的公交车的信息为:"<<endl;
                cout<<setiosflags(ios::left)<<"                *"<<setw(8)<<"编号"<<setw(8)<<"名称"<<setw(8)<<"类型"<<setw(8)<<"起点站"<<setw(8)<<"终点站"<<"*"<<endl;
                cout<<setiosflags(ios::left)<<"                *"<<setw(8)<<bus1->number<<setw(8)<<bus1->name<<setw(8)<<bus1->type<<setw(8)<<bus1->start<<setw(8)<<bus1->terminal<<setw(8)<<"*"<<endl;
                return true;
            }
            if(i==size)
            {
                cout<<"无该车任何信息!"<<endl;
                return false;
            }
            return false;
        }
    }
    
    void Company::FindBusterminal()      //判断车辆信息是否存在,按终点站查找车辆
    {
        char terminal11[10];
        cout<<"请输入要查找车辆的终点站:"<<endl;
        cin>>terminal11;
        FindBusterminal1(terminal11);
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry();
    }
    
    void Company::DispAll()              //显示全部车辆
    {
        cout<<setiosflags(ios::left)<<"           *       "<<setw(8)<<"编号"<<setw(8)<<"名称"<<setw(8)<<"类型"<<setw(8)<<"起点站"<<setw(8)<<"终点站"<<"*"<<endl;
        for(int i=0; i<size; i++)
        {
            bus1=bus[i];
            cout<<setiosflags(ios::left)<<"           *       "<<setw(8)<<bus1->number<<setw(8)<<bus1->name<<setw(8)<<bus1->type<<setw(8)<<bus1->start<<setw(8)<<bus1->terminal<<setw(8)<<"*"<<endl;
    
        }
        cout<<endl;
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry();
        /*
        Company类的函数,输出所有车辆信息
        */
    }
    
    void Company::show()                //显示车辆信息,用于删除车辆
    {
        cout<<setiosflags(ios::left)<<"           *       "<<setw(8)<<"编号"<<setw(8)<<"名称"<<setw(8)<<"类型"<<setw(8)<<"起点站"<<setw(8)<<"终点站"<<"*"<<endl;
        for(int i=0; i<size; i++)
        {
            bus1=bus[i];
            cout<<setiosflags(ios::left)<<"           *       "<<setw(8)<<bus1->number<<setw(8)<<bus1->name<<setw(8)<<bus1->type<<setw(8)<<bus1->start<<setw(8)<<bus1->terminal<<setw(8)<<"*"<<endl;
    
        }
        cout<<endl;
    }
    
    void Company::Check_station()         //查看所有车站
    {
        cout<<"所有公交车站有:"<<endl;
        for(int i=0;i<size;i++)
        {
            bus1=bus[i];
            cout<<bus1->start<<", "<<bus1->terminal<<"  ";
        }
        cout<<endl<<endl;
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry();
    }
    
    void Company::Save_file()            //存储到文件
    {
        ofstream outfile("GJ.txt",ios::out);
        if(!outfile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        for(int i=0; i<size; i++)
        {
            outfile<<bus[i]<<endl;
        }
        outfile.close();
        cout<<"读入文件成功"<<endl<<endl;
        cout<<"请按任意键继续..."<<endl;
        fflush(stdin);
        getchar();
        Keyboard_entry(); //读入文件后返回键盘录入
    }
    
    int main()
    {
        Company bus;
        bus.welcome();
    }
    


  • 相关阅读:
    C. Tesla (模拟 + 思维)
    E
    E. Ehab's REAL Number Theory Problem (bfs + 思维)
    uva 12307
    P4249 [WC2007]剪刀石头布
    luoguP4003 无限之环
    luoguP4068 [SDOI2016]数字配对
    有源汇有上下界最小流
    有源汇有上下界最大流
    无源汇有上下界可行流
  • 原文地址:https://www.cnblogs.com/riskyer/p/3293990.html
Copyright © 2011-2022 走看看