公园导游管理系统.docx
- 文档编号:872033
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:24
- 大小:379.84KB
公园导游管理系统.docx
《公园导游管理系统.docx》由会员分享,可在线阅读,更多相关《公园导游管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
公园导游管理系统
计算机信息工程学院
《数据结构》
课程设计报告
题目:
公园导游系统
专业:
计算机科学与技术(软件方向)
班级:
学号:
姓名:
指导教师:
完成日期:
一、概要设计
1.题目的内容与要求
1.1课题的研究背景、要求和意义
现代公园范围的广阔,内容不断的增加,使得公园整个系统变得复杂。
使用电脑对游客进行导游成为发展的趋势,以达到更好的为游客服务的目的。
对于公园的游客来说,他们要求:
能够浏览整个公园的信息、查询每一个景点的信息、从任意景点遍历全部的景点、能够查找最短路径。
对于系统用户来说,他们要求:
删除地点、添加地点、添加路径、删除路径、保存修改、导入文件数据。
采用图这么一种数据结构,采用邻接表的存储方式,用一个二维数组来记录所有的边,为了实现地图的随时更新,采用了静态链表实现对图的接点的添加,删除。
应用文件的读写来进行文件操作。
查找最短路径采用迪杰特斯拉算法实现,从任意景点遍历全部的景点采用深度优先遍历实现。
对于界面设计,游客不能进行地图的修改,更换,所以首先要验证身份,再出现对应的界面。
2.总体设计
程序模块
从文件中对出数据(Fprint-Link()):
通过调用Update(L,g),先将链表L的信息赋值给邻接数组g中,进行更新。
建立无向图,把公园的景点及景点的信息,连接起来建立邻接表采用链式加顺式存储。
浏览学校的全景(Browser):
列出学校的所有的景点。
寻找最佳路径(DFSTraverse:
):
输入一个景点,会吧所有都浏览一边,并找出最佳的路径。
最短路径(ShortPath):
求出起点和终点的最佳路径,并求出最佳路径的长度。
遍历出某一起点到终点的所有路径(SearchAllPath):
找出所有路径,利用深度优先遍历。
删除地点、添加地点、添加路径、删除路径、保存修改、导入文件数据。
对应代码函数如下:
DeleteAdv(L,g)、InsertAdv(L,g)、InsertEdge()、DeleteEdge()、SaveMap(g)、Loadnewmap(p,g)。
总体结构设计如图1-1所示。
图1-1系统框架图
3.系统数据结构
3.1程序数据结构
程序主要用了图和静态链表两种数据结构,采用矩阵来保存图形结构的地图,用数组来保存遍历经过的结点用以遍历回溯,以及存储最最终路径。
图的抽象数据类型:
ADTGraph{
数据对象V:
V是具有相同特性的数据元素的集合,称为顶点集。
数据关系:
R={VR}
VR={
基本操作P:
PrintMap(g)
Serach(g)
DFSTraverse(g)
ShortPath(g)。
}ADTGraph
线性链表的抽象数据类型:
ADTList{
数据对象:
D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}
数据关系:
R1={
基本操作:
DeleteAdv(L,g)InsertAdv(L,g)
InsertEdge()DeleteEdge()
SaveMap(g)Loadnewmap(p,g)
}ADTList。
3.2.2具体数据类型定义
typedefstructLNode{
charname[30];
intnum;
charintroduction[100];
structLNode*next;
}LNode,*Link;
typedefstructArcNode
{intdata;//该弧所得指向的顶点的位置
ArcNode*nextarc;//指向下一条弧的指针
}ArcNode,*ArcLink;
typedefstructVNode//顶点信息
{charname[30];
intnum;
charintroduction[100];
ArcLinkfirstarc;//指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX+1];
typedefstructALGraph
{AdjListvdata;
intvexnum,arcnum;//图的顶点数和弧数
}ALGraph;
intEdge[MAX][MAX];//用来存放路径的权值
intn,e;//存放结点数和边数
读取文件信息代码如下:
for(i=1;i<=n;i++)
{fscanf(fp,"%d",&num);fscanf(fp,"%s",name);
fscanf(fp,"%s",information);
ListInsert(L,num,name,information);
}
Update(L,g);
for(j=1;j<=e;j++)//从文件中读入边的信息
{
fscanf(fp,"%d",&a);
fscanf(fp,"%d",&b);
fscanf(fp,"%d",&weight);
Edge[a][b]=weight;
Edge[b][a]=weight;
p=(ArcLink)malloc(sizeof(ArcNode));//为顶点申请空间
p->data=a;
p->nextarc=g[b].firstarc;
g[b].firstarc=p;//把p插进来
q=(ArcLink)malloc(sizeof(ArcNode));
q->data=b;
q->nextarc=g[a].firstarc;
g[a].firstarc=q;
二、详细设计
2.1创建图(Fprint-Link)
从文件中读出数据,函数流程图2-1所示。
图2-1Fprint-Link函数流程图
2.2寻找最佳路径(DFSTraverse)
利用深度优先的思想,遍历图找出一条最佳最佳的的路径,让它遍历所有景点。
利用递归的思想,往下遍历,访问标志位,若访问过在下次就不用访问。
若找完一个分支在下次重新遍历,函数流程如图2-2所示。
图2-2寻找最佳路径流程图
2.3最短路径(ShortPath)
利用迪杰特斯拉算法,求v0到其余顶点的最短路径path[],distance[]是用来存放各路径的权值,借助辅助数组s[]标志,是否当前顶点属于S(1,属于)函数流程
图2-3所示。
开始
初始化distence[],s[],path[]
开始主循环,每次求得v0到某顶点v
的最短距离,并将v并入中
minDis=MAXEDGE;//当前所知v0的最短距离并设初值为MAXEAGE,
inti=1,j=1,u=v0;
!
s[j]&&distance[j] u=j;//在s[]下一直往下找minDis=distance[j]; j<=n j=0;更新当前最短路径及距离; newDist=distance[u]+GetWeight[u] distance[j]=newDist;path[j]=u;//记录寻找的最短的路径 i<=n 结束 If(newDist J<=n Y N Y N Y Y N 图2-3寻找最短路径流程图 2.4遍历出某一起点到终点的所有路径(SearchAllPath) 利用图的深度优先遍历,利用访问标志位。 path[]记录路径,visited[]设访问标志,v起点,des终点,length,代表的是访问景点的长度。 若碰见死路或者不同的路,则从上一个景点,从新扫描,searchAllPath()流程如图2-4所示。 If(visited[V])returen;//若所有景点都访问过,则终止 v==des PrintfPath(G,path,length); visited[v]=1; GetWeight(v,i)! =MAXEDG&&! visited[i] SearchAllPath(G,path,visited,i,des,length+1) i++ i<=n 结束 开始 N Y visited[v]=0; N Y 图2-4searchAllPath()流程图 2.5导入新文件(Loadnewmap) 将指定文件导入到邻接表中,再保存到zheke1.txt中, 具体实现如图2-5所示。 开始 初始化Linkp,输入文件名filename[20] Fprint-Link(p,g,filename) SaveMap(g) L=P; 结束 图2-5导入新文件结构示图 三、测试分析 3.1可行性分析 所谓可行性分析就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 这步工作的主要是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以比较抽象的方式进行系统分析和设计的过程。 可行性研究的最根本任务是对以后的行动方针提出建议,以避免时间、资源、人力和金钱的浪费,推荐一个较好的解决方案,并且为工程制定一个初步的计划。 3.1.1技术可行性 查找最短路径以及查询任意两景点之间的所有路径采用迪杰特斯拉算法或弗洛伊德算法实现。 解决这个问题的一个方法是: 每次以一个顶点为源点,重复执行迪杰斯特拉算法n次。 这样,便可求得每一对顶点之间的最短路径。 总的执行时间为O(n3)。 虽然弗洛伊德算法时间复杂度也是O(n3),但形式简单些。 从任意景点遍历全部的景点采用深度优先遍历或广度优先搜索遍历图实现。 所谓可行性分析就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 这步工作的主要是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以比较抽象的方式进行系统分析和设计的过程。 可行性研究的最根本任务是对以后的行动方针提出建议,以避免时间、资源、人力和金钱的浪费,推荐一个较好的解决方案,并且为工程制定一个初步的计划。 本系统采用人机操作进行管理,用visualC++6.0进行前台设计、系统随机产生数据,用户通过界面操作,系统自动给予合理分析,由于visualC++6.0功能强大、使用的灵活、良好的可扩展性、以及广泛实际应用,充分说明本系统在技术方面的可行性。 3.1.2工具可行性 软件方面: 信息时代对于软件的应用已不是人们的难题,人们在日常办公中用的计算机操作的系统等都属于软件部分。 硬件方面: 计算机普及到今天,人们对于它的拥有已不少见,它的硬件设备完全能够满足人们的需求,而价格也能被人们所接受。 3.1.3经济可行性 线在大多数的公园景点及内容不断的增多和丰富,这也就使得整个公园系统不得不建立的更大。 这也就为人们逛公园造成了很大的不便。 人们往往不熟悉公园,找个东西,或某处带来了极大的不便。 往往要花很多时间在这一方面。 然而要是有一个公园导游系统这将给乘客带来极大的方便,使人们一下就能了解到这个公园的大致的情况。 这是个超小型的性能分析系统,从投入的人力,财力与物力来讲是非常之小的,只要一台电脑,一台打印机,这个系统就可以搞起来,考虑到学校里有电脑,现只要购置一台打印机就可以了。 从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作,可以给读者提高到更深的一个层次。 3.1.4操作可行性 本系统设计清晰,有良好的用户接口,操作简洁,完全可以给用户解决,并达到操作过程中的直观、方便、实用、安全等要求,因此操
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 公园 导游 管理 系统