




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 目录第一章 需求分析11.1题目分析21.2实现方法21.2.1图的实现和声明21.2.2程序功能的实现3第二章 系统功能模块设计4第三章 流程图5第四章 运行调试6第五章 实验总结9第六章 致谢10附录一11附录二12程序设计综合课程设计交通咨询模拟第一章 需求分析设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:一是建立交通网络图的存储结构,二实现两个城市间的最短路经问题。程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询。实现了帮助用户了解全国各大城市间往来的最短路径问题,第二,可以提供用户查询各大城市的相关信息。本程序最大的特点是支持用户自己添加城市信息及
2、城市,或添加城市的路径,既就有可扩展性。该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。此程序规定:(1) 在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。(2) 程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。(3) 程序的功能包括:提供对城市信息的
3、编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。1.1题目分析1通过对题目的分析知,是要让我们能够通过利用所学的数据结构的基本知识和技能来解决程序设计问,因此在搞程序设计之前先好好的把书复习一遍,弄清楚各个知识之间的联系。2由题目的分析知全国交通咨询管理系统是有对城市信息的增加、删除、修改、保存、查询、有错时提示出错信息等功能,最后对数据进行保存并退出操作系统。由此可知需要将函数模块化,将它做为一个独立的函数体去实现它的功能。它可以分为四大功能模块,每个模块需要去各个击破。其中可能用到C+语言的指针与链表,因此,要先去复习一下C+语言课本。3根
4、据这些功能和基本要求,可充分运用我们所学的数据结构的基本知识和技能去逐步的解决。其中将函数进行模块化。在数据结构中,通过队列,栈,图的声明来实现系统的各种功能的存储各城市之间乘火车的消耗价格,时间,乘飞机的价格,时间,以及中转站最少。利用指针和结点来实现城市与城市之间各种操作,而这些知识点都是我们学习数据结构必须掌握和学会运用的。4完成程序功能的设置后,应对程序进行调试,以便在调试中能及时地找出错误并加以更正,这样能使程序功能进一步的完善和正确。这就要求我们在编程和调试过程中养成认真分析和善于发现问题并及时解决的习惯,不懂的及时问老师或者其他同学。 1.2实现方法1.2.1图的实现和声明(1)
5、利用带权图,构建交通网络图(2)根据题目要求,声明了一个图形的数据结构用来存储任意几个城市之间的各种信息,其中是把它们的TTime; TPrice; FTime; FPrice;的各种信息用邻接矩阵存储起来的。同时运用构造函数,利用特定的值来构造对象。(3)struct City图的结构,CreateCity建立邻接图,AddCity增加,DelCity删除,EditCity修改,ShortestPath最小路径,ShortestPath_DIJ求源点v0到各点的最短路径 1火车时间最小,2火车金钱最小,3飞机时间最小,4飞机金钱最小,来实现的。 1.2.2程序功能的实现(1)全国交通咨询信息
6、录入和增加的实现主要是对城市基本信息的输入,包括(乘火车的价格,乘火车的时间,乘飞机的价格,乘飞机的时间,中转站次数最少)在程序中只要用AddCity (输入函数)和ShortestPath(C);来实现。(2)全国交通咨询信息显示的实现主要为用户ShortestPath(C);函数显示城市之间的基本信息,包括上面录入的信息和增加的内容。(3)全国交通咨询信息载入文件的实现在程序中用LoadCity(C);break()函数来载入文件。(4)全国交通咨询信息删除的实现在程序中用DelCity(C)函数来实现对有错的信息进行删除。(5)全国交通咨询信息修改的实现在程序中用EditCity(C)(
7、修改函数)来实现,而且可通过按编号或城市名来修改,当找不到要修改的内容时提示用户可能输入有误,重新在输一遍。(6)全国交通咨询信息的重来 CreateCity(C);break重来,实现对错误的从新输入。(7)全国交通咨询信息的保存在程序中用SaveCity(C)保存函数来实现,并提示用户数据已保存。(8)全国交通咨询信息的增加ShowCityDat(C);break, case 2:AddCity(C);break 增加。第二章 系统功能模块设计 该课题可以分为如下几个模块:控制选择功能项的main函数、建立邻接图的CreateCity(City *C)函数、增加城市的AddCity(Cit
8、y *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这个程序由三部分组成:管理员:这个模块包含了创建交通网跟增加城市两个,它是这 个程序往下运行的前提。用户:这个模块的是属于用户
9、的在创建好的交通网上选择自己的需求。显示交通网:这个模块是计算机的运算,运算出来的是用户想要的结果。第三章 流程图图2 系统流程图开始运行程序,输入命令,进入各种不同的功能区,进行各自的功能,分别运行,然后输出结果。结束后,如果退出就结束,不退出重复上面的功能。第四章 运行调试登陆界面:管理界面中有3大模块即我们说的三大功能 图3 登陆界面进入管理员模式进行城市交通网络的创建:在这个模块中我们选择1 创建城市数目是3 分别为a、b、c设ab间的路程是20,ac的潞城市30,bc的路程是40 创建建通网络图。26 图4管理员界面这块是用户模式,在用户进入系统之后,进行查询:在用户中我们输入1咨询
10、两个城市间的信息再次选择1咨询最短的路程 a到a ,a到b的,a到c的。在界面输入1的前提下分别输入2,3。结果如下:图5 用户界面图6 交通信息系统界面图7 咨询信息界面图8 交通信息网的的结果第五章 实验总结第六章 致谢附录一1数据结构C语言版 严蔚敏、吴伟民,清华大学出版社,20022数据结构课程实验 徐孝凯,清华大学出版社, 20023数据结构程序设计题典 李春葆,清华大学出版社,2002附录二/*/ 交通咨询系统 / / /*/邻接矩阵类/#include #ifndef ADJMATRIX_H#define ADJMATRIX_H#include#includeusing name
11、space std;const int MaxValue=100;/最大值struct EdgeType int iDistance;/路程 int iCost; /费用 float fTime; /所花费的时间;/城市结构体,包括城市名字以及城市在图中的编号struct City int Number; char *Name;/交通网络图,有iVexNum个城市,城市之间有iEdgNum条路线,每条路线上的时间路程费用为/RouteMaxValueMaxValueclass AdjMatrixpublic: /AdjMatrix();/图的初始化,构造函数 AdjMatrix(int n);
12、 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
13、ShowRouteLength();/向用户显示路程长度 void ShowRouteCost();/向用户显示路程车票 void ShowRouteTime();/向用户显示路程时间 void Dijkstra(int v,int dist,int path);/求一个源点到其他点的最短性质 void DijkstraShortDistance();/一个城市到其他城市的最短距离 void DijkstraLessTime();/一个城市到其他城市的最少时间 void DijkstraLessCost();/一个城市到其他城市的最少花费 void Floyd(int distMaxValue
14、MaxValue,int pathMaxValueMaxValue); /两个点之间的最短性质 void FloydShortDistance();/两个城市之间的最段距离 void FloydLessTime();/两个城市之间的最少时间 void FloydLessCost();/两个城市之间的最少花费private: int iVexNum;/顶点数,即城市个数 int iEdgNum;/边数,即城市间的路线 City cityMaxValue;/图的顶点,即城市 EdgeType RouteMaxValueMaxValue;/各边的权值,即路线的时间费用以及路程;#endif /Adj
15、Matrix.cpp/#include AdjMatrix.h#includeusing namespace std;AdjMatrix:AdjMatrix(int n)/初始化有n个顶点的邻接矩阵 for(int i=0;in;i+) for(int j=0;jn;j+) if(i=j) Routeij.fTime=0; Routeij.iCost=0; Routeij.iDistance=0; else Routeij.fTime=MaxValue; Routeij.iCost=MaxValue; Routeij.iDistance=MaxValue; iVexNum=iEdgNum=0;
16、int AdjMatrix:GetVexNum() return iVexNum; int AdjMatrix:GetEdgNum() return iEdgNum;char* AdjMatrix:GetCityName(const int i)/取城市的名字 if(iiVexNum) cerr参数越界,发生错误了!endl; exit(1); return cityi.Name;int AdjMatrix:GetCityNum(char* cityname) for(int i=1;i=iVexNum;i+) if (strcmp(cityi.Name,cityname)=0) return
17、 cityi.Number; cerr您输入的城市有错误endl; return -1;void AdjMatrix:PrintGragh()/将图打印出来,最初测试之用 for(int i=0;iiVexNum;i+) for(int j=0;jiVexNum;j+) if(100=Routei+1j+1.iDistance) Routei+1j+1.iDistance=1000; coutRoutei+1j+1.iDistancet coutendl; void AdjMatrix:Check(int &i,int &j)/检查输入的边的序号是否越界,若越界就重输 while(1) if(
18、iiVexNum|jiVexNum) cerr参数越界,发生错误了,请重输!ij; /done/void AdjMatrix:CreateGraph()/为了方便真是先把时间跟费用这两个权值给屏蔽掉了 City city1,city2; int time,distance,cost; 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;
19、for(i=0;iiEdgNum;i+) cout输入两个城市的信息:endl; / coutcity1.Number; coutcity1.Name; / cout序号是GetCityNum(city1.Name)endl; / coutcity2.Number; city1.Number=GetCityNum(city1.Name); coutcity2.Name; city2.Number=GetCityNum(city2.Name); /cout序号是GetCityNum(city2.Name)endl; / couttime; / Routecity1.Numbercity2.Num
20、ber.fTime=time; / Routecity2.Numbercity1.Number.fTime=time; / coutcost; / Routecity1.Numbercity2.Number.iCost=cost; / Routecity2.Numbercity1.Number.iCost=cost; coutdistance; Routecity1.Numbercity2.Number.iDistance=distance; / Routecity2.Numbercity1.Number.iDistance=distance; /* 可以保存到相应的文件 FILE *fp1,
21、*fp2; if(fp1=fopen(city.txt,wb)=NULL) printf(无法打开文件!n); return; for(int j=1;j,cityj.Number); fprintf(fp1,%s ,cityj.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, Routecity1.Numbercit
22、y2.Number.iDistance, Routecity1.Numbercity2.Number.iCost, Routecity1.Numbercity2.Number.fTime); fclose(fp2);*/ 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+) coutRout
23、eij.iDistancet; coutendl; void AdjMatrix:ShowRouteCost()/向用户显示各个城市之间路程车票 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.iCostt; coutendl; void AdjMatrix:ShowRouteTime()/向用户显示各个城市之间路程时间coutt; for(int i=1;i=iVexN
24、um;i+) coutcityi.Namet; coutendl; for(i=1;i=iVexNum;i+) coutcityi.Namet; for(int j=1;j=iVexNum;j+) coutRouteij.fTimet; coutendl; 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+) disti=Ro
25、utev0i.iDistance; si=0; if(i!=v0&distiMaxValue) pathi=v0; else pathi=-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;w=iVexNum;w+) if (0=sw&Routeuw.iDistanceMaxValue&distu+Route
26、uw.iDistancedistw) distw=distu+Routeuw.iDistance; pathw=u; void AdjMatrix:DijkstraShortDistance()/求一个城市到其他城市的最短路程/然后将这个路线打印出来,不过是倒着打的,要正打的话可以用一个栈来实现 char *cityname=new char; coutcityname; int v0=GetCityNum(cityname); int *dist=new intiVexNum; int *path=new intiVexNum; Dijkstra(v0,dist,path); cout从ci
27、tyname城市到其他城市的最短路程为:endl; for(int i=1;i=iVexNum;i+) cout到城市GetCityName(i) 的最短距离为distin; if(pathi!=-1) cout路径为GetCityName(i)-; int x=pathi; while(x!=v0) coutGetCityName(x)-; x=pathx; coutcityname; coutendl; else coutendl; void AdjMatrix:DijkstraLessTime() char *cityname=new char; coutcityname; int v0
28、=GetCityNum(cityname); int *dist=new intiVexNum; int *path=new intiVexNum; Dijkstra(v0,dist,path); cout从 cityname城市到其他城市的最少时间为:n; for(int i=1;i=iVexNum;i+) cout到城市GetCityName(i) 的最少时间为distiendl; void AdjMatrix:DijkstraLessCost() char *cityname=new char; coutcityname; int v0=GetCityNum(cityname); int
29、 *dist=new intiVexNum; int *path=new intiVexNum; Dijkstra(v0,dist,path); cout从 cityname城市到其他城市的最少花费为:n; for(int i=1;i=iVexNum;i+) cout到城市GetCityName(i) 的最少花费为distiendl; void AdjMatrix:Floyd(int distMaxValueMaxValue,int pathMaxValueMaxValue)/求一个源点到其他点的最短距离/函数里面城市图的权值还是先展示用的两地路程 即iDistance int i,j,k;
30、for(i=1;i=iVexNum;i+) for(j=1;j=iVexNum;j+) distij=Routeij.iDistance; if(i!=j&distij!=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()/求一个城市到其他城市的最短
31、路程/然后将这个路线打印出来,不过是倒着打的,要正打的话可以用一个栈来实现 char *cityname1=new char; char *cityname2=new char; int distMaxValueMaxValue; int pathMaxValueMaxValue; cout请输入两个城市:; coutcityname1; coutcityname2; int i= GetCityNum(cityname1); int j= GetCityNum(cityname2); Floyd( dist, path); cout城市cityname1到城市cityname2 的最短路径为
32、distijendl; if(pathij!=-1) cout路径为:cityname2-; int x=pathij; while(x!=i) coutGetCityName(x)-; x=pathix; coutcityname1; coutendl; else coutendl;void AdjMatrix:FloydLessTime() char *cityname1=new char; char *cityname2=new char; cout请输入两个城市:; coutcityname1; coutcityname2; int i= GetCityNum(cityname1);
33、int j= GetCityNum(cityname2); int distMaxValueMaxValue; int pathMaxValueMaxValue; Floyd( dist, path); cout城市cityname1到城市cityname2 的最少时间为distijendl;void AdjMatrix:FloydLessCost() char *cityname1=new char; char *cityname2=new char; cout请输入两个城市:; coutcityname1; coutcityname2; int i= GetCityNum(cityname
34、1); int j= GetCityNum(cityname2); int distMaxValueMaxValue; int pathMaxValueMaxValue; Floyd( dist, path); cout城市cityname1到城市cityname2 的最少花费为distijendl;/*/最初的代码。后来舍弃了void AdjMatrix:CreateCity() int i=0,tempnumber=0; char temp=y; coutCityi+; cout继续输入(y/n)?temp; cout请输入城市名字: ; tempnumber+; coutendl; iV
35、exNum=tempnumber; void AdjMatrix:CreateRoute() char *city1; char *city2; int cost; int time2; int distance; cout请输入各路线信息endl; coutcity1; coutcity2; coutdistance; coutcost; cout开车时间:; scanf(%d:%d,&time0,&time1); while(time0=24|time1=60) coutn时间输入错误,请重输!endl; scanf( %d:%d, &time0, &time1 ); cout到达时间:;
36、 scanf(%d:%d,&time0,&time1); while(time0=24|time1=60) coutn时间输入错误,请重输!endl; scanf( %d:%d, &time0, &time1 ); EdgeType AdjMatrix:GetRoute(const int v1,const int v2)/取权值 if(v1iVexNum|v2iVexNum) cerr参数越界,发生错误了!endl; exit(1); return Routev1v2;*/main.cpp#include/#include AdjMatrix.husing namespace std;Adj
37、Matrix Gragh(10); /done/void Administrator() /管理员管理项目的界面/里面包括城市网络的初始化,以及增加城市等功能 int i; coutendl; cout*这里是管理员的界面,欢迎进入*endl; cout1=创建城市交通网络endl 2=增加城市endl 0=返回上一级菜单endl; couti; while(i!=0) switch(i) case 1:Gragh.CreateGraph();break; case 2:;break;/增加城市尚未实现(*_*) cout1=创建城市交通网络endl 2=增加城市endl 0=返回上一级菜单e
38、ndl; couti; return;/done/void OnetoAnotherInfo()/一个城市到其他城市信息的查询 int i; coutendl; cout1=咨询一个城市到其他城市的最短路径endl 2=咨询一个城市到其他城市的最少时间endl 3=咨询一个城市到其他城市的最少车票endl 0=返回上一级菜单endl; couti; while(i!=0) switch(i) case 1:Gragh.DijkstraShortDistance();break; case 2:Gragh.DijkstraLessTime();break; case 3:Gragh.DijkstraLessCost();break; cout1=咨询一个城市到其他城市的最短路径endl 2=咨询一个城市到其他城市的最少时间endl 3=咨询一个城市到其他城市的最少车票endl 0=返回上一级菜单endl; couti; return; void TwoCityInfo()/两个城市之间的信息查询 int i; coutendl; cout1=咨询两个城市之间的最短路程endl 2=咨询两个城市之间的最少时间endl 3=咨询两个城市之间的最少车票endl 0=返回上一级菜单endl; co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广德市市属事业单位考试真题
- 工厂安全培训考试题(培优B卷)
- 机关单位食堂经营管理方案计划
- 医院护理工作心得体会
- 小学一年级班主任科学探究计划
- 六年级美术创意课程实施计划
- 非营利组织财务管理自查报告
- 帕金森病患者的安全护理计划
- 四年级上册作文交流与合作计划
- 学校食品安全知识竞赛活动计划
- 汉字的奥秘探索
- 《海上风电设备运输规范》
- 2024年江苏省徐州市中考数学真题卷及答案解析
- 2025届云南省民族大学附属中学高三(最后冲刺)数学试卷含解析
- 湖北省七市2025届高三下学期第五次调研考试数学试题含解析
- 2024年太阳能电池片产业海外专利预警分析报告
- 2023河南专升本英语真题及答案
- 河流沿岸护栏安装工程协议
- 前庭阵发症-讲稿
- 第十三届全国交通运输行业城市轨道交通列车司机(学生组)职业技能大赛技术方案
- 同煤集团巷道支护理论计算设计方法(初稿)
评论
0/150
提交评论