全国交通咨询模拟系统_第1页
全国交通咨询模拟系统_第2页
全国交通咨询模拟系统_第3页
全国交通咨询模拟系统_第4页
全国交通咨询模拟系统_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、标准实用数据结构课程设计报告书全国交通咨询模拟系统文案大全标准实用目录一、 需求分析3二、个人工作4三、概要设计41 .主程序流程图:42 .创立图算法流程图: 5四、源程序13五、程序结果245.3设计和调试分析 27六、程序设计体会28文案大全标准实用全国交通咨询模拟系统一、需求分析旅客对由于出行目的的不同对交通工具的要求也有不同.例如,因公事出差 的旅客希望在旅途中的时间尽可能短, 出门旅游的游客那么希望旅费尽可能省, 而 老年旅客那么要求中转次数最少.为了能满足广阔旅客的需求,方便旅客出行,就 此编制一个全国城市间的交通咨询程序,为旅客提供两种或者三种最优决策的交 通咨询,到达如下的根

2、本要求:(1)提供对城市信息进行编辑(如:添加和删除)的功能 .(2)城市之间有两种交通工具:火车和飞机.提供对列车时刻表和飞机航班表进行编辑(增加或删除)的功能.(3)提供两种最优决策:最快到达和最省钱到达.全程只考虑一种交通工 具.(4)旅途中消耗的总时间应该包括中转站的等候时间.(5)咨询以用户和计算机的对话方式进行.由用户输入起始站、终点站、 最优决策原那么和交通工具,输出信息:最快需要多长时间才能到达或 者最少需要多少旅费才能到达,并详细说明依次于何时乘哪趟列车或 哪一次班机到何地.(6)通过比照以及用户操作根本到达旅客出行的便利.文案大全标准实用二、个人工作此次课程设计是对全国城市

3、交通图列车时刻表及飞机航班表的编辑.此次课设是利用VC工具在dos环境下实现全国交通的咨询与治理.通过此次程序可以 对全国城市之间火车与飞机进行两方面的咨询,即最少的时间与最少的费用的咨询,从而方便旅客的出行.通过此次课程设计,我要学会怎样用在VC dos环境下编程,而且要通过此次课程设计加深对数据结构的理解, 在设计中用邻接表作 交通图的存储结构,表示边的结点中除含有邻接点的信息外,还包括交通工具、 路程中消耗的时间和花费以及出发和到达的时间等属性.图中顶点城市的信息, 包括城市名称、城市编号和依附该顶点的边的指针.在程序中,利用迪杰斯特拉算法求花钱最少和花时间最少的交通方式.三、概要设计1

4、.主程序流程图:文案大全标准实用2.创立图算法流程图:3.翻开图算法流程图:标准实用结束4主菜单操作算法流程图:5咨询菜单流程图6咨询钱最少模块图Inquire_Money(GT,GP)Y输入n文案大全标准实用7. input_Money(Graph G, int &st,int &sn)算法流程图文案大全标准实用8. inputVex(G,st算法流程图9. LocateVex(G,name解法流程图文案大全标准实用10. print_Money(GT,p)算法流程图开始i=011. LeastMoneyPath(GT,st,nd,p算法流程图文案大全标准实用11. Shor

5、testTimePath(GT,st,nd,p算法流程图文案大全标准实用12. Manage_Menu(GT,GP)算法流程图13. City_Edit(GT,GP)算法流程图n=1文案大全标准实用14. Train_Edit(GT,GP)算法流程图注释:局部算法的设计思想相同,只是参数不同,故省略局部程序流程图.文案大全标准实用四、源程序#define MAXVTXNUM 30图中顶点数的最大值/*顶点、边和图类型*/typedef struct/定义各车次及航班的信息弧的信息int ivex;int jvex;char Number10;int Money;int StartTime;in

6、t EndTime;int Time;EdgeInfo;typedef struct EdgeNode起始点号终点号/车次号/费用起始时间秒终止时间秒中途时间秒边的信息边的信息 弧结点EdgeInfo elem;EdgeNode *nextEdge;EdgeNode, *EdgePtr;边的结点类型,指向边的指针typedef struct城市信息头结点(char cityName10;int cityNumber;EdgePtr firstEdge;指向的一条依附该顶点的边的指针Vnode;顶点类型typedef struct/ 图的结构(Vnode AdjlistMAXVTXNUM;/ 邻

7、接表int vexNum, edgeNum;/图中的顶点数和边数int FlagMAXVTXNUM; /Graph;/*标志是否是图中的顶点,0表本不是,1表不是/图类型/* typedef struct (int vx,vy;图的根本操作 */ 路径类型 */vx为路径的起点,vy为路径的终点EdgeInfo p; /路径中边的信息 Edge;typedef struct文案大全标准实用(Edge edgesMAXVTXNUM;/路径中边白序列 :edgesi表示从起点到i的最短路径int len;/路径中边的数目 Path;/*<路径根本操作 >*/ void copyPath

8、 (Path &p1,Path &p2)(复制路径p1=p2int i;for(i=0;i<p2.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至ij w的第一条边,边的信息为t pa.edges0.vx=v;pa.edges0.vy=w;pa.edges0.p=t;pa.len=1;#include &

9、lt;iostream.h> int TimeChange(int hour,int minute)把输入的小时和分钟树转换成分钟的形式,忽略天数if(minute>60)hour=hour+minute/60;minute=minute%60;if(hour>24)hour=hour%24;#include <stdio.h>#include <stdlib.h>#include <string.h>#include "Graph.h"#include "Time.h"#include "

10、Path.h"#define NULL 0文案大全标准实用bool OpenGraph_T(Graph &G);bool OpenGraph_P(Graph &G);int Main_Menu(Graph &GT,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)

11、;翻开已经存在火车的数据OpenGraph_P(GP); 翻开已经存在飞机的数据 Main_Menu(GT,GP);SaveGraph_T(GT);保存火车数据SaveGraph_P(GP);保存飞机数据DestoryGraph(GT);DestoryGraph(GP);/*< 迪杰斯特拉算法求取最少钱数和最短时间>*/void LeastMoneyPath(Graph G , int st, int nd, Path &pathA) /st:起点号,nd:终点号,结果存储在pathA中/path包括路径的长度,起点,终点和路径信息 利用迪杰斯特拉算法的根本思想求图G中从顶

12、点st到nd的一条最短路径 PathInfo,路径长度 pathLength设 int dijkstMAXVTXNUM;Path pathMAXVTXNUM;int i;int dijkstMAXVTXNUM;bool finalMAXVTXNUM尸false;Path pathMAXVTXNUM;每个顶点都有路径EdgeNode *p,*q;边的信息弧结点EdgeInfo t;边的信息bool found; int min=9999,min_i,v,w;for(i=0;i<MAXVTXNUM;i+)初始化 dijksti=9999; InitPath(pathi);pathi.len=

13、0; p=G.Adjlistst.firstEdge; while(p)初始化dijkst数组,检测依附于起始点的每条边文案大全标准实用q=p->nextEdge;if(p->elem.Money<dijkstp->elem.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(i=0

14、;i<MAXVTXNUM;i+) (if(finali=false && dijksti<min) min_i=i;finalmin_i=true;if(min_i=nd)found=true;else(v=min_i;p=G.Adjlistv.firstEdge;while(p) (q=p->nextEdge;w=p->elem.jvex;if(finalw=false &&(dijkstv+p->elem.Money)<dijkstw) (dijkstw=dijkstv+p->elem.Money;copyPath(

15、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:起点号,nd:终点号,n:当前时间(秒),结果存储在pathA中文案大全标准实用利用迪杰斯特拉算法的根本思想求图G中从顶点st到nd的一条最短路径 PathInfo,路径长度 pathLength设 int dijkstMAXVTXNU

16、M;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;i<MAXVTXNUM;i+)初始化 dijksti=99999; InitPath(pathi); nowi=0; nowst=n; p=G.Adjlistst.firstEdge; while(p)初始化dijkst数组

17、,检测依附于起始点的每条边 q=p->nextEdge; if(p->elem.StartTime<nowst&&p->elem.EndTime>=nowst) time= 1440-TimeSub(p->elem.EndTime,nowst); else time= TimeSub(p->elem.EndTime,nowst); if(time<dijkstp->elem.jvex) dijkstp->elem.jvex=time; t=p->elem; SetPath(pathp->elem.jvex,

18、st,p->elem.jvex,t); nowp->elem.jvex=p->elem.EndTime; p=q; found= false; while(!found) 在所有未求得最短路径的顶点求使得dijksti取最小的ifor(i=0;i<MAXVTXNUM;i+) 文案大全标准实用(if(finali=false && dijksti<min) min_i=i;)finalmin_i=true;if(min_i=nd)found=true;else(v=min_i;p=G.Adjlistv.firstEdge;while(p)(q=p-&

19、gt;nextEdge;w=p->elem.jvex;if(finalw=false&&(dijkstv+TimeSub(p->elem.EndTime,nowv)<dijkstw) (dijkstw=dijkstv+TimeSub(p->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

20、,Graph GP)(Path p;int n=5;int st,nd;while(1)(cout << "tt 1.查询飞机"cout << "t 2.查询火车"cout << "t 0.退出 n"cout << "t 请选择:"cin >> n;fflush(stdin);cout << "n"if(n=1)(文案大全标准实用input_Money(GP,st, nd);LeastMoneyPath (GP,st,nd,

21、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 << "输入有误,请重新输入!最少钱数最少钱数nn"咨询系统菜单void Inquire_Menu(Graph GT,Graph GP)while(1)int choice=5;cout<<"t*"<<"n"cout&l

22、t;<"t* 咨询系统菜单*"<<"n""<<"n""<<"n"cout << "t*1.最省钱咨询cout << "t*2.最快到达咨询*"<<"n"cout << "t* 0.退出系统 :cout<< t*"<<"n"cout << "请选择:"cin >

23、;> choice;fflush(stdin);if(choice=0) break;switch(choice)case 1: Inquire_Money(GT,GP);break;case 2: Inquire_Time(GT,GP);break;default:nn"cout << "输入错误选项,请重试.文案大全标准实用)/城市编辑void City_Edit(Graph &GT,Graph &GP)(int n,i;char name10;while(1)(cout << "n"cout <&

24、lt; "t 1.添加城市 "cout << "t2.删除城市"cout << "t0.退出"cout << "tttt 请选择:"cin >> n;fflush(stdin);if(n=1)(cout << "n请输入添加城市的名称:cin >> name;fflush(stdin);InsertVex(GT,name);InsertVex(GP,name);cout << "n 添加成功!"<

25、<"n"break;)else if(n=2)(cout << "n请输入删除城市的名称: if(input_Vex(GT,i)=true)(DeleteVex(GT,i);DeleteVex(GP,i);cout << "删除成功! n")break;)else if(n=0)(cout << "n"break;)elsecout << "输入有误,请重新输入!)文案大全标准实用)列车时刻表编辑void Train_Ed让(Graph &GT,Grap

26、h 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 << "ttt 请选择:"cin>>n;fflush(stdin);if(n=1)(while(1)(cout << "n请输入起始城

27、市的名称:if(input_Vex(GT,st)=true)break;)while(1)(cout << "n请输入终点城市的名称:if(input_Vex(GT,sn)=true)break;)cout << "n请输入车次:"cin >> number ;fflush(stdin);q.ivex=st;q.jvex=sn;strcpy(q.Number,number);cout << "n请输入票价:"cin >> q.Money;fflush(stdin);cout <&

28、lt; "n请输入起始时间:"cout << "n 几点:"cin >> hour;fflush(stdin);文案大全标准实用cout << "几分:" cin >> minute; fflush(stdin);q.StartTime=TimeChange(hour,minute); cout << "n请输入到站时间:" cout << "n 几点:" cin >> hour;fflush(stdin); c

29、out << "几分:" cin >> 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 添加成功! &q

30、uot;<< "n" break;else if(n=2)while(1) cout << "n请输入起始城市的名称: if(input_Vex(GT,st)=true) break;while(1) cout << "n请输入终点城市的名称: 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,numbe

31、r);DeleteEdge(GT,q);cout << "删除成功!n"break;else if(n=0)文案大全标准实用cout << ("n"); break;)elsecout << "输入有误,请重新输入!")void Manage_Menu(Graph &GT,Graph &GP) while(1) int choice=5;cout << %*<< "n"cout << "t*cout <<

32、"t*cout << "t*cout << "t*cout << "t*治理系统菜单1 .城市编辑2 .列车时刻表编辑3 .航班时刻表编辑0.退出系统*"<<"n""<<"n""<<"n""<<"n""<<"n"cout<< "t*"<< "n"co

33、ut << " cin >> 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 &GT,Graph &GP)while(1)int choicem=3;cout

34、<< ("n");cout << %*"<< "n"*"<<"n"cout<<"t*全国交通咨询系统主菜单文案大全标准实用cout << "t* 1.咨询系统*"<<"n"cout << "t* 2.治理系统*"<<"n"cout << "t* 0.退出系统*"<<"

35、n"cout<< "t*<< "n"cout << "ttt请选择:"cin >> 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 << "输入有误,请重试.nn&qu

36、ot;五、程序结果5.1 操作流程DeBug1 .本程序的运行环境为DOS操作系统,执行文件为源程序目录下的 子 目录下的: Traffic.exe;双击了 Traffic.exe后显示了文本方式的用户界面如下:MM MNM M MKX M HMM HM MWM M MkKM M MkKK MiKi htMM MMf KKK MMXK »»»«M M*咨询承统菜单D , * w.最快到达暂询-* 日.退任系统*请选择:在选择1进入咨询系统菜单后选才i 1:文案大全标准实用请选择二11.查询飞机2 .查询火车心退出谙诜怪,在选择1进入咨询系统菜单后选才i

37、1:始发:M北京&时1吩票价:元到达;3 上海ZM时25分思我费用.24SMKKPtPt XX * * M M * * * XPt M M X X Pt XM X * * X XXIMiMH咨询系统菜单一H2.0. M M M M MM请选择:二-H-H-到达密的 系统在选择1进入咨询系统菜单后选才i 2:询远律:w土-查询飞机2 .查询火车请选择.2口入仙蛤城狡钳第饕时期小点4|八分二10晨快到达路线;Nn :1 杂&始发;_ 到达;第价:245元由士北京总时1H分供隔事小时共分*e咨询系统菜单.晟省烤咨询 iH髀工同 X X,* * 区 X X *»=0,注1 *

38、 问 X * WWM X *.母母母 * 阳 X X *国 * *冈 X * *18|出口 * 问 X X 乜*例>>! N * 乂 X_请选择:选才i 2进入治理系统后进行选择1进行城市编辑膏编编 单表表 菜555统 统编出 理城列鬻 管1.2.3.0.请选择二11.添加城市2 .删除城市班退出请选择:进入城市编辑后选择1进行添加城市请选择:1请输入添加城市的名称长沙索加成功!文案大全标准实用进入城市编辑 选才i 2去除城市请选择:2请输入删除城市的名称长沙删除成功!进入治理菜单选择2进行列车时刻编辑请选降二2.添加列车2.删除列车0.退出请选择:2请输入起始城市的名称.长沙请输

39、入终点城市的名称:南昌请输入车次工T14?该曲里不存在I进入列车时刻表编辑添加列车产输入起始城市的名称工长沙 ,输入终点城市的名称,南昌 南输入车次;1147,输入票价s 631输入起始时间1几点:5几分;55,制人到站时同几点:12几分:45行车时间:6小时5®分钟 添加成功I 选才i 3进入航班编辑后选择 1进行添加航班请输入起始城市的名称:长沙请输入终点城市的名称;南昌输入航班号t K456请输入起始时间,213分由中小时4 01 2=S点分几几曹介盟车加选才i 3进入航班编辑后选择 2进行删除航班文案大全标准实用请选择二3J添加航班2.删除航班回退出请选择;2请输入起始城市的名称工长沙请输入终点城市的名称,南昌请输入航班号:K4S6删嗓成功IJ5.2 数据测试测试1:长沙一上海乘坐火车信息:最省钱:总共费用243元T147长沙一南昌63元K445南昌一上海 180元最快到达:拟出发时间早上8: 00共需48小时30分钟T147 长沙一南昌 5:50-12:30K445 南昌一上海 16:20 8:40由于包等待时间,所以是48时30分最快到达:拟出发时间中5: 30共需27小时10分钟T147 长沙一南昌 5:50-12:30K445 南昌一上海 16:20 8:40

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论