公交车管理系统

来源:互联网 发布:西点和西餐知乎 编辑:程序博客网 时间:2024/04/29 13:37

案例目的

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

案例覆盖技能点

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


原创粉丝点击