校园导游系统
校园导游系统课程设计

校园导游系统课程设计一、课程目标知识目标:1. 学生能理解校园导游系统的基本概念,掌握其功能结构与操作流程。
2. 学生能运用所学的信息技术知识,结合校园实际情况,设计出实用的校园导游系统。
3. 学生了解并掌握校园导游系统中的地理信息、历史文化等相关知识。
技能目标:1. 学生能够运用所学的编程语言或软件工具,独立或合作完成校园导游系统的设计与制作。
2. 学生通过实践操作,提高自己的信息收集、处理、分析及解决问题的能力。
3. 学生能够通过项目实践,提升自己的团队协作、沟通表达及组织协调能力。
情感态度价值观目标:1. 学生在学习过程中,培养对信息技术的兴趣和爱好,提高主动学习和探究的精神。
2. 学生通过了解校园的历史文化,增强对学校的热爱和自豪感,培养积极向上的情感态度。
3. 学生在团队协作中,学会尊重他人、关心同伴,形成良好的人际关系,树立正确的价值观。
本课程针对中学生设计,结合信息技术学科特点,注重实践操作和团队协作。
课程目标旨在帮助学生将所学知识运用到实际项目中,提高他们的综合能力和素养。
通过本课程的学习,使学生能够更好地了解校园,提升自我解决问题的能力,同时培养他们的团队精神和价值观。
二、教学内容1. 校园导游系统概述- 了解校园导游系统的定义、功能与意义。
- 分析现有校园导游系统的优缺点。
2. 校园地理信息与历史文化- 学习校园地理分布、建筑特点及历史文化背景。
- 收集并整理校园内重要景点的信息。
3. 信息技术应用- 掌握编程语言(如Python)或软件工具(如GIS软件)的基本使用方法。
- 学习数据库管理,整理并存储校园导游信息。
4. 系统设计与制作- 制定校园导游系统的设计方案,明确系统功能模块。
- 学习界面设计,掌握一定的UI设计原则。
- 编程实现校园导游系统的基本功能,如地图导航、景点介绍等。
5. 项目实践与团队协作- 分组进行项目实践,明确分工与协作。
- 定期进行项目进度汇报,交流问题与经验。
校园导游系统设计与实现

校园导游系统设计与实现第一篇:校园导游系统设计与实现校园导游系统设计与实现目录 1.设计要求 2.1需求分析 2.2概要设计2.3各个模块名称和功能 2.4 系统导游主界面2.4.1前台系统2.4.2后台系统2.4.3退出系统 3实验总结参考文献附件1.设计要求设计一个校园导游程序,为来访的客人提供各种信息查询服务。
2.1需求分析⑴设计学校的校园平面图。
选取若干个有代表性的景点抽象成一个无向带权图(无向网),所含景点不少于 30 个。
以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。
⑵存放景点代号、名称、简介等信息供用户查询。
⑶为来访客人提供图中任意景点相关信息的查询。
⑷为来访客人提供图中任意景点之间的问路查询。
⑸可以为校园平面图增加或删除景点或边,修改边上的权值等。
景点距离图2.2概要设计校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。
用图的结点代表景点,用图的边代表景点之间的路径。
所以首先应设计一个图类。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度和最短路线时可用迪杰斯特拉(Dijkastra)算法实现。
最后用 switch 选择语句选择执行浏览景点信息或查询最短路径。
1、主界面设计为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。
2、存储结构设计本系统采用图结构类型(mgraph)存储抽象校园图的信息。
其中,各景点间的邻接关系用图邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的条数由分量 vexnum、arcnum 表示,它们是整型数据。
校园导游系统设计

1、需求分析设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。
(1).设计潍坊学院校园平面图,所含的景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2).为来访客人提供图中任意景点相关信息的查询。
(3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
2、设计思路校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。
用图的结点代表景点,用图的边代表景点之间的路径。
所以首先应设计一个图类。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度和最短路线时可用弗洛伊德(Floyd)算法实现。
最后用switch选择语句选择执行浏览景点信息或查询最短路径。
3 算法设计3.1 概要设计3.1.1 程序中包含的模块(1)主程序模块主函数:void main()打印菜单,景点,景点信息(2)查询模块景点信息查询:void introduce()最短路径查询:要查找的两景点的最短距离:int shortestdistance()用floyd算法求两个景点的最短路径:void floyd()(3)打印模块打印两个景点的路径及最短距离:void display(int i,int j)3.1.2模块间的调用关系主函数main()调用:void introduce()/*景点介绍*/int shortestdistance()/*要查找的两景点的最短距离*/ shorestdistance()调用:void floyd()/*用floyd算法求两个景点的最短路径*/void display(int i,int j) /* 打印两个景点的路径及最短距离*/ 3.2 详细设计/*定义符号变量/*#define INT_MAX 10000#define n 10/*定义全局变量*/int cost[n][n]; /* 边的值*/int shortest[n][n]; /* 两点间的最短距离*/int path[n][n]; /* 经过的景点*/string M[100]; /*景点名称*/string J[100]; /*景点介绍*//*自定义函数原型说明*/void introduce();int shortestdistance();void floyd();void display(int i,int j);定义各顶点之间的距离:for(i=0;i<=n;i++)for(j=0;j<=n;j++)cost[i][j]=INT_MAX;cost[1][2]=cost[2][1]=3;cost[2][3]=cost[3][2]=1;cost[3][4]=cost[4][3]=2;cost[4][5]=cost[5][4]=1;cost[5][6]=cost[6][5]=1;cost[3][6]=cost[6][3]=2;cost[1][4]=cost[4][1]=5;cost[1][7]=cost[7][1]=7;cost[4][7]=cost[7][4]=1;cost[7][5]=cost[5][7]=1;cost[7][8]=cost[8][7]=2;cost[8][9]=cost[9][8]=1;cost[5][9]=cost[9][5]=2;cost[8][5]=cost[5][8]=2;cost[8][10]=cost[10][8]=1;cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;界面菜单设计:while(1){printf("-------------------欢迎使用校园导游系统!-------------------\n");printf(" 欢迎来到潍坊学院!祝您旅途愉快! \n");printf(" 菜单选择\n");printf("1.景点信息查询\n");printf("2.景点最短路径查询\n");printf("3.退出系统\n\n");printf(" 学校景点列表(以下是您可能要去的地方):\n"); printf("1:潍坊学院大门");printf("2:行政楼");printf("3:餐厅");printf("4:实验楼");printf("5:图书馆\n");printf("6:商业区");printf("7:教学楼");printf("8:篮球场");printf("9:体育馆");printf("10:弘德湖\n");printf("-----------------------------------------------------------\n");printf("请选择服务:");scanf("\n%c",&k);switch(k){case '1':printf("进入景点信息查询:");introduce();break;case '2':printf("进入最短路径查询:");shortestdistance();break;case '3':printf("谢谢使用本系统!\n");exit(0);default:printf("输入信息错误!\n请输入字母1或2或3.\n");break;}}介绍景点:void introduce(){int a;printf("您想查询哪个景点的详细信息?\n请输入景点编号:");scanf("%d",&a);getchar();printf("\n");switch(a){case 1:printf("1:学校大门\n\n学校的正门,气势宏伟。
校园导游系统数据结构实习报告

校园导游系统数据结构实习报告校园导游系统数据结构实习报告一、引言随着信息技术的快速发展,数字化校园已成为许多学校的重要建设目标。
其中,校园导游系统作为数字化校园的一部分,对于提高校园文化氛围,方便新生和游客游览校园,增强校园归属感起到了重要作用。
在这次实习中,我们的主要任务是设计和实现一个校园导游系统,采用数据结构技术对校园地图进行建模和优化,以提供高效、便捷的导游服务。
二、系统设计1、数据结构选择:考虑到校园地图的复杂性,我们采用了图(Graph)作为基础数据结构。
图是由节点(顶点)和边组成的集合,可以很好地表示校园中各个地点之间的连接关系。
2、地图表示:我们将校园地图转化为图,其中每个地点对应一个节点,地点之间的路径对应边。
为了更准确地表示实际环境,我们使用了带权重的边,权重表示路径的长度或美观度。
3、导游路径规划:我们使用了最短路径算法,如Dijkstra算法和A*算法,来规划最佳游览路径。
用户可以在系统中设定起点和终点,系统会根据图中的边和权重计算出最短路径。
4、语音导航:系统可以通过用户的手机实时获取位置信息,并使用TTS(Text-to-Speech)技术将规划的路径转化为语音提示,方便用户边听边走。
5、数据库设计:我们设计了一个关系型数据库,用于存储校园地图信息、用户信息等。
通过使用索引和查询优化技术,提高了系统性能。
三、系统实现1、环境配置:我们使用了Python语言和相关的数据结构库来实现系统。
开发环境为Windows 10操作系统,数据库采用了MySQL。
2、代码实现:我们对Python语言和相关库进行了深入学习,掌握了图算法的实现方法。
在实现过程中,我们遇到了一些问题,如最短路径算法的优化、语音导航的实时性等。
通过查阅资料、讨论和实践,我们成功解决了这些问题。
3、测试与调试:我们对系统进行了全面的测试,包括单元测试、集成测试和系统测试。
在测试过程中,我们发现并修复了一些bug,提高了系统的稳定性和可靠性。
校园导游咨询系统.

c) 系统完成的功能: 来访客人浏览校园全景 查询相关景点的信息 可查询所有浏览路线 来访客人可以查询从某一景点到另一景点的最短路径;
d) 程序设计分析: 利用弗洛伊德算法来计算出起点到各个顶点之间的最短路径并进行 存储,弗洛伊德算法将找出每一对顶点之间的最短路径;
e) 系统的输入与输出: 键盘输入,输出等。
⑦初始化模块 函数:MGraph * CreatUDN(MGraph *G) 主要功能:初始化图形,接受用户输入 ⑧选择模块 函数:void Floyd(MGraph *G) 主要功能:选择出发点和目的地 ⑨确定位置模块 函数:int LocateVex(MGraph *G,char* v) 主要功能:定点位置 ⑩菜单模块 函数:void Menu(void) 主要功能:显示菜单,供用户选择
软件开发中的总体设计:
详细设计内容和过程
Browser函数模块
void Browser(MGraph *G)
{
int v;
printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃编号┃景点名称 ┃简介
┃\n");
for(v=0;v<G->vexnum;v++)
③调用函数模块 函数:void cmd(void) 主要功能:根据用户选择,调用完成各个功能的子函数 ④浏览函数模块 函数:void Browser(MGraph *G) 主要目的:浏览校园全景 ⑤路径查询模块 函数:void ShortestPath_DIJ(MGraph * G) 主要功能:求起点到各个顶点之间的最短路径 ⑥景点查询模块 函数:void Search(MGraph *G) 主要功能:寻找要查询的景点,并输出该景点的信息
校园导游系统实验报告

竭诚为您提供优质文档/双击可除校园导游系统实验报告篇一:校园导游图系统数据结构实验报告一.设计目的通过布置具有一定难度的实际程序设计项目,使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;使学生掌握分析问题,求解问题的方法并提高学生设计编程实现的能力。
二.设计内容用无向网表示学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
游客通过终端可询问:(1)从某一景点到另一景点的最短路径。
(2)游客从公园进入,选取一条最佳路线。
(3)使游客可以不重复地浏览各景点,最后回到出口(出口就在入口旁边)。
[基本要求](1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离.为此图选择适当的数据结构。
(2)把各种路径都显示给游客,由游客自己选择浏览路线。
(3)画出景点分布图于屏幕上。
[实现提示] (1)构造一个无向图g并用邻接矩阵来存储。
(2)利用迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径用二维数组p[i][]来记录,最短路径长度就用一维数组d[i]存放;i的范围:0~20。
(3)一维数组have[]是用来记录最短路径出现顶点的顺序。
(4)根据起点和终点输出最短路径和路径长度。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
1.浏览校园全景:采用深度遍历遍历图进行所有景点浏览,将遍历景点信息输出2.查看所有游览路线:用户输入一个景点,采用迪杰斯特拉算法将从该景点起所有路径查出并输出在屏幕上3.选择出发点和目的地:用户输入一个出发点和一个目的地编号,采用弗洛伊德算法求出发点到目的地的最短路径4.查看景点信息:直接用编号进行单个景点查询。
四.详细设计重点设计及编码在求最短路径时采用迪杰斯特拉算法//迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点voidshortestpath_DIJ(mgraph*g) {//迪杰斯特拉算法,求从顶点v0到其余顶点的最短路经及其带权长度d[v]//若p[v][w]为1,则w是从v0到v的最短路经上的顶点//final[v]类型用于设置访问标志intv,w,i,min,final[20],D[20],p[20][20],t=0,x,flag=1 ,v0;//vo为起始景点的编号while(flag){printf("请输入一个起始景点编号:");scanf("%d",if(v0g->vexnum){printf("景点编号不存在!请重新输入景点编号:");scanf("%d",}if(v0>=0}for(v=0;vvexnum;v++){fin al[v]=0;//初始化各顶点访问标志D[v]=g->arcs[v0][v].adj;//v0到各顶点v的权值赋值给d[v]for(w=0;wvexnum;w++)//初始化p[][]数组,各顶点间的路径全部设置为空路径0p[v][w]=0;if(D[v]final[v0]=1;//v0的访问标志设为1,v属于s集for(i=1;ivexnum;i++)//对其余g.vexnum-1个顶点w,依次求v到w的最短路径{min=InFInITY;for(w=0;wvexnum;w++)//在未被访问的顶点中,查找与v0最近的顶点vif(!final[w])if(D[w]vexnum;w++)//修改v0到其余各顶点w的最短路径权值d[w]if(!final[w]//修改v0到w的权值d[w]for(x=0;xvexnum;x++)//所有v0到v的最短路径上的顶点x,都是v0到w的最短路径上的顶点p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;vvexnum;v++)//输出v0到其它顶点v的最短路径{if(v0!=v)printf("%s",g->vexs[v0].name);//输出景点v0的景点名for(w=0;wvexnum;w++)//对图中每个顶点w,试探w是否是v0到v的最短路径上的顶点{if(p[v][w]t++;}if(t>g->vexnum-1}}五.测试数据及运行结果1.正常测试数据和运行结果1.浏览校园全部景点信息:2.查看景点信息:3.输出两个景点间的最短路径:2.异常测试数据及运行结果1.当输出错误编号时程序没有反映,继续输入直到输入正确:2.当查询两景点编号相同时的最短路径时,结果如下:篇二:校园导游实验报告[1]校园导游实验报告学号:20XX30457018姓名:熊博班级:09计科1班完成日期:20XX-12-211、问题描述制作陶瓷学院的校园导游图,游客通过终端可询问:(1)从某一景点到另一景点的最短路径。
微校校园导游系统项目概要介绍及评分要求

微校校园导游系统项目概要介绍及评分要求Micro Campus 微校校园导游系统项目概要介绍及评分要求2015.10一、项目背景随着我国高等教育的发展,校园建设进入了新高潮,面对着发展的需要,各校都在进行着大规模的校园建设。
而大学校园的逐渐扩建和美化,以及人们对高校人文历史的日益重视,越来越多的人将旅游的目的地设定为当地大学校园。
而各校方对此展示出积极的态度,加大校园旅游文化的深入,以此来展示高校的建设发展,同时也吸引更多的学子前来就学。
每当寒暑假来临,广大的学生家长们都想带自己的孩子领略各大知名高校的文化风貌,感受高等学府的精神魅力。
一些有志青年工作之余也希望能重返校园,与大学生一起激昂青春。
随着开放式校园的普及,各大高校也成为了众多游客的必看景点之一。
然而,高校旅游蓬勃发展至今,也开始面临很多的问题:专业高校导游难寻,高校游深度不足,网络上的图文简介缺乏趣味性,难以博得游客的喜爱。
一个有深度、有趣味的专业导游应用成为众多高校管理者和游客翘首以盼的产品。
二、问题描述现阶段国内外的导游系统大多是服务于著名景区,大学校园的导游系统却很少见。
而且目前流行的导游系统,存在以下问题:大多是电脑端的应用程序,不能随时随地为使用者提供方便。
侧重于多媒体的演示,虽然界面丰富,但缺少景点间的地理位置的分析。
即使地图有标注景点,但无法准确的计算并且显示两景点间的最短路径。
缺乏实时的定位功能,使用户不能根据自己的实际位置进行相关操作。
一般不涉及校园新闻动态的展示,使得初入校园的人,尤其是新生,对学校工作开展一无所知,不利于尽快融入校园生活。
侧重于功能实现,而往往忽略用户浏览信息的保存,使得用户每次使用都要重新查询,浪费时间等。
缺乏针对每个用户的智能推荐,比如路径,景点等的推荐。
高校缺乏统一的旅游资源管理平台,提供相应的旅游资源介绍,校园新闻,校园活动的发布等三、用户群体中小学生、学生家长、有志青年等高校游客刚踏入大学校校园的新生和渴望深入了解校园文化的本校学生高校旅游接待管理部门四、项目要求请从校方的角度,设计一套基于移动互联网,满足校方需求的方案,该整体解决方案包括以下要求:(1)策划方案·就现高校旅游业情况进行分析。
校园导游系统实验报告

竭诚为您提供优质文档/双击可除校园导游系统实验报告篇一:校园导游图系统数据结构实验报告一.设计目的通过布置具有一定难度的实际程序设计项目,使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;使学生掌握分析问题,求解问题的方法并提高学生设计编程实现的能力。
二.设计内容用无向网表示学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
游客通过终端可询问:(1)从某一景点到另一景点的最短路径。
(2)游客从公园进入,选取一条最佳路线。
(3)使游客可以不重复地浏览各景点,最后回到出口(出口就在入口旁边)。
[基本要求](1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离.为此图选择适当的数据结构。
(2)把各种路径都显示给游客,由游客自己选择浏览路线。
(3)画出景点分布图于屏幕上。
[实现提示] (1)构造一个无向图g并用邻接矩阵来存储。
(2)利用迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径用二维数组p[i][]来记录,最短路径长度就用一维数组d[i]存放;i的范围:0~20。
(3)一维数组have[]是用来记录最短路径出现顶点的顺序。
(4)根据起点和终点输出最短路径和路径长度。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
1.浏览校园全景:采用深度遍历遍历图进行所有景点浏览,将遍历景点信息输出2.查看所有游览路线:用户输入一个景点,采用迪杰斯特拉算法将从该景点起所有路径查出并输出在屏幕上3.选择出发点和目的地:用户输入一个出发点和一个目的地编号,采用弗洛伊德算法求出发点到目的地的最短路径4.查看景点信息:直接用编号进行单个景点查询。
四.详细设计重点设计及编码在求最短路径时采用迪杰斯特拉算法//迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点voidshortestpath_DIJ(mgraph*g) {//迪杰斯特拉算法,求从顶点v0到其余顶点的最短路经及其带权长度d[v]//若p[v][w]为1,则w是从v0到v的最短路经上的顶点//final[v]类型用于设置访问标志intv,w,i,min,final[20],D[20],p[20][20],t=0,x,flag=1 ,v0;//vo为起始景点的编号while(flag){printf("请输入一个起始景点编号:");scanf("%d",if(v0g->vexnum){printf("景点编号不存在!请重新输入景点编号:");scanf("%d",}if(v0>=0}for(v=0;vvexnum;v++){fin al[v]=0;//初始化各顶点访问标志D[v]=g->arcs[v0][v].adj;//v0到各顶点v的权值赋值给d[v]for(w=0;wvexnum;w++)//初始化p[][]数组,各顶点间的路径全部设置为空路径0p[v][w]=0;if(D[v]final[v0]=1;//v0的访问标志设为1,v属于s集for(i=1;ivexnum;i++)//对其余g.vexnum-1个顶点w,依次求v到w的最短路径{min=InFInITY;for(w=0;wvexnum;w++)//在未被访问的顶点中,查找与v0最近的顶点vif(!final[w])if(D[w]vexnum;w++)//修改v0到其余各顶点w的最短路径权值d[w]if(!final[w]//修改v0到w的权值d[w]for(x=0;xvexnum;x++)//所有v0到v的最短路径上的顶点x,都是v0到w的最短路径上的顶点p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;vvexnum;v++)//输出v0到其它顶点v的最短路径{if(v0!=v)printf("%s",g->vexs[v0].name);//输出景点v0的景点名for(w=0;wvexnum;w++)//对图中每个顶点w,试探w是否是v0到v的最短路径上的顶点{if(p[v][w]t++;}if(t>g->vexnum-1}}五.测试数据及运行结果1.正常测试数据和运行结果1.浏览校园全部景点信息:2.查看景点信息:3.输出两个景点间的最短路径:2.异常测试数据及运行结果1.当输出错误编号时程序没有反映,继续输入直到输入正确:2.当查询两景点编号相同时的最短路径时,结果如下:篇二:校园导游实验报告[1]校园导游实验报告学号:20XX30457018姓名:熊博班级:09计科1班完成日期:20XX-12-211、问题描述制作陶瓷学院的校园导游图,游客通过终端可询问:(1)从某一景点到另一景点的最短路径。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程名称:数据结构与算法题目名称:校园导游系统学生学院:数学与计算机科学系专业班级: 2016级计算机科学与技术本科班小组组长:王明小组成员: 王明郑双凤吕运发指导老师:熊小颖老师2017年10月15日目录一、设计目的3二、问题描述3三、基本要求3四、概要设计3五、主程序4六、测试数据136.1调试程序所用数据136.2程序的调试结果七、总结一、设计目的随着现代社会生活节奏的加快,人们外出旅行以寻求放松的时间越来越多。
考虑到游客不可能对所有景点都有所了解,因此可能无法找到游玩景点最省时,最高效的路径,而人工导游成本又过高,故使用C语言,基于《数据结构》中图的相关算法开发了“南昌师范学院导游系统”。
开发本系统目的在于为来访我校的游客提供一条最短游览路径,本系统从实际出发,通过对校园平面图的分析,将其转化为数据并保存在系统中,因此系统提供的路径具有较大的可信性。
二、问题描述设计校园导游程序,为来访的客人提供服务,为来访我校的游客提供一条在游客当前位置到目的地的最短游览路径,找到游玩景点最省时,最高效的路径。
三、基本要求1.假设有一所校园的平面图,所含景点不小于10个,请选择适当的坐标来表示出该图上的各个景点。
2.为来访的客人提供从当前位置到其他景点的最短路径的咨询;3.必须具有校园平面图的修改和扩充功能(即某些景点坐标的修改和景点个数的增加)。
四、概要设计算法思路本设计的重难点在于问题二的解决。
利用了弗洛伊德算法函数设计Floyd() 本算法在设计时参考了《数据结构C语言版》一书中有关Floyd算法的介绍,同时借鉴了如今网上流行的设计方式。
之所以选择本算法来实现计算最短路径,原因在于本算法容易理解,可以算出任意两个节点之间的最短距离,代码编写简单。
但是,本算法缺点在于时间复杂度过高,不适合用于计算大量数据。
Floyd算法首先将两景点间路径长度数据存储于数组D[v][w]中,而后使用一个三维数组用于存放最短路径所经过的顶点,接下来使用三重循环判断两景点之间直接路径是否大于间接路径,若大于,则将三维数组中存放的顶点信息更改为简介路径所经过的顶点信息。
以上部分完成后,当用于标记输入数据是否合法的flag=1时,输出错误信息,提示用户重新输入,当输入数据合法时,输出以上程序得到结果。
五、主程序#include<stdio.h>#include<stdlib.h>#define MAX_VERTEX_NUM 100 //最大顶点数#define MAX_INT 10000 //无穷大typedef int AdjType;typedef struct{int pi[MAX_VERTEX_NUM];//存放v到vi的一条最短路径int end;}PathType;typedef char VType; //设顶点为字符类型typedef struct{VType V[MAX_VERTEX_NUM]; //顶点存储空间AdjType A[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵}MGraph;//邻接矩阵表示的图//Floyd算法//求网G(用邻接矩阵表示)中任意两点间最短路径//D[][]是最短路径长度矩阵,path[][]最短路径标志矩阵void shortdistance(MGraph * G,int path[][MAX_VERTEX_NUM],int D[][MAX_VERTEX_NUM],int n){ int i,j,k;for(i=0;i<n;i++){//初始化for(j=0;j<n;j++){if(G->A[i][j]<MAX_INT){path[i][j]=j;}else{path[i][j]=-1;}D[i][j]=G->A[i][j];}}for(k=0;k<n;k++){//进行n次试探for(i=0;i<n;i++){for(j=0;j<n;j++){if(D[i][j]>D[i][k]+D[k][j]){D[i][j]=D[i][k]+D[k][j];//取小者path[i][j]=path[i][k];//改Vi的后继}}}}for(i=0;i<n;i++){//输出每对顶点间最短路径长度及最短路径for(j=0;j<n;j++){printf("V%d到V%d的最短长度:",i,j);printf("%d\t",D[i][j]);//输出Vi到Vj的最短路径长度k=path[i][j];//取路径上Vi的后续Vkif(k==-1){printf("There is no path between V%d and V%d\n",i,j);//路径不存在}else{printf("最短路径为:");printf("(V%d",i);//输出Vi的序号iwhile(k!=j){//k不等于路径终点j时printf(",V%d",k);//输出kk=path[k][j];//求路径上下一顶点序号}printf(",V%d)\n",j);//输出路径终点序号}printf("\n");}}}int introduce(char scenery){getchar();printf("请输入景点对应的大写字母\n");scanf("%c",&scenery);switch(scenery){default:printf("没有该景点\n");case 'A':printf("图书馆,距离南大门100米\n"); break;case 'B':printf("实验楼,距离南大门200米\n"); break;case 'C':printf("理科楼,理科类学生上课地点\n");break;case 'D':printf("女宿舍楼,南昌师范学院的女孩子的家\n");break;case 'E':printf("男宿舍楼,南昌师范学院的男孩子的家\n");break;case 'F':printf("大学生活动中心,大学生活动休闲场所\n");break;case 'G':printf("田径场,运动会举办场地\n");break;case 'H':printf("逸夫大礼堂,各种活动举办场所\n");break;case 'I':printf("体育馆,正在建设中\n");break;case 'J':printf("综合楼,领导办公处\n");break;case 'K':printf("北大门,学校出口\n");break;}return 0;}int main(){char kk;char scenery;int i,j,k,v='A',m=11;//v为起点,n为顶点个数MGraph G;int path[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//v到各顶点的最短路径向量int D[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//v到各顶点最短路径长度向量charV[MAX_VERTEX_NUM]={'A','B','C','D','E','F','G','H','I', 'J','K'};int a[MAX_VERTEX_NUM][MAX_VERTEX_NUM]={ //初始化{0,50,200,100,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,M AX_INT,MAX_INT},{50,0,100,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_I NT,MAX_INT,MAX_INT},{200,100,0,MAX_INT,MAX_INT,100,50,MAX_INT,MAX_INT,MAX_I NT,MAX_INT},{100,MAX_INT,MAX_INT,0,500,200,MAX_INT,MAX_INT,MAX_INT, MAX_INT,MAX_INT},{MAX_INT,MAX_INT,MAX_INT,500,0,300,MAX_INT,300,MAX_INT,300,500},{MAX_INT,MAX_INT,100,200,300,0,400,200,100,MAX_INT,MAX_ INT},{MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,400,0,100,30 0,MAX_INT,MAX_INT},{MAX_INT,MAX_INT,MAX_INT,MAX_INT,200,200,100,0,MAX_IN T,400,MAX_INT},{MAX_INT,MAX_INT,50,MAX_INT,MAX_INT,100,300,MAX_INT,0 ,MAX_INT,MAX_INT},{MAX_INT,MAX_INT,MAX_INT,MAX_INT,300,MAX_INT,MAX_INT, 400,MAX_INT,0,300},{MAX_INT,MAX_INT,MAX_INT,MAX_INT,500,MAX_INT,MAX_INT, MAX_INT,MAX_INT,300,0}};for(i=0;i<m;i++){for(j=0;j<m;j++){G.A[i][j]=a[i][j];}}printf("****************************************\n ");printf("**\n");printf("**\n");printf("* 欢迎使用南昌师范学院校园咨询系统!*\n");printf("**\n ");printf("* *\n ");printf("****************************************\n");printf("\n");while(1){printf("1.景点信息查询请按“1”键:\n");printf("2.景点最短路径查询(弗洛伊德算法)请按“2”键:\n");printf("3.景点最短路径查询(迪杰斯特拉算法)请按“3”键:\n");printf("4.校内景点地图查询请按“4”键:\n");printf("5.退出系统请按“5”键 :\n");printf("请选择:\n");scanf("%c",&kk);switch(k){case'1':printf("景点介绍查询\n");introduce(scenery);break;case'2':printf("景点最短路径查询(弗洛伊德算法)\n");shortdistance(&G,path,D,11);break;case'5':printf("谢谢使用!\n");exit(0);}}return 0;}六、测试数据6.1调试程序所用数据6.2程序的调试结果七、总结经过小组同学的努力,我们终于结束了这次的课程设计,虽然我们尽了很大的努力,但是其中仍显现出许多的不足。