当前位置:文档之家› 校园导航系统

校园导航系统

课程设计课程名称软件工程题目名称校园导航系统专业班级2012级网络工程应用学生姓名柴安康学号 51202031022指导教师储德锋二○一五年六月一日任务书分工协作说明目录摘要 (5)一、需求分析 (6)(一)问题提出 (6)(二)本系统所涉及的知识点 (6)(三)功能以及要求 (6)(四)概要设计 (7)(五)软件功能描述 (7)1、定义模块 (7)2、导航图建立模块 (7)3、求最短路径模块 (7)4、主菜单 (7)二、功能设计 (8)(一)算法设计 (8)1、程序所能达到的功能 (8)2、输入的形式和输入值的范围 (8)3、输出的形式 (8)4、测试数据 (8)(二)模块图 (9)(三)校园平面图及相关景点信息的建立 (9)三、程序代码设计 (10)(一)有向网节点结构体类型定义: (10)(二)主程序和其它主要函数伪码算法 (10)1、主程序 (10)2、赋值init函数 (11)3、输出蚌埠学院平面图的map函数 (13)5、输出地点信息的information函数 (13)6、最短路径floyd函数 (14)7、输出路径way算法 (15)8、调用floyd和way的最短路径shortestpath算法 (15)四、程序设计总结 (17)调试结果 (17)五、源代码 (19)六、心得体会 (25)参考文献 (25)摘要为了来访蚌埠学院的访客能够更方便的了解我校的景点,便于参观也减少导游人员的数量,于是编写了这个校园导航系统。

这个程序的实现加深了对软件编译的了解及C++的巩固,同时为我校加快现代化,智能化进程贡献一份力,为全面建设蚌埠学院添砖加瓦。

这个校园导航系统利用程序算法设计里的图来解决它将校园景点作为图的结点将景点间的路径作为图的边路径距离作为边的权值。

这样一来求两景点间最短路径的问题就抽象成了求图中一结点到另一结点的问题。

这也是计算机代替人工的一个实例也充分体现算法的重要体现。

关键词蚌埠学院,平面图,校园导航,软件编译,C++一、需求分析现在大学占地面积越来越大,建筑物越来越多,功能越来越多样,校内的道路也是纵横交错,校园导航系统可以帮助用户更加快速了解学校道路,建筑布局及建筑物的基本信息(用户主要是新生、家长、教职工等)在帮助用户了解学校道路、实现导航功能的基础上。

校园导航还录入学校各个建筑物的信息,以便使用者更方便快捷地找到目的地。

根据校园信息设计了学校的平面图,包括9个主要场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

基本要求(1)设计校园平面图,在校园景点选8个左右景点。

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

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

(3)为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。

实现提示一般情况下,校园的道路是双向通行的,可设计校园平面图是一个无向网。

顶点和边均含有相关信息。

(一)问题提出编写一个校园导航系统,主要是用来方便来访我校的访客能够更方便的了解我校的地图与位置。

(二)本系统所涉及的知识点C++,模块,循环,函数,最短路径,矩阵(三)功能以及要求1、建立校园平面图,图中包括景点名称、代号、简介等信息;2、输入景点名称可以知道该景点的相关信息;3、输入两个景点的名称可以找出之间的具体线路和最短距离;4、来访客人可根据系统任意景点相关信息的查询;5、输出。

(四)概要设计用图类的存储结构建立带权值的有向图,求两景点之间最短路径,输出图的临界矩阵。

本次设计其实就是数据结构中图类的问题。

将校园景点作为图的结点,将景点间的路径作为图的边,路径距离作为边的权值。

这样一来,求两景点间最短路径的问题就抽象成了求图中一结点到另一结点的问题(五)软件功能描述1、定义模块模块定义了导航图中各个节点的基本结构类型,主要采用邻接矩阵的存储结构来真实反映各节点到其他所有节点的路径长度(权值大小)。

2、导航图建立模块采用上述结构体类型对导航图中每个节点进行赋值。

包括:各定点的名称(地点名),各个节点到其他所有节点的真实路径长度(赋权值)。

3、求最短路径模块本模块的基本思想是采用迪杰斯特拉算法求最短路径。

次模块是本校园导航系统的核心模块,求两点间的最短路径与求一点到其他所有点最短路径两个子功能均是在最短路径算法模块的基础上进行调用,进而实现导航功能。

4、主菜单主菜单中主要是显示导航图中的所有导航节点,能够快速方便的对各个地点进行导航。

二、功能设计(一)算法设计1、程序所能达到的功能(1)map——输出蚌埠学院平面图。

(2)init()——按相应编号输入各个节点内容,对相应路径赋值的函数。

(3)menu()——菜单函数(4)information()——输出简介的函数(5)way()——最短路径的输出函数(6)shortestpath()——调用弗洛伊德和最短路径输出的函数(7)main()——主函数2、输入的形式和输入值的范围输入数字和字母:字母:以s查询最短路径;以i查询信息;以e退出程序。

数字:从1到9输入。

3、输出的形式从A到B得最短路径为:A-到-C-到-D-到-B最短距离为:xxx米。

4、测试数据包括在正确的输入及输出结果及含有错误的输入及输出结果当输入为:s 3 9输出为:从教学楼到体育馆的最短路径为:教学楼—图书馆—艺术楼—九十号男生宿舍最短距离为:135米。

数据均为测试数据,与实际有误差,敬请谅解。

当输入为:i 1输出为:名称:北门简介:学校人最多的地方,小吃街,学生主要活动场所。

当输入为:e输出为:谢谢使用!当输入为:i 13输出为:输入有误!请输入查询地点的编号:(二)模块图图1 校园导航系统模块图(三)校园平面图及相关景点信息的建立1北门3教学楼2北操场5东门6图书馆4女生宿舍楼7艺术楼9九十号男生宿舍8 一号食堂欢迎使用蚌埠学院导航系统1学院景点介绍2查询学校景点间的最短路径3退出1北门:学校人最多的地方,小吃街,学生主要活动场所;2北操场:用于教学和举办各类体育赛事的地方;3教学楼:学校用于教学和学生学习的场所;4女生宿舍楼:女同学集体就寝和生活的区域;5东门:蚌埠学院正大门;6图书馆:学校储存大量书籍用于学习研究和阅读的地方;7艺术楼:艺术系学生学习和表演的地方;8一号食堂:食堂物美价廉,女生特别多;9九十号男生宿舍:二零一二届男生宿舍楼;三、程序代码设计(一)有向网节点结构体类型定义:typedef struct{char name[10] ;int number;char introduce[100];}vertex;(二)主程序和其它主要函数伪码算法1、主程序int main()/*主函数*/{char i;printf("\t\t\t欢迎进入蚌埠学院导航系统\n\n");init();map();/*输出地图,提示访客*/while (1){i=menu();switch(i){case 's':shortestpath();break;case 'i':information();break;case 'e':printf("\n\n\n\t\t\t\t谢谢!\n");return(0);default :printf("输入错误!\n");break;}}}2、赋值init函数void init(){int i,j;/*从41到73行,对平面图中的各个地点信息进行输入,运用strcpy 函数*/ver[1].number =1;strcpy(ver[1].name,"北门");strcpy(ver[1].introduce," 学校人最多的地方,小吃街,学生主要活动场所\n");ver[2].number =2;strcpy(ver[2].name,"北操场");strcpy(ver[2].introduce,"用于教学和举办各类体育赛事的地方\n");ver[3].number =3;strcpy(ver[3].name,"教学楼");strcpy(ver[3].introduce,"学校用于教学和学生学习的场所\n");ver[4].number =4;strcpy(ver[4].name,"女生宿舍楼");strcpy(ver[4].introduce," 女同学集体就寝和生活的区域\n");ver[5].number =5;strcpy(ver[5].name,"东门");strcpy(ver[5].introduce," 蚌埠学院正大门\n");ver[6].number =6;strcpy(ver[6].name,"图书馆");strcpy(ver[6].introduce,"学校储存大量书籍用于学习研究和阅读的地方\n");ver[7].number =7;strcpy(ver[7].name,"艺术楼");strcpy(ver[7].introduce," 艺术系学生学习和表演的地方\n");ver[8].number =8;strcpy(ver[8].name,"一号食堂");strcpy(ver[8].introduce," 食堂物美价廉,女生特别多\n");ver[9].number =9;strcpy(ver[9].name,"九十号男生宿舍");strcpy(ver[9].introduce," 二零一二届男生宿舍楼\n");for(i=1;i<=Num;i++)/*对存储距离的距离矩阵取值进行初始化,全定义为最大*/{for(j=1;j<=Num;j++){edge[i][j]=Maxedge;}}for(i=1;i<=Num;i++)/*对存储距离的矩阵的取值进行正确赋值,由于我校均来回可达,顾对路径正反同时赋值*/{edge[i][i]=0;}edge[1][2]=edge[2][1]=50;Edge[1][3]=edge[3][1]=50;edge[2][3]=edge[3][2]=100;edge[2][5]=edge[5][2]=300;edge[3][4]=edge[4][3]=200;edge[3][6]=edge[6][3]=75;edge[1][4]=edge[4][1]=250;edge[4][5]=edge[5][4]=150;edge[5][6]=edge[6][5]=75;edge[6][7]=edge[7][6]=50;edge[6][11]=edge[11][6]=120;edge[4][8]=edge[8][4]=20;edge[7][9]=edge[9][8]=10;}3、输出蚌埠学院平面图的map函数void map()/*蚌埠学院平面图,给使用程序者以直观认识*/{printf("\t\t蚌埠学院平面图(括号内为相对应的数字编号)\n\n");printf(" 1 北门\n");printf(" 3 教学楼———| ———2 北操场\n");printf(" | | | \n");printf(" 5 东门———6 图书馆———————4女生宿舍楼\n");printf(" | | | \n");Printf(" 7 艺术楼\n");Printf(" | | | \n");Printf(" 9 九十号男生宿舍————8一号食堂\n\n");4、菜单menu函数char menu()/*菜单函数*/{char i;printf("输入's'以查询最短路径\n");printf("输入'i'以查询信息\n");printf("输入'e'以退出程序\n");printf("请输入对应的英文小写字母,谢谢:\n\t");scanf("%s",&i);return i;}5、输出地点信息的information函数void information()/*输出简介函数*/{int i;while(1){printf("请输入查询地点的编号:\n\t");scanf("%d",&i);if(i<=Num&&i>=1){printf("\n@名称:%s\n#简介:%s\n",ver[i].name,ver[i].introduce);return;}else{printf("输入有误!");}}}6、最短路径floyd函数void floyd()/*弗洛伊德算法*/{int i=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;}}}}}7、输出路径way算法void way(int i,int j)/*最短路径的输出*/{int k=0,a=i,b=j;if(shortest[i][j]!=Maxedge){printf("\n%从%s到%s的最短路径为:\n",ver[i].name,ver[j].name);printf("%s",ver[i].name);while(path[i][j]!=0){k=path[i][j];while(path[i][k]!=0){k=path[i][k];}printf("-到-%s",ver[k].name);i=k;}printf("-到-%s;\n",ver[j].name );printf("\n最短距离为:%d米。

相关主题