当前位置首页 > 报告/分析 > 交通
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

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

文档格式:DOC| 41 页|大小 784.50KB|积分 10|2022-05-08 发布|文档ID:86806043
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 41
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • word一、问题描述 全国交通咨询模拟:处于对不同目的的旅客对交通工具有不同的要求例如, 因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客如此希望旅费尽可能省,而老年旅客如此要求中转次数最少编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询根本要求】〔1〕提供对城市信息进展编辑〔如:添加或删除〕的功能 〔2〕城市之间有两种交通工具:火车和飞机提供对列车时刻表和 飞机航班进展编辑〔增设或删除〕的功能 〔3〕提供两种最优决策:最快到达或最省钱到达全程只考虑一种 交通工具 〔4〕旅途中消耗的总时间应该包括中转站的等候时间 〔5〕咨询以用户和计算机的对话方式进展由用户输入起始站、终 点站、最优决策原如此和交通工具,输出信息:最快需要多长时 间才能到达或者最少需要多少旅费才能到达,并详细说明依次 于何时乘坐哪一趟列车或哪一次班机到何地。

    某某397乌鲁木齐某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某189221611456681100967639907349676511242305704651622367409255607675140【测试数据】呼和浩特137674某某某某534842某某825某某672二、 数据结构设计和核心算法设计描述:1、 根据题目中的根本要求分析,可以创建系统概念模型,流程设计框图如下: 班次2、逻辑结构拆分:起止时间城市编号交通工具 信息 票价飞机线路总数火车线路总数火车信息路线信息飞机信息3、 核心设计:根据上面的流程图和逻辑拆分,对这个问题有了一个比拟直观,详细地了解并且从中也可得知路线的添加即数据的存储是这个系统进展运作的一个根底而为了便于数据的存储、添加、删除等操作,我选择了储存文件对这些数据进展了存储将每个信息量放在不同的文件中,可以更有效、直观地对这些数据进展处理流程图中的7个主要功能模块在主函数中,采用输入选项进入子菜单,但是其他操作都是在路线添加好后进展的,并且为了每一项功能进展完后,系统可以与时回到主交互界面,我采用的是无限循环形式,即while〔1〕。

    以邻接表作交通图的存储结构,表示边的结点除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以与出发和到达的时间等多项属性三、 主控与功能模块层次结构:1、 模块说明:本系统分为个模块1、〕主函数 2、〕添加城市 3、〕查找城市并返回序号4、〕删除城市5、〕添加列车6、〕添加航班7、〕删除列车或航班8、〕找出最小费用路线9、〕初始化系统数据〔读入存〕10、〕找出最快路线11、〕计算最快路线消耗的时间并打印12、〕计算最小费用路线13、〕主界面14、〕存储信息到文件15、〕退出、2、下面是各模块示意图:根本操作: TraffiodeDat 交通工具 信息Char name[MAX_STRING_NUM] 班次 Int starttime 出发时间 Int starttime 到达时间 Int cost 票价 UNodeDat 路线 信息 Short int city 城市编号 Int TrainNum 火车路线数 int FlightNum 航班路线数 TraffiodeDat Train[MAX_TRAFFIC_NUM] 火车路线信息 TraffiodeDat Flight[MAX_TRAFFIC_NUM] 航班路线信息函数变量声明:#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 10 const char CityFile[] ="D:\\city.txt"; const char TrainFile[] ="D:\\train.txt"; const char FlightFile[] ="D:\\flight.txt"; typedef short int CityType; typedef struct Traffiode { char name[MAX_STRING_NUM]; //班次 int StartTime,StopTime; //起止时间 int EndCity; //该有向边指向的顶点在数组中的位置,即该城市编号 int Cost; //票价 } TraffiodeDat; typedef struct VNode { CityType city; int TrainNum,FlightNum; //标记下面Train数组和Flight数组里元素个数 TraffiodeDat Train[MAX_TRAFFIC_NUM]; //数组成员为结构体,记录了到达城市、起止时间、票价和班次 TraffiodeDat Flight[MAX_TRAFFIC_NUM]; // int Cost; //遍历时到达该城市的消耗〔时间或者费用〕 } VNodeDat; typedef struct PNode { int City; int TraNo; } PNodeDat; VNodeDat AdjList[MAX_VERTEX_NUM]; //System Info char CityName[MAX_VERTEX_NUM][MAX_STRING_NUM]; //城市名,采用第一下标为该城市在本程序中的编号 int CityNum; //城市数目 PNodeDat Path[MAX_VERTEX_NUM]; //存储临时最小时间路径 PNodeDat MinPath[MAX_VERTEX_NUM]; //存储搜索到当前的最小时间路径 int MinTime,StartTime; int curPath; 函数构成:int main() { char name[MAX_STRING_NUM]; char s_city[MAX_STRING_NUM]; char e_city[MAX_STRING_NUM]; int mand,cost; int startcity,endcity,traveltype; int s_hour,s_minute,e_hour,e_minute; while (1) { ShowMenu(); //显示菜单 scanf("%d",&mand); // switch (mand) { case 0: //退出 return 0; case 1: //添加城市 InitSysData(); printf("\n输入城市名:"); scanf("%s",&name); InsertCity(name); SaveSysInfo(); printf("System Info Save OK!\n"); break; case 2: //删除城市 InitSysData(); printf("\n输入城市名:"); scanf("%s",&name); DelCity(name); SaveSysInfo(); printf("System Info Save OK!\n"); break; case 3: //添加路线 InitSysData(); printf("起始站城市名:"); scanf("%s",&s_city); printf("终点站城市名:"); scanf("%s",&e_city); printf("类型〔列车0,航班1〕:"); scanf("%d",&traveltype); printf("输入列车/飞机班次:"); scanf("%s",&name); printf("起始时刻(00:00,24小时制):"); scanf("%2d:%2d",&s_hour,&s_minute); printf("到达时刻(00:00,24小时制):"); scanf("%2d:%2d",&e_hour,&e_minute); printf("票价:");scanf("%d",&cost); if (traveltype) { InsertFlight(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minute,cost); } else { InsertTrain(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minute,cost); } SaveSysInfo(); printf("System Info Save OK!\n"); break; case 4: //删除路线 InitSysData(); printf("输入班次:"); scanf("%s",&name); DelPath(name); SaveSysInfo(); printf("System Info Save OK!\n"); break; case 5: //最小消耗 InitSysData(); printf("\n起始城市:"); scanf("%s",&name); startcity=SeekCity(name); if (startcity<0) { printf("Error City Name:No such city!\n"); break; } printf("终点城市:"); scanf("%s",&name); endcity=SeekCity(name); if (endcity<0) { printf("Error City Name:No such city!\n"); break; } printf("类型(列车0,航班1) :"); scanf("%d",&traveltype); if (traveltype!=0&&traveltype!=1) { printf("Error Input!"); break; } CalcMinCost(startcity,endcity,traveltype); printf("\n"); break; case 6: //最短时间路线 InitSysData(); printf("\n起始城市:"); scanf("%s",&name); startcity=SeekCity(name); if (startcity<0) { printf("Error City Name:No such city!\n"); break; } printf("终点城市:"); scanf("%s",&name); endcity=SeekCity(name); if (endcity<0) { printf("Error City Name:No such city!\n"); break; } printf("类型(列车0,航班1) :"); scanf("%d",&traveltype); if (traveltype!=0&&traveltype!=1) { printf("Error Input!"); break; } CalcMinTime(startcity,endcity,traveltype); printf("\n"); break; } } }四、主函数中的各个调用的函数代码具体如下:(1) 显示菜单:int ShowMenu() { printf("\n************MENU************\n"); printf("1: 添加城市\n2: 删除城市\n3: 添加交通路线\n4: 删除交通路线\n5: 查询最小费用路线\n6: 查询最快路线\n0: 退出"); printf("\n****************************\n"); printf("\nType In Your mand:"); return 1; } (2) 查找城市并返回城市序号:int SeekCity (char *name) { int i; for (i=0;i=0) { cost+=matx[PreCity[j]][j]; track[i++]=j=PreCity[j]; } printf("\nTrack Way:"); if (!TravelType) { for(i--;i>0;i--) { printf("\n%s:",CityName[track[i]]); end=track[i-1];min=32767; for (k=0;kAdjList[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); //printf("%2d:%2d-%2d:%2d",AdjList[track[i]].Train[tmp].StartTime/60,AdjList[track[i]].Train[tmp].StartTime%60,AdjList[track[i]].Train[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;kAdjList[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); //printf("%2d:%2d-%2d:%2d",AdjList[track[i]].Flight[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]; //PreCity[i]==-1,never used; //PreCity>0,the precity of City i int i,j,min,pre,pos; for (i=0;i0&&(min<0||matx[i][j]

    点击阅读更多内容
    卖家[上传人]:沈阳哈登
    资质:实名认证