




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Southwest university of science and technology 本科毕业设计(论文)地图上两点间最短道路标定的实现学院名称信息工程学院专业名称通信工程学生姓名学号指导教师二一四年六月VI西南科技大学本科生毕业论文地图上两点间最短道路标定的实现摘要:在电子信息化飞速发展的今天,电子地图成功避免了传统地图制作周期长、更新困难等缺点,以使用快捷方便,功能丰富多样的优势得到了日益广泛和深入的应用。由此,电子地图在日常生活如电子导航、交通旅游、城市规划以及电力、通讯等各种管网、管线的布局设计中发挥了重要的作用。而地图上两点间最短道路的标定则是电子地图的一项基本功能,实现的方法也多种多样。 本文研究设计在VC环境下的两点间最短道路标定实现,研究的核心是最短路径算法,可以以路径网络为基础,用户通过给出起点和终点,并赋予一定的权值,可得到从起点到终点的最短路线图。关键词:电子地图; 最短路径; Visual C+全套设计加扣3012250582 The realization of calibrating the shortest path between two points on the electronic mapAbstract:In the rapid development of informatization, electronic map has avoided some disadvantages of traditional map such as a longer manufacture circle and the difficulties in updating which is supposed to be efficient, convenient and versatile that has been used widely and deeply. Therefore, it plays an important role in electronic navigation, tourist traffic, city planning and the design of all kinds of pipe network such as electricity and communications. And the realization of calibrating the shortest path between two points on the map is a basic function in electronic map, which has a lot of implementation methods.This paper design the realization of calibrating the shortest path between two points on the map under the VC environment, at the core of study is the shortest path algorithm. It can calibrate the shortest road map from start to end through the starting and finishing point with some certain weights which are given by user based on the path network.Keywords: Electronic map, shortest path, Visual C+目 录第1章 绪论11.1 本文选题背景及意义11.2 国内外研究现状21.3 设计任务及要求31.4 设计思路与拟采用方法4第2章 Visual C+图像处理简介52.1 Visual C+简介52.2 图形设备接口GDI52.2.1 概述62.2.2 设备环境62.2.3 环境设备DC的获取72.3 MFC简介72.3.1 MFC设备环境类72.3.2 画笔和画刷82.3.3 GDI对象82.3.4 绘制基本图形9第3章 需求分析103.1 可行性分析103.1.1 技术可行性103.1.2 经济可行性103.1.3 操作可行性103.2 功能需求103.3 系统操作流程图11第4章 系统设计124.1 引言124.2 系统整体模块设计124.3 系统部分模块分析134.3.1 数据存储管理模块134.3.2 最短路径计算模块134.3.3 比例换算模块144.3.4 图形显示模块144.4 最短路径算法144.4.1 基本思想154.4.2 算法原理154.4.3 时间复杂度164.4.4 算法流程图174.5 扩展功能184.5.1 启动画面184.5.2 坐标显示184.5.3 系统时间显示19第5章 系统调试与运行205.1 系统调试205.2 系统测试与运行205.2.1 测试方法205.2.2 测试内容215.2.3 测试结果245.3 调试总结25结论27致谢28参考文献29附录1:最短路径算法实现30附录2:启动画面实现代码33西南科技大学本科生毕业论文第 1 章 绪 论1.1 本文选题背景及意义 从总体背景来看,随着计算机的普及以及地理信息科学的发展,GIS(Geographic Information System)因其强大的功能得到日益广泛和深入的应用。网络分析作为GIS 最主要的功能之一,在电子导航、交通旅游、城市规划以及电力、通讯等各种管网、管线的布局设计中发挥了重要的作用,而网络分析中最基本最关键的问题是最短路径问题。最短路径不仅仅指一般地理意义上的距离最短,还可以引申到其它的度量,如时间、费用、线路容量等。相应地,最短路径问题就成为最快路径问题、最低费用问题等1。由于最短路径问题在实际中常用于汽车导航系统以及各种应急系统等(如110 报警,119火警以及医疗救护系统),这些系统一般要求计算出到出事地点的最佳路线的时间应该在l秒至3秒内,在行车过程中还需要实时计算出车辆前方的行驶路线,这就决定了最短路径问题的实现应该是高效率的。其实,无论是距离最短、时间最快还是费用最低,它们的核心算法都是最短路径算法2。 从具体功能来看,空间分析是GIS的一项十分重要的任务和最具有特色的功能,是基于地理目标的位置和形态特征的空间数据分析,其目的是提取和发现隐含的空间信息或规律,是空间数据挖掘和知识发现的基本方法之一。空间分析不是简单地通过“检索”、“查询”或“统计”从地理数据库提取时空信息,而是利用各种空间分析模型及空间操作对地理数据库中的空间数据进行深加工,进而产生新的知识。空间分析是空间数据的空间特性与非空间特性的联合分析,即拓扑与属性数据的联合分析3。最短路径分析以路径网络为基础,用户通过给出起点和终点,并赋予一定的权值,可得到从起点到终点的最短路线图,同时提供给用户路径长度、车程、时间等交通信息4。在生活节奏不断提高的今天,这种服务给人们的出行带来了极大的便利。随着WebGIS的发展,人们还可以通过Internet获取实时路径信息,这给最短路径分析的应用带来了更加广阔的发展空间。经典的最短路径算法Dijkstra算法是目前多数系统解决最短路径问题采用的理论基础,只是不同系统对Dijkstra算法采用了不同的实现方法。这种算法不仅可以找到最短的路径,而且可以给出从起点出发到图中所有节点的最短路径这正是此种算法的特色。经过算法的优化探索与研究后,势必将大大提高实际工作的时间与空间效率其在应用中的意义十分重大,改进后的算法能基本满足军事地理信息系统,由于要处理的数据的种类多和数量大,更倾向于稳定性好、易实现、效率高的算法,这也是最优路径算法的特点。 根据课题的基本特点与实际条件,预计应该达到下列目的: 1.通过毕业设计加强并融会贯通课程学习过程当中获取的知识; 2.利用毕业设计提高解决实际问题的能力; 3.体会并初步掌握科研和产品开发的基本要领; 4.锻炼并且提高科技工作总结技能。1.2 国内外研究现状 据统计,目前提出的此类最短路径的算法大约有17种。F. Benjamin Zhan等人对其中的15种进行了测试,结果显示有3种效果比较好,它们分别是:TQQ(graph growth with two queues)、DKA(the Dijkstras algorithm implemented with approximate buckets) 以及DKD (the Dijkstras algorithm implemented with double buckets )。其中TQQ算法的基础是图增长理论,较适合于计算单源点到其他所有点间的最短距离;后两种算法则是基于Dijkstra的算法,更适合于计算两点间的最短路径问题。总体来说,这些算法采用的数据结构及其实现方法由于受到当时计算机硬件发展水平的限制,将空间存储问题放到了一个很重要的位置,以牺牲适当的时间效率来换取空间节省。目前,空间存储问题已不是要考虑的主要问题,因此有必要对已有的算法重新进行考虑并进行改进,可以用空间换时间来提高最短路径算法的效率2。Dijkstra算法是荷兰数学家E. W. Dijkstra于1959年提出的标号设定法(label setting algorithms)是理论上最完善、迄今为止应用最广的非负权值网络最短路径算法。算法采用的数据结构及其实现方法由于受到当时计算机硬件发展水平的限制,将空间存储问题放到了一个很重要的位置,以牺牲适当的时间效率来换取空间节省。目前,空间存储问题已不是要考虑的主要问题,因此有必要对已有的算法重新进行考虑并进行改进,从而提高最短路径算法的效率。经典的Dijkstra算法将网络结点分成3部分:未标记结点、临时标记结点和永久标记结点。网络中所有结点首先初始化为未标记结点;在搜索过程中和最短路径中的结点相连通的结点为临时标记结点;每次循环都是从临时标记结点中搜索距源点路径长度最短的结点作为永久标记结点,直至找到目标结点或者所有的结点都成为永久标记结点才结束算法5。这个算法的时间复杂度是。采用顺序计算找k个最短路径问题最早是在1959年由Hoffman和Pavley提出的6。之后,Fox提出的算法的复杂度为。Eppstein最近提出的最短路径算法性能有了比较显著的提高。他采用一种k个最短路径的隐式表达,计算给定的源结点和目的结点之间隐式的时间复杂度为。采用Eppstein算法,计算从所有顶点到给定顶点的k个最短路径的之间复杂度为。1.3 设计任务及要求 研究内容: 1.查阅相关资料,掌握最短路径算法的实现原理和具体过程。 2.熟悉VC+6.0图像编程的基本操作,能利用MFC编写简单的图像界面应用程序。 3.在VC+6.0下实现最短路径搜索算法。 4.搜索过程中要求若找不到直达路径则保留搜索离终点最近的路径。 特色:使学生熟悉利用VC+6.0进行图像编程的操作,为以后从事图像编程和开发积累初步的工程实践经验。关键问题:1)最短路径搜索算法的程序实现。 2)当没有直达路径时需保留与终点最接近的路径。 基本目标:在给定一幅图片(地图)上任意指定两点,通过编程搜索找出两点间的最短路径(道路)并在原图中显示出来。 扩展目标:比例尺换算、实际距离标定。1.4 设计思路与拟采用方法 首先需要找到一张地图,可以在百度或者高德地图上任意截取一张(需要注意尺寸不宜过大)。然后是设计的主体,道路标定的实现。虽然说是地图,其实截下来的只是一张图片,计算机并不能识别,所以只能换一种思路。由于最短路径算法计算的是节点间的路径,所以我们可以在地图上设置一些节点,由这些节点来构成道路。而这些节点在地图中应该位于道路的交叉点或者弯道上,其他的地方则没有设置节点的必要,这样可以节省数据空间和运算速度,因为最短路径算法是遍历所有节点的,效率并不是很高,所以越多的节点意味着更加长的运算时间。节点设置好以后再初始化他们之间的距离,不相连的节点距离设置为无穷大,这样就可以构成一幅带权图了。图1-1为设置的所有节点,共计46个。 图1-1 道路节点设置第 2 章 Visual C+图像处理简介2.1 Visual C+简介 Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。 虽然微软公司推出了Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。Visual C+6.0不仅是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过一个名为Developer Studio的组件集成为开发环境。本次设计使用的平台为Microsoft Visual Studio 2008,它相比Visual C+6.0更加高效,使用更加方便,支持更高的系统,是较新的一个版本。2.2 图形设备接口GDIWindows是一个图形操作系统,其所有的图形可视效果都是通过绘制操作来完成的。图形显示的实质就是利用Windows提供的图形设备接口将图形绘制在显示器上。大多数应用程序都需要在客户区绘制一下图形,如绘制文本、几何图形、位图和光标等。Windows提供了一个称为图形设备接口GDI(Graphics Device Interface)的抽象接口。GDI作为Windows的重要组成部分,它负责管理用户绘图操作时功能的转换。用户通过调用GDI函数与设备打交道,GDI通过不同设备提供的驱动程序将绘图语句转换为对应的绘图指令,避免了直接对硬件进行操作,从而实现所谓的设备无关性。2.2.1 概述图形设备接口GDI管理Windows应用程序图形的绘制,在应用程序中,通过调用GDI函数绘制不同尺寸、颜色、风格的几何图形、文本和位图。这些图形处理函数组成了图形设备接口GDI。GDI是形成Windows核心的三种动态链接库之一,MFC将GDI函数封装在一个名为CDC的设备环境类中,因此我们可以通过调用CDC类的成员函数来完成绘图操作。所谓设备无关性是指操作系统屏蔽了硬件设备的差异,使用户编程时一般无需考虑设备的类型,如不同种类的显示器或打印机。Windows绘图过程和设备无关性的实现如图2-1所示。图2-1 Windows绘图过程和设备无关性实现GDI处于设备驱动程序的上一层,当程序调用绘图函数时,GDI将绘图命令传送给当前设备的驱动程序,以调用驱动程序提供的接口函数。驱动程序的接口函数将Windows绘图命令转化为设备能够执行的输出命令,实现图形的绘制。不同设备具有不同的驱动程序,设备驱动程序是设备相关的。2.2.2 设备环境为了实现设备无关性,应用程序的输出不直接面向显示器等物理设备,而是面向一个称之为设备环境DC(Device Context)的虚拟逻辑设备。设备环境也称设备描述表或设备上下文,它是由Windows管理的一个数据结构,它保存了绘图操作中一些共同需要设置的信息,如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。形象地说,一个设备环境提供了一张画布和一些绘画的工具,我们可以使用不同颜色的工具在上面绘制点、线、圆和文本。设备环境中的“设备”是指任何类型的显示器或打印机等输出设备,绘图时用户不用关心所使用设备的编程原理和方法。所有的绘制操作必须通过设备环境进行间接的处理,Windows自动将设备环境所描述的结构映射到相应的物理设备上。从根本上来说,设备环境DC是一个Windows数据结构,该结构存储着程序向设备输出时所需要的信息,应用程序利用它定义图形对象及其属性,并实现应用程序、设备驱动程序和输出设备之间绘图命令的转换。在Windows中不使用DC无法进行输出,在使用任何GDI绘图函数之前,必须建立一个设备环境。2.2.3 环境设备DC的获取在程序中不能直接存取DC数据结构,只能通过系统提供的一系列函数或使用设备环境的句柄HDC来间接地获取或设置设备环境结构中的各项属性,如显示器高度和宽度、支持的颜色数及分辨率等。如果采用SDK方法编程,获取DC的方法有两种:在WM_PAINT消息处理函数中通过调用API函数BeginPaint()获取设备环境,在消息处理函数返回前调用API函数EndPaint()释放设备环境;在其他函数中通过调用API函数GetDC()获取设备环境,调用API函数ReleaseDC()释放设备环境。本设计采用MFC方法编程,MFC提供了不同类型的DC类,每一个类都封装了DC句柄,并且它们的构造函数自动调用获取DC的API函数,析构函数自动调用释放DC的API函数。因此,在程序中通过声明一个MFC设备环境类的对象就自动获取了一个DC,而当该对象被销毁时就自动释放了获取的DC。MFC AppWizard应用程序向导创建的OnDraw()函数自动支持所获取的DC。2.3 MFC简介MFC的DC类包括CDC、CPaintDC、CClientDC、CWindowDC和CMetaFileDC等,其中CDC类是MFC设备环境类的基类,其它的MFC设备环境类都是CDC的派生类。2.3.1 MFC设备环境类CDC类既作为其它MFC设备环境类的基类,又可以作为一个一般的设备环境类使用。利用它可以访问设备属性和设置绘图属性。CDC类对GDI的所有绘图函数进行了封装。CPaintDC类是OnPaint()函数使用的设备环境类,它代表一个窗口的绘图画面。如果添加WM_PAINT消息处理函数OnPaint(),就需要使用CPaintDC类来定义一个设备环境对象。CClientDC代表了客户区设备环境。当在客户区实时绘图时,需要利用CClientDC类定义一个客户区设备环境。CWindowDC类代表了整个程序窗口设备环境,可以在整个窗口区域绘图。2.3.2 画笔和画刷在默认状态下,当用户创建一个设备环境并在其中绘图时,系统使用设备环境缺省的绘图工具及其属性。如果要使用不同风格和颜色的绘图工具进行绘图,用户必须重新为设备环境设置自定义的画笔和画刷等绘图工具。画笔和画刷是Windows中两种最重要的绘图工具。画笔用于绘制点、线、矩形和椭圆等几何图形;画刷用指定的颜色和图案来填充绘图区域,这些绘图工具又统称为GDI对象2.3.3 GDI对象Windows GDI提供了一些绘图对象,程序通过这些GDI对象设置绘图的工具和风格,这里的对象是指Windows数据结构,而不是C+类的对象。GDI对象是Windows图形设备接口的抽象绘图工具。除了画笔和画刷,其它GDI对象还包括字体、位图和调色板。MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen、CBrush、CFont、CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类。CDC类提供了成员函数SelectObject()选择用户自己创建的GDI对象,该函数有多种重载形式,可以选择用户已定制好的画笔、画刷、字体和位图等不同类型的GDI对象。CPen* SelectObject(CPen* pPen);CBrush* SelectObject(CBrush* pBrush);Virtual CFont* SelectObject(CFont* pFont);CBitmap* SelectObject(CBitmap* pBitmap);函数参数是一个指向用户已定制好的GDI对象的指针,选择操作成功函数将返回以前GDI对象的指针,否则返回NULL。2.3.4 绘制基本图形生成设备环境、设置绘图属性和选择绘图工具后,就可以开始绘制不同形状的几何图形,Windows中可以绘制的基本几何图形包括点、直线、曲线、矩形、椭圆、弧、扇形、弦形和多边形等。GDI提供了绘制基本图形的成员函数,这些函数封装在MFC的CDC类中。绘图函数使用的坐标都是逻辑坐标。绘制基本图形的成员函数如表2-1所示。表2-1 绘制基本图形的成员函数函数功能SetPixel用指定的颜色在指定的坐标画一个点MoveTo移动当前位置到指定的坐标,函数返回以前位置的坐标LineTo从当前位置到指定位置画一条直线PolyLine从当前位置开始,根据函数参数绘制多条折线PolyBezier根据两个端点和两个控制点绘制贝济埃(Bezier)曲线Rectangle根据指定的左上角和右下角坐标绘制一个矩形RoundRect绘制一个圆角矩形Ellipse根据指定的矩形绘制一个内切椭圆Arc根据指定的矩形绘制内切椭圆上的一段弧边ArcTo该函数功能与Arc函数相同,不同之处在于画弧成功后Pie绘制扇形Chord绘制弦形,弦形是一条椭圆弧和其对应的弦所组成的封闭图形Polygon根据两个或两个以上顶点绘制一个多边形DrawIcon在指定位置画一个图标,如果成功函数返回非0,否则返回0第 3 章 需求分析3.1 可行性分析可行性研究的目的是用最小的代价在尽可能少的时间内确定问题是否能够解决。考虑到系统开发时间、资源等因素,在实际开发该软件时,常常要为功能不完整和交付日期难以完成而苦恼,因而需要慎重地尽可能早地估价研制设计的可行性。本设计的可行性分析可从以下三方面进行分析。3.1.1 技术可行性 本设计是基于VC环境下的C+语言开发设计,学习运用其中的MFC图形化界面语言来编程,达到电子地图的基本功能要求。VC提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供保障,为开发满足客户要求的系统保证了代码的模块化要求,有利于以后对新系统的扩展和修改。网络上有许多MFC的相关教程,最短路径算法的分析也很全面,并且在校期间我曾多次接触过C+语言,对其语言结构,实现方法和函数功能查询方式也有较为深刻的理解。因此本课题在技术方面是可行的。3.1.2 经济可行性 本设计仅需要一张地图图片,可以任意在百度地图或谷歌地图上截取一张合适大小的地图来实现。所有数据均由自己采集和定义,即可实现电子地图基本功能,并不需要其它资源。所以它在经济上也是可行的。3.1.3 操作可行性 本设计为一个小型的电子地图路径标定软件,所耗费的资源非常小,运行环境要求WINDOWS操作系统,我在宿舍用自己的电脑做设计,无论是硬件还是软件都能满足条件。参考文献可以在学校图书馆借阅,相关资料也可以从网上查到,所以操作方面可行。3.2 功能需求 在VC环境下设计在给定一幅图片(地图)上任意指定两点,通过编程计算找出两点间的最短路径(道路)并在原图中显示出来。用户通过选定起点和终点,由程序计算并得出其间的最短距离和路径。同时换算出与图中距离相对应的实际距离。 要求系统运行稳定,操作界面友好。3.3 系统操作流程图 系统操作流程图如图3-1所示:图3-1 系统操作流程图第 4 章 系统设计4.1 引言 软件的设计是以一定的方法为基础的。面对越来越复杂的软件开发任务,人们提出了各种软件设计的模型。从用户需求和系统要实现的任务功能出发,把大型的软件划分为相对较小的模块。为了减少模块与模块之间的关联性,模块之间的逻辑结构相对独立,无函数的交叉调用,数据传递由全局变量完成,这就是模块化设计的基本思想。模块化设计的核心是模块的独立性,主要包括功能独立性和结构独立性,这使得软件开发的分工易于实现。规范化的模块划分,低耦合的模块间关系,统一的模块开发方式,可动态插拔的模块管理环境,这些可以降低一个软件开发过程的复杂性,减少工作难道。开发应用程序的第一步是在需求分析的基础上进行精心的模块划分,模块划分的原则是尽量保持单个模块的独立性,使模块与模块之间的耦合降到最小,每一个模块暴露给其它模块的信息最少,尽量让模块之间使用程序框架提供的服务注册机制来通信。由于模块与模块之间的耦合很小,不会像传统的开发方式中的各模块之间那样存在纠缠不清的包和类的引用关系,因此大部分模块的开发工作可以并行进行而不会互相影响。4.2 系统整体模块设计 整个系统分为四个模块。分析系统的整体架构如图4-1所示。图4-1 VC+下电子地图整体架构图4.3 系统部分模块分析4.3.1 数据存储管理模块 数据存储管理模块主要用于储存道路节点数据及其初始距离,其关键是用来存放图的任意两个顶点之间的边的权值的二维数组的初始化,即将要通过Dijkstra算法求最短路径的图各条边的权值放入二维数组中,调用OnInitialUpdate函数使程序在开始时加载这些节点。例如使用 m_Point0.x = 5; m_Point0.y = 63; m_Point1.x = 31; m_Point1.y = 76; m_Point2.x = 64; m_Point2.y = 32; 来设置0号和1号节点的坐标位置,然后通过 m_GA00 = 0; m_GA10 = m_GA01 = GetLength(m_Point0, m_Point1); m_GA11 = 0; m_GA20 = m_GA02 = 268435455; m_GA21 = m_GA12 = GetLength(m_Point1, m_Point2); m_GA22 = 0; 来初始化它们之间的距离,由于距离是以二维数组的形式存储,所以需要初始化节点到自身的距离为零,而不相通的点之间需要设置距离为无穷大,在头文件中已定义最大值MaxValue为0xFFFFFFF,即用十进制的268435455来表示无穷大。其中GetLength: double GetLength(CPoint pt1, CPoint pt2) return sqrt(double(pt1.x - pt2.x) * (pt1.x - pt2.x) + (pt1.y - pt2.y) * (pt1.y - pt2.y); 为计算两点间像素距离的函数。 由于最短路径算法是遍历所有节点的,所以在初始化节点间距离的时候需要设置任意节点到其他各个节点的距离,这些距离设置起来有些繁琐,而且修改一个节点也会影响到其他节点。4.3.2 最短路径计算模块 最短路径计算模块采用经典的Dijkstra算法,算法本身并不是按照我们的思维习惯求解从原点到第一个点的最短路径,再到第二个点的最短路径,直至最后求解完成到第n个点的最短路径,而是求解从原点出发的各有向路径的从小到大的排列,但是算法最终确实得到了从原点到图中其余各点的最短路径,可以说这是个副产品,对于算法的终结条件也应该以求得了原点到图中其余各点的最短路径为宜。算法代码详见附录1。4.3.3 比例换算模块 比例换算模块实现将像素距离转换为实际距离的功能。首先需要找到距离起点和终点最近的两个节点:int lenS = MaxValue;int lenE = MaxValue;for (int i = 0; i m_nSum; i+)double len = GetLength(m_Pointi, m_Start.point);if (len lenS)lenS = len;m_Start.index = i;len = GetLength(m_Pointi, m_End.point);if (len m_pMainWnd;/获取状态指针CStatusBar *pStatus=&pFrame-m_wndStatusBar;if(pStatus)str.Format(x= %d,point.x);/显示x坐标pStatus-SetPaneText(1,str);str.Format(y= %d,point.y);/显示y坐标pStatus-SetPaneText(2,str);CFormView:OnMouseMove(nFlags, point);同时还需要在主框架窗口OnCreate()函数中设置状态栏的属性,以保证坐标显示完整:/设置坐标状态栏m_wndStatusBar.SetPaneInfo(1,IDS_COORX,SBPS_NORMAL,50); /设置x坐标栏宽度50m_wndStatusBar.SetPaneInfo(2,IDS_COORY,SBPS_NORMAL,50); /设置y坐标栏宽度504.5.3 系统时间显示 在程序中显示当前系统时间是许多软件所具有的功能,可以使用户方便地查看时间,有效避免了不小心耽误重要的事情。 这里需要用到一个定时器函数: SetTimer(1,1000,NULL); /1000毫秒发生一次定时器事件并且添加消息响应函数OnTimer(),在其中使用GetCurrentTime()获取系统时间,创建一个DC并显示在状态栏,实现代码如下:void CMainFrame:OnTimer(UINT_PTR nIDEvent)/ TODO: 在此添加消息处理程序代码和/或调用默认值CTime t=CTime:GetCurrentTime();CString str=t.Format(%H:%M:%S);CClientDC dc(this);CSize sz=dc.GetTextExtent(str);m_wndStatusBar.SetPaneInfo(3,IDS_TIMER,SBPS_NORMAL,sz.cx);m_wndStatusBar.SetPaneText(3,str);CFrameWnd:OnTimer(nIDEvent);同时还需要在OnCreate()函数中声明这段代码,这样程序启动的时候便会开始响应系统时间的函数。第 5 章 系统调试与运行5.1 系统调试 系统测试本身的目的是尽可能多地暴露程序中的错误,但是发现错误的最终目的还是为了改正错误。软件工程的根本目标是以较低的成本开发出高质量完全符合用户要求的软件,因此在成功的测试之后,还需要进一步诊断和改正程序中的错误,这就是调试的任务。系统调试工作是在系统设计过程中十分重要的一个环节,关系到本设计最终的成败。为此我对软件做了详细的测试。本设计最终的用户是此软件的开发者以及此软件的最终维护者,为软件以后升级和修改提供参考。5.2 系统测试与运行5.2.1 测试方法 系统测试目标是发现软件中的错误,在这里我们使用的是黑盒测试法和白盒测试法。把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程,也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输入信息,并且保持外部信息的完整性。因此黑盒测试又称为功能测试。与黑盒测试法相反,白盒测试法的前提是可以把程序看成装在一个透明的盒子里,也就是完全了解程序的机构和处理过程,这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路的是否都能按照预定的要求工作,白盒测试又称为结构测试。 由于此次设计软件功能明确,且黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件,所以采用黑盒测试来检测功能错误或遗漏、界面错误、数据结构或外部数据库访问错误、初始化和终止错误。5.2.2 测试内容1.界面完整度 程序界面如图5-1所示。图5-1 程序界面 主要包括4个区域: 1)地图位图区域,是放置地图文件的地方,用户设置的起点和终点、路径的标定都应位于此区域内,是软件系统操作的主要区域。 2)按键功能区域,是点击按键选项的地方,共包含3个按键:设置起点、设置终点以及显示路径,是功能实现的入口区域。 3)比例换算区域,是显示比例标尺和换算实际距离的地方,可以为用户提供直观的数据。 4)状态显示区域,是显示当前系统时间、鼠标坐标等的地方,属于扩展功能,方便使用。2.按键功能 设置起点:鼠标点击后会弹出MessageBox提示“请在地图上选择起点”,如图5-2所示。图5-2 设置起点提示 然后可用鼠标在地图中单击左键来设置一个起点,以黑色边框小圆圈表示,如图5-3所示。图5-3 设置好的起点 设置终点:同设置起点按键功能,首先点击按键,弹出提示后可在地图中设置一个终点。 显示路径:在设置好起点和终点之后,可以通过点击此按键来调用算法,从而计算出这两点间的最短路径,并用红色的实线在地图上显示。3.路径标定实现 路径标定是此次设计的主要功能,程序在获得起点和终点之后需要通过3个步骤来实现路径标定。首先,寻找一个离起点最近的节点和一个离终点最近的节点,然后算出这两段路的距离并通过最短路径算法得到两个节点间的最短路径,最后把这些路径加起来求和,即可得出最终的路径,如图5-4所示。图5-4 路径的标定4.距离换算 由于程序缺省计算的是位图上的像素距离,所以在投入使用时需要将像素距离转换为实际距离,单位为米,如图5-5所示。图5-5 距离换算5.2.3 测试结果 对系统的设计功能测试结果表明:系统基本实现了地图上两点间最短路径标定的功能。同时还实现了比例尺换算功能和实际距离标定功能。但与事先设想的有一些差距,主要有以下两点: 1.此次设计的思路是在道路交叉点出设置节点来构成网络,所使用的地图只是一张图片,所以并不能真正意义上的实现地图功能。最明显的一点就是地图中的建筑物不能绕过,因为在进行路径标定的时候是只考虑起点、终点与其最近节点的直线距离的,所以如果起点或终点没有设置在道路中央的话,则可能出现路径穿过建筑物的情况,如图5-6所示。图5-6 一种错误的路径显示 2.同样是由于这种设计思路的原因,导致某些路径在计算时会优先寻找相邻节点,从而使路径绕远了,如图5-7所示。图5-7 另一种错误的路径显示其实以上两种问题都可以解决,方法就是尽可能多的设置节点,而不仅仅是在道路的交叉口上。最理想的情况就是在除了有建筑物的地方都设置满节点,然后在初始化距离的时候注意有障碍物的点之间取无穷值来表示不通即可。但是这样做的话数据量会非常大,最短路径算法的效率本身就不高,如果设置太多的节点,遍历所需的时间会大大增加,此次设计只需要完成基本的路径标定功能,暂时做不出这么多数据。5.3 调试总结在完成设计的过程中遇到过许许多多的问题,这些问题在解决之后发现非常简单,但是在调试的时候却百思不得其解。比如在实现路径标定的功能时,由于在计算总的距离的时候忘记加上两头节点到起点和终点的距离,导
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生发展跟踪系统操作规程
- 冷藏货物包装要求及注意事项
- 谁是我的偶像说课稿-2025-2026学年小学综合实践活动五年级上册浙科技版
- 客户投诉处理与售后服务标准
- 2025-2030中国进口果汁市场关税政策与本土化竞争战略研究报告
- 建安合同结算管理制度
- 2025-2030中国茶饮市场品牌竞争与连锁投资价值分析报告
- 2025-2030中国老年配方奶粉市场需求挖掘与产品定位策略研究报告
- 2025-2030中国管理咨询行业数字化转型与未来增长潜力研究报告
- 纠错与预防措施执行指南
- 酒店残疾人服务工作流程
- 中华民族共同体概论讲稿专家版《中华民族共同体概论》大讲堂之第三讲 文明初现与中华民族起源(史前时期)
- 公路工程技术创新管理制度
- 河北省承德市隆化县第二中学2023-2024学年九年级上学期期中考试物理试题(无答案)
- 蜗牛与黄鹂鸟(课件)人音版音乐二年级上册
- 3.1水循环课件高一地理人教版(2019)必修一+
- DB11∕1450-2017 管道燃气用户安全巡检技术规程
- JTG G10-2016 公路工程施工监理规范
- 《电力生产统计技术导则 第2部分供用电统计》
- 模板施工智能化技术应用
- 化学(基础模块)中职PPT完整全套教学课件
评论
0/150
提交评论