交通咨询系统C语言

上传人:Sc****h 文档编号:147582131 上传时间:2022-09-02 格式:DOC 页数:22 大小:319.50KB
收藏 版权申诉 举报 下载
交通咨询系统C语言_第1页
第1页 / 共22页
交通咨询系统C语言_第2页
第2页 / 共22页
交通咨询系统C语言_第3页
第3页 / 共22页
资源描述:

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

1、CHINA交通咨询系统.目录一、需求分析 .21、程序的功能及设计要求.22、输入输出的要求 .2二、环境说明 .3三、详细设计 .31、模块设计 .32、画出各函数的调用关系图、主要函数的流程图 。 .42、详细代码 .5四、调试分析 .51、测试数据 : .52、借鉴的资料 .7五、课程总结 .7六、附录.8.专业专注.一、需求分析1、程序的功能及设计要求在交通网络非常发达、交通工具和交通方式不断更新的今天,人们在出差 、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也感兴趣 。对于这样一个人们关心的问题,通过建立交通网络图的存储结构图,提供用户查询的功能,功能一 :

2、通过输入城市名及任意两个城市的距离,查询任意两个城市之间的最短距离 ,从而达到最省目的;功能二 :通过输入城市名以及任意两个程序的距离,查询中转路线最少。 程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询,可以通过输入设置,延续程序的拓展性。设计要求及分析设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的中转次数最少问题或最低花费或最少时间(最短路径 )问题。该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现任意两个城市顶点之间的最短路径问题。1.建立交通网络图的存储结构要实现设计要求 ,首先要定义交通图的存储结构:邻接链表和邻

3、接矩阵;2.解决任意两个城市顶点之间的中转次数最少的问题;3. 解决任意两个城市顶点之间的最短路径(最低花费或最少时间 )问题。2、输入输出的要求定义变量类型应该保持类型一致,通过键盘输入,确保输入输出一致,使最短路径途.专业专注.径以及最短路径能够简单明了的输出,同时保持程序简洁美观 ,效果明显 。输入要求为输入界面直观 、亲切 ;有利于快速输入 ;有利于准确输入 ;有利于输入 、修改;方便操作 。 输出要求 :输出要求应简单、直观,一目了然 ,尽量符合用户的习惯,便于用户阅读 、理解与使用 。 输出内容应尽量汉字化,从而使输出格式醒目;各种输出设计要长考虑以利于系统发展和输出项目扩充、变动

4、的需要 ;输出操作方便二、环境说明系统 : WINDOS7开发软件 : vc6+三、详细设计1、模块设计交通咨询系统模块图如下.专业专注.由模块图可知,该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短路径问题 ;最后再实现任意两个城市顶点之间的最短路径问题。开始运行程序,输入命令 ,进入各种不同的功能区,进行各自的功能,分别运行 ,然后输出结果 。 结束后 ,如果退出就结束,不退出重复上面的功能2、画出各函数的调用关系图、主要函数的流程图。通过 Mian 主函数调用函数void creatDN(lode &g)调用函数void ShortestPath_DIJ(lode &g

5、,char a,char b)调用函数void void TransferDispose(lode &G,char a,char b)主流程图如上图所示通过 void creatDN(lode &g)函数调用函数int localvex(lode &g,char *m).专业专注.通过 void ShortestPath_DIJ(lode &g,char a,char b)函数调用函数int localvex(lode &g,char *m)调用函数void Ppath(lode &g,int P,int i,int v)通过 void void TransferDispose(lode &G

6、,char a,char b)函数调用函数InitQueue(LinkQueue &Q)调用函数EnQueue(LinkQueue &Q,int e)调用函数DeQueue(LinkQueue &Q,int e)调用函数int localvex(lode &g,char *m)2、详细代码见附录六四、调试分析1、测试数据 :准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。构建网络图 :.专业专注.查询中转次数少:查询最短距离并退出:.专业专注.2、借鉴的资料1 数据结构 C 语言版 严蔚敏 、吴伟民 ,清华大学出版社 , 2002五、课程总结这次任务分配,从难

7、度上来说,我这个交通咨询系统程序并不复杂,在书本上基本能找到一摸一样的程序,但关键是理解,虽然书上的程序能看懂,但实践设计不比理解,要是练得少 ,往往捉襟见肘,要学会融会贯通,那就难上加难了。所以这次就不断演练,不断打击信心 ,我想还是练少了,酱油打多了 ,尽管这学期课听的还是很多,但效果还是不好。总的来说 ,这次变成还是学到了一些东西,尽管微乎其微,算法毕竟是死的,人的大脑是活的 ,只有不断的实验,才能找到信心,也才能学到东西,但还是可以学到很多东西,怎样的思考方法,怎样连接使逻辑结构语句更完善,所以在编程中和调试过程中要成认真分.专业专注.析和善于发现问题并及时解决的习惯,不懂的及时问老师

8、或者其他同学。通过本次实验,就要掌握了最短路径问题,并结合图的储存结构、狄克斯特拉算法、广度优先遍历等解决了交通咨询系统的设计。源程序打出来后有多处错误,大小写错误 、符号错误 、遗漏等等 ,经反复检查调试后实验成功。六、附录源程序清单 (带注释 )#includestdio.h#includestring.h#includestdlib.h#define INFINITY 65315int visited20;/ 邻接链表typedef struct arcnodeint adjvex; /城市编号struct arcnode *nextarc;arcnode;typedef struct

9、vnode char ctname20;arcnode *firstarc;adjlist20;/ 城市个数/ 邻接邻接表.专业专注.typedef struct nodeint adjvex; int route;struct node *next;node;typedef struct arccellint adj;/ 两城市之间的距离adjmatrix2020;typedef structadjmatrix arcs;adjlist vexs;int v,a;/ 顶点边数lode;/ 定义城市在位置typedef struct QNodeint data;struct QNode *ne

10、xt;QNode,*QueuePtr;typedef structQueuePtr front;QueuePtr rear;LinkQueue;int localvex(lode &g,char *m).专业专注.int i;for(i=0;ig.v;i+)/ printf(%sn,g.vexsi.ctname);if(strcmp(g.vexsi.ctname,m)=0)break;return i;/ 创建连接表void creatDN(lode &g)int i,j,k,w;char v120,v220;arcnode *p,*s;printf( 输入城市的个点和两城市之间连通的路径条数

11、:n);scanf(%d%d,&g.v,&g.a);for(i=0;ig.v;i+)printf( 输入第 %d 个城市的名称:n,i+1);scanf(%s,g.vexsi.ctname);g.vexsi.firstarc=0;getchar();for(i=0;ig.v;i+).专业专注.for( j=0;jg.v;j+)g.arcsij.adj=INFINITY;for(k=0;kadjvex=j;p-nextarc=g.vexsi.firstarc;g.vexsi.firstarc=p;s=(arcnode *)malloc(sizeof(arcnode);s-adjvex=i;s-n

12、extarc=g.vexsj.firstarc;g.vexsj.firstarc=s;/*for(i=0;ig.v;i+).专业专注.for( j=0;jg.v;j+)printf( %d,g.arcsij.adj);*/*void printfb(lode &g)arcnode *p;int i;printf(%4s%6s%12sn,编号 ,顶点 , 相邻边编号 );for(i=0;inextarc)printf(%4d,p-adjvex);printf(n);/*for(i=0;ig.v;i+)for( j=0;jg.v;j+)printf( %d,g.arcsij.adj);*/void

13、 Ppath(lode &g,int P,int i,int v)int k;while(k!=v)k=Pi;if(k!=v)printf(%s,g.vexsk.ctname);/* 输出顶点 k*/.专业专注.i=k;/ Ppath(P ,k,v);/* 找顶点 k 的前一个顶点*/* 找到了起点则返回*/return;/ 最短路径void ShortestPath_DIJ(lode &g,char a,char b)int v,w,i,min,v0,x;int final20;int D20;/ 最短路径长度int P20;/最短路径的顶点v0=localvex(g,a);x=localv

14、ex(g,b);for(v=0;vg.v;+v)finalv=0;Dv=g.arcsv0v.adj;if (g.arcsv0v.adjINFINITY)/* 路径初始化 */Pv=v0;elsePv=-1;.专业专注.Dv0=0; finalv0=1;Pv0=v0;/ 开始循环 ; for(i=1;ig.v;+i)min=INFINITY;v=-1; for(w=0;wg.v;+w) if(!finalw)if(Dwmin) v=w; min=Dw;/求出 V0 到 W 最短距离的finalv=1;for(w=0;wg.v;+w)if(!finalw&(min+g.arcsvw.adjDw)&

15、(g.arcsvw.adjINFINITY)Dw=min+g.arcsvw.adj;Pw=v;/*for(v=1;vg.v;v+)if(finalv)printf(%s到 %s 的最短路径为 ,a,g.vexsv.ctname);printf(%s,a);Ppath(P,v,v0);printf(%sn,g.vexsv.ctname);printf(%s到 %s 的最短路径长度为%dn,a,g.vexsv.ctname,Dv);.专业专注.elseprintf( 从%s 到 %s 不存在路径 n,a,g.vexsv.ctname);*/if(finalx)printf(%s到 %s 用最少的钱

16、通过的城市为:,a,b);printf(%s,a);Ppath(g,P ,x,v0);printf(%sn,b);printf(%s到 %s 的所需最少价钱为:%dn,a,b,Dx);elseprintf(%s不能到达 %s!n,a,b);/*void printf(lode *g)int i;arcnode *p;for(i=0;ivexnum;i+)printf(%d,g-AdjListi.data);p=g-AdjListi.firstarc;while(p!=0)printf( %d,p-adjvex);p=p-nextarc;printf(n);.专业专注.*/void InitQu

17、eue(LinkQueue &Q)Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode);Q.front=Q.rear;Q.front-next=NULL;LinkQueue EnQueue(LinkQueue &Q,int e)QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);p-data=e;p-next=NULL;Q.rear-next=p;Q.rear=p;return Q;int DeQueue(LinkQueue &Q,int e)QueuePtr p;if(Q.front!=Q.rear)p=Q.front

18、-next;e=p-data;Q.front-next=p-next;.专业专注.if(Q.rear=p)Q.rear=Q.front;free(p);return e;/ 最少旅行中转次数处理void TransferDispose(lode &G,char a,char b)int v0,v1,v,w,n=1;LinkQueue Q; arcnode *t;node *p,*q,*r,*s;p=(node*)malloc(G.v*sizeof(node);for(v=0;vadjvex=v0;q-next=NULL;pv0.next=q;EnQueue(Q,v0);.专业专注.while(

19、Q.front!=Q.rear)/队列不空v=DeQueue(Q,v);t=G.vexsv.firstarc;while(t!=NULL)w=t-adjvex;/w为与城市v 相连的第一个城市if(!visitedw)/城市 w 未访问visitedw=1;/将城市 w 设为已访问q=&pw;s=pv.next;while(s!=NULL)r=(node*)malloc(sizeof(node);r-adjvex=s-adjvex;q-next=r;q=r;s=s-next;r=(node*)malloc(sizeof(node);r-adjvex=w;r-next=NULL;q-next=r

20、;if(w=v1)/w等于 v1q=pw.next;r=q-next;printf(n旅行路线是 :n);while(r!=NULL)printf( 从 %s 到%sn,G.vexsq-adjvex.ctname,G.vexsr-adjvex.ctname);q=r;.专业专注.r=r-next;n+;printf( 最少中转次数是%d 次 nn,n-2);for(v=0;vnext; free(s);pv.next=NULL;free(p);return;EnQueue(Q,w);/将城市 w 入队t=t-nextarc;/w等于城市v 相连的下一个城市for(v=0;vnext;free(

21、s);pv.next=NULL;free(p);.专业专注.printf( 不存在 %s 到 %s 的路线 ,a,b);void main()int c=1,d=1;char a20,b20;lode g;creatDN(g);printf( 欢迎使用 ! n);while(d!=2)printf( 请输入你出发的城市:n);scanf(%s,a);printf( 请输入你到达的城市:n);scanf(%s,b);printf(-请选择你所需要的功能-:n);printf(1: 中转次数少的路线n);printf(2: 两城市之间所需的钱最少n);/printf(3:退出系统 !n);printf( 请选择 : n);getchar();scanf(%d,&c);switch(c)case 1:.专业专注.TransferDispose(g,a,b);printf(n);break;case 2:ShortestPath_DIJ(g,a,b);break;printf( 继续查询吗 ? n);printf( 继续请按1n);printf( 退出请按2n);scanf(%d,&d);if(d=2)printf( 谢谢使用 ! n);.专业专注.

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