#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();
}
输出结果:
心得体会:
总结应用,实践一下!