交通咨询管理系统_第1页
交通咨询管理系统_第2页
交通咨询管理系统_第3页
交通咨询管理系统_第4页
交通咨询管理系统_第5页
已阅读5页,还剩27页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、主要功能1.1程序的功能 在交通网络非常发达的今天,人们出差、旅游或做其他出行时,不仅关心 节省交通费用,而且对里程和所需时间等问题也很感兴趣。对于这样一个人们 关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通 咨询系统,能让旅客咨询从任一个城市顶点到达另外一个城市顶点之间的最短 路径(里程)的问题,或者任意两个城市之间的最短路径问题。这样可以极大 地方便旅客。1.2输入输出的要求在本程序里定义了一个EdgeType类,包括一个整型类型iDistanee的成员; 一个city结构体,包括了整型的Number和字符型的*Name成员;还定义了一 个AdjMatrix类,包

2、含了一些公有函数,如:int GetVexNum();取得交通图的 城市个数,void ShowRouteLength();/向用户显示路程长度,void Dijkstra(int v,int dist,int path) ;/在图结构中求一个点到其他点的最短长度;也包含了四个 私有成员数据:int iVexNum;/顶点数,即城市个数,int iEdgNum;/边数,即城 市间的路线,City cityMaxValue;图的顶点,即城市,EdgeType RouteMaxValueMaxValue; 各边的权值,即路程。从以上定义可以看出本程序的输入输出主要采用整型和字符串型的数据类 型。二

3、、功能模块的划分 2.1存储交通信息网模块 在该系统中要求管理人员在旅客使用前先建立一个城市交通信息网,并保 存以方便旅客的使用。2.2查询一个城市到其他城市的路径模块图图(2)任意两个城市之间路径查询模块图2.4整个系统程序模块图图(3)整个系统查询模块图2三、主要功能的实现城市交通咨询系统的流程图图(4)城市交通咨询系统的流程图在本系统中设置了三个模块分别为:管理员模块:这个模块包含了创建城市交通信息网,它是这个程序往下运 行的前提。用户模块:这个模块是属于用户的在已创建好的交通网上选择自己的需求。显示交通网模块:这个模块是计算机的运算,运算出来的是用户想要的结3一个城市到其它城市路径的查

4、询图(5)一个城市到其它城市路径的查询流程图4任意两个城市之间路径的查询图(6)任意两个城市之间路径的查询一个城市到其它城市路径查询函数调用关系图丿输出结果图(7) 个城市到其它城市路径查询函数调用关系图322任意两个城市之间路径查询函数调用关系图/输出结果图(8)任意两个城市之间路径查询函数调用关系图6创建城市交通信息网模块算法代码void AdjMatrix:CreateGraph()构造交通图City city1,city2;int distance;/ charflag=y;char*ch=new char(10);cout请输入想加入交通图的城市的数目: ciniVexNum;cou

5、t输入城市的信息:e ndl;for(int i=1;icityi.Name;cityi.Number=i;coutvv请输入路线的数目:iEdgNum;for(i=0;iviEdgNum;i+)coutvv输入两个城市的信息:city1.Name;city1.Number=GetCityNum(city1.Name); coutvv城市2名字:;city2.Name=new char;cincity2.Name;city2.Number=GetCityNum(city2.Name); coutdistance; Routecity1.Numbercity2.Number.iDistance=

6、distance;return; 一个城市到其它城市路径查询模块的算法代码 void AdjMatrix:DijkstraShortDistance()/ 求一个城市到其他城市的最短路程 char *cityname=new char;coutvv请输入您要查询的城市:;cincityname;int v0=GetCityNum(cityname);int *dist=new intiVexNum;int *path=new intiVexNum;Dijkstra(v0,dist,path);coutvv从vvcity namevv城市到其他城市的最短路程为:e ndl;for(int i=1

7、;i=iVexNum;i+)coutvv到城市vvGetCityName(i)的最短距离为vdistivvn;if(pathi!=-1)coutvv路径为wGetCityNameevvy-;int x=pathi;while(x!=v0)coutGetCityName(x)-;x=pathx;coutcityname;coutendl;8elsecoutcityname1;coutvv城市 2:;cincityname2;int i= GetCityNum(cityname1);int j= GetCityNum(cityname2);Floyd( dist, path);cout 城市cit

8、 yn ame1至 U城市cit yn ame2的最短路径为distijvvendl;if(pathij!=-1)coutvv路径为:vvcityname2-;int x=pathij;while(x!=i)coutv 卄 =-=& I 迎钳0 黑之 芾 里图(12)用户使用界面图(13) 一个城市到另一个城市的最短路径查询界面s少少灣43离 EG84 为LOJ ff nj2 4 01 2 鵠离漢s 鼻=丹 人 丿m图(14)任意两个城市之间路径的查询界面目理员卜显卒交通网(用矩阵形式) 请毬择:囱Piess any ke u to cont inue图(15)退出系统界面114.2程序调试中

9、遇到的问题以及解决问题的方法在本次程序设计中,遇到了不少的问题。首先就是怎么把图中的顶点和边转 换成实际中的城市和城市之间距离信息的问题。为此我在本程序中写了两个函 数,专门进行它们之间的转换。GetCityName()返回城市的名字,GetCityNum() 通过城市名字取得城市的编号。其次由于本程序是交通网,信息要求及时更新,所以我设置了管理员模块, 管理员可以及时增加城市之间的信息。第三,由于模块之间是相互嵌套调用的,所以用户在进行较高层次的使用后 需要返回上一界面,因此就需要 return 函数。我在调试了几次后才最终确定return 函数的位置。 第四,在计算路径时采取的迪克斯特拉算

10、法及弗洛伊德算法,由于 if 语句的 嵌套使用,会漏掉中括号,分号等,在调试中一一找出并进行纠正。4.3课程设计过程心得体会一周的数据结构课程设计很快就结束了,留给我们在这方面走的路却很远 本次实习,对我们来说可以说是一次小小的挑战。因为在理论实习中没有较好 地把握,现在要完成一个较为复杂的程序编写,确实有点难度,但我们还是认 真积极地完成了这次实习。通过本次实验,我充分了解掌握了在图结构中最短路径的算法问题,并结 合图的储存结构、迪杰斯特拉算法、费洛依德算法等解决了交通咨询系统的设 计。源程序打出来后有多处错误,大小写错误、符号错误、遗漏等等,经反复 检查调试后实验成功。在答辩时和老师讨论了

11、我这个程序的不足及有待改进的 地方,使我对自己的设计有了更好的把握及改进。感觉自己在编程方面更需要 多多锻炼。这次课程设计我相信在我们以后语言方面的学习中肯定会有莫大的帮助,我 们必须认真思考,一步一个脚印,才可以达到我们预期的彼岸。12五、使用说明本交通咨询系统设计界面友好,通俗易懂运行程序,系统会弹出提示界面,使用本系统前请先建立城市交通信息网, 也即由管理者添加要加入到这个信息网的城市及城市之间的信息。添加完毕后 会提示建立完毕,弹出选项框。如下图:鞋交通网(用矩阵形式)图(16)选项框旅客选择2选项后,即进入用户界面,如下图:图(17)用户界面此时,用户可以根据自己的需要进行选择,接下

12、来会提示旅客输入自己要查询 的城市或者两个城市的名字。i =資询丁个期豆數其也城氐的最短路栓 材工返回上一级菜单彳昶择:1请输入您要查询的城市:.图(18)提示界面图(19)咨询界面 查询完毕后,选择0选项退出系统。吨请e用自片显示交通幅(用矩库形式)请竈尿0Pvess anV kev to continue图(20)退出界面13整的来说,由于界面的友好性,相信使用的旅客都会感觉到其方便。六、附件#ifndef ADJMATRIX_H#defineADJMA TRIX_H#include#include using namespacestd;constint MaxValue=200;/城市路

13、程最大值structEdgeTypeint iDistanee;/路程;structCityint Number;char *Name;/城市结构体,包括城市名字以及城市在图结构中的编号classAdjMatrixpublic:AdjMatrix(int n);/构造函数intGetVexNum();取得交通图的城市个数intGetEdgNum();取得交通图的路线数目int GetCityNum(char* city name);/通过城市名字取得城市的编号 char* GetCityName(constint i);/通过序号取得城市的名字 void CreateGraph();/构造交通

14、图 void ShowRouteLength();/向用户显示路程长度 void Dijkstra(int v,intdist,int path);在图结构中求一个点到其他点的最短 长度void DijkstraShortDistance();实际中一个城市到其他城市的最短距离void Floyd(int distMaxValueMaxValue,int pathMaxValueMaxValue) ;/在 图结构中两个点之间的最短长度void FloydShortDistance();/实际中两个城市之间的最短距离 private:int iVexNum;/ 顶点数,即城市个数14int iE

15、dgNum;/边数,即城市间的路线City cityMaxValue;图的顶点,即城市EdgeTypeRouteMaxValueMaxValue; 各边的权值,即路程 ;/交通网络图,有 iVexNum 个城市,城市之间有 iEdgNum 条路线 #endif#includeAdjMatrix:AdjMatrix(int n)初始化有n个顶点的邻接矩阵for(int i=0;in;i+)for(int j=0;jn;j+)if(i=j)Routeij.iDistance=0;elseRouteij.iDistance=MaxValue;iVexNum=iEdgNum=0;int AdjMatr

16、ix:GetVexNum()返回交通图的城市个数return iVexNum;int AdjMatrix:GetEdgNum()/ 城市间的路线return iEdgNum;char* AdjMatrix:GetCityName(const int i)/ 返回城市的名字15return cityi.Name;int AdjMatrix:GetCityNum(char* cityname)/通过城市名字取得城市的编号for(int i=1;i=iVexNum;i+)if (strcmp(cityi.Name,cityname)=0)return cityi.Number;coutvv您输入的城

17、市有错误iVexNum;coutvv输入城市的信息:cityi.Name;cityi.Number=i;cout请输入路线的数目:iEdgNum;for(i=0;iiEdgNum;i+)16cout输入两个城市的信息:city1.Name;city1.Number=GetCityNum(city1.Name);cout城市2名字:;city2.Name=new char;cincity2.Name;city2.Number=GetCityNum(city2.Name);coutvv两地的路程为(单位为 Km ):;cindistance;Routecity1.Numbercity2.Numbe

18、r.iDistance=distance;return;void AdjMatrix:ShowRouteLength()向用户显示各个城市之间路程长度coutt;for(int i=1;i=iVexNum;i+)coutcityi.Namet;coutendl;for(i=1;i=iVexNum;i+)coutcityi.Namet;for(int j=1;j=iVexNum;j+) coutRouteij.iDistancet;coutendl;void AdjMatrix:Dijkstra(int v0,int dist,int path)/ 迪克斯特拉算法,在一个图中 求一个点到其他点的

19、最短距离17int mindis;int *s=new int(10);int u;for(int i=1;i=iVexNum;i+)disti=Routev0i.iDistance;si=0;if(i!=v0&distiMaxV alue)pathi=v0;elsepathi=-1;distv0=0;sv0=1;for(i=1;iiVexNum;i+)mindis=MaxValue;for(int j=1;j=iVexNum;j+)if(0=sj&distjmindis)u=j;mindis=distj;if(mindis=MaxValue) return;su=1;for(int w=1;

20、w=iVexNum;w+)if(0=sw&Routeuw.iDistanceMaxValue&distu+Routeuw.iDistancecityname;int v0=GetCityNum(cityname);int *dist=new intiVexNum;int *path=new intiVexNum;Dijkstra(v0,dist,path);coutvv从vvcitynamevv城市到其他城市的最短路程为:endl;for(int i=1;i=iVexNum;i+)coutvv到城市vvGetCityName(i)的最短距离为vdistivvn;if(pathi!=-1)cou

21、tvv路径为GetCityName(i)vvv-;int x=pathi;while(x!=v0)coutGetCityName(x)-;x=pathx;coutcityname;coutendl;elsecoutendl;19void AdjMatrix:Floyd(int distMaxValueMaxValue,intpathMaxValueMaxValue)在图中求一个源点到其他点的最短距离int i,j,k;for(i=1;i=iVexNum;i+)for(j=1;j=iVexNum;j+)distij=Routeij.iDistance;if(i!=j&distij!=MaxVal

22、ue)pathij=i;elseif(i=j) pathij=0;else pathij=-1;for(k=1;k=iVexNum;k+)for(i=1;i=iVexNum;i+)for(j=1;j(distik+distkj) distij=distik+distkj; pathij=pathkj;void AdjMatrix:FloydShortDistance()/ 求一个城市到其他城市的最短路程char *cityname1=new char;char *cityname2=new char;int distMaxValueMaxV alue;int pathMaxValueMaxVa

23、lue;20coutvv请输入两个城市:;cout城市 1:;cincityname1;coutvv城市 2:;cincityname2;int i= GetCityNum(cityname1);int j= GetCityNum(cityname2);Floyd( dist, path);cout 城市cit yn ame1至 U城市cit yn ame2的最短路径为distijvvendl;if(pathij!=-1)coutvv路径为:vvcityname2-;int x=pathij;while(x!=i)coutGetCityName(x)-;x=pathix;coutcitynam

24、e1;coutendl;elsecoutendl;AdjMatrix Gragh(20);void Administrator() /管理员管理咨询系统的界面int i;coutendl;couttt* 这里是管理员的界面 ,欢迎进入 *endl;couttt仁创建城市交通网络endltt0= 返回上一级菜单 i;while(i=1)Gragh.CreateGraph();coutvv仁创建城市交通网络endl0=返回上一级菜单 i;return;void OnetoAnotherlnfo()一个城市到其他城市信息的查询int i; coutendl;coutvv仁咨询一个城市到其他城市的最短路径e ndl0=返回上一级菜单 i;while(i=1) Gragh.DijkstraShortDistance();vvendlcout1=咨询一个城市到其他城市的最短路径0=返回上一级菜单 i;return;void TwoCityInfo()/ 两个城市之间的信息查询22int i;coutendl;coutvv仁咨询两个城市之间的最短路程vvendl 0=返回上一级菜单 i;while(i=1)G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论