离线公交查询系统副本.docx
《离线公交查询系统副本.docx》由会员分享,可在线阅读,更多相关《离线公交查询系统副本.docx(28页珍藏版)》请在冰豆网上搜索。
![离线公交查询系统副本.docx](https://file1.bdocx.com/fileroot1/2023-2/5/12b34b95-9f75-4e59-9dd7-04cc785cb060/12b34b95-9f75-4e59-9dd7-04cc785cb0601.gif)
离线公交查询系统副本
基于Android的公交换乘系统
摘要
在目前已有的公交系统查询中,存在数据获取较慢、受网络影响等问题。
本文在分析总结一些问题的基础上,设计并实现了基于安卓平台的公交离线查询系统。
系统运行于android平台,使用SQLITE数据库,主要采用JAVA语言编程。
实现了当前位置车次查询、站点查询、换乘查询等功能。
在公交换乘查询中,公交换乘系统会将结果根据经过的站点数进行排名,选出换乘经过站点数最少的前四个,极大的缩少了用户乘车所花费的时间。
因为使用了本地数据库中的数据文件,所以可以实现离线查询,这样不会受服务器宕机或者网速不好的影响,即使是在没有网络信号的地区,也能快速的查找到需要的公交站点信息、公交路线信息、公交换乘信息,极大地方面了用户的出行。
关键词:
公交查询,android平台,SQLITE,java,eclipse
Abstract
Intheexistingsystemofpublictransportationquerynowadays,therearestillsomeproblems,suchasslowtogetinformationandbeingeffectedbytheInternet.Afteranalyzingandsummarizingseveralproblems,thebusoff-linequerysystembasedonAndroidisrunningontheAndroidplatform,usingSQLitedatabase,mainlyuseJAVAlanguageprogramingtoachieveitsfunction,whichincludesstationinquiries,buslineinquiries,sitetransferinquiriesandsoon.Usingthefunctionofsitetransferinquiries,thebusoff-linequerysystemwillrangetheinquiryresultaccordingtohowmanysiteitwillgothroughandshowusersthefirstfourresult,whichcanhelpuserssavetheirtime.Becauseofusingthedatafileinlocaldatabase,youcansearchinformationoffline,whichmakeyoucanreceivethebussiteinformationandthebuslineinformationandthesitetransferinformationyouneedquicklyevenyouareinsomeareawithoutsign,whichmakeitmoreeasyforuserswhentheywanttogooutbybus.
Keyword:
Busquery,androidplatform,SQLITE,java,eclipse
1绪论
1.1问题的提出及研究意义
城市公交其覆盖面广、经济快捷的特点,目前任然是绝大数出行者的首选方式,也是各地城市政府大力发展的一种交通方式。
针对目前的实际情况,大力发展城市公共交通,鼓励并吸引市民选择乘公交出行,将会大大减弱交通压力,从极大程度改善交通状况。
影响城市公交服务水平的因素主要有四个方面:
方便性、迅捷性、经济性、舒适性。
改善公交服务,就必须从着四个方面综合考虑;,一般各城市采取的措施有:
(1)合理布设公交线路网。
(2)改善公共交通设施。
(3)提高公交车速。
(4)将设智能公交系统。
同时在建立在线网络查询公交信息的同时也支持离线查询,即使在没有网络连接更新的情况下可以利用已经下载存储在手机里的地图使用,并且能对手机里的地图做进一步的更新,从而使得信息具有实时性和准确性。
1.2国内研究现状
我国的公交事业发展比较落后,公交智能化水平比较低,绝大部分是沿袭旧的运营体制。
目前我国的城市公交查询系统还处于一个相对落后的水平,广大乘客可以获得信息的方式很少,公交线路和站点信息的完整性和准确性得不到保证。
虽然手机凭借小巧可人的身材、N合一的功能特色,成为数码时代人们日常生活中不可或缺的一部分,目前大多数基于手机的公交查询系统都是采用短消息的形式,虽然基于短消息的查询不受空间约束,但是可能受到运营商的一些约束:
硬件方面,如果遇到服务器、网络繁忙时段或信号盲区,导致用户请求长时间得不到响应。
1.3本论文组织结构
各章内容安排如下:
第1章绪论:
本章主要讲述设计题目的研究目的、意义以及现状,相对于软件工程的问题定义和可行性研究部分。
第2章关键技术概述:
本章主要介绍了系统所采用的关键技术,这些技术是构成系统的主要技术因素,并为系统的构造提供了理论依据。
第3章系统需求:
本章描述了公交查询系统的基本用户需求比如用户界面等,同时介绍了本软件的设计原则以及运行环境。
第4章概要设计:
本章描述了系统的体系结构,详细描述了系统的具体模块划分和模块的层次结构,并详细描述了各个模块的功能,为详细设计做好铺垫。
第5章详细设计:
本章详细介绍了各个模块的内部处理流程,以及实现模块的类,类中的函数以及变量。
第6章系统测试及运行结构分析:
本章属于软件测试环节,对于该软件的运行环境、运行情况进行详细的说明,详细说明软件的特色和优点。
2关键技术概述
2.1Android平台相关内容介绍
2.1.1Android操纵系统简介
Android一词的本义指“机器人”,同时也是google于2007年11月5日宣布的基于linux平台的开源手机操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
Android是基于Linux内核的操作系统,早期由Google开发,后来由开放手机联盟开发。
它采用了软件堆层的构架,主要分为三部分。
底层是以Linux内核工作为基础,只提供基本功能;其他的应用软件则有各公司自行开发,以java作为编写程序的一部分。
另外,为了推广此技术,Google和其他几十个手机公司建立开放手机联盟。
2.1.2Android构架
图2-1显示的是Android操作系统的主要组件,每个部分将会在下面具体描述。
Android同一个核心应用程序包一起发布,该应用程序包包括email客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。
所有的应用程序都是用Java编写的。
Android应用程序框架开发者也完全可以访问核心应用程序所使用的API框架。
该应用程序框架用来简化组建软件的重用;任何一个应用程序都可以发布它的功能块并且任何其他的应用程序都可以使用其所发布的功能块。
该应用程序重用机制使得组件可以被用户替代。
图2-1Android系统构架
目前Android应用程序都由一系列的服务和系统组成,包括:
(1)一个可扩展的视图(view)可以用来建应用程序,包括列表(list)、网格(grids)、文本框(textboxes)、按钮(buttons),甚至包括一个可嵌入的web浏览器。
(2)内容管理器(contentproviders)使得应用程序可以访问另一个应用程序的数据,或者共享它们自己的数据。
(3)一个资源管理者(resourcemanager)提供非代码资源的访问,如本地字符串、图形和分层文件(layoutfiles)。
(4)一个通知管理器(notificationmanager)使得应用程序可以在状态栏中显示客户通知信息。
(5)一个活动类管理器(activitymanager)用来管理应用程序生命周期并提供常用的导航回退功能。
Android程序库-Android包括一个被Android系统中各种不同组建所使用的C/C++库集。
该库通过Android应用程序框架为开发者提供服务。
以下是一些主要的核心库:
系统C库--一个从BSD继承来的标准C系统函数(libc),专门为基于embeddedlinux的设备定制。
媒体库--基于packetvideoopenCORE;改库支持录放,并且可以录制许多流行的音频视频格式,还有静态印象文件包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG。
SurfaceManager--对显示子系统的管理,并且为多个应用程序提供3D和2D图层的无缝融合。
LibWebCore--一个最新的web浏览器引擎用来支持Android浏览器和一个可嵌入的web视图。
SGL--一个内置的2D图形引擎3Dlibraries-基于OpenGLES1.0APIS实现;该库可以使用硬件3D加速或者使用更高优化的3D软加速。
Freetype--位图(bitmap)和向量(vector)字体显示。
SQLite--一个对于所有应用程序可用功能强劲的轻型关系型数据库引擎。
Android运行库--Android包括一个核心库,该核心库提供了Java编程语言核心库的大多数功能。
每个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
Dalvik是针对于同时高效地运行多个VMs来实现的。
Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对内存最小使用做了优化。
该虚拟机是基于寄存器的,所有的类都经由Java汇编器编译,然后通过SDK中的dx工具转化成.dx格式由虚拟机执行。
Dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内存管理机制。
Linux内核--Android的核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。
Linux内核也同时作为软件和硬件堆栈之间的硬件抽象层。
2.2SQLite相关介绍
2.2.1SQLite简介
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。
SQLite第一个Alpha版本诞生于2000年5月。
至今已经有14个年头,SQLite也迎来了一个版本SQLite3已经发布。
不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。
所以主要的通信协议是在编程语言内的直接API调用。
这在消耗总量、延迟时间和整体简单性上有积极的作用。
整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。
它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL很多,同时它还支持事务处理功能等等。
也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。
比如SQLite支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。
如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么你可以考虑使用SQLite。
到2013年10月17日最新版本是3.8.1。
它的官方网站是:
http:
//www.sqlite.org或者http:
//www.sqlite.com.cn,能在上面获得源代码和文档。
同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士
2.2.2SQLite特性
SQLite的特性如下:
1.ACID事务
2.零配置–无需安装和管理配置
3.储存在单一磁盘文件中的一个完整的数据库
4.数据库文件可以在不同字节顺序的机器间自由的共享
5.支持数据库大小至2TB
6.足够小,大致13万行C代码,4.43M
7.比一些流行的数据库在大部分普通数据库操作要快
8.简单,轻松的API
9.包含TCL绑定,同时通过Wrapper支持其他语言的绑定
10.良好注释的源代码,并且有着90%以上的测试覆盖率
11.独立:
没有额外依赖
12.源码完全的开源,你可以用于任何用途,包括出售它
13.支持多种开发语言,C,PHP,Perl,Java,C#,Python,Rub
2.2.3SQLite使用注意事项
在确定是否在应用程序中使用SQLite之前,应该考虑以下几种情况:
(1)目前没有可用于SQLite的网络服务器。
从应用程序运行位于其他计算机上的SQLite的惟一方法是从网络共享运行。
这样会导致一些问题,像UNIX®和Windows®网络共享都存在文件锁定问题。
还有由于与访问网络共享相关的延迟而带来的性能下降问题。
(2)SQLite只提供数据库级的锁定。
虽然有一些增加并发的技巧,但是,如果应用程序需要的是表级别或行级别的锁定,那么DBMS能够更好地满足您的需求。
(3)SQLite可以支持每天大约100,00次点击率的Web站点——并且,在某些情况下,可以处理10倍于此的通信量。
对于具有高通信量或需要支持庞大浏览人数的Web站点来说,应该考虑使用DBMS。
(4)SQLite没有用户帐户概念,而是根据文件系统确定所有数据库的权限。
这会使强制执行存储配额发生困难,强制执行用户许可变得不可能。
(5)SQLite支持多数(但不是全部)的SQL92标准。
不受支持的一些功能包括完全触发器支持和可写视图。
如果您感到其中的任何限制会影响您的应用程序,那么您应该考虑使用完善的DBMS。
如果您可以解除这些限制问题,并且对快速灵活的嵌入式开源数据库引擎很感兴趣,则应重点考虑使用SQLite。
一些能够真正表现SQLite优越性能的领域是Web站点,可以使用SQLite管理应用程序数据、快速应用程序原型制造和培训工具。
由于资源占用少、性能良好和零管理成本,嵌入式数据库有了它的用武之地,它将为那些以前无法提供用作持久数据的后端的数据库的应用程序提供了高效的性能。
现在,没有必要使用文本文件来实现持久存储。
SQLite之类的嵌入式数据库的易于使用性可以加快应用程序的开发,并使得小型应用程序能够完全支持复杂的SQL。
这一点对于对于小型设备空间的应用程序来说尤其重要。
嵌入式数据库对于加快应用程序开发也很重要,尤其是在用于数据库抽象层(例如PEAR:
:
DB或ezSQL)时。
最后,SQLite正在积极开发中,未来一定会有新的功能,会对开源社区更有用。
2.3Java高级语言编程
2.3.1Java语言简介
Java是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。
用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:
跨平台、动感的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Javaapplet。
另一方面,Java技术也不断更新。
Java平台由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface、简称API)构成。
Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。
现在Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以只编译一次,就可以在各种系统中运行。
Java应用编程接口已经从1.1x版发展到1.2版。
目前常用的Java平台基于Java1.4,最近版本为Java1.6[1]。
2.3.2Java语言的特点
1、平台无关性:
平台无关性是指Java能运行于不同的平台。
Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。
使用Java编写的程序能在世界范围内共享。
Java的数据类型与机器无关,Java虚拟机(JavaVirtualMachine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口的。
2、安全性:
Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。
Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。
Java对程序提供了安全管理器,防止程序的非法访问。
3、面向对象:
Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。
类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。
2.3.3JAVA语言的体系结构
java体系结构包括四个独立相关的技术:
java程序设计语言、javaclass文件格式、java应用编程接口、java虚拟机。
当编写并运行一个java程序时,就同时使用了这四种技术。
用java编写源代码,把它编译成javaclass文件,然后在java虚拟机中运行class文件。
当编写程序时,通过调用类中的方法来访问系统中资源如io、网络内存等。
当程序运行的时候它可以调用class文件中的实现的方法来满足程序javaapi的调用。
2.4系统实现工具及运行环境
开发工具是:
Eclipse、AndroidSDK、ADT。
软件运行环境:
Android操作系统。
3系统需求
3.1用户需求
越来越复杂的公交网络使得人们经常非常的困惑,为了解决这些问题,在Android这个平台上,设计开发一个公交信息查询系统。
系统应该具有以下功能:
(1)公交网点数据应该存放在手机数据库中,这样即使在没有网络的地方也可以使用,并且提高查询速度。
(2)用户输入公交站点时,可以查询到经过该站点的所有公交路线,并且以可视化的方式显示出来。
(3)用户输入公交路线时,可以查询到该路线经过的所有站点。
(4)用户输入两个站点时,可以查询到两个站点之间的换乘路线。
3.2系统设计的原则
3.2.1实用性原则
该原则主要体现的是所设计的系统能够解决实际问题,是所有应用系统设计最基本的最主要的原则,直接关系到系统成败。
基于手机的公交信息查询系统可以随时为人们解决出行时的公交选择问题,使用户方便的获取真正想要获得信息。
3.2.2可靠性原则
可靠性是系统设计的立足点,若设计的系统故障频繁,就不能满足用户的需求,设计的公交查询系统应该从以下几个方面提高其可靠性:
故障发生是应该给出提示,提示用户应该如何操作来排除故障;通过测试监测系统漏洞,完善系统。
3.2.3易于更新和维护
系统的设计能够实现有关空间数据和属性数据的实时更新和维护。
在系统维护时只需在服务器上维护即可,数据的更新和维护要简单可行。
3.2.4操作简单
操作简单是软件设计过程中需要重视的问题,应该精心设计用户接口、使系统用户界面友好,便于用户理解。
4概要设计
4.1系统体系结构
手机客户端通过查询数据库本地文件获取信息。
如图4-1所示:
图4-1通信示意图
4.2模块设计
4.2.1程序模块划分
公交站点查询模块、公交线路查询模块、公交换乘查询模块。
4.2.2程序模块功能描述
(1)公交站点查询模块—本模块的功能是用户通过输入站点的名字,系统到数据库中查找数据,返回经过该站点的所有公交路线。
(2)公交线路查询模块—本模块实现的功能是用户通过输入公交路线名称,系统到数据库中进行查找数据,返回该路线所经过的所有站点。
(3)公交换乘查询模块—本模块实现的功能是用户通过输入公交路线名称,系统到数据库中进行查找信息,根据查找规则,返回两个站点之间的换乘路线。
4.3功能模块对照表
表4-1功能模块对照表
模块名称
模块功能
公交站点查询模块
查询经过该站点的所有路线
公交线路查询模块
定位当前位置
公交换乘查询模块
在地图中查找指定位置,并标示出来
5详细设计
5.1功能模块设计
5.1.1公交查询模块
(1)模块描述
该模块的主要功能是:
查询经过某一个站点的全部公交线路。
模块功能实现类:
StationActivity类。
接口中用到的变量:
PrivateStringstation:
保存获得的公交的通车路线。
StationActivity类主要变量和方法如下:
主要变量:
1SQLiteDatabasedb:
数据类的对象
2Cursorcursor:
从数据库中查询到的结果进行读取、写入的接口,存储查询结果列表
主要方法:
PublicviodonClick():
单击确定后响应的函数,在数据库中查询EditText中的站点查询,将查询到的信息显示在界面中。
(2)具体实现
点击确定按钮后判断EditText是否为空,若为空给出提示,否则在数据库中进行查询,关键代码:
StringStrSql="selectdistinctbus.bus_namefromsite,buswheresite.site_namelike'%"+busstation+"%'and"+"site.site_bus_id=bus.bus_id";
SQLiteDatabasedb=SQLiteDatabase.openOrCreateDatabase(ImportDBFile.DB_PATH+"/"+ImportDBFile.DB_NAME,null);
Cursorcursor=database.rawQuery(StrSql,null);
查询结果为空弹出对话框进行提示,若结果不为空就将查询结果显示在界面中。
(3)文件说明
StationActivity.java:
查询某一路公交车的信息的类源文件。
(4)输入项
要查询的的公交站点名字。
(5)输出项
经过该公交站点的所有线路
(6)流程逻辑
该流程逻辑如图5-3所示:
图5-3车次查询模块流程逻辑
5.1.2站点查询模块
(1)模块描述
该模块的主要功能是:
查询经过某条公交线路的所有站点,并将结果在界面上显示出来。
模块功能实现类:
LineActivity类。
BusStopInfo类主要变量和方法如下:
主要变量:
1PublicStringBufferlines=newStringBuffer():
将查询到的结果放在这个变量中。
2Publicbusline=line.getText().toString():
获取用户输入的公交路线的名字。
3SQLiteDataBasedataba