交通咨询模拟系统

上传人:无*** 文档编号:128836581 上传时间:2022-08-02 格式:DOC 页数:37 大小:387.50KB
收藏 版权申诉 举报 下载
交通咨询模拟系统_第1页
第1页 / 共37页
交通咨询模拟系统_第2页
第2页 / 共37页
交通咨询模拟系统_第3页
第3页 / 共37页
资源描述:

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

1、全国交通征询模拟系统目录一、 需求分析4二、 个人工作4三、概要设计51主程序流程图:52创立图算法流程图:6四、源程序14五、程序成果255.3设计和调试分析29六、程序设计体会30全国交通征询模拟系统一、 需求分析旅客对由于出行目的的不同对交通工具的规定也有不同。例如,因公事出差的旅客但愿在旅途中的时间尽量短,出门旅游的游客则但愿旅费尽量省,而老年旅客则规定中转次数至少。为了能满足广大旅客的需求,以便旅客出行,就此编制一种全国都市间的交通征询程序,为旅客提供两种或者三种最优决策的交通征询,达到如下的基本规定::(1) 提供对都市信息进行编辑(如:添加和删除)的功能.(2) 都市之间有两种交

2、通工具:火车和飞机。提供对列车时刻表和飞机航班表进行编辑(增长或删除)的功能。(3) 提供两种最优决策:最快达到和最省钱达到。全程只考虑一种交通工具。(4) 旅途中耗费的总时间应当涉及中转站的等待时间。(5) 征询以顾客和计算机的对话方式进行。由顾客输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才干达到或者至少需要多少旅费才干达到,并具体阐明依次于何时乘哪趟列车或哪一次班机到何地。(6) 通过对比以及顾客操作基本达到旅客出行的便利。二、 个人工作 本次课程设计是对全国都市交通图列车时刻表及飞机航班表的编辑。本次课设是运用VC工具在dos环境下实现全国交通的征询与管理。通

3、过本次程序可以对全国都市之间火车与飞机进行两方面的征询,即至少的时间与至少的费用的征询,从而以便旅客的出行。通过本次课程设计,我要学会如何用在VC dos环境下编程,并且要通过本次课程设计加深对数据构造的理解,在设计中用邻接表作交通图的存储构造,表达边的结点中除具有邻接点的信息外,还涉及交通工具、路程中消耗的时间和耗费以及出发和达到的时间等属性。图中顶点都市的信息,涉及都市名称、都市编号和依附该顶点的边的指针。在程序中,运用迪杰斯特拉算法求花钱至少和花时间至少的交通方式。三、概要设计1主程序流程图:开始CreateGraph(GT)CreateGraph(GP)OpenGraph_T(GT)O

4、penGraph_P(GP)Main_Menu(GT,GP)DestoryGraph(GT) DestoryGraph(GP)结束SaveGraph_T(GT)SaveGraph_P(GP)2创立图算法流程图:N开始iMAXVTXNUMG.FLAGI=0i+Y结束3打开图算法流程图:开始NY读出都市的号数cityNum,标志Flag,都市名称cityNamejvexNum读出图中顶点数vexNum,边数edgeNum打开文献j+iedgeNumN读出边上的各信息Y 结束i+4主菜单操作算法流程图:开始Switch(n)Case 2:Case 0:Case 1:Inquire_Menu(GT,G

5、P)breakManage_Menu(GT,GP)5征询菜单流程图Inquire_Menu(GT,GP)Switch(choice)Case 1:Case 2:Case 0:Inquire_Money(GT,GP)Inquire_Time(GT,GP)break6征询钱至少模块图Inquire_Money(GT,GP)NWhile(True)Y输入 nYn=1NYinput_Money(GP,st, nd)n=2LeastMoneyPath (GP,st,nd,p)Ninput_Money(GT,st, nd)print_Money(GP,p)LeastMoneyPath(GT,st,nd,p

6、)Yn=2结束Nprint_Money(GT,p)结束结束结束7input_Money(Graph G, int &st,int &sn)算法流程图While(True)输入起始都市名称YinputVex(G,st)=truebreakNWhile(True)输入终结都市名称inputVex(G,sn)=truebreakN8inputVex(G,st)算法流程图开始输入都市名字 nameYLocateVex(G,name,i)=trueReturn trueN输出都市不存在结束9LocateVex(G,name,i)算法流程图开始imaxvexnumYG.Flagi=1&strcmp(G.A

7、djlisti.cityName,name)=0i+YReturn falseReturn true结束10print_Money(GT,p)算法流程图开始i=0ip.len打印边p的信息Sum+=p.money i+Y结束输钱sumN11LeastMoneyPath(GT,st,nd,p)算法流程图结束初始化i=0inextEdgep-elem.Moneyelem.jvex重置每个顶点的至少钱的途径dijkstp-elem.jvex=p-elem.Money t=p-elemSetPath(pathp-elem.jvex,st,p-elem.jvex,t)Yp=qYNFound = fals

8、e求从st 到nd 的最短途径算法并复制此途径copyPath(pathw,pathv)开始11ShortestTimePath(GT,st,nd,p)算法流程图开始每个点初始一种最大值初始每条途径置时间0置起点的时间为n置p为起点的第一条边检测依附每个顶点的边根据迪杰斯特求每个起点到终点的时间至少的途径结束12Manage_Menu(GT,GP)算法流程图开始Switch(choice)Case 1:Case 0:Case 3:Case 2:Plane_Edit(GT,GP)breakTrain_Edit(GT,GP)City_Edit(GT,GP)13City_Edit(GT,GP)算法流

9、程图开始输入n进行选择Nn=1NYn =2添加都市及有关信息Y删除都市及有关信息结束输出错误输入n进行选择结束Nn =0Y结束14. Train_Edit(GT,GP)算法流程图开始NWhile(true)YBreak 输入n进行选择结束Yn=1NYn=2输入列车的信息breakN删除列车的信息重新输入n进行选择Nn=0breakYbreak注释:部分算法的设计思想相似,只是参数不同,故省略部分程序流程图。四、源程序#define MAXVTXNUM 30 /图中顶点数的最大值/*顶点、边和图类型*/typedef struct /定义各车次及航班的信息弧的信息int ivex; /起始点号i

10、nt jvex; /终点号char Number10; / 车次号int Money; /费用int StartTime; /起始时间(秒)int EndTime; /终结时间(秒)int Time; /半途时间(秒)EdgeInfo; /边的信息typedef struct EdgeNode /边的信息 弧结点 EdgeInfo elem; EdgeNode *nextEdge;EdgeNode, *EdgePtr;/边的结点类型,指向边的指针typedef struct /都市信息 头结点char cityName10;int cityNumber;EdgePtr firstEdge; /

11、指向的一条依附该顶点的边的指针Vnode; /顶点类型typedef struct /图的构造Vnode AdjlistMAXVTXNUM;/邻接表int vexNum, edgeNum; /图中的顶点数和边数int FlagMAXVTXNUM; /标志与否是图中的顶点,0表达不是,1表达是 Graph; /图类型/*图的基本操作*/* 途径类型 */typedef structint vx,vy; /vx为途径的起点,vy为途径的终点EdgeInfo p; /途径中边的信息Edge;typedef struct Edge edgesMAXVTXNUM; /途径中边的序列 : edgesi表达

12、从起点到i的最短途径int len; /途径中边的数目Path;/*/void copyPath (Path &p1,Path &p2)/复制途径p1=p2int i;for(i=0;ip2.len;i+)p1.edgesi.vx=p2.edgesi.vx;p1.edgesi.vy=p2.edgesi.vy;p1.edgesi.p =p2.edgesi.p;p1.len=p2.len;void SetPath(Path &pa, int v, int w, EdgeInfo t)/设立pa从v到w的第一条边,边的信息为tpa.edges0.vx=v;pa.edges0.vy=w;pa.edge

13、s0.p=t;pa.len=1;#include int TimeChange(int hour,int minute) /把输入的小时和分钟树转换成分钟的形式,忽视天数if(minute60)hour=hour+minute/60;minute=minute%60;if(hour24)hour=hour%24;#include #include #include #include Graph.h#include Time.h#include Path.h#define NULL 0bool OpenGraph_T(Graph &G);bool OpenGraph_P(Graph &G);in

14、t Main_Menu(Graph >,Graph &GP);bool SaveGraph_T(Graph G); bool SaveGraph_P(Graph G);void main()Graph GT; /火车交通图Graph GP; /飞机交通图 CreateGraph(GT); /建立空的火车交通图CreateGraph(GP); /建立空的飞机交通图OpenGraph_T(GT); /打开已经存在火车的数据OpenGraph_P(GP); /打开已经存在飞机的数据Main_Menu(GT,GP); SaveGraph_T(GT); /保存火车数据SaveGraph_P(GP);

15、 /保存飞机数据DestoryGraph(GT);DestoryGraph(GP);/*/void LeastMoneyPath(Graph G, int st, int nd, Path &pathA) /st:起点号,nd:终点号,成果存储在pathA中 /path涉及途径的长度,起点,终点和途径信息/运用迪杰斯特拉算法的基本思想求图G中从顶点st到nd的一条/最短途径PathInfo,途径长度pathLength/设int dijkstMAXVTXNUM;Path pathMAXVTXNUM;int i;int dijkstMAXVTXNUM;bool finalMAXVTXNUM=fa

16、lse; Path pathMAXVTXNUM; /每个顶点均有途径 EdgeNode *p,*q; /边的信息 弧结点 EdgeInfo t; /边的信息bool found;int min=9999,min_i,v,w;for(i=0;inextEdge;if(p-elem.Moneyelem.jvex)dijkstp-elem.jvex=p-elem.Money;t=p-elem;SetPath(pathp-elem.jvex,st,p-elem.jvex,t);p=q;found= false;while(!found)/在所有未求得最短途径的顶点求使得dijksti取最小的ifor(

17、i=0;iMAXVTXNUM;i+)if(finali=false & dijkstinextEdge;w=p-elem.jvex;if(finalw=false &(dijkstv+p-elem.Money)elem.Money;copyPath(pathw,pathv);InsertPath(pathw,v,w,p-elem);p=q; /while(p) /else/ while(!found)copyPath(pathA,pathnd);void ShortestTimePath(Graph G, int st, int nd, int n ,Path &pathA)/st:起点号,n

18、d:终点号,n:目前时间(秒),成果存储在pathA中/运用迪杰斯特拉算法的基本思想求图G中从顶点st到nd的一条/最短途径PathInfo,途径长度pathLength/设int dijkstMAXVTXNUM;Path pathMAXVTXNUM;int i;int dijkstMAXVTXNUM;bool finalMAXVTXNUM=false; int nowMAXVTXNUM;Path pathMAXVTXNUM;EdgeNode *p,*q;EdgeInfo t;bool found;int min=99999,min_i,v,w,time;for(i=0;inextEdge;i

19、f(p-elem.StartTimeelem.EndTime=nowst)time= 1440-TimeSub(p-elem.EndTime,nowst);elsetime= TimeSub(p-elem.EndTime,nowst);if(timeelem.jvex)dijkstp-elem.jvex=time;t=p-elem;SetPath(pathp-elem.jvex,st,p-elem.jvex,t);nowp-elem.jvex=p-elem.EndTime;p=q;found= false;while(!found)/在所有未求得最短途径的顶点求使得dijksti取最小的ifo

20、r(i=0;iMAXVTXNUM;i+)if(finali=false & dijkstinextEdge;w=p-elem.jvex;if(finalw=false &(dijkstv+TimeSub(p-elem.EndTime,nowv)elem.EndTime,nowv);copyPath(pathw,pathv);InsertPath(pathw,v,w,p-elem);p=q; /while(p) /else/ while(!found)copyPath(pathA,pathnd);void Inquire_Money(Graph GT,Graph GP)Path p;int n=

21、5;int st,nd;while(1)cout tt 1.查询飞机;cout t 2.查询火车;cout t 0.退出n;cout n;fflush(stdin);cout n;if(n=1)input_Money(GP,st, nd);LeastMoneyPath (GP,st,nd,p); /至少钱数print_Money(GP,p);break;else if(n=2)input_Money(GT,st, nd);LeastMoneyPath (GT,st,nd,p); /至少钱数print_Money(GT,p);break;else if (n=0)break;elsecout 输

22、入有误,请重新输入!nn;/征询系统菜单void Inquire_Menu(Graph GT,Graph GP)while(1)int choice=5;coutt*n;coutt*征询系统菜单 *n;cout t* 1.最省钱征询 *n;cout t* 2.最快达到征询 *n;cout t* 0.退出系统 *n;cout t*n;cout choice;fflush(stdin);if(choice=0) break;switch(choice)case 1: Inquire_Money(GT,GP);break;case 2: Inquire_Time(GT,GP);break;defau

23、lt:cout 输入错误选项,请重试。nn;/都市编辑void City_Edit(Graph >,Graph &GP)int n,i;char name10;while(1)cout n;cout t 1.添加都市 ;cout t 2.删除都市 ;cout t 0.退出 ;cout n;fflush(stdin);if(n=1)cout name;fflush(stdin);InsertVex(GT,name);InsertVex(GP,name);cout n添加成功!n;break;else if(n=2)cout n请输入删除都市的名称:;if(input_Vex(GT,i)=tr

24、ue)DeleteVex(GT,i);DeleteVex(GP,i);cout 删除成功!n;break;else if(n=0)cout n;break;elsecout 输入有误,请重新输入!;/列车时刻表编辑 void Train_Edit(Graph >,Graph GP)int n,st,sn;int hour,minute;char number10;EdgeInfo q;while(1)cout n;cout t 1.添加列车 ;cout t 2.删除列车 ;cout t 0.退出 ;cout n;fflush(stdin);if(n=1)while(1)cout n请输入起

25、始都市的名称:;if(input_Vex(GT,st)=true)break;while(1)cout n请输入终点都市的名称:;if(input_Vex(GT,sn)=true)break;cout number ;fflush(stdin);q.ivex=st;q.jvex=sn;strcpy(q.Number,number);cout q.Money;fflush(stdin);cout n请输入起始时间:;cout hour;fflush(stdin);cout minute;fflush(stdin);q.StartTime=TimeChange(hour,minute);cout

26、n请输入到站时间:;cout hour;fflush(stdin);cout minute;fflush(stdin);q.EndTime=TimeChange(hour,minute);q.Time=TimeSub(q.EndTime,q.StartTime);cout n行车时间: q.Time/60 小时 q.Time%60 分钟;InsertEdge(GT,q);cout n添加成功! n;break;else if(n=2)while(1)cout n请输入起始都市的名称:;if(input_Vex(GT,st)=true)break;while(1)cout n请输入终点都市的名称

27、:;if(input_Vex(GT,sn)=true)break;cout n请输入车次:;if(input_Number(GT,st,sn,number)q.ivex=st;q.jvex=sn;strcpy(q.Number,number);DeleteEdge(GT,q);cout 删除成功!n;break;else if(n=0)cout (n);break;elsecout 输入有误,请重新输入!;void Manage_Menu(Graph >,Graph &GP)while(1)int choice=5;cout t* n;cout t* 管理系统菜单 *n;cout t* 1

28、.都市编辑 *n;cout t* 2.列车时刻表编辑 *n;cout t* 3.航班时刻表编辑 *n;cout t* 0.退出系统 *n;cout t* n;cout choice;fflush(stdin);if(choice=0) break;switch(choice)case 1: City_Edit(GT,GP);break;case 2: Train_Edit(GT,GP);break;case 3: Plane_Edit(GT,GP);break;default:cout 输入错误选项,请重试。nn;int Main_Menu(Graph >,Graph &GP)while(

29、1)int choicem=3;cout (n);cout t* n;coutt*全国交通征询系统主菜单 *n; cout t* 1.征询系统 *n;cout t* 2.管理系统 *n;cout t* 0.退出系统 *n;cout t* n;cout choicem;cout n;fflush(stdin);/清除输入流switch(choicem)case 1: Inquire_Menu(GT,GP);break;case 2: Manage_Menu(GT,GP);break;case 0: return choicem;default:cout nextEdge;if(p-elem.Mo

30、neyelem.jvex)distp-elem.jvex=p-elem.Money; t=p-elem; SetPath(pathp-elem.jvex,st,p-elem.jvex,t);p=q;3.有关最快达到及时间的解决:对于最快达到问题,理解到所谓最快达到一定是相对一种拟出发时间而言的,只有有了拟出发时间才可以求算。否则(如果是求取路上最短时间)要进行穷举将所有路线的总时间进行比较,求取最小的才可以。求取最快达到时,应当让顾客输入拟出发时间,程序所做的是相对这个时间得到最快由A到B的途径。同样对于一种中间站,我们可以觉得上一趟车的达到时间就是此时顾客的拟出发时间,在由此去谋求最快达到的,这样又可以用迪杰斯特拉算法,只是需要权值的计算不再是单纯的一种量的比较,而是下一站到站时间跟此时的拟出发时间之差,其他算法与计算最省钱途径没有区别。六、程序设计体会通过本次课程设计大大加深了我对数据构造这门课程的理解,并且特别对图这章的理解,可以说有一种大的进步。学习能力也大大提高。固然通过本次课设也为我后来的道路奠定了一定的基本,结识到了基本的重要。固然本次课设中遇到的困难是再所难免的,由于我面对的课设是图的内容,是一种相对较难的内容,并且最短途径的算法也发了不少时间才有所深刻理解。但功夫不负有心人,只要肯努力,任何困难相信我们都可以克服与攻坚。

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