java校院导游程序课程设计.doc
《java校院导游程序课程设计.doc》由会员分享,可在线阅读,更多相关《java校院导游程序课程设计.doc(24页珍藏版)》请在冰豆网上搜索。
《数据结构与算法设计》
课程设计任务书
题目
校园导游程序
学生姓名
黄涛
学号
专业班级
数学1001
设
计
内
容
与
要
求
【问题描述】
如今的大学校园占地面积广,建筑物繁多,对陌生人在校园很容易迷失方向或不易找到自己的目的地。
为了解决这一问题,我为我校本部校区建立校园导游图,以此给新生和来访客人提供方便快捷的咨询引导服务。
【课程设计目的】
本程序涉及的类容广,涉及:
数据结构(图),java程序设计,UML设计等。
通过该程序能很好的复习以前学过的知识,也能促进对刚学过的图知识进一步加深理解,还能根据需要学习新知识。
提高用知识解决实际问题的综合能力,达到学以致用的目的。
【软件功能】
1.可以浏览我校本部整体的校园平面图。
图中显示所有景点及其道路连通情况。
采用人机交互方式实现图形化界面景点介绍。
2.为来访客人提供任意景点相关信息的查询。
3.为来访客人提供任意景点的问路查询。
【算法思想】
本程序中用到的数据结构:
图。
主要算法:
迪杰斯特拉算法。
ADTGraph{
数据对象V:
景点顶点集
数据关系R:
R={VR}VR={|v,w∈V且P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息}
基本操作P:
CreateGraph(&G,V,VR);初始条件:
V是图的顶点集,VR是图中弧的集合。
操作结果:
按V和VR的定义构造图G。
DestroyGraph(&G);初始条件:
图G存在。
操作结果:
销毁图G。
ShortestPath(&G,v1,v2);初始条件:
图G存在,给定起点v1和终点v2。
操作结果:
返回起点v1和终点v2的最短距离和路径。
}
【提交成果】
1.“《数据结构与算法设计》课程设计任务书”一份,打印装袋;
2.“《数据结构与算法设计》课程设计报告”一份,打印装袋;
3.上面两项内容的word文档,通过电子邮件交到指导教师。
起止时间
2013年6月3日至2013年6月14日
指导教师签名
2013年6月3日
系(教研室)主任签名
2013年6月3日
学生签名
年月日
数据结构与算法设计课程设计
专业:
数学与应用数学班级:
数学1001学号:
姓名:
黄涛完成日期:
2013.06.16指导教师:
1、程序设计说明书
【设计题目】校园导游程序
【问题描述】
如今的大学校园占地面积广,建筑物繁多,对陌生人在校园很容易迷失方向或不易找到自己的目的地。
为了解决这一问题,我为我校本部校区建立校园导游图,以此给新生和来访客人提供方便快捷的咨询引导服务。
【软件功能】
1.能够对校园整体平面示意图进行浏览。
2.能够对全校的主要景点的拓扑图进行一个整体情况的预览查询。
3.能够实现对每个景点详细信息的查询。
4.能够实现景点与景点间最短路线的查询,采用Dijkstra最短路径算法。
【算法思想】
1.为各个功能模块用类封装。
2.采用数据结构有权图的知识来存储各个景点。
3.两个景点之间的最短路径采用Dijkstra算法求最短路径。
即由迪杰斯特拉(Dijkstra)提出的一个按路径长度递增的次序产生最短路径的算法。
该算法的基本思想是:
设置两个顶点的集合S和T=V-S,集合S中存放已找到最短路径的顶点,集合T存放当前还未找到最短路径的顶点。
初始状态时,集合S中只包含源点v0,然后不断从集合T中选取到顶点v0路径长度最短的顶点u加入到集合S中,集合S每加入一个新的顶点u,都要修改顶点v0到集合T中剩余顶点的最短路径长度值,集合T中各顶点新的最短路径长度值为原来的最短路径长度值与顶点u的最短路径长度值加上u到该顶点的路径长度值中的较小值。
此过程不断重复,直到集合T的顶点全部加入到S中为止。
4.本实验中用到的数据结构:
图
ADTGraph{
数据对象V:
景点顶点集
数据关系R:
R={VR}
VR={|v,w∈V且P(v,w),表示从v到w的弧,
谓词P(v,w)定义了弧的意义或信息}
基本操作P:
CreateGraph(&G,V,VR);
初始条件:
V是图的顶点集,VR是图中弧的集合。
操作结果:
按V和VR的定义构造图G。
DestroyGraph(&G);
初始条件:
图G存在。
操作结果:
销毁图G。
ShortestPath(&G,v1,v2);
初始条件:
图G存在,给定起点v1和终点v2。
操作结果:
返回起点v1和终点v2的最短距离和路径。
}
【类的设计】
1.Jiemian.java
classAll();景点拓扑图界面。
classPlan():
校园平面示意图。
classChaXun():
景点详细信息查询界面。
classLuJing():
单源最短路径查询界面。
publicclassjiemian();主界面。
2.GraphPath.java
classGraphPath()类。
最短路径算法类。
主要成员变量有:
staticintMaxEdges=50;最大边数。
staticintMaxVertices=10;最大顶点数。
staticdoubleMaxValue=9999.9;最大值无。
privatecharVerticesList[]=newchar[MaxVertices];存放顶点的数组。
privatedoubleEdge[][]=newdouble[MaxVertices][MaxVertices];邻接矩阵(存放两个顶点权值)。
privateintCurrentEdges;现有边数。
privateintCurrentVertices;现有顶点数。
publicintpath[]=newint[MaxVertices];存放最短路径上的最后一个经由点。
publicdoubledist[]=newdouble[MaxVertices];存放最短路径的权值。
主要成员方法:
publicGraphPath():
构造函数建立空的邻接矩阵。
publicintFindVertex(charvertex):
查找指定的顶点的序号。
publicbooleanIsGraphEmpty():
判断图是否为空。
publicbooleanIsGraphFull():
判断图是否为满。
publicintNumberOfVertices():
取得顶点数。
publicintNumberOfEdges():
取得边数。
publiccharGetValue(inti):
按序号取得顶点值。
参数为顶点序号。
publicdoubleGetWeight(intv1,intv2):
取得一条边的权值,参数为该边的顶点。
publicintGetFirstNeighbor(intv):
取得第一个邻接点的序号。
publicintInsertVertex(charvertex):
插入一个顶点,参数为顶点数据。
publicbooleanInsertEdge(intv1,intv2,doubleweight):
插入一条边,参数为连接该边的两个顶点及边上的权值。
publicbooleanRemoveVertex(intv):
删除一个顶点。
publicbooleanRemoveEdge(intv1,intv2):
删除一条边,参数为所删除边的两个顶点,既删除v1,v2顶点之间的连接边。
publicvoiddisplay():
打印邻接矩阵。
publicvoidDijkstra(intv0,intvj):
最短路径的ijkstra算法,参数为起点和目的点。
publicvoidPutpath(intv0):
输出Dijkstra算法的结果。
【存储结构设计】
图状结构是一种比树形结构更复杂的非线性结构。
在树状结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关。
而在图状结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的。
因此,图状结构被用于描述各种复杂的数据对象,在自然科学、社会科学和人文科学等许多领域有着非常广泛的应用。
数据存储:
采用字符串数组,一维数组,二维数值来存储图中景点及其各边的信息。
1.景点查询图片数组存储:
Stringtu[]={"img/00.png","img/01.png","img/02.png","img/03.png",
"img/04.png","img/05.png","img/06.png","img/07.png",
"img/08.png","img/09.png","img/10.png","img/11.png",};
2.景点查询图片信息数组存储:
StringXX[]={"","西安石油大学校本部南大门,位于西安市电子二路18号!
",
"一号教学楼建于上个世纪,老的教学楼,"+"现在主要用着实验","校本部图书馆,
图书馆藏有大量图书","校本部室内体育馆","利学超市","校本部学生食堂",
"校本部室外体育场地,包括足球场,篮球场,游泳馆和旱冰场等室外运动场地!
","西安石油大学校本部北门,位于西安"+"市电子一路!
","石油大学校医院",
"东门主要机动车出入大门","二号教学楼,与西阶教学楼,西阶会议室,东街教学"+
"楼为一体建筑,建于本世纪初期!
"};
3.最短路径景点图片存储:
StringCXT[]={"","img/01.jpg","img/02.jpg","img/03.jpg","img/04.jpg",
"img/05.jpg","img/06.jpg","img/07.jpg","img/08.jpg",
"img/09.jpg","img/10.jpg","img/11.jpg",};
4.顶点储存:
Stringc[]={"01","02","03","04","05","06","07","08","09","10","11"};5.边的存储:
intv[][]={//弧
{0,1},{0,2},{1,0},{1,2},{1,8},{1,10},{2,0},{2,1},{2,3},
{2,4},{3,2},{3,5},{3,6},{4,2},{4,5},{5,3},{5,4},{5,6},
{5,8},{5,10},{6,3},{6,5},{6,7},{7,6},{8,1}