📄 intmain.cpp
字号:
#include"diaodu.h"
GRaph net;//全局变量,存储站点信息
int cusmenu()//乘客选择菜单
{
ElemType h[100],t[100];//e[i][j]为线路i上的站点j
int i,countt[4],counth[4],change[4];//一开始counth是从起点出发的线路数,countt是进入终点的线路数
int choice1;
int path[3];
for(i=0;i<4;i++)
countt[i]=counth[i]=0;
while(1)
{
cout<<right<<setfill('-')<<setw(25)<<"乘客选择菜单"<<setfill('-')<<setw(25)<<"-"<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"1:输入起点和终点。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"2:求直达或只转一次车的路线。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"3:求换乘多次的路线。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"4:求时间最短的线路。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"5:提供几条时间较短线路。"<<endl<<endl;
cout<<0<<":返回主菜单."<<endl;
cout<<setw(50)<<setfill('-')<<'-'<<endl<<endl;
cout<<"请选择n:";
cin>>choice1;
switch(choice1)
{
case 0:return 0;
case 1:
cout<<"输入起点(S+小于3957的四位数):";
cin>>vhead;
counth[0]=net.findpathout(h,vhead);
cout<<"输入终点(S+小于3957的四位数):";
cin>>vtail;
countt[0]=net.findpathin(t,vtail);
for(i=0;i<4;i++)
change[i]=0;
break;
case 2:
cout<<"不需换车的线路为:"<<endl;
change[0]=net.directpath(h,t,counth[0],countt[0]);//如果有直接路线,计算然后输出。
if(change[0]==0)cout<<"没有直达路线。"<<endl;
//然后再看转车一次的路线。找到线路h[i],t[j]上的站点e[i][u],f[j][k],看有没有相同的公共站点,有就是路线h[i]->e[i][j]->t[j]
cout<<"转一次车的线路为:"<<endl;
change[1]=net.oncepath(h,t,counth[0],countt[0]);
if(change[1]==0)cout<<"没有转一次车的线路。"<<endl;
cout<<endl;
break;
case 3:
cout<<"转多次车的所有线路为:"<<endl;
change[2]=net.twiceandthreepath(h,t,counth[0],countt[0],counth[1],countt[1]);
if(change[2]==0)cout<<"没有转多次车的所有线路。"<<endl;
cout<<endl;
break;
case 4:
cout<<"换乘次数为2次以内的最快路线为:"<<endl;
path[0]=net.oncepathtime(h,t,counth[0],countt[0]);
path[1]=net.twiceandthreepathtime(h,t,counth[0],countt[0],counth[1],countt[1]);
if(!path[0]&&!path[1])cout<<"两个站点没有路线到达。"<<endl;
cout<<endl;
break;
case 5:
cout<<"换乘次数为2次以内的多条较快路线为:"<<endl;
path[0]=net.oncepathsometime(h,t,counth[0],countt[0]);
path[1]=net.twiceandthreepathsometime(h,t,counth[0],countt[0],counth[1],countt[1]);
if(!path[0]&&!path[1])cout<<"两个站点没有路线到达。"<<endl;
cout<<endl;
break;
}
}
}
int guanli()//管理员菜单
{
char filename[10];
char str[10]=".txt";
net.initiate();
int i,k,choice1;
ElemType busname;
ARcType *p;
while(1)
{
cout<<right<<setfill('-')<<setw(25)<<"管理员菜单"<<setfill('-')<<setw(25)<<"-"<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"1:初始化公交查询系统。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"2:查看某站点的出入站情况。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"3:查看所有线路(由于线路过多一开始会出现闪屏)。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"4:根据统计的线路的数据对该线路进行公车的调度"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"0:返回主菜单。"<<endl;
cout<<setw(50)<<setfill('-')<<'-'<<endl<<endl;
cout<<"请选择n:";
cin>>choice1;
switch(choice1)
{
case 0:return 0;
case 1:
if(net.getdata())cout<<"初始化公交查询系统成功。"<<endl<<endl;
break;
case 2:
cout<<"输入站点名(S+小于3957的四位数):";
while(1)
{
cin>>busname;
k=changel(busname);
if(k<1||k>3977){cout<<"输入有误,请重新输入(S+3957以下的四位数):";}
else break;
}
cout<<"从站点"<<busname<<"出发的线路情况为:"<<endl;
for(p=net.graph[k].firstarc;p;p=p->nextarc)
{
cout<<net.graph[k].vertexname<<"->";
cout<<p->lname<<"-->"<<net.graph[p->adjvertex].vertexname<<endl;
}
cout<<"进入站点"<<busname<<"的线路情况为:"<<endl;
for(p=net.graph1[k].firstarc;p;p=p->nextarc)
{
cout<<net.graph[p->adjvertex].vertexname<<"->";
cout<<p->lname<<"-->"<<net.graph[k].vertexname<<endl;
}
cout<<endl;
break;
case 3:
Showall();
cout<<endl;
break;
case 4:
cout<<"请输入公交调度所需数据所在的文件名(目前只有“xianlu1”这个文件)。"<<endl;
cin>>filename;
strcat(filename,str);
while(1)
{
cout<<"根据文件的数据可以得出公交调度及相关数据如下:"<<endl;
if(getdata1(filename))break;
else cout<<"请重新输入:";
cin>>filename;
strcat(filename,str);
}
for(i=0;i<5;i++)
findbestBi(i,b1);
cout<<endl;
break;
}
}
}
int main()
{
string str;
char ch;
int choice1;
while(1)
{
cout<<right<<setfill('-')<<setw(25)<<"主菜单"<<setfill('-')<<setw(25)<<"-"<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"1:管理员菜单。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"2:乘客菜单。"<<endl<<endl;
cout<<setfill(' ')<<setw(30)<<left<<"0:结束程序。"<<endl;
cout<<setw(50)<<setfill('-')<<'-'<<endl<<endl;
cout<<"请选择n:";
cin>>choice1;
switch(choice1)
{
case 0:return 0;
case 1:
while(1)
{
cout<<"输入管理员密码(为:111):"<<endl;
cin>>str;
if(str=="111")if(!guanli())break;
else
cout<<"密码错误,重新输入Y|N:";
cin>>ch;
if(ch=='Y'||ch=='y')continue;
else break;
}
break;
case 2:
if(!cusmenu())break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -