一、问题描述全国交通咨询模拟:处于对不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。(3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具。(4)旅途中耗费的总时间应该包括中转站的等候时间。(5)咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。【测试数据】二、数据结构设计和核心算法设计描述:1、根据题目中的基本要求分析,可以创建系统概念模型,流程设计框图如下:呼和浩特北京大连西宁武汉南昌842137674825672徐州397乌鲁木齐哈尔滨长春沈阳天津郑州西安兰州成都上海昆明贵阳株州福州柳州广州深圳南宁1892216114566811009676399073496765112423057046516223674092556076751405342、逻辑结构拆分: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]班次Intstarttime出发时间Intstarttime到达时间Intcost票价UNodeDat路线信息Shortintcity城市编号IntTrainNum火车路线数intFlightNum航班路线数TrafficNodeDatTrain[MAX_TRAFFIC_NUM]火车路线信息TrafficNodeDatFlight[MAX_TRAFFIC_航班路线信息NUM]函数变量声明:#include#include#defineERR0#defineOK1#defineDij_MAXN33#defineMAX_VERTEX_NUM31#defineMAX_STRING_NUM10#defineMAX_TRAFFIC_NUM10constcharCityFile[]="D:\\city.txt";constcharTrainFile[]="D:\\train.txt";constcharFlightFile[]="D:\\flight.txt";typedefshortintCityType;typedefstructTrafficNode{charname[MAX_STRING_NUM];//班次intStartTime,StopTime;//起止时间intEndCity;//该有向边指向的顶点在数组中的位置,即该城市编号intCost;//票价}TrafficNodeDat;typedefstructVNode{CityTypecity;intTrainNum,FlightNum;//标记下面Train数组和Flight数组里元素个数TrafficNodeDatTrain[MAX_TRAFFIC_NUM];//数组成员为结构体,记录了到达城市、起止时间、票价和班次TrafficNodeDatFlight[MAX_TRAFFIC_NUM];//intCost;//遍历时到达该城市的耗费(时间或者费用)}VNodeDat;typedefstructPNode{intCity;intTraNo;}PNodeDat;VNodeDatAdjList[MAX_VERTEX_NUM];//SystemInfocharCityName[MAX_VERTEX_NUM][MAX_STRING_NUM];//城市名...