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