交通咨询系统C语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CHINA
交通咨询系统
目录
一、需求分析 (2)
1、程序的功能及设计要求 (2)
2、输入输出的要求 (2)
二、环境说明 (2)
三、详细设计 (3)
1、模块设计 (3)
2、画出各函数的调用关系图、主要函数的流程图。 3
2、详细代码 (4)
四、调试分析 (4)
1、测试数据: (4)
2、借鉴的资料 (5)
五、课程总结 (6)
六、附录 (6)
需求分析
1、程序的功能及设计要求
在交通网络非常发达、交通工具和交通方式不断更新的今天,
人们在出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也感兴趣。对于这样一个人们关心的问题,通过建立交通网络图的存储结构图,提供用户查询的功能,功能一:通过输入城市名及任意两个城市的距离,查询任意两个城市之间的最短
距离,从而达到最省目的;功能二:通过输入城市名以及任意两个程序的距离,查询中转路线最少。程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询,可以通过输入设置,延续程序的拓展性。
设计要求及分析
设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的中转次数最
少问题或最低花费或最少时间(最短路径)问题。
该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后
再实现任意两个城市顶点之间的最短路径问题。
1.建立交通网络图的存储结构
要实现设计要求,首先要定义交通图的存储结构:邻接链表和邻接矩阵;
2•解决任意两个城市顶点之间的中转次数最少的问题;
3•解决任意两个城市顶点之间的最短路径(最低花费或最少时间)问题。
2、输入输出的要求
定义变量类型应该保持类型一致,通过键盘输入,确保输入输出一致,使最短路径途径以及最短路径能够简单明了的输出,同时保持程序简洁美观,效果明显。输入要求为输入界面直观、亲切;有利于快速输入;有利于准确输入;有利于输入、修改;方便操作。输出要求:输出要求应简单、直观,一目了然,尽量符合用户的习惯,便于用户阅读、理解与使用。输出内容应尽量汉字化,从而使输出格式醒目;各种输出设计要长考虑以利于系统发展和输出项目扩充、变动的需要;输出操作方便
二、环境说明
系统:WIND0S7
开发软件:vc6+
三、详细设计
1、模块设计
交通咨询系统模块图如下
由模块图可知,该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短
路径问题;最后再实现任意两个城市顶点之间的最短路径问题。
开始运行程序,输入命令,进入各种不同的功能区,进行各自的功能,分别运行,然后输出结果。结束后,如果退出就结束,不退出重复上面的功能
2、画出各函数的调用关系图、主要函数的流程图。
通过Mian主函数
调用函数void creatDN(lode &g)
调用函数void ShortestPath_DIJ(lode &g,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,char a[],char b[])函数调用函数Ini tQueue(L in kQueue &Q)
调用函数En Queue(L in kQueue & Q,i nt e) 调用函数DeQueue(L in kQueue & Q,i nt e) 调用函数int localvex(lode & g,char *m)
2、详细代码
见附录六
四、调试分析
1、测试数据:
准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。
构建网络图:
L ■耳'DA/C 6WC6 iMyP reject5-MS 5\De buc\4£ 5, exr .
查询中转次数少:
查询最短距离并退出:
2、借鉴的资料
[1]《数据结构C语言版》严蔚敏、吴伟民,清华大学出版社,2002
五、课程总结
这次任务分配,从难度上来说,我这个交通咨询系统程序并不复杂,在书本上基本能找到一
摸一样的程序,但关键是理解,虽然书上的程序能看懂,但实践设计不比理解,要是练得少,往往捉襟见肘,要学会融会贯通,那就难上加难了。所以这次就不断演练,不断打击信心,我想还是练少了,酱油打多了,尽管这学期课听的还是很多,但效果还是不好。
总的来说,这次变成还是学到了一些东西,尽管微乎其微,算法毕竟是死的,人的大脑是活的,只有不断的实验,才能找到信心,也才能学到东西,但还是可以学到很多东西,怎样的思考方法,怎样连接使逻辑结构语句更完善,所以在编程中和调试过程中要成认真分析和善
于发现问题并及时解决的习惯,不懂的及时问老师或者其他同学。通过本次实验,就要掌握
了最短路径问题,并结合图的储存结构、狄克斯特拉算法、广度优先遍历等解决了交通咨询系统的设计。源程序打出来后有多处错误,大小写错误、符号错误、遗漏等等,经反复检查调试后实验成功。
六、附录
源程序清单(带注释)
#i nclude"stdio.h"
#i nclude"stri ng.h"
#i nclude"stdlib.h"
#defi ne INFINITY 65315
in t visited[20];
//邻接链表
typedef struct arcno de{ int adjvex; //城市编号struct arcnode *n extarc;
}arc no de;
typedef struct vnode { char ctn ame[20]; arcnode *firstarc;
}adjlist[20]; // 城市个数
//邻接邻接表
typedef struct no de{
int adjvex; int route; struct node *n ext;} no de;
typedef struct arccell{
int adj; //两城市之间的距离
}adjmatrix[20][20];
typedef struct{
adjmatrix arcs;
adjlist vexs;
int v,a;〃顶点边数
}lode;
//定义城市在位置
typedef struct QNode{
int data;