公交查询系统

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

}



输出结果:

公交查询系统_第1张图片


心得体会:

总结应用,实践一下!

你可能感兴趣的:(公交查询系统)