首页 > 编程语言 >基于MFC和C++的校园导航系统

基于MFC和C++的校园导航系统

时间:2022-08-24 01:22:06浏览次数:90  
标签:MFC 地图信息 路径 校园 C++ 查询 导航系统 顶点

基于MFC和C++的校园导航系统

基于MFC和C++实现校园导航系统

项目简介

设计一款面向广大师生和外来办公或参观人员的校园导航系统,为校外人员来校办事提供便利。
校园导航系统提供校园内场所信息和路径查询。系统有两类登陆账号,一类是游客,使用该系统进行场所信息功能查询和校内路线查询;一类是管理员,可以使用该系统查询校内路线,可对校园场所和路线编辑。

学习目标

一、主要内容:
开发一个能够创建校园地图、查询校园地图,并能给出校园内两个地点之间的查路线的软件。设计并实现这样一个软件主要是锻炼学生通过数据结构课程设计,进行熟悉图的创建过程、最短路径的计算、字符串、排序等数据结构内容,提高编程能力,为后续课程学习打下坚实基础。
二、基本要求:
在这个软件中,要创建一个图,可以在图中增加、修改结点(即地点)和边(即道路),能够查询各个结点,并能够给出两个结点之间的导引路线。此外,地图信息应能存储到一个硬盘文件中,而且具有读取硬盘地图信息文件的功能。
三、扩展要求:
在掌握求解最短路径算法的基础上,学习图形化界面设计(例如MFC或者QT),将校园地图信息以图形化呈现,绘制各顶点、边、最短路径。

需求

面向游客
(1)查找到相关场所的位置、信息和功能介绍;
(2)查询两点之间的最短路径。

面向管理员
(1)查询校内路径;
(2)对校园场所和道路编辑,包括添加和删除场所、道路;修改场所信息(加分项)。

输入功能
键盘输入;

输出功能
(1)输入两个点,输出最短距离及最短路径;
(2)可视化地图最短路径显示(加分项)。

实现思路描述及类之间关系图

校园导航系统的思想是将地图抽象为一个数据类型“图”,利用最短路算法计算出两位置点的最短路径。
图可以用邻接表、邻接矩阵存储,最短路算法可以使用Dijkstra算法,Floyd算法,A*算法等。
数据采集与校园地图测绘;(给出校园地图的拓扑图;数据存储表等)

语言框架

语言:C++
框架:MFC

程序界面

界面.png

管理员功能

管理员登录后,可以编辑校园地图信息,修改校园地图信息。地图信息采用文件存储,从易读性考虑,采用文本格式存储数据,数据含每个顶点的信息和每条边的权重信息,另外顶点信息中包含图显示时候的X,Y坐标位置。考虑到能可视化编辑交通图(添加删除顶点和边信息,以及调整顶点的位置,修改顶点和边的信息等),因此需要额外做一个校园导航地图编辑界面,在此界面可以创建新的顶点,创建新的边,以及删除不要的顶点和边,最重要的是支持鼠标选择某个顶点,将该顶点安置到其他位置,所有信息编辑好后,选择编辑菜单的保存功能,会把修改后的交通图信息重新保存到文件。

编辑校园地图信息.gif

游客功能

游客登录后,程序自动读取文件中的图信息,构建邻接矩阵,采用迪杰斯特拉算法计算单源最短路径。考虑到用户界面的友好化设计,因此设计了一个起点的下拉框列表和一个终点的下拉框列表,用户从下拉框列表中选择起点和终点后,再选择按路程或是耗时查询,即可将路径在交通图中高亮显示,同时为了进一步提升用户体验,支持鼠标点击起点,再点击终点,就能高亮显示起点和终点之间的路径。

查询导航地图.gif

源码传送门

传送门:https://pan.baidu.com/s/1fy7QBQydoZmJlrUS0pOLUw?pwd=1111

标签:MFC,地图信息,路径,校园,C++,查询,导航系统,顶点
From: https://www.cnblogs.com/codewriter/p/16618413.html

相关文章

  • C++ 函数重载
    1.C++可以使用同名函数[重载函数]实现功能类似的多个不同函数,C语言不支持函数重载;2.函数名重载即函数名相同,但是,函数的参数(形参)绝不相同:1)参数个数不同;2)或参数的类......
  • C++ 默认参数
    1.C++支持函数的默认参数,C语言不支持;2.默认参数只能放在最后面。#include<iostream>#include<windows.h>#include<string>usingnamespacestd;voidscorePri......
  • C++一些新的特性的理解
    一、智能指针为什么需要智能指针?智能指针主要解决一下问题:内存泄漏:内存手动释放,使用智能指针可以自动释放共享所有权的指针的传播和释放,比如多线程使用同一个对象时......
  • C++ Primer“引用的引用”
    《C++primer》中有一句因为引用本身不是对象,所以不能定义引用的引用。inti=1024;int&a=i;int&b=a;容易引起误解,语句int&b=a;并没有语法错误。可以这......
  • const限定符_c++Primer
    const对象必须初始化,因为const对象一旦创建后其值就不能改变。默认情况下,const对象仅在文件内有效在一个文件中定义const,在多个文件中声明并使用,解决办法:对于const变量不......
  • C++协程
    协程协程是能暂停执行以在之后恢复的函数。协程是无栈的:它们通过返回到调用方暂停执行,并且恢复执行所需的数据与栈分离存储。这样就可以编写异步执行的顺序代码(例如不......
  • Ubuntu 安装C++和OpenCV
    Ubuntu+OPenCV与C++的测试 opencv编译依赖文件安装sudoaptinstallbuild-essentialsudoaptinstallcmakegitlibgtk2.0-devpkg-configlibavcodec-devlibavfor......
  • C++ 数组作为函数的参数
    1.一个指针在32位操作系统上占4个字节,一个指针在64位操作系统上占8个字节,但是,编译器为了兼容32位操作系统和64位操作系统,所以指针都是4个字节长度。下面程序中的形参本质......
  • C++强制类型转换
    强制类型转换旧风格的强制转型(typename)value来自C语言。typename(value)纯粹的C++格式使用C++的类型转换符static_caststatic_cast<新类型>(表达式)......
  • [题解]轮流拿牌问题_一道博弈论笔试题(C++)
    题目A和B轮流从一个数组左右两端取数,A先B后,每次取一个数,最终取数总和大者获胜,两人每次都会选择最有利的策略,求获胜者取数的和。思路笔试时遇到的一道算法题,也是博弈论中......