收藏 分享(赏)

交通咨询系统设计报告.doc

上传人:精品资料 文档编号:10786847 上传时间:2020-01-09 格式:DOC 页数:25 大小:634KB
下载 相关 举报
交通咨询系统设计报告.doc_第1页
第1页 / 共25页
交通咨询系统设计报告.doc_第2页
第2页 / 共25页
交通咨询系统设计报告.doc_第3页
第3页 / 共25页
交通咨询系统设计报告.doc_第4页
第4页 / 共25页
交通咨询系统设计报告.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、重庆科技学院数据结构课程设计报告学 院:_电气与信息工程学院_ 专业班级: 计科 2 学生姓名: 学 号: 设计地点(单位)_ _ 计算机基础自主学习中心 _ _ _设计题目:_ 交通咨询系统设计_ _ _ _完成日期:2012 年 7 月 6 日 指导教师评语: _ _ _ _ 成绩(五级记分制):_ _ 指导教师(签字):_ _ 重庆科技学院课程设计任务书设计题目:交通咨询系统的设计学生姓名课程名称 数据结构课程设计 专业班级 计地 点 计算机基础自主学习中心 起止时间 2012.6.25-2012.7.6设计内容及要求人们在出差、旅游出行时,往往关心节省交通费用或节省所需要的时间等问题。

2、可以用一个图结构来表示交通网络,图中顶点表示城市,边表示城市之间的交通情况,其权值可代表里程、交通费用或时间。设计一个交通咨询系统,能让旅客咨询从任一个城市到另一个城市之间的最短路径(里程) 、最少交通费用或最少时间等问题。该设计的内容主要分两部分:一是建立交通网络图的存储结构;二是实现求两个城市顶点之间的最短路径算法。要求表示城市之间的交通关系的边的信息中包括里程、费用、时间三个值。程序可实现求任两个城市之间的最短里程、最少时间或最少费用的路线。建立图的存储结构时要求从文本文件中读入顶点和边的信息。设计参数测试数据要求:交通图中顶点数不少于 16个,边数不少于 20,每条边有三个权值(里程、

3、交通费用、时间) 。进度要求2012.6.25 完成任务的讲解、并接受课程设计任务,选定课程设计的题目2012.6.26 了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法2012.6.27-2012.6.29 程序设计及编码,上机调试2012.7.02 对程序进行调试,设计测试用例进行测试2012.7.03 整理课程设计的过程、并进行总结,完善程序功能2012.7.04 编写课程设计报告初稿2012.7.05 完善课程设计报告、并准备答辨2012.7.06 提交课程设计报告和程序,进行答辨参考资料1严蔚敏 吴伟民, 数据结构,清华大学出版社,2007.32程杰

4、,大话数据结构,清华大学出版社,2011.63 (美)Stephen Prata, C Primer Plus 中文版(第五版) ,人民邮电出版社,2005.2其它说明1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任:雷亮 指导教师:黄永文/王双明/熊茜/彭军/王成敏2012年 6 月 20 日摘要在交通网络非常发达,人们在出差、旅游出行时,往往关心节省交通费用或节省所需要的时间等问题。对于这样一个人们关心的问题,可以用一个图结构来表示交通网络,利用

5、计算机建立一个交通咨询系统。图中顶点表示城市,边表示城市之间的交通情况,其权值可代表里程、交通费用或时间。比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。本次设计的交通咨询系统主要是运用 C语言的数据结构来完成交通图的存储、图中顶点的单源最短路径和任意一对顶点间的最短路径问题。关键词:数字结构 C 语言 交通咨询 最短路径目录1 设计内容和要求 11.1 问题描述 11.2需求分析 12 课程需求分析 22.1 算法思路 22.2 数据结构体 22.3 基本操作 32.4 算法应用 32.5 程序设计流程图 43 功能模块详细设计 53.1 测试数据 53.2 程序调试

6、54 课程总结与体会 195 参考文献 .206 致谢 .21重庆科技学院数据结构课程设计报告11 设计内容和要求1.1 问题描述:设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:(1)时间最短(2)费用最小(3)里程最少。1.2 需求分析:该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。此程序规定:(1) 在程序中输入城市名称时,需输入 20个字符以内的字符串;输入费用时需输入一个实型数据;输入时间时需输入一个整型数据;在选择功能时,应输入与所选功能对应的一个整型数据。 (2) 程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才

7、能到达,或两城市间需要走过的最短路程,并详细说明如何坐车才能最省。(3) 程序的功能包括:提供对城市信息的编辑,对两城市间时间、花费、还有路程的编辑,提供三种最优决策:最快到达、最省钱到达、最少路程到达。 重庆科技学院数据结构课程设计报告22 课程需求分析2.1 算法思路(1) 数据存储。城市信息、交通信息(城市间的里程、旅费和时间)存储于磁盘文件。建议把城市信息、交通信息还有城市和交通信息数目分开存于三个文件中,用fread和 fwrite函数操作。 (2) 数据的逻辑结构。根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间、

8、旅费、里程。 (3) 数据的存储结构。采用邻接矩阵作为数据的存储结构,提高空间的存储效率。(4) 用不同的功能模块对城市信息和交通信息进行编辑,可用菜单方式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可。 (6) 主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。2.2 数据结构体typedef struct lu /* 交通信息数据类型 */ int distance; /*城市间里程*/ int cost; /*城市间旅费*/int time; /*城市间时间*/lu,lujinmaxmax;typedef struct ci

9、ty /*城市数据类型*/char name20;/*城市名称*/citysmax;typedef struct /*网络图的数据类型*/ citys clist; /*城市信息*/lujin arcs; /*边的信息*/int c_n,l_n; /*边和顶点数目*/Graph;typedef struct /*最短路径*/重庆科技学院数据结构课程设计报告3char adjvex;int mincost;/*最少旅费*/int mindistance;/*最短里程*/int mintime;/*最少时间*/closedge;2.3 基本操作void zairu(Graph *G);/*导入文件

10、中的信息,能否是程序运行*/void Administer(Graph G);/*管理员操作界面,由主函数调用*/void show(Graph G);/*显示系统中的全部城市信息和交通信息*/int insertcity(Graph *G); /*增加城市信息*/int insertlu(Graph *G); /*增加交通信息*/int Located(Graph *G, char *p);/* 返回邻接矩阵的位置下标,系统中的关键*/void baocun(Graph G);/*将城市信息、交通信息保存在文件中*/int serchlu(Graph *G);/*搜索交通信息*/void m

11、indistance(Graph *G, int v0, int v1);/*最少里程计算,迪杰斯特拉算法*/void mincost(Graph *G, int v0, int v1);/*最少旅费计算,迪杰斯特拉算法*/void mintime(Graph *G, int v0, int v1);/*最少时间计算,迪杰斯特拉算法*/2.4 算法应用在判断源点到其余各点的最短路径时运用迪杰斯特拉算法:一般情况下,假设 S为以求得最短路径的终点的集合,则可证明:下一条最短路径(设其终点为 x)或者是弧(v,k),或者是中奖只经过 S中的顶点而最后到达顶点 x的路径。这可用反证法来证明,假设此路

12、径上有一个顶点不在 S中,则说明存在一条终点不在 S而长度比此路径短的路径。但是,这是不可能的。因为我们是按照路径长度递增的次序来产生各最短路径的,故长度比此路径段的所有路径均已产生,它们的终点必定在 S中,即假设不成立。因此,在一般情况下,下一条长度次短的最短路径的长度必是 ivDMinj|SV其中,Di或者是弧 上的权值,或者是 Dk 和弧 上的权值iv, )(kikv,重庆科技学院数据结构课程设计报告4之和。(1)假设用带权的邻接矩阵 arcs来表示带权有向图,arcsij表示弧上的权值。若存在,则置 arcsij为(在计算机上可用允许的v最大值代替)。S 为已找到从 v出发的最短路径的

13、终点的集合,他的初始状态为空集。那么,从 v出发到图上其余个顶点(终点)vi 可能达到的最短路径长度的初值为:VvivGVexLocatriDi),((2)选择 ,使得jv S|D viMini i就是当前求得的一条从 v出发的最短路径的终点。令jv jS(3)修改从 v出发到集合 V-S上任一顶点 可达的最短路径长度。如果kv kDjarcsiD则修改 为k kjrcsjk(4)重复操作(2)、(3)共 n-1次。由此求得从 v到图上其余各点的最短路径是依路径长度递增的序列。2.5 程序设计流程图:交通咨询系统管理员 用户添加城市 查询最少花费路线查询最短时间路线查询最短里程路线退出添加交通

14、路线返回上一级菜单返回上一级菜单显示所有交通路线重庆科技学院数据结构课程设计报告5图 2.1程序设计流程图3 功能模块详细设计3.1 测试数据表 3.1城市信息北京 天津 石家庄 济南重庆 成都 郑州 徐州九江 武汉 广安 无锡表 3.2交通信息表起始 目的 旅费(元) 时间(小时) 里程(公里)重庆 广安 50 1 300重庆 成都 100 2 500广安 成都 60 1 100北京 天津 100 1 250济南 天津 200 2 300成都 南京 500 20 700浙江 郑州 300 30 1000九江 武汉 200 10 500南京 无锡 100 5 200石家庄 北京 100 5 3

15、00浙江 徐州 300 24 1500重庆 南京 500 23 2000成都 郑州 400 30 2400无锡 北京 700 40 3500徐州 上海 200 15 895上海 温州 100 8 300重庆科技学院数据结构课程设计报告6济南 重庆 150 15 500天津 武汉 530 28 2593广安 济南 300 23 1842上海 重庆 534 28 14343.2 程序调试1.主界面包括四个选项:选项一:管理员管理界面,选择该项可进行城市交通系统的管理;选项 二:用户咨询界面,选择该项可进行最少费用、最少时间、最短里程的决策咨询;选项三:显示城市交通系统,选择该项可显示城市交通系统的

16、所有信息,包括城市、交通路线信息;选项四:退出程序, 选择该项将退出程序。图 3.1 程序主界面在该系统运行的开始会从文件读取交通信息,如果文件不存在会导致程序运行错误!出现下图情况:重庆科技学院数据结构课程设计报告7图 3.2文件不存在该函数代码如下:void zairu(Graph *G)/读取文本中的信息FILE *fpout, *fpin;int cnum, lnum;char Fromc20, Toc20;int t, i, j;for(i = 0; i arcsij.distance = G-arcsji.distance = zuida;G-arcsij.cost = G-arc

17、sji.cost = zuida;G-arcsij.time = G-arcsji.time = zuida;fpout = fopen(“number.txt“, “r“);assert(fpout);if(fscanf(fpout, “%d %d“, G-l_n = lnum;fclose(fpout);/读取城市顶点信息fpout = fopen(“city.txt“, “r“);for(t = 0; t c_n; t+)fscanf(fpout, “%s“, G-clistt.name);fclose(fpout);重庆科技学院数据结构课程设计报告8/读取边的信息.(起点、终点、距离(

18、千米)、花费(元)、时间(分钟)fpout = fopen(“lu.txt“, “r“);for(t = 0; t l_n; t+)fscanf(fpout, “%s %s“, Fromc, Toc);i = Located(G, Fromc);j = Located(G, Toc);fscanf(fpout, “%d %d %d“, G-arcsji.distance = G-arcsij.distance;G-arcsji.cost = G-arcsij.cost;G-arcsji.time = G-arcsij.time;fclose(fpout);elsefpin = fopen(“n

19、umber.txt“, “w“);assert(fpin);fprintf(fpin, “0 0“);G-l_n = 0;G-c_n = 0;fclose(fpin);2 管 理 员 管 理 界面首先出现登陆界面,采用加密技术, 初 始 密 码 为 admin, 菜 单 项 包 括 5 个 选项 : 选项一:增加 城 市 信 息 ; 选 项 二:增加交通路线信息 ; 选 项 三 : 保 存 新 增 信 息 ,返 回 上 一 级 菜 单 , 可 返 回 主 界 面 。重庆科技学院数据结构课程设计报告9图 3.3 管理员界面在该界面中调用了三个重要函数,对城市、交通信息进行编辑和保存。int in

20、sertcity(Graph *G)/增加城市char name20;printf(“输入要增加的城市 : “);scanf(“%s“, name);getchar();if(G-c_n = 0)strcpy(G-clist0.name, name);G-c_n+;重庆科技学院数据结构课程设计报告10elsefor(int i = 0; i c_n; i+)if(strcmp(G-clisti.name, name) = 0)return -1;elsestrcpy(G-clistG-c_n.name, name);G-c_n+;return 1;图 3.4 增加城市int insertlu(

21、Graph *G)/增加城市交通信息char Fromc20, Toc20;int i, j;int d, c, t;重庆科技学院数据结构课程设计报告11printf(“输入增加路径的出发城市、目的城市、距离 (公里 )、花费 (元 )、时间 (小时 ): n“);scanf(“%s %s %d %d %d“, Fromc, Toc, getchar();i = Located(G, Fromc);j = Located(G, Toc);if(i = -1 | j = -1)return -1;elseG-arcsij.distance = G-arcsji.distance = d;G-ar

22、csij.cost = G-arcsji.cost = c;G-arcsij.time = G-arcsji.time = t;G-l_n+;return 1;图 3.5 增加交通信息重庆科技学院数据结构课程设计报告12void baocun(Graph G)/保存新增信息于文件中FILE *fpin;int i,m,k;/边和顶点的个数fpin = fopen(“number.txt“, “w“);assert(fpin);fprintf(fpin, “%d %d“, G.c_n, G.l_n);fclose(fpin);/顶点信息 .fpin = fopen(“city.txt“, “w“

23、);assert(fpin);for(i = 0; i c_n * sizeof(int);/ 判断顶点是否已求出最短路径d = (int *)malloc(G -c_n * sizeof(int);/ 储存起始点到各点的最短路径pred = (int *)malloc(G -c_n * sizeof(int);/ 最后用于输出最短路径for(v=0;v c_n; v+)finaldv =0 ;dv =G -arcsv0v.cost ;if(dv c_n ;i+)/从 1 开始、因为起始点已经在 final 里面、剩下 n - 1 个顶点、循环 n - 1 次。mind = zuida;for

24、(w=0;wc_n ;w+)if(!finaldw)/ 没有放进 final 里面的终点进行选择最短路径出来 .if(dw vexsvfinaldvd =1;/放入 final 中for(w = 0; w c_n; w+)if(!finaldw predw = vd;if(predv1 != -1)printf(“%s 到 %s “, G-clistv0.name, G-clistv1.name);printf(“最短路程为 (公里 ): %dtt“, dv1);printf(“%s “, G-clistv0.name);j = predv1;while(j != v0)printf(“ %s

25、“, G-clistj.name);j = predj;printf(“ %sn“, G-clistv1.name);elseprintf(“%s 到 %s 没有信息 .n“, G-clistv0.name, G-clistv1.name);重庆科技学院数据结构课程设计报告16该代码在系统中是核心算法!图 3.7 最短路径4.显示所有交通信息图 3.8 交通信息该函数代码如下:void show (Graph G)重庆科技学院数据结构课程设计报告17int i, k;system(“cls“);printf(“nn 目前交通系统中含有 %d 个城市, %d 条旅游路径 nnn“, G.c_n,

26、 G.l_n);printf(“各大城市 : n“);for(i = 0; i c_n; i+)if(strcmp(G-clisti.name, p) = 0)return i;return -1;重庆科技学院数据结构课程设计报告194 课程总结与体会该系统虽然已满足此次任务要求,但是还有许多需要修改增加的地方:1. 在系统运行时,如无文件就不能运行。可以让系统自行创建文件。2. 在对城市和交通信息进行编辑时不能对其进行删除和修改3. 在对信息编辑时可同时进行保存在这次数据结构课程设计中,自己的 C 语言知识和数据结构知识得到了巩固 , 编程 能 力 也 有 了 一 定 的 提 高 。 同 时

27、 也 学 会 了 解 决 问 题 的 方 法 。 总 结 起 来 , 自 己 主 要 有 以 下几 点 体 会 : 1.必 须 牢 固 掌 握 基 础 知 识 。 由 于 C 语 言 知 识 , 有 所 遗 忘 , 且 未 掌 握 好 这 学 期 所 学 的 数 据 结 构 这 门 课 , 所 以 在 实 习 开 始 不 知 如 何 下 手 , 但 在 后 来 的 实 习 过 程 中 自 己 通 过看 书 和 课 外 资 料 , 并 请 教 其 他 同 学 , 慢 慢 地 C语 言 和 数 据 结 构 知 识 有 所 熟 悉 。 这 时 才 逐 渐有 了 思 路 。 2.必 须 培 养 严 谨

28、 的 科 学 态 度 。 自 己 在 编 程 时 经 常 因 为 一 些 类 似 于 “少 了 分 号 ” 的 小错 误 而 导 致 错 误 , 不 够 认 真 细 致 , 这 给 自 己 带 来 了 许 多 麻 烦 。 编 程 是 一 件 十 分 严 谨 的 事情 , 不 能 有 一 点 的 粗 心3.这 次 课 程 设 计 也 让 我 充 分 认 识 到 数 据 结 构 这 门 课 的 重 要 性 。 它 给 我 们 一 个 思想 和 大 纲 , 让 我 们 在 编 程 时 容 易 找 到 思 路 , 不 至 于 无 章 可 循 。 同 时 它 也 有 广 泛 的 实 际 应用 。 总 之

29、 , 在 这 次 实 习 中 , 自 己 的 C 语 言 以 及 数 据 结 构 知 识 得 到 提 高 , 编 程 能 力 也 得 到了 提 高 。重庆科技学院数据结构课程设计报告205 参考文献【1】严蔚敏,吴伟民,数据结构(C 语言版),清华大学出版社,1997.4; 【2】周学毛, 新编 C语言程序设计教程 ,西安电子科技大学出版社,2005.7; 【3】苏仕华, 数据结构课程设计 ,机械工业出版社,2005【4】滕国文, 数据结构课程设计 ,清华大学出版社,2010 年【5】Mark Allen Weiss, 数据结构与算法分析:C 语言描述 ,机械工业出版社,2004年重庆科技学院数据结构课程设计报告216 致谢通过此次的课程设计,我不仅学会了很多有关数据结构的算法思路。此次课程设计要细心指导,以师所授的数据结构知识,还有一些同学和学长的帮助,由于他们的指导与帮助才完成了课程设计。谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报