《校园导航系统》课程设计报告

合集下载

校园导航程序课程设计

校园导航程序课程设计

校园导航程序课程设计一、课程目标知识目标:1. 学生能理解并掌握校园导航程序的基本原理和功能。

2. 学生能了解并运用编程语言(如Python)实现基本的地图展示、路径规划和信息查询功能。

3. 学生能掌握基础的地理信息系统(GIS)知识,并将其应用于校园导航程序设计。

技能目标:1. 学生能运用编程技能,设计并开发出一个简单的校园导航程序。

2. 学生能通过小组合作,进行需求分析、功能设计和程序测试,提高团队协作能力。

3. 学生能运用问题解决策略,解决在编程和调试过程中遇到的问题。

情感态度价值观目标:1. 学生能培养对编程和地理信息科学的兴趣,激发创新意识。

2. 学生能在课程学习过程中,体验编程带来的成就感,增强自信心。

3. 学生能认识到科技在现实生活中的应用,理解科技对人类生活的积极作用,培养社会责任感。

课程性质:本课程为信息技术与地理学科融合的实践性课程,旨在培养学生的编程能力、地理信息系统应用能力和团队协作能力。

学生特点:六年级学生具有一定的编程基础和地理知识,对新鲜事物充满好奇,喜欢动手实践,具备一定的自主学习能力。

教学要求:注重理论与实践相结合,关注学生个体差异,鼓励学生积极参与,充分调动学生的主观能动性。

将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 校园导航系统概述:介绍校园导航系统的基本概念、功能和应用场景,让学生对课程内容有一个整体的认识。

相关教材章节:信息技术课本第五章第二节“地理信息系统及其应用”。

2. 编程语言基础:回顾Python编程基础知识,重点复习变量、条件语句、循环语句和函数等基本概念。

相关教材章节:信息技术课本第二章“Python编程基础”。

3. 地理信息系统(GIS)知识:讲解GIS的基本原理,介绍地图坐标系、空间数据结构等基础知识。

相关教材章节:地理课本第八章第三节“地理信息系统及其应用”。

4. 校园导航程序设计:a. 需求分析:组织学生进行小组讨论,明确校园导航程序的功能需求。

校园导航系统课程报告

校园导航系统课程报告

数据结构课程设计报告题目:校园导航系统学生姓名:谌幼华学号: 09110806班级:091108指导教师:邹国华2011 年6 月3 日目录一、需求分析说明 (3)二、总体设计 (3)三、详细设计 (5)四、实现部分 (8)五、程序测试 (13)六、总结 (15)七、参考文献 (15)校园导航系统一、需求分析说明:(一)课程设计目的:本课程设计的目的就是要达到理论与实际应用相结合,使我们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。

(二)设计要求:设计一个校园导航系统,为来访的客人提供导航服务,具体要求:1. 设计学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

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

3. 提供途中任意景点问路查询,即求任意两个景点间的一条最短的简单路径以及任意景点到其他所有景点的最短路径查询。

4.列出所有校内无重复排列的景点,将所有景点的距离以邻接矩阵的方式呈现给使用者,提供使用者选择功能界面,按照提示进行操作。

5.在邻接矩阵中MAX表示最大距离即两个景点之间是不可到达的。

用实际权值来表示两个景点之间的距离,并且是可达的。

二、总体设计:1.数据结构:用图(无向网)来描述学校n个景点之间的关系,顶点为单位代号,权值为两景点的距离。

本系统基于东华理工大学校园平面图为基准而设计,先将校园内15个具有代表性的顶点列出,然后绘制出其平面图,标出任意两顶点间是否有直达的边,同时在图上有直达边的两顶点边的权值,本系统中设计的东华理工大学校园平面图如下(景点前面所对应的代号为系统中无向网的顶点号):东华理工大学学校平面图2.系统功能图:三、详细设计:一、按所设想的功能,把程序化分为7个模块,各模块的名称和其数据类型如下表所示:各模块的说明如下:1.类模块:本系统中只涉及了一个Graph(无向网类)类,其数据成员为无向网的相关信息,例如图的邻接矩阵(程序中用数组arcs[n+1][n+1]存放有关邻接矩阵的相关信息)、原点到各定点的相关信息(存放在dist[n+1数组中])、最短路径上该顶点的前一顶点相关信息(存放在path[n+1]数组中)、以求得到的最短路径上的顶点的顶点号(存放在s[n+1]数组中),同时将求最小路径的实现函shortest_path()定义为其成员函数。

数据结构校园导航系统课程设计报告

数据结构校园导航系统课程设计报告

《校园导航系统》课程设计报告姓名:蒋小文学号:110236100123 班级:1班专业:网络工程指导教师:唐轶媛蒋荣萍时间:2012年7月5日信息科学与工程学院目录摘要 (1)1.目的 (2)2.要求 (2)3.题目 (2)4.任务 (2)1).需求分析 (3)2).概要设计 (4)3).详细设计 (5)4).调试分析 (8)5.课设总结 (18)6.附录源代码 (19)1.目的数据结构是计算机专业的核心课程,是一门实践性很强的课程。

课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C (C++)程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。

2.要求2.1 课程设计时间为2周;2.2 设计语言C(C++)不限;2.3 课余时间完成源程序和课程设计报告等文档书写工作,上机时间只能做调试工作。

上机时带上源程序、数据结构教材、C语言教材。

2.4 上机任务(1)选择并定义合适的数据结构;(2)根据程序所要完成的基本要求,设计出完整的算法;(3)设计出主程序(main函数),使其成为完整的程序。

2.5 上机时间:上午8:30--11:30,下午3:00--5:303.题目题目:校园导航系统设计一个校园导游程序,后台操作:3.1、操作员信息管理如修改密码等3.2、能根据学校的规模进行添加景点信息、修改景点信息等功能,3.3、若临时有交通管制,能进行交通管制的设置和撤销(如某某时间段那条路进行那个方向的交通管制等)3.4、前台为来访的客人提供各种信息查询服务:3.4.1、设计学校的校园平面图,所含景点不少于10个。

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

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

3.4.3、提供途中任意景点问路查询,即求任意两个景点间的一条最短的简单路径。

课程设计校园导航系统

课程设计校园导航系统

课程设计校园导航系统一、课程目标知识目标:1. 学生能理解校园导航系统的基本概念,掌握其构成要素和应用场景。

2. 学生能描述校园导航系统中常用的定位技术和路径规划算法。

3. 学生了解地理信息系统(GIS)在校园导航系统中的作用,并掌握基本操作方法。

技能目标:1. 学生能够运用所学知识,设计并实现一个简单的校园导航系统。

2. 学生能够运用GIS软件进行地图数据处理、分析和可视化。

3. 学生能够通过小组合作,解决实际校园导航中的问题,提高团队协作能力。

情感态度价值观目标:1. 学生对校园导航系统产生兴趣,认识到科技在生活中的重要作用。

2. 学生在探究过程中,培养勇于尝试、不断优化的科学精神。

3. 学生通过解决实际问题,增强对学校环境的责任感,提高爱护公共设施的意识。

本课程针对初中年级学生,结合信息技术和地理学科,以实用性为导向,培养学生运用科技手段解决实际问题的能力。

课程设计注重理论与实践相结合,充分考虑学生的年龄特点和认知水平,通过小组合作、动手实践等方式,激发学生兴趣,提高学生的综合素养。

在教学过程中,教师需关注学生的学习进度,及时调整教学策略,确保课程目标的实现。

二、教学内容本章节教学内容主要包括以下几部分:1. 校园导航系统概述:介绍校园导航系统的基本概念、构成要素和应用场景,对应教材中“地理信息系统及其应用”章节。

2. 定位技术:讲解全球定位系统(GPS)、无线局域网(WLAN)等定位技术在校园导航系统中的应用,结合教材中“定位技术及其发展”章节。

3. 路径规划算法:介绍Dijkstra、A*等路径规划算法,分析其在校园导航系统中的作用,对应教材中“路径规划与优化”章节。

4. 地理信息系统(GIS)操作:学习GIS软件的基本操作,包括地图数据处理、分析和可视化,结合教材中“GIS软件与应用”章节。

5. 实践项目:设计并实现一个简单的校园导航系统,包括地图数据采集、路径规划、导航功能等,分阶段完成,对应教材中“实践项目与应用”章节。

数据结构课程设计_校园导航系统 _课程设计报告

数据结构课程设计_校园导航系统 _课程设计报告

南京工程学院课程设计说明书(论文)题目校园导航系统课程名称数据结构院系通信工程学院专业信息工程班级学生姓名学号设计地点指导教师设计起止时间:2008 年12月29 日至年月日目录1.课程设计题目 (1)2.软件功能描述 (1)3.软件总体设计 (1)3.1数据结构描述与定义 (1)3.2模块设计 (3)4.测试结果与分析 (4)5.课程设计总结 (5)附录:源程序清单 (6)1.课程设计题目校园导航系统2.软件功能描述在近一个星期的努力下,我编写的校园导航系统软件终于能够成功完成。

采用工程思想,将系统共分一下几个模块:数据结构定义模块、导航图建立模块、求最短路径模块、主菜单;下面是具体各功能简单的实际应用:➢数据结构定义模块:模块定义了导航图中各个节点的基本结构类型,主要采用邻接矩阵的存储结构来真实反映各节点到其他所有节点的路径长度(权值大小)。

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

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

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

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

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

以上程序的几个模块,构成了校园导航系统的基本组成部分,程序运行良好,达到了课程设计的基本要求。

由于所学知识有限,功能各个方面还有欠妥之处,希望得到指出与改正。

3.软件总体设计3.1数据结构描述与定义1.节点数据结构类型:#define MAX_V 30 //最大顶点个数typedef struct{char* vexs[MAX_V]; //顶点向量int arcs[MAX_V][MAX_V];//邻接矩阵int vexnum,arcnum;//图的当前顶点数和弧数}MGraph;2.创建导航图函数:int CreateUDN(MGraph &G)函数描述:主要将每个节点进行命名、每个顶点到其他所有定点的路径值用邻接矩阵进行存储。

数据结构课程设计—校园导航报告

数据结构课程设计—校园导航报告

课程设计报告学院、系:大学学院计算机科学与技术系专业:软件工程班级:2008级9班课程设计科目数据结构学生:04080904 喆指导教师:娄雅芳完成时间:2010年10月-12月校园导航系统设计报告一、设计任务与目标设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

本系统是一个涉及大学学院相关景点和场所查询系统,是为了方便人们能够更快更准地获得学校各个景点和场所的详细信息。

本系统为用户提供以下功能:(一)、查询了解学校概况,为导游参观者提供关于学校的相关信息。

(二)、查询校园各个场所和景点信息;(三)、为导游者或外来人员参观人员提供校园交通信息,方便用户走访学校。

校园导航查询系统的开发方法总结如下:(1) 调查,了解学校各个场所与场所或者是各个景点与景点之间的信息,路径和距离,从外来人员或者参观者和走访者的角度出发,该如何设计才能满足用户需求。

(2) 分析,对调查得到的数据进行分析,根据其要求实现的功能分析系统结构和界面将实现的基本功能。

(3) 设计与开发,设计系统界面并编辑实现其各个功能的代码。

(4) 调试,在设计完成后,调试系统运行的状况,修改完善系统,然后进行测试。

二、方案设计与论证校园旅游模型是由各个景点和景点以及场所和场所之间的路径组成的,所以这完全可以用数据结构中的图来模拟。

用图的结点代表景点或场所,用图的边代表景点或场所之间的路径。

所以首先应创建图的存储结构。

结点值代表景点信息,边的权值代表景点间的距离。

结点值及边的权值采用图存储。

本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。

计算路径长度,最短路线和最佳路径时可分别用迪杰斯特拉(Dijkastra)算法和哈密而顿回路算法实现。

最后用switch选择语句选择执行浏览景点信息或查询最短路径和距离。

校园导航定位系统课程设计

校园导航定位系统课程设计

校园导航定位系统课程设计一、课程目标知识目标:1. 理解并掌握校园导航定位系统的基本原理与功能;2. 学习并运用相关的地理信息系统(GIS)知识,进行校园地图的解读与分析;3. 了解全球定位系统(GPS)及其在校园导航中的应用。

技能目标:1. 能够运用校园导航定位系统,进行校园内位置信息的查找与路径规划;2. 培养学生团队协作能力,通过小组讨论、分享,共同解决校园导航中遇到的问题;3. 提高学生的实际操作能力,学会使用相关设备和技术进行定位与导航。

情感态度价值观目标:1. 培养学生对地理信息科学的兴趣,激发学生探索未知、勇于创新的精神;2. 强化学生的环保意识,倡导绿色出行,提高学生对校园环境的保护意识;3. 培养学生热爱学校、关爱他人的情感,提高学生社会责任感。

本课程针对中学生设计,结合学科特点,以实用性为导向,充分考虑学生年龄特点和认知水平。

通过本课程的学习,使学生能够将所学知识应用于实际生活,提高解决问题的能力,同时培养良好的情感态度价值观。

课程目标具体、可衡量,为后续教学设计和评估提供明确方向。

二、教学内容1. 校园导航定位系统原理介绍- 导航定位技术的发展背景与现状- 校园导航定位系统的组成与工作原理2. 地理信息系统(GIS)知识- 校园地图的基本要素与解读- GIS在校园导航中的应用3. 全球定位系统(GPS)应用- GPS的原理与功能- GPS在校园导航中的实际应用4. 实践操作与案例分析- 校园导航定位设备的认识与使用- 实际操作:校园内路径规划与导航- 案例分析:解决校园导航中遇到的问题5. 团队协作与讨论分享- 小组讨论:探讨校园导航定位系统的优缺点- 分享经验:介绍个人在校园导航中的实用技巧教学内容依据课程目标,结合教材章节,确保科学性和系统性。

教学大纲明确,教学内容安排合理,注重理论与实践相结合,充分调动学生的积极性与参与度。

通过本章节的学习,使学生深入理解校园导航定位系统的相关知识,提高实际操作能力。

数据结构课程设计之校园导航系统

数据结构课程设计之校园导航系统

##大学数据结构课程设计报告题目:校园导航系统院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 2011.6.19--6.30指导教师:指导教师评语:成绩:签名:年月日20XX—20XX年度第 2 学期一、需求分析1.问题描述:从理工大学的平面图中选取10个有代表性的景点,抽象成一个无向带权图。

以图中顶点表示景点,边上的权值表示两地之间的距离,求取任意两点间最短路径。

2.基本功能本程序主要实现的功能是为用户提供路径咨询。

根据用户指定的始点和终点输出相应路径(用到output()函数),或者根据用户指定的景点输出景点的信息(用到search()函数)。

3.输入输出本程序主要输入输出信息是景点编号和景点名称,以字符串的形式输入输出。

二、概要设计1.设计思路:本程序是校园导航系统,即求两点间的最短路径。

其主要算法是迪杰斯特拉算法,在此基础上再加上菜单函数输出函数造图函数查找函数即可。

2.数据结构设计:抽象数据类型图的定义如下:ADT Graph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。

数据关系R:R={VR}VR={(v,w)|v,w V,(v,w)表示v和w之间存在路径}基本操作p:CreatGraph(&G,V,VR)初始条件:V是图的顶点集,VR是图中边的集合。

操作结构:按V和VR的定义构造图G。

DestroyGraph(&G)初始条件:图G存在。

操作结果:销毁图G。

LocateVex(G,u)初始条件:图G存在,u和G中顶点有相同特征。

操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。

GetVex(G,v)初始条件:图G存在,v是G中某个顶点。

操作结果:返回v的信息。

FirstEdge(G,v)初始条件:图G存在,v是G中某个顶点。

操作结果:返回依附于v的第一条边。

若该顶点在G中没有邻接点,则返回“空”。

NextEdge(G,v,w)初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《校园导航系统》课程设计报告姓名:学号:班级:网络专业:网络工程指导教师:时间: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(); 游客菜单,判断是否非法输入,不会死循环。

void Map(); 输出民大地图,由于时间关系,没有画出。

void ViewAsk(); 游客查询景点函数,让游客选择要查询的景点,判断是否非法输入,不会死循环。

void PathAsk(); 问路函数,根据游客的起点和终点给出最短路径,判断是否非法输入,不会死循环。

void Dijkstra(MGraph G,int v,int i); 迪杰斯特拉函数求最短路径void Ppath(MGraph G,int path[],int i,int v); 输出最短路径中的景点void Dispath(MGraph G,int dist[],int path[],int s[],int n,int v,int i); 查找最短路径。

void AdminMenu(); 管理员菜单,判断是否非法输入,不会死循环。

void Password(); 密码函数,管理员需输入密码才能进入后台,输入一次后无需再输入。

void AdminAlter(); 修改密码,需要再次输入密码。

void ViewAdd(); 增加景点,列出已有景点,判断新景点信息是和与已有景点的冲突,如冲突需重新输入,判断是否非法输入,不会死循环。

void ViewAlter(); 修改景点信息,由于时间关系,没有判断新修改的景点信息是否与已有景点信息冲突。

若要做次判断,应与增加景点的判断算法一致。

void ControlMenu(); 交通管制菜单,判断是否非法输入,不会死循环。

void PathControl(); 路径管理,可增加路径和修改路径,列出已有路径,根据用户的输入进行管理,判断是否非法输入,不会死循环。

但路径长度为整型,没有判断,若输入非整型,则进入死循环,一个大大的BUG ,能力有限。

void PathDel(); 删除路径,列出已有路径,用户根据提示进行删除。

判断是否非法输入,不会死循环。

void Read(MGraph &G); 读取文件。

void White(MGraph &G); 保存文件。

2.3操作界面 程序一开始登录主界面:游客菜单:管理员界面管理员界面管理员操作界面查询景点查询最短路径修改密码增加景点修改景点信息交通管制界面删除路径管理路径3 调试分析:当进入操作界面进行功能的选择,但非法输入时,应该提示错误并可以让用户重新选择,我使用的接收选择的是字符串,判断字符串长度是否等于1,如果不等于则是错误的,等于1后用switch 判断第一个字符,与case比较,调用相应的函数。

用whlie(1),使之一直循环,直到与case中相同,使用标志和break;让他跳出相应的循环层。

在这里经常会出错,所以要很小心的判断每个标志跳出的相应的循环,使他不会跳出不该跳出的循环。

另一个问题是最短路径。

在新增一个景点后,我选择不添加相邻的路径时(矩阵的行等于列始终为0,表示同一个景点到同一个景点的路径为0),再次查询最短路径时,起点为新增的路径,终点为任何一个景点都无法运行;但是起点为除新增景点外的景点,而终点为新增景点时,可正确输出:没有路径。

由于时间原因来不及调试了。

参考文献[1]严蔚敏、吴为民.数据结构(C语言版).北京:清华大学出版社.2007[2]林小茶.C语言程序设计(第二版).中国铁道出版社.2010[3]杜茂康、李昌兵等.C++面向对象程序设计(第2版).北京:电子工业出版社.2011附录源程序<All.h>:头文件详细代码#include<iostream.h>#include<iomanip.h>#include<fstream.h>#include<string.h>#include<conio.h>#include<stdlib.h>#include<stdio.h>#define MAXV 100#define INF 10000typedef struct{char code[10];char name[20];char instruction[100];}ViewPoint;typedef struct{int edges[MAXV][MAXV];int number;ViewPoint V[MAXV];}MGraph;void MainMenu();void UserMenu();void Map();void ViewAsk();void PathAsk();void Dijkstra(MGraph G,int v,int i);void Ppath(MGraph G,int path[],int i,int v);void Dispath(MGraph G,int dist[],int path[],int s[],int n,int v,int i); void AdminMenu();void Password();void AdminAlter();void ViewAdd();void ViewAlter();void ControlMenu();void PathControl();void PathDel();void Read(MGraph &G);void White(MGraph &G);<Main.cpp>:主函数#include"All.h"main(){int pass;char name[10],password[10];ifstream indata("Password.txt");indata>>pass>>name>>password;indata.close();pass=0;ofstream outdata("Password.txt");outdata<<pass<<endl<<name<<endl<<password;outdata.close();MainMenu();}<Menu.cpp>:菜单功能#include"All.h"void MainMenu(){system("cls");char choose[1];cout<<"\n\n\n"<<setw(56)<<"欢迎光临广西民族大学,祝您旅途愉快!"<<endl;cout<<setw(55)<<"广西民族大学校园导航系统为您服务!"<<endl;cout<<endl<<setw(45)<<"1.进入导航系统"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(45)<<"2.登录操作系统"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(37)<<"3.退出"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<endl<<setw(46)<<"请输入您的选择:";cin>>choose;if(strlen(choose)==1){switch(choose[0]){case '1':UserMenu();break;case '2':Password();break;case '3':exit(0);default:system("cls");cout<<"\n\n\n"<<endl<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(52)<<"按任意键返回主菜单重新选择!";cout<<endl;getch();MainMenu();break;}}else{system("cls");cout<<"\n\n\n"<<endl<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(52)<<"按任意键返回主菜单重新选择!";cout<<endl;getch();MainMenu();}}void UserMenu(){system("cls");char choose[1];int flag=0;cout<<"\n\n\n"<<setw(45)<<"校园导航系统!"<<endl;cout<<endl<<setw(45)<<"1.查看校园地图"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(45)<<"2.景点信息查询"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(45)<<"3.景点问路查询"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(43)<<"4.返回主菜单"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(37)<<"5.退出"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<endl<<setw(46)<<"请输入您的选择:";cin>>choose;if(strlen(choose)==1){switch(choose[0]){case '1':Map();break;case '2':ViewAsk();break;case '3':PathAsk();break;case '4':MainMenu();break;case '5':exit(0);default:system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();UserMenu();}}else{system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();UserMenu();}}void Password(){system("cls");char name[10],password[10];char entername[10],enterpassword[10];char choose[1];int pass,flag=0,flag1=0;ifstream indata("Password.txt");indata>>pass>>name>>password;indata.close();if(pass)AdminMenu();else{cout<<"\n\n\n"<<setw(40)<<"用户名:";cin>>entername;cout<<endl<<setw(40)<<"密码:";cin>>enterpassword;if(strcmp(name,entername)==0&&strcmp(password,enterpassword)==0) {pass=1;ofstream outdata("Password.txt");outdata<<pass<<endl<<name<<endl<<password;outdata.close();AdminMenu();}else{system("cls");cout<<"\n\n\n";cout<<setw(47)<<"用户名或密码错误!"<<endl;while(1){if(flag1){system("cls");cout<<"\n\n\n";}cout<<endl<<setw(45)<<"1.重新输入密码"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(43)<<"2.返回主菜单"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(37)<<"3.退出"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<endl<<setw(46)<<"请输入您的选择:";cin>>choose;if(strlen(choose)==1){switch(choose[0]){case '1':flag=1;Password();break;case '2':flag=1;MainMenu();break;case '3':exit(0);default:flag1=1;system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();}if(flag)break;}else{flag1=1;system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();}}}}}void AdminMenu(){system("cls");char choose[1];int flag=0;cout<<"\n\n\n"<<setw(45)<<"后台操作系统!"<<endl;cout<<endl<<setw(46)<<"1.操作员信息管理"<<endl;cout<<setw(46)<<"────────"<<endl;cout<<setw(44)<<"2.增加景点信息"<<endl;cout<<setw(46)<<"────────"<<endl;cout<<setw(44)<<"3.修改景点信息"<<endl;cout<<setw(46)<<"────────"<<endl;cout<<setw(44)<<"4.道路交通管制"<<endl;cout<<setw(46)<<"────────"<<endl;cout<<setw(42)<<"5.返回主菜单"<<endl;cout<<setw(46)<<"────────"<<endl;cout<<setw(36)<<"6.退出"<<endl;cout<<setw(46)<<"────────"<<endl;cout<<endl<<setw(46)<<"请输入您的选择:";cin>>choose;if(strlen(choose)==1){switch(choose[0]){case '1':AdminAlter();break;case '2':ViewAdd();break;case '3':ViewAlter();break;case '4':ControlMenu();break;case '5':MainMenu();break;case '6':exit(0);default:system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();AdminMenu();}}else{system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();AdminMenu();}}void ControlMenu(){system("cls");char choose[1];cout<<"\n\n\n"<<setw(45)<<"道路交通管制!"<<endl;cout<<endl<<setw(41)<<"1.管理路径"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(41)<<"2.删除路径"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(45)<<"3.返回上级菜单"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(37)<<"4.退出"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<endl<<setw(46)<<"请输入您的选择:";cin>>choose;if(strlen(choose)==1){switch(choose[0]){case '1':PathControl();break;case '2':PathDel();break;case '3':AdminMenu();break;case '4':exit(0);default:system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();ControlMenu();}}else{system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();ControlMenu();}}<User.cpp>:包涵游客用的函数#include"All.h"void Map(){system("cls");cout<<"\n\n\n"<<setw(42)<<"map!"<<endl;cout<<endl<<setw(47)<<"按任意键继续...";cout<<endl;getch();UserMenu();}void ViewAsk(){system("cls");MGraph G;char viewpoint[20];char choose[1];int i,flag=0,flag1=1,flag2=0;Read(G);cout<<"\n\n\n"<<setw(44)<<"民大景点:"<<endl<<endl;for(i=0;i<G.number;i++)cout<<setw(34)<<"("<<G.V[i].code<<")"<<G.V[i].name<<endl;while(1){cout<<endl<<setw(55)<<"请输入要查询的景点代码或名称:";cin>>viewpoint;for(i=0;i<G.number;i++){flag1=1;flag2=0;if(strcmp(G.V[i].code,viewpoint)==0||strcmp(G.V[i].name,viewpoint)==0){flag1=0;cout<<"\n\n"<<setw(37)<<"代码"<<":"<<G.V[i].code<<endl;cout<<setw(37)<<"名称"<<":"<<G.V[i].name<<endl;cout<<setw(37)<<"简介"<<":"<<G.V[i].instruction<<endl<<endl;while(1){cout<<setw(48)<<"是否继续查询(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){flag2=1;break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){flag=1;UserMenu();break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//while}//ifif(flag2||flag)break;}//forif(flag1){cout<<endl<<setw(46)<<"没有要查询的景点!"<<endl;while(1){cout<<setw(48)<<"是否继续查询(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){UserMenu();break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//while}}}void PathAsk(){system("cls");MGraph G;char choose[1];char start[10],end[10];int i,j,flag=0,flag1=1,flag2=0,flag3=1;Read(G);cout<<"\n\n\n"<<setw(43)<<"民大景点:"<<endl<<endl;for(i=0;i<G.number;i++)cout<<setw(34)<<"("<<G.V[i].code<<")"<<G.V[i].name<<endl;cout<<endl<<setw(45)<<"请输入景点代码!"<<endl;while(1){flag=0,flag1=1,flag2=0,flag3=1;cout<<endl<<setw(40)<<"起点:";cin>>start;for(i=0;i<G.number;i++){if(strcmp(G.V[i].code,start)==0){flag1=0;cout<<setw(40)<<"终点:";cin>>end;for(j=0;j<G.number;j++){if(strcmp(G.V[j].code,end)==0){flag3=0;Dijkstra(G,i,j);while(1){cout<<setw(48)<<"是否继续查询(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){flag2=1;break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){flag=1;UserMenu();break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//whileif(flag||flag2)break;}if(flag||flag2)break;}//forif(flag3){cout<<endl<<setw(44)<<"没有该终点!"<<endl;while(1){cout<<setw(48)<<"是否继续查询(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){flag2=1;break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){flag=1;UserMenu();break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//while}if(flag2||flag)break;}if(flag||flag2)break;}//forif(flag1){cout<<endl<<setw(44)<<"没有该起点!"<<endl;while(1){cout<<setw(48)<<"是否继续查询(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){flag2=1;break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){flag=1;UserMenu();break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//while}//if}//while}void Dijkstra(MGraph G,int v,int i2) //v为出发顶点{int dist[MAXV],path[MAXV];int s[MAXV];int mindis,i,j,u;for(i=0;i<G.number;i++){dist[i]=G.edges[v][i]; //赋值s[i]=0;if(G.edges[v][i]<INF)path[i]=v;elsepath[i]=-1;}s[v]=1;path[v]=0;for(i=0;i<G.number;i++){mindis=INF;for(j=0;j<G.number;j++)if(s[j]==0&&dist[j]<mindis){u=j;mindis=dist[j];}s[u]=1;for(j=0;j<G.number;j++)if(s[j]==0)if(G.edges[u][j]<INF&&dist[u]+G.edges[u][j]<dist[j]){dist[j]=dist[u]+G.edges[u][j];path[j]=u;}}Dispath(G,dist,path,s,G.number,v,i2);}void Ppath(MGraph G,int path[],int i,int v){int k;k=path[i];if(k==v)return;Ppath(G,path,k,v);cout<<G.V[k].name<<"→";}void Dispath(MGraph G,int dist[],int path[],int s[],int n,int v,int i){if(dist[i]!=0){if(s[i]==1){cout<<endl<<setw(24)<<"从"<<G.V[v].name<<"到"<<G.V[i].name<<"的最短路径长度为:"<<dist[i]<<endl;cout<<setw(30)<<"路径为:"<<G.V[v].name<<"→";Ppath(G,path,i,v);cout<<G.V[i].name<<"\n\n";}elsecout<<endl<<setw(29)<<"从"<<G.V[v].name<<"到"<<G.V[i].name<<"不存在路径!\n";}else{cout<<endl<<setw(24)<<"从"<<G.V[v].name<<"到"<<G.V[i].name<<"的最短路径长度为:"<<dist[i]<<endl;cout<<setw(30)<<"路径为:"<<G.V[v].name<<"→"<<G.V[i].name<<"\n\n";}}<Admin.cpp>:包涵操作员使用到的函数#include"All.h"void AdminAlter(){system("cls");char newname[10];char enterpassword[10],newpassword[10],repassword[10];char name[10],password[10];char choose[1];int pass,flag=0,flag1;ifstream indata("Password.txt");indata>>pass>>name>>password;indata.close();cout<<"\n\n\n"<<setw(45)<<"请输入密码:";cin>>enterpassword;if(strcmp(password,enterpassword)==0){while(1){system("cls");cout<<"\n\n\n"<<setw(45)<<"设置新的用户名:";cin>>newname;cout<<endl<<setw(45)<<"设置新的密码:";cin>>newpassword;cout<<endl<<setw(45)<<"重复新的密码:";cin>>repassword;if(strcmp(newpassword,repassword)==0){ofstream outdata("Password.txt");outdata<<pass<<endl<<newname<<endl<<newpassword;outdata.close();system("cls");cout<<"\n\n\n"<<setw(45)<<"修改成功!"<<endl;cout<<endl<<setw(48)<<"按任意键继续...";cout<<endl;getch();AdminMenu();break;}else{system("cls");cout<<"\n\n\n"<<setw(49)<<"两次输入的密码不一致!"<<endl;flag1=0;while(1){if(flag1){system("cls");cout<<"\n\n";}cout<<endl<<setw(41)<<"1.重新设置"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(45)<<"2.返回上级菜单"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(37)<<"3.退出"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<endl<<setw(46)<<"请输入您的选择:";cin>>choose;if(strlen(choose)==1){switch(choose[0]){case '1':flag=1;break;case '2':flag=1;AdminMenu();break;case '3':exit(0);default:flag1=1;system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();}if(flag)break;}else{flag1=1;system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();}}}}}else{system("cls");cout<<"\n\n\n"<<setw(44)<<"密码不正确!"<<endl<<endl;flag1=0;while(1){if(flag1){system("cls");cout<<"\n\n\n";}cout<<setw(45)<<"1.重新输入密码"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(45)<<"2.返回上级菜单"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<setw(37)<<"3.退出"<<endl;cout<<setw(45)<<"───────"<<endl;cout<<endl<<setw(46)<<"请输入您的选择:";cin>>choose;if(strlen(choose)==1){switch(choose[0]){case '1':flag=1;AdminAlter();break;case '2':flag=1;AdminMenu();break;case '3':exit(0);default:flag1=1;system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();}if(flag)break;}else{flag1=1;system("cls");cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl;cout<<endl<<setw(49)<<"按任意键返回重新选择!";cout<<endl;getch();}}}}void ViewAdd(){system("cls");MGraph G;char adjcode[10];char choose[1];int i,k=0,flag=0,flag1=1,flag2=0,flag3=1,length;Read(G);cout<<"\n\n\n"<<setw(43)<<"已有景点:"<<endl<<endl;for(i=0;i<G.number;i++)cout<<setw(34)<<"("<<G.V[i].code<<")"<<G.V[i].name<<endl;cout<<endl;while(1){flag1=1;flag2=0;cout<<endl<<setw(46)<<"新增景点代码:";cin>>G.V[G.number].code;for(i=0;i<G.number;i++){if(strcmp(G.V[i].code,G.V[G.number].code)==0){flag1=0;cout<<endl<<setw(52)<<"新景点代码与已有代码冲突!"<<endl;cout<<setw(44)<<"请重新输入!"<<endl<<endl;break;}}if(flag1){cout<<setw(46)<<"新增景点名称:";cin>>G.V[G.number].name;for(i=0;i<G.number;i++){flag1=1;if(strcmp(G.V[i].name,G.V[G.number].name)==0){flag1=0;cout<<endl<<setw(52)<<"新景点名称与已有名称冲突!"<<endl;cout<<setw(44)<<"请重新输入!"<<endl<<endl;break;}}if(flag1){cout<<setw(46)<<"新增景点简介:";cin>>G.V[G.number].instruction;cout<<endl;for(k=0;k<=G.number;k++){if(k==G.number)G.edges[G.number][k]=0;elseG.edges[G.number][k]=G.edges[k][G.number]=10000;}while(1){cout<<setw(49)<<"是否增加路径(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){cout<<endl;while(1){cout<<setw(46)<<"相邻的景点代码:";cin>>adjcode;for(k=0;k<G.number;k++){if(strcmp(G.V[k].code,adjcode)==0){flag3=0;cout<<setw(46)<<"两景点间的距离:";cin>>length;G.edges[G.number][k]=G.edges[k][G.number]=length;}}if(flag3)cout<<endl<<setw(44)<<"没有该景点!";while(1){cout<<endl<<setw(50)<<"是否继续增加路径(Y/N):";cin>>choose;cout<<endl;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0)break;else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){flag2=1;break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}if(flag2)break;}break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0)break;elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}G.number++;cout<<endl;while(1){cout<<setw(45)<<"增加景点成功!"<<endl;White(G);cout<<setw(50)<<"是否继续增加景点(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){ViewAdd();break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){flag=1;cout<<"\n\n\n"<<setw(44)<<"保存成功!"<<endl;cout<<endl<<setw(47)<<"按任意键继续...";cout<<endl;getch();break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//whileif(flag)break;}}//if}//whileAdminMenu();}void ViewAlter(){system("cls");MGraph G;char viewpoint[20];char newcode[10],newname[20],newinstruction[100];char choose[1];int i,k=0,flag=0,flag1=1,flag2=0;Read(G);cout<<"\n\n\n"<<setw(44)<<"已有景点:"<<endl<<endl;for(i=0;i<G.number;i++)cout<<setw(34)<<"("<<G.V[i].code<<")"<<G.V[i].name<<endl;while(1){cout<<endl<<setw(55)<<"请输入要修改的景点代码或名称:";cin>>viewpoint;for(i=0;i<G.number;i++){flag1=1;flag2=0;if(strcmp(G.V[i].code,viewpoint)==0||strcmp(G.V[i].name,viewpoint)==0){flag1=0;cout<<"\n\n"<<setw(37)<<"代码"<<":"<<G.V[i].code<<endl;cout<<setw(37)<<"名称"<<":"<<G.V[i].name<<endl;cout<<setw(37)<<"简介"<<":"<<G.V[i].instruction<<endl<<endl;cout<<setw(48)<<"无需修改按回n跳过"<<endl;cout<<setw(39)<<"新代码:";cin>>newcode;if(strcmp(newcode,"n")!=0&&strcmp(newcode,"N")!=0)strcpy(G.V[i].code,newcode);cout<<setw(39)<<"新名称:";cin>>newname;if(strcmp(newname,"n")!=0&&strcmp(newname,"N")!=0)strcpy(G.V[i].name,newname);cout<<setw(39)<<"新简介:";cin>>newinstruction;cout<<endl;if(strcmp(newinstruction,"n")!=0&&strcmp(newinstruction,"N")!=0) strcpy(G.V[i].instruction,newinstruction);White(G);while(1){cout<<setw(50)<<"是否继续修改(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){flag2=1;break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0)。

相关文档
最新文档