校园导航系统源代码
《校园导航系统》课程设计报告
《校园导航系统》课程设计报告姓名:学号:班级:网络专业:网络工程指导教师:时间:2目录摘要 (1)1.题目 (1)2.概要设计 (1)3.调试分析 (15)4.参考文献 (15)1.题目校园导航系统设计一个校园导游程序,后台操作:1、操作员信息管理如修改密码等2、能根据学校的规模进行添加景点信息、修改景点信息等功能,3、若临时有交通管制,能进行交通管制的设置和撤销(如某某时间段那条路进行那个方向的交通管制等)前台为来访的客人提供各种信息查询服务:1、设计学校的校园平面图,所含景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2、为来访客人提供图中任意景点相关信息的查询。
3、提供途中任意景点问路查询,即求任意两个景点间的一条最短的简单路径。
1.1 需求分析设计一个校园导航系统,导航系统又分为游客和管理员。
要进行管理操作还是游客操作由用户自己选择管理员的操作:修改景点信息、增加景点信息、交通管制等。
游客的操作:查看景点信息和查最短路径。
2.概要设计景点的信息由一维数组存放,景点关系由二维数据来存放景点的信息和关系从文件读取,进而初始化typedef struct //保存单个景点信息的结构体{char code[10]; //存放景点代码char name[20]; //存放景点名称char instruction[100]; //存放景点简介}ViewPoint;typedef struct //存放景点关系的二维数组{int edges[MAXV][MAXV]; //两景点间的距离int number; //景点的数量ViewPoint V[MAXV]; //保存景点信息的结构体数组}MGraph;2.1 流程图↓↓↓↓↓↓↓2.2详细设计void MainMenu(); 主菜单,写界面操作的函数。
void UserMenu(); 游客菜单,判断是否非法输入,不会死循环。
课程设计校园导航系统
课程设计校园导航系统一、课程目标知识目标:1. 学生能理解校园导航系统的基本概念,掌握其构成要素和应用场景。
2. 学生能描述校园导航系统中常用的定位技术和路径规划算法。
3. 学生了解地理信息系统(GIS)在校园导航系统中的作用,并掌握基本操作方法。
技能目标:1. 学生能够运用所学知识,设计并实现一个简单的校园导航系统。
2. 学生能够运用GIS软件进行地图数据处理、分析和可视化。
3. 学生能够通过小组合作,解决实际校园导航中的问题,提高团队协作能力。
情感态度价值观目标:1. 学生对校园导航系统产生兴趣,认识到科技在生活中的重要作用。
2. 学生在探究过程中,培养勇于尝试、不断优化的科学精神。
3. 学生通过解决实际问题,增强对学校环境的责任感,提高爱护公共设施的意识。
本课程针对初中年级学生,结合信息技术和地理学科,以实用性为导向,培养学生运用科技手段解决实际问题的能力。
课程设计注重理论与实践相结合,充分考虑学生的年龄特点和认知水平,通过小组合作、动手实践等方式,激发学生兴趣,提高学生的综合素养。
在教学过程中,教师需关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
二、教学内容本章节教学内容主要包括以下几部分:1. 校园导航系统概述:介绍校园导航系统的基本概念、构成要素和应用场景,对应教材中“地理信息系统及其应用”章节。
2. 定位技术:讲解全球定位系统(GPS)、无线局域网(WLAN)等定位技术在校园导航系统中的应用,结合教材中“定位技术及其发展”章节。
3. 路径规划算法:介绍Dijkstra、A*等路径规划算法,分析其在校园导航系统中的作用,对应教材中“路径规划与优化”章节。
4. 地理信息系统(GIS)操作:学习GIS软件的基本操作,包括地图数据处理、分析和可视化,结合教材中“GIS软件与应用”章节。
5. 实践项目:设计并实现一个简单的校园导航系统,包括地图数据采集、路径规划、导航功能等,分阶段完成,对应教材中“实践项目与应用”章节。
树形菜单导航源代码
简洁的多级树形导航菜单1、xhtml部分<ul id="menuList"><li class="menubar"><a href="#" id="productsActuator" class="actuator">我的收藏夹</a><ul id="productsMenu" class="menu"><li><a href="#" id="newPhonesActuator" class="actuator">个人网站</a> <ul id="newPhonesMenu" class="submenu"><li><a href="/">网页代码库</a></li><li><a href="/">网页设计师</a></li><li><a href="/">JunChen博客</a></li> <li><a href="/andy/">毅博客</a></li></ul></li><li><a href="#" id="compareActuator" class="actuator">国外网站</a><ul id="compareMenu" class="submenu"><li><a href="/">A List Apart</a></li><li><a href="/">CSS禅意花园</a></li><li><a href="/">456 Berea Street</a></li><li><a href="/">W3C网站</a></li></ul></li></ul></li></ul>2、css部分#menuList {margin: 0px;padding: 10px 0px 10px 15px;border: 1px solid #CCC;width: 203px;background-color: #EEE;color: #000;font-family: verdana, helvetica, arial, sans-serif; }li.menubar {font-size: 12px;line-height: 1.8em;list-style: none;}.menu, .submenu {display: none;margin-left: 15px;padding: 0px;}.menu li, .submenu li {list-style: none;}#menuList a {background-color: transparent;color: #000;font-size: 12px;margin-left: 15px;text-decoration: none;}#menuList a:hover {text-decoration: underline;}3、Javascript部分if (!document.getElementById) {document.getElementById = function() { return null; } }function initializeMenu(menuId, actuatorId) {var menu = document.getElementById(menuId);var actuator = document.getElementById(actuatorId);if (menu == null || actuator == null) return;actuator.onclick = function() {var display = menu.style.display;menu.style.display = (display == "block") ? "none" : "block"; return false;}}window.onload = function() {initializeMenu("productsMenu", "productsActuator");initializeMenu("newPhonesMenu", "newPhonesActuator");initializeMenu("compareMenu", "compareActuator");}简洁的双级导航菜单1、xhtml部分源代码:<ul id="butong-nav"><li><a href="#">Home</a></li><li><a href="#">About</a><ul><li><a href="#">History</a></li><li><a href="#">Team</a></li><li><a href="#">Offices</a></li></ul></li><li><a href="#">Services</a><ul><li><a href="#">Web Design</a></li><li><a href="#">Internet Marketing</a></li><li><a href="#">Hosting</a></li><li><a href="#">Domain Names</a></li><li><a href="#">Broadband</a></li></ul></li><li><a href="#">Contact Us</a><ul><li><a href="#">United Kingdom</a></li> <li><a href="#">France</a></li><li><a href="#">USA</a></li><li><a href="#">Australia</a></li></ul></li></ul>2、css部分源代码#butong-nav, #butong-nav ul {font: normal 11px verdana;margin: 0;padding: 0;list-style: none;width: 150px;border-bottom: 1px solid #CCC;}#butong-nav li {position: relative;}#butong-nav ul {position: absolute;left: 149px;top: 0;display: none;}#butong-nav li a {display: block;text-decoration: none;color: #777;background: #fff;padding: 5px;border: 1px solid #ccc;border-bottom: 0;}#butong-nav li a:hover {text-decoration: underline;}* html #butong-nav li {float: left;height: 1%;}* html #butong-nav li a {height: 1%;}#butong-nav li:hover ul, #butong-nav li.over ul {display: block;}3、Javascript部分源代码startList = function() {if (document.all && document.getElementById) {navRoot = document.getElementById("butong-nav");for (i=0; i<navRoot.childNodes.length; i++) {node = navRoot.childNodes[i];if (node.nodeName == "LI") {node.onmouseover = function() {this.className += "over";}node.onmouseout = function() {this.className = this.className.replace("over", ""); }}}}}window.onload = startList;。
基于SuperMap的校园导航系统的设计与实现
r1 又包括 不 同类 型 的分库 。本 系统 是 以中 国矿业 大 2' l ' ]
学 南 湖校 区 2 0 0 5年 1: 0 规 划 平 面 图为基 础 数 据 10 0 源 并对 校 园进行 实 地 调 查得 到 校 园 建设 现 状 图 , 合 结
数 据库 是 系统 工作 的 血液 , 一个 系统 的重 要 组 是 成 部分 。G S 据 库包 括 空 问 数 据 库 和 属 性 数 据 库 , I数
术 应用 于校 园环境 导 航 系 统 中可 以实 时动 念 更 新 、 存 储校 园 的地 理 信息 , 如新 建设 的体 育场馆 等 , 校 园 的 将 地 理环境 信息 及 时 准确 地 提 供 给用 户 , 时也 是 实 现 同
全 站仪进 行 特殊点 的采 集 , 现底 图 的校准 , 少 时效 实 减
际, 建设 中 矿业 大 学校 园 导航 系 统 为 参加 百年 校 庆
的校 友及社 会各 界人 士提供 一 个虚拟 平 台是非 常 有 意
义的
性 误差 , 然后 利用 C D 软件 实 现 图层 的划 分 与 修 饰 , A
No. 5
中 图分 类 号 :2 8 P 0
文 献标 识码 : B源自基 于 Spr p的校 园导 航 系统 的设 计 与实 现 u eMa
王敏 , 张博 雅 杨永 圈 ,
( .中 吲 矿业 大学 资 源 与 地 球科 学 学 院 , 苏 徐 州 1 江 摘 2 10 ; 2 208 .中 国矿 业 大 学 应 用 技 术 学 院 , 苏 徐州 江 2 10 ) 2 0 8 要 : 中 国矿 业 大 学 南湖 校 区 校 园建 设 现 状 图 为 基 础 数 据 , 用 Vsa S do 0 5V . E 以 利 i l t i 2 0 B N T开 发 语 言 实 现 基 于 u u
校园导航系统
目录摘要 (2)正文 (3)1设计目的及要求 (3)2 设计原理 (3)2.1 C/C++语言简介 (3)2.2 开发环境 (3)2.3系统模块分析 (4)3设计内容 (4)3.1方案设计与论证 (4)3.2数据结构描述与定义 (5)3.3主要函数的说明 (6)3.4设计结果验证 (11)总结与致谢 (14)参考文献 (15)附录 (16)摘要与传统的地图相比较,地理信息系统有着不可比拟的优势,信息量大,切换方便,可扩展性强。
校园导航问题是基于校园中的不同的景点,从陌生人的角度,为来往的客人提供校园景点相关信息的查询以及为来往的客人提供校园中任意景点的问路查询,以便客人能用最短的时间从某一地点到达想要去的地方。
大大节约了旅客参观校园的时间。
本文是采用C++作为开发语言,又最大程度上用了C语言的有关的语法。
以visual c++6.0为开发工具。
旨在实现校园导航系统中,学校的简介,景点的介绍,路线查询等基本的问题。
为来往客人参观校园提供方便。
关键字:visual c++6.0 ;校园导航系统;正文1设计目的及要求1. 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3. 独立完成,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
5. 设计学校平面图,至少包括10个以上场所,校园导航系统能自动找出校园平面图中任意起始点与终点的最佳路径(最短路径)。
求并输出路径及路径长度。
2 设计原理2.1 C/C++语言简介C语言是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它由美国贝尔研究所的D.M.Ritchie于1972年推出。
1978后,C语言已先后被移植到大、中、小及微型机上。
蓝剑-校园导航
组员分工 201235020329 卢耀荣
201235020320 蓝剑
1、 设计并编写主要代码;
1、 和队友共同讨论并优化算法; 1、编写课程设计报告和心得体会;
2、 编写课程设计报告和心得体会; 2、 画学校方位图及草拟距离; 2、编写代码并加上注释
3、 算法分析与设计
3、编写课程设计报告和心得体会; 3、编写建筑物的介绍词
1 学校以及各景点介绍模块....................................................................................................4 2 查询最短路径(主要)........................................................................................................4 3 查询各点距离........................................................................................................................4 4 主菜单页面显示....................................................................................................................4 四源代码........................................................................................................................................... 4 五运行结果..................................................................................................................................... 10 七参考文献..................................................................................................................................... 13
基于μC/OS-Ⅱ的校园GPS导航系统的设计与实现
Ke r s c mp s a i a o y tm; a u p  ̄ OS f y wo d : a u vg t n sse c mp sma ;p n i C/ —l OS GP e ev r ; S r c i e
早 期 高 校 校 同 面 积相 对 较 小 , 校 的教 学 区 , 活 区 , 校 的各 个 部 门都 相 对 集 中 , 校 同 一 个 区 域 到 5 一 学 生 学 从 个区 域 只需 要 很 短 的 时间 . 门的 搬 迁 也 能 存 同一 栋 或 相邻 的两 栋 之 间 , 部 即使 导 航 出错 , 来 的 负 面 影 响 也 相 对较 小 。校 同 导航 本上 采 片平 面 示 带 j
UA RT, 4通 道 DMA, 4通 道 P WM 定 时 器 , O 端 V , T 8通 道 l I / I R C, 0位 ADC 和 触 摸 屏 接 口 ,I IC总 线 接 口 ,1 IS总 线 接n e h o g o u r o l ea dT c n l y电脑 知识 与技术 eK d o
Vo . , 0 Ap i 2 1 P .41 —2 7 2 21 1 No 1 , rl 0 0. P 2 6 41 , 4 6
基 于  ̄ / 一Ⅱ的校 园 GP C OS S导 航 系统 的设 计与 实现
Ab ta t sr c:Th ytm a e ess e tk sARM rc s ra d  ̄ OS一 Ⅱ a pafm1 h o g h S rcie o o ti S ifmat n p o es n o C/ s lt o .tru h t eGP eev rt ban GP no a o .Af r i t e
校园导航系统(数据结构大作业要求)
校园导航问题【问题描述】以我校为例,设计一个校园导航系统,主要为来访的客人提供信息查询。
系统有两类登陆账号,一类是游客,使用该系统方便校内路线查询;一类是管理员,可以使用该系统查询校内路线,可对校园景点路线可编辑。
【需求分析】设计学校的平面图,至少包括10个以上景点(场所),每两个景点间可以有不同道路,且路长也可能不同,找出在游人所在景点到其他景点的最短路径,或游人输入的任意两个景点的最短路径。
要求:(1)以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,路径权重为路径长度。
(2)为游人提供任意景点相关信息查询。
(3)为游人提供任意景点的问路查询,即任意两个景点之间的最短路径。
实现提示:一般情况下,校园道路是双向通行的,可设计校园平面图是一个无向图。
顶点和边均含有相关信息。
选做内容:(1)提供图的编辑功能:增删景点;增删道路;修改已有信息等。
(2)校园导游图的仿真界面。
【概要设计】1. 抽象数据类型定义:(1)景点顶点名称代号顶点信息简介Typedef struct{Int num;Char name[100];Char features[200];} VertexType;(2)图的存储结构:Typedef int EdgeType;Typedef struct{VertexType vexs[MaxVertexNum];EdgeType edges[MaxVertexNum][MaxVertexNum];Int n, e;} MGraph;2 主要功能模块(1)创建图的邻接矩阵存储结构void create( Graph *G );(2)浏览图中任一景点介绍VertexType GetVex(Graph *G, int v);(3)修改景点信息void PutVertex(Grahp *G, int v);(4)增加景点信息void InsertVertex(Graph*G, VertexType v);(5)删除景点信息void DeleteVertex(Graph *G, VertexType v);(6)增加道路void InsertArc(Graph *G,int v, int w);(7)删除道路void DeleteArc(Graph*G ,int v,int w);(8)查找某一景点到其他景点的最短路径void ShortestPath(Graph *G, int P[ ], int D[ ]); (9)查找任一两个景点之间的最短路径。
校园导航系统的设计与实现
设计与实现一个校园导航系统可以分为以下几个主要步骤:
1. 需求分析
确定系统功能:如地点搜索、路线规划、实时位置追踪、语音导航、周边设施查询等。
用户角色:包括学生、教师、访客等,考虑不同用户群体的特殊需求。
2. 系统架构设计
地图数据获取与处理:可能需要与地图API(如高德地图、百度地图等)进行对接,获取校园内建筑物、道路、公共设施等地理信息,并将其导入到系统中。
位置服务模块:利用GPS或其他室内定位技术提供用户的实时位置信息。
导航算法:设计路径规划算法,根据地图数据计算出两点间的最短或最优路径。
后台管理系统:用于管理地图信息、发布通知公告以及处理用户反馈。
3. 前端界面设计
易用性:简洁明了的地图展示界面,明确的起点和终点输入框,清晰的导航指引箭头,以及声音提示等功能。
反馈机制:设计用户评价和反馈功能,以便不断优化和完善导航服务。
4. 后端开发
数据接口开发:为前端提供获取地图数据、规划路径等API接口。
服务器部署:确保系统的稳定运行和高效响应。
5. 测试与优化
功能测试:确保各个功能模块都能正常工作,路径规划准确无误,实时位置更新及时。
性能测试:在高并发情况下验证系统的稳定性,优化响应速度和资源占用。
用户体验测试:收集用户使用反馈,持续改进界面交互和导航精确度。
6. 上线与维护
系统上线后持续监控运行状态,定期更新地图数据,修复已知问题,添加新功能以满足更多需求。
通过以上步骤,可以逐步设计并实现一个完整的校园导航系统,服务于广大师生及访客,提高校园生活的便利性和效率。
基于北斗校园导航系统的研究
基于北斗校园导航系统的研究随着移动互联网和定位技术的快速发展,校园导航系统逐渐成为现代大学校园必备的一项功能。
校园导航系统可以帮助学生、教职工和游客更加方便地了解校园地理环境,准确找到目的地,提高出行效率。
而北斗卫星导航系统作为我国自主研发的全球卫星导航系统,具有高精度、高可靠性和全天候等优势,因此可以作为校园导航系统的定位技术。
首先,基于北斗校园导航系统的研究可以提供校园内部定位服务。
通过在校园内部安装北斗终端设备,包括接收机设备和传感器设备,可以实现校园内部的位置定位和导航功能。
接收机设备可以接收到北斗导航卫星的信号,并通过算法处理,得到用户的位置信息。
传感器设备可以检测到用户的运动状态,如步行、骑行、乘车等,从而根据不同的运动状态提供不同的导航建议。
通过集成这些设备和算法,可以为用户提供室内和室外的精准定位服务,帮助用户准确找到目的地。
其次,基于北斗校园导航系统的研究可以提供校园外部定位服务。
通过将北斗终端设备集成在智能手机等移动设备上,可以实现用户在校园外部的位置定位和导航功能。
用户可以通过手机上的导航应用,选择目的地并获取路线规划。
北斗终端设备可以接收到北斗导航卫星的信号,并通过移动网络将用户的位置信息传输到服务器端。
服务器端可以根据用户的位置信息和目的地信息,计算出最优的路线规划,并将结果返回到用户的手机上。
用户可以根据手机上的导航指引,准确地到达目的地。
综上所述,基于北斗校园导航系统的研究具有重要的意义和应用价值。
通过利用北斗卫星导航系统的高精度和高可靠性,可以实现校园内部和校园外部的精准定位和导航功能,提高校园出行效率。
另外,通过集成视频监控设备和传感器设备,还可以实现校园安全管理服务,保障师生的人身安全。
因此,通过进一步深入研究,可以不断完善北斗校园导航系统的功能和性能,推动校园导航技术的发展,促进校园信息化建设的进程。
基于微信小程序的校园智能导览系统设计与实现
基于微信小程序的校园智能导览系统设计与实现一、引言随着移动互联网的快速发展,人们对于信息获取和导航需求的日益增加,校园导览系统作为一种便捷的信息服务工具,受到了广泛关注。
本文将介绍基于微信小程序的校园智能导览系统的设计与实现,旨在为校园师生提供更加便捷、高效的导览服务。
二、系统设计1. 系统架构设计基于微信小程序的校园智能导览系统主要包括前端界面设计、后端服务接口设计和数据库设计三个部分。
前端界面设计通过小程序页面实现地图展示、路径规划等功能;后端服务接口设计提供数据支持和算法计算;数据库设计存储地图数据、用户信息等。
2. 功能模块设计用户认证模块:用户通过微信登录进行身份认证。
地图展示模块:展示校园地图,并支持缩放、拖动等操作。
路径规划模块:用户输入起点和终点,系统进行路径规划并展示最优路径。
兴趣点查询模块:用户可以查询校园内各类兴趣点信息。
导航功能模块:提供语音导航和文字导航功能,引导用户到达目的地。
三、系统实现1. 前端实现前端采用微信小程序开发框架,利用WXML编写页面结构,WXSS 编写样式,JavaScript编写交互逻辑。
通过调用微信小程序API实现地图展示、路径规划等功能。
2. 后端实现后端采用Node.js搭建服务器,使用Express框架开发RESTful API接口。
通过接口与前端进行数据交互,实现用户认证、路径规划等功能。
3. 数据库实现数据库采用MySQL存储地图数据、用户信息等。
通过建立地图数据表、用户信息表等实现数据的存储和管理。
四、系统优化与扩展1. 算法优化针对路径规划算法进行优化,提高路径规划的准确性和效率。
2. 用户体验优化不断收集用户反馈意见,优化界面设计和功能体验,提升用户满意度。
3. 功能扩展增加更多实用功能,如周边推荐、活动通知等,丰富系统的服务内容。
五、总结与展望基于微信小程序的校园智能导览系统为校园师生提供了便捷的导览服务,具有较高的实用性和推广价值。
高校校园导航系统设计与实现
高校校园导航系统设计与实现1. 引言随着国内高校的不断发展和扩建,校园面积逐渐增大,校园内建筑和设施不断增多,学生在校园内的迷失和找不到目的地的情况也逐渐增多。
为了解决这一问题,高校需要设计和实现一种高效、准确的校园导航系统,帮助学生和访客快速找到目的地。
2. 设计目标2.1 提供准确的定位服务:导航系统需要利用全球定位系统(GPS)和WiFi等技术,为用户提供准确的校园定位服务,并能够实时更新位置信息。
2.2 显示详细的建筑和设施信息:系统需要在地图上显示高校内的所有建筑和设施,并提供详细的信息,如建筑名称、功能描述、开放时间等,以满足用户的各种需求。
2.3 支持多种导航模式:除了提供步行导航外,系统还应该支持骑行、驾车等多种导航模式,根据用户的需求,选择最合适的导航方式。
2.4 提供导航提示和路径规划:导航系统需要向用户提供清晰的导航提示,并能够根据用户选择的目的地自动规划最优路径,考虑到用户的出行速度、交通拥堵情况等因素。
3. 系统实现3.1 数据收集和整理:校园导航系统需要收集和整理校园内建筑和设施的相关数据,包括建筑名称、位置信息、功能描述等。
可以借助高校的信息化建设,将这些数据统一管理。
3.2 地图绘制:系统需要将校园内的建筑和设施显示在地图上,可以使用标准的地图绘制工具,如OpenStreetMap 或Google地图API。
地图需要清晰明了,用户可以放大缩小地图,查看不同区域的详细信息。
3.3 位置定位和更新:系统需要利用GPS和WiFi等技术实现用户的定位服务。
用户打开导航系统后,系统会自动获取用户当前的位置信息,并实时更新位置,以确保准确导航。
3.4 导航算法和路径规划:在用户选择目的地后,系统需要根据用户当前位置和目的地,自动规划最优路径。
导航算法可以使用A*算法或Dijkstra算法等,考虑到校园道路的拓扑结构、交通拥堵情况等因素,计算最短路径和最快到达时间。
3.5 导航提示和语音导航:系统需要根据用户当前位置和目的地,向用户提供清晰的导航提示,如前方左转、直行500米等。
校园导航系统的设计与实现(定稿)
原创性声明本人声明,所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。
尽我所知,除了论文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得中南大学或其他单位的学位或证书而使用过的材料。
与我共同工作的同志对本研究所作的贡献均已在论文中作了明确的说明。
作者签名:日期:年月日学位论文版权使用授权书本人了解中南大学有关保留、使用学位论文的规定,即:学校有权保留学位论文并根据国家或湖南省有关部门规定送交学位论文,允许学位论文被查阅和借阅;学校可以公布学位论文的全部或部分内容,可以采用复印、缩印或其它手段保存学位论文。
同时授权中国科学技术信息研究所将本学位论文收录到《中国学位论文全文数据库》,并通过网络向社会公众提供信息服务。
作者签名:导师签名日期:年月日摘要随着高校的发展,校园面积不断扩大,校园内跨区域活动频繁,为了给校内师生和校外人士办公、教学、生活等方面带来更大的便利,以及面对校园信息化建设的全面推广和迅猛发展,因此,设计和开发具有本校特色的校园导航系统,进一步加强数字化校园建设,有一定的必要性和现实意义。
本文根据韶关学院五十周年校庆和校园数字化建设的实际需求,选择了利用B/S项目前台技术的软件开发方法来完成校园导航系统的设计与开发。
本系统通过分析现有高校校园导航系统现状的基础上,结合本校的实际,对校园导航系统的功能进行了扩展,不仅实现校园地图查询、浏览功能,而且提供了能够反映学校面貌的其他信息查询。
具体划分为以下几个功能模块: 校园地图查询、校园导航、3D 校园、成果展示、荣誉档案、教授博士、发展历程、校庆专栏等,并对主要功能模块进行了详细分析。
本文还重点研究了迪杰斯特拉算法,阐述如何通过迪杰斯特拉算法实现地图上起点与终点之间最短路径线路及距离,使校园导航系统真正发挥作用。
系统使用了Flash平台技术和PHP语言后台技术来建设易开发、易维护、易扩展的应用系统,简化了客户端的开发,减少了操作数据库的工作量。
在线地图导航的程序设计及代码示例
在线地图导航的程序设计及代码示例随着信息技术的不断发展,手机、平板电脑等移动设备的普及,人们对地图导航的需求也越来越高。
在线地图导航程序的设计和开发成为了一项具有挑战性的任务。
本文将介绍在线地图导航程序的设计原理,并提供相应的代码示例,帮助读者了解如何进行程序开发。
一、设计原理在线地图导航程序的设计原理主要包括地图数据获取、位置定位、路径规划和导航指引等几个步骤。
下面将对每个步骤进行详细介绍。
1. 地图数据获取在进行地图导航之前,首先需要获取地图数据。
常用的方式是通过地图服务提供商的API接口获取地图数据。
以百度地图为例,可以使用百度地图API获取地图图层和标注等信息。
在程序设计中,需要先申请一个API Key,然后使用相关接口获取地图相关数据。
2. 位置定位位置定位是在线地图导航程序中的重要一步。
通过定位功能,可以获取用户当前的经纬度信息,从而确定用户所在的位置。
在手机等移动设备上,可以使用GPS或WIFI等方式进行位置定位。
可以使用系统提供的定位服务或使用第三方地理位置服务进行定位。
3. 路径规划路径规划是在线地图导航程序的核心功能之一。
通过路径规划,可以找到用户所在位置到目的地之间的最优路径。
常用的路径规划算法有Dijkstra算法、A*算法等。
在程序设计中,可以根据具体需求选择合适的路径规划算法,并使用相应的数据结构进行实现。
4. 导航指引导航指引是在线地图导航程序中的最终步骤。
通过导航指引,可以向用户提供具体的导航路线和相关的提示信息。
在程序设计中,需要根据路径规划的结果,将导航路线绘制在地图上,并提供语音提示或文字指引,以帮助用户准确导航。
二、代码示例下面是一个简单的在线地图导航程序的代码示例,仅供参考:``` java// 获取地图数据MapData mapData = MapAPI.getMapData();// 获取用户当前位置Location location = GeoLocation.getLocation();// 设置目的地坐标Coordinate destination = new Coordinate(40.123, 116.456);// 进行路径规划Route route = PathPlanning.planRoute(location, destination, mapData);// 展示导航指引Navigation.displayNavigation(route);```以上代码示例仅是一个简单的框架,实际开发中还需要根据具体需求进行细化和完善。
校园导航系统源代码
数据结构-校园导航系统简介:本系统采用C语言编写,运行环境为Dev-C++;内容以西安电子科技大学南校区为例;主要功能有:1.查询景点信息;2.查询两景点间最短距离;3.查询两景点间所有路线;4.查询西电校园地图;5.修改景点和路径信息.注意事项:在进行修改景点和路径信息操作前,请在可执行文件目录下用记事本创建”super User.CODE”文件来存放用户名与密码(中间以空格隔开),否则无法进入.源代码:#include <string.h>#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <ctype.h>#define Max 20000typedef struct ArcCell{int adj; //两个景点间的距离}ArcCell;typedef struct VertexType{int number; //景点编号char sight[100]; //景点名称char description[1000]; //景点简介char particular1[1000];char particular2[1000];char particular3[1000]; //景点详情}VertexType;typedef struct{VertexType vex[20]; //最多存放20个景点信息ArcCell arcs[20][20]; //两个景点间的距离int vexnum,arcnum;}MGraph;MGraph G;char nameofschool[100]; //学校名称int NUM=9;int P[20][20];int p[20];int visited[20];int a=0;long int D[20];int x[20]={0};//函数声明void CreateUDN(int v,int a);void narrate();void ShortestPath(int num);void output(int sight1,int sight2);char Menu();void search();char SearchMenu();void HaMiTonian(int);void Searchpath1(MGraph g);void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);void NextValue(int);void display();int Addnewsight(int n);int Deletesight(int n);void Changesight();char Changemenu();char Sightmenu();int Maintain(void);int VerificatianIdentity(void);void map();//主函数int main(){int v0,v1;int MaintainFlag;char ck;system("color 0F");CreateUDN(NUM,11);do{ck=Menu();switch(ck){case '1':search();break;case '2':system("cls");narrate();printf("\n\n\t\t\t请选择起点景点(0~%d):",NUM-1);scanf("%d",&v0);printf("\t\t\t请选择终点景点(0~%d):",NUM-1);scanf("%d",&v1);ShortestPath(v0);output(v0,v1);printf("\n\n\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'3':system("cls");narrate();x[0]=1;Searchpath1(G);printf("\n\n\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'4':system("cls");map();printf("\n\n\t\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'5':system("cls");narrate();MaintainFlag = Maintain();switch(MaintainFlag){case'1':system("cls");narrate();NUM=Addnewsight(NUM);system("cls");narrate();break;case'2':NUM=Deletesight(NUM);break;case'3':Changesight();break;}break;};}while(ck!='e');return 0;}//主菜单char Menu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");printf("\t\t\t┃ ┃\n");printf("\t\t\t┃ 1、查询景点信息┃\n");printf("\t\t\t┃ 2、查询两景点间最短路径┃\n");printf("\t\t\t┃ 3、查询两景点间所有路线┃\n");printf("\t\t\t┃ 4、查看西电校园地图┃\n");printf("\t\t\t┃ 5、修改景点和路径信息┃\n");printf("\t\t\t┃ e、退出┃\n");printf("\t\t\t┃ ┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')flag=0;}while(flag);return c;}//查询菜单char SearchMenu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");printf("\t\t\t┃ ┃\n");printf("\t\t\t┃ 1、按照景点编号查询┃\n");printf("\t\t\t┃ 2、按照景点名称查询┃\n");printf("\t\t\t┃ e、返回┃\n");printf("\t\t\t┃ ┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}//查询信息void search(){int num;int i;char c;char name[20];do{system("cls");c=SearchMenu();switch (c){case '1':system("cls");narrate();printf("\n\n\t\t请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){printf("\n\t\t您要查找景点信息如下:");printf("\n\t\t(%d)%-5s:%-25s\n\n",i,G.vex[i].sight,G.vex[i].description);printf("\t\t\t\t\t详情介绍:\n\t\t%-s\n",G.vex[i].particular1);printf("\t\t%-s\n",G.vex[i].particular2);printf("\t\t%-s\n",G.vex[i].particular3);printf("\n\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");narrate();printf("\n\n\t\t请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){printf("\n\t\t您要查找景点信息如下:");printf("\n\t\t(%d)%-5s:%-25s\n\n",i,G.vex[i].sight,G.vex[i].description);printf("\t\t\t\t\t详情介绍:\n\t\t%-s\n",G.vex[i].particular1);printf("\t\t%-s\n",G.vex[i].particular2);printf("\t\t%-s\n",G.vex[i].particular3);printf("\n\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) {int i,j;strcpy(nameofschool,"西安电子科技大学");G.vexnum=v;G.arcnum=a;for(i=0;i<20;++i) G.vex[i].number=i;strcpy(G.vex[0].sight,"东门");strcpy(G.vex[0].description,"学校正门,可乘坐公交车,出租车等交通工具. ");strcpy(G.vex[0].particular1," 作为学校的正门,门外的交通系统非常发达,常年有出租车"); strcpy(G.vex[0].particular2,"经过,还有916路,173路等众多公交车线路在此设立站牌,所以"); strcpy(G.vex[0].particular3,"完全没必要担心坐不到车,出行非常方便!");strcpy(G.vex[1].sight,"图书馆");strcpy(G.vex[1].description,"馆藏文纸质献约270万余册,种类丰富,环境优美. ");strcpy(G.vex[1].particular1," 南校区图书馆2005年7月1日奠基,主要服务于新校区2万余"); strcpy(G.vex[1].particular2,"名本科生.地上建筑面积4万平方米,总框架五层,地下一层,地面"); strcpy(G.vex[1].particular3,"四层.拥有先进的设施、优雅温馨的阅读环境.");strcpy(G.vex[2].sight,"北门");strcpy(G.vex[2].description,"西电南校区的另外一个出入口,备有一个停车场. ");strcpy(G.vex[2].particular1," 北门日常的人流量不亚于东门,在这里有一个停车场,而且"); strcpy(G.vex[2].particular2,"这里还是西电的快递接收点,可以供广大师生在此寄取快递,非"); strcpy(G.vex[2].particular3,"常方便.而且临近综合楼,较为繁华.");strcpy(G.vex[3].sight,"海棠区");strcpy(G.vex[3].description,"2017级大一萌新即将入住的宿舍区. >o< ");strcpy(G.vex[3].particular1," 海棠宿舍位于学校西北面,所以距离北操,新综,北门较近,"); strcpy(G.vex[3].particular2,"准大一的学弟学妹们将会主要居住在5.6号楼(还有一部分会在"); strcpy(G.vex[3].particular3,"9.10号楼).海棠宿舍为两室一厅,每室各四人.");strcpy(G.vex[4].sight,"大活");strcpy(G.vex[4].description,"大学生活动中心的简称,小剧场就在这里. ");strcpy(G.vex[4].particular1," 大活建设在学校人工湖旁边,里面有实验室、舞蹈室等专用"); strcpy(G.vex[4].particular2,"教室,也是学校举办室内大型活动的常用地点,曾经陈一冰,周鸿"); strcpy(G.vex[4].particular3,"祎,黄晓明等人在此与同学们见面.");strcpy(G.vex[5].sight,"北操");strcpy(G.vex[5].description,"跑步踢球狼人杀...等等有趣的活动,超热闹. ");strcpy(G.vex[5].particular1," 北操基础设施齐全,有足球场跑道观众台羽毛球场等,是"); strcpy(G.vex[5].particular2,"学校举行大型体育赛事的场地,例如:运动会足球赛等.每天晚上"); strcpy(G.vex[5].particular3,"也会有许多同学在此运动玩耍,非常有趣.");strcpy(G.vex[6].sight,"观光塔");strcpy(G.vex[6].description,"南校区最显眼的建筑物,可以俯视整个校园. ");strcpy(G.vex[6].particular1," 观光塔是西电南校区最负盛名的建筑物,位处南校区最为中"); strcpy(G.vex[6].particular2,"间的位置,走在校园里,总是能够看到观光塔,到了晚上塔上的时"); strcpy(G.vex[6].particular3,"钟会亮起,很远都能看到,在月光下特别的漂亮.");strcpy(G.vex[7].sight,"体育馆");strcpy(G.vex[7].description,"今年刚刚建成,外观融合了\"天圆地方\"的思想. ");strcpy(G.vex[7].particular1," 考虑到学校的所在地西安是十三朝古都,亦应融入中国传统"); strcpy(G.vex[7].particular2,"文化的理念,以及体育馆主馆和训练馆的功能需求,最终决定以中"); strcpy(G.vex[7].particular3,"国传统文化的\"天圆地方\"为设计思路.美观大气.");strcpy(G.vex[8].sight,"行政楼");strcpy(G.vex[8].description,"可以进行盖章,补办一卡通等众多操作. ");strcpy(G.vex[8].particular1," 从东门进入学校,左手边的那栋楼就是行政楼,往后稍小一点"); strcpy(G.vex[8].particular2,"的就是行政辅楼.教务处、学工处、电院办公室在行政楼,一卡通"); strcpy(G.vex[8].particular3,"中心、户籍管理、财务处、一些学院的办公室在行政辅楼.");for(i=0;i<20;++i)for(j=0;j<20;++j)G.arcs[i][j].adj=Max;G.arcs[0][8].adj=G.arcs[8][0].adj=150;G.arcs[0][1].adj=G.arcs[1][0].adj=600;G.arcs[1][7].adj=G.arcs[7][1].adj=800;G.arcs[1][6].adj=G.arcs[6][1].adj=50;G.arcs[1][4].adj=G.arcs[4][1].adj=600;G.arcs[3][2].adj=G.arcs[2][3].adj=300;G.arcs[6][2].adj=G.arcs[2][6].adj=350;G.arcs[3][5].adj=G.arcs[5][3].adj=300;G.arcs[4][5].adj=G.arcs[5][4].adj=400;G.arcs[8][7].adj=G.arcs[7][8].adj=250;}//导图模块void narrate(){int i,k=0;printf("\n\t******************欢迎使用%s校园导游程序*****************\n\n",nameofschool);printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n");printf("\t* 景点名称|\t\t\t景点描述\t\t *\n");printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n");for(i=0;i<NUM;i++){printf("\t* (%d)%-15s|\t%-43s *\n",i,G.vex[i].sight,G.vex[i].description);k=k+1;}printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n"); }//迪杰斯特拉算法void ShortestPath(int num){int v,w,i,t;int final[20];int min;for(v=0;v<NUM;v++){final[v]=0;D[v]=G.arcs[num][v].adj;for(w=0;w<NUM;w++)P[v][w]=0;if(D[v]<20000){P[v][num]=1;P[v][v]=1;}}D[num]=0;final[num]=1;for(i=0;i<NUM;++i){min=Max;for(w=0;w<NUM;++w)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<NUM;++w)if(!final[w]&&((min+G.arcs[v][w].adj)<D[w])){D[w]=min+G.arcs[v][w].adj;for(t=0;t<NUM;t++)P[w][t]=P[v][t];P[w][w]=1;}}}//输出函数void output(int sight1,int sight2){int a,b,c,d,q=0;a=sight2;if(a!=sight1){printf("\n\t\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.)\n\n\t",D[a]);printf("\t\t%s",G.vex[sight1].sight);d=sight1;for(c=0;c<NUM;++c){gate:;P[a][sight1]=0;for(b=0;b<NUM;b++){if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0) printf("\n");goto gate;}}。
基于Floyd算法的校园导航系统(Python版)
Tips:这个系统是学校《⼤数据应⽤开发语⾔》的⼤作业,本身想直接在⽹上copy⼀下,结果发现校园导航系统的c/java等版本很多很多,⽽python版本⾮常之少,于是只能⾃⼰写⼀个简单版本的了。
包含三个模块:查询学校地图模块、查询两点最短路径、查询多路径信息。
@TOC前⾔随着社会经济的发展,政府对教育建设的投资越来越⼤。
众多⾼校开始扩建⼯程,校园占地⾯积⼤,楼宇种类多。
体现出国家对教育的重视程度逐年上升,科教兴国战略时⾸当其冲。
⾯对越来越⼤的学校,“迷路”成为众多⾼校新⽣不得⾯临的话题,这便需要校园导航系统来解决师⽣如何查询楼宇、如何快速到达⽬的地问题。
本系统采取基于Floyd算法来完成查询两点最短路径、查询多路径信息等问题。
⼀、题⽬功能描述:设计你的学校的校园景点,所含景点不少于10个.有景点名称,代号,简介等信息; 为来访客⼈提供图中任意景点相关信息的查询.测试数据:由读者根据实际情况指定.⼆、需求分析1.要求(1)⽤Python语⾔实现程序设计;(2)进⾏相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求⽤函数的形式实现;(5)界⾯友好(良好的⼈机互交),程序要有注释。
2.运⾏环境(1)MacOS Big Sur 11.6.2系统(2)PyCharm CE 20213.开发语⾔⼤数据开发语⾔(Python)三、概要设计1.系统流程图2.函数流程图四、详细设计1.类的分析与设计定义⼀个Attractions 类来实现输⼊和存放景点编号、名称。
定义⼀个Campus 类来存放校园⽆向图的边和节点,并给各结点定义名称。
定义⼀个Passing 类来存放路径栈、路径数、栈顶数class Attractions : num = 0 #景点编号 name = '' #景点名称class Campus :att = ["","南⼤⻔","⾏政楼","三号楼","四号楼","图书馆","⻄⼤⻔","7号楼","⼋号楼","九号楼","操场","体育馆","⼤操场"] #景点 edges = [[INF ] * M ] * M #边 Nodes_Num = 0edges_Num = 0 #总结点数,总边数class passing():pathStack= [[0]*M] ##路径栈top=0count=0 #栈顶位置,路径数visited= [[False]*M] #判断是否已经经过定义⼀个DIS类来存放path路径和distence⽬的地。
基于QT的校园地图导航
基于QT的校园地图导航一、需求分析:随着科技的进步,计算机已越来越深入到任命的生活‘工作中,极大的方便了任命的日常生活和工作。
特别是随着科技的不断进步,智能化也不是一个名词,而是实在的随处可见。
算法设计与分析对于程序的实现起着非常重要的作用,思路才是程序的核心。
这个校园导航系统,利用算法设计里的图俩解决,它将校园景点作为图的结点,将景点间的路径作为图的边,路径距离作为边的权值。
这样一来。
求两景点间的最短路径的问题就抽象成了求图中一结点到另一个结点的问题。
于是我们编写了这个校园导航系统,为刚入学的新生或是初次到学校参观的人提供一个校园导航引导他们出行。
二、主要算法讲解:1. 计算最短路径(dijkstra算法)Step1:(1)找到最短路径已经确定的顶点,从它已经确定的顶点,从它除法更新相邻顶点的最短距离。
(2)此后不需要再关心1中的“最短距离已经确定的顶点”。
(3)在(1)和(2)中提到的“最短距离已经确定的顶点”要求解的关键。
在最开始时,只有起点的最短距离是确定的。
而在尚未使用过的顶点中,距离d[i]最小的顶点就是最短距离已经确定的顶点。
这是因为由于不存在负边,所以d[i]不会在更新中变小。
定义几个方便算法描述的变量:int cost[MAX_V][MAX_V]; //cost[u][v]表示表e=(u,v)的权值(不存在这条边时设为INF)int d[MAX_V]; //顶点s出发的最短路径bool used[MAX_V]; //已经使用的图Step2:(1)如果,我们需要输出最短路的路径。
注,在求解最短路径时,满足d[j] = d[k] + cost[k][j]的顶点k(d[j]是表示从起点开始到j的最短路径距离,cost[k][j]是表示k到j的距离),就是最短路上的顶点j的前驱结点,因此通过不断寻找前驱结点就可以恢复最短路。
时间复杂度是O(E)。
(2)如果,我们用prev[j]来记录最短路上的顶点j的前驱,那么就可以在O(|V|)时间内完成最短路的恢复。
c校园导航图课程设计
c 校园导航图课程设计一、教学目标本课程旨在通过校园导航图的学习,让学生掌握以下知识目标:1.理解校园导航图的基本构成和要素,如道路、建筑、设施等。
2.学会阅读和理解校园导航图的信息,如方向指示、距离标注等。
3.掌握使用校园导航图的方法和技巧,如定位、导航、搜索等。
4.能够独立阅读和理解校园导航图,找到指定的地点或路线。
5.能够使用校园导航图进行路线规划和导航,解决问题。
6.能够分析和评估校园导航图的准确性和实用性,提出改进建议。
情感态度价值观目标:1.培养学生的空间认知能力和观察力,提高他们对环境的适应能力。
2.培养学生的自主学习和解决问题的能力,增强他们的自信心。
3.培养学生对科技和信息的兴趣和好奇心,激发他们对学习的热情。
二、教学内容本课程的教学内容将按照以下大纲进行:第1章:校园导航图的基本概念和构成•校园导航图的定义和作用•校园导航图的基本要素和表示方法•校园导航图的类型和特点第2章:阅读和理解校园导航图•校园导航图的阅读方法和技巧•校园导航图的信息理解和解读•校园导航图的错误分析和纠正第3章:使用校园导航图进行导航•校园导航图的定位和路径规划•校园导航图的导航方法和技巧•校园导航图的搜索和查询功能第4章:校园导航图的评估和改进•校园导航图的准确性和实用性的评估方法•校园导航图的改进意见和建议•校园导航图的最新发展和趋势三、教学方法为了达到上述教学目标,我将采用以下教学方法:1.讲授法:通过讲解和演示,向学生传授校园导航图的基本概念和知识。
2.讨论法:通过小组讨论和交流,培养学生的思考和解决问题的能力。
3.案例分析法:通过分析和讨论真实的校园导航图案例,提高学生的实际应用能力。
4.实验法:通过实际操作和模拟实验,让学生亲身体验和掌握校园导航图的使用技巧。
四、教学资源为了支持教学内容和教学方法的实施,我将准备以下教学资源:1.教材:选择一本适合学生水平的校园导航图教材,提供系统的知识学习。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构-校园导航系统简介:本系统采用C语言编写,运行环境为Dev-C++;容以电子科技大学南校区为例;主要功能有:1.查询景点信息;2.查询两景点间最短距离;3.查询两景点间所有路线;4.查询西电校园地图;5.修改景点和路径信息.注意事项:在进行修改景点和路径信息操作前,请在可执行文件目录下用记事本创建”superUser.CODE”文件来存放用户名与密码(中间以空格隔开),否则无法进入.源代码:#include <string.h>#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <ctype.h>#define Max 20000typedef struct ArcCell{int adj; //两个景点间的距离}ArcCell;typedef struct VertexType{int number; //景点编号char sight[100]; //景点名称char description[1000]; //景点简介char particular1[1000];char particular2[1000];char particular3[1000]; //景点详情}VertexType;typedef struct{VertexType vex[20]; //最多存放20个景点信息ArcCell arcs[20][20]; //两个景点间的距离int vexnum,arcnum;}MGraph;MGraph G;char nameofschool[100]; //学校名称int NUM=9;int P[20][20];int p[20];int visited[20];int a=0;long int D[20];int x[20]={0};//函数声明void CreateUDN(int v,int a);void narrate();void ShortestPath(int num);void output(int sight1,int sight2);char Menu();void search();char SearchMenu();void HaMiTonian(int);void Searchpath1(MGraph g);void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);void NextValue(int);void display();int Addnewsight(int n);int Deletesight(int n);void Changesight();char Changemenu();char Sightmenu();int Maintain(void);int VerificatianIdentity(void);void map();//主函数int main(){int v0,v1;int MaintainFlag;char ck;system("color 0F");CreateUDN(NUM,11);do{ck=Menu();switch(ck){case '1':search();break;case '2':system("cls");narrate();printf("\n\n\t\t\t请选择起点景点(0~%d):",NUM-1);scanf("%d",&v0);printf("\t\t\t请选择终点景点(0~%d):",NUM-1);scanf("%d",&v1);ShortestPath(v0);output(v0,v1);printf("\n\n\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'3':system("cls");narrate();x[0]=1;Searchpath1(G);printf("\n\n\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'4':system("cls");map();printf("\n\n\t\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'5':system("cls");narrate();MaintainFlag = Maintain();switch(MaintainFlag){case'1':system("cls");narrate();NUM=Addnewsight(NUM);system("cls");narrate();break;case'2':NUM=Deletesight(NUM);break;case'3':Changesight();break;}break;};}while(ck!='e');return 0;}//主菜单char Menu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┃1、查询景点信息┃\n");printf("\t\t\t┃2、查询两景点间最短路径┃\n");printf("\t\t\t┃3、查询两景点间所有路线┃\n");printf("\t\t\t┃4、查看西电校园地图┃\n");printf("\t\t\t┃5、修改景点和路径信息┃\n");printf("\t\t\t┃e、退出┃\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')flag=0;}while(flag);return c;}//查询菜单char SearchMenu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┃1、按照景点编号查询┃\n");printf("\t\t\t┃2、按照景点名称查询┃\n");printf("\t\t\t┃e、返回┃\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}//查询信息void search(){int num;int i;char c;char name[20];do{system("cls");c=SearchMenu();switch (c){case '1':system("cls");narrate();printf("\n\n\t\t请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){printf("\n\t\t您要查找景点信息如下:");printf("\n\t\t(%d)%-5s:%-25s\n\n",i,G.vex[i].sight,G.vex[i].description);printf("\t\t\t\t\t详情介绍:\n\t\t%-s\n",G.vex[i].particular1);printf("\t\t%-s\n",G.vex[i].particular2);printf("\t\t%-s\n",G.vex[i].particular3);printf("\n\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");narrate();printf("\n\n\t\t请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){printf("\n\t\t您要查找景点信息如下:");printf("\n\t\t(%d)%-5s:%-25s\n\n",i,G.vex[i].sight,G.vex[i].description);printf("\t\t\t\t\t详情介绍:\n\t\t%-s\n",G.vex[i].particular1);printf("\t\t%-s\n",G.vex[i].particular2);printf("\t\t%-s\n",G.vex[i].particular3);printf("\n\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) {int i,j;strcpy(nameofschool,"电子科技大学");G.vexnum=v;G.arcnum=a;for(i=0;i<20;++i) G.vex[i].number=i;strcpy(G.vex[0].sight,"东门");strcpy(G.vex[0].description,"学校正门,可乘坐公交车,出租车等交通工具. ");strcpy(G.vex[0].particular1," 作为学校的正门,门外的交通系统非常发达,常年有出租车"); strcpy(G.vex[0].particular2,"经过,还有916路,173路等众多公交车线路在此设立站牌,所以"); strcpy(G.vex[0].particular3,"完全没必要担心坐不到车,出行非常方便!");strcpy(G.vex[1].sight,"图书馆");strcpy(G.vex[1].description,"馆藏文纸质献约270万余册,种类丰富,环境优美. ");strcpy(G.vex[1].particular1," 南校区图书馆2005年7月1日奠基,主要服务于新校区2万余"); strcpy(G.vex[1].particular2,"名本科生.地上建筑面积4万平方米,总框架五层,地下一层,地面"); strcpy(G.vex[1].particular3,"四层.拥有先进的设施、优雅温馨的阅读环境.");strcpy(G.vex[2].sight,"北门");strcpy(G.vex[2].description,"西电南校区的另外一个出入口,备有一个停车场. ");strcpy(G.vex[2].particular1," 北门日常的人流量不亚于东门,在这里有一个停车场,而且"); strcpy(G.vex[2].particular2,"这里还是西电的快递接收点,可以供广大师生在此寄取快递,非"); strcpy(G.vex[2].particular3,"常方便.而且临近综合楼,较为繁华.");strcpy(G.vex[3].sight,"海棠区");strcpy(G.vex[3].description,"2017级大一萌新即将入住的宿舍区. >o< ");strcpy(G.vex[3].particular1," 海棠宿舍位于学校西北面,所以距离北操,新综,北门较近,"); strcpy(G.vex[3].particular2,"准大一的学弟学妹们将会主要居住在5.6号楼(还有一部分会在");strcpy(G.vex[3].particular3,"9.10号楼).海棠宿舍为两室一厅,每室各四人.");strcpy(G.vex[4].sight,"大活");strcpy(G.vex[4].description,"大学生活动中心的简称,小剧场就在这里. ");strcpy(G.vex[4].particular1," 大活建设在学校人工湖旁边,里面有实验室、舞蹈室等专用"); strcpy(G.vex[4].particular2,"教室,也是学校举办室大型活动的常用地点,曾经一冰,周鸿"); strcpy(G.vex[4].particular3,"祎,黄晓明等人在此与同学们见面.");strcpy(G.vex[5].sight,"北操");strcpy(G.vex[5].description,"跑步踢球狼人杀...等等有趣的活动,超热闹. ");strcpy(G.vex[5].particular1," 北操基础设施齐全,有足球场跑道观众台羽毛球场等,是"); strcpy(G.vex[5].particular2,"学校举行大型体育赛事的场地,例如:运动会足球赛等.每天晚上"); strcpy(G.vex[5].particular3,"也会有许多同学在此运动玩耍,非常有趣.");strcpy(G.vex[6].sight,"观光塔");strcpy(G.vex[6].description,"南校区最显眼的建筑物,可以俯视整个校园. ");strcpy(G.vex[6].particular1," 观光塔是西电南校区最负盛名的建筑物,位处南校区最为中"); strcpy(G.vex[6].particular2,"间的位置,走在校园里,总是能够看到观光塔,到了晚上塔上的时"); strcpy(G.vex[6].particular3,"钟会亮起,很远都能看到,在月光下特别的漂亮.");strcpy(G.vex[7].sight,"体育馆");strcpy(G.vex[7].description,"今年刚刚建成,外观融合了\"天圆地方\"的思想. ");strcpy(G.vex[7].particular1," 考虑到学校的所在地是十三朝古都,亦应融入中国传统"); strcpy(G.vex[7].particular2,"文化的理念,以及体育馆主馆和训练馆的功能需求,最终决定以中"); strcpy(G.vex[7].particular3,"国传统文化的\"天圆地方\"为设计思路.美观大气.");strcpy(G.vex[8].sight,"行政楼");strcpy(G.vex[8].description,"可以进行盖章,补办一卡通等众多操作. ");strcpy(G.vex[8].particular1," 从东门进入学校,左手边的那栋楼就是行政楼,往后稍小一点"); strcpy(G.vex[8].particular2,"的就是行政辅楼.教务处、学工处、电院办公室在行政楼,一卡通"); strcpy(G.vex[8].particular3,"中心、户籍管理、财务处、一些学院的办公室在行政辅楼.");for(i=0;i<20;++i)for(j=0;j<20;++j)G.arcs[i][j].adj=Max;G.arcs[0][8].adj=G.arcs[8][0].adj=150;G.arcs[0][1].adj=G.arcs[1][0].adj=600;G.arcs[1][7].adj=G.arcs[7][1].adj=800;G.arcs[1][6].adj=G.arcs[6][1].adj=50;G.arcs[1][4].adj=G.arcs[4][1].adj=600;G.arcs[3][2].adj=G.arcs[2][3].adj=300;G.arcs[6][2].adj=G.arcs[2][6].adj=350;G.arcs[3][5].adj=G.arcs[5][3].adj=300;G.arcs[4][5].adj=G.arcs[5][4].adj=400;G.arcs[8][7].adj=G.arcs[7][8].adj=250;}//导图模块void narrate(){int i,k=0;printf("\n\t******************欢迎使用%s校园导游程序*****************\n\n",nameofschool);printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n");printf("\t* 景点名称|\t\t\t景点描述\t\t *\n");printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n");for(i=0;i<NUM;i++){printf("\t* (%d)%-15s|\t%-43s *\n",i,G.vex[i].sight,G.vex[i].description);k=k+1;}printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n"); }//迪杰斯特拉算法void ShortestPath(int num){int v,w,i,t;int final[20];int min;for(v=0;v<NUM;v++){final[v]=0;D[v]=G.arcs[num][v].adj;for(w=0;w<NUM;w++)P[v][w]=0;if(D[v]<20000){P[v][num]=1;P[v][v]=1;}}D[num]=0;final[num]=1;for(i=0;i<NUM;++i){min=Max;for(w=0;w<NUM;++w)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<NUM;++w)if(!final[w]&&((min+G.arcs[v][w].adj)<D[w])){D[w]=min+G.arcs[v][w].adj;for(t=0;t<NUM;t++)P[w][t]=P[v][t];P[w][w]=1;}}}//输出函数void output(int sight1,int sight2){int a,b,c,d,q=0;a=sight2;if(a!=sight1){printf("\n\t\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.)\n\n\t",D[a]);printf("\t\t%s",G.vex[sight1].sight);d=sight1;for(c=0;c<NUM;++c){gate:;P[a][sight1]=0;for(b=0;b<NUM;b++){if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0) printf("\n");goto gate;}}}}}//查询所有路径void Searchpath1(MGraph g){int l=0;int k=0;int i,j;printf("\t选择出发景点:");scanf("%d",&i);printf("\t选择目地景点:");scanf("%d",&j);for(;k<g.vexnum;k++)if(i==g.vex[k].number)i=k;for(;l<g.vexnum;l++)if(j==g.vex[l].number) j=l;printf("\n\t从%s到%s的所有游览路径有:\n\n",g.vex[i].sight,g.vex[j].sight);disppath(g,i,j);}void disppath(MGraph g,int i,int j){int k;p[0]=i;for(k=0;k<g.vexnum;k++)visited[i]=0;a=0;path(g,i,j,0);}void path(MGraph g,int i,int j,int k){int s;if(p[k]==j){a++;printf("\t第%d条:\t",a);for(s=0;s<=k-1;s++){printf("%s",g.vex[p[s]].sight);printf("->");}printf("%s\n",g.vex[p[s]].sight);}s=0;while(s<g.vexnum){if(s!=i){if(g.arcs[p[k]][s].adj!=Max&&visited[s]==0){visited[s]=1;p[k+1]=s;path(g,i,j,k+1);visited[s]=0;}}s++;}}//添加模块int Addnewsight(int n){int i;char sight[100],description[1000],particular1[1000];char particular2[1000],particular3[1000];int length;printf("\t请输入新景点的名称:\n\t");scanf("%s",&sight);printf("\t请输入新景点的相关信息:\n\t");scanf("%s",&description);printf("\t请输入新景点的详细介绍(每行不超过25字,且不超过3行):\n\t");scanf("%s",particular1);getchar();scanf("%S",particular2);getchar();scanf("%s",particular3);strcpy(G.vex[n].sight,sight);strcpy(G.vex[n].description,description);strcpy(G.vex[n].particular1,particular1);strcpy(G.vex[n].particular2,particular2);strcpy(G.vex[n].particular3,particular3);G.vex[n].number=n;for(i=0;i<n;i++){system("cls");narrate();printf("\t请输入此景点到第%d个景点的距离(单位:m)(同一景点或不可到达用20000表示):\n\t",i);scanf("%d",&length);if(length!=20000)G.arcnum++;G.arcs[n][i].adj=G.arcs[i][n].adj=length;}n++;G.vexnum++;return n;}//删除模块int Deletesight(int n){int i;int j;char c;int num;char name[20];system("cls");c=SearchMenu();switch (c){case '1':system("cls");narrate();printf("\n\n\t\t请输入您要删除景点的编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){for(j=0;j<NUM;j++){if(G.arcs[i][j].adj!=20000)G.arcnum--;G.arcs[i][j].adj=G.arcs[j][i].adj=20000;}}}for(;num<NUM;num++){strcpy(G.vex[num].sight,G.vex[num+1].sight);strcpy(G.vex[num].description,G.vex[num+1].description);}n--;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");narrate();printf("\n\n\t\t请输入您要删除景点的名称:");scanf("%s",name);for(i=0;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){num=i;for(j=0;j<NUM;j++){if(G.arcs[i][j].adj!=20000)G.arcnum--;G.arcs[i][j].adj=G.arcs[j][i].adj=20000;}}}for(;num<NUM;num++){strcpy(G.vex[num].sight,G.vex[num+1].sight);strcpy(G.vex[num].description,G.vex[num+1].description);}n--;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;}return n;}//修改主菜单char Changemenu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┃1、修改景点信息┃\n");printf("\t\t\t┃2、修改道路信息┃\n");printf("\t\t\t┃e、返回┃\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}//修改景点信息char Sightmenu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┃1、修改景点名称┃\n");printf("\t\t\t┃2、修改景点描述┃\n");printf("\t\t\t┃e、返回┃\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}//修改道路信息void Changesight(){int a,b,length;char sight[100];char description[1000];char p;char q;int i;int num;p=Changemenu();switch(p){case'1':system("cls");narrate();printf("\n\n\t\t请输入您要修改的景点编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(G.vex[i].number==num){q=Sightmenu();if(q=='1'){printf("\t请输入修改后的景点名称:\n\t");scanf("%s",&sight);strcpy(G.vex[num].sight,sight);printf("\t\t\t\t修改成功!\n");}else if(q=='2'){printf("\t请输入修改后的景点信息:\n\t");scanf("%s",&description);strcpy(G.vex[num].description,description);printf("\t\t\t\t修改成功!\n");}else if(q=='e')p=Changemenu();}}printf("\n\t\t按任意键返回...");getchar();getchar();break;if(i==NUM){printf("\n\n\t\t\t\t没有找到!");printf("\n\n\t\t\t按任意键返回...");getchar();getchar();}break;case '2':printf("\t\t请输入道路一侧的景点序号:");scanf("%d",&a);printf("\t\t请输入道路另一侧的景点序号:");scanf("%d",&b);printf("\t\t请输入修改后的道路长度:");scanf("%d",&length);G.arcs[a][b].adj=G.arcs[b][a].adj=length;printf("\t\t\t\t修改成功!\n");printf("\t\t");getchar();system("PAUSE");break;}}//维护人员权限校验int VerificationIdentity(void){char userID[20],passWord[20];char superUID[20],passWD[20];int i,legalUser;char ch;FILE *fp;legalUser = 0;fp = fopen("superUser.CODE","r");if(fp == NULL){printf("\n\t\t\t权限文件不存在!按任意键继续......\n");getch();}else{do{printf("\n\t\t\t\t 用户登录\n");printf("\n\t\t\t请输入用户名(<15个字符):");i = 0;while(isalpha(ch = getch())&&(i<15)){putchar(ch);userID[i] = ch;i++;}userID[i] = '\0';printf("\n\t\t\t请输入密码(<10个数字):");i = 0;while(isdigit(ch = getch())&&(i<10)){putchar('*');passWord[i] = ch;i++;}passWord[i] = '\0';rewind(fp);while(!feof(fp)){fscanf(fp,"%s\t%s\t\n",superUID,passWD);if((strcmp(userID,superUID) == 0)&&(strcmp(passWord,passWD) == 0)){ legalUser = 1;break;}}if(legalUser) break;else{printf("\n\n\t\t\t用户名或密码错误!!");printf("\n\t\t\t是否重新输入用户名和密码?(y/n)");ch = getche();}}while((ch == 'y')||(ch == 'Y'));}return legalUser;}//维护模块int Maintain(void){int success;char c;int flag;flag=1;system("cls");narrate();success = VerificationIdentity();if(success == 0){printf("\n您是无权用户!!");}else{do{system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");printf("\t\t\t┃┃\n");printf("\t\t\t┃1、添加新的景点和路径┃\n");printf("\t\t\t┃2、删除已有景点和路径┃\n");printf("\t\t\t┃3、修改已有景点和路径┃\n");printf("\t\t\t┃e、退出┃\n");printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='e')flag=0;}while(flag);return c;}}//地图void map(){printf(" 西电校园地图\n\n");printf(" 北┏━━━┑┏━━━┑┏━━━┑\n");printf(" ┃┃北操┃━━━┃海棠区┃━━━┃北门┃\n");printf(" ┃┗━━━┛┗━━━┛┗━━━┛\n");printf(" ┗━━东┃┃\n");printf(" ┃┃\n");printf(" ┃┃\n");printf(" ┃┏━━━┑\n");printf(" ┃┃观光塔┃\n");printf(" ┃┗━━━┛\n");printf(" ┃┃\n");printf(" ┏━━━┑┏━━━┑┏━━━┑\n");printf(" ┃大活┃━━━━━━━━━━┃图书馆┃━━━━━━━━━━┃东门┃\n");printf(" ┗━━━┛┗━━━┛┗━━━┛\n");printf(" ┃┃\n");printf(" ┃┃\n");.printf(" ┃┏━━━┑\n");printf(" ┃┃行政楼┃\n");printf(" ┃┗━━━┛\n");printf(" ┃┃\n");printf(" ┃┃\n");printf(" ┃┏━━━┑┃\n");printf(" ┗━━━━┃体育馆┃━━━━━┛\n");printf(" ┗━━━┛\n"); }资料.。