




免费预览已结束,剩余29页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
临汾职业技术学院09届计算机应用技术专业毕业论文城市公交查询系统摘 要我国城市公交乘客信息系统的发展处于一个较落后的水平,广大乘客可以获得信息的方式很少。为了解决这种问题,需要加快发展城市公交信息化,大力发展我国的城市公交乘客信息系统。设计一个城市公交查询系统是具有一定实际应用意义的。在此背景下,开发了这个应用程序-城市公交查询系统。本次设计,从城市公交查询系统建立的必要性出发,首先考虑了公交运营的实际情况和不同公交乘客的实际要求,分析了此系统应该具有的功能;其次对系统的主要功能模块进行了详细地描述,在对公交乘客出行心理特征进行分析的基础上,考虑了乘客选择公交线路决策的因素,探讨了以换乘次数最少为目标的公交查询系统的实现方案。本系统选用Qt4作为开发工具,SQLite作为后台数据库,开发城市公交查询系统,实现两个模块-查询模块(包括基本查询和高级查询)和管理更新模块(包括公交站点管理和公交线路管理)的基本功能。最后结合系统开发阶段和调试阶段发现的问题,提出了系统需要完善的地方,总结了开发此系统所取得的经验。关键词 公交;Qt;SQLiteUrban Public Transport Query SystemAbstractChinas urban public transport passenger information system development in a comparatively backward, the majority of passengers, the way information is rarely available.To solve this problem and needs to accelerate the development of urban public transport information, to develop Chinas urban public transport passenger information system.Design a city bus check system has some practical meaning.In this context, the development of this application - the city transit system.This design, from the city to establish the need for public transport query system, we firstly consider the actual situation of the bus operators and bus passengers in different practical requirements, should have analyzed the function of this system; Second, the systems main function modules in detaildescribed in the psychological characteristics of the bus passengers travel on the basis of the analysis, taking into account bus routes and passengers in decision-making factors, discussed in order to transfer the least number of queries for public transit system was implemented.Qt4 use the system as a development tool, SQLite as a background database, development of urban public transport query system, to achieve the two modules - Query Module (including the basic query and advanced query) and management update module (including site management and bus lines bus management)the basic functions.Finally, system development and debugging phase stage the problems identified, proposed system needs improvement, summarized the development of this system, the experience gained.Keywords Bus;Qt;SQLite- II -目 录摘要IAbstractII第1章 绪论51.1 选题目的和意义51.2 当前存在的问题与期望目标5第2章 需求分析72.1 系统需求分析72.2 数据库需求分析72.3 性能需求82.3.1 系统的易用性和易维护性82.3.2 系统的开放性和可扩充性82.3.3 系统的先进性和响应速度82.4 本章小结9第3章 系统设计103.1 概述103.2 功能模块划分103.3 公交站点的抽象113.4 数据库设计123.4.1 数据库概念结构设计133.4.2 数据库逻辑结构设计143.5 本章小结14第4章 软件设计与实现154.1 Qt简介154.1.1 历史154.1.2 图形用户界面154.1.3 信号与槽154.2 建立与数据库的连接164.3 程序主界面164.4 前台功能的实施164.4.1 普通查询174.4.2 高级查询194.5 后台管理功能的实现214.5.1 新增线路214.5.2 删除线路224.5.3 修改已有线路信息234.6 本章小结24第5章 测试与维护255.1 创建和测试应用程序255.2 测试方法255.3 测试内容255.4 软件维护265.5 本章小结26结 论27致 谢28参考文献29附 录30附录A 英文原文30C+ STL vector30附录B 英文译文32C+ 标准库vector32第1章- 1 -第1章 绪论1.1 选题目的和意义在极力保证城市可持续发展之路与还不发达的交通路线的情况下,如何让人们方便地出门成了各个城市管理部门所最关心的问题。我国城市公交乘客信息系统的发展处于一个落后的水平,广大乘客可以获得信息的方式很少,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。我国经济的持续发展必然加快城市化、机动化速度,更何况我国城市化水平本来就低于相应的经济发展水平。汽车进入家庭、城市扩张可能带来的郊区化趋势,与城市化一起成为21世纪我国城市交通发展的大背景。我国私人汽车的迅速发展给城市交通系统带来了严重的影响如何考虑私人小汽车和公共交通系统的竞争关系并建立一个有竞争力的公共交通系统;如何选择交通政策等,都影响这个城市的交通模式、城市建设19。城市的各种交通政策的选择和实施必须考虑城市的特性和资源、代价和效果。因此必要在可持续发展的目标下,借鉴国外城市的成功经验和失败教训,重新检查城市交通系统的规划和建设。乘客可以获得的公交信息很少,而且方式主要是常规手段。我国乘客一般获得公交信息的方式局限于电话,交通图,向熟人问讯等常规方式。除去线路,站点等基本信息以外,有关班次,车辆到离站时间的信息基本上没有。我国实施城市的可持续发展之路,包括城市交通的可持续发展。所以大力提倡改善客运结构,大力发展公共交通。乘客出行中获得信息困难,基本上没有实时信息。除去在杭州,上海等少数几个城市,乘客可以通过分布于城市中的若干电子站牌获得一些公交车辆的运营信息以外,在其它城市“出行中”的乘客无法获得任何实时信息。在我国一些城市中,有不少装饰华美的公交站台,但在这些站台上却找不到实用的城市交通图。总而言之,我国乘客在出行中无论是“静态线路信息”还是“动态实时信息”都很难获得。缺乏专门的交通信息发布管理机构,乘客获得的信息准确性得不到保证。目前,我国大多数城市对于交通信息的发布没有专门的管理机构和规章制度。在城市交通信息服务需求小的情况下尚可应付。但随着城市交通信息服务需求的增长,从事交通信息服务的人员和企业数量的增加,需要有专门的管理机构和制度。当前的城市交通信息服务存在着混乱和低效的问题,有些甚至是对乘客的误导。借助现代信息技术和管理理论,建立管理信息系统是当今社会的重要趋势对人民生活而言,全面开发和应用计算机管理信息系统就是近期不能回避的问题。我的毕业论文选择了公交车查询系统,我选择了一个较为贴近生活和我比较了解的公交车系统。1.2 当前存在的问题与期望目标中国大城市产生交通拥堵及“交通梗塞”的地点及范围正在逐步增加,产生的次数趋势。所以许多城市的决策者和工程技术人员都在大力提倡城市公共交通的发展,降低城市拥堵的现象。我国公交乘客信息系统与网络的结合还是低层次的。在我国一些城市出现了基于网络的公交信息服务系统(例如中国公交查询网,它可提供全国大约七十多个城市的公交系统信息查询),但总体上还是处于一个较低的层次。这些信息系统还处于一种静态的公交信息查询系统,还不能作到为乘客的出行自动地生成出行计划或方案。我国实施城市的可持续发展之路,包括城市交通的可持续发展。所以大力提倡改善客运结构,大力发展公共交通。鉴于中国目前的经济发展状况,中国人出行还是以公交车为主,所以每个城市的公交系统都比较庞大发达。公交查询系统是近两年出现的新生事物,每个城市的发展状况也是良莠不齐。由于计算机的使用,使得人们在管理、应用及服务等各个领域使用数据方面变得更加简洁,更加方便,大大提高了工作效率,产生了以计算机为主体,以人为辅助的局面。在此我所设计的公交车查询系统就是为了方便人员在数据查询方面的操作,使得他们在日常生活中都会达到事半功倍的效果,减轻了人力的负担,方便了数据的存储,增加了安全性。本研究设想以某人去某陌生城市办事,想乘坐该城市的公交车去目的地F,通过本查询系统,可以让此人直观地知道因该乘哪路公交车可以到达目的地。第2章 需求分析2.1 系统需求分析随着我国经济的高速发展,人们生活水平的提高,越来越多的人开始热衷于到外地旅游。那么对于这些外来旅游者,首先搞清这个城市的公交路线显的很重要!我的家乡沈阳,作为一个旅游城市,每年都要吸引大量的游客,为了满足这些游客熟悉公交路线的需求,特以公交查询系统为设计课题。本软件不仅能给游客带来方便,也能给广大市民提供方便。我认为这样的系统应该具有很好的实用性!开发本系统的目标就是立足广大乘客的实际,着眼于公交业的未来发展,规范公交管理,提高服务质量,方便乘客查询,并为此设计该系统。本系统采用结构化设计的方法来实现系统总体功能,提高系统的各项指标,即将整个系统合理的划分成各个功能模块,正确地处理模块之间和模块内部的联系以及和数据库的联系,定义各模块的内部结构,通过对模块的设计和模块之间关系的系统来实现整个系统的功能前台主要有2个模块,查询模块和后台管理模块功能名称:普通查询功能概述:通过输入的线路号和站点查询经过该站点的公交。功能名称:高级查询功能概述:通过输入的乘车时间、出发地点和目的地给出换乘信息。功能名称:后台管理功能概述:用于管理员登陆,添加、修改、删除公交线路,修改信息资料。乘客可以方便的进行查询,以防乘错车次。当然这些功能的智能化不是很强,系统有待进一步来完善。2.2 数据库需求分析数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。数据库技术是由传统的文件系统发展而来的,从层次模型、网状模型发展到关系模型。数据库技术是数据管理的最新技术,是计算机科学的一个重要分支,它能指导我们正确地设计数据库系统,它的出现极大地促进了计算机应用的发展。采用数据库技术的原理和方法可以有效地设计实用的数据库系统。一个完整的数据库系统包括数据库管理系统(DBMS),数据库管理员(DBA)、数据库(DB)、应用程序和相应的硬件设施2。目前许多数据库管理系统都基于关系模型,关系模型的主要特点是用表格结构表达实体,用键表示实体与实体之间的联系。与层次模型和网状模型相比,关系模型比较简单,容易为初学者接受。关系模型是由若干个关系模式组成的集合,关系模式相当于记录类型,它的实例称为关系。每个关系是一张表格。表格简单,用户易懂,用户只需用简单的查询语句就可以对数据库进行数据操作,并不涉及到存储结构,访问技术等细节。关系模型是数学化的模型,要用到集合论,离散数学等知识。SQL语言是关系数据库的代表性语言,已经得到广泛应用3。在设计数据库时,应注意数据的安全性,保证数据的安全,防止非法用户访问数据库,以免泄露重要信息,同时也能防止非法用户的蓄意破坏,有许多保护数据的方法,如采用用户标识,口令和密码或访问控制等方法。一个成功的数据库应用系统应具有用户标识,每一个合法用户具有一个用户名和相应的口令,进入数据库应用系统前必须输入正确的口令,否则无法进入系统,这就保证了只有合法的用户才能操作数据库系统。为了保证数据的合法语义,必须对数据库的数据进行完整性约束,即防止用户输入不合语义的数据4。在设计应用软件时,应严格按照软件工程学的方法进行设计,传统的方法采用瀑布模型,从问题定义、可行性分析、需求分析、概念设计、总体设计、系统实现、编码和软件测试、运行和维护等软件生命周期内,每一阶段均在前一阶段的基础上进行设计,并在每一阶段有相应的文档资料13。设计数据库系统时应该首先充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求。数据库设计一般包括如下几个步骤:数据库需要分析,数据库概念结构设计,数据库逻辑结构设计5。2.3 性能需求为了保证系统能够长期、安全、稳定、可靠、高效的运行,城市公交查询系统应该满足以下的性能需求:2.3.1 系统的易用性和易维护性公交查询系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。公交查询系统中涉及到的数据是公交公司的相当重要的信息,系统要提供方便的手段供系统维护人员进行数据的备份,日常的安全管理,系统意外崩溃时数据的恢复等工作。2.3.2 系统的开放性和可扩充性公交查询系统在开发过程中,应该充分考虑以后的可扩充性。例如网上查询的用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。2.3.3 系统的先进性和响应速度目前计算系统的技术发展相当快,做为公交查询系统工程,应该保证系统在下个世纪仍旧是先进的,在系统的生命周期尽量做到系统的先进,充分完成企业信息处理的要求而不至于落后。这一方面通过系统的开放性和可扩充性,不断改善系统的功能完成。另一方面,在系统设计和开发的过程中,应在考虑成本的基础上尽量采用当前主流并先进且有良好发展前途的产品。公交查询系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。2.4 本章小结本章主要介绍了软件设计的起点需求分析。分析了当前社会对查询软件的需求和期望。第3章 系统设计3.1 概述本阶段设计的基本目标是解决系统如何实现问题,也叫做概要设计,本阶段主要任务是划分出系统的物理元素及设计软件的结构,完成软件定义时期的任务之后就应该对系统进行总体设计,即根据系统分析产生的分析结果来确定这个系统由哪些系统和模块组成,这些系统和模块又如何有机的结合在一起,每个模块的功能如何实现。系统设计的目标是使系统实现拥有所要求的功能,同时,力争达到高效率、高可靠性、可修改性,并且容易掌握和使用10。模块化的依据是:把复杂问题分解成许多容易解决的小问题。原来的问题也就变得容易解决。模块化设计是把大型软件按照一定的原则划分成一个较小的相对功能独立又相关联的模块。每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。完成指定的功能,满足问题的要求。采用模块化原理的优点在于可以使软件结构清晰,容易测试和调试。从而提高软件的可靠性,可修改性。有助于软件开发的组织管理。一个大型软件可分别编写不同的模块。模块化理论的几个重要概念如下:抽象。抽象就是抽象出事物的本质特性而暂时不考虑它们的细节。处理复杂系统唯一有效的方法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的理解,直到最低层次的具体元素11。信息隐蔽和局部化。信息隐蔽是指在设计和确定模块时,应使得一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问。局部化是指把一些关系密切的软件元素物理的放得彼此靠近。局部化有助于实现信息隐蔽。信息隐蔽原理和局部化有助于在测试期间以及软件维护期间修改软件。因为绝大多数数据和过程对于软件的其它部分而言是隐蔽的,从而由疏忽引入的错误就很少可能传播到软件的其它部分12。逐步求精的模块化概念。逐步求精和模块化的抽象是密切相关的。软件结构每一层中模块表示对软件抽象层次的次细化。用自顶向下,逐步求精的方法由抽象到具体的方式分配控制,简化了软件设计和实施,提高了软件的可理解性和可测试性,并使得软件更容易维护1。模块独立性。模块的划分要使模块间尽可能的相互独立,独立模块较易维护。度量模块的独立程度有两个标准:内聚和耦合。耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数。在软件的设计中应追求尽可能松散的耦合。内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展,理想内聚的模块只做一件事情。在设计时应力求做到高内聚8。3.2 功能模块划分查询系统模块:该模块实现公交查询功能。可实现按线路查询、站点查询两种查询方式。录入系统模块:该模块实现数据的新增、修改、删除功能。系统模块图如图3-1所示:城市公交查询系统查询后台管理普通查询高级查询新增修改删除线路站名图3-1 系统模块图3.3 公交站点的抽象在公交网络中,公交站点连接着经过该站点的多条公交路段。由于同一条公交线路上两个方向的站点和不同公交线路上的站点分布情况较为复杂,所以必须对其进行一定的分析,抽象成网络中的节点18。同一公交线路两个方向上的同名站点,在空间位置上不重合,须抽象成一个节点。不同方向同名站点抽象如图3-2所示,其中图3-2(a)为实际公交线路站点示意图,图3-2(b)为抽象成一个节点16。图3-2 不同方向同名站点抽象图不同公交线路的紧邻站点的抽象,以两条公交线路为例。目的是模拟人们在不同线路之间换车的真实情况,提高路径查询的正确性。在实际换乘中,乘客一定范围内的步行是允许的、也是必须的17。不同线路紧邻站点的分布如图3-3所示,对不同线路的站点位置完全重合的,视为同一点,抽象成一个结点,统一站点名,如图3-3(a);对两个站点不重合,但在同一道路上紧邻的,抽象成一个节点,如图3-3(b);在两条道路交叉口的各自道路上紧邻的,抽象成一个节点,如图3-3(c)。图3-3 不同线路临近站点分布图3.4 数据库设计数据库技术是在文件系统的基础上发展起来的一种高效的数据管理技术,它能保持系统数据的整体性,完整性和共享性。在数据库系统中提供了对数据的访问机制,能有组织的存储相关的数据,具有合理的存储方式,快速的查询效率和最小的数据冗余等特性。另外数据的存储和应用程序彼此独立,不仅便于数据的管理与控制而且有利于应用程序的编写与调试。数据库类似于一个数据的大仓库,能很好地实现数据共享,能维护数据的一致性。数据库设计是系统设计的一个重要内容,其设计质量的好坏直接影响系统开发的成败,系统的质量,系统效率及可维护性。数据模型是指数据库中记录与记录之间联系的数据结构形成的。不同的数据管理系统有不同的数据模型,数据库设计的核心问题是设计好的数据模型。在目前的数据库管理系统中有层次模型,网状模型、关系模型三种数据模型。其中,关系模型具有较高的数据独立性,使用也较为方便。本设计采用关系数据库。该数据库实行增、删、编辑、统计。显示和打印都极为方便。其中的排序和索引功能,对数据快速定位,查询提供了有利条件。交流互动对于本系统的数据库设计有以下几点说明:数据库设计兼顾前面设计的数据流程图,管理信息系统的设计并不是以数据库为核心的数据库应用设计,本系统的数据库设计尽量满足3NF(第三范式)的要求,本系统的数据库设计以提高系统运行效率为前提。在本系统的设计中,充分考虑到了管理系统数据繁杂,重复性很大,数据使用频繁。并且考虑到移植性问题。为此本系统采用了一种能正确反映用户实现环境,能被现行系统接受,易于维护、效率高的SQLite数据库。SQLite是实现了SQL 92标准的一个大子集的嵌入式数据库。其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中而著名。SQLite的特点:SQLite的功能一定程度上居于MySQL 和PostgreSQL之间。尽管如此,在性能上面,SQLite常常快2-3倍(甚至更多)这得益于其高度调整了的内部架构,因为它除去了服务器端到客户端和客户端到服务器端的通信。SQLite提供了一个快速的访问平面文件数据库的接口,并且提供了访问大容量数据库的简洁的手段,但是并没有所意想的功能或者速度上的损失。所有这些都集在一个包中,也仅仅比MySQL的客户端的库稍微大一点。而令人印象深刻的特点是可将整个数据库系统放在其中,利用非常高效的内存组织。SQLite只需在很小的内存中维护其很小的尺寸,远比其它任何数据库系统都小,这些特点使得其成为在需要高效地应用数据库的任务中一个非常方便的工具。SQLite的优点:除了速度和效率,SQLite还有其它好多的优势使得其能成为许多任务中一个理想的解决方案。因为SQLite的数据库都是简单文件,因此无须一个管理队伍,花时间来构造复杂的权限结构保护用户的数据库。因为权限通过文件系统自动进行,这也同时意味着(数据库空间的大小只与环境有关,与本身无关)无特殊的规则来了解用户磁盘空间,用户可以从创建他们想要的任意多的数据库和对其对这些数据库的绝对控制权而得到好处。数据库就是一个文件的事实,使用SQLite可以轻易地在服务器间移动SQLite也除去了需要大量内存和其它系统资源的伺候进程。即使当数据库在大量地使用时也是如此。3.4.1 数据库概念结构设计在系统设计的开始,我首先考虑的是如何用数据模型来数据库的结构与语义,以对现实世界进行抽象。目前广泛使用的数据模型可分为两种类型,一种是独立于计算机系统的“概念数据模型”,如“实体联系模型”;另一种是直接面向数据库逻辑结构的“结构数据模型”。在本系统中我采用“实体联系模型”(E-R模型)来描述数据库的结构与语义,以对现实世界进行第一次抽象。E-R模型直接从现实世界抽象出实体类型及实体间联系,然后用E-R图来表示数据模型。它有两个明显的优点:接近于人的思维,容易理解;与计算机无关,用户容易接受。但它只是数据库设计的第一步。E-R图是直观表示概念模型的工具,它有三个基本成分:1矩形框,表示实体类型(考虑问题的对象)。2菱形框,表示联系类型(实体间的联系)。3椭圆形框,表示实体的属性。实体和属性的定义如下:管理员表(登陆ID,登录姓名,登录密码)线路表(线路编号,车次,站名,次序)各实体属性图如图3-4所示:图3-4 各实体属性图本系统的总体E-R图如图3-5所示:图3-5 E-R模型图3.4.2 数据库逻辑结构设计由于项目的特殊性,考虑到多平台等问题。为此本系统采用SQLite,这一在嵌入式开发中应用最多的轻量型数据库。线路表存放公交车线路的数据。( 没有表的引用)表3-1 线路表字段名数据类型长度是否为空是否为主键说明车次int4否是车次首车时间date否否首发车时间末车时间date否否末尾车时间站名varchar5000否否站名次序int4否否次序观光表存放当地人气较高的地点(如:观光景点,购物区等)与其临近公交站站名。表3-2 观光表字段名数据类型长度是否为空是否为主键说明地点名varchar50否是人气地点站名varchar5000否否站名3.5 本章小结本章介绍了城市公交查询系统的具体系统设计。第4章 软件设计与实现软件采用面向对像的设计方法,考虑到对图形界面,以及对嵌入式设备的支持和移植问题,为此本系统采用Qt开发框架进行设计,开发环境为Windows7 Ultimate,编程工具为Qt Creator 1.3.1,采用C+标准库函数和QT类库。4.1 Qt简介Qt是一个跨平台的C+应用程序开发框架,有时又被称为C+部件工具箱。Qt被用在KDE桌面环境、Opera、OPIE、VoxOx、Google Earth、Skype和VirtualBox的开发中。它目前是诺基亚(Nokia)的Qt Development Frameworks部门的产品。4.1.1 历史Haavard Nord和Eirik Chambe-Eng于1991年开始开发“Qt”,1994年3月4日创立公司,最早名为Quasar Technologies,然后更名为Troll Tech,然后在改为Trolltech,中文名是“奇趣科技”,2008年6月17日被NOKIA公司收购,以增强该公司在跨平台软件研发方面的实力,更名Qt Software。该工具包名为Qt是因为字母Q在Haavard的Emacs字体特别漂亮,而“t”代表“toolkit”,灵感来自Xt,X toolkit6。2009年5月11日,诺基亚Qt Software宣布Qt源代码管理系统面向公众开放,Qt开发人员可通过为Qt以及与Qt相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造Qt未来的发展。为了便于这些内容的管理,Qt Software启用了基于Git和Gitorious开源项目的Web源代码管理系统7。在推出开放式Qt代码库的同时,Qt Software在其网站发布了其产品规划(Roadmap)。其中概述了研发项目中的最新功能,展现了现阶段对Qt未来发展方向的观点,以期鼓励社区提供反馈和贡献代码,共同引导和塑造Qt的未来。4.1.2 图形用户界面Qt的图形用户界面的基础是QWidget。Qt中所有类型的GUI组件如按钮、标签、工具栏等都派生自QWidget,而QWidget本身则为QObject的子类。Widget负责接收鼠标,键盘和来自窗口系统的其他事件,并描绘了自身显示在屏幕上。每一个GUI组件都是一个widget,widget还可以作为容器,在其内包含其他Widget9。QWidget不是一个抽象类。并且可以被放置在一个已存在的用户界面中;若是Widget没有指定父Widget,当它显示时就是一个独立的视窗、或是一个顶层widget。QWidget显示能力包含了透明化及Double-Buffering。Qt提供一种托管机制,当Widget于建立时指定父对象,就可把自己的生命周期交给上层对象管理,当上层对象被释放时,自己也被释放。确保对象不再使用时都会被删除。4.1.3 信号与槽Qt利用信号与槽(signals/slots)机制取代传统的callback来进行对象之间的沟通。当操作事件发生的时候,对象会发送出一个信号(signal);而槽(slot)则是一个函数接受特定信号并且运行槽本身设置的动作。信号与槽之间,则通过QObject的静态方法connect来链接。信号在任何运行点上皆可发射,甚至可以在槽里再发射另一个信号,信号与槽的链接不限定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到同一个槽,甚至信号也可连接到信号。以往的callback缺乏类型安全,在调用处理函数时,无法确定是传递正确型态的参数。但信号和其接受的槽之间传递的数据型态必须要相符合,否则编译器会提出警告。信号和槽可接受任何数量、任何型态的参数,所以信号与槽机制是完全类型安全。信号与槽机制也确保了低耦合性,发送信号的类并不知道哪个槽会接受,也就是说一个信号可以调用所有可用的槽。此机制会确保当在连接信号和槽时,槽会接受信号的参数并且正确运行。4.2 建立与数据库的连接在此系统中,需要在打开程序时就将数据库创建连接完毕。为此将创建数据库的代码编写在createConnection.h中并包含在main.cpp中,在程序执行时最先调用。本系统数据库的创建连接代码如下:static bool createConnection()QSqlDatabase db = QSqlDatabase:addDatabase(QSQLITE);db.setDatabaseName(busDB.db);if (!db.open() return false;QSqlQuery query;4.3 程序主界面程序主界面如图4-1所示:4.4 前台功能的实施选择“查询”后,会弹出选择查询模式的对话框选择查询模式界面如图4-2所示:图4-1 程序主界面图4-2 查询模式选择4.4.1 普通查询按线路查询线路查询模块:用户进入系统后,在线路查询模块的输入框中输入要查询的线路,点击查询按钮,系统首先检查用户所查询的线路是否存在,如果不存在则查询结果为空,如果存在给出这条线路的相关信息。查询线路界面如图4-3所示:图4-3 线路查询按站点查询站点查询模块:用户进入系统后,在站点查询的输入框中输入要查询的站点,点击查询按钮,系统首先检查用户所查询的站点是否存在,如果不存在则查询结果为空,如果存在给出途经这个站点的所有线路信息。查询站点界面如图4-4所示:图4-4 站点查询按线路站点查询此查询模块可帮助用户解决某线路是否途经某站点问题。用户进入系统后,分别在线路查询输入框和站点查询输入框中输入要查询的线路和站点,点击查询按钮,系统首先检查用户所查询的站点是否存在,如果不存在则查询结果为空;如果存在,则再查询此线路是否包含用户所要查询的站点。如果不存在则查询结果为空;如果存在则给出这条线路的相关信息。线路、站点查询界面如图4-5所示:图4-5 线路站点查询以上三个功能模块实现主要代码如下:void select:on_btnSeek_clicked()QString strNum = ui-ediBusNum-text();QString strStop = ui-ediBusSta-text();if(strNum.isEmpty()&strStop.isEmpty()model-setTable(bus);model-setSort(0,Qt:AscendingOrder); model-setHeaderData(0, Qt:Horizontal, tr(公交线路号); model-setHeaderData(1, Qt:Horizontal, tr(公交路线);model-select();if(!strNum.isEmpty()model-setFilter(QObject:tr(busNum = %1).arg(strNum);model-select();if(!strStop.isEmpty()QString tmp = %;tmp += strStop;tmp += %;model-setFilter(QObject:tr(busStop like %1).arg(tmp);model-select();if(!strNum.isEmpty()&!strStop.isEmpty()QString tmp = %;tmp += strStop;tmp += %;model-setFilter(QObject:tr(busNum = %1 and busStop like %2).arg(strNum, tmp);model-select();浏览全部公交信息此模块可供用户浏览全部线路信息。浏览全部线路界面如图4-6所示:图4-6 浏览全部线路此模块实现主要代码如下:void select:on_btnAll_clicked()model-setTable(bus);model-setSort(0,Qt:AscendingOrder); model-setHeaderData(0, Qt:Horizontal, tr(公交线路号);model-setHeaderData(1, Qt:Horizontal, tr(公交路线);model-select();4.4.2 高级查询高级查询可提供根据出行时间查询是否超过首末车时间、根据出发地和目的地给出换乘参考和根据要去的旅游地点给出乘车信息。高级查询界面如图4-7所示:图4-7 高级查询界面第n次公交换乘算法:公交换乘问题的实质就是给出起始点、目标点后,给用户提供乘车方案。所谓乘车方案是一个站点、线路的交替序列,该序列说明从起点出发乘坐何线路,途中如何换乘,直至到达讫点。对公交乘客的出行心理进行了研究,其结果表明,“换乘次数”是大部分公交乘客在选择出行路线时首先考虑的因素,此功能实现流程如图4-8所示:其次是出行耗时和距离长短。而出行耗时与换乘的次数、等车的时间、公交车沿途停靠站点耗时以及距离的长短密切相关19。因此,对于出行耗时和距离长短,可转化为换乘次数最少的基础上公交车沿途停靠站点多寡的问题。讨论的公交换乘算法就是以“换乘次数最少”为首要目标,“沿途站点最少”为第二约束条件。图4-8 实现流程图基本思想假设乘客欲从a点乘公交车去b点,根据人们的出行习惯,首先,按照直线距离搜索的方式,检索出离a、b直线距离最近的起始站点A、目的站点B;接着,看A站是否有直达B站公交车。如果有直达线路,则马上选择直达公交车。如果存在不止一条直达线路,则根据沿途站点数最少、最快到达,选择乘车方案;如果没有直达线路,则考虑换乘一次车的方案:即经过A站的车与经过B站的车有没有交叉点C。如果有,则可以选择在C处转车到达B站;如果经过A、B站的公交路线路没有交叉点,则要考虑先乘坐经过A站的某一路车到某一C站,再看经过C站点的车与经过B站点的公交车是否有交叉点D。如果有就再到D站转车,两次转车可到达终点B站;如果没有,则需要转乘三次或三次以上才可到达目的地。在上述情况中,如果存在不止一种的选择方案,则再考虑沿途站点数的多寡,选择最佳的乘车方案。具体实现S(i)t(i=1,2,m;t=1,2,m;m为正整数)为第t次循环时所对应的经过当前起点Start的线路集。T(j)t(j=1,2,n;n为正整数)为第t次循环时所对应的经过当前终点End的线路集。E(i,u)t(u=1,2,p;p为正整数)为第t次循环时所对应的经过当前起点的线路i上的后续站点中的拓扑站点(即可能的转乘点)集,包括当前起始点。F(j,v)t(v=1,2,q;q为正整数)为第t次循环时所对应的经过当前终点的线路i上的前继站点中的拓扑站点集,包括当前终点。D为搜索最近公交站点时的半径。实现n次换乘的算法如下:1. 获取出发地a和目的地b;2. 根据给定半径D,搜索得到出发地与目的地邻近区域的公交站点,并以离其最近的公交站点作为起始站点A及目的站点B,并将A、B作为当前的起点Start和终点End;3. 求经过当前起点的线路集S(i) t 及经过当前终点的线路集T(j) t ;4. 判断是否S(i)t=T(j)t成立。如果是,则实现第k(k=2*t-2)次转乘,输出结果,结束运算。k=0时满足此条件的线路S(i)t,也就是T(j)t为起始站点A到目的站点B的直达线路;k0时,得到换乘k次的乘车方案为:A、S(i)1,E(i,u) 1,S(i)2,E(i,u)t-1,S(i)t,F(j,v)t-1,T(j)t-2,T(j)2,F(j,v)1,T(j)1,B。如果不是,则进行下一步。5. 求经过当前起点的所有线路上的后续站点中的拓扑站点集E(i,u)t及当前终点的所有线路上的前继站点中的拓扑站点集F(j,v) t;6. 判断是否存在相同站点,即E(i,u)t=F(j,v)t是否成立。若成立,则实现第k(k=2*t-1)次转乘,输出结果,结束运算。计算各种k次换乘方法的乘车线路上沿途经过站点数,得到站点数最少的方案,再求转车地点及其沿途站点。由此得到的站点、线路序列:A、S(i)1,E(i,u)1,S(i)2,E(i,u)t-1,S(i)t,E(i,u)t,T(j)t,F(j,v)t-1,T(j)2,F(j,v)1,T(j)1,B(可能不止一种)即为需换乘k次的乘车方案;如果没有,则进行下一步。7. 顺序将拓扑站点集E(i,u)t、F(j,v)t中的站点作为当前的起点和终点;8. 转至步骤3。4.5 后台管理功能的实现4.5.1 新增线路此模块为管理员操作,如当地出现新的公交线路,管理员可以登陆此表,及时添加线路信息。添加后单击提交修改即可保存至数据库。以保证车次及时更新,方便用户查询。添加界面如图5-5所示:添加线路及提交修改主要实现代码如下:void manage:on_btnInsert_clicked()图5-5 添加线路int rowNum = model-rowCount();model-insertRow(rowNum); void manage:on_btnCommit_clicked()model-database().transaction();if(model-submitAll()model-database().commit();ui-tableView-setColumnWidth(1, SECOND);ui-tableView-setColumnWidth(0, FIRST);ui-tableView-resizeRowsToContents();elsemodel-database().rollback();4.5.2 删除线路此模块为管理员操作,如当地出现某条公交线路被废除,管理员可以登陆此表,及时删除线路信息。点击删除选中后,会进行确认操作,防止误删除。删除界面如图5-6所示:图5-6 删除线路删除线路主要实现代码如下:void manage:on_btnDelete_clicked()int curRow = ui-tableView-currentIndex().row();model-removeRow(curRow);int ok = QMessageBox:warning(this, tr(删除当前行!), tr(是否删除当前行?),QMessageBox:Yes, QMessageBox:No);if(ok=QMessageBox:No)model-revertAll();elsemodel-submitAll();4.5.3 修改已有线路信息此模块为管理员操作,如当地公交线路出现修改,管理员可以登陆此表,只需先查询要修改的线路号,之后在要修改的位置双击即可修改。修改后单击提交修改即可保存至数据库。修改界面如图5-7所示:图5-7 修改线路信息4.6 本章小结本章介绍了城市公交查询系统的系统界面和具体实现方法。第5章 测试与维护5.1 创建和测试应用程序为了确保本系统能够正常运行,需要在发布之后做一次较全面的测试。现将具体操作及过程举例说明如下:创建和测试应用程序应是交替进行的,既要注意开发的效率也要注意它的稳定性。每编写一个模块,就要对这个模块进行测试,看它能否根据特定的要求工作。及早发现问题,及早解决,否则到最后再来测试的话,难度会大大增加。5.2 测试方法一般来说,对程序测试有两种测试方法:如果已经知道了软
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消毒管理办法、消毒技术规范培训试题(含答案)
- 2025房产评估与异业联盟技术交流合作协议范本
- 药品监管知识培训课件
- 2025年调味品品牌授权与市场推广合同
- 2025版外专局外籍教师教学成果奖励合同范本
- 2025年度医疗器械采购合同范本
- 2025版淘宝平台产品研发合作协议范本
- 2025版网红直播带货商品房推广合同
- 2025版文化产业债权合作与债务清偿合同
- 2025年度水电行业环保设施建设与运营合同
- 勉县一中小升初数学试卷
- 2025一建《建设工程经济》计算、时间、数字考点笔记
- 校园基孔肯雅热防控措施课件
- 第1课 中国古代政治制度的形成与发展 课件 统编版高中历史选择性必修1
- 药师考试历年真题综合测试试卷(含答案)
- 2025年村级防疫员考试模拟试题及答案
- 快餐公司门店设备夜间关闭管理制度
- 自由与规则班会课件
- 以童心为笔:基于儿童心理发展需求的小学校园公共活动空间设计
- 2025年度日语能力测试N4级试卷含答案与解析
- 2025秋人教版(2024)八年级上册地理 【教学课件】1.1.2《疆域》
评论
0/150
提交评论