#include <iostream> #include <fstream> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <iomanip> //公交中最大的账户数量 #define MAXA 20000 #define INITNUMBER 1 int tol=0;//初始车辆为零 using namespace std; //欢迎界面 void welcome(); //用户界面 void mainFrame(); //管理员登陆 void login(); //统计总共的车辆数 int total=0; //用于查找车辆信息 int searchAccount(long accNumber); //用于文件的读取 void save(); //用于文件的读取 void read(); //用于卡号的自增加 long autoCreament(); class Bus { public: Bus(){number=0;} long number; //公交编号 char name[20]; //公交名称 char type[20];//公交类型 char start[20];//公交起点 char terminal[20];//公交终点 }; //公交车中所有信息 Bus array[MAXA]; void AddBus();//增加车辆信息 void DeleteBus_name();//删除车辆信息按照名字 void DeleteBus_number();//删除车辆信息按照数字 void FindBus_name(); //查找车辆信息通过站点 void FindBus_number(); //通过数字超找信息 void DispAll(); //显示所有信息 void playstop(); //显示所有的车站 void AddBus() { cout<<"请输入车辆名称:"<<endl; cin>>array[total].name; cout<<"请输入车辆类型:普通车 空调车 双层车 其他"<<endl; cin>>array[total].type; cout<<"请输入车辆起点"<<endl; cin>>array[total].start; cout<<"请输出车辆终点"<<endl; cin>>array[total].terminal; cout<<"添加公交车成功"<<endl; //写卡号 array[total].number=autoCreament(); cout<<"请您按任意键继续。。。。。。"<<endl; fflush(stdin); getchar(); total++; mainFrame(); } void welcome() { cout<<" +------------------------------------------+"<<endl; cout<<" |-----------欢迎登陆公交查询系统v1.0-------|"<<endl; cout<<" +------------------------------------------+"<<endl; } void save() { ofstream outfile("Bus.txt",ios::out); if(!outfile) { cerr<<endl<<"文件不存在!"<<endl; exit(1); } for(int i=0;i<total;i++) //依次写入文件 { outfile<<array[i].number<<" "<<array[i].name<<" "<<array[i].type<<" "<<array[i].start<<" "<<array[i].terminal<<endl; } outfile.close(); cout<<" 所有数据保存完毕!"<<endl; cout<<endl; mainFrame(); } void read() { ifstream account("Bus.txt",ios::in); if(!account) { cerr<<"open error!"<<endl; exit(1); } while(!account.eof()) { account>>array[total].number; account>>array[total].name; account>>array[total].type; account>>array[total].start; account>>array[total].terminal; total++; } total-=1; account.close(); cout<<" 所有数据载入完毕!"<<endl; cout<<endl; } //管理员登陆 void login() { char loginName[20]; char loginPwd[20]; int i; //测试 for(i=1;i<4;i++) { cout<<"请输入管理员账号:"; fflush(stdin); gets(loginName); cout<<"请输入管理员密码:"; fflush(stdin); gets(loginPwd); //判断 if(strcmp(loginName,"main")==0&&strcmp(loginPwd,"******")==0) { break; } else { if(i<3) { cout<<"账号或密码错误!请核对后重新输入\n"; cout<<"您还有"<<3-i<<"次机会重新输入账号和密码。"<<endl; } else { cout<<"密码错误超过3次,退出系统……\n"; exit(0); } } } } //用户界面 void mainFrame() { int order,num; cout<<"请选择您要进行的操作;\n"; cout<<" 1.添加车辆\n"; cout<<" 2.删除车辆\n"; cout<<" 3.显示全部车辆\n"; cout<<" 4.查找车辆\n"; cout<<" 5.查看所有车站\n"; cout<<" 6.存储到文件\n"; cout<<" 7.退出系统\n"; cout<<"请输入操作指令:"<<endl; cin>>order; switch(order) { case 1: AddBus(); break; case 2: cout<<"1.按照数字删除:"<<endl; cout<<"2.按照名字删除:"<<endl; cout<<"请您按键选着:"<<endl; cin>>num; if(num==1) { DeleteBus_number(); } if(num==2) { DeleteBus_name(); }else{ cout<<"选择错误!"<<endl; mainFrame(); } break; case 3: DispAll(); mainFrame(); break; case 4: cout<<"1.按照名称查找:"<<endl; cout<<"2.按照站点查找:"<<endl; cout<<"请您按键选着:"<<endl; cin>>num; if(num==1) { FindBus_number(); } if(num==2) { FindBus_name(); }else{ cout<<"选择错误!"<<endl; mainFrame(); } break; case 5: playstop(); case 6: save(); case 7: cout<<endl<<"祝您心情愉快!"<<endl; cout<<endl<<"欢迎您下次使用!"<<endl; cout<<endl; exit(1); default: break; } } int main() { //read(); //欢迎界面 int select; welcome(); //登录 login(); while(1) { cout<<endl; cout<<"请选择数据来源:"<<endl; cout<<"1.文件读取:"<<endl; cout<<"2.键盘输入:"<<endl; cin>>select; if(select==2) { mainFrame(); } if(select==1) { read(); mainFrame(); } } return 0; } //显示所有的站点 void playstop() { int i,j,m; string name[400]; cout<<"所有站点为:"<<endl; cout<<endl; cout<<array[0].start<<" "<<array[0].terminal<<" "; for(i=0;i<total;i++) { name[2*i]=array[i].start; name[2*i+1]=array[i].terminal; m=2*i+1; } for(j=0;j<m;j++) { if((name[j]!=array[0].start)&&(name[j]!=array[0].terminal)) cout<<name[j]<<" "; } cout<<endl<<endl; mainFrame(); } //实现卡号的涨涨 long autoCreament() { if(total==0){ return INITNUMBER; }else{ return array[total-1].number+1; } } //按照名字删除车辆 void DeleteBus_name() { char a[20],b; int i; DispAll(); cout<<"请输入要删除的车辆(如109路):"; cin>>a; for(i=0;i<total;i++) { if(strcmp(array[i].name,a)==0) { cout<<"您将删除该车的信息!!!!!!"<<endl; cout<<" 确定请按Y 按其他键返回主菜单 "<<endl; cin>>b; if(b=='Y' || b=='y') { getchar(); array[i].number=-1; strcpy(array[i].name,"无"); strcpy(array[i].type,"无"); strcpy(array[i].start,"无"); strcpy(array[i].terminal,"无"); cout<<endl<<"删除成功,按enter键返回"<<endl; // total--; fflush(stdin); getchar(); mainFrame(); } else{ mainFrame(); } } } cout<<"输入错误!"<<endl; mainFrame(); } //按照数字删除车辆 void DeleteBus_number() { char a; int pos,accNum,m=0; cout<<endl<<"删除车的信息:"<<endl; DispAll(); cout<<"请输入要删除车辆的序号:"; cin>>accNum; pos=searchAccount(accNum); if(pos==-1) { //卡号有误 m++; if(m>3) { mainFrame(); } else{ cout<<"序号不存在,请重新输入序号"<<endl; DeleteBus_number(); } } else { cout<<"您将删除该车的信息!!!!!!"<<endl; cout<<" 确定请按Y 按其他键返回主菜单 "<<endl; cin>>a; if(a=='Y' || a=='y') { getchar(); array[pos].number=-1; strcpy(array[pos].name,"无"); strcpy(array[pos].type,"无"); strcpy(array[pos].start,"无"); strcpy(array[pos].terminal,"无"); cout<<endl<<"删除成功,按enter键返回"<<endl; // total--; fflush(stdin); getchar(); mainFrame(); } else{ mainFrame(); } } } //显示所有车辆的信息 void DispAll() { int i; cout<<setw(10)<<setiosflags(ios::left)<<"编号"<<setw(10)<<"名称"<<setw(10)<<"类型"<<setw(18)<<"起点站"<<setw(18)<<"终点站"<<endl; for(i=0;i<total;i++) { cout<<setw(10)<<setiosflags(ios::left)<<array[i].number<<setw(10)<<array[i].name<<setw(10)<<array[i].type<<setw(18)<<array[i].start<<setw(18)<<array[i].terminal<<endl; } } //输出指定车辆的信息 void printAccount(int acc) { cout<<endl; cout<<setw(10)<<setiosflags(ios::left)<<"编号"<<setw(10)<<"名称"<<setw(10)<<"类型"<<setw(18)<<"起点站"<<setw(18)<<"终点站"<<endl; cout<<setw(10)<<setiosflags(ios::left)<<array[acc].number<<setw(10)<<array[acc].name<<setw(10)<<array[acc].type<<setw(18)<<array[acc].start<<setw(18)<<array[acc].terminal<<endl; } /*根据车卡号查找卡的下标 * 若返回值>=0,车卡号是正确 * 若返回值=-1,车卡号有误 */ int searchAccount(long accNumber) { int i,pos=-1; for(i=0;i<total;i++) { if(array[i].number==accNumber) { //找到了这张卡 pos=i; break; } } return pos; } //按照数字查找车辆 void FindBus_number() { char a[20]; int i; cout<<"请输入要查找的车辆(如109路):"; cin>>a; for(i=0;i<total;i++) { if(strcmp(array[i].name,a)==0) { printAccount(i); } } mainFrame(); } //按照名字查找车辆 void FindBus_name() { int i; char m[20]; cout<<"请您输入查找的站点名字:"<<endl; cin>>m; for(i=0;i<total;i++) { if(strcmp(array[i].start,m)==0) { printAccount(i); } if(strcmp(array[i].terminal,m)==0) { printAccount(i); } } cout<<"查找结束!"<<endl<<endl; mainFrame(); }
输出结果:
心得体会:
总结应用,实践一下!