公交查询系统

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

}



输出结果:


心得体会:

总结应用,实践一下!

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着经济的飞速发展,汽车越来越多,城市的道路建设远赶不上城市化进程的加快,交通拥堵已成为制约城市发展的重要问题之一。城市公共交通覆盖面广、经济快捷。为了缓解交通压力,必须大力发展公共交通,提高公交服务水平,鼓励和吸引市民选择乘坐公交出行,从而改善交通状况。为此我们设计开发了基于Web的公交查询系统,为乘客出行提供详细全面的信息,进一步提高公交的服务水平。 本文从乘客的角度出发,研究了乘客的出行行为,对公交查询系统进行了需求分析;从系统开发环境、系统目标、设计流程、功能设计、模块设计和数据库设计六个方面进行系统的总体设计;通过抽象公交网络中的站点和线路,建立了公交网络数学模型,讨论了公交网络的最优路径算法,并在此基础上详细介绍了在三种不同目标情况下适合公交查询的最优路径算法;在需求分析、总体设计和基于网络路径最优的公交查询算法探讨基础上,对查询系统进行了详细设计,并成功将三种网络路径算法应用于系统的换乘查询中,系统还实现了线网维护、线路查询、站点查询和标志性地点查询的功能,最后利用武汉市25条线路和400个站点的实验数据,对系统的功能进行了测试,并对公交网络路径的算法时间和查询结果进行了分析。实验证明该系统界面友好、功能完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值