您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 全国交通咨询模拟系统
1全国交通咨询模拟系统2目录一、需求分析.........................................................................................................................3二、个人工作.........................................................................................................................4三、概要设计...........................................................................................................................41.主程序流程图:.........................................................................................................42.创建图算法流程图:.................................................................................................5四、源程序.............................................................................................................................13五、程序结果.........................................................................................................................245.3设计和调试分析..............................................................................................................27六、程序设计体会.................................................................................................................283全国交通咨询模拟系统一、需求分析旅客对由于出行目的的不同对交通工具的要求也有不同。例如,因公事出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。为了能满足广大旅客的需求,方便旅客出行,就此编制一个全国城市间的交通咨询程序,为旅客提供两种或者三种最优决策的交通咨询,达到如下的基本要求::(1)提供对城市信息进行编辑(如:添加和删除)的功能.(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班表进行编辑(增加或删除)的功能。(3)提供两种最优决策:最快到达和最省钱到达。全程只考虑一种交通工具。(4)旅途中耗费的总时间应该包括中转站的等候时间。(5)咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘哪趟列车或哪一次班机到何地。(6)通过对比以及用户操作基本达到旅客出行的便利。4二、个人工作此次课程设计是对全国城市交通图列车时刻表及飞机航班表的编辑。此次课设是利用VC工具在dos环境下实现全国交通的咨询与管理。通过此次程序可以对全国城市之间火车与飞机进行两方面的咨询,即最少的时间与最少的费用的咨询,从而方便旅客的出行。通过此次课程设计,我要学会怎样用在VCdos环境下编程,而且要通过此次课程设计加深对数据结构的理解,在设计中用邻接表作交通图的存储结构,表示边的结点中除含有邻接点的信息外,还包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等属性。图中顶点城市的信息,包括城市名称、城市编号和依附该顶点的边的指针。在程序中,利用迪杰斯特拉算法求花钱最少和花时间最少的交通方式。三、概要设计1.主程序流程图:开始CreateGraph(GT)CreateGraph(GP)OpenGraph_T(GT)OpenGraph_P(GP)Main_Menu(GT,GP)DestoryGraph(GT)DestoryGraph(GP)结束SaveGraph_T(GT)SaveGraph_P(GP)52.创建图算法流程图:3.打开图算法流程图:开始iMAXVTXNUMG.FLAG[I]=0i++Y结束开始打开文件读出图中顶点数vexNum,边数edgeNumjvexNum读出城市的号数cityNum,标志Flag,城市名称cityNamej++YNiedgeNum读出边上的各信息YNN64.主菜单操作算法流程图:5.咨询菜单流程图6.咨询钱最少模块图i++结束开始Switch(n)Case1:Case0:Case2::Inquire_Menu(GT,GP)breakManage_Menu(GT,GP)Switch(choice)Inquire_Menu(GT,GP)Case1:Case2:Case0:Inquire_Money(GT,GP)breakInquire_Time(GT,GP)Inquire_Money(GT,GP)While(True)Y输入nN77.input_Money(GraphG,int&st,int&sn)算法流程图n==1Yinput_Money(GP,st,nd)LeastMoneyPath(GP,st,nd,p)结束Nn==2Yinput_Money(GT,st,nd)LeastMoneyPath(GT,st,nd,p)print_Money(GT,p)print_Money(GP,p)结束Nn==2结束YN结束While(True)输入起始城市名称inputVex(G,st)==trueNYWhile(True)break88.inputVex(G,st)算法流程图9.LocateVex(G,name,i)算法流程图输入终止城市名称inputVex(G,sn)==trueNbreak开始输入城市名字nameLocateVex(G,name,i)==trueNReturntrueY输出城市不存在结束开始imaxvexnumYG.Flag[i]==1&&strcmp(G.Adjlist[i].cityName,name)==0YReturntruei++Returnfalse结束910.print_Money(GT,p)算法流程图11.LeastMoneyPath(GT,st,nd,p)算法流程图开始i=0ip.len打印边p的信息Sum+=p.moneyi++Y结束输钱sumN1011.ShortestTimePath(GT,st,nd,p)算法流程图结束初始化i=0iMAXVTXNUM每个顶点的最短路径为一最大值dijskt[i]=9999,初始化每条路径InitPath(path[i])i++Yp=G.Adjlist[st].firstEdgeWhile(p)Nq为p的下一条边q=p-nextEdgep-elem.Moneydijkst[p-elem.jvex]重置每个顶点的最少钱的路径dijkst[p-elem.jvex]=p-elem.Moneyt=p-elemSetPath(path[p-elem.jvex],st,p-elem.jvex,t)Yp=qYNFound=false求从st到nd的最短路径算法并复制此路径copyPath(path[w],path[v])开始1112.Manage_Menu(GT,GP)算法流程图13.City_Edit(GT,GP)算法流程图开始每个点初始一个最大值初始每条路径置时间=0置起点的时间为n置p为起点的第一条边检测依附每个顶点的边依据迪杰斯特求每个起点到终点的时间最少的路径结束开始Switch(choice)Case1:Case2:Case3:Case0:City_Edit(GT,GP)Train_Edit(GT,GP)Plane_Edit(GT,GP)break开始输入n进行选择n==1N1214.Train_Edit(GT,GP)算法流程图注释:部分算法的设计思想相同,只是参数不同,故省略部分程序流程图。N添加城市及相关信息Y结束n==2删除城市及相关信息Y结束Nn==0结束YN输出错误输入n进行选择开始While(true)输入n进行选择n==1NY输入列车的信息breakn==2删除列车的信息breakYNn==0breakYN重新输入n进行选择YBreak结束13四、源程序#defineMAXVTXNUM30//图中顶点数的最大值/************顶点、边和图类型**********************************/typedefstruct//定义各车次及航班的信息弧的信息{intivex;//起始点号intjvex;//终点号charNumber[10];//车次号intMoney;//费用intStartTime;//起始时间(秒)intEndTime;//终止时间(秒)intTime;//中途时间(秒)}EdgeInfo;//边的信息typedefstructEdgeNode//边的信息弧结点{EdgeInfoelem;EdgeNode*nextEdge;}EdgeNode,*EdgePtr;//边的结点类型,指向边的指针typedefstruct//城市信息头结点{charcityName[10];intcityNumber;EdgePtrfirstEdge;//指向的一条依附该顶点的边的指针}Vnode;//顶点类型typedefstruct//图的结构{VnodeAdjlist[MAXVTXNUM];//邻接表intvexNum,edgeNum;//图中的顶点数和边数intFlag[MAXVTXNUM];//标志是否是图中的顶点,0表示不是,1表示是}Graph;//图类型/*****************图的基本操作**********************//************路径类型*************************/typedefstruct{intvx,vy;//vx为路径的起点,vy为路径的终点EdgeInfop;//路径中边的信息}Edge;typedefstruct14{Edgeedges[MAXVTXNUM];//路径中边的序列:edges[i]表示从起点到i的最短路径intlen;//路径中边的数目}Path;/************路径基本操作**********************/voidcopyPath(Path&p1,Path&p2){//复制路径p1=p2inti;for(i=0;ip2.len;i++){p1.edges[i].vx=p2.edges[i].vx;p1.edges[i].vy=p2.edges[i].vy;p1.edges[i].p=p2.edges[i].p;}p1.len=p2.len;}voidSetPath(Path&pa,intv,intw,EdgeInfot){///设置pa从v到w的第一条边,边的信息为tpa.edges[0].vx=v;pa.edges[0].vy=w;pa.edges[0].p=t;pa.len=1;}#includeiostream.hintTim
本文标题:全国交通咨询模拟系统
链接地址:https://www.777doc.com/doc-5586245 .html