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


  • 相关阅读:
    hdu 1199 Color the Ball 离散线段树
    poj 2623 Sequence Median 堆的灵活运用
    hdu 2251 Dungeon Master bfs
    HDU 1166 敌兵布阵 线段树
    UVALive 4426 Blast the Enemy! 计算几何求重心
    UVALive 4425 Another Brick in the Wall 暴力
    UVALive 4423 String LD 暴力
    UVALive 4872 Underground Cables 最小生成树
    UVALive 4870 Roller Coaster 01背包
    UVALive 4869 Profits DP
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3295195.html
Copyright © 2011-2022 走看看