《校园导游咨询系统》数据结构课程设计说明书.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《《校园导游咨询系统》数据结构课程设计说明书.doc》由会员分享,可在线阅读,更多相关《《校园导游咨询系统》数据结构课程设计说明书.doc(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本文档经供参考,产生的后果概不负责中北大学数 据 结 构课 程 设 计 说 明 书学生姓名:刘安光学 号:1507084143学生姓名:刘晨馨学 号:1507084103学生姓名:古文慧学 号:1507084118学生姓名:周顺帆学 号:1507084114学 院:计算机与控制工程学院专 业:网络工程专业题 目:校园导游咨询系统指导教师梁志剑、张建华2016 年 12月30日1目录1设计目的12设计内容13设计要求14模块分工15数据结构26详细设计36.1 主函数模块36.1.1 详细设计思想36.1.2 核心代码46.2 图的建立模块46.2.1详细设计思想46.2.2 核心代码56.3
2、信息查询模块66.3.1详细设计思想66.3.2 核心代码76.4 两景点最短路径模块86.4.1详细设计思想86.4.2 核心代码106.5 多景点最佳路径模块126.5.1详细设计思想126.5.2 核心代码126.6 求图的关节点模块136.6.1详细设计思想136.6.2 核心代码156.7 两景点所有路径模块176.7.1详细设计思想176.7.2 核心代码186.8 游客及管理员菜单模块196.8.1详细设计思想196.8.2 核心代码207源码文件257.1 源码257.2 文本文件307.2.1 map.txt307.2.2 liuyan.txt318运行截图328.1 主菜单
3、界面与功能一览328.2 中北校园景点信息查询328.3 两景点间最短路径查询328.4 两景点间所有路径查询338.5 多景点间访问路线查询338.6 输出校园景点图关节点338.7 公告查看及游客留言栏348.8 景点管理员后台管理栏358.9 退出校园导游咨询系统369经验总结379.1 关于分工379.2 关于答辩371设计目的数据结构课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:(1)了解并掌握数据结构与算法的设计方法,具备初步的独立
4、分析和设计能力;(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2设计内容设计一个校园导游程序,为来访的客人提供各种信息查询服务。(1)设计中北大学的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询。(3)为来访客人提供图中任意景点的问路查询,即查询任意两相景点之间的一条最短的简单
5、路径。(4)求校园图的关节点。(5)提供图中任意景点问路查询,即求任意两个景点之间的所有路径。(6)提供校园图中多个景点的最佳访问路线查询,即求途经这多个景点的最佳路径。3设计要求(1)符合课题要求,实现相应功能;(2)要求界面友好美观,操作方便易行;(3)注意程序的实用性、安全性;4模块分工刘安光:主函数模块、求图的关节点模、两景点所有路径模块。刘晨馨:两景点最短路径模块、多景点最佳路径模块。古文慧:游客菜单模块、管理员菜单模块。周顺帆:图的建立及输出模块、信息查询模块。5数据结构该程序用到的是图的数据结构,其中用到的是图的邻接矩阵存储结构。#define INFINITY 9999 /*此
6、处用9999代表无穷大*/#define M 20 /*最大顶点数*/typedef struct /*景点信息结构定义*/int num; /*景点代号*/char name20; /*景点名称*/char intro200; /*景点简介*/vertexType; /*邻接矩阵顶点结构*/typedef int edgeType; /*权值类型*/typedef struct /*校园景点图结构体定义*/vertexType vexsM; /*顶点值类型*/edgeType edgsMM; /*边权值类型-距离*/ int vexNum, edgNum; /*图顶点总数与边数*/mgrap
7、hType; /*邻接矩阵结构*/ /*函数一览表*/void main(); /*主函数*/ int Menu(); /*主菜单*/void Creat_Map(mgraphType *g); /*从文件读取信息建立图*/void Dis_Map(); /*显示校园景点地图*/void Admin_Menu(mgraphType *g); /*管理员菜单*/void Tour_Menu(mgraphType *g); /*游客菜单*/ int Judeg_Innum(int num); /*判断输入的编号是否合理*/void Search_Intro(mgraphType *g); /*景点
8、信息查询*/void ShortestPath_FLD(mgraphType *g); /*弗洛伊德算法求景点间最短的路径*/void Floyd_Print(mgraphType,int,int); /*递归实现打印两点间的最短路径*/void ShortestPath_Print(mgraphType); /*输出并打印两点间的最短路径*/void Dfs_Allpath(mgraphType,int,int); /*深度优先遍历查询两景点间所有路径*/void Allpath_Print(mgraphType *g); /*查询两景点之间的所有路径并打印*/void Bestpath_M
9、ultispot(mgraphType); /*多景点间求最佳路径*/void Dfs_Coila(mgraphType *g, int i); /*深度遍历找关节点*/void Coila_Query(mgraphType *g); /*求校园交通图关节点*/void System_Exit(int *quit); /*退出系统函数*/6详细设计6.1 主函数模块6.1.1 详细设计思想图1 主函数模块6.1.2 核心代码/*主函数*/void main()int quit=0;mgraphType g; Creat_Map(&g); /*从文件读取信息建立图*/ ShortestPath_
10、FLD(&g); /*floyed求dist与path*/ while(!quit) /*系统退出条件满足判定*/ switch(menu() /*打印主菜单等待输入项*/ case 1: Dis_Map();Search_Intro(&g);break; /*中北校园景点信息查询*/ case 2: Dis_Map();ShortestPath_Print(&g); break; /*两景点间最短路径查询*/ case 3: Dis_Map();Allpath_Print(&g); break; /*两景点间所有路径查询*/ case 4: Dis_Map();Bestpath_Multis
11、pot(&g);break; /*多景点间访问路线查询*/ case 5: Dis_Map();Coila_Query(&g);break; /*输出校园景点图关节点*/ case 6: Dis_Map();Tour_Menu(&g);break; /*公告查看及游客留言栏*/ case 7: Dis_Map();Admin_Menu(&g);break; /*景点管理员后台管理栏*/ case 8: System_Exit(&quit);break; /*退出校园导游咨询系统*/ default:printf(错误!没有该选项对应的操作。); /*按错选项反馈错误信息*/ system(pa
12、use); system(cls); 6.2 图的建立模块6.2.1详细设计思想当建立图存储结构时,图的信息以三元组(i,j,w)的形式输入,i、j分别表示两顶点的序号,w表示边权。图的顶点信息则时按照编号、名字、简介的方式的方式在文件中存储。先初始化邻接矩阵,然后打开文件,若文件不为空则先读入顶点数与边数信息,然后按文件中所给信息初始化邻接矩阵的每个顶点,处理完定点后,把文件中的边权信息读入到邻接矩阵中建立无向图,最后关闭文件,以待稍后输出。如果文件不能打开,将无向图的顶点赋值为零。具体流程如下图(图2 图的建立)所示。图2 图的建立6.2.2 核心代码/*校园景点图的读取与创建*/void
13、 Creat_Map(mgraphType *g) /*从文件读取图的信息并建立图*/ int i, j, k, e; FILE *rf; /*定义带缓冲的文件指针*/rf = fopen(map.txt,r); /*从文件读取图的边信息*/if(rf) /*读入图的顶点数和边数*/fscanf(rf,%d%d,&g-vexNum, &g-edgNum); /*读入图的顶点数与边数*/for(i=0; ivexNum; i+) /*读入图的顶点信息*/fscanf(rf,%d%s%s,&g-vexsi.num,g-vexsi.name,g-vexsi.intro);for(i=0; ivexN
14、um; i+) /*初始化领接矩阵*/for(j=0; jvexNum; j+)if(i=j) g-edgsij=0; /*到本点的距离为0其余不可达*/else g-edgsij=INFINITY;for(k=0; kedgNum; k+) /*读入图的边权,建立无向图*/fscanf(rf,%d%d%d,&i,&j,&e); /*文件以三元组形式存储图信息*/g-edgsij=g-edgsji=e; /*建立无向图*/fclose(rf); /*关闭文件*/else g-edgNum=0;6.3 信息查询模块6.3.1详细设计思想信息查询为本程序功能一,在运行此功能时需要用到Judeg_I
15、nnum函数。先提示用户按显示的地图上的景点输入对应的编号进行查询。等待用户输入完编号后,读入游客输入要查询的景点编号,然后用Judeg_Innum函数判断输入的编号,如果游客输入值为-1,表示用户结束输入,则Judeg_Innum函数返回-1并结束信息查询。如果游客输入值不为-1,判断游客输入值是否合理(即是否在1-12范围类以及对应景点是否关闭),不合理的话提示游客输入有误,返回1,等待用户再次输入。如果游客输入正确的话,再次判断查询的景点是否关闭,如果景点关闭,输出景点关闭及原因并返回1。如果Judeg_Innum函数返回值为1,跳回开始,返回值不为-1和1,输出景点名称简介并结束。流程
16、图如下图(图3 信息查询)所示。图3 信息查询6.3.2 核心代码/*景点信息查询*/void Search_Intro(mgraphType *g) int s;doprintf(n请输入你要查找的景点编号:);scanf(%d,&s); /*输入的编号比实际景点编号大1*/while(judeg_Innum(s);printf(n景点名称:%snn,g-vexss-1.name);printf(景点简介: %snn,g-vexss-1.intro);/*判断用户输入的编号是否合理及对应景点是否开放*/int judeg_Innum(int num)int i=0;if(num=-1) re
17、turn i;if(num12)printf(nttt你输入的景点编号有误,请输入1-12之间的数!nn);i=1;else if (cloNumnum-1.close=INFINITY)printf(nttt%s暂时无法游览!n,cloNumnum-1.name);printf(ntt关闭原因:%sn,cloNumnum-1.reason);i=1;return i;6.4 两景点最短路径模块6.4.1详细设计思想用floyed算法通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。从图的带权邻接矩阵A=a(i,j) nn开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵
18、D(1);又用同样地公式由D(1)构造出D(2);最后又用同样的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后继节点矩阵path来记录两点间的最短路径。具体算法思想如下:(1)从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。(2)对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。(3)把图用邻接矩阵G表示出来,如果从Vi到Vj有路可达,则Gij=d,d表示该路的长度;否则Gij=无穷大。定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园导游咨询系统 校园 导游 咨询 系统 数据结构 课程设计 说明书
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内