搜档网
当前位置:搜档网 › 基于QT的校园导航系统的设计与实现

基于QT的校园导航系统的设计与实现

基于QT的校园导航系统的设计与实现

摘要

本文主要是介绍利用Linux系统和QT制作校园导航系统的设计方法。使用的操作系统是Linux系统,但是在windows系统下也是可以使用的,所使用的语言是c++,开发工具是QT。

设计的主要目的是能够简单地观看整个校园的风景,使不熟悉校园的人能够知道每个景点的位置、介绍,查看学校的建筑物,包括建筑物的图片以及建筑物的描述。尤其,这个系统可以找出两个建筑物之间最短的距离,从而迅速地帮助不熟悉校园的人了解整个校园环境,然后找到最好的方法去参观整个校园,除此之外,该系统还可以查询两个景点之间的所有路径,有助于来往者跟好的选择路径。导航系统是在Linux系统(Linux 下开发,windows下也可以运行)下,先利用QT制作出用户界面,再利用C++编程语言设计出基本功能并与界面相结合。

本文设计的导航系统能够实现以下三大功能:第一,它可以测量两个建筑物之间的距离,同时在查询两个景点之间的路径信息的同时,提供起始点与终点建筑物的图片信息,便于更好的确认;第二,它可以帮助来访者从众多的路线中选出最短的一条,同时会提供两点之间的所有路径;第三,它可以在标志性建筑添加一些描述信息和图片,还可以查看从该建筑物到所有其他建筑物的路径信息。

关键词路径规划;最短路径算法;校园导航;qt

The school navigate system based on Linux

and Qt Creator

Abstract

Mainly introduced in this paper using the Linux system and QT campus navigation system design method. Use of the operating system is Linux system, but also can use under Windows system, the language is used by c + +, development tools is QT.

The main purpose of design is to be able to simply watch the scenery of the whole campus, who is familiar with the campus can know the location of each scenic spot, introduction, see the school buildings, including the structure of the pictures and the description of the building. Especially, the system can find out the shortest distance between two buildings, so as to help people who are not familiar with the campus rapidly understand the campus environment, and find the best way to visit the whole campus, in addition, the system can also query all paths between two spots, help going back and forth with good choice path. Navigation system is in the Linux system (under Linux development, also can run under Windows), the first user produced using QT, using c + + programming language basic design. Function and combining with the interface.

The navigation system is designed in this paper can achieve the following three functions: first, it can measure the distance between the two buildings, at the same time the query path information between two sites at the same time, provide the picture of the starting point and end point building information, to facilitate better confirmation; Second, it can help visitors from many choose the shortest route, at the same time will provide all the path between two points; Third, it can add some description in landmark information and pictures, you can also view from the building to all the other path information of the building.

Key words path planning; ant algorithm; the campus navigation; qt

目录

摘要 (i)

Abstract .................................................................................................................................... i i 1 绪论 .. (1)

1.1概述 (1)

1.2研究背景 (1)

1.3研究目标 (1)

1.4本章小结 (1)

2 QT简介 (2)

2.1 QT的背景介绍 (2)

2.2 QT实现的结构原理 (2)

2.3 QT QWidget简介 (3)

2.3.1 详细描述 (3)

2.3.2 QWidget 事件简介 (4)

2.4 QT应用程序的实现 (6)

2.5 本章小结 (7)

3 需求分析 (8)

3.1 需求分析概述 (8)

3.2 需求分析的特点 (8)

3.3 需求分析需要完成的任务 (8)

3.4 实际需求分析 (9)

3.4.1 用户需求分析 (9)

3.4.2 功能需求分析 (9)

3.4.3 实际需求分析 (9)

3.4.4 系统性能需求分析 (9)

3.5 本章小结 (10)

4 总体设计 (11)

4.1 总体设计概述 (11)

4.2 系统总体设计描述 (11)

4.3 系统总体设计模块划分 (11)

4.3.1 主要模块划分图 (12)

4.3.2 显示系统主界面模块设计 (12)

4.3.3 查询导航有关人员模块设计 (13)

4.3.4 导航主界面的模块的设计 (13)

4.4 本章总结 (14)

5 详细设计 (15)

5.1 详细设计概述 (15)

5.2 校园导航系统主程序流程图 (15)

5.3 单源最短路径算法介绍 (16)

5.3.1 Dijkstra(迪杰斯特拉)算法 (16)

5.3.2 floyed(弗洛耶德)算法 (17)

5.4 图中节点与路径的存储 (19)

5.4.1 节点的存储 (19)

5.4.2 节点间路径长度的存储 (19)

5.4.3 整个图的存储 (20)

5.5本章总结 (20)

6 系统实现及运行结果 (21)

6.1 界面设计 (21)

6.1.1 主窗体设计 (21)

6.1.2 子页面布局设计 (24)

6.1.3 更换起始点的实现 (27)

6.1.4 点击主页面中的查询路径具体实现 (29)

6.1.5 点击查看景点信息描述的实现 (29)

6.2 图的创建 (31)

6.3 路径查询的具体实现 (31)

6.3.1 单源最短路径算法具体实现 (32)

6.3.2 所有可达路径的查询的具体实现 (33)

6.3.3 每一个点到它可达的所有点的查询的具体实现 (33)

6.4 选择系统是否退出的具体实现 (34)

6.5 本章小结 (35)

7 测试 (36)

7.1 测试目标 (36)

7.2 测试预期结果 (36)

7.3 测试用例的设计 (36)

7.4 本章小结 (38)

结论 (39)

参考文献 (40)

致谢 (41)

外文原文 (42)

中文翻译 (47)

1 绪论

1.1概述

现在科技越来越发达,手机上的软件,电脑上的软件越来越多,所以开发小的程序也越来越有必要。QT具备跨平台,易扩展,界面华丽,性能稳定等优点。因此,以嵌入式处理器作为硬件平台,以QT作为程序框架,两者的完美结合必将成为未来技术的发展方向。

1.2研究背景

现在,汽车正在普及,道路不断建设,城际间的经济往来更加频繁,活动的区域也越来越大。为了提高生活质量,大量的休闲活动、探险活动的举行使我们并不局限在自己认识的一小块区域中,不认识道路,找不到目的地的情况也屡有发生。就此,各种各样的导航仪逐渐走进我们的生活。

无论什么导航仪最主要的部分都是电子地图。开发电子地图成为了导航仪的关键。根据调查,电子地图制作困难而且价格相当昂贵,给导航仪的开发带来了很多不便。自主绘制电子地图,编写电子地图应用程序,不管是从经济上还是研究上都具有非常大的意义。

现在,各个学校都有了自己的导航系统,但是开发工具语言,还有平台不一样。所以,如果拥有一个跨平台的程序的话,那将会给我们的开发节省了大量的时间。QT正是一个支持多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。所以使用QT作为应用程序框架是一个不错的选择。

1.3研究目标

本课题名为校园地理信息系统。本系统以太原理工大学为模型,旨在建立一个本学校的导航系统,可以根据不同人的要求,足不出户,就可以浏览校园,得到各种信息基于上述背景,开发一个校园导航项目,使用linux搭配qt来构建这个项目。利用QT4作为系统应用层的程序框架。开发一个可以运行的小客户端。这个客户端虽然是在linux下开发的,但是它是可移植的,在windows下也可以运行。

1.4本章小结

本章主要介绍本项目的选题背景、意义,选题目标。通过介绍,了解当今社会主要是校园,导航系统的需求以及重要性,明白研究该系统的必要性。

2 QT简介

2.1 QT的背景介绍

Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang 的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP。

Qt Creator包含了一套用于创建和测试基于Qt应用程序的高效工具,包括:

一个高级的C++代码编辑器上下文感知帮助系统可视化调试器源代码管理项目和构建管理工具.

优良的跨平台特性:Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64),Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。

面向对象:Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。

2.2 QT实现的结构原理

Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。

Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。

Qt/Embedded的实现结构如图2-1所示:

图2-1 QT的实现结构图

Qt/Embedded 的底层图形引擎基于framebuffer。Framebuffer 驱动程序的实现分为两个方面:一方面是对LCD及其相关部分的初始化,包括画在缓冲区的创建

和对DMA通道的设置;另外一方面是对画面缓冲区的读写,具体到代码为read、write、lseek等系统调用接口。至于将画面缓冲区的内容输出到LCD显示屏上,则由硬件自动完成。对于软件来说是透明的。当对于DMA通道和画面缓冲区设置完成后,DMA开始正常工作,并将缓冲区中的内容不断发送到LCD上。这个过程是基于DMA对于LCD的不断刷新的。基于该特性,framebuffer驱动程序必须将画面缓冲区的存储空间(物理空间)重新映射到一个不加高缓存和写缓存的虚拟地址区间中,这样能才保证应用程序通过mmap将该缓存映射到用户空间后,对于该画面缓存的写操作能够实时的体现在LCD上。

QT程序是基于C++编写的,图形用户界面编程同时需要运行效率和高水平的灵活性。Qt通过结合C++的速度为这一领域提供了Qt对象模型。

Qt把下面这些特性添加到了C++当中:

一种被称为信号和槽的非常强大的机制;可查询和可设计的属性项;强大的事件和事件过滤器;根据上下文进行国际化的字符串翻译;完善的时间间隔驱动的计时器等。

许多Qt的特性是基于QObject的继承,通过标准C++技术实现的。

QApplication是必须构造的Qt主对象,需要在一开始的时候就构造这个对象,并把命令行参数传递给这个对象,每个Qt应用程序有且仅有一个QApplication对象,该对象必须在做其他事之前创建,这个对象处理一些底层操作,如事件处理、字符串本地化和控制界面外观等。

信号和信号处理函数是GUI应用程序用来响应用户输入的基本机制,也是所有GUI库的核心特征,Qt的信号处理机制由信号(signal)和槽(slot)构成,它们相当于GTK+中的信号和回调函数。在Qt中回调函数就叫做槽。

信号和槽用于对象间的通讯,它的基本语法为:

connect(object1,signal1,object2,slot1);

2.3 QT QWidget简介

2.3.1 详细描述

QWidget 类是所有用户界面对象的基类。通俗的来讲,基本上所有的 UI 类都是由 QWidget Qt 继承出来的,而 QWidget 继承于 QObject, 大家可以查阅 Qt source 即可发现一些微妙的写法,如这篇文章有详细介绍:Qt 库对象数据的声明和使用窗口层次窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按 Z 轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。 QDialog 是最普通的顶级窗口。不被嵌入到一个父窗口部件的窗口部件被叫做顶级窗口部件。通常情况下,顶级窗口部件是有框架和标题栏的窗口(尽管如果使用了一定的窗口部件标记,创建顶级窗口部件时也可能没有这些装饰。)在 Qt 中,QMainWindow 和和不同的 QDialog 的子类是最普通的顶级窗口。一个没有父窗口部件的窗口部件一直是顶级窗口部件。非顶级窗口部件是子窗口部件。它们是它们的父窗口部件中的子窗口。你通常不能在视觉角度从它们的父窗口部件中辨别一个子窗口部件。在 Qt 中的绝大多数其它窗口部件仅仅作为子窗口部件才是有用的。(当然把一个按钮作为或者叫做顶级窗口部件也是可能的,但绝大多数人喜欢把他们的按钮放到其它按钮当中,比如QDialog。) QWidget 有很多成员函数,但是它们中的一些有少量的直接功能:例如,

QWidget 有一个字体属性,但是它自己从来不用。有很多继承它的子类提供了实际的功能,比如 QPushButton、 QListBox 和 QTabDialog 等等。每一个窗口部件构造函数接受一个或两个标准参数: 1. QWidget *parent = 0 是新窗口部件的父窗口部件。如果为 0(默认),新的窗口部件将是一个顶级窗口部件。如果不是,它将会使 parent 的一个孩子,并且被 parent 的几何形状所强迫(除非你指定 WType_TopLevel 作为窗口部件标记)。

2.3.2 QWidget 事件简介

基本事件:

* paintEvent() –只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现它并且不在 paintEvent()之外在屏幕上绘制是明智的。

* resizeEvent() –当窗口部件被重新定义大小时被调用。

* mousePressEvent() –当鼠标键被按下时被调用。有六个鼠标相关事件,但是鼠标按下和鼠标释放事件是到目前为止最重要的。当鼠标在窗口部件内或者当它使用grabMouse()来捕获鼠标时,它接收鼠标按下事件。

* mouseReleaseEvent() –当鼠标键被释放时被调用。当窗口部件已经接收相应的鼠标按下事件时,它接收鼠标释放事件。这也就是说如果用户在你的窗口部件内按下鼠标,然后拖着鼠标到其它某个地方,然后释放,你的窗口部件接收这个释放事件。这里有一个例外:如果出现在弹出菜单中,当鼠标键被按下时,这个弹出菜单立即会偷掉这个鼠标事件。

* mouseDoubleClickEvent() –和它看起来也许不太一样。如果用户双击,窗口部件接收一个鼠标按下事件(如果他们没有拿牢鼠标,也许会出现一个或两个鼠标移动事件)、一个鼠标释放事件并且最终是这个事件。直到你看到第二次点击是否到来之前,不能从一个双击中辨别一个点击。(这是为什么绝大多数图形用户界面图书建议双击是单击的一个扩展,而不是一个不同行为的触发的一个原因。)如果你的窗口部件仅仅包含子窗口部件,你也许不需要实现任何一个事件处理器。如果你想检测在子窗口部件中的鼠标点击,请在父窗口部件的 mousePressEvent()中调用子窗口部件的hasMouse()函数。

接收键盘的窗口部件需要重新实现一些更多的事件处理器:

* keyPressEvent() –只要键被按下和当键已经被按下足够长的时间可以自动重复了就被调用。注意如果 Tab 和 Shift+Tab 键被用在焦点变换机制中,它们仅仅被传递给窗口部件。为了强迫那些键被你的窗口部件处理,你必须重新实现

QWidget::event()。

*focusInEvent() –当窗口部件获得键盘焦点(假设你已经调用

setFocusPolicy())时被调用。写得好的窗口部件意味着它们能按照一种清晰但谨慎的方式来获得键盘焦点。

* focusOutEvent() –当窗口部件失去键盘焦点时被调用。

一些窗口部件也许需要实现一些不太普通的事件处理器:

* mouseMoveEvent() –只要当鼠标键被按下时鼠标移动就会被调用。举例来说,对于拖动,这个很有用。如果你调用 setMouseTracking(TRUE),尽管没有鼠标键被按下,你也会获得鼠标移动事件。(注意这个使用鼠标跟踪的应用程序在低下的 X 连接下不是很有用。(也可以)参考拖放信息。

* keyReleaseEvent() –只要键被释放和当如果这个键是自动重复的并且被按下一段时间时就被调用。在这种情况下窗口部件接收一个键释放事件并且对于每一个重复立即有一个键按下事件。注意如果 Tab 和 Shift+Tab 键被用在焦点变换机制中,它们仅仅被传递给窗口部件。为了强迫那些键被你的窗口部件处理,你必须重新实现QWidget::event()。

* wheelEvent() —当窗口部件拥有焦点时,只要用户转动鼠标滚轮就被调用。

* enterEvent() –当鼠标进入这个窗口部件屏幕空间时被调用。

* leaveEvent() –当鼠标离开这个窗口部件的屏幕空间时被调用。

* moveEvent() –当窗口部件相对于它的父窗口部件已经被移动时被调用。

* closeEvent() –当用户关闭窗口部件时(或这当 close()被调用时)被调用。这里还有一些不太明显的事件。它们在 qevent.h 中被列出并且你需要重新实现

event()来处理它们。event()的默认实现处理 Tab 和 Shift+Tab(移动键盘焦点)并且其它绝大多数事件给上面提到的一个或更多的特定处理器。

Window flag 标识关于 QWidget 的 flag 的介绍: enum Qt::WindowType flags Qt::WindowFlags 这两个参数参阅官方文档。 Qt 的 WindowFlags 有很多,实际使用时,若不关心窗口层次的话,大可不比太关心这个。比如说在 Window 上做应用开发,大可只关注:Qt::Dialog,Qt::Tool,Qt::Window 即可。但若是做嵌入式开发就得好好看看这个属性,整理好这部分属性,有利于窗口管理。

着重介绍几个重要成员函数:

bool QWidget::close () [slot] 关闭这个窗口部件。如果窗口部件被关闭,返回真,否则返回假。首先它发送给这个窗口部件一个 QCloseEvent。如果它接收这个关闭事件,它就被隐藏了。

QWidget::closeEvent()的默认实现是接收这个关闭事件。当最后一个可视的顶级窗口部件被关闭,QApplication::lastWindowClosed()信号被发射。注意窗口的 enum Qt::WidgetAttribute 属性,窗口默认属性是 Qt::WA_MacOpaqueSizeGrip,设置上这个属性意味着窗口调用 close()只销毁了 UI 想关,QWidget 内还有很多内存空间没有释放,需调用 delete 销毁 QWidget 。若需要在调用 close 时一并销毁窗口可以给窗口设置 Qt::WA_DeleteOnClose 属性。

bool QWidget::event ( QEvent * e ) [虚保护] 这是主事件处理器,它处理事件 e。你可以在子类中被重新实现整个函数,但是我们建议你使用一个特定的事件处理器来替代它。主事件首先把事件传递给所有已经被安装的事件过滤器。如果没有过滤器中途截取这个事件,它调用一个特定的事件处理器。键按下和释放事件被处理得和其它事件不同。event()检查 Tab 和 Shift+Tab 并且试图适当地移动焦点。如果没有窗口部件被焦点移入(或者键按下不是 Tab 或 Shift+Tab),event()调用keyPressEvent()。如果它能够把一个事件传递给没个东西,这个函数就返回真,否则如果没有任何东西想要这个事件,返回假。

也可以参考 closeEvent()、focusInEvent()、focusOutEvent()、enterEvent()、keyPressEvent()、keyReleaseEvent() 、leaveEvent() 、 mouseDoubleClickEvent() 、mouseMoveEvent() 、mousePressEvent() 、 mouseReleaseEvent() 、 moveEvent() 、paintEvent() 、 resizeEvent() 、 QObject::event()和 QObject::timerEvent()。void QWidget::paintEvent ( QPaintEvent * ) [虚保护] 这个事件处理器可以在子

类中被重新实现来接收绘制事件。

绘制事件就是重新绘制这个窗口部件的所有部分的一个请求。它可以是 repaint()或 update() 的结果,或者因为这个窗口部件原来被变暗并且现在已经不再被覆盖了,或者其它很多原因。很多窗口部件在当它们被请求时,它们很简单地重新绘制整个界面,但是一些比较慢的窗口部件需要通过仅仅绘制被请求的区域

QPaintEvent::region()进行优化。这个速度优化不会改变结果,在事件处理过程中,绘制仅仅发生在被改变的区域中。例如,QListView 和 QCanvas 就是这样做的。

Qt 也试图通过把多个绘制事件合并为一个来加快绘制速度。 update()被调用几次或者窗口当系统发送几次绘制事件,Qt 把它们合并为一个比较大区域(请参考QRegion::unite())的一个事件中。repaint()不允许这样优化,所以只要可能我们建议使用 update()。当绘制事件发生,更新区域通常被擦除,所以你正在这个窗口部件的背景上绘制。这里有一些例外并且 QPaintEvent::erased()告诉你这个窗口部件是否被擦除。

背景可以通过使用setBackgroundMode()、setPaletteBackgroundColor()或setBackgroundPixmap()来设置。setBackgroundMode()的文档详细描述了背景,我们建议你去读一下。

void QWidget::raise () [槽] 把这个窗口部件升高到它的父窗口部件的栈的顶部。如果在屏幕上有与这个窗口部件重叠的兄弟,这个窗口部件将在它后来的这些兄弟之前变的可视了。也可以参考 lower()和 stackUnder()。 void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽] 通过立即调用 paintEvent()来直接重新绘制窗口部件,除非更新是失效的或者窗口部件被隐藏。如果 erase 为真,Qt 在 paintEvent()调用之前擦除区域(x,y,w,h)。如果 w 是负数,它被

width()-x 替换,并且如果 h 是负数,它被 height()-y 替换。如果你需要立即重新绘制,我们建议使用 repaint(),比如在动画期间。在绝大多数情况下, update()更好,因为它允许 Qt 来优化速度并且防止闪烁。警告:如果你在一个函数中调用repaint(),而它自己又被 paintEvent()调用,你也许会看到无线循环。update()函数从来不会产生循环。也可以参考 update()、paintEvent()、updatesEnabled 和erase()。

2.4 QT应用程序的实现

由以上简介可知,Qt是一个创建GUI程序的C++类库,编写Qt应用程序的主要工作是基于已有的Qt类编写用户类。

Qt提供了一组范围相当广泛的C++类库,并包含了几种命令行和图形界面的工具,有效地使用这些工具可以加速开发过程。

Qt Designer:Qt设计器。用来可视化地设计应用程序界面。

Qt Linguist:Qt语言学家。用来翻译应用程序。以此提供对多种语言的支持。

Qmake:使用此工具可以由简单的、与平台无关的工程文件来生成编译所需的Makefile。

Qt Assistant:关于Qt的帮助文件。类似于MSDN。可以快速地发现你所需要的帮助。

moc:元对象编译器。

uic:用户界面编译器。在程序编译时被自动调用,通过ui_*.h文件生成应用程序

界面。

Qt应用程序的设计使用基于工程的方法,并通过.pro文件进行工程管理。实现应用程序的第一步是编写.pro文件,然后使用QT4自带的qmake工具生成Makefile,最后进行源代码的编译。

Qmake的过程如下:

qmake –project //生成.pro的工程文件

qmake //生成Makefile

nmake //编译

2.5 本章小结

随着越来越多的第三方软件公司利用Qt/Embedded开发嵌入式Linux下的应用软件,Qt的应用已经越来越广泛。本章主要介绍了QT的背景和描述了QT实现的结构原理,还简述了QT的相关特性。此外,也介绍了QT应用程序开发时的相关工具。

3 需求分析

3.1 需求分析概述

在系统工程及软件工程中,需求分析指的是在创建一个新的或改变一个现存的系统或产品时,确定新系统的目的、范围、定义和功能时所要做的所有工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个过程中最关键的一个过程。假如在需求分析时,分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。

3.2 需求分析的特点

需求分析是一项重要的工作,也是最困难的工作。该阶段工作有以下特点:

(1)用户与开发人员很难进行交流

在软件生存周期中,其它四个阶段都是面向软件技术问题,只有本阶段是面向用户的。需求分析是对用户的业务活动进行分析,明确在用户的业务环境中软件系统应该"做什么"。但是在开始时,开发人员和用户双方都不能准确地提出系统要"做什么?"。因为软件开发人员不是用户问题领域的专家,不熟悉用户的业务活动和业务环境,又不可能在短期内搞清楚;而用户不熟悉计算机应用的有关问题。由于双方互相不了解对方的工作,又缺乏共同语言,所以在交流时存在着隔阂。

(2)用户的需求是动态变化的

对于一个大型而复杂的软件系统,用户很难精确完整地提出它的功能和性能要求。一开始只能提出一个大概、模糊的功能,只有经过长时间的反复认识才逐步明确。有时进入到设计、编程阶段才能明确,更有甚者,到开发后期还在提新的要求。这无疑给软件开发带来困难。

(3)系统变更的代价呈非线性增长

需求分析是软件开发的基础。假定在该阶段发现一个错误,解决它需要用一小时的时间,到设计、编程、测试和维护阶段解决,则要花2.5、5、25、100倍的时间。因此,对于大型复杂系统而言,首先要进行可行性研究。开发人员对用户的要求及现实环境进行调查、了解,从技术、经济和社会因素三个方面进行研究并论证该软件项目的可行性,根据可行性研究的结果,决定项目的取舍。

3.3 需求分析需要完成的任务

虽然功能需求是对软件系统的一项基本需求,但却并不是唯一的需求,通常对软件系统有下述几方面的综合要求。

1.功能需求

2.性能需求

3.可靠性和可用性需求

4.出错处理需求

5.接口需求

6.约束

7.逆向需求

8.将来可能提出的要求

3.4 实际需求分析

3.4.1 用户需求分析

目前,我们可以通过各种途径接触校园导航,例如以网页形式的电子地图,如Google地图、Google Earth、百度地图等,以车载GPS导航仪的电子地图,如garmin 任我游、纽曼、新科、城际通等,还有以手机导航功能出现的电子地图,越来越多的手机将支持导航功能,诺基亚2010年在大规模普及手机导航。

对此,本项目采用免费版的QT4作为程序框架,并且可以跨平台使用,在开发成本上有着很大的优势。

未来几年,配备电子地图的电子产品市场将逐渐走向成熟,市场需求和产品销量会保持大幅增长,产品供应链中的各类企业将获得巨大商机。尤其是随着产品价格的不断下降,这种快速发展的态势会愈加明显。电子地图在中国市场必然会获得更大的发展空间。

由此,本项目也适应用户需求,开发校园导航的相关功能:景点信息显示、最短路径查找等。

3.4.2 功能需求分析

根据用户需求,和对产品的定位,划分以下功能:

(1)设计太原理工大学的校园平面图,所含景点不少于5个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等信息。

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

(3)为来访客人提供图中任意景点的问路查询,即查询任意两个顶点之间的一条最短的简单路径。

3.4.3 实际需求分析

1.从我们学校的地图任意选取了9个景点,并给它们的距离赋值

2.本程序为用户提供了各种各样的查询信息,各种查询都可以任意选择从代号或名称,选择时的任意错误都有做处理。本题抽象看成一个无向带权图。图的结点代表景点,边代表路径。

(1)任意一个景点的相关信息。

(2)任意两个景点间的最短路径并输出了这条路径的路线。

支持功能分析:

(1)设计太原理工大学的校园平面图,所含景点不少于5个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等信息。

(2)为来访客人提供图中任意景点相关信息的查询,主要包括景点图片的观看,景点描述信息的阅读,景点到校园内所有景点的可达路径的了解。

(3)为来访客人提供图中任意景点的问路查询,即查询任意两个顶点之间的一条最短的简单路径,以及两点间任意.

3.4.4 系统性能需求分析

对于该系统,没有严格的性能要求。

1.首先,在没有选择初始点与终点是,系统不能够崩溃,当点击查询按钮是,不会

没有结果显示,导致程序不是很美观,要求系统在初始时,有相应的结果显示。

2.其次,可以允许运行多个界面,以防用户需要进行路径、景点、还有风景的比较,以便选择更好的参观方式。

3.5 本章小结

本章主要介绍了校园导航系统的需求分析,通过了解用户的需求分析,来制定功能的需求分析,在通过功能的需求分析,来制定实际需求分析,以此为基础进行导航系统的设计。

4 总体设计

4.1 总体设计概述

总体设计概述这个阶段必须回答的关键问题是:―概括地说,应该如何解决这个问题?

首先,应该考虑几种可能的解决方案。列如,目标系统的一些主要功能是用计算机自动完成还是用人工完成;如果使用计算机,那么是使用批处理方式还是人机交互方式;信息存储使用传统的文件系统还是数据库……。通常至少应该考虑下述几类可能的方案:

1.低成本的解决方案。

系统只能完成最必要的工作,不能多做一点额处的工作,只要能完成用户需要的功能就可以了。

2. 中等成本的解决方案。

这样的系统不仅能够很好地完成预定的任务,使用起来很方便,而且可能还具有用户没有具体指定的某些功能和特点。虽然用户没有提出这些具体要求,但是系统分析员根据自己的知识和经验断定,这些附加的能力在实践中将证明是很有价值的。

3.高成本的―十全十美‖的系统。

这样的系统具有用户可能希望有的所有功能和特点。

系统分析员应该使用系统流程图或其他工具描述每种可能的系统,估计每种方案的成本和效益,还应该在充分权衡各种方案的利弊的基础上,推荐一个较好的系统(最佳方案),并且制定实现所推荐的系统的详细计划。如果用户接受分析员推荐的系统,则可以着手完成本阶段的另一项主要工作。

上面的工作确定了解决问题的策略以及目标系统需要哪些程序,但是,怎样设计这些程序呢?结构设计的一条基本原理就是程序应该模块化,也就是一个大程序应该由许多规模适中的模块按合理的层次结构组织而成。总体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。通常用层次图或结构图描绘软件的结构。

在了解了系统总体设计的概念及要求后,完成自己的总体设计,由于这个项目是用于毕业设计的,并不是用于其他用途的,所以,就只有一个方案,没有顾及成本,只有软件方面,就是一个人开发的。

4.2 系统总体设计描述

在对需求分析进行了系统研究后,决定了总体设计的方案。

首先有一个系统的主界面,在这个主界面上,并没有关于导航的其他信息,只有进入导航的入口,和有关开发人员的信息(主要包括学校,所在实训基地,开发人员的基地指导老师,还有开发人员自己的信息查询),除此之外,还有系统时间的显示,查看当时的时间,还有学校名字的显示。其次,是导航系统的主界面,在主界面中可以查看景点信息,查看路径,选择终点和起点,在不需要再使用系统时,可以选择退出系统。

4.3 系统总体设计模块划分

在了解了需求,分析了需求分析后,划分出了模块。主要的模块由:显示系统主界面,显示导航系统主界面,查询导航有关人员的模块。

相关主题