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

合集下载

交通仿真实验报告

交通仿真实验报告

交通仿真实验报告1. 引言交通仿真是通过模拟真实道路交通环境来研究交通流动规律的一种方法。

本文旨在通过交通仿真实验来探讨交通拥堵的产生原因,并提出相应的改善措施。

2. 实验目的本次实验的目的是通过仿真模拟交通流动情况,分析交通拥堵的产生原因,并研究改善措施,从而为实际交通管理和规划提供参考。

3. 实验环境和工具本次实验使用了MATLAB软件来进行交通仿真。

MATLAB是一种常用的科学计算软件,它具有强大的数据处理和可视化分析能力,非常适合用于交通仿真实验。

4. 实验步骤4.1 数据收集首先,我们需要收集实际交通流动的数据,包括车辆数量、车速、车道宽度等信息。

这些数据可以通过交通摄像头、交通流量统计仪等设备来获取。

4.2 地图建模根据收集到的数据,我们可以使用MATLAB来建立交通仿真的地图模型。

地图模型应该包括道路、车辆和交通设施等元素,以尽可能真实地模拟实际交通情况。

4.3 交通流动仿真在地图模型建立完成后,我们可以进行交通仿真实验了。

通过设置不同的道路条件和车辆行为参数,观察交通流动情况,并记录相关数据。

4.4 数据分析在完成交通仿真后,我们可以对实验数据进行分析。

通过分析车辆密度、车速、道路容量等指标,可以找出交通拥堵产生的原因,如道路狭窄、车辆行为不当等。

4.5 改善措施根据实验数据分析的结果,我们可以提出相应的改善措施。

例如,如果发现道路狭窄导致交通拥堵,可以建议改扩建道路;如果发现车辆行为不当导致交通拥堵,可以建议加强交通法律法规的宣传和执行。

5. 结果与讨论根据实验数据分析的结果,我们可以得出交通拥堵产生的原因和相应的改善措施。

同时,我们还可以讨论交通仿真的局限性和不足之处,并提出进一步改进的建议。

6. 结论通过本次交通仿真实验,我们深入了解了交通拥堵的产生原因,并提出了改善措施。

交通仿真在交通管理和规划中具有重要的应用价值,可以帮助我们更好地理解和改善交通流动情况。

7. 参考文献[1] Smith, M. J. (1995). Traffic flow fundamentals. Transportation Research Part B: Methodological, 29(2), 145-160.[2] Treiber, M., Hennecke, A., & Helbing, D. (2000). Congested traffic states in empirical observations and microscopic simulations. Physical Review E, 62(2), 1805-1824.[3] 王晓晖. (2010). 基于交通仿真的交通流动研究[D]. 吉林大学.以上是本次交通仿真实验报告的详细内容。

工作报告-交通仿真实验报告

工作报告-交通仿真实验报告

工作报告-交通仿真实验报告标题:交通仿真实验报告一、实验目的本实验的目的是通过交通仿真技术对不同交通流量下的交通运行情况进行模拟分析,了解交通系统的瓶颈和拥堵点,为交通规划和交通管理提供科学依据。

二、实验原理交通仿真是一种基于计算机模拟的方法,通过模拟交通环境、车辆和交通参与者的行为,以及道路基础设施的运行情况,来预测交通运行状态。

本实验利用交通仿真软件,建立虚拟交通网络,模拟不同交通流量条件下的车辆运行情况和交通拥堵状况。

三、实验步骤1. 设定交通网络:根据实际道路网络,利用交通仿真软件搭建道路网络,并设置路段、路口等交通元素。

2. 设置交通流量:根据交通状况和实验需求,设定不同交通流量条件下的车辆出行规模和行为模式。

3. 运行仿真模拟:通过设置好的交通流量条件,运行交通仿真模拟,观察车辆的行驶状态、交通拥堵状况等。

4. 数据分析和结果统计:根据仿真结果,分析交通瓶颈、路段拥堵情况,统计车辆平均速度、通行时间等指标。

四、实验结果根据不同交通流量条件下的仿真结果,得到以下结论:1. 随着交通流量的增加,道路网络的通行能力减小,交通拥堵现象显著增加。

2. 部分路段和路口成为交通瓶颈,导致交通拥堵点集中出现。

3. 车辆平均速度和通行时间与交通流量呈反比关系。

五、实验总结通过交通仿真实验,我们可以实现对交通系统的模拟和分析,了解交通运行状态和瓶颈所在,为交通规划和交通管理提供科学依据。

然而,交通仿真实验还需要综合考虑多个因素,如道路设计、信号控制等,以提高模拟结果的准确性和可靠性。

六、存在问题和改进措施在本实验中,由于部分交通仿真软件的局限性和数据不准确性,导致仿真结果的准确性尚有待提高。

为此,我们应该在选择仿真软件时进行全面评估,并准确获取实际交通数据,以提高实验结果的可靠性。

七、进一步研究展望基于交通仿真技术的研究还可以拓展到更广泛的领域,如城市交通规划、智能交通系统等。

未来的研究可以结合实际交通数据和智能算法,进一步提高交通仿真的准确性和实用性。

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

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

全国交通咨询模拟系统实验报告Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT一、问题描述全国交通咨询模拟:处于对不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

二、1、根据题目中的基本要求分析,可以创建系统概念模型,流程设计框图如下:班次辑结构拆分:而为了便于数据的存储、添加、删除等操作,我选择了储存文件对这些数据进行了存储。

将每个信息量放在不同的文件中,可以更有效、直观地对这些数据进行处理。

流程图中的7个主要功能模块在主函数中,采用输入选项进入子菜单,但是其他操作都是在路线添加好后进行的,并且为了每一项功能进行完后,系统可以及时回到主交互界面,我采用的是无限循环形式,即while(1)。

以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多项属性。

三、主控及功能模块层次结构:1、模块说明:本系统分为个模块1、)主函数2、)添加城市3、)查找城市并返回序号4、)删除城市5、)添加列车6、)添加航班7、)删除列车或航班8、)找出最小费用路线9、)初始化系统数据(读入内存)10、)找出最快路线11、)计算最快路线耗费的时间并打印12、)计算最小费用路线13、)主界面14、)存储信息到文件15、)退出、2、下面是各模块示意图:基本操作:函数变量声明:#include <>#include <>#define ERR 0#define OK 1#define Dij_MAXN 33#define MAX_VERTEX_NUM 31#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 TrafficNode{char name[MAX_STRING_NUM]; rainNum;}fprintf(fp,"%d\n",total);for (i=0;i<CityNum;i++){for (j=0;j<AdjList[i].TrainNum;j++){fprintf(fp,"%s %s %s ", AdjList[i].Train[j].name,CityName[i],CityName[AdjList[i].Train[j].EndCity]);fprintf(fp,"%2d:%2d %2d:%2d %d\n", AdjList[i].Train[j].StartTime/60, AdjList[i].Train[j].StartTime%60,AdjList[i].Train[j].StopTime/60,AdjList[i].Train[j].StopTime%60,AdjList[i].Train[j].Cost);}}fclose(fp);total=0;fp=fopen(FlightFile,"w");for (i=0;i<CityNum;i++){total+=AdjList[i].FlightNum;}fprintf(fp,"%d\n",total);for (i=0;i<CityNum;i++){for (j=0;j<AdjList[i].FlightNum;j++){fprintf(fp,"%s %s %s ", AdjList[i].Flight[j].name,CityName[i],CityName[AdjList[i].Flight[j].EndCity]);fprintf(fp,"%2d:%2d %2d:%2d %d\n", AdjList[i].Flight[j].StartTime/60, AdjList[i].Flight[j].StartTime%60,AdjList[i].Flight[j].StopTime/60,AdjList[i].Flight[j].StopTime%60,AdjList[i].Flight[j].Cost);}}fclose(fp);return 1;}(4)添加城市:int InsertCity (char *Name){strcpy(CityName[CityNum],Name);AdjList[CityNum].city=CityNum;AdjList[CityNum].FlightNum=0;AdjList[CityNum].TrainNum=0;CityNum++;return 1;}(5)删除城市:int DelCity (char *Name){int city,i,j;city=SeekCity(Name);for (i=city;i<CityNum-1;i++){strcpy(CityName[i],CityName[i+1]);AdjList[i].FlightNum=AdjList[i+1].FlightNum;AdjList[i].TrainNum=AdjList[i+1].TrainNum;for (j=0;j<AdjList[i].FlightNum;j++){AdjList[i].Flight[j].Cost=AdjList[i+1].Flight[j].Cost;AdjList[i].Flight[j].EndCity=AdjList[i+1].Flight[j].EndCity;strcpy(AdjList[i].Flight[j].name,AdjList[i+1].Flight[j].name);AdjList[i].Flight[j].StartTime=AdjList[i+1].Flight[j].StartTime; AdjList[i].Flight[j].StopTime=AdjList[i+1].Flight[j].StopTime;}}CityNum--;return 1;}(6)添加火车路线:int InsertTrain (char *train,char *StartCity,char *EndCity,int StartTime,int EndTime,int cost){int i,j;i=SeekCity(StartCity);j=SeekCity(EndCity);AdjList[i].Train[AdjList[i].TrainNum].Cost=cost;AdjList[i].Train[AdjList[i].TrainNum].EndCity=j;AdjList[i].Train[AdjList[i].TrainNum].StartTime=StartTime;AdjList[i].Train[AdjList[i].TrainNum].StopTime=EndTime;strcpy(AdjList[i].Train[AdjList[i].TrainNum].name,train);AdjList[i].TrainNum++;return 1;}(7)添加航班路线:int InsertFlight(char *flight,char *StartCity,char *EndCity,int StartTime,int EndTime,int cost){int i,j;i=SeekCity(StartCity);j=SeekCity(EndCity);AdjList[i].Flight[AdjList[i].FlightNum].Cost=cost;AdjList[i].Flight[AdjList[i].FlightNum].EndCity=j;AdjList[i].Flight[AdjList[i].FlightNum].StartTime=StartTime;AdjList[i].Flight[AdjList[i].FlightNum].StopTime=EndTime;strcpy(AdjList[i].Flight[AdjList[i].FlightNum].name,flight);AdjList[i].FlightNum++;return 1;}(8)删除路线:int DelPath (char *name){int i,j,flag=0;for (i=0;i<CityNum;i++){for (j=0;j<AdjList[i].FlightNum;j++)if (strcmp(AdjList[i].Flight[j].name,name)==0){flag=1;break;}if (flag){for (;j<AdjList[i].FlightNum-1;j++){AdjList[i].Flight[j].Cost=AdjList[i].Flight[j+1].Cost;AdjList[i].Flight[j].EndCity=AdjList[i].Flight[j+1].EndCity;strcpy(AdjList[i].Flight[j].name,AdjList[i].Flight[j+1].name); AdjList[i].Flight[j].StartTime=AdjList[i].Flight[j+1].StartTime; AdjList[i].Flight[j].StopTime=AdjList[i].Flight[j+1].StopTime;}AdjList[i].FlightNum--;break;}for (j=0;j<AdjList[i].TrainNum;j++)if (strcmp(AdjList[i].Train[j].name,name)==0){flag=1;break;}if (flag){for (;j<AdjList[i].TrainNum-1;j++){AdjList[i].Train[j].Cost=AdjList[i].Train[j+1].Cost;AdjList[i].Train[j].EndCity=AdjList[i].Train[j+1].EndCity;strcpy(AdjList[i].Train[j].name,AdjList[i].Train[j+1].name);AdjList[i].Train[j].StartTime=AdjList[i].Train[j+1].StartTime;AdjList[i].Train[j].StopTime=AdjList[i].Train[j+1].StopTime;}AdjList[i].TrainNum--;break;}}return 1;}(9)打印最小费用路线:void Dijkstra_Output(int matx[Dij_MAXN][Dij_MAXN],int PreCity[Dij_MAXN],intp_end,int TravelType){int track[Dij_MAXN];int i=0,j,k,min,tmp,end,cost=0;int startH, startM, endH, endM;rainNum;k++)if(AdjList[track[i]].Train[k].EndCity==end&&min>AdjList[track[i]].Train[k].Cost){min=AdjList[track[i]].Train[k].Cost;tmp=k;}printf("%s ",AdjList[track[i]].Train[tmp].name);startH = AdjList[track[i]].Train[tmp].StartTime/60 ;startM =AdjList[track[i]].Train[tmp].StartTime%60;endH = AdjList[track[i]].Train[tmp].StopTime/60 ;endM = AdjList[track[i]].Train[tmp].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("%d\n",endM);rain[tmp].StartTime/60,AdjList[track[i]].Train[tmp].StartTime%60,AdjList[track[i]].Tr ain[tmp].StopTime/60,AdjList[track[i]].Train[tmp].StopTime%60);}}else{for(i--;i>0;i--){printf("\n%s:",CityName[track[i]]);end=track[i-1];min=32767;for (k=0;k<AdjList[track[i]].FlightNum;k++)rain[k].EndCity改为AdjList[track[i]].Flight[k].EndCity!/*if(AdjList[track[i]].Train[k].EndCity==end&&min>AdjList[track[i]].Flight[k].Cost){ */if(AdjList[track[i]].Flight[k].EndCity==end&&min>AdjList[track[i]].Flight[k].Cost){min=AdjList[track[i]].Flight[k].Cost;tmp=k;}printf("%s",AdjList[track[i]].Flight[tmp].name);startH =AdjList[track[i]].Flight[tmp].StartTime / 60 ;startM =AdjList[track[i]].Flight[tmp].StartTime % 60;endH =AdjList[track[i]].Flight[tmp].StopTime / 60 ;endM =AdjList[track[i]].Flight[tmp].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("%d\n",endM);light[tmp].StartTime / 60,AdjList[track[i]].Flight[tmp].StartTime %60,AdjList[track[i]].Flight[tmp].StopTime / 60,AdjList[track[i]].Flight[tmp].StopTime % 60);}}printf("\n%s: DESTINATION!",CityName[track[0]]);printf("\nMin Cost : %d\n",cost);}(10)找出最小费用路线void Dijkstra(int matx[Dij_MAXN][Dij_MAXN],int p_start,int p_end,int TravelType) {int PreCity[Dij_MAXN]; .\n");return -1;}fscanf(fp,"%d",&CityNum);for (i=0;i<CityNum;i++){fscanf(fp,"%s",&CityName[i]);AdjList[i].city=i;AdjList[i].TrainNum=0;AdjList[i].FlightNum=0;}fclose(fp);fp=fopen(TrainFile,"r");if (!fp){printf("\nError:Cannot Open Train File...\n");return -1;}fscanf(fp,"%d",&num);for (i=0;i<num;i++){fscanf(fp,"%s",&stmp1);fscanf(fp,"%s",&stmp2);fscanf(fp,"%s",&stmp3);j=SeekCity(stmp2);AdjList[j].Train[AdjList[j].TrainNum].EndCity=SeekCity(stmp3); strcpy(AdjList[j].Train[AdjList[j].TrainNum].name,stmp1);fscanf(fp,"%d:%d",&hour,&minute);AdjList[j].Train[AdjList[j].TrainNum].StartTime=hour*60+minute; fscanf(fp,"%d:%d",&hour,&minute);AdjList[j].Train[AdjList[j].TrainNum].StopTime=hour*60+minute; fscanf(fp,"%d",&cost);AdjList[j].Train[AdjList[j].TrainNum].Cost=cost;AdjList[j].TrainNum++;}fclose(fp);fp=fopen(FlightFile,"r");if (!fp){printf("\nError:Cannot Open Flight File...\n");return -1;}fscanf(fp,"%d",&num);for (i=0;i<num;i++){fscanf(fp,"%s",&stmp1);fscanf(fp,"%s",&stmp2);fscanf(fp,"%s",&stmp3);j=SeekCity(stmp2);AdjList[j].Flight[AdjList[j].FlightNum].EndCity=SeekCity(stmp3); strcpy(AdjList[j].Flight[AdjList[j].FlightNum].name,stmp1);fscanf(fp,"%d:%d",&hour,&minute);AdjList[j].Flight[AdjList[j].FlightNum].StartTime=hour*60+minute; fscanf(fp,"%d:%d",&hour,&minute);AdjList[j].Flight[AdjList[j].FlightNum].StopTime=hour*60+minute; fscanf(fp,"%d",&cost);AdjList[j].Flight[AdjList[j].FlightNum].Cost=cost;AdjList[j].FlightNum++;}fclose(fp);return 1;}(12)找出最快路线:int SearchMinTime (CityType City,CityType EndCity,int CurTime,int curPathNo,int TravelType){int i;if (City==EndCity){if (MinTime>CurTime-StartTime){for (i=0;i<=curPathNo;i++){MinPath[i].City=Path[i].City;MinPath[i].TraNo=Path[i].TraNo;curPath=curPathNo;}MinTime=CurTime-StartTime;}}else{curPathNo++;Path[curPathNo].City=City;if (!TravelType){for (i=0;i<AdjList[City].TrainNum;i++){if((AdjList[City].Train[i].StartTime>=(CurTime%1440))&&(AdjList[City].Train[i].StopT ime+(CurTime/1440)*1440-StartTime<MinTime)){Path[curPathNo].TraNo=i;SearchMinTime(AdjList[City].Train[i].EndCity,EndCity,AdjList[City].Train[i].StopTim e+(CurTime/1440)*1440,curPathNo,TravelType);}if((AdjList[City].Train[i].StartTime<(CurTime%1440))&&(AdjList[City].Train[i].StopTi me+(CurTime/1440)*1440-StartTime<MinTime)){Path[curPathNo].TraNo=i;SearchMinTime(AdjList[City].Train[i].EndCity,EndCity,AdjList[City].Train[i].StopTim e+(CurTime/1440+1)*1440,curPathNo,TravelType);}}}else{for (i=0;i<AdjList[City].FlightNum;i++){if((AdjList[City].Flight[i].StartTime>=CurTime)&&(AdjList[City].Flight[i].StopTime+(C urTime/1440)*1440-StartTime<MinTime)){Path[curPathNo].TraNo=i;SearchMinTime(AdjList[City].Flight[i].EndCity,EndCity,AdjList[City].Flight[i].StopTi me+(CurTime/1440)*1440,curPathNo,TravelType);}if((AdjList[City].Flight[i].StartTime<CurTime)&&(AdjList[City].Flight[i].StopTime+(Cur Time/1440)*1440-StartTime<MinTime)){Path[curPathNo].TraNo=i;SearchMinTime(AdjList[City].Flight[i].EndCity,EndCity,AdjList[City].Flight[i].StopTi me+(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;i<AdjList[StartCity].TrainNum;i++){Path[0].TraNo=i;StartTime=AdjList[StartCity].Train[i].StartTime;SearchMinTime(AdjList[StartCity].Train[i].EndCity,EndCity,AdjList[StartCity].Train[i ].StopTime,0,TravelType);}}else{for (i=0;i<AdjList[StartCity].FlightNum;i++){Path[0].TraNo=i;StartTime=AdjList[StartCity].Flight[i].StartTime;SearchMinTime(AdjList[StartCity].Flight[i].EndCity,EndCity,AdjList[StartCity].Flight[ i].StopTime,0,TravelType);}}if (MinTime==32767){printf("\nNo access to that destination!");return 0;}rain[MinPath[0].TraNo].StartTime;light[MinPath[0].TraNo].StartTime;printf("\nPath:\n");for (i=0;i<=curPath;i++){if (!TravelType)printf("%s : %s",CityName[MinPath[i].City],AdjList[MinPath[i].City].Train[MinPath[i].TraNo].name); elseprintf("%s : %s",CityName[MinPath[i].City],AdjList[MinPath[i].City].Flight[MinPath[i].TraNo].name);startH =AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StartTime / 60 ;startM =AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StartTime % 60 ;endH =AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StopTime / 60 ;endM =AdjList[MinPath[i].City].Train[MinPath[i].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("%d\n",endM);rainNum){min=32767;end=AdjList[i].Train[j].EndCity;while(end==AdjList[i].Train[j].EndCity&&j<AdjList[i].TrainNum){if (AdjList[i].Train[j].Cost<min){min=AdjList[i].Train[j].Cost;}j++;}ma[i][end]=min;}}}else{for (i=0;i<CityNum;i++){min=32767;j=0;while (j<AdjList[i].FlightNum){min=32767;end=AdjList[i].Flight[j].EndCity;while(end==AdjList[i].Flight[j].EndCity&&j<AdjList[i].FlightNum){if (AdjList[i].Flight[j].Cost<min){min=AdjList[i].Flight[j].Cost;}j++;}ma[i][end]=min;}}}Dijkstra(ma,StartCity,EndCity,TravelType);return 1;}五、功能模块间函数的调用关系,如下图所示:1、主界面:2、添加城市:输入命令1后,按提示输入城市名,而后返回主界面原city文件:添加城市后的city文件:3、删除城市:输入命令2后,按提示输入城市名,而后返回主界面4、添加路线:输入命令3后,按提示依次输入起始站、终点站、类型、起始时刻、到达时刻、票价等信息,而后返回主界面添加路线后的train文件:5、删除路线:输入命令4后,按提示输入,而后返回主界面删除路线后的train文件:6、查找最小费用花费:输入命令5后,按提示输入起始城市、终点城市、类型,而后返回主界面结果正确!7、查找最小时间花费:输入命令6后,按提示输入城市名,而后返回主界面结果正确!8、退出:输入命令0后,退出系统七、课程设计小结:1、实验过程中的注意点1)遇到逻辑问题,然后设断点,调试跟踪看哪步出了问题.比如说全局变量和局部变量设置出现问题,导致运行过程各变量的取值不对。

交通系统仿真实验报告

交通系统仿真实验报告

道路交通系统仿真实验实验一 VISSIM班级:08交通工程学号:120081501131 姓名:王两全一、实验目的1.掌握用VISSIM绘制简单的路网;2.掌握如何给路网添加基本的路网元素(如:信号灯、路径决策、冲突区域、优先规则、公交站点等);3.掌握对仿真模型进行指标评价,包括行程时间、延误、排队长度以及相关参数的设置。

二、实验设备1.硬件要求:装有VISSIM的PC机一台;2.系统要求:能在Windows 2000、XP和VISTA环境下运行;三、实验要求在VISSIM中构建一个平面信号控制交叉口模型,不考虑行人和非机动车,具体要求见试卷。

四、实验内容与步骤1.绘制路网(1)根据实验要求导入背景图;(2)按照每车道宽3.5m设置比例尺参数,根据背景图绘制一个T形交叉口(北进口封闭),交叉口宽度:南北:45m、东西99m;(3)初步路网结果图.2.添加路网元素(1)对绘制好的路网标明车道方向;(2)输入车辆数:400辆/车道小时;(3)信号配时;(4)设置行驶路径决策;(5)设置一条跨越交叉口的公交线路并设置两种不同的公交站点:港湾式和路边式;(6)设置冲突区域。

(7)添加路网元素后的结果3.设置仿真评价指标(1)行程时间;创建时间检测,并在“评价->文件”进行行程时间检测设置。

(2)延误;(3)排队长度。

1.信号控制2.冲突区域通过该实验巩固了初步使用VISSIM对一个完整路网的构建,对Vissim 的各个功能有更深刻的了解。

但由于实验过程中可能有一些小细节出错了,导致两种控制方式的评价指标结果都一样,通过多次的调试仍然未找出错误的地方,这是该实验遗憾的地方。

理论上讲,该试验的交叉口可以看成是主干道与次干道的相交(东西为主干道,南北为次干道且),而且该交叉口的流量比较小,粗略判断应该是冲突区域控制会比信号控制更加优越。

同时,此次实验为我们以后自己动手进行交通仿真做了很好的铺垫。

交通仿真实习报告

交通仿真实习报告

交通仿真实习报告一、引言随着城市化进程的加速和人们对出行需求的不断提高,交通问题日益凸显。

为了解决实际交通问题,提高交通系统效率,我们进行了一次交通仿真实习。

本报告将详细介绍我们的仿真实习目的、方法、结果及结论。

二、仿真实习目的本次仿真实习的主要目的是通过模拟交通系统,深入了解交通流特性、交通拥堵形成原因、交通规划原则等,以期在实践中得到应用。

三、仿真实习方法我们采用了专业的交通仿真软件进行模拟实验。

我们构建了一个包含道路、交叉口、交通信号灯等基本交通设施的模型。

接着,我们设置了不同的交通流量和出行需求,观察交通运行情况。

同时,我们还通过调整交通信号灯的配时方案,研究其对交通流的影响。

四、仿真实习结果在模拟过程中,我们观察到了交通拥堵、车辆排队等现象。

通过数据分析,我们发现交通拥堵主要发生在道路节点处,如交叉口和交通信号灯处。

我们还发现交通信号灯配时不合理会加剧交通拥堵。

针对这些问题,我们提出了一些可能的解决方案,如优化交通信号灯配时、增加道路通行能力等。

五、结论与展望通过本次仿真实习,我们深入了解了交通系统的运行特性和存在的问题。

针对这些问题,我们提出了一些解决方案,以期在实际应用中得到改善。

然而,这只是初步的探索和研究,我们还需要在未来的学习和实践中不断深化和完善相关知识,为解决实际交通问题提供更有价值的参考。

仿真实习个人实习报告一、引言随着科技的发展和数字化时代的到来,仿真技术已经成为工程设计、生产规划和管理决策等方面的重要工具。

为了更好地掌握仿真技术的应用和实践,我参与了一次为期六周的仿真实习项目。

通过本次实习,我不仅了解了仿真模型的构建过程和基本原理,还深入学习了如何运用仿真技术解决实际问题。

以下是我对本次实习的总结和个人心得。

二、仿真实习概述在本次实习中,我参与的是一个生产流水线的仿真项目。

通过构建仿真模型,模拟生产线的运行过程,预测可能出现的瓶颈和问题,并制定相应的优化方案。

1、仿真模型的构建构建仿真模型是仿真的基础。

2数据结构——全国交通咨询模拟系统实验报告

2数据结构——全国交通咨询模拟系统实验报告

2数据结构——全国交通咨询模拟系统实验报告
实验目的:
实验环境:
本次实验的开发环境为Java编程语言,使用了面向对象的编程思想,采用了数据结构中的图和链表等数据结构。

实验内容:
1.设计交通工具类:
首先,根据系统需求,设计了交通工具类,该类用于表示交通工具的
基本信息,包括交通工具的名称、班次、票价等。

在该类中,使用了链表
数据结构来存储交通工具的班次信息。

2.设计城市类:
接下来,设计了城市类,用于表示各个城市的交通信息。

在该类中,
使用了图数据结构来表示城市之间的联通关系,每个城市作为图的一个节点,城市间的交通工具作为图的边。

实验结果:
经过测试,实验系统能够准确地输出起点城市到终点城市的最短路径
和最佳交通方案,用户可以根据输出信息来决定如何安排旅行计划。

实验总结:。

交通仿真实验报告

交通仿真实验报告

交通仿真实验报告交通仿真实验报告一、实验目的和背景交通仿真是一种通过计算机模拟交通流动和交通控制的技术,旨在提供有效的交通规划和管理策略。

本实验旨在通过交通仿真软件,模拟真实道路上的交通流动,探究不同交通控制策略对交通流量和拥堵情况的影响,以提供决策者参考。

二、实验方法和过程1. 实验环境搭建在实验开始前,我们首先搭建了交通仿真实验的环境。

选择了一条典型的城市主干道进行仿真,确定了道路的长度、车道数、车辆流量等参数,并在仿真软件中进行设置。

2. 交通流模型设定根据实际情况,我们选择了基于微观交通流模型的仿真方法。

该方法以车辆为基本单位,通过模拟车辆的加速、减速、换道等行为,来模拟真实道路上的交通流动。

3. 交通控制策略设计为了探究不同交通控制策略对交通流量和拥堵情况的影响,我们设计了三种不同的交通控制策略:信号灯控制、交通警察指挥和无交通控制。

在实验中,我们分别对这三种策略进行了仿真模拟,并记录了交通流量、平均车速、拥堵时间等数据。

4. 数据分析和结果展示通过交通仿真软件提供的数据,我们进行了详细的数据分析和结果展示。

通过对比不同交通控制策略下的数据,我们可以得出结论,评估各种策略的优劣,并为实际交通管理提供参考。

三、实验结果和讨论通过数据分析和结果展示,我们得出了以下结论:1. 信号灯控制策略在交通流量控制方面表现较好,能够有效地平衡道路上的车辆流动。

然而,在高峰时段,信号灯控制也容易导致交通拥堵,延长车辆通行时间。

2. 交通警察指挥策略可以根据实际情况及时调整交通流动,适应道路上的变化。

但是,这种策略需要人工干预,依赖于交警的经验和判断力,可能存在一定的主观性和误差。

3. 无交通控制策略下,车辆自由通行,但容易导致交通混乱和拥堵。

尤其是在交通流量较大的情况下,无交通控制策略的效果较差。

四、实验结论和建议根据实验结果和讨论,我们得出了以下结论和建议:1. 在交通流量较大的主干道上,推荐使用信号灯控制策略,以平衡车辆流动和减少交通拥堵。

交通仿真模拟实训报告

交通仿真模拟实训报告

一、实训背景随着我国城市化进程的加快,城市交通问题日益突出。

为提高城市交通管理水平,优化交通组织,减少交通拥堵,提升市民出行效率,交通仿真模拟技术应运而生。

本次实训旨在通过交通仿真模拟软件,对城市交通系统进行模拟、分析和优化,以期为我国城市交通发展提供有益参考。

二、实训目的1. 掌握交通仿真模拟软件的基本操作和功能;2. 了解城市交通系统基本原理,熟悉交通仿真模拟技术;3. 通过模拟实验,分析城市交通问题,提出解决方案;4. 提高实际操作能力,培养团队协作精神。

三、实训内容1. 交通仿真模拟软件简介本次实训使用的交通仿真模拟软件为VISSIM(Visual Simulation System),是一款广泛应用于交通领域的高性能仿真软件。

VISSIM具有以下特点:(1)基于微观数据,模拟真实交通场景;(2)支持多种交通流模型,可进行多场景仿真;(3)可视化界面,便于观察和分析交通状况;(4)可进行交通参数调整,模拟不同交通策略。

2. 城市交通系统分析(1)交通流分析:通过模拟实验,分析不同交通流模型对交通状况的影响,如交通拥堵、排队长度、平均速度等;(2)道路网络分析:模拟不同道路网络结构对交通状况的影响,如道路宽度、交叉口设计等;(3)交通设施分析:模拟不同交通设施对交通状况的影响,如交通信号灯、停车设施等;(4)交通策略分析:模拟不同交通策略对交通状况的影响,如交通需求管理、公共交通优先等。

3. 案例分析本次实训选取了某城市核心区域作为研究对象,模拟该区域的交通状况。

主要内容包括:(1)道路网络建模:根据实际道路情况,构建道路网络模型;(2)交通流模拟:设置交通流参数,模拟不同交通状况下的交通流;(3)交通设施配置:根据实际交通设施情况,配置交通信号灯、停车设施等;(4)交通策略优化:通过调整交通参数和设施配置,优化交通状况。

四、实训结果与分析1. 交通流分析通过模拟实验,发现以下问题:(1)高峰时段,交通拥堵严重,排队长度较长;(2)道路网络结构不合理,部分路段存在交通瓶颈;(3)交通信号灯设置不合理,导致部分交叉口拥堵。

数据结构—全国交通咨询模拟系统实验报告5

数据结构—全国交通咨询模拟系统实验报告5

全国交通咨询模拟1051210137罗媛一、设计目的掌握线性表、栈、图结构和对文件的操作,学习屏幕编辑和菜单技术,掌握用最短路径及其搜索算法编制较综合性的程序,能用图的邻接存储结构求解最优路线问题,解决有关实际问题。

得到软件设计技能的训练。

二、问题描述交通咨询模拟。

根据旅客的不同需要,要考虑到旅客希望在旅途中的时间尽可能短、希望旅费尽可能省等的要求。

三、基本要求1、对城市信息(城市名、城市间的里程)进行编辑:具备添加、修改、删除功能;2、对城市间的交通工具:火车。

对列车时刻表进行编辑:里程、和列车班次的添加、修改、删除;3、提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具,可以不考虑回程;4、咨询以用户和计算机对话方式进行,要注意人机交互的屏幕界面。

由用户选择最优决策原则和交通工具,输入起始站、终点站、出发时间,输出信息:最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间,并详细说明依次于何时何地乘坐哪一趟列车何时到达何地。

四、具体实现1、思路(1) 数据存储。

城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。

在实验中本想用文本储存数据,但操作不熟悉,而是改用图的邻接矩阵储存原始信息,而后用数组进行添加删改(2) 数据的逻辑结构。

根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为无向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的时间)或旅费。

(3) 数据的存储结构。

采用邻接表和邻接矩阵都可作为数据的存储结构,这里建议采用邻接矩阵作为数据的存储结构。

(4) 用不同的功能模块对城市信息和交通信息进行编辑。

添加、修改、删除功能可用菜单方式或命令提示方式。

只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面,具体实现由学生自行设计,也可参考有关程序(届时在网上提供)。

这些工作有不小的工作量。

(5) 最优决策功能模块① 读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的城市有交通联系的城市(代码、里程、列车车次)。

数据结构全国交通咨询模拟系统实习报告【范本模板】

数据结构全国交通咨询模拟系统实习报告【范本模板】

数据结构课程设计报告全国交通咨询模拟管理系统学院:计算机学院姓名:班级:学号:指导老师日期:1.需求分析出于不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询.要求:(1)提供对城市信息进行编辑(如添加或删除)的功能.(2)城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能.(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

2.设计2。

1 设计思想(1)数据结构设计该系统存储结构运用到数组和结构体。

该结构分别存储火车列次,航班,出发点与目的地以及所需要走的路程和所用费用。

主要用到的数据结构有图中的交通网的各种信息的邻接矩阵的存储。

最短路径使用迪杰斯特拉算法编程求算得出最近或最便宜路径.火车列次,航班的存储结构:struct Tvaval{ //火车或飞机的存储结构//char id[20];//火车或飞机航班的代码//char start[20];//出发地//char end[20]; //目的地//float time; //路途时间//float price;//价钱//};(2)算法设计在求最短路径使用到的算法是迪杰斯特拉算法,算法步骤如下:1、起始点(V0)与其相邻点的权值(即当前最短路径).2、求出当前最短路径中的最小值即是该起始点(V0)与另一点(Vi)的最短路径。

3、V0到Vi的距离加上Vi到Vj的距离小于V0到Vj则将V0到Vi的距离加上Vi到Vj的距离记为V0到Vj当前最短路径,循环第二、三步。

如此得到V0到各点的最短路径,进而可以得到想要的一条。

系统主干功能的实现是用一个swich语句来实现多功能的选取以及程序的退出;主要有:1:修改地图,2:编辑火车时刻表,3:编辑飞机航班表,4:选择出游路线,5:退出;继而通过选中其中的数字来实现自己的目的;然后再引用程序再用一个switch case语句来实现1 2 3选项中的添加删除以及退出功能,然后在4中再用if语句来实现自己的需求考虑.可以随时退出程序。

全国交通咨询模拟系统

全国交通咨询模拟系统

全国交通咨询模拟系统系统背景随着我国经济的快速发展,交通出行已经成为人们日常生活中不可或缺的一部分。

不仅高速公路、铁路、城市轨道交通、公共汽车等交通工具不断完善,而且智能化、自动化、先进化等新兴技术也在交通领域变得越来越普及。

但是在日常出行中,人们难免会遇到交通拥堵、事故等问题,对于这些问题,如果及时得到准确可靠的信息,将大大缩短人们的出行时间,帮助人们更快地解决问题。

因此,我们开发了一款全国交通咨询模拟系统,帮助人们快速获取各地交通信息、查询交通路线、实时交通情况等信息,缩短出行时间,提高出行效率,让人们更加便捷的出行。

系统功能1. 查询交通信息全国交通咨询模拟系统提供了各地铁路、航班、长途汽车的信息查询功能,用户可通过输入出发地和目的地信息,查询出该区域的所有交通信息。

同时提供了乘车时间和价格等信息,方便用户选择最优出行方式。

2. 实时交通情况查询全国交通咨询模拟系统为用户提供了实时交通情况查询功能,用户可通过输入出行路线,系统将返回该路线的实时情况,包括此时此刻的路况、车流量、拥堵情况、事故情况等,方便用户对出行进行最佳规划。

3. 路线规划全国交通咨询模拟系统提供了路线规划的功能,用户输入起点和终点的位置信息,系统将为用户快速规划出一条最优的路线。

此外,该系统还提供了多条路线的选择,用户可以根据自己的需求进行选择。

4. 路况预报全国交通咨询模拟系统还提供了路况预报的功能,即用户可以预先了解某段道路的车流量、拥堵情况等。

系统通过大数据分析和深度学习等技术,对路况进行精准预测,使用户能够提前规划出行。

5. 存储建议全国交通咨询模拟系统可为用户存储出行建议,用户可以按照自己的需求,将出行建议进行收藏、备份和删除,方便后续使用。

系统优势1. 数据准确性高全国交通咨询模拟系统通过各种渠道收集、整理和分析各地交通数据,确保提供给用户的是准确可靠的信息。

2. 使用简单该系统的使用非常简单,用户只需按照系统提示输入需要查询的信息,系统将自动返回相应的结果。

智能交通管理系统仿真实验报告

智能交通管理系统仿真实验报告

智能交通管理系统仿真实验报告一、引言随着城市化进程的加速和汽车保有量的不断增长,交通拥堵、交通事故等问题日益严重,给人们的出行带来了极大的不便。

为了有效地解决这些问题,提高交通系统的运行效率和安全性,智能交通管理系统应运而生。

智能交通管理系统是将先进的信息技术、通信技术、控制技术等应用于交通领域,实现对交通流量、路况等信息的实时监测和分析,并通过优化交通信号控制、引导交通流量等手段,提高交通系统的整体性能。

本次实验旨在通过对智能交通管理系统的仿真研究,深入了解其工作原理和性能特点,为实际交通管理提供理论依据和技术支持。

二、实验目的1、熟悉智能交通管理系统的组成结构和工作原理。

2、掌握智能交通仿真软件的使用方法。

3、研究不同交通流量和路况下智能交通管理系统的性能表现。

4、分析智能交通管理系统对交通拥堵和交通事故的缓解效果。

三、实验设备与环境1、计算机:配置较高的台式计算机或笔记本电脑。

2、智能交通仿真软件:选用了具体软件名称仿真软件,该软件具有强大的交通建模和仿真功能,能够模拟各种交通场景和交通管理策略。

3、操作系统:Windows 10 操作系统。

四、实验原理智能交通管理系统主要由交通信息采集子系统、交通信息处理与分析子系统、交通信号控制子系统、交通诱导子系统等组成。

交通信息采集子系统通过各种传感器和监测设备,实时采集交通流量、车速、路况等信息;交通信息处理与分析子系统对采集到的信息进行处理和分析,提取有用的交通参数和特征;交通信号控制子系统根据交通流量和路况信息,优化交通信号控制方案,提高道路通行能力;交通诱导子系统通过可变信息标志、导航系统等,为出行者提供实时的交通信息和出行建议,引导交通流量合理分布。

智能交通仿真软件通过建立交通模型,模拟交通系统的运行过程,从而对智能交通管理系统的性能进行评估和优化。

在仿真过程中,可以设置不同的交通流量、路况、交通信号控制策略等参数,观察交通系统的运行状况和性能指标的变化。

交通咨询系统设计—课程设计实验报告

交通咨询系统设计—课程设计实验报告

数学与统计学院课程名称:《算法与数据结构》 设计题目: 交通咨询系统设计课程设计实验报告交通咨询系统设计1.系统的设计要求1)问题的描述根据不同目的的旅客对交通工具的不同要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市之间的模拟交通咨询的程序,为旅客提供两种或者三种最优决策的交通咨询。

2)需求分析1)提供对城市信息进行编辑(如:添加或删除)的功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

2.系统概要为实现上述程序功能,要用到一种数据结构,图。

根据输入的顶点和边,建立图,然后利用图的邻接表存储结构实现算法。

ADT Graph{数据对象V:v是具有相同数据特性的元素的集合,称作顶点集。

数据关系R:R={VR}VR={<v,w>|v,w属于V且P(v,w),<v,w>表示从v到w的弧,谓词P(v,w)定义了弧<v,w>的意义或信息}基本操作P:CreateGraph70405(&G , V , VR);初始条件:V是图的顶点集,VR是图的弧的集合。

操作结果:按V和VR的定义构造图G。

Initgraph70405(G);初始条件:图G存在。

操作结果:各个变量初始化。

LocateVex70405G,u);初始条件:图G存在,u和G中顶点具有相同的性质。

操作结果:若图中存在顶点u,则返回该顶点在图中的位置;否则返回其他信息。

交通仿真实习报告

交通仿真实习报告

一、实习目的本次交通仿真实习旨在通过模拟软件,让学生深入了解交通工程的基本原理和实际应用,提高学生在交通规划、交通仿真分析和交通管理等方面的实践能力。

通过实习,使学生能够:1. 掌握交通仿真的基本原理和方法。

2. 学会使用交通仿真软件进行模拟分析。

3. 培养学生解决实际交通问题的能力。

4. 增强学生的团队合作意识和沟通能力。

二、实习时间2023年X月X日至2023年X月X日三、实习地点XX大学交通工程实验室四、实习内容1. 交通仿真软件介绍实习开始,指导老师首先介绍了常用的交通仿真软件,如VISSIM、SUMO等。

重点讲解了VISSIM软件的功能、操作界面和基本参数设置。

2. 交通仿真基本原理指导老师详细讲解了交通仿真的基本原理,包括交通流模型、交通网络模型、仿真算法等。

通过理论讲解,使学生初步掌握了交通仿真的基本概念。

3. 交通仿真案例分析以城市道路交叉口为例,指导老师带领学生进行了交通仿真案例分析。

首先,根据实际情况,建立交通网络模型;其次,设置交通流参数和仿真参数;最后,进行仿真实验,分析交通状况。

4. 交通仿真软件操作在指导老师的指导下,学生进行了VISSIM软件的实际操作。

通过以下步骤:(1)建立交通网络模型:绘制道路、交叉口、交通设施等元素,设置道路属性、信号灯参数等。

(2)设置交通流参数:根据实际交通流量,设置不同车型的通行能力、速度、排放等参数。

(3)设置仿真参数:设置仿真时间、步长、输出方式等。

(4)进行仿真实验:启动仿真,观察交通状况,分析问题。

5. 交通仿真结果分析通过仿真实验,学生分析了不同交通管理措施对交通状况的影响。

例如,调整信号灯配时、设置交通设施、优化道路设计等。

五、实习总结1. 实习收获通过本次实习,我对交通仿真有了更深入的了解,掌握了VISSIM软件的基本操作。

同时,学会了如何运用交通仿真软件解决实际交通问题。

2. 实习体会(1)交通仿真是一门综合性学科,涉及多个领域,需要学生具备扎实的理论基础和实际操作能力。

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

交通咨询模拟系统实验报告Document number【980KGB-6898YT-769T8CB-246UT-18GG08】一、问题描述全国交通咨询模拟:处于对不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。

(2)城市之间有两种交通工具:火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

(3)提供两种最优决策:最快到达或最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次【测试数据】二、数据结构设计和核心算法设计描述:1、根据题目中的基本要求分析,可以创建系统概念模型,流程设计框图如下:3、核心设计:根据上面的流程图和逻辑拆分,对这个问题有了一个比较直观,详细地了解。

并且从中也可得知路线的添加即数据的存储是这个系统进行运作的一个基础。

而为了便于数据的存储、添加、删除等操作,我选择了储存文件对这些数据进行了存储。

将每个信息量放在不同的文件中,可以更有效、直观地对这些数据进行处理。

流程图中的7个主要功能模块在主函数中,采用输入选项进入子菜单,但是其他操作都是在路线添加好后进行的,并且为了每一项功能进行完后,系统可以及时回到主交互界面,我采用的是无限循环形式,即while(1)。

以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多项属性。

三、主控及功能模块层次结构:1、模块说明:本系统分为个模块1、)主函数2、)添加城市3、)查找城市并返回序号4、)删除城市5、)添加列车6、)添加航班7、)删除列车或航班8、)找出最小费用路线9、)初始化系统数据(读入内存)10、)找出最快路线11、)计算最快路线耗费的时间并打印12、)计算最小费用路线13、)主界面14、)存储信息到文件15、)退出、2、下面是各模块示意图:基本操作:TrafficNodeDat交通工具信息Charname[MAX_STRING_NUM]班次Int starttime出发时间 Int starttime到达时间 Int cost票价UNodeDat路线信息 Short int city城市编号Int TrainNum火车路线数 int FlightNum 航班路线数 TrafficNodeDatTrain[MAX_TRAFFIC_NUM]火车路线信息TrafficNodeDatFlight[MAX_TRAFFIC_N航班路线信息函数变量声明:#include <>#include <>#define ERR 0#define OK 1#define Dij_MAXN 33#define MAX_VERTEX_NUM 31#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 TrafficNode{char name[MAX_STRING_NUM]; rainNum;}fprintf(fp,"%d\n",total);for (i=0;i<CityNum;i++){for (j=0;j<AdjList[i].TrainNum;j++){fprintf(fp,"%s %s %s ", AdjList[i].Train[j].name, CityName[i],CityName[AdjList[i].Train[j].EndCity]);fprintf(fp,"%2d:%2d %2d:%2d %d\n",AdjList[i].Train[j].StartTime/60,AdjList[i].Train[j].StartTime%60,AdjList[i].Train[j].StopTime/60,AdjList[i].Train[j].StopTime%60,AdjList[i].Train[j].Cost);}}fclose(fp);total=0;fp=fopen(FlightFile,"w");for (i=0;i<CityNum;i++){total+=AdjList[i].FlightNum;}fprintf(fp,"%d\n",total);for (i=0;i<CityNum;i++){for (j=0;j<AdjList[i].FlightNum;j++){fprintf(fp,"%s %s %s ", AdjList[i].Flight[j].name, CityName[i],CityName[AdjList[i].Flight[j].EndCity]);fprintf(fp,"%2d:%2d %2d:%2d %d\n",AdjList[i].Flight[j].StartTime/60,AdjList[i].Flight[j].StartTime%60,AdjList[i].Flight[j].StopTime/60,AdjList[i].Flight[j].StopTime%60,AdjList[i].Flight[j].Cost);}}fclose(fp);return 1;}(4)添加城市:int InsertCity (char *Name){strcpy(CityName[CityNum],Name);AdjList[CityNum].city=CityNum;AdjList[CityNum].FlightNum=0;AdjList[CityNum].TrainNum=0;CityNum++;return 1;}(5)删除城市:int DelCity (char *Name){int city,i,j;city=SeekCity(Name);for (i=city;i<CityNum-1;i++){strcpy(CityName[i],CityName[i+1]);AdjList[i].FlightNum=AdjList[i+1].FlightNum;AdjList[i].TrainNum=AdjList[i+1].TrainNum;for (j=0;j<AdjList[i].FlightNum;j++){AdjList[i].Flight[j].Cost=AdjList[i+1].Flight[j].Cost;AdjList[i].Flight[j].EndCity=AdjList[i+1].Flight[j].EndCity; strcpy(AdjList[i].Flight[j].name,AdjList[i+1].Flight[j].name); AdjList[i].Flight[j].StartTime=AdjList[i+1].Flight[j].StartTime;AdjList[i].Flight[j].StopTime=AdjList[i+1].Flight[j].StopTime;}}CityNum--;return 1;}(6)添加火车路线:int InsertTrain (char *train,char *StartCity,char *EndCity,int StartTime,int EndTime,int cost){int i,j;i=SeekCity(StartCity);j=SeekCity(EndCity);AdjList[i].Train[AdjList[i].TrainNum].Cost=cost;AdjList[i].Train[AdjList[i].TrainNum].EndCity=j;AdjList[i].Train[AdjList[i].TrainNum].StartTime=StartTime; AdjList[i].Train[AdjList[i].TrainNum].StopTime=EndTime;strcpy(AdjList[i].Train[AdjList[i].TrainNum].name,train);AdjList[i].TrainNum++;return 1;}(7)添加航班路线:int InsertFlight(char *flight,char *StartCity,char *EndCity,int StartTime,int EndTime,int cost){int i,j;i=SeekCity(StartCity);j=SeekCity(EndCity);AdjList[i].Flight[AdjList[i].FlightNum].Cost=cost;AdjList[i].Flight[AdjList[i].FlightNum].EndCity=j;AdjList[i].Flight[AdjList[i].FlightNum].StartTime=StartTime; AdjList[i].Flight[AdjList[i].FlightNum].StopTime=EndTime;strcpy(AdjList[i].Flight[AdjList[i].FlightNum].name,flight); AdjList[i].FlightNum++;return 1;}(8)删除路线:int DelPath (char *name){int i,j,flag=0;for (i=0;i<CityNum;i++){for (j=0;j<AdjList[i].FlightNum;j++)if (strcmp(AdjList[i].Flight[j].name,name)==0){flag=1;break;}if (flag){for (;j<AdjList[i].FlightNum-1;j++){AdjList[i].Flight[j].Cost=AdjList[i].Flight[j+1].Cost;AdjList[i].Flight[j].EndCity=AdjList[i].Flight[j+1].EndCity; strcpy(AdjList[i].Flight[j].name,AdjList[i].Flight[j+1].name); AdjList[i].Flight[j].StartTime=AdjList[i].Flight[j+1].StartTime;AdjList[i].Flight[j].StopTime=AdjList[i].Flight[j+1].StopTime;}AdjList[i].FlightNum--;break;}for (j=0;j<AdjList[i].TrainNum;j++)if (strcmp(AdjList[i].Train[j].name,name)==0){flag=1;break;}if (flag){for (;j<AdjList[i].TrainNum-1;j++){AdjList[i].Train[j].Cost=AdjList[i].Train[j+1].Cost;AdjList[i].Train[j].EndCity=AdjList[i].Train[j+1].EndCity;strcpy(AdjList[i].Train[j].name,AdjList[i].Train[j+1].name);AdjList[i].Train[j].StartTime=AdjList[i].Train[j+1].StartTime;AdjList[i].Train[j].StopTime=AdjList[i].Train[j+1].StopTime;}AdjList[i].TrainNum--;break;}}return 1;}(9)打印最小费用路线:void Dijkstra_Output(int matx[Dij_MAXN][Dij_MAXN],intPreCity[Dij_MAXN],int p_end,int TravelType){int track[Dij_MAXN];int i=0,j,k,min,tmp,end,cost=0;int startH, startM, endH, endM;rainNum;k++)if(AdjList[track[i]].Train[k].EndCity==end&&min>AdjList[track[i]].Trai n[k].Cost){min=AdjList[track[i]].Train[k].Cost;tmp=k;}printf("%s",AdjList[track[i]].Train[tmp].name);startH =AdjList[track[i]].Train[tmp].StartTime/60 ;startM =AdjList[track[i]].Train[tmp].StartTime%60;endH =AdjList[track[i]].Train[tmp].StopTime/60 ;endM =AdjList[track[i]].Train[tmp].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("%d\n",endM);rain[tmp].StartTime/60,AdjList[track[i]].Train[tmp].StartTime%60,Adj List[track[i]].Train[tmp].StopTime/60,AdjList[track[i]].Train[tmp].S topTime%60);}}else{for(i--;i>0;i--){printf("\n%s:",CityName[track[i]]);end=track[i-1];min=32767;for(k=0;k<AdjList[track[i]].FlightNum;k++)rain[k].EndCity改为AdjList[track[i]].Flight[k].EndCity!/*if(AdjList[track[i]].Train[k].EndCity==end&&min>AdjList[track[i]].Flig ht[k].Cost){ */if(AdjList[track[i]].Flight[k].EndCity==end&&min>AdjList[track[i]].Fli ght[k].Cost){min=AdjList[track[i]].Flight[k].Cost;tmp=k;}printf("%s",AdjList[track[i]].Flight[tmp].name);startH =AdjList[track[i]].Flight[tmp].StartTime / 60 ;startM =AdjList[track[i]].Flight[tmp].StartTime % 60;endH =AdjList[track[i]].Flight[tmp].StopTime / 60 ;endM =AdjList[track[i]].Flight[tmp].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("%d\n",endM);light[tmp].StartTime /60,AdjList[track[i]].Flight[tmp].StartTime %60,AdjList[track[i]].Flight[tmp].StopTime /60,AdjList[track[i]].Flight[tmp].StopTime % 60);}}printf("\n%s: DESTINATION!",CityName[track[0]]);printf("\nMin Cost : %d\n",cost);}(10)找出最小费用路线void Dijkstra(int matx[Dij_MAXN][Dij_MAXN],int p_start,int p_end,int TravelType){int PreCity[Dij_MAXN]; .\n");return -1;}fscanf(fp,"%d",&CityNum);for (i=0;i<CityNum;i++){fscanf(fp,"%s",&CityName[i]);AdjList[i].city=i;AdjList[i].TrainNum=0;AdjList[i].FlightNum=0;}fclose(fp);fp=fopen(TrainFile,"r");if (!fp){printf("\nError:Cannot Open Train File...\n"); return -1;}fscanf(fp,"%d",&num);for (i=0;i<num;i++){fscanf(fp,"%s",&stmp1);fscanf(fp,"%s",&stmp2);fscanf(fp,"%s",&stmp3);j=SeekCity(stmp2);AdjList[j].Train[AdjList[j].TrainNum].EndCity=SeekCity(stmp3);strcpy(AdjList[j].Train[AdjList[j].TrainNum].name,stmp1);fscanf(fp,"%d:%d",&hour,&minute);AdjList[j].Train[AdjList[j].TrainNum].StartTime=hour*60+minute;fscanf(fp,"%d:%d",&hour,&minute);AdjList[j].Train[AdjList[j].TrainNum].StopTime=hour*60+minute;fscanf(fp,"%d",&cost);AdjList[j].Train[AdjList[j].TrainNum].Cost=cost;AdjList[j].TrainNum++;}fclose(fp);fp=fopen(FlightFile,"r");if (!fp){printf("\nError:Cannot Open Flight File...\n"); return -1;}fscanf(fp,"%d",&num);for (i=0;i<num;i++){fscanf(fp,"%s",&stmp1);fscanf(fp,"%s",&stmp2);fscanf(fp,"%s",&stmp3);j=SeekCity(stmp2);AdjList[j].Flight[AdjList[j].FlightNum].EndCity=SeekCity(stmp3);strcpy(AdjList[j].Flight[AdjList[j].FlightNum].name,stmp1);fscanf(fp,"%d:%d",&hour,&minute);AdjList[j].Flight[AdjList[j].FlightNum].StartTime=hour*60+minute;fscanf(fp,"%d:%d",&hour,&minute);AdjList[j].Flight[AdjList[j].FlightNum].StopTime=hour*60+minute;fscanf(fp,"%d",&cost);AdjList[j].Flight[AdjList[j].FlightNum].Cost=cost; AdjList[j].FlightNum++;}fclose(fp);return 1;}(12)找出最快路线:int SearchMinTime (CityType City,CityType EndCity,int CurTime,int curPathNo,int TravelType){int i;if (City==EndCity){if (MinTime>CurTime-StartTime){for (i=0;i<=curPathNo;i++){MinPath[i].City=Path[i].City;MinPath[i].TraNo=Path[i].TraNo;curPath=curPathNo;}MinTime=CurTime-StartTime;}}else{curPathNo++;Path[curPathNo].City=City;if (!TravelType){for (i=0;i<AdjList[City].TrainNum;i++){((AdjList[City].Train[i].StartTime>=(CurTime%1440))&&(AdjList[City]. Train[i].StopTime+(CurTime/1440)*1440-StartTime<MinTime)){Path[curPathNo].TraNo=i;SearchMinTime(AdjList[City].Train[i].EndCity,EndCity,AdjList[City].T rain[i].StopTime+(CurTime/1440)*1440,curPathNo,TravelType);}if((AdjList[City].Train[i].StartTime<(CurTime%1440))&&(AdjList[City].T rain[i].StopTime+(CurTime/1440)*1440-StartTime<MinTime)){Path[curPathNo].TraNo=i;SearchMinTime(AdjList[City].Train[i].EndCity,EndCity,AdjList[City].T rain[i].StopTime+(CurTime/1440+1)*1440,curPathNo,TravelType);}}}else{for (i=0;i<AdjList[City].FlightNum;i++){if((AdjList[City].Flight[i].StartTime>=CurTime)&&(AdjList[City].Flight [i].StopTime+(CurTime/1440)*1440-StartTime<MinTime)){Path[curPathNo].TraNo=i;SearchMinTime(AdjList[City].Flight[i].EndCity,EndCity,AdjList[City]. Flight[i].StopTime+(CurTime/1440)*1440,curPathNo,TravelType);}((AdjList[City].Flight[i].StartTime<CurTime)&&(AdjList[City].Flight[ i].StopTime+(CurTime/1440)*1440-StartTime<MinTime)){Path[curPathNo].TraNo=i;SearchMinTime(AdjList[City].Flight[i].EndCity,EndCity,AdjList[City]. Flight[i].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;i<AdjList[StartCity].TrainNum;i++){Path[0].TraNo=i;StartTime=AdjList[StartCity].Train[i].StartTime;SearchMinTime(AdjList[StartCity].Train[i].EndCity,EndCity,AdjList[St artCity].Train[i].StopTime,0,TravelType);}}else{for (i=0;i<AdjList[StartCity].FlightNum;i++)Path[0].TraNo=i;StartTime=AdjList[StartCity].Flight[i].StartTime;SearchMinTime(AdjList[StartCity].Flight[i].EndCity,EndCity,AdjList[S tartCity].Flight[i].StopTime,0,TravelType);}}if (MinTime==32767){printf("\nNo access to that destination!");return 0;}rain[MinPath[0].TraNo].StartTime;light[MinPath[0].TraNo].StartTime;printf("\nPath:\n");for (i=0;i<=curPath;i++){if (!TravelType)printf("%s : %s",CityName[MinPath[i].City],AdjList[MinPath[i].City].Train[MinPath[i ].TraNo].name);elseprintf("%s : %s",CityName[MinPath[i].City],AdjList[MinPath[i].City].Flight[MinPath[ i].TraNo].name);startH =AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StartTime / 60 ;startM =AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StartTime % 60 ;AdjList[MinPath[i].City].Train[MinPath[i].TraNo].StopTime / 60 ;endM =AdjList[MinPath[i].City].Train[MinPath[i].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("%d\n",endM);rainNum){min=32767;end=AdjList[i].Train[j].EndCity;while(end==AdjList[i].Train[j].EndCity&&j<AdjList[i].TrainNum){if (AdjList[i].Train[j].Cost<min){min=AdjList[i].Train[j].Cost;}j++;}ma[i][end]=min;}}}else{for (i=0;i<CityNum;i++){min=32767;j=0;while (j<AdjList[i].FlightNum){min=32767;end=AdjList[i].Flight[j].EndCity;while(end==AdjList[i].Flight[j].EndCity&&j<AdjList[i].FlightNum){if (AdjList[i].Flight[j].Cost<min){min=AdjList[i].Flight[j].Cost;}j++;}ma[i][end]=min;}}}Dijkstra(ma,StartCity,EndCity,TravelType);return 1;}五、功能模块间函数的调用关系,如下图所示:六、调试结果:1、主界面:2、添加城市:输入命令1后,按提示输入城市名,而后返回主界面原city文件:添加城市后的city文件:3、删除城市:输入命令2后,按提示输入城市名,而后返回主界面4、添加路线:输入命令3后,按提示依次输入起始站、终点站、类型、起始时刻、到达时刻、票价等信息,而后返回主界面5、删除路线:输入命令4后,按提示输入,而后返回主界面6、查找最小费用花费:输入命令5后,按提示输入起始城市、终点城市、类型,而后返回主界面结果正确!7、查找最小时间花费:输入命令6后,按提示输入城市名,而后返回主界面结果正确!8、退出:输入命令0后,退出系统七、课程设计小结:1、实验过程中的注意点1)遇到逻辑问题,然后设断点,调试跟踪看哪步出了问题.比如说全局变量和局部变量设置出现问题,导致运行过程各变量的取值不对。

相关文档
最新文档