交通咨询程设计含源代码可以运行.doc

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
第一章需求分析 (1)
1.1题目分析 (2)
1.2实现方法 (2)
1.2.1图的实现和声明 (2)
1.2.2程序功能的实现 (3)
第二章系统功能模块设计 (4)
第三章流程图 (5)
第四章运行调试 (6)
第五章实验总结 (9)
第六章致谢 (9)
附录一.............................................. 错误!未定义书签。

附录二.............................................. 错误!未定义书签。

I
交通咨询模拟
第一章需求分析
设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:一是建立交通网络图的存储结构,二实现两个城市间的最短路经问题。

程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询。

实现了帮助用户了解全国各大城市间往来的最短路径问题,第二,可以提供用户查询各大城市的相关信息。

本程序最大的特点是支持用户自己添加城市信息及城市,或添加城市的路径,既就有可扩展性。

该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。

此程序规定:
(1)在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。

(2)程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

(3)程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。

1.1题目分析
1.通过对题目的分析知,是要让我们能够通过利用所学的数据结构的基本知识和技能来解决程序设计问,因此在搞程序设计之前先好好的把书复习一遍,弄清楚各个知识之间的联系。

2.由题目的分析知全国交通咨询管理系统是有对城市信息的增加、删除、修改、保存、查询、有错时提示出错信息等功能,最后对数据进行保存并退出操作系统。

由此可知需要将函数模块化,将它做为一个独立的函数体去实现它的功能。

它可以分为四大功能模块,每个模块需要去各个击破。

其中可能用到C++语言的指针与链表,因此,要先去复习一下C++语言课本。

3.根据这些功能和基本要求,可充分运用我们所学的数据结构的基本知识和技能去逐步的解决。

其中将函数进行模块化。

在数据结构中,通过队列,栈,图的声明来实现系统的各种功能的存储各城市之间乘火车的消耗价格,时间,乘飞机的价格,时间,以及中转站最少。

利用指针和结点来实现城市与城市之间各种操作,而这些知识点都是我们学习数据结构必须掌握和学会运用的。

4.完成程序功能的设置后,应对程序进行调试,以便在调试中能及时地找出错误并加以更正,这样能使程序功能进一步的完善和正确。

这就要求我们在编程和调试过程中养成认真分析和善于发现问题并及时解决的习惯,不懂的及时问老师或者其他同学。

1.2实现方法
1.2.1图的实现和声明
(1)利用带权图,构建交通网络图
(2)根据题目要求,声明了一个图形的数据结构用来存储任意几个城市之间的各种信息,其中是把它们的TTime; TPrice; FTime; FPrice;的各种信息用邻接矩阵存储起来的。

同时运用构造函数,利用特定的值来构造对象。

(3)struct City图的结构,CreateCity建立邻接图,AddCity增加,DelCity 删除,EditCity修改,ShortestPath最小路径,ShortestPath_DIJ求源点v0
到各点的最短路径 1火车时间最小,2火车金钱最小,3飞机时间最小,4飞机金钱最小,来实现的。

1.2.2程序功能的实现
(1)全国交通咨询信息录入和增加的实现
主要是对城市基本信息的输入,包括(乘火车的价格,乘火车的时间,乘飞机的价格,乘飞机的时间,中转站次数最少)在程序中只要用AddCity (输入函数)和ShortestPath(C);来实现。

(2)全国交通咨询信息显示的实现
主要为用户ShortestPath(C);函数显示城市之间的基本信息,包括上面录入的信息和增加的内容。

(3)全国交通咨询信息载入文件的实现
在程序中用LoadCity(C);break()函数来载入文件。

(4)全国交通咨询信息删除的实现
在程序中用DelCity(C)函数来实现对有错的信息进行删除。

(5)全国交通咨询信息修改的实现
在程序中用EditCity(C)(修改函数)来实现,而且可通过按编号或城市名来修改,当找不到要修改的内容时提示用户可能输入有误,重新在输一遍。

(6)全国交通咨询信息的重来
CreateCity(C);break重来,实现对错误的从新输入。

(7)全国交通咨询信息的保存
在程序中用SaveCity(C)保存函数来实现,并提示用户数据已保存。

(8)全国交通咨询信息的增加
ShowCityDat(C);break,case 2:AddCity(C);break 增加。

第二章系统功能模块设计
该课题可以分为如下几个模块:控制选择功能项的main函数、建立邻接图的CreateCity(City *C)函数、增加城市的AddCity(City *C)函数、删除城市的DelCity(City *C)函数、修改资料的EditCity(City *C)函数、求最小路径的ShortestPath(City *C)函数、求其他最值的ShortestPath_DIJ(City *C,int v0,int k)函数、载入文件资料的LoadCity(City *C)函数、保存资料的SaveCity(City *C)函数、显示城市之间关系数据的ShowCityName(City *C,int k)函数。

模块图如下:
图1-1
这个程序由三部分组成:
管理员:这个模块包含了创建交通网跟增加城市两个,它是这个程序往下运行的前提。

用户:这个模块的是属于用户的在创建好的交通网上选择自己的需求。

显示交通网:这个模块是计算机的运算,运算出来的是用户想要的结果。

第三章流程图
图2 系统流程图
开始运行程序,输入命令,进入各种不同的功能区,进行各自的功能,分别运行,然后输出结果。

结束后,如果退出就结束,不退出重复上面的功能。

第四章运行调试
登陆界面:管理界面中有3大模块即我们说的三大功能
图3 登陆界面
进入管理员模式进行城市交通网络的创建:在这个模块中我们选择1 创建城市数目是3 分别为a、b、c.设ab间的路程是20,ac的潞城市30,bc的路程是40 创建建通网络图。

图4管理员界面
这块是用户模式,在用户进入系统之后,进行查询:在用户中我们输入
1咨询两个城市间的信息再次选择1咨询最短的路程 a到a ,a到b的,a
到c的。

在界面输入1的前提下分别输入2,3。

结果如下:
图5 用户界面
图6 交通信息系统界面
图7 咨询信息界面
图8 交通信息网的的结果
第五章实验总结
第六章致谢
附录一
[1]《数据结构C语言版》严蔚敏、吴伟民,清华大学出版社,2002
[2]《数据结构课程实验》徐孝凯,清华大学出版社, 2002
[3]《数据结构程序设计题典》李春葆,清华大学出版社,2002
附录二
//////////**********************////////////
////////// 交通咨询系统///////////
////////// ////////////
/////////***********************////////////
///////////////////////
//邻接矩阵类
//#include <AdjMatrix.h>
#ifndef ADJMATRIX_H
#define ADJMATRIX_H
#include<vector>
#include<string>
using namespace std;
const int MaxValue=100;//最大值
struct EdgeType{
int iDistance;//路程
int iCost; //费用
float fTime; //所花费的时间
};
//城市结构体,包括城市名字以及城市在图中的编号
struct City{
int Number;
char *Name;
};
//交通网络图,有iVexNum个城市,城市之间有iEdgNum条路线,每条路线上的时间路程费用为
//Route[MaxValue][MaxV alue]
class AdjMatrix{
public:
//AdjMatrix();//图的初始化,构造函数
AdjMatrix(int n);
int GetVexNum();//取得交通图的城市个数
int GetEdgNum();//取得交通图的路线数目
char* GetCityName (const int i);//通过序号取得城市的名字
int GetCityNum(char* cityname);//通过城市名字取得城市的编号
//EdgeType GetRoute (const int v1,const int v2);
void Check(int &i,int &j);//检查输入的边的序号是否越界,若越界就重输
void CreateGraph();//构造交通图
void PrintGragh();//**************************供测试用
void ShowRouteLength();//向用户显示路程长度
void ShowRouteCost();//向用户显示路程车票
void ShowRouteTime();//向用户显示路程时间
void Dijkstra(int v,int dist[],int path[]);//求一个源点到其他点的最短性质
void DijkstraShortDistance();//一个城市到其他城市的最短距离
void DijkstraLessTime();//一个城市到其他城市的最少时间
void DijkstraLessCost();//一个城市到其他城市的最少花费
void Floyd(int dist[MaxValue][MaxValue],int path[MaxValue][MaxValue]);
//两个点之间的最短性质
void FloydShortDistance();//两个城市之间的最段距离
void FloydLessTime();//两个城市之间的最少时间
void FloydLessCost();//两个城市之间的最少花费
private:
int iVexNum;//顶点数,即城市个数
int iEdgNum;//边数,即城市间的路线
City city[MaxValue];//图的顶点,即城市
EdgeType Route[MaxValue][MaxValue];//各边的权值,即路线的时间费用以及路程
};
#endif
//AdjMatrix.cpp
//#include "AdjMatrix.h"
#include<iostream>
using namespace std;
AdjMatrix::AdjMatrix(int n)//初始化有n个顶点的邻接矩阵{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(i==j)
{
Route[i][j].fTime=0;
Route[i][j].iCost=0;
Route[i][j].iDistance=0;
}
else
{
Route[i][j].fTime=MaxValue;
Route[i][j].iCost=MaxV alue;
Route[i][j].iDistance=MaxValue;
}
}
iVexNum=iEdgNum=0;
}
int AdjMatrix::GetVexNum()
{
return iVexNum;
}
int AdjMatrix::GetEdgNum()
{
return iEdgNum;
}
char* AdjMatrix::GetCityName(const int i)//取城市的名字{
if(i<0||i>iVexNum)
{
cerr<<"参数越界,发生错误了!"<<endl;
exit(1);
}
return city[i].Name;
}
int AdjMatrix::GetCityNum(char* cityname)
{
for(int i=1;i<=iVexNum;i++)
{
if (strcmp(city[i].Name,cityname)==0)
return city[i].Number;
}
cerr<<"您输入的城市有错误"<<endl;
return -1;
}
void AdjMatrix::PrintGragh()//将图打印出来,最初测试之用
{
for(int i=0;i<iVexNum;i++)
{
for(int j=0;j<iVexNum;j++)
{
if(100==Route[i+1][j+1].iDistance)
{
Route[i+1][j+1].iDistance=1000;
}
cout<<Route[i+1][j+1].iDistance<<"\t"
}
cout<<endl;
}
}
void AdjMatrix::Check(int &i,int &j)//检查输入的边的序号是否越界,若越界就重输{
while(1)
{
if(i<0||i>iVexNum||j<0||j>iVexNum)
cerr<<"参数越界,发生错误了,请重输!"<<endl;
else return;
cin>>i>>j;
}
}
////////////////////////////////////done//////////////////////////////////
void AdjMatrix::CreateGraph()
//为了方便真是先把时间跟费用这两个权值给屏蔽掉了
{
City city1,city2;
int time,distance,cost;
char flag='y';
char *ch=new char(10);
cout<<"请输入城市的数目:";
cin>>iVexNum;
cout<<"输入城市的信息:"<<endl;
for(int i=1;i<=iVexNum;i++)
{
cout<<"序号"<<i<<"的";
cout<<"城市名字:";
city[i].Name=new char;
cin>>city[i].Name;
city[i].Number=i;
}
cout<<"请输入路线的数目:"<<endl;
cin>>iEdgNum;
for(i=0;i<iEdgNum;i++)
{
cout<<"输入两个城市的信息:"<<endl;
// cout<<"城市1序号:";
// cin>>city1.Number;
cout<<"城市1名字:";
=new char;
cin>>;
// cout<<"序号是"<<GetCityNum()<<endl;
// cout<<"城市2序号:";
// cin>>city2.Number;
city1.Number=GetCityNum();
cout<<"城市2名字:";
=new char;
cin>>;
city2.Number=GetCityNum();
//cout<<"序号是"<<GetCityNum()<<endl;
// cout<<"所用时间:";
// cin>>time;
// Route[city1.Number][city2.Number].fTime=time;
// Route[city2.Number][city1.Number].fTime=time;
// cout<<"所用费用:";
// cin>>cost;
// Route[city1.Number][city2.Number].iCost=cost;
// Route[city2.Number][city1.Number].iCost=cost;
cout<<"两地的路程:";
cin>>distance;
Route[city1.Number][city2.Number].iDistance=distance; // Route[city2.Number][city1.Number].iDistance=distance; }
/*
可以保存到相应的文件
FILE *fp1,*fp2;
if((fp1=fopen("city.txt","wb"))==NULL)
{
printf("无法打开文件!\n");
return;
}
for(int j=1;j<=iVexNum;j++)
{
fprintf(fp1,"%d->",city[j].Number);
fprintf(fp1,"%s ",city[j].Name);
fprintf(fp1,"\n");
}
fclose(fp1);
if((fp2=fopen("info.txt","wb"))==NULL)
{
printf("无法打开文件!\n");
return;
}
for(j=1;j<=iEdgNum;j++)
{
fprintf(fp2,"%d.distance: %d,cost: %d,time: %f",j,
Route[city1.Number][city2.Number].iDistance,
Route[city1.Number][city2.Number].iCost,
Route[city1.Number][city2.Number].fTime);
}
fclose(fp2);
*/ return;
}
void AdjMatrix::ShowRouteLength()//向用户显示各个城市之间路程长度{
cout<<"\t";
for(int i=1;i<=iVexNum;i++)
cout<<city[i].Name<<"\t";
cout<<endl;
for(i=1;i<=iVexNum;i++)
{
cout<<city[i].Name<<"\t";
for(int j=1;j<=iVexNum;j++)
cout<<Route[i][j].iDistance<<"\t";
cout<<endl;
}
}
void AdjMatrix::ShowRouteCost()//向用户显示各个城市之间路程车票{
cout<<"\t";
cout<<city[i].Name<<"\t";
cout<<endl;
for(i=1;i<=iVexNum;i++)
{
cout<<city[i].Name<<"\t";
for(int j=1;j<=iVexNum;j++)
cout<<Route[i][j].iCost<<"\t";
cout<<endl;
}
}
void AdjMatrix::ShowRouteTime()//向用户显示各个城市之间路程时间
{
cout<<"\t";
for(int i=1;i<=iVexNum;i++)
cout<<city[i].Name<<"\t";
cout<<endl;
for(i=1;i<=iVexNum;i++)
{
cout<<city[i].Name<<"\t";
for(int j=1;j<=iVexNum;j++)
cout<<Route[i][j].fTime<<"\t";
cout<<endl;
}
}
void AdjMatrix::Dijkstra(int v0,int dist[],int path[])//求一个源点到其他点的最短距离//函数里面城市图的权值还是先展示用的两地路程即iDistance
{
int mindis;
int *s=new int(10);
int u;
for(int i=1;i<=iVexNum;i++)
{
dist[i]=Route[v0][i].iDistance;
s[i]=0;
if(i!=v0&&dist[i]<MaxValue)
path[i]=v0;
else path[i]=-1;
}
dist[v0]=0;
s[v0]=1;
for(i=1;i<iVexNum;i++)
{
mindis=MaxValue;
{
if(0==s[j]&&dist[j]<mindis)
{
u=j;
mindis=dist[j];
}
}
if(mindis==MaxValue) return;
s[u]=1;
for(int w=1;w<=iVexNum;w++)
if (0==s[w]&&Route[u][w].iDistance<MaxValue&&dist[u]+Route[u][w].iDistance<dist[w]) {
dist[w]=dist[u]+Route[u][w].iDistance;
path[w]=u;
}
}
}
void AdjMatrix::DijkstraShortDistance()//求一个城市到其他城市的最短路程
//然后将这个路线打印出来,不过是倒着打的,要正打的话可以用一个栈来实现
{
char *cityname=new char;
cout<<"请输入您要查询的城市:";
cin>>cityname;
int v0=GetCityNum(cityname);
int *dist=new int[iVexNum];
int *path=new int[iVexNum];
Dijkstra(v0,dist,path);
cout<<"从"<<cityname<<"城市到其他城市的最短路程为:"<<endl;
for(int i=1;i<=iVexNum;i++)
{
cout<<"到城市"<<GetCityName(i)
<<"的最短距离为"<<dist[i]<<"\n";
if(path[i]!=-1)
{
cout<<"路径为"<<GetCityName(i)<<"<-";
int x=path[i];
while(x!=v0)
{
cout<<GetCityName(x)<<"<-";
x=path[x];
}
cout<<cityname;
cout<<endl;
}
else cout<<endl;
}
}
void AdjMatrix::DijkstraLessTime()
{
char *cityname=new char;
cout<<"请输入您要查询的城市:";
cin>>cityname;
int v0=GetCityNum(cityname);
int *dist=new int[iVexNum];
int *path=new int[iVexNum];
Dijkstra(v0,dist,path);
cout<<"从"<<cityname<<"城市到其他城市的最少时间为:\n";
for(int i=1;i<=iVexNum;i++)
{
cout<<"到城市"<<GetCityName(i)
<<"的最少时间为"<<dist[i]<<endl;
}
}
void AdjMatrix::DijkstraLessCost()
{
char *cityname=new char;
cout<<"请输入您要查询的城市:";
cin>>cityname;
int v0=GetCityNum(cityname);
int *dist=new int[iVexNum];
int *path=new int[iVexNum];
Dijkstra(v0,dist,path);
cout<<"从"<<cityname<<"城市到其他城市的最少花费为:\n";
for(int i=1;i<=iVexNum;i++)
{
cout<<"到城市"<<GetCityName(i)
<<"的最少花费为"<<dist[i]<<endl;
}
}
void AdjMatrix::Floyd(int dist[MaxValue][MaxValue],int path[MaxV alue][MaxValue]) //求一个源点到其他点的最短距离
//函数里面城市图的权值还是先展示用的两地路程即iDistance
{
int i,j,k;
for(i=1;i<=iVexNum;i++)
for(j=1;j<=iVexNum;j++)
{
dist[i][j]=Route[i][j].iDistance;
if(i!=j&&dist[i][j]!=MaxValue)
path[i][j]=i;
else
if(i==j) path[i][j]=0;
else path[i][j]=-1;
}
for(k=1;k<=iVexNum;k++)
for(i=1;i<=iVexNum;i++)
for(j=1;j<=iVexNum;j++)
{
if (dist[i][j]>(dist[i][k]+dist[k][j]))
{
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=path[k][j];
}
}
}
void AdjMatrix::FloydShortDistance()//求一个城市到其他城市的最短路程
//然后将这个路线打印出来,不过是倒着打的,要正打的话可以用一个栈来实现{
char *cityname1=new char;
char *cityname2=new char;
int dist[MaxValue][MaxValue];
int path[MaxValue][MaxV alue];
cout<<"请输入两个城市:";
cout<<"城市1:";
cin>>cityname1;
cout<<"城市2:";
cin>>cityname2;
int i= GetCityNum(cityname1);
int j= GetCityNum(cityname2);
Floyd( dist, path);
cout<<"城市"<<cityname1<<"到城市"<<cityname2
<<"的最短路径为"<<dist[i][j]<<endl;
if(path[i][j]!=-1)
{
cout<<"路径为:"<<cityname2<<"<-";
int x=path[i][j];
while(x!=i)
{
cout<<GetCityName(x)<<"<-";
x=path[i][x];
}
cout<<cityname1;
cout<<endl;
}
else cout<<endl;
}
void AdjMatrix::FloydLessTime()
{
char *cityname1=new char;
char *cityname2=new char;
cout<<"请输入两个城市:";
cout<<"城市1:";
cin>>cityname1;
cout<<"城市2:";
cin>>cityname2;
int i= GetCityNum(cityname1);
int j= GetCityNum(cityname2);
int dist[MaxValue][MaxValue];
int path[MaxValue][MaxV alue];
Floyd( dist, path);
cout<<"城市"<<cityname1<<"到城市"<<cityname2 <<"的最少时间为"<<dist[i][j]<<endl;
}
void AdjMatrix::FloydLessCost()
{
char *cityname1=new char;
char *cityname2=new char;
cout<<"请输入两个城市:";
cout<<"城市1:";
cin>>cityname1;
cout<<"城市2:";
cin>>cityname2;
int i= GetCityNum(cityname1);
int j= GetCityNum(cityname2);
int dist[MaxValue][MaxValue];
int path[MaxValue][MaxV alue];
Floyd( dist, path);
cout<<"城市"<<cityname1<<"到城市"<<cityname2 <<"的最少花费为"<<dist[i][j]<<endl;
}
/*
//最初的代码。

后来舍弃了
void AdjMatrix::CreateCity()
{
int i=0,tempnumber=0;
char temp='y';
cout<<"请输入城市名字: ";
while('y'==temp||'Y'==temp)
{
City[i]=new char (MaxValue);
cin>>City[i++];
cout<<"继续输入(y/n)?"<<endl;
cin>>temp;
cout<<"请输入城市名字: ";
tempnumber++;
}
cout<<endl;
iVexNum=tempnumber;
}
void AdjMatrix::CreateRoute()
{
char *city1;
char *city2;
int cost;
int time[2];
int distance;
cout<<"请输入各路线信息"<<endl;
cout<<"起始城市:";
cin>>city1;
cout<<"目的城市:";
cin>>city2;
cout<<"路程:";
cin>>distance;
cout<<"费用:";
cin>>cost;
cout<<"开车时间:";
scanf("%d:%d",&time[0],&time[1]);
while(time[0]<0||time[0]>=24||time[1]<0||time[1]>=60) {
cout<<"\n时间输入错误,请重输!"<<endl;
scanf( "%d:%d", &time[0], &time[1] );
}
cout<<"到达时间:";
scanf("%d:%d",&time[0],&time[1]);
while(time[0]<0||time[0]>=24||time[1]<0||time[1]>=60) {
cout<<"\n时间输入错误,请重输!"<<endl;
scanf( "%d:%d", &time[0], &time[1] );
}
}
EdgeType AdjMatrix::GetRoute(const int v1,const int v2)//取权值{
if(v1<0||v1>iVexNum||v2<0||v2>iVexNum)
{
cerr<<"参数越界,发生错误了!"<<endl;
exit(1);
}
return Route[v1][v2];
}
*/
//main.cpp
#include<iostream>
//#include "AdjMatrix.h"
using namespace std;
AdjMatrix Gragh(10);
///////////////////////////////done///////////////////////////////////////////////
void Administrator() //管理员管理项目的界面
//里面包括城市网络的初始化,以及增加城市等功能
{
int i;
cout<<endl;
cout<<"*****这里是管理员的界面,欢迎进入*****"<<endl; cout<<"1=创建城市交通网络"<<endl
<<"2=增加城市"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
while(i!=0)
{
switch(i)
{
case 1:Gragh.CreateGraph();break;
case 2:{};break;//增加城市尚未实现(*^__^*)
}
cout<<"1=创建城市交通网络"<<endl
<<"2=增加城市"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
}
return;
}
///////////////////////////////done/////////////////////////////////////////////// void OnetoAnotherInfo()//一个城市到其他城市信息的查询{
int i;
cout<<endl;
cout<<"1=咨询一个城市到其他城市的最短路径"<<endl <<"2=咨询一个城市到其他城市的最少时间"<<endl
<<"3=咨询一个城市到其他城市的最少车票"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
while(i!=0)
{
switch(i)
{
case 1:Gragh.DijkstraShortDistance();break;
case 2:Gragh.DijkstraLessTime();break;
case 3:Gragh.DijkstraLessCost();break;
}
cout<<"1=咨询一个城市到其他城市的最短路径"<<endl <<"2=咨询一个城市到其他城市的最少时间"<<endl
<<"3=咨询一个城市到其他城市的最少车票"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
}
return;
}
void TwoCityInfo()//两个城市之间的信息查询
{
int i;
cout<<endl;
cout<<"1=咨询两个城市之间的最短路程"<<endl
<<"2=咨询两个城市之间的最少时间"<<endl
<<"3=咨询两个城市之间的最少车票"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
while(i!=0)
{
switch(i)
{
case 1:Gragh.FloydShortDistance();break;
case 2:Gragh.FloydLessTime();break;
case 3:Gragh.FloydLessCost();break;
}
cout<<"1=咨询两个城市之间的最短路程"<<endl
<<"2=咨询两个城市之间的最少时间"<<endl
<<"3=咨询两个城市之间的最少车票"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
}
return;
}
void Passenger()//用户的界面
{
int i;
cout<<endl;
cout<<"*****这里是乘客的界面,欢迎进入*****"<<endl; cout<<"1=咨询一个城市到其他城市的信息"<<endl
<<"2=咨询两个城市之间的信息"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
while(i!=0)
{
switch(i)
{
case 1:OnetoAnotherInfo();break;
case 2:TwoCityInfo();break;
}
cout<<"1=咨询一个城市到其他城市的信息"<<endl
<<"2=咨询两个城市之间的信息"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
}
return;
}
///////////////////////////////done/////////////////////////////////////////////// void ShowTrafficNet()//显示交通网络
{
int i;
cout<<endl;
cout<<"*****显示交通网,里面有个路线的长度,车票以及时间,欢迎进入*****"<<endl; cout<<"1=显示路程长度"<<endl
<<"2=显示路线相对应的车票"<<endl
<<"3=显示路线相对应的时间长度"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
while(i!=0)
{
switch(i)
{
case 1:Gragh.ShowRouteLength();break;//显示城市间的路程
case 2:Gragh.ShowRouteCost();break;//显示城市之间的费用
case 3:Gragh.ShowRouteTime();break;//显示城市之间的所花时间
}
cout<<"1=显示路程长度"<<endl
<<"2=显示路线相对应的车票"<<endl
<<"3=显示路线相对应的时间长度"<<endl
<<"0=返回上一级菜单"<<endl;
cout<<"请选择: ";
cin>>i;
}
return;
}
///////////////////////////////done///////////////////////////////////////////////
void main()//主函数
{
int i;
cout<<"*****你好!这里是软件0801班第五组的交通系统咨询,欢迎使用*****"<<endl;
cout<<"现在请您选择您的身份:"<<endl
<<"1=管理员"<<endl
<<"2=用户"<<endl
<<"3=显示交通网(用矩阵形式)"<<endl
<<"0=退出"<<endl;
cout<<"请选择: ";
cin >> i;
while(i!=0)
{
switch(i)
{
case 1:Administrator();break;//此处要显示管理员的界面
case 2:Passenger();break;//此处显示用户的界面
case 3:ShowTrafficNet();break;
}
cout<<"现在请您选择您的身份:"<<endl
<<"1=管理员"<<endl
<<"2=用户"<<endl
<<"3=显示交通网(用矩阵形式)"<<endl <<"0=退出"<<endl;
cout<<"请选择: ";
cin >> i;
}
//return 1;
}。

相关文档
最新文档