校园导航系统课程设计,#校园管理系统
****校园导航系统****@⼤学 C++/C语⾔/数据结构/课设
1.课程设计⽬的
(1)为了进⼀步巩固课堂上所学到的知识,深刻把握为了进⼀步巩固课堂上所学到的知识,深刻掌握所学重要的数据结构类型的基本概念,逻辑结构和物理结构,以及主要应⽤算法。锻炼选择应⽤合适的数据结构解决不同实际问题的能⼒,利⽤⼀周时间,使⽤所学的⼀种数据结构完成⼀个具体项⽬的分析设计和开发。
(2)设计⼀个校园导游程序,为来访客⼈提供各种信息查询任务。设计你所在学校的校园平⾯图,所含景点不少于10个。以图中顶点表⽰校内各景点,存放景点名称、代号、简介信息,以边表⽰路权,存放路径长度等相关信息。
(3)为来访客⼈提供图中任意景点相关信息的查询
(4)为来访客⼈提供图中任意景点的问路查询,即查询任意两个景点之间的⼀条最短的简单路径。
2.课程设计⽅案论证
校园导航系统包括:构建地点、查询地点、地点介绍和导航路径等。设计⼀个校园系统,以使上述业务可以借助计算机来完成。
2.1 ⽤户基本需求
每要完成对整个导游图系统的功能实现,需要对的每⼀项功能都有清楚的设想和认识,了解并明确每⼀项功能的实现需要解决的问题,选择正确并且⾼效的算法把问题逐个解决,最终实现程序的正确调试运⾏。有以下设计思路:
(1).结合本校的实际情况,选出10个景点;
(2).⼈为⼿⼯为选出的10个景点赋上相关信息(名称、代号、简介信息、以及路权等等);
(3).根据选出来的10个景点⽤邻接矩阵存储校园图。
(4).依照景点的相关信息创建校园图。
(5).把纸质上的内容,利⽤C++编程语⾔编写查景点相关信息的程序。
(6).根据⼈为赋值的路权,迪杰斯特拉算法计算任意两点之间的最短路径。
(7).综上所诉,⽤⼀个主函数把这些板块合成,⽣产⼀个菜单界⾯呈现在⽤户⾯前。
为此,可把系统分为以下⼏个核⼼:图的初始化、图的遍历、求最佳路线。
2.2 功能要求
结合沈阳⼤学实际情况,我选出以下10个景点,从1到10编号:
编号 名称 编号 名称 编号 名称 编号 名称
1 体育馆
2 图书馆
3 ⼩北门
4 ⼤西门
5 ⾃然馆
6 ⼀⾷堂
7 ⼆⾷堂
8 五舍
9 综合楼 10 北操场
2.2.1 图的初始化
由于邻接矩阵特殊的存储⽅式,它⾮常便于快速的查两个顶点之间的边上的权值。所以,图采⽤带权的邻接矩阵存储。
决定了图的存储⽅式后,以沈阳⼤学10个景点的游览地图作为蓝本,把校园地图抽象化成顶点与边构成的图形式。
2.2.2图的遍历
图的遍历是图中最基本的操作。图的遍历是指从图中某⼀顶点出发,对图中所有顶点访问⼀次且仅访问⼀次。导游图需要把每条路径的信息都向游客展⽰,就需要读取每两个顶点间的路径信息。由于采⽤了带权的邻接矩阵存储结构进⾏存储,所以需要针对这⼀存储结构对路线进⾏遍历操作。
2.2.3求最短路径
基于本程序中图的存储是邻接矩阵结构存储的图结构,因⽽采⽤适合该存储结构的迪杰斯特拉算法⽤于解决求最短路径的问题。
辅助数组dist[n]:元素dist[i]表⽰当前到的从源点到终点vi的最短路径的长度。初态为:若从v到vi有弧,则dist[i]为弧上的权值;否则置dist[i]为∞。若当前求得的终点为vk,则根据下式进⾏迭代
:dist[i]=min{dist[i],dist[k]+arc[k][i]} 1≦i≦n
辅助数组path[n]:元素path[i]是⼀个串,表⽰当前所到的从源点到终点vi的最短路径。初态为:若从v到vi有弧,则path[i]为“vvk”,否则置path[i]为空串。
数组s[n]:存放源点和已经⽣成的终点(即集合S),初态为只有⼀个源点v。
算法的伪代码描述是:
1.初始化数组dist、path和s;
2.while(s中的元素个数<n)
(1)在dist[n]中求最⼩值,其下标为k(则vk为正在⽣成的终点);
(2) 输出dist[j]和path[j];
(3) 修改数组dist和path;
(4) 将顶点vk添加到数组s中;
图1 图的遍历算法执⾏效果⽰意图
2.3 概要设计
图2 功能模块图
2.3.1功能模块说明
1.创建校园图:
(1)先⼿⼯画好华农的10个景点的草图,再⽤C++语⾔输出抽象化的校园地图。
(2)再⽤C++语⾔定义节点个数N,编写函数name( )为景点赋值各类信息项,函数information( ),输⼊各个景点的简介。
(3)读⼊道路的起始点,为邻接矩阵的边赋相应的值。
2.利⽤函数travgraph来查景点信息。
3.创建⼀个校园图creat(Matrix_Graph *G),然后为相应的边赋上现实意义上的权值。
4.⽤path( )函数来求任意两景点之间的最短路径。
5. 如果不查询则调⽤exit( )函数退出。
6.⽤main函数来输出导游界⾯。
2.3.2 程序代码及说明
(1)显⽰已初始化的校园地名,使⽤case语句输⼊学校地名,若景点编号输⼊错误,则⽤break退出。void Name(int i)
{
switch(i)
{
case 1:
printf(“1:体育馆\n\n”);break;
case 2:
printf(“2:图书馆 \n\n”);break;
case 3:
printf(“3:⼩北门\n\n”);break;
case 4:
printf(“4:⼤西门\n\n”);break;
case 5:
printf(“5:⾃然馆\n\n”);break;
case 6:
printf(“6:⼀⾷堂\n\n”);break;
case 7:
printf(“7:⼆⾷堂\n\n”);break;
case 8:
printf(“8:五舍\n\n”);break;
case 9:
printf(“9:综合楼\n\n”);break;
case 10:
printf(“10:北操场\n\n”);break;
default:
printf(“景点编号输⼊错误!请输⼊1-10的数字编号!\n\n”); break;
}
}
(2)构建校园地图⽹络
void creat(Matrix_Graph *G)
{
int i,j;
for(i=1;i<=N;i++) G->vexs[i]=i;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++) G->arcs[i][j]=0;
G->arcs[1][2]=1; G->arcs[1][9]=7;
G->arcs[2][1]=1; G->arcs[2][3]=2; G->arcs[2][4]=9; G->arcs[2][9]=6;
G->arcs[3][2]=2; G->arcs[3][4]=7; G->arcs[3][7]=3; G->arcs[3][9]=4; G->arcs[3][10]=15; G->arcs[4][2]=9; G->arcs[4][3]=7; G->arcs[4][6]=25; G->arcs[4][10]=22;
G->arcs[5][6]=6; G->arcs[5][7]=18; G->arcs[5][8]=10;
G->arcs[6][4]=25; G->arcs[6][5]=6; G->arcs[6][7]=2; G->arcs[6][10]=9;
G->arcs[7][6]=2; G->arcs[7][3]=3; G->arcs[7][5]=18; G->arcs[7][8]=5; G->arcs[7][10]=10;
G->arcs[8][5]=10; G->arcs[8][7]=5; G->arcs[8][9]=9;
G->arcs[9][1]=7; G->arcs[9][2]=6; G->arcs[9][3]=4; G->arcs[9][8]=9;
G->arcs[10][3]=15; G->arcs[10][4]=22; G->arcs[10][6]=9; G->arcs[10][7]=10;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
基于java的课程设计题目
if(G->arcs[i][j]==0) G->arcs[i][j]=MAX;
}
(3)退出系统
case ‘0’:
clrscr();
printf("\n\t\t--------按任意键退出!--------\n\n");
printf("\n\t\t--------谢谢您的使⽤!--------\n");
getchar();
exit(0);
break;
default:
printf("\n输⼊错误,请重新输⼊0-3之间的数字:\n");
getchar();
break;
}
}
getchar();
}
3.运⾏结果及分析
(1)程序运⾏主界⾯如下。
图3 程序运⾏主界⾯
(2)沈阳⼤学校园地图,结果如下图所⽰
图4 抽象化的沈阳⼤学校园导游地图
(3)查询景点界⾯以及界⾯介绍,结果如下图所⽰。
图5 查询景点界⾯
(4)地图地点的最短路径,结果如下图所⽰。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。