校园导航系统课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

校园导航
课程设计报告书专业:计算机科学与技术
课程设计名称:《数据结构课程设计》
题目:校园导航问题
班级:
学号:
姓名:
同组人员:
指导老师:
完成时间:2012年2月17日
摘要
校园导航问题是基于校园中的不同的景点,从陌生人的角度,为来往的客人提供校园景点相关信息的查询以及为来往的客人提供校园中任意景点的问路查询,以便客人能用最短的时间从某一地点到达想要去的地方。

大大节约了旅客参观校园的时间。

本文是采用C++作为开发语言,又最大程度上用了C语言的有关的语法。

以visual c++为开发工具。

旨在实现校园导航系统中,学校的简介,景点的介绍,路线查询等基本的问题。

为来往客人参观校园提供方便。

关键词:C++;C;visual c++;校园导航
目录
第一章开发环境和开发工具
1.1C/ C ++语言简介
C语言是一种计算机程序设计语言。

它既具有高级语言的特点,又具有汇编语言应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。

具体应用比如单片机以及嵌入式系统开发。

C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。

它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。

开发背景
随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。

采用计算机进行校园导航已成为衡量校园数字化的重要标志。

校园导航效率的好坏对于来校参观的客人和学校管理者来说都至关重要,在很大程度上影响着校园的数字化建设和学校的影响力。

因此,本文所研究的校园导航系统具有一定的使用价值和现实意义。

开发环境
本文所采用的开发环境主要是基于c++的visual stadio c++。

它是一个系统的集成开发环境。

很适合C\C++程序的开发。

我们日常的学习和生活中大多就用这个开发环境进行学习和编程。

第二章算法思想
系统需求分析
1、设计你的学校的校园平面图,所选的景点不少于10个。

以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

2、为来往客人提供图中任意景点相关信息的查询。

3、为来往的客人提供图中任意景点的问路查询,即查询任意两个景点间的一条最短的简单路径。

根据以上分析和抽象可得到本系统的抽象数据类型如下:
ADT graph{
数据对象 R:V是校园中景点的集合,称为顶点集。

R={VR}
VR={<v,w,>|v,w∈V且P(v,w),(v,w)表示从景点v到景点w的路径长度基本操作 P:
Creatgraph(&G,V,VR)
初始条件:V是图的顶点集,VR是图中边的集合。

操作结果:按V和VR的定义构造图G。

Output(G)
初始条件:图G已经存在。

操作结果:打印出图的信息
ShortestPath(G,v)
初始条件:图G已存在,v是图中的一个顶点。

操作结果:返回从v出发到图中任意顶点的最短的路径。

}ADT graph;
系统总体设计
2.2.1 系统设计目标
本文研究开发的校园导航系统用于支持来往校园参观的客人提供最省时的导航服务,有如下三个方面的目标:
1、为来往的客人提供校园的简介。

2、为来往的客人提供校园中各景点的简介,以及各景点的距离等情况。

3、为来往的客人提供到达目的地的最短的路线。

2.2.2 开发设计思想
基于以上系统设计目标,本文在开发校园导航系统时遵循了以下开发设计思想:
1、采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。

2、尽量达到操作过程中的直观、方便、实用、安全等要求。

3、系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。

2.2.3 系统功能模块设计
本系统分为四个模块:菜单模块、景点介绍模块、路径查询模块、最短路径模块。

得到如图3-1所示的系统功能模块图。

图3-1系统功能模块图
算法思想描述
1、迪杰斯特拉算法思想:
按路径长度递增次序产生最短路径算法:
把V分成两组:
(1)S:已求出最短路径的顶点的集合
(2)V-S=T:尚未确定最短路径的顶点集合
将T中顶点按最短路径递增的次序加入到S中,
保证:(1)从源点V0到S中各顶点的最短路径长度都不大于
从V0到T中任何顶点的最短路径长度
(2)每个顶点对应一个距离值
S中顶点:从V0到此顶点的最短路径长度
T中顶点:从V0到此顶点的只包括S中顶点作中间
顶点的最短路径长度
依据:可以证明V0到T中顶点Vk的最短路径,或是从V0到Vk的
直接路径的权值;或是从V0经S中顶点到Vk的路径权值之和
2、邻接矩阵建立有无向权图的算法思想:
用两个数组分别存储数据元素的信息和数据之间的关系的信息其形式描述如下:
#define Max 32767escription);
getchar();
getchar();
break;
case '2':
system("cls");
pingmu();
printf("\n\n\t\t\t请选择起点景点(1~10):");
scanf("%d",&v0);
printf("\t\t\t请选择终点景点(1~10):");
scanf("%d",&v1);
ShortestPath(v0); .\n");
getchar();
getchar();
break;
case '3':search();
break;
case'5':
PrintMGraph();
printf("\n\n\t\t\t\t请按回车键继续...\n");
getchar();
getchar();
break;
};
}while(ck!='e');
}
2.主菜单
char Menu() 校简介┃\n");
printf("\t\t┃ 2.查询景点路径┃\n");
printf("\t\t┃ 3.查询景点信息┃\n");
printf("\t\t┃ 5.查询各景点之间的距离┃\n");
printf("\t\t┃ e.退出┃\n");
printf("\t\t┃┃\n");
printf("\t\t┗━━━━━━━━━━━━━━━━━━━┛\n");
printf("\t\t\t\t请输入您的选择:");
scanf("%c",&c);
if(c=='1'||c=='2'||c=='3'||c=='5'||c=='e')
flag=0;
}while(flag);
return c;
}
3.查询子菜单
char SearchMenu() 询景点信息
void search() umber)
{
printf("\n\n\t\t\t您要查找景点信息如下:");
printf("\n\n\t\t\t%-25s\n\n",[i].description);
printf("\n\t\t\t按任回车返回...");
getchar();
getchar();
break;
}
}
if(i==NUM)
{
printf("\n\n\t\t\t没有找到!");
printf("\n\n\t\t\t按回车键返回...");
getchar();
getchar();
}
break;
case '2':
system("cls");
pingmu();
introduce();
printf("\n\n\t\t请输入您要查找的景点名称:");
scanf("%s",name);
for(i=1;i<NUM;i++)
{
if(!strcmp(name,
[i].sight))
{
printf("\n\n\t\t\t您要查找景点信息如下:");
printf("\n\n\t\t\t%-25s\n\n",[i].description);
printf("\n\t\t\t按回车键返回...");
getchar();
getchar();
break;
}
}
if(i==NUM)
{
printf("\n\n\t\t\t没有找到!");
printf("\n\n\t\t\t按回车键返回...");
getchar();
getchar();
}
break;
}
}while(c!='e');
}
5.创建图的函数
void CreateUDN(int v,int a) 打印出邻接矩阵
void PrintMGraph()
{
int i,j;
cout<<"\n
====================================================================\n\n ";
for(i=1;i<;++i)
{
cout<<[i].sight<<" ";
}
cout<<endl;
for(i=1;i<;++i)
{
cout<<"\n\n"<<[i].sight<<" ";
for(j=1;j<;++j)
{
if[i][j].adj==Max)
cout<<" no ";
else
cout<<" "<<[i][j].adj;
}
}
cout<<"\n\n\n\n====================================================== ====================================\n\n\n";
7.迪杰斯特拉算法
void ShortestPath(int num) dj;dj)<D[w]))dj;
for(t=0;t<NUM;t++)
P[w][t]=P[v][t];
P[w][w]=1;
}
}
}
8、输出:
屏幕输出函数:void pingmu();
最短路线输出函数void output;
各模块之间的调用关系上
模块调用关系如图3—2所示:
图3—2模块调用关系图
源程序代码
#include<>
#include ""
#include ""
#include ""
#define Max 32767
#define NUM 11
typedef struct ArcCell{
int adj; escription);
getchar();
getchar();
break;
case '2':
system("cls");
pingmu();
printf("\n\n\t\t\t请选择起点景点(1~10):");
scanf("%d",&v0);
printf("\t\t\t请选择终点景点(1~10):");
scanf("%d",&v1);
ShortestPath(v0); .\n");
getchar();
getchar();
break;
case '3':search();
break;
case'5':
PrintMGraph();
printf("\n\n\t\t\t\t请按回车键继续...\n");
getchar();
getchar();
break;
};
}while(ck!='e');
}
char Menu() 校简介┃\n");
printf("\t\t ┃ 2.查询景点路径┃\n");
printf("\t\t ┃ 3.查询景点信息┃\n");
printf("\t\t ┃ 5.查询各景点之间的距离┃\n");
printf("\t\t ┃ e.退出┃\n");
printf("\t\t ┃┃\n");
printf("\t\t ┗━━━━━━━━━━━━━━━━━━━┛\n");
printf("\t\t\t\t请输入您的选择:");
scanf("%c",&c);
if(c=='1'||c=='2'||c=='3'||c=='5'||c=='e')
flag=0;
}while(flag);
return c;
}
char SearchMenu() umber)
{
printf("\n\n\t\t\t您要查找景点信息如下:");
printf("\n\n\t\t\t%-25s\n\n",[i].description);
printf("\n\t\t\t按任回车返回...");
getchar();
getchar();
break;
}
}
if(i==NUM)
{
printf("\n\n\t\t\t没有找到!");
printf("\n\n\t\t\t按回车键返回...");
getchar();
getchar();
}
break;
case '2':
system("cls");
pingmu();
introduce();
printf("\n\n\t\t请输入您要查找的景点名称:");
scanf("%s",name);
for(i=1;i<NUM;i++)
{
if(!strcmp(name,
[i].sight))
{
printf("\n\n\t\t\t您要查找景点信息如下:");
printf("\n\n\t\t\t%-25s\n\n",[i].description);
printf("\n\t\t\t按回车键返回...");
getchar();
getchar();
break;
}
}
if(i==NUM)
{
printf("\n\n\t\t\t没有找到!");
printf("\n\n\t\t\t按回车键返回...");
getchar();
getchar();
}
break;
}
}while(c!='e');
}
void CreateUDN(int v,int a) umber=i; ight="学校简介";
[1].sight="校大门";
[2].sight="教学楼";
[3].sight="中心广场";
[4].sight="山顶操场";
[5].sight="学生宿舍";
[6].sight="图书馆";
[7].sight="体育馆";
[8].sight="二食堂";
[9].sight="服务楼";
[10].sight="北门";
dj=Max;
[i][j].info=NULL;
}
}
dj=[4][1].adj=200;
[1][3].adj=[3][1].adj=500;
[3][5].adj=[5][3].adj=100;
[3][10].adj=[10][3].adj=400;
[4][6].adj=[6][4].adj=200;
[2][5].adj=[5][2].adj=200;
[2][4].adj=[4][2].adj=300;
[5][7].adj=[7][5].adj=500;
[4][6].adj=[6][4].adj=400;
[4][7].adj=[7][4].adj=600;
[6][8].adj=[8][6].adj=500;
[7][8].adj=[8][7].adj=300;
[6][9].adj=[9][6].adj=500;
}
ight<<" ";
}
cout<<endl;
for(i=1;i<;++i)
{
cout<<"\n\n"<<[i].sight<<" ";
for(j=1;j<;++j)
{
if[i][j].adj==Max)
cout<<" no ";
else
cout<<" "<<[i][j].adj;
}
}
cout<<"\n\n\n\n======================================================= ===================================\n\n\n";
}
void introduce() escription="河南城建学院坐落在国家旅游城市\n\n\t\t国家历史文化名城--平顶山,校园椰风流韵、芳林叠翠、风景秀丽。

\n\n\t\t经过二十多年的发展,学校现已形成以城建为主要办学特色\n\n\t\t文、管、理、经等多学科协调发展的格局,是河南省培养城建类\n\n\t\t高级应用型人才的重要基
地.目前,学校确立了立足河南\n\n\t\t逐渐面向全国服务面向定位,充分发挥学校特色\n\n\t\t积极扩大对外交流与合作,学术交流日趋\n\n\t\t频繁,国际影响不断增强\n\n\t\t下面几点是河南城建学院的办学特色:\n\n\t\t办学历史较为悠久\n\n\t\t学科专业较为齐全\n\n\t\t师资队伍素质优良\n\n\t\t 教学成果较为丰硕\n\n\t\t科研水平不断提高\n\n\t\t校园文化丰富活跃
\n\n\t\t人才培养成效显着\n\n\t\t合作交流日趋频繁\n\n\t\t";
[1].description="学校大门,对面是祥云公园\n\t\t是我们学生休闲娱乐的好
地方";
[2].description="计教系办公大楼,计算机科学技术的科研中心";
[3].description="这里是学校的主要的风景区,是学校的标志之一";
[4].description="在这破地方什么鸟人都有,拿书呐喊的,失恋的,打KISS
的,暗送秋波的,\n\t\t可千万别来这鸳鸯之地,你来了,一个电灯泡亮那儿\n\t\t你说人家两口子咋亲热啊,还是闪为上策";
[5].description="学生生活的天堂";
[6].description="河南城建学院信息中心,各种书籍应有尽有";
[7].description="排球篮球比赛,晚会,各种报告,开学典礼举行都在这破地
方举行";
[8].description="老师和同学们吃饭的地方,这里的饭比一食堂好吃,菜不错
\n\t\t看你肚皮有没有猪八戒大,你要是吃不饱可以考虑来这吃,准让你撑死";
[9].description="学生可以在这里买到日常必须品。

";
[10].description="北门雄伟壮观,十分气派!";
}
}
void pingmu() ight,1); dj;dj)<D[w]))dj;
for(t=0;t<NUM;t++)
P[w][t]=P[v][t];
P[w][w]=1;
}
}
}
void output(int sight1,int sight2) .
{
printf("\n\t从%s到%s的最短路径是
",[sight1].sight,[sight2].sight);\n\n\t",D[a]); ight); dj<32767&&P[a][b])
ight); 总结
1、特色:我们组在完成设计球最短路径的函数后,又实现了交互界面的设计,方便用户个不够好的使用本程序进行在校导航。

另外我们还实现了查询校园中各景点间的距离以及信息查询等功能。

2、改进之处:在我们设计的导航系统中不能实现增加景点、删除道路以及修改景点信息等功能。

另外在见图的时候算法的时间复杂度太大。

如果能用邻接多重表的存储方式建立图的其时间复杂度会更好,算法也更加先进。

3、总结:本次数据结构课程设计针对具体的项目来进行需求分析、测试计划、概要设计、详细设计、测试分析等具体的步骤走下来,我从中收获巨大。

首先在编写函数之前要充分利用各种资源、其次。

应该更详细的考虑实际情况。

才能使程序更具有实用性。

当然更多的是组员之间要有合作的精神。

编程是一件和枯燥的事情,但是只要我们认真的专研,我们会从中学到很多在课本上无法学到的东西,同时也能从中感受到编程的乐趣。

在今后的工作、学习中我将认真总结经验教训,努力使自己成为一名技术过硬、工作严谨、思维活跃的工程人员,为提高人们的生活质量做出更大的贡献。

心得体会
通过本次课程设计,我更熟练的应用了C语言中函数调用、函数声明、函数自定义类型、全局变量、局部变量······,以及数据结构中图和迪杰斯特拉算法。

图能够在计算机中存在,首先要知道他有哪些具体化、数字化的信息,比如说权值、顶点的个数等。

这也就是说明了要想把生活中的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存储。

又涉及到定点之间的联系。

图分为有向图和无向图,而无向图又是有向图在权值双向想等下的一种特例。

而在系统中我所选用的数据结构就是无向有权图。

迪杰斯特拉算法始终都是核心内容,从顶点一步一步找最近的路线并与其直线距离相比较,但是,在计算机中实现这么一个简单的想法就需要涉及到很多的专业知识。

为了完成设计在前期的工作中基本都是以学习C语言为主,所以浪费了很多
的时间。

比如在程序中打印出最短路径经过的景点。

在起初的时候只能以数字代替景点的名称。

却无法直接打出要经过的景点的名称。

最后通过查资料最终完成了程序的设计任务。

通过课程设计再次夯实了C语言基础以及数据结构的应用能力,让我看清了自己的能力以及不足之处,看到了以后编程该走的路找到了通向成功的航标。

其实这次更大的收获是编程必须有耐心,程序运行有很多漏洞不足是不可避免的,但是只要你有耐心,一步一步脚踏实地的做下去,一个一个语法的改总会成功。

参考文献
[1]严蔚敏、吴为民.数据结构(C语言版).北京:清华大学出版社.2007
[2]钱能.C++程序设计教程.北京.清华大学出版社.1999
[3]邓文华.数据结构实验和实训教程.北京.清华大学出版社.2011
[4] 高寒弢. 最短路径算法在交通咨询系统中的应用.成都.计算机与信息技术.2011。

相关文档
最新文档