公交车管理系统
案例目的
某公交公司有車輛若干。現(xiàn)在,需要存儲(chǔ)這些公交的編號(hào)、名稱、類型、起點(diǎn)站和終點(diǎn)站,并顯示全部信息。?類型包括普通車、空調(diào)車、雙層車等。
案例覆蓋技能點(diǎn)
a)?C++基本語(yǔ)法和常用算法
b)?文件操作
c)?面向?qū)ο蟮氖褂?/p>
案例需求?
1)公交編號(hào)在生成公交車信息時(shí)同時(shí)生成,每輸入一輛公交車信息編號(hào)順序加1。?
2)能按名稱或者編號(hào)顯示、查找、增加、刪除和保存各類公交的信息。?
功能列表:
1)添加車輛
添加車輛由鍵盤輸入進(jìn)行。輸入時(shí),程序會(huì)自動(dòng)判斷輸入信息是否重復(fù),若輸入值不符合要求,則提示無(wú)法錄入
2)增加車輛信息
在類中包含了增加車輛信息的函數(shù),可以將錄入的車輛信息增加到信息總表中。
3)刪除車輛信息
刪除車輛信息,這個(gè)車輛之后的車輛編號(hào)會(huì)減一。
4)查找車輛信息
查找車輛可以由編號(hào)、名稱的方式完成。
5)顯示所有車輛信息以表格格式顯示。
code:
#include <iostream> #include <cstdlib> #include <string.h> #include <stdio.h> #include<iomanip> #include <fstream> using namespace std; #define N 20 //公交車最多輛數(shù) class Bus {/*Bus類,用來(lái)描述車輛屬性,包括number()name()、type()、start()、terminal()*/ public:int number; //編號(hào)char name[10]; //名稱(即路線)char type[10]; //車型char start[10]; //起點(diǎn)站char terminal[10];//終點(diǎn)站/*默認(rèn)構(gòu)造函數(shù),將對(duì)象所有屬性賦初值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(); //析構(gòu)函數(shù)};class Company {/*擁有指向Bus類的對(duì)象數(shù)組指針,和所有的車輛信息處理函數(shù)*/ 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); //判斷車輛信息是否存在,按序號(hào)查找車輛void FindBusNam();bool FindBusNam1(char *name1); //判斷車輛信息是否存在,按名稱查找車輛void FindBusStart();bool FindBusStart1(char *start1); //判斷車輛信息是否存在,按始發(fā)站查找車輛void FindBusterminal();bool FindBusterminal1(char *terminal1); //判斷車輛信息是否存在,按終點(diǎn)站查找車輛void DispAll(); //顯示全部車輛void show(); //用于刪除車輛的顯示全部車輛void Check_station(); //查看所有車站void Save_file(); //存儲(chǔ)到文件void File_input(); //從文件讀取 };Company::Company() //Company類構(gòu)造函數(shù),初始化bus類 {size=0;for(int i=0; i<N; i++){bus[i]=NULL;} }Company::~Company() {} //Company類析構(gòu)函數(shù)void Company::welcome() //歡迎界面,主菜單 {int choose;cout<<"------------------------------"<<endl;cout<<" 歡迎使用公交車管理系統(tǒng) "<<endl;cout<<"------------------------------"<<endl<<endl;cout<<"請(qǐng)選擇數(shù)據(jù)來(lái)源:"<<endl;cout<<"1、從文件輸入"<<endl;cout<<"2、鍵盤錄入"<<endl;cin>>choose;if(choose==1){File_input(); //從文件讀取信息}else if(choose==2){Keyboard_entry(); //鍵盤錄入信息}else{cout<<"輸入有誤!請(qǐng)重新輸入"<<endl;welcome();} }void Company::Keyboard_entry() //鍵盤錄入,主菜單 {int order;cout<<"請(qǐng)選擇您要進(jìn)行的操作:"<<endl;cout<<" 1、添加車輛"<<endl;cout<<" 2、刪除車輛"<<endl;cout<<" 3、顯示全部車輛"<<endl;cout<<" 4、查找車輛"<<endl;cout<<" 5、查看所有車站"<<endl;cout<<" 6、存儲(chǔ)到文件"<<endl;cout<<" 7、退出程序"<<endl;cin>>order;switch(order){case 1:AddBus(); //增加車輛break;case 2:DeleteBus(); //刪除車輛break;case 3:DispAll(); //顯示全部車輛break;case 4:cout<<"請(qǐng)選擇查找車輛的方式:"<<endl;cout<<"1、按名稱查找"<<endl;cout<<"2、按編號(hào)查找"<<endl;cout<<"3、按始發(fā)站查找"<<endl;cout<<"4、按終點(diǎn)站查找"<<endl;cin>>order;if(order==1)FindBusNam(); //判斷車輛信息是否存在,按名稱查找車輛else if(order==2)FindBusNum(); //判斷車輛信息是否存在,按序號(hào)查找車輛else if(order==3)FindBusStart(); //判斷車輛信息是否存在,按始發(fā)站查找車輛else if(order==4)FindBusterminal(); //判斷車輛信息是否存在,按終點(diǎn)站查找車輛elsecout<<"輸入錯(cuò)誤!退出程序..."<<endl;exit(1);break;case 5:Check_station(); //查看所有車站break;case 6:Save_file(); //存儲(chǔ)到文件break;case 7:cout<<"您已退出程序!"<<endl;exit(1);default:cout<<"輸入錯(cuò)誤,請(qǐng)重新輸入"<<endl;Keyboard_entry();} }void Company::File_input() {// 需要運(yùn)用讀入文件知識(shí)實(shí)現(xiàn),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<<"組數(shù)據(jù)"<<endl;cout<<"請(qǐng)按任意鍵繼續(xù)..."<<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;}elsereturn false; }void Company::AddBus() //增加車輛 {/*Company類的函數(shù),用于判斷輸入的車輛信息是否重復(fù),并將沒有重復(fù)的信息增加到信息總表中去*/int number22; //編號(hào)char name22[10]; //名稱(即路線)char type22[10]; //車型char start22[10]; //起點(diǎn)站char terminal22[10];//終點(diǎn)站int type;char ty[10];cout<<"-->>添加車輛"<<endl;cout<<"您正在增加車輛"<<endl;cout<<"請(qǐng)輸入車輛編號(hào):"<<endl;cin>>number22;cout<<"請(qǐng)輸入車輛名稱:"<<endl;cin>>name22;cout<<"請(qǐng)輸入車輛類型:"<<endl;cout<<"0.其他 1.普通車 2.空調(diào)車 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,"空調(diào)車");strcpy(type22,ty);break;case 3:strcpy(ty,"雙層車");strcpy(type22,ty);break;default:cout<<"輸入有誤!"<<endl;AddBus();}cout<<"請(qǐng)輸入車輛起點(diǎn):"<<endl;cin>>start22;cout<<"請(qǐng)輸入車輛終點(diǎn):"<<endl;cin>>terminal22;AddBus1(number22,name22,type22,start22,terminal22);cout<<"請(qǐng)按任意鍵繼續(xù)..."<<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<<"未找到該車信息,無(wú)法刪除!"<<endl;return false;}return false; }void Company::DeleteBus() //刪除車輛 {/*Company類的函數(shù),根據(jù)用戶輸入的車輛名稱判斷車輛信息是否存在,若存在,查找并顯示所有此名稱的車輛,再提示用戶根據(jù)顯示出的車輛信息選擇要?jiǎng)h車的車輛*/int num;cout<<"-->>刪除車輛"<<endl;show();cout<<"請(qǐng)選擇要?jiǎng)h除的車輛的編號(hào):"<<endl;cin>>num;DeleteBus2(num);cout<<"請(qǐng)按任意鍵繼續(xù)..."<<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<<"號(hào)公交車的信息為:"<<endl;cout<<setiosflags(ios::left)<<" * "<<setw(8)<<"編號(hào)"<<setw(8)<<"名稱"<<setw(8)<<"類型"<<setw(8)<<"起點(diǎn)站"<<setw(8)<<"終點(diǎn)站"<<"*"<<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<<"無(wú)該車任何信息!"<<endl;return false;}return false; }void Company::FindBusNum() //判斷車輛信息是否存在,查找車輛 {int account;cout<<"請(qǐng)輸入要查找的車輛編號(hào):";cin>>account;FindBusNum1(account);cout<<"請(qǐng)按任意鍵繼續(xù)..."<<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)<<"編號(hào)"<<setw(8)<<"名稱"<<setw(8)<<"類型"<<setw(8)<<"起點(diǎn)站"<<setw(8)<<"終點(diǎn)站"<<"*"<<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<<"無(wú)該車任何信息!"<<endl;return false;}return false;} }void Company::FindBusNam() //判斷車輛信息是否存在,查找車輛 {char name11[10];cout<<"請(qǐng)輸入要查找車輛的名稱:"<<endl;cin>>name11;FindBusNam1(name11);cout<<"請(qǐng)按任意鍵繼續(xù)..."<<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<<"始發(fā)站為"<<bus1->start<<"的公交車的信息為:"<<endl;cout<<setiosflags(ios::left)<<" *"<<setw(8)<<"編號(hào)"<<setw(8)<<"名稱"<<setw(8)<<"類型"<<setw(8)<<"起點(diǎn)站"<<setw(8)<<"終點(diǎn)站"<<"*"<<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<<"無(wú)該車任何信息!"<<endl;return false;}return false;} }void Company::FindBusStart() //判斷車輛信息是否存在,查找車輛 {char start11[10];cout<<"請(qǐng)輸入要查找車輛的始發(fā)站:"<<endl;cin>>start11;FindBusStart1(start11);cout<<"請(qǐng)按任意鍵繼續(xù)..."<<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<<"終點(diǎn)站為"<<bus1->terminal<<"的公交車的信息為:"<<endl;cout<<setiosflags(ios::left)<<" *"<<setw(8)<<"編號(hào)"<<setw(8)<<"名稱"<<setw(8)<<"類型"<<setw(8)<<"起點(diǎn)站"<<setw(8)<<"終點(diǎn)站"<<"*"<<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<<"無(wú)該車任何信息!"<<endl;return false;}return false;} }void Company::FindBusterminal() //判斷車輛信息是否存在,按終點(diǎn)站查找車輛 {char terminal11[10];cout<<"請(qǐng)輸入要查找車輛的終點(diǎn)站:"<<endl;cin>>terminal11;FindBusterminal1(terminal11);cout<<"請(qǐng)按任意鍵繼續(xù)..."<<endl;fflush(stdin);getchar();Keyboard_entry(); }void Company::DispAll() //顯示全部車輛 {cout<<setiosflags(ios::left)<<" * "<<setw(8)<<"編號(hào)"<<setw(8)<<"名稱"<<setw(8)<<"類型"<<setw(8)<<"起點(diǎn)站"<<setw(8)<<"終點(diǎn)站"<<"*"<<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<<"請(qǐng)按任意鍵繼續(xù)..."<<endl;fflush(stdin);getchar();Keyboard_entry();/*Company類的函數(shù),輸出所有車輛信息*/ }void Company::show() //顯示車輛信息,用于刪除車輛 {cout<<setiosflags(ios::left)<<" * "<<setw(8)<<"編號(hào)"<<setw(8)<<"名稱"<<setw(8)<<"類型"<<setw(8)<<"起點(diǎn)站"<<setw(8)<<"終點(diǎn)站"<<"*"<<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<<"請(qǐng)按任意鍵繼續(xù)..."<<endl;fflush(stdin);getchar();Keyboard_entry(); }void Company::Save_file() //存儲(chǔ)到文件 {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<<"請(qǐng)按任意鍵繼續(xù)..."<<endl;fflush(stdin);getchar();Keyboard_entry(); //讀入文件后返回鍵盤錄入 }int main() {Company bus;bus.welcome(); }總結(jié)
- 上一篇: 崇阳职校计算机基础知识试题及答案,崇阳职
- 下一篇: 国产开源优秀新一代MPP数据库StarR