课程设计校园导航问题.docx
《课程设计校园导航问题.docx》由会员分享,可在线阅读,更多相关《课程设计校园导航问题.docx(25页珍藏版)》请在冰豆网上搜索。
课程设计校园导航问题
课程设计报告书
专业:
计算机科学与技术
课程设计名称:
《数据结构课程设计》
题目:
校园导航问题
班级:
学 号:
姓 名:
同组人员:
指导老师:
完成时间:
摘要
校园导航要求每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
要用“邻接矩阵”来存储各点间的距离,然后用floyd算法求出最短路径。
所以采用工程思想,将系统共分以下五个模块:
节点数据结构类型、创建导航图函数、最短路径导航函数、查询函数声明、主菜单。
关键词:
数据结构;算法设计
目录
目录
第一章开发环境和开发工具1
1.1C语言简介....1
1.2开发背景2
1.3开发环境2
第二章算法思想3
2.1系统需求分析3
2.2系统总体设计4
2.2.1系统设计目标4
2.2.2开发设计思想4
2.2.3系统功能模块设计4
2.3算法思想描述4
第三章算法实现6
3.1数据结构6
3.2程序模块8
3.3各模块之间的调用关系9
3.4源程序代码10
第四章测试与分析16
4.1测试数据选择16
4.2测试结果分析20
总结21
心得体会21
参考文献22
第一章开发环境和开发工具
1.1C/C++简介
计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序。世界上第一种计算机高级语言诞生于1954年,它是FORTRAN语言。先后出现了多种计算机高级语言。其中使用最广泛、影响最大的当推BASIC语言和C语言。它是一种使用非常广泛的计算机编程语言。
C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
C++是由AT&TBell(贝尔)实验室的BjarneStroustrup博士及其同事于20世纪80年代初在C语言的基础上开发成功的。C++保留了C语言原有的所有优点,增加了面向对象的机制。C++是由C发展而来的,与C兼容。用C语言写的程序基本上可以不加修改地用于C++。从C++的名字可以看出它是C的超越和集中。C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。C++支持面向过程的程序设计,也支持基于对象的程序设计,又支持面向对象的程序设计。
以后我们将介绍基于对象的程序设计。
包括类和对象的概念、类的机制和声明、类对象的定义与使用等。
这是面向对象的程序设计的基础。
基于对象就是基于类。
与面向过程的程序不同,基于对象的程序是以类和对象为基础的,程序的操作是围绕对象进行的。
在此基础上利用了继承机制和多态性,就成为面向对象的程序设计(有时不细分基于对象程序设计和面向对象程序设计,而把二者合称为面向对象的程序设计)。
1.2开发背景
随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。
采用计算机进行信息化管理已成为人们出行重要的工具,而信息管理的全面自动化、信息化则是其中重要的组成部分。
信息管理的好坏对于出行者来说至关重要。
因此,本文所研究的信息系统具有一定的使用价值和现实意义。
1.3开发环境
本文所采用的开发环境:
Windows2000以上操作系统
VisualC++6.0以上编译环境
第二章算法思想
2.1系统需求分析
此次课程设计的主要内容是校园导航系统,所谓系统其实也不尽然,只不过是个小小的提示,为来访的客人提供各种信息查询服务。
主要包括:
①查看学校的全景图②各个景点的简介③查看某一景点到其它所有景点的最短路径④查询任意两个景点之间的最短路径。
一些约定:
⑴对于功能①的输入形式是没什么要求的,主要就是根据菜单的提示输入相应的数字选择相应的功能;对于功能②的输入形式的要求也比较简单,要查询某一景点的简介直接输入其对应的编号即可;对于功能③的输入形式的要求同功能①;对于功能④只需要输入想要查看的起始景点的编号即可;对于功能⑤只需要输入起始景点和目的景点的编号即可。
此程序在输入形式上都没什么特殊的要求只是一些简单的数字就可以搞定一切。
⑵功能①③就是输出由字符构成的一幅简易图,形式比较单一;景点的简介方面输出景点的简单信息就可以了;要查询最短路径的话输出的自然是从起始景点到目的地的最短路径中所途经的各个景点及距离。
⑶本程序所能达到的功能就是前面所提到的①—④中的功能。
2.2系统总体设计
2.2.1系统设计目标
●景点显示(显示景点的编号、名称以及简介)
●最短路径求解(求一点到所有点之间的路径及长短,求始终两点之间的路径及长短)
●景点查找(有选择的查找你所想了解的景点)
2.2.2开发设计思想
基于以上系统设计目标,本文在开发校园导航系统时遵循了以下开发设计思想:
●采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。
●尽量达到操作过程中的直观、方便、实用、安全等要求。
●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
●系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
2.2.3系统功能模块设计
采用工程思想,将系统共分以下五个模块:
节点数据结构类型、创建导航图函数、最短路径导航函数、查询函数声明、主菜单。
2.3算法思想描述
本课程设计的内容为设计学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
如图1,图中已标出主要路线,各路线的长度如图1中所示。
显然要解决这一问题要用“邻接矩阵”来存储各点间的距离,然后用Dijkstra求出最短路径。
3
124
567
98
1112
13
14
图一
第三章算法实现
3.1数据结构
1.节点数据结构类型
#defineNum15/*景点个数*/
#defineMaxedge5000/*定义路径的无穷大*/
typedefstruct
{
charname[14];/*定义景点名称*/
intnumber;/*景点编号*/
charintroduce[100];/*景点描述*/
}vertex;/*定义顶点类型*/
vertexver[Num];/*存放顶点的一维数组,数组地领个单元没有用*/
intedge[Num][Num];/*存放路径的长度*/
intshortest[Num][Num];/*定义全局变量存储最小路径*/
intpath[Num][Num];/*定义存储路径*/
2.创建导航图函数
voidinit()
{
inti,j;
函数描述:
主要将每个节点进行命名、每个顶点到其他所有定点的路径值用邻接矩阵进行存储。
例如:
ver[1].number=1;
strcpy(ver[1].name,"北门");
strcpy(ver[1].introduce,"河南城建北门,面朝北");
作用:
使1号定点命名为“北门”;
描述为“河南城建北门,面朝北”;
3.最短路径导航函数
voidfloyd()
{
inti=1,j=1,k=1,l=1;
for(i=1;i<=Num;i++)
{
for(j=1;j<=Num;j++)
{
shortest[i][j]=edge[i][j];
path[i][j]=0;
}
}
for(k=1;k<=Num;k++)
{
for(i=1;i<=Num;i++)
{
for(j=1;j<=Num;j++)
{
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{
shortest[i][j]=(shortest[i][k]+shortest[k][j]);
path[i][j]=path[j][i]=k;
}
}
}
}
}
函数描述,用floyd算法通过图的权值矩阵求出图中的每两点间的最短路径矩阵。
还引入一个后继节点矩阵path来记录两点间的最短路径。
5.主菜单
charshow1()
描述;显示导航图中的所有导航节点,能够快速方便的对各个地点进行导航。
先执行main函数。
3.2程序模块
3.3各模块之间的调用关系
3.4源程序代码
#include
#include
#defineNum15/*景点个数*/
#defineMaxedge5000/*
typedefstruct
{
charname[14];/*景点名称*/
intnumber;/*景点编号*/
charintroduce[100];/*景点描述*/
}vertex;/*定义顶点的类型*/
vertexver[Num];/*图中的顶点,即为景点*/
intedge[Num][Num];/*图中的边*/
intshortest[Num][Num];/*景点间最短距离*/
intpath[Num][Num];
voidshow1()/*主菜单*/
{
printf("\t\t\t*******************河南城建学院平面图*****************\n\n");
printf("\t塑胶操场\n");
printf("\t┏━━━━北门━行政楼┃━━━━━━体育馆\n");
printf("\t┃┃┃┃\n");
printf("\t教┃教┃操场\n");
printf("\t学┃学教┃\n");
printf("\t区┃区学━━南门\n");
printf("\t┏━━━━━━━━┃━━━━━━━━━━区\n");
printf("\t┃喷泉广场┃\n");
printf("\t服━━━━┏━━━━━━━━━┃━━━━━━━━━━\n");
printf("\t务山顶┃图书馆\n");
printf("\t区操场┃\n");
printf("\t┃━━━宿舍楼━━━━━━━━━━\n");
printf("\t┃\n");
printf("\t西门\n\n");
}
voidshow2()/*景点编号*/
{
inti=1;
for(i=1;i<=Num;i++)
{
printf("%d,%s\t",i,ver[i].name);
}
printf("\n\n");
}
voidinit()
{
inti,j;
ver[1].number=1;
strcpy(ver[1].name,"北门");
strcpy(ver[1].introduce,"河南城建北门,