收藏 分销(赏)

交通咨询管理系统.docx

上传人:精**** 文档编号:4132590 上传时间:2024-07-31 格式:DOCX 页数:29 大小:128.70KB
下载 相关 举报
交通咨询管理系统.docx_第1页
第1页 / 共29页
交通咨询管理系统.docx_第2页
第2页 / 共29页
交通咨询管理系统.docx_第3页
第3页 / 共29页
交通咨询管理系统.docx_第4页
第4页 / 共29页
交通咨询管理系统.docx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、一、主要功能1.1程序的功能在交通网络非常发达的今天,人们出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也很感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统,能让旅客咨询从任一个城市顶点到达另外一个城市顶点之间的最短路径(里程)的问题,或者任意两个城市之间的最短路径问题。这样可以极大地方便旅客。 1.2输入输出的要求 在本程序里定义了一个EdgeType类,包括一个整型类型iDistance的成员;一个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;/各边的权值,即路程。从以上定义可以看出本程序的输入输出主要采用整型和字符串型的数据类型。二、功能模块的划分2

3、.1存储交通信息网模块 在该系统中要求管理人员在旅客使用前先建立一个城市交通信息网,并保存以方便旅客的使用。2.2查询一个城市到其他城市的路径模块图 交通咨询管理系统一个城市到其他城市路径查询 迪克斯特拉算法求路径显示旅客所咨询的信息即路径长度图(1)一个城市到另一个城市查询模块图 12.3查询任意两个城市的路径模块图交通咨询管理系统弗洛伊德算法求路径任意两个城市路径的查询显示旅客咨询的信息即路径长度图(2)任意两个城市之间路径查询模块图2.4整个系统程序模块图 交通咨询管理系统管理员界面用户界面显示交通网创建城市交通网络信息网咨询一个城市到其它城市的路径问题咨询任意两个城市之间的路径问题显示

4、城市间的路径图(3)整个系统查询模块图 2三、主要功能的实现3.1.1城市交通咨询系统的流程图输入功能选择管理员用户显示交通网运行输出结果退出开始结束YN图(4)城市交通咨询系统的流程图在本系统中设置了三个模块分别为:管理员模块:这个模块包含了创建城市交通信息网,它是这个程序往下运行的前提。用户模块:这个模块是属于用户的在已创建好的交通网上选择自己的需求。显示交通网模块:这个模块是计算机的运算,运算出来的是用户想要的结果。 3开始路径初始化选取不在S中且具有最短路径 的的城市U城市U加入S中修改不在S中的城市的距离所有城市的最短路径是否都求出输出结果结束YN3.1.2一个城市到其它城市路径的查

5、询 图(5)一个城市到其它城市路径的查询流程图 43.1.3任意两个城市之间路径的查询路径初始化最短路径是否经过其他城市最短路径为所经过的城市之间的最短路径之和任意两个城市之间的最短距离是否求出输出结果结束开始NYYN图(6)任意两个城市之间路径的查询 53.2.1一个城市到其它城市路径查询函数调用关系图 OnetoAnotherInfo()函数DijkstraShortDistance()函数Dijkstra()函数输出结果图(7)一个城市到其它城市路径查询函数调用关系图3.2.2任意两个城市之间路径查询函数调用关系图TwoCityInfo()函数FloydShortDistance() 函

6、数Floyd() 函数输出结果图(8)任意两个城市之间路径查询函数调用关系图 63.3.1 创建城市交通信息网模块算法代码 void AdjMatrix:CreateGraph()/构造交通图 City city1,city2; int distance;/ char flag=y; char *ch=new char(10); coutiVexNum; cout输入城市的信息:endl; for(int i=1;i=iVexNum;i+) cout序号i的; coutcityi.Name; cityi.Number=i; cout请输入路线的数目:iEdgNum; for(i=0;iiEdg

7、Num;i+) cout输入两个城市的信息:endl; coutcity1.Name; city1.Number=GetCityNum(city1.Name); coutcity2.Name; city2.Number=GetCityNum(city2.Name); coutdistance; Routecity1.Numbercity2.Number.iDistance=distance; return; 3.3.2一个城市到其它城市路径查询模块的算法代码void AdjMatrix:DijkstraShortDistance()/求一个城市到其他城市的最短路程 char *cityname

8、=new char; coutcityname; int v0=GetCityNum(cityname); int *dist=new intiVexNum; int *path=new intiVexNum; Dijkstra(v0,dist,path); cout从cityname城市到其他城市的最短路程为:endl; for(int i=1;i=iVexNum;i+) cout到城市GetCityName(i) 的最短距离为distin; if(pathi!=-1) cout路径为GetCityName(i)-; int x=pathi; while(x!=v0) coutGetCity

9、Name(x)-; x=pathx; coutcityname; coutendl; 8 else coutendl; 3.3.3任意两个城市之间路径查询模块的算法代码void AdjMatrix:FloydShortDistance()/求一个城市到其他城市的最短路程 char *cityname1=new char; char *cityname2=new char; int distMaxValueMaxValue; int pathMaxValueMaxValue; cout请输入两个城市:; coutcityname1; coutcityname2; int i= GetCityNu

10、m(cityname1); int j= GetCityNum(cityname2); Floyd( dist, path); cout城市cityname1到城市cityname2 的最短路径为distijendl; if(pathij!=-1) cout路径为:cityname2-; int x=pathij; while(x!=i) coutGetCityName(x)-; x=pathix; coutcityname1; coutendl; 9 else coutendl;四、程序调式4.1测试数据登录界面,即主界面图(9)主界面图(10)创建城市交通信息网界面图(11)创建城市交通信

11、息网界面 10图(12)用户使用界面图(13)一个城市到另一个城市的最短路径查询界面图(14)任意两个城市之间路径的查询界面图(15)退出系统界面 114.2程序调试中遇到的问题以及解决问题的方法 在本次程序设计中,遇到了不少的问题。首先就是怎么把图中的顶点和边转换成实际中的城市和城市之间距离信息的问题。为此我在本程序中写了两个函数,专门进行它们之间的转换。GetCityName()/返回城市的名字,GetCityNum()/通过城市名字取得城市的编号。 其次由于本程序是交通网,信息要求及时更新,所以我设置了管理员模块,管理员可以及时增加城市之间的信息。 第三,由于模块之间是相互嵌套调用的,所

12、以用户在进行较高层次的使用后需要返回上一界面,因此就需要return函数。我在调试了几次后才最终确定return函数的位置。 第四,在计算路径时采取的迪克斯特拉算法及弗洛伊德算法,由于if语句的嵌套使用,会漏掉中括号,分号等,在调试中一一找出并进行纠正。4.3课程设计过程心得体会一周的数据结构课程设计很快就结束了,留给我们在这方面走的路却很远。本次实习,对我们来说可以说是一次小小的挑战。因为在理论实习中没有较好地把握,现在要完成一个较为复杂的程序编写,确实有点难度,但我们还是认真积极地完成了这次实习。通过本次实验,我充分了解掌握了在图结构中最短路径的算法问题,并结合图的储存结构、迪杰斯特拉算法

13、、费洛依德算法等解决了交通咨询系统的设计。源程序打出来后有多处错误,大小写错误、符号错误、遗漏等等,经反复检查调试后实验成功。在答辩时和老师讨论了我这个程序的不足及有待改进的地方,使我对自己的设计有了更好的把握及改进。感觉自己在编程方面更需要多多锻炼。 这次课程设计我相信在我们以后语言方面的学习中肯定会有莫大的帮助,我们必须认真思考,一步一个脚印,才可以达到我们预期的彼岸。 12五、使用说明 本交通咨询系统设计界面友好,通俗易懂。 运行程序,系统会弹出提示界面,使用本系统前请先建立城市交通信息网,也即由管理者添加要加入到这个信息网的城市及城市之间的信息。添加完毕后会提示建立完毕,弹出选项框。如

14、下图:图(16)选项框旅客选择2选项后,即进入用户界面,如下图:图(17)用户界面此时,用户可以根据自己的需要进行选择,接下来会提示旅客输入自己要查询的城市或者两个城市的名字。图(18)提示界面图(19)咨询界面查询完毕后,选择0选项退出系统。图(20)退出界面 13整的来说,由于界面的友好性,相信使用的旅客都会感觉到其方便。 六、附件#ifndef ADJMATRIX_H#define ADJMATRIX_H#include#includeusing namespace std;const int MaxValue=200;/城市路程最大值struct EdgeType int iDista

15、nce;/路程;struct City int Number; char *Name;/城市结构体,包括城市名字以及城市在图结构中的编号class AdjMatrixpublic: AdjMatrix(int n);/构造函数 int GetVexNum();/取得交通图的城市个数 int GetEdgNum();/取得交通图的路线数目 int GetCityNum(char* cityname);/通过城市名字取得城市的编号 char* GetCityName(const int i);/通过序号取得城市的名字 void CreateGraph();/构造交通图 void ShowRoute

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

17、市间的路线 City cityMaxValue;/图的顶点,即城市 EdgeType RouteMaxValueMaxValue;/各边的权值,即路程;/交通网络图,有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; else Routeij.iDistance=MaxValue; iVexNum=iEdgNum=0;int AdjMatrix:GetV

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

19、有错误endl; return -1;void AdjMatrix:CreateGraph()/构造交通图 City city1,city2; int distance;/ char flag=y; char *ch=new char(10); coutiVexNum; cout输入城市的信息:endl; for(int i=1;i=iVexNum;i+) cout序号i的; coutcityi.Name; cityi.Number=i; cout请输入路线的数目:iEdgNum; for(i=0;iiEdgNum;i+) 16 cout输入两个城市的信息:endl; coutcity1.Na

20、me; city1.Number=GetCityNum(city1.Name); coutcity2.Name; city2.Number=GetCityNum(city2.Name); coutdistance; Routecity1.Numbercity2.Number.iDistance=distance; return;void AdjMatrix:ShowRouteLength()/向用户显示各个城市之间路程长度 coutt; for(int i=1;i=iVexNum;i+) coutcityi.Namet; coutendl; for(i=1;i=iVexNum;i+) cout

21、cityi.Namet; for(int j=1;j=iVexNum;j+) coutRouteij.iDistancet; coutendl; void AdjMatrix:Dijkstra(int v0,int dist,int path)/迪克斯特拉算法,在一个图中求一个点到其他点的最短距离 17 int mindis; int *s=new int(10); int u; for(int i=1;i=iVexNum;i+) disti=Routev0i.iDistance; si=0; if(i!=v0&distiMaxValue) pathi=v0; else pathi=-1; d

22、istv0=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;w=iVexNum;w+) if (0=sw&Routeuw.iDistanceMaxValue&distu+Routeuw.iDistancedistw) distw=distu+Routeuw.iDistance; 18 pathw=u; void AdjMatr

23、ix:DijkstraShortDistance()/求一个城市到其他城市的最短路程 char *cityname=new char; coutcityname; int v0=GetCityNum(cityname); int *dist=new intiVexNum; int *path=new intiVexNum; Dijkstra(v0,dist,path); cout从cityname城市到其他城市的最短路程为:endl; for(int i=1;i=iVexNum;i+) cout到城市GetCityName(i) 的最短距离为distin; if(pathi!=-1) cout

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

25、ij!=MaxValue) pathij=i; else if(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 distMaxValueMaxValue; i

26、nt pathMaxValueMaxValue; 20 cout请输入两个城市:; coutcityname1; coutcityname2; int i= GetCityNum(cityname1); int j= GetCityNum(cityname2); Floyd( dist, path); cout城市cityname1到城市cityname2 的最短路径为distijendl; if(pathij!=-1) cout路径为:cityname2-; int x=pathij; while(x!=i) coutGetCityName(x)-; x=pathix; coutcityna

27、me1; coutendl; else coutendl;AdjMatrix Gragh(20); void Administrator() /管理员管理咨询系统的界面 int i; coutendl; couttt*这里是管理员的界面,欢迎进入*endl; couttt1=创建城市交通网络endl tt0=返回上一级菜单endl; 21 couti; while(i=1) Gragh.CreateGraph();cout1=创建城市交通网络endl0=返回上一级菜单endl;couti; return;void OnetoAnotherInfo()/一个城市到其他城市信息的查询 int i;

28、coutendl;cout1=咨询一个城市到其他城市的最短路径endl0=返回上一级菜单endl;couti;while(i=1)Gragh.DijkstraShortDistance(); cout1=咨询一个城市到其他城市的最短路径endl 0=返回上一级菜单endl;couti; return;void TwoCityInfo()/两个城市之间的信息查询 22int i;coutendl; cout1=咨询两个城市之间的最短路程endl 0=返回上一级菜单endl;couti;while(i=1)Gragh.FloydShortDistance(); cout1=咨询两个城市之间的最短路

29、程endl 0=返回上一级菜单endl; couti; return;int Passenger()/显示用户的界面int i;coutendl;cout*这里是用户界面,欢迎进入*endl;cout1=咨询一个城市到其他城市的信息endl2=咨询任意两个城市之间的信息endl0=返回上一级菜单endl;couti;while(i!=0)switch(i)case 1:OnetoAnotherInfo();break;case 2:TwoCityInfo();break; 23 cout1=咨询一个城市到其他城市的信息endl 2=咨询任意两个城市之间的信息endl 0=返回上一级菜单endl

30、; couti; return 1;void ShowTrafficNet() /显示交通网络 int i; coutendl; cout*显示交通网路线的长度,欢迎进入*endl; cout1=显示路程长度endl 0=返回上一级菜单endl; couti; while(i=1) Gragh.ShowRouteLength();/显示城市间的路程 cout1=显示路程长度endl 0=返回上一级菜单endl; couti; return;void main()/主函数 int i; couttt*您好!欢迎使用交通咨询系统*endl; 24 couttt*请先创建城市交通网*endl; Administrator(); while(i!=0) cout现在请选择:endl 1=管理员endl 2=用户endl 3=显示交通网(用矩阵形式)endl 0=退出endl; cout i; switch(i) case 1:Administrator();break;/此处要显示管理员的界面 case 2:Passenger();break;/此处显示用户的界面 case 3:ShowTrafficNet();break; return;

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服