全国交通咨询模拟系统实验报告

上传人:灯火****19 文档编号:43950373 上传时间:2021-12-05 格式:DOCX 页数:37 大小:1.05MB
收藏 版权申诉 举报 下载
全国交通咨询模拟系统实验报告_第1页
第1页 / 共37页
全国交通咨询模拟系统实验报告_第2页
第2页 / 共37页
全国交通咨询模拟系统实验报告_第3页
第3页 / 共37页
资源描述:

《全国交通咨询模拟系统实验报告》由会员分享,可在线阅读,更多相关《全国交通咨询模拟系统实验报告(37页珍藏版)》请在装配图网上搜索。

1、百度文库-让每个人平等地提升自我一、问题描述 全国交通咨询模拟:处于对不同目的的旅客对交通工具有不同的要求。 例如, 因公出差的旅客希望在旅途中的时间尽可能短,、出门旅游的游客则希望旅费尽可 能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序, 为旅客提供两种或三种最优决策的交通咨询。【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和 飞机航班进行编辑(增设或删除)的功能。(3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种 交通工具。(4)旅途中耗费的总时间应该包括中转站的等候时间。(5)咨询

2、以用户和计算机的对话方式进行。由用户输入起始站、终 点站、最优决策原则和交通工具,输出信息:最快需要多长时 间才能到达或者最少需要多少旅费才能到达,并详细说明依次 于何时乘坐哪一趟列车或哪一次班机到何地。2*木齐2161892110011456651上海409福州深圳255 /柳州 672 酷宁704贵阳 607639昆明842534967907305349 A4津黑242,哈尔滨长春二、数据结构设计和核心算法设计描述:1、根据题目中的基本要求分析,可以创建系统概念模型,流程设计框图如下:百度文库-让每个人平等地提升自我百度文库-让每个人平等地提升自我3、核心设计:根据上面的流程图和逻辑拆分,

3、对这个问题有了一个比较直观,详细地了解。并且从中也可得知路线的添加即数据的存储是这个系统进行运作的 一个基础。而为了便于数据的存储、添加、删除等操作,我选择了储存文件对这 些数据进行了存储。将每个信息量放在不同的文件中, 可以更有效、直观地对这 些数据进行处理。流程图中的7个主要功能模块在主函数中,采用输入选项进入子菜单,但是 其他操作都是在路线添加好后进行的, 并且为了每一项功能进行完后,系统可以25及时回到主交互界面,我采用的是无限循环形式,即 while (1)。以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外, 包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多

4、项属性。三、主控及功能模块层次结构:1、模块说明:本系统分为个模块1、)主函数2、)添加城市3、)查找城市并返回序号4、)删除城市5、)添加列车6、)添加航班7、)删除列车或航班8、)找出最小费用路线9、)初始化系统数据(读入内存)10、)找出最快路线11、)计算最快路线耗费的时间并打印12、)计算最小费用路线13、)主界面14、)存储信息到文件15、)退出、2、下面是各模块示意图:*找出国力簧用环式即出一小 苒用睽就m询帚中|:间路线初始化系项曼据从文计覃导快西 线耗普的时 到芦立也他信息到文件基本操作:TrafficNodeDat交通工具 信息Char nameMAX_STRING_N U

5、M班次Int starttime出发时间 /Int starttime到达时间/Int cost票价UNodeDat路线 信息Short int city城市编号1Int TrainNum/火车路线数int FlightNum航班路线数TrafficNodeDat TrainMAX_TRAFFIC_ NUM火车路线信息TrafficNodeDatFlightMAX TRAFFIC航班路线信息NUM函数变量声明:#include /#include /# define ERR 0# define OK 1# define Dij_MAXN 33# define MAX_VERTEX_NUM 31

6、# define MAX_STRING_NUM 10# define MAX_TRAFFIC_NUM 10const char CityFile口 =D:;const char TrainFile口 =D:;const char FlightFile口 =D:;typedef short int CityType;typedef struct TrafficNodechar nameMAX_STRING_NUM; rainNum;fprintf(fp,%dn,total);for (i=0;iCityNum;i+)for (j=0;jAdjListi.TrainNum;j+)fprintf(f

7、p,%s %s %s , AdjListi.Trainj.name, CityNamei, /%dn,CityNameAdjListi.Trainj.EndCity);fprintf(fp,%2d:%2d%2d:%2dAdjListi.Trainj.StartTime/60,AdjListi.Trainj.StartTime%60,AdjListi.Trainj.StopTime/60, AdjListi.Trainj.StopTime%60, AdjListi.Trainj.Cost);fclose(fp);total=0;fp=fopen(FlightFile,w);for (i=0;iC

8、ityNum;i+)total+=AdjListi.FlightNum;fprintf(fp,%dn,total);for (i=0;iCityNum;i+)for (j=0;jAdjListi.FlightNum;j+)fprintf(fp,%s %s %s , AdjListi.Flightj.name, CityNamei, CityNameAdjListi.Flightj.EndCity);fprintf(fp,%2d:%2d%2d:%2d%dn,AdjListi.Flightj.StartTime/60,AdjListi.Flightj.StartTime%60, AdjListi.

9、Flightj.StopTime/60, AdjListi.Flightj.StopTime%60, AdjListi.Flightj.Cost); fclose(fp);return 1;(4)添加城市:int InsertCity (char *Name) /strcpy(CityNameCityNum,Name);AdjListCityNum.city=CityNum;AdjListCityNum.FlightNum=0;AdjListCityNum.TrainNum=0;CityNum+; /return 1;(5)删除城市:int DelCity (char *Name) int c

10、ity,i,j;city=SeekCity(Name);for (i=city;iCityNum-1;i+) strcpy(CityNamei,CityNamei+1);AdjListi.FlightNum=AdjListi+1.FlightNum;AdjListi.TrainNum=AdjListi+1.TrainNum; for (j=0;jAdjListi.FlightNum;j+)AdjListi.Flightj.Cost=AdjListi+1.Flightj.Cost;AdjListi.Flightj.EndCity=AdjListi+1.Flightj.EndCity;strcpy

11、(AdjListi.Flightj.name,AdjListi+1.Flightj.name);AdjListi.Flightj.StartTime=AdjListi+1.Flightj.StartTime;AdjListi.Flightj.StopTime=AdjListi+1.Flightj.StopTime; CityNum-;return 1;(6)添加火车路线:int InsertTrain (char *train,char *StartCity,char *EndCity,int StartTime,int EndTime,int cost)int i,j;i=SeekCity(

12、StartCity);j=SeekCity(EndCity);AdjListi.TrainAdjListi.TrainNum.Cost=cost;AdjListi.TrainAdjListi.TrainNum.EndCity=j;AdjListi.TrainAdjListi.TrainNum.StartTime=StartTime;AdjListi.TrainAdjListi.TrainNum.StopTime=EndTime; strcpy(AdjListi.TrainAdjListi.TrainNum.name,train);AdjListi.TrainNum+;return 1;Star

13、tTime,int(7)添加航班路线:int InsertFlight(char *flight,char *StartCity,char *EndCity,intEndTime,int cost)int i,j;i=SeekCity(StartCity);j=SeekCity(EndCity);AdjListi.FlightAdjListi.FlightNum.Cost=cost;AdjListi.FlightAdjListi.FlightNum.EndCity=j;AdjListi.FlightAdjListi.FlightNum.StartTime=StartTime;AdjListi.

14、FlightAdjListi.FlightNum.StopTime=EndTime; strcpy(AdjListi.FlightAdjListi.FlightNum.name,flight);AdjListi.FlightNum+;return 1;(8)删除路线:int DelPath (char *name)int i,j,flag=0;for (i=0;iCityNum;i+)for (j=0;jAdjListi.FlightNum;j+)if (strcmp(AdjListi.Flightj.name,name)=0)flag=1;break; /if (flag)for (;jAd

15、jListi.FlightNum-1;j+)AdjListi.Flightj.Cost=AdjListi.Flightj+1.Cost;AdjListi.Flightj.EndCity=AdjListi.Flightj+1.EndCity;strcpy(AdjListi.Flightj.name,AdjListi.Flightj+1.name);AdjListi.Flightj.StartTime=AdjListi.Flightj+1.StartTime;AdjListi.Flightj.StopTime=AdjListi.Flightj+1.StopTime;AdjListi.FlightN

16、um-;break;for (j=0;jAdjListi.TrainNum;j+)if (strcmp(AdjListi.Trainj.name,name)=0)flag=1;break;if (flag)for (;jAdjListtracki.Traink.Co st)min=AdjListtracki.Traink.Cost; tmp=k;printf(%s ,AdjListtracki.Traintmp.name);startH = AdjListtracki.Traintmp.StartTime/60 ;startM = AdjListtracki.Traintmp.StartTim

17、e%60;endH = AdjListtracki.Traintmp.StopTime/60 ;endM = AdjListtracki.Traintmp.StopTime%60 ;if( !(startH/10)printf(0);printf(%d:,startH);if( !(startM/10)printf(0); printf(%d - ,startM);if( !(endH/10)printf(0);printf(%d:,endH);if( !(endM/10)printf(0);printf(%dn,endM);raintmp.StartTime/60,AdjListtracki

18、.Traintmp.StartTime%60,AdjListtrac ki.Traintmp.StopTime/60,AdjListtracki.Traintmp.StopTime%60);elsefor(i-;i0;i-)printf(n%s:,CityNametracki); end=tracki-1;min=32767;for (k=0;kAdjListtracki.Flightk.Co st)/ */ if(AdjListtracki.Flightk.EndCity=end&minAdjListtracki.Flightk.C ost) min=AdjListtracki.Flight

19、k.Cost; tmp=k; printf(%s,AdjListtracki.Flighttmp.name);startH = AdjListtracki.Flighttmp.StartTime / 60 ; startM = AdjListtracki.Flighttmp.StartTime % 60;endH = AdjListtracki.Flighttmp.StopTime / 60 ;endM = AdjListtracki.Flighttmp.StopTime % 60 ;if( !(startH/10) printf(0);printf(%d:,startH);if( !(sta

20、rtM/10) printf(0); printf(%d - ,startM);if( !(endH/10) printf(0); printf(%d:,endH);if( !(endM/10) printf(0); printf(%dn,endM);lighttmp.StartTime60,AdjListtracki.Flighttmp.StartTime60,AdjListtracki.Flighttmp.StopTime60,AdjListtracki.Flighttmp.StopTime % 60);printf(n%s: DESTINATION!,CityNametrack0); p

21、rintf(nMin Cost : %dn,cost);p_end,int(10)找出最小费用路线void Dijkstra(int matxDij_MAXNDij_MAXN,int p_start,int TravelType)int PreCityDij_MAXN; .n);/return -1; fscanf(fp,%d,&CityNum);for (i=0;iCityNum;i+) /fscanf(fp,%s,&CityNamei);AdjListi.city=i;AdjListi.TrainNum=0;AdjListi.FlightNum=0; fclose(fp);fp=fopen

22、(TrainFile,r); if (!fp)printf(nError:Cannot Open Train Filen);return -1;fscanf(fp,%d,&num); for (i=0;inum;i+)fscanf(fp,%s,&stmp1);fscanf(fp,%s,&stmp2);fscanf(fp,%s,&stmp3);j=SeekCity(stmp2);AdjListj.TrainAdjListj.TrainNum.EndCity=SeekCity(stmp3);strcpy(AdjListj.TrainAdjListj.TrainNum.name,stmp1); fs

23、canf(fp,%d:%d,&hour,&minute);AdjListj.TrainAdjListj.TrainNum.StartTime=hour*60+minute; fscanf(fp,%d:%d,&hour,&minute);AdjListj.TrainAdjListj.TrainNum.StopTime=hour*60+minute;fscanf(fp,%d,&cost);AdjListj.TrainAdjListj.TrainNum.Cost=cost;AdjListj.TrainNum+; fclose(fp);/fp=fopen(FlightFile,r); / if (!f

24、p) printf(nError:Cannot Open Flight Filen); return -1;fscanf(fp,%d,&num);for (i=0;iCurTime-StartTime)for (i=0;i=curPathNo;i+)MinPathi.City=Pathi.City;MinPathi.TraNo=Pathi.TraNo; curPath=curPathNo;MinTime=CurTime-StartTime;elsecurPathNo+;PathcurPathNo.City=City;if (!TravelType)for (i=0;i=(CurTime%144

25、0)&(AdjListCity.Train i.StopTime+(CurTime/1440)*1440-StartTimeMinTime)PathcurPathNo.TraNo=i;SearchMinTime(AdjListCity.Traini.EndCity,EndCity,AdjListCity.Traini.S topTime+(CurTime/1440)*1440,curPathNo,TravelType);if(AdjListCity.Traini.StartTime(CurTime%1440)&(AdjListCity.Traini .StopTime+(CurTime/144

26、0)*1440-StartTimeMinTime)PathcurPathNo.TraNo=i;SearchMinTime(AdjListCity.Traini.EndCity,EndCity,AdjListCity.Traini.S topTime+(CurTime/1440+1)*1440,curPathNo,TravelType);elsefor (i=0;i=CurTime)&(AdjListCity.Flighti.StopT ime+(CurTime/1440)*1440-StartTimeMinTime)PathcurPathNo.TraNo=i;SearchMinTime(Adj

27、ListCity.Flighti.EndCity,EndCity,AdjListCity.Flighti. StopTime+(CurTime/1440)*1440,curPathNo,TravelType);if(AdjListCity.Flighti.StartTimeCurTime)&(AdjListCity.Flighti.StopTi me+(CurTime/1440)*1440-StartTimeMinTime)PathcurPathNo.TraNo=i;SearchMinTime(AdjListCity.Flighti.EndCity,EndCity,AdjListCity.Fl

28、ighti. StopTime+(CurTime/1440+1)*1440,curPathNo,TravelType);return 1;(13)计算最快路线所需时间并打印:int CalcMinTime (int StartCity,int EndCity,int TravelType)int i;int startH, startM, endH, endM;ity=StartCity;if (!TravelType) /for (i=0;iAdjListStartCity.TrainNum;i+)Path0.TraNo=i;StartTime=AdjListStartCity.Traini

29、.StartTime;SearchMinTime(AdjListStartCity.Traini.EndCity,EndCity,AdjListStartCity .Traini.StopTime,0,TravelType); else for (i=0;iAdjListStartCity.FlightNum;i+)Path0.TraNo=i;StartTime=AdjListStartCity.Flighti.StartTime;SearchMinTime(AdjListStartCity.Flighti.EndCity,EndCity,AdjListStartCity .Flighti.S

30、topTime,0,TravelType);if (MinTime=32767)printf(nNo access to that destination!);return 0;rainMinPath0.TraNo.StartTime;lightMinPath0.TraNo.StartTime; /printf(nPath:n);for (i=0;i=curPath;i+)if (!TravelType) printf(%s /:%s”,CityNameMinPathi.City,AdjListMinPathi.City.TrainMinPathi.TraNo .name);elseprint

31、f(%s:%s”,CityNameMinPathi.City,AdjListMinPathi.City.FlightMinPathi.TraNo .name);startH=AdjListMinPathi.City.TrainMinPathi.TraNo.StartTime / 60 ; startM=AdjListMinPathi.City.TrainMinPathi.TraNo.StartTime % 60 ; endH=AdjListMinPathi.City.TrainMinPathi.TraNo.StopTime / 60 ; endM=AdjListMinPathi.City.Tr

32、ainMinPathi.TraNo.StopTime % 60 ;if( !(startH/10) printf(0);printf(%d:,startH);if( !(startM/10) printf(0);printf(%d - ,startM);if( !(endH/10) )/printf(0); printf(%d:,endH);if( !(endM/10) printf(0); printf(%dn,endM);rainNum)min=32767;end=AdjListi.Trainj.EndCity; while(end=AdjListi.Trainj.EndCity&jAdj

33、Listi.TrainNum)if (AdjListi.Trainj.Costmin)min=AdjListi.Trainj.Cost; j+; maiend=min;elsefor (i=0;iCityNum;i+) min=32767;j=0;while (jAdjListi.FlightNum) min=32767;/end=AdjListi.Flightj.EndCity;while百度文库-让每个人平等地提升自我(end=AdjListi.Flightj.EndCity&jAdjListi.FlightNum) if (AdjListi.Flightj.Costmin)min=Adj

34、Listi.Flightj.Cost;j+;maiend=min;Dijkstra(ma,StartCity,EndCity,TravelType);return 1;五、功能模块间函数的调用关系,如下图所示:Calcmincost(startci百度文库-让每个人平等地提升自我32删除路线:InitSysData() DelPath(name) SaveSysInfo()CalcMinCost():Dijkstra(ma,StertC ity,EndCity,TravelT ype)添加路线:InitSysData()InsertFlight(name,s_city,e_city,s_hou

35、r*60+s_ minute,e_hour*60+e_minute,cost)InsertFlight(name,s_city,e_city,s_hour*60+s_ minute,e_hour*60+e_minute,cost)SaveSysInfo()六、调试结果:1、主界面:Dijkstra():Dijkstra_OutPut(m atx,PreCity,p_end, TravelType)SeekCity(StartCity)SeekCity(EndCity)InsertFlight():SeekCity(StartCity)SeekCity(EndCity)S .口语据省域交遢模拟壮

36、趋亲步七犯HE,杳退Mr戈由二Ktr品矍昼路、币市道里来ype In SfniAP Qonmand;、添加城市:输入命令1后,按提示输入城市名,而后返回主界面Type In youf Lomnand: 半:-一1贺春奇都变道模现Oebj八交通妄力代mke -回 SZ线线岸线 H 、!&.%冬备冒耐 加除加雷询出 添望用线路 市直r,艮 虬圣咨钟豪 除加康间食出 州苏T香city文件:city.txt -用都3、删除城市:输入命令2后,按提示输入城市名,而后返回主界面 * X 解 M X,; M俞入城由名;成都Iitfu Sdye OKtT ype In Yuujt Ccimki idiid-2

37、Type In Your Cmnand:兽用线、市宜城支支基羲 除加鲁询出 胞添亶查退* 圣EHU线线劈 快 一做城交4答I双 一加除加噜询出 一涿删添查退4、添加路线:输入命令3后,按提示依次输入起始站、终点站、类型、起始时刻、到达时刻、票价等信息,而后返回主界面回 SZ9J“市市通诵小快 M城城文。日取 “日加暑询出 -添胭淙删香舌丑线nJ望路亶路MMMNVue In VoLir Comnand-3翦簿翳髓业制车削航班i) :0嚏轧(列副一,.丁时刻的测时.24小时前 票杵:如ystem Info Save OKT:91”,我客矛代运模寿nmbE.交名臬肛代科ustern Lnf9 Sau

38、e UKTllu添加路线后的train文件:5、删除路线:输入命令4后按提示输入,而后返回主界面百度文库-让每个人平等地提升自我 口:通普用友道模那Debj八交那票玄代码足线nlil中市通调小快球城交,WE除加,向出邓添香强r2 34:E 60:Fype In 丫口迷肝 Comnand:4 输入班次门也System iifu Sdye OK?毂 443 MI- 线线中线 、1-* 箱支一备膏双 加除加雷询出 添胆添胆查退Type In Voulf Lomnand删除路线后的train文件:346、查找最小费用花费:输入命令 5后,按提示输入起始城市、终点城市、类型,而后返回主界面百度文库-让每

39、个人平等地提升自我回 szvstem Inta Save OK?“市市通/快-城城文。日衮 “露加雪询出 -添则添网查苫卫线望路尊路-DMK的硒交三模现QEbjg*.交通集玄代码物37ype In Vour Connand:5Traick Wa:重氏 H7412:0023 = ee杭州:DFSTINATFON!Min Cost : 12G结果正确!7、查找最小时间花费:输入命令 6后,按提示输入城市名,而后返回主界面.匚益后啃:,.交道Owl山T F考W治工污的,线 路 望整 、节节且R 城城女一 加除加除面询出 添删添粤香一退.ypc Irt Vou.r CcmnandG鬻l:懿.航苑fjH

40、F S 版 13 汨目 - 22 =oe r/fl: DESTINATION*ime Cast S 9 hour 0 ninu&就.城.WM*蕈*.MENU* M*6*.*能*舞就A结果正确!8、退出:输入命令0后,退出系统二二上上U一2肾用线闲 路“用层泉快工城城交A各雪羽”比,除J.T好回询出一一添鉴鹤查退iType In ConMidiid-SiPress any key to continue半:七、课程设计小结:1、实验过程中的注意点1)遇到逻辑问题,然后设断点,调试跟踪看哪步出了问题.比如说全 局变量和局部变量设置出现问题,导致运行过程各变量的取值不对。2)使用全局变量和局部变量时

41、,要注意他们的作用范围和使用方法。全局变量作用于整个程序,局部变量作用于函数内部。3)函数里面调用之后定义的函数时要在前面声明。4)注意指针的使用。在应用指针时,要注意判断结点是否为空,为空的话要给其分配地址九而不用的结点要用free回收地址空间5)注意switch条件判断语句的使用规则。每个 case结束后都要break一下,不然会继续执行下一个 case的.2、实验体会1)数据结构的基础知识欠缺,不够扎实。2)平时缺少编程练习,代码输入不熟练,经常要翻书查找一些基本 的语法。比如函数之间的互相调用,在函数有形参时,互相调用经常 出错。对文件的操作还是没有完全掌握。3)程序是写出来的,不是想

42、出来的。开始阶总是在想,总感觉很困 难做不了,但是真正投入其中之后才发觉其实只要用心,只要有克服 一切的勇气和信心就可以把程序做好,错误总是越改越少的。4)要用愉悦的心情去做,从编程的过程中体会乐趣,兴趣是最好的 老师。当费劲地解决掉编译错误、程序能顺利的实现预定功能时,心 里还是很有些自豪和成就感的。5)学会利用辅助程序去发现问题3、课程设计小结:通过这次课程设计,虽然程序设计和调试能力有所提升, 但虽然 最终还是没能独立完成课程设计的课程要求, 其中某个功能没能得以 实现,没能独立作出此次要求的全国交通咨询模拟系统。这次课程设 计也使我认识到了我在程序设计方面的严重不足, 以及专业知识的严 重匮乏。我的程序设计思想和代码的编写和调试能力在此次课程设计 期间有所提高。这样一种更贴近实际的课程设计,大大地提高了我的 学习效率,希望能够在平时教学中也能加入一些类似的课程设计的程序设计题

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!