校园导航课程设计说明书_第1页
校园导航课程设计说明书_第2页
校园导航课程设计说明书_第3页
校园导航课程设计说明书_第4页
校园导航课程设计说明书_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数 据 结 构课 程 设 计 说 明 书学生姓名:学 号:学 院:软件学院专 业:信息管理与信息系统题 目:校园导航成绩指导教师 一.设计目的:数据结构课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 4)训练用系统的观点和软件开发一般规范

2、进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。本系统为用户提供以下功能:(一)、查询了解学校概况,为导游参观者提供关于学校的相关信息。(二)、查询校园各个场所和景点信息;(三)、为导游者或外来人员参观人员提供校园交通信息,方便用户走访学校。校园导航查询系统的开发方法总结如下:(1) 调查,了解学校各个场所与 场所或者是各个景点与景点之间的信息,路径和距离,从外来人员或者参观者和走访者的角度出发,该如何设计才能满足用户需求。(2) 分析,对调查得到的数据进行分析,根据其要求实现的功能分析系统结构和界面将实现的基本功能。(3) 设计与开发,设计系统界面并编辑实现其各个功能的代码。(4

3、) 调试,在设计完成后,调试系统运行的状况,修改完善系统,然后进行测试。二.涉及内容和要求 设计内容:(1)设计学校的平面图(至少包括10个以上的场所)。每两个场所间可以有不同的路,且路长也可能不同;(2)提供起始点与终点能自动找出从任意场所到达另一场所的最佳路径(最短路径)。 设计要求:(1) 符合课题要求,实现相应功能;(2) 要求界面友好美观,操作方便易行;(3) 注意程序的实用性、安全性;三.本设计所采用的数据结构校园旅游模型是由各个景点和景点以及场所和场所之间的路径组成的,所以这完全可以用数据结构中的图来模拟。用图的结点代表景点或场所,用图的边代表景点或场所之间的路径。所以首先应创建

4、图的存储结构。结点值代表景点信息,边的权值代表景点间的距离。结点值及边的权值采用图存储。本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。计算路径长度,最短路线和最佳路径时可用迪杰斯特拉(dijkastra)算法实现。最后用switch选择语句选择执行浏览景点信息或查询最短路径和距离。1. 图的存储结构常用的有4种,分别是数组表示法,邻接表,十字链表,邻接多重表。在此程序中运用的是数组表示法:网的邻接矩阵:aij= wi,j 若或(vi,vj)vr 反之 #define infinity int_max /最大值无穷大#d

5、efine max_vertex_num 20 /最大顶点个数typedef enumdg,dn,ag,an graphkind; /有向图,有向网,无向图,无向网typedef struct arccell vrtype adj; infotype *info; /该弧相关信息的指针arccell,adjmatrixmax_vertex_nummax_vertex_num;tpyedef struct vertextype vexsmax_vertex_num; /顶点向量 adjmatrix arcs; /邻接矩阵 int vexnum,arcnum; /图的当前顶点数和弧数 graphk

6、ind kind; /图的种类标志mgraph;创建一个二维数组用来存储两个地点的距离,数组两个下标分别代表两个地点的位置(起点与终点),若两个地点之间没有路线可走则用无穷大表示两点之间没有路,依据此条件完成初始化平面矩阵。例子:edge00.value=0 , edge01.value=25 , edge02.value=25 ; edge03.value=90, edge04.value=uplimit, edge05.value=uplimit ; edge06.value=10 , edge07.value=uplimit , edge08.value=uplimit; edge09.

7、value=uplimit, edge010.value=uplimit;2.迪杰斯特拉(dijkstra)算法思想:按路径长度递增的次序产生最短路径.算法的一级实现:辅助数组d0.n-1di: 表示当前所找到的从始点v到终点vi的最短路径的长度.算法的二级实现: (用邻接矩阵arcs来存储有向图)(1) s:表示已找到从v出发的最短路径的终点的集合; di:表示当前所找到的从v到终点vi的最短路径的长度. s=v; di=arcslocate-vex(g,v)i viv(2)选择vj, 使得 dj=mindi| viv-s 令 s=sj(3)修改从v出发到集合v-s上任顶点vk可达的最短路径

8、长度. if dj+arcsj,kdk dk=dj+arcsjk(4)重复(2)、(3)共n-1次; 即可求得从v到图上其余各顶点的最短路径.以下为迪杰斯特拉算法void shortestdist(int s) for ( int i=0;i11;i+) /dist和path数组初始化 disti.value=edgesi.value; /邻接矩阵第s行元素赋值到dist中 si.value=0; /已求出最短路径的顶点集合初始化 if(i!=s & disti.valueuplimit) pathi.value=s; else pathi.value=-1; /路径存放数组初始化 ss.va

9、lue=1; /顶点s加入顶点集合 dists.value=0; /* 循环计算该场所与邻接场所之间的最短距离 */ for (i=0;i11-1;i+) /从顶点s确定n-1条路径 float min=uplimit; int u=s; for (int j=0;j11;j+) /选择当前不在集合s中具有最短路径的顶点u /* 如果有路径比目前的最小值还小,则替换这个最小值 */ if (!sj.value & distj.valuemin) u=j; min=distj.value; su.value=1; /将顶点u加入集合s,表示它已在最短路径上 for (int w=0;w11;w+

10、) /修改 if (!sw.value & edgeuw.valueuplimit & distu.value+edgeuw.valuedistw.value) distw.value=distu.value+edgeuw.value; pathw.value=u; 3.用switch语句,分支case语句出现友好界面,提示相关的输入信息,为用户的使用提供方便的输入信息,例如:switch(c) case 0: printf(女生公寓);break; case 1: printf( 图书馆);break; case 2: printf( 体育馆);break; case 3: printf(

11、一道门);break; case 4: printf( 一教学楼);break; case 5: printf( 男生公寓);break; case 6: printf( 食堂);break; case 7: printf( 体育场);break; case 8: printf( 五道门);break; case 9: printf( 十号教学楼);break; case 10:printf(实验楼);break;四、功能模块详细设计(一)设计功能的实现接下来根据以上搭建的程序框架完成各个模块的算法1、 首先是抽象数据类型的定义:图的抽象数据类型的 定义:adt mgragh数据对象v: v是

12、具有相同特征的数据元素的 集合,称为定点集数据关系r=vrvr= | v, wv, 表示从v到w的边 2、 基本操作:createudn(&g,v,vr); / 创建图初始条件:v是图的顶点集,vr是图中边的 集合。操作结果:按v和vr的定义构造图 g。(二)主要算法设计及相关算法补充先创建图存储学校各个景点或场所,以图的顶点表示景点或场所,以边表示路径,再利用迪杰斯特拉(dijkstra)算法求出校园各个地方的最短路径,然后根据需要进行补充相关算法。void buildmap() 生成地图,输入地图的基本信息void shortestdist(int s) 找出场所间的最短距离void bh

13、() 显示场所名称void outpath(int c) 将顶点序列号转换成场所名称 void getdata(int s,int e) 输出两个场所之间的最短距离,和最短路径void info(int c) c为场所对应的数字号,输出场所的具体信息,方便用户的信息获取void num()用于显示校园导航系统的界面显示,输出10个地点的名称void main()在主程序中运用switch语句分别调用不同的子函数完成相应的操作程序的具体操作流程:1. 打开导航,在屏幕上显示出学校各个景点场所;2. 进入主菜单,用switch语句选择相应的数字,查找学校简介,路线和个景点与场所之间的距离3. 进入

14、子菜单,选择相应的数字,查询了解景点与场所信息及景点与场所的最短距离4. 退出导航系统源程序:#include #include #include #include #include #define num 11 /最多顶点个数 #define uplimit 100000 /定义一个无穷大的值 struct inttint value;intt edgenumnum; /edge为带权邻接矩阵 intt distnum; /dist为最短路程 intt pathnum; /path为最短路径上该顶点的前一顶点的顶点号 intt snum; /s为已求得的在最短路径上的顶点号 intt dnu

15、m; /d为输出最短距离时的辅助数组 /* * 生成地图,输入地图的基本信息 * */ void buildmap() int i,j; /* 初始化平面图矩阵 */ for ( i=0;i11;i+) for ( j=0;j11;j+) edge00.value=0 , edge01.value=25 , edge02.value=25 ; edge03.value=90, edge04.value=uplimit, edge05.value=uplimit ; edge06.value=10 , edge07.value=uplimit , edge08.value=uplimit; ed

16、ge09.value=uplimit, edge010.value=uplimit; edge10.value=25 , edge11.value=0 , edge12.value=10 ; edge13.value=32, edge14.value=uplimit, edge15.value=uplimit ; edge16.value=10 , edge17.value=uplimit , edge18.value=21; edge19.value=16, edge110.value=uplimit; edge20.value=25 , edge21.value=10 , edge22.v

17、alue=0 ; edge23.value=uplimit, edge24.value=uplimit, edge25.value=uplimit ; edge26.value=uplimit, edge27.value=uplimit , edge28.value=uplimit; edge29.value=uplimit, edge210.value=uplimit; edge30.value=90 , edge31.value=32 , edge32.value=uplimit ; edge33.value=0 , edge34.value=uplimit, edge35.value=u

18、plimit ; edge36.value=uplimit, edge37.value=uplimit , edge38.value=26; edge39.value=uplimit, edge310.value=uplimit; edge40.value=uplimit, edge41.value=uplimit , edge42.value=uplimit ; edge43.value=uplimit, edge44.value=0, edge45.value=9 ; edge46.value=uplimit, edge47.value=uplimit , edge48.value=upl

19、imit; edge49.value=uplimit, edge410.value=60; edge50.value=uplimit , edge51.value=uplimit , edge52.value=uplimit ; edge53.value=uplimit, edge54.value=9, edge55.value=0 ; edge56.value=uplimit , edge57.value=15 , edge58.value=50; edge59.value=14, edge510.value=uplimit; edge60.value=10 , edge61.value=1

20、0 , edge62.value=uplimit; edge63.value=uplimit, edge64.value=uplimit, edge65.value=uplimit ; edge66.value=0 , edge67.value=35 , edge68.value=uplimit; edge69.value=30, edge610.value=uplimit; edge70.value=uplimit , edge71.value=uplimit , edge72.value=uplimit ; edge73.value=uplimit, edge74.value=uplimi

21、t, edge75.value=15 ; edge76.value=35 , edge77.value=0 , edge78.value=uplimit; edge79.value=13, edge710.value=uplimit; edge80.value=uplimit , edge81.value=21 , edge82.value=uplimit ; edge83.value=26, edge84.value=uplimit; edge85.value=50 ; edge86.value=uplimit , edge87.value=uplimit , edge88.value=0;

22、 edge89.value=22, edge810.value=10; edge90.value=uplimit , edge91.value=16 , edge92.value=uplimit ; edge93.value=uplimit, edge94.value=uplimit, edge95.value=14 ; edge96.value=30 , edge97.value=13 , edge98.value=22; edge99.value=0, edge910.value=uplimit; edge100.value=uplimit , edge101.value=uplimit

23、, edge102.value=uplimit; edge103.value=uplimit, edge104.value=60; edge105.value=uplimit ; edge106.value=uplimit , edge107.value=uplimit , edge108.value=10; edge109.value=uplimit, edge1010.value=0; /* 找出场所间的最短距离-迪杰斯特拉算法 */ void shortestdist(int s) for ( int i=0;i11;i+) /dist和path数组初始化 disti.value=edg

24、esi.value; /邻接矩阵第s行元素赋值到dist中 si.value=0; /已求出最短路径的顶点集合初始化 if(i!=s & disti.valueuplimit) pathi.value=s; else pathi.value=-1; /路径存放数组初始化 ss.value=1; /顶点s加入顶点集合 dists.value=0; /* 循环计算该场所与邻接场所之间的最短距离 */ for (i=0;i11-1;i+) /从顶点s确定n-1条路径 float min=uplimit; int u=s; for (int j=0;j11;j+) /选择当前不在集合s中具有最短路径的

25、顶点u /* 如果有路径比目前的最小值还小,则替换这个最小值 */ if (!sj.value & distj.valuemin) u=j; min=distj.value; su.value=1; /将顶点u加入集合s,表示它已在最短路径上 void bh() /显示场所名称 printf(0.女生公寓 1.图书馆 2.体育馆n); printf(3.五道门 4.一号教学楼 5.男生公寓n); printf(6.食堂 7.体育场 8.一道门n); printf(9.十号教学楼 10.实验楼n); /*将顶点序列号转换成场所名称*/ void outpath(int c) switch(c)

26、case 0: printf(女生公寓);break; case 1: printf(图书馆);break; case 2: printf( 体育馆);break; case 3: printf(五道门);break; case 4: printf(一号教学楼);break; case 5: printf( 男生公寓);break; case 6: printf(食堂);break; case 7: printf(体育场);break; case 8: printf(一道门);break; case 9: printf( 十号教学楼);break; case 10:printf(实验楼);br

27、eak; /* 输出两个场所之间的最短距离,和最短路径 */ void getdata(int s,int e) d0.value=e; int k; for (k=0;dk.value!=s;k+) dk+1.value=pathdk.value.value; if(se.value) printf(nt场所%d,%d之间的最短距离是:%d,s,e,diste.value); coutnt场所s,e之间的最短路径是:; for(; k!=-1;k-) outpath(dk.value); if (k!=0) cout ; else printf(nt场所%d到场所%d之间没有路径!,s,e)

28、; void begin() int flag=1; int s,e; while ( flag ) bh(); printf(nt请输入起始场所号与目的场所号:); scanf(%d%d,&s,&e); if(s=0 & e=0) flag=0; else printf(n场所号非法,请重新输入!); shortestdist(s); getdata(s,e); /*显示场所的具体信息*/void info(int c) /c为场所对应的数字号 switch(c)case 0: printf(t 女生公寓,住宿条件较好。); break; case 1: printf(t 图书馆,内部藏有丰

29、富的书籍,供同学们学习参考,也可以自习。); break; case 2: printf(t 体育馆,供同学们进行体育活动以及上体育课。); break; case 3: printf(t 校门。); break; case 4: printf(t 一号教学楼,供同学们上课和自习使用。); break; case 5: printf(t 男生公寓,提供居住。); break; case 6: printf(t 食堂,有两层楼,是同学们用餐的地方。); break; case 7: printf(t 体育场,是同学们开运动会和进行体育赛事的地方。); break; case 8: printf(

30、t 一道门,晚上的时候这里最热闹。); break; case 9: printf(t 十号教学楼,这栋楼供学习上课使用。); break; case 10: printf(t 实验楼,是同学们计算机上机,各系做实验的地方。); break;default: printf(t输入不合法,请重新输入!); break; void num()printf(*n); printf(* 校园导航系统 *n); printf(*n); printf( 0.女生公寓n); printf( 1.图书馆n); printf( 2.体育馆n); printf( 3.五道门n); printf( 4.一号教学楼n

31、); printf( 5.男生公寓n); printf( 6.食堂n); printf( 7.体育场n); printf( 8.一道门n); printf( 9.十号教学楼n); printf( 10.实验楼n); void main() int c; char option; printf(*n); printf(tt欢迎光临中北大学n); printf(*n); printf(-n); printf(1.显示场所的编号n); printf(2.查看场所的具体信息n); printf(3.找出最短路径及计算路径长度n); printf(4.退出n); printf(-n); printf(what do you want to do?请输入选择:n); cinoption; while (option!=0) switch(option) case 1: num(); printf(tt*n); printf(ttt1.显示场所的编号n); printf(ttt2.查看场所的具体信息n); printf(ttt3.找出最短路径及计算路径长度n); printf(ttt4.退出n); printf(tt*n); printf(twhat do you want to do ?请输入选择:n); cinoption; system(cls

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论