导游系统数据结构课设报告文档格式.docx
- 文档编号:19314437
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:17
- 大小:222.39KB
导游系统数据结构课设报告文档格式.docx
《导游系统数据结构课设报告文档格式.docx》由会员分享,可在线阅读,更多相关《导游系统数据结构课设报告文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
校园导游系统
目录
1前言1
2系统分析2
2.1设计目的2
2.2需求分析2
2.3设计内容3
2.4概要设计3
2.5详细设计4
2.5.1主函数的设计4
2.5.2查找函数的设计4
2.5.4修改函数的设计7
2.5.5增加函数的设计7
3功能分析8
6开发环境13
7总结13
参考文献14
1前言
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
计算机的发明应用,被视为人类的第三次重大的科学技术革命,是一次飞跃。
过去的革命最高成就就是“用机器制造机器”,是手的延长,而计算机的出现却能做到“用机器控制机器”,是脑的延伸。
计算机是提高生产效率的主要工具及途径。
广西桂林电子科技大学座落在世界风景和历史文化名城桂林市,学校在艰难困苦的条件下不断发展壮大,学校目前占地面积4100多亩,校舍建筑面积100多万平方米。
在如此庞大的校园中,要道某一景点的详细介绍,要准确快速的由所在地到达另一目的地,已经为我们及其关注。
开发出这样一个导游系统是非常有必要的。
本系统就是这样的一个的校园导游系统。
选取了桂电的十个代表性景点,抽象成一个无向带权图,以图中顶点表示校内各景点,表示出其坐标,存放景点名称,代号,简介等信息,边上的权值表示两景点之间的距离。
实现了对个景点的查询、修改、增加等功能,还能查询从一个景点到所有景点的信息以及任意两个可达景点的最短路径。
是一个非常方便快捷的的系统。
2系统分析
2.1设计目的
1、为了能够为用户提供更方便准确的查询工具。
2、为了系统的把前后的知识连贯的学会应用,了解一个地图是怎么用C语言的形式表达存储的。
3、为了更够更好掌握Floyd和Dijkstra算法,并学以致用,尽可能的为人们带来方便。
2.2需求分析
随着学校的不断发展,基础建设日益完善,校园面貌的改变亦是随之日新月异。
桂林电子科技大学为了进一步扩大学校的知名度,有必要为每年报到的学生和来访者提供更直接、更方便的服务,良好的服务可以让新生、新生家长及来访者更好更真实地了解的桂林电子科技大学的风貌,所以,设计一个校园导游咨询系统是很有必要的。
再者,近年来,桂林电子科技大学各项工作开展迅速,工作内容更加复杂化,加之学校的不断扩建,使得桂电正逐步向现代大学方向靠拢。
而现代大学的突出特征之一就是具备开放性,与外界的交流将逐渐增多,来访者将踏入校园参观、办理各项事务。
可见,校园导游咨询系统的设计和实现是非常有必要的。
在改革开发的今天,全国上下都在学习“科学发展观”,桂电可以说是一个比较年轻的本科院校,乘着改革开放的春风,把科学发展观落实到各项工作中,学校很有必要对校园规划信息化,以最直接的方式或平台展示给学院师生乃至全国学生和家长。
一来扩大学院的知名度,二来开放学习,接受外界人士对于校园规划等各种好的建议,从而更好的建设桂林电子科技大学。
一个学校的校园规划在整个校园的环境建设的过程中占据举足轻重的地位,所以,我们有理由和有必要设计这样一个校园导游咨询系统,给外来参观者提供便利的同时来了解桂电,努力把桂电打造成一所高水平、有特色、有影响的地方本科院校而出一份力。
桂电校园傍山依水而建,学校的大部分建筑都建设在秀丽的桂林风景区内,校园环境优美,地理位置得天独厚,给校园增添几分自然景象的同时也带来一些不便,部分建筑物的寻找,需要熟悉校园才能在最短时间找到,所以学院有必要设计一个界面简洁美观、功能齐全、操作方便的校园导游咨询系统。
目前流行的导游咨询系统,普遍存在以下几个问题:
(1)侧重于多媒体的演示,虽然界面丰富.但缺少景点之间的地理关系的分析和应用。
(2)即使使用地图来说明景点间的相对位置关系,但无法选择两点间的最短路径和求景点间最短距离。
(3)即使使用电子地图,能进行简单的整体放大、缩小、移动操作,但对局部的地理区域,地理对象的操作,如景点的查询,则难以完成,因此缺少了灵活性。
根据以上特点,本文将采用以简单化的语言来编译导游系统。
该系统主要针对校外人员设计,系统界面简单易用。
2.3设计内容
本系统为桂林电子科技大学的一个校园导游图,针对用户实际需要,为用户提供各种服务的信息查询。
(1)设计桂林电子科技大学校园平面图,所含的景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;
以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
(4)必须具有校园平面图的修改和扩充功能(即某些景点坐标的修改和景点个数的增加)。
(5)景点查询功能:
能查询景点的坐标,景点概况等
(6)各景点的随机标注位置的功能。
2.4概要设计
1、首先用邻接矩阵存储校园图。
2、用数据结构知识创建校园图。
3、先手动给校园图赋上相关信息(景点名称、代号、简介),坐标、路径及路径长度。
得到一个模拟的校院图。
4.利用C语言知识编写查找景点相关信息的程序。
5.利用费洛伊德算法计算任意两点之间的最短路径。
6.利用迪杰斯特拉算法计算任意一个景点到其他景点的最短路径。
7.利用从语言知识修改和增加景点信息。
8.最后用一个主函数main测试各项输出。
2.5详细设计
2.5.1主函数的设计
基于程序的操作要求,对于主函数的设计首先是显示一个可视化的操作界面提醒用户进行相关的操作和提示用户其可供选择的景点的名称,便于其在后面的操作过程当中能够快速方便的找到其需要查找的景点的名称,当运行主函数,则会调用Maze()函数,选择相应操作而后进入到每一个操作界面当中,从而实现所需要的功能。
2.5.2查找函数的设计
当游客选择了要查找景点的信息的介绍这一项功能的时候,就会进入到查找的界面,对于查找景点信息就是利用Search()函数,当游客输入景点的名称的时候看其是否与文件当中的数据相匹配,如果有则输出它的介绍,如果没有则输出错误的提示提醒游客进行相关的操作来进入到正确的操作过程当中。
2.5.3查找最短路径函数的设计
对于查找最短路径的这一项功能,则是利用费洛伊德函数以及迪杰斯特拉函数。
下面是迪杰斯特拉算法的简要阐述
(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcs[i][j]表示弧(vi,vj)上的权值。
若(vi,vj)不存在,则置arcs[i][j]为无穷大。
那么,从v出发到图上其余各个定点vi可能到达的最短路径长度的初始值为:
D[i]=arcs[v][i];
(2)选择vj,使得D[j]=Min{D[i]|vi∈V–S}vj就是当前求得的一条从v出发的最短路径的终点。
令S=S∪{j};
(3)修改从v出发到集合V–S上任意顶点vk可到达的最短路径的长度。
如果D[j]+arcs[j][k]<
D[k]则修改D[k]为D[k]=D[j]+arcs[j][k];
(4)重复操作
(2)、(3)共n–1次,由此求得从v到图上其余各个顶点的最短路径是依路径长度递增的序列。
从而求得了从一个景点到另一个景点的最短路径的问题。
部分代码如下:
voidShortestPath_DIJ()
{
intv,w,i,min,t=0,x,flag=1,v0;
intfinal[20],D[20],p[20][20];
while(flag)
{
printf("
请输入一个起始景点编号:
"
);
scanf("
%d"
&
v0);
if(v0<
0||v0>
G.vexnum)
景点编号不存在!
请重新输入景点编号:
}
if(v0>
=0&
&
v0<
flag=0;
for(v=0;
v<
G.vexnum;
v++)
final[v]=0;
D[v]=G.arcs[v0][v].adj;
for(w=0;
w<
w++)
p[v][w]=0;
if(D[v]<
INFINITY)
p[v][v0]=1;
p[v][v]=1;
D[v0]=0;
final[v0]=1;
for(i=1;
i<
i++)
min=INFINITY;
if(!
final[w])
if(D[w]<
min){v=w;
min=D[w];
}
final[v]=1;
final[w]&
(min+G.arcs[v][w].adj<
D[w]))
D[w]=min+G.arcs[v][w].adj;
for(x=0;
x<
x++)
p[w][x]=p[v][x];
p[w][w]=1;
if(v0!
=v)printf("
%s"
G.vexs[v0].name);
if(p[v][w]&
w!
=v0)printf("
-->
G.vexs[w].name);
t++;
if(t>
G.vexnum-1&
v0!
=v)printf("
总路线长%dm\n\n"
D[v]);
以下为费洛伊德算法的阐述和部分代码:
费洛伊德(Floyd)提出的这种算法仍用邻接矩阵cost表示带权有向图。
如果从vi到vj有弧,则从vi到vj存在一条长度为cost[i][j]的路径,该路径不一定是最短路径,需要进行n次试探。
首先考虑路径(vi,vl,vj)是否存在(即判别弧<
vi,vl>
和<
vl,vj>
是否存在),如果存在,则比较<
的路径长度,取较短者为从vi到vj的中间顶点序号不大于1的最短路径。
在路径上再增加一个顶点v2,若(vi,…,v2)和(v2,…,vj)分别是当前找到的中间顶点序号不大于1的最短路径,则(vi,…,v2,…,vj)就有可能是从vi到vj的中间顶点的序号不大于2的最短路径。
将它和已经得到从vi到vj中间顶点序号不大于1的最短路径相比较,从中选出长度较短者作为从vi到vj中间顶点序号不大于2的最短路径之后,再增加一个顶点v3,继续进行试探,依次类推。
在一般情况下,若(vi,…,vk)和(vk,…,vj)分别是从vi到vk和从vk到vj的中间顶点序号不大于k-1的最短路径,则将(vi,…,vk,…,vj)和已经得到的vi到vj且中间顶点序号不大于k-1的最短路径相比较,取其长度较短者作为从vi到vj的中间顶点序号不大于k的最短路径。
如此重复,经过n次比较后,最后求得的必是从vi到vj的最短路径。
用此方法,可同时求得每对顶点间的最短路径。
综上所述,弗洛伊德算法的基本思想是递推地产生一个阶矩阵序列:
A0,A1,…Ak,…,An。
其中:
A0[i][j]=cost[i][j]
Ak[i][j]=Min{A(k-1)[i][j],A(k-1)[i][k]+A(k-1)[k][j]}
(1≤k≤n)
由上述公式可以看出,A1[i][j]是vi从vj到中间顶点序号不大于1的最短路径长度;
Ak[i][j]是从vi到vj中间顶点序号不大于k的最短路径长度;
An[i][j]是从vi到vj的最短路径长度。
还设置一个矩阵path,path[i][j]是从vi到vj中间顶点序号不大于k有最短路径上vi的一个邻接顶点的序号,约定若vi到vj无路径时path[i][j]=0。
由path[i][j]的值,可以得到从vi到vj的最短路径。
voidFloyd()
inti,k,j,flag=1;
for(i=0;
for(j=0;
j<
j++)
{
p[i][j]=-1;
if(G.arcs[i][j].adj!
=INFINITY)
p[i][j]=j;
D[i][j]=G.arcs[i][j].adj;
}
for(k=0;
k<
k++)
for(i=0;
for(j=0;
{
if((D[i][k]>
=INFINITY)||(D[k][j]>
=INFINITY))
continue;
if(D[i][j]>
(D[i][k]+D[k][j]))
{
D[i][j]=D[i][k]+D[k][j];
p[i][j]=p[i][k];
}
}
2.5.4修改函数的设计
对于修改函数的设计首先是显示一个可视化的操作界面提醒用户选择自己想要修改的内容,便于其在后面的操作过程当中能够快速方便的找到其需要查找的景点的名称。
本系统采用的是ChangUND()函数,能够修改各种景点信息,实现用户所需要的功能。
2.5.5增加函数的设计
当选择了增加景点函数时,调用的是IncreUDN()函数,对于增加的
函数的设计首先是提醒用户增加景点的弧数,即它与那些其他景点可达,其后又提醒用户输入景点相关信息。
就这样将景点加入到校园平面图中,实现用户所需要的功能。
3功能分析
校园导游系统的主要功能如图:
图3-1校园导游系统的功能模块
1、浏览校园全景
用户需要浏览桂电的总体面貌,可以查询平面图中所所有景点的相关息(主要是景点的简单介绍)。
同时还可以查询所有景点的坐标,对校园有一个大体了解。
2、最短路径查询
用户游客通过终端可询问:
从某一景点到另一景点的最短路径,同时该系统还可以提供最短路程的相关数据,以便游客安排旅游时间和选择路线在最短路径的基础上,本地图还可以查询任意一丁点到其他所有景点的最短路径并显示出来。
3、景点查询
用户确定好地图上要去的景点后,可以查询平面图中所显示景点的相关信息(主要是景点的简单介绍)。
同时还可以查询所列景点的详细信息,进一步了解该景点的情况。
4、地图管理功能
由于桂电各项工作地迅速开展,学校的还有很多扩建的项目尚未完成,为了更准确的反应校园景观,该系统还可以对景点进行增加和修改,同时也可以对景点的各种信息进行处理。
本文采用的数据结构:
/*包含头文件*/
#include"
ArCell.h"
PATH.h"
#include<
stdlib.h>
stdio.h>
conio.h>
string.h>
/*定义符号常量*/
#ifndefPATH_H
#definePATH_H
#defineINFINITY10000
/*定义全局变量*/
intadj;
;
/*边的值*/
intp[100][100];
/*存放每对景点间的最短路径长度*/
intD[100][100];
/*存放后继顶点的下标值*/
#defineN20/*定义全局变量*/
voidFloyd(void);
/*费洛伊德求最短路径*/
voidprint(void);
/*坐标输出函数*/
voidSearch(void);
/*查询函数*/
intLocateVex(char*v);
/*通过标号取顶点函数*/
intIncreUDN(intNUM);
/*增加函数*/
intMaze(void);
/*坐标函数*/
voidShortestPath_DIJ(void);
/*迪杰斯特拉求最短路径函数*/
voidShowLoad(inta[][N]);
/*输出函数*/
voidChangUND(void);
/*修改函数*/
#endif
下图1-4为程序运行后的部分界面.
图3-2系统主界面
图3-3最短路径查询
图3-4查询某一景点的信息
图3-4浏览校园全貌界面
4所遇到的问题及关键解决
在编写程序的过程中,由于我自己的粗心以及在某方面知识的薄弱,我遇到了很多问题。
我通过上网查找资料,到图书馆查阅书籍,以及自己重新检查等方法解决了这些问题。
问题1:
当程序运行过后,所有的结果挤在一起,界面特别凌乱。
遇到了代码太乱,甚至分不清自己的大括号有没有匹配。
解决办法:
通过网上查找的方法,发现了system("
cls"
)清屏指令,将他加入到代码中去,大大提升了界面的美观性。
然后通过网络知道了,用Alt加F8健可以自动调节代码,带代码对齐,大大方便了我的编程,也提高了我代码的美观。
问题2:
经常回出现由标点符号造成的编译错误。
在输入的时候统一用默认的统一输入法,防止转化输入法造成的标点错误。
问题3,:
在查询最短路径的时候,我始终不能查到标号为0的顶点到其他顶点的信息。
由于自己编译时的一时疏忽,将输出函数中的判断条件if(x>
=NUM&
y>
y<
=NUM)写成了if(x>
0&
NUM&
NUM),通过自己的不断调试检查终于发现了错误并改正过来。
问题4:
在增家函数过后,系统却不能准确的识别已经增加的景点,输出的景点和我想要增加的不一致。
我通过查阅图书,发现自己缺
G.arcs[n][j].adj=INFINITY;
G.arcs[j][n].adj=INFINITY;
导致存路径的矩阵的D[10][10]两个没有直接路径的景点没有被赋值,程序运行错误。
问题5:
没有考虑到用户层面的使用。
我的课设指导老师告诉我们,vs2012编写的程序并不可以在其他的软件中中正常运行。
并详细的告诉了我们解决的办法。
这些都是我觉得特别印象深刻的小错误。
当然在写程序的过程中,我还遇到了很多小错误,这里我就不全部例举出来。
5系统特色及关键技术
在界面的显示上,以蓝色为背景的界面为使用户有一种亲切感。
选择的时候是使用大家都习惯的阿拉伯数字,方便输入,使用户和使用起来方便快捷。
每使用完一个功能,将主动跳出主选择界面供用户选择,避免了返回的操作,使操作变得方便快捷。
输入地图是点数和弧数可以随意输入,坐标也可以随意标注,这大大方便了地图的管理。
是一款非常有利于用户使用的系统软件。
在代码上,没有大量冗余,代码一直追求精简,追求考虑周详,尽可能的做到没有漏洞。
方便程序员查看代码,修改代码。
本系统设计充分利用c语言,在程序上实现该系统基本功能,总体上完成了界面显示和文本信息的结合。
通过Floyd算法较好的解决了求取最小路径的问题,本校园导游系统主要通过从桂林电子科技大学平面图中选取10个景点,然后抽象出一张无向有权图,图中顶点表示景点,边上的权表示景点间的距离。
实现了景点信息查询和最短路径查询以及景点的修改和增加。
从某种角度来说,该系统还是存在优越性,如最短路径的查询,除了可以查询两个景点间最短路径外,还可以查询某一景点到所有景点的最短路径。
从开发的角度来说,现在有较少数高校使用了校园导游系统,随着全球信息数字化,高校的开发性,有理由相信这套校园导游系统有很好的应用前景
6开发环境
本系统的开发是采用MicrosoftVisualStudio2012Ultimate旗舰版(vs2012),MicrosoftVisualStudio2012Ultimate旗舰版是一个最先进的开发解决方案,它使各种规模的团队能够设计和创建出使用户满意的应用程序。
在VisualStudio2012旗舰版(VS2012)中,通过使用灵活敏捷的规划工具(如容量规划、任务板和积压工作管理)并根据自身进度实现增量开发技术和敏捷方法;
使用高级建模、发现和体系结构工具,描述系统并帮助确保体系结构构想;
使用生产中的IntelliTrace、OperationsManagerConnector和PreemptiveAnalytics,使开发团队和运营团队能够较好地协作;
通过从部署的软件生成可对其采取措施的Bug来改进质量和减少解决时间,使运营人员高效协作,为开发人员能够深入了解生产问题提供数据。
本系统采用的是C语言编程。
C语言是一种通用的、面向过程式的编程语言,广泛用于系统与应用软件的开发。
因为具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序员中备受青睐。
它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
经实践证明,使用该软件开发的桂林电子科技大学尧山校区校园导游系统是一款非常成熟的软件。
7总结
经过了两个星期多的课程设计,我对程序设计有了全新的认识,尤其是对一个大型的程序,当我们拿到手时,应该怎么去分析它,先干什么,再干什么,最后干什么,这对我是一个很大的提升。
选定一个项目后,我们应该先对这个项目进行概要的分析、设计,分析出这个程序是干什么用的,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 导游 系统 数据结构 报告