首页 ANDROID平台公交查询工具的设计与实现

ANDROID平台公交查询工具的设计与实现

举报
开通vip

ANDROID平台公交查询工具的设计与实现 本科生毕业设计(论文) 题 目: ANDROID平台公交查询工具的 设计与实现 姓 名: 学 号: 系 别: 专 业: 年 级: 指导教师: 独创性声明 本毕业设计(论文)是我个人在导师指导下完成的。文中引用他人研究成果的部分已在标注中说明;...

ANDROID平台公交查询工具的设计与实现
本科生毕业设计( 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 ) 题 目: ANDROID平台公交查询工具的 设计与实现 姓 名: 学 号: 系 别: 专 业: 年 级: 指导教师: 独创性声明 本毕业设计(论文)是我个人在导师指导下完成的。文中引用他人研究成果的部分已在标注中说明;其他同志对本设计(论文)的启发和贡献均已在谢辞中体现;其它内容及成果为本人独立完成。特此声明。 论文作者签名: 日期: 关于论文使用授权的说明 本人完全了解福州大学至诚学院有关保留、使用学位论文的规定,即:学院有权保留送交论文的印刷本、复印件和电子版本,允许论文被查阅和借阅;学院可以公布论文的全部或部分内容,可以采用影印、缩印、数字化或其他复制手段保存论文。保密的论文在解密后应遵守此规定。 论文作者签名: 指导教师签名: 日期: ANDROID平台公交查询工具的设计与实现 摘要 出行一直是人们日常生活中不可或缺的一部分。就目前情况而言,公交车仍是大多数人出行的首选的交通工具。人们的出行是无时无刻不在的,web查询服务无法满足人们突发、即时的查询。但随着手机的普及,功能的强大,使用的方便,它已成为人们生活工作中获取各种信息的主要途径之一,借助于无线互联网,人们可以直接通过手机随时随地地查找公交线路的信息,进一步提高公交的服务水平。 本毕业设计主要是以福州公交线路为主进行设计的系统,它基于android平台开发的,利用Eclipse开发工具,主要以JAVA语言编写,以及Android的一些控件,选择SQLite作为目标数据库,应用SQL语言实现对数据库的操作,地图部分使用谷歌地图。它主要实现的功能有换乘查询,将乘车的次数默认设置为三,将乘车次数最少的 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 显示在最前面,还有线路查询和站点查询功能,不仅能显出查询的结果,而且还能够根据用户选择的线路实现电子地图的显示,使系统更加直观。 本文详细地介绍了开发该系统所要用到的技术,接着介绍各个功能的概述和数据库的设计,然后是讲解系统各个功能实现的详细过程,尤其是详细地介绍了在Google map地图基础上的各个图层的开发,最后展示成品的最终结果,指出自己系统存在的不足之处。 关键字:Android,SQLite,Google map Design and Implementation of a Bus Routes Search Tool for Android Platform Abstract It is indispensable to going out in our daily life. In the light of present situation, bus is still the first choice for most people. People may go out all the time, hence, web search service can not satisfy the sudden and immediate demands. As mobile phones become widespread, multifunctional and convenient, it has been an important way to get information through the wireless Internet in our life. We can directly get information about bus routes through the mobile phones at all times and all places. The bus service quality will further improved. This graduation project is a system designed for Fuzhou’s bus routes. It is developed based on Android platform and written in JAVA language. It utilizes Eclipse development tool, some basic combination controls of Android system and Google map. It takes SQLite as target database and is operated by SQL language. One of its major functions is to search the changes of rides. It takes ‘3’ as the default value of ride times. The program with the least times will be shown at the first. It can also search the routes and bus stations. It not only gives the results, but also shows them on the electronic map according to the users’ choices, which makes the system more visual. This thesis elaborates the technologies used in the system, their functions and the design of database. Then, it explains the implementation process of every function, especially the development of each picture layer based on Google map. Lastly, it shows the final result of the project and point out its shortages. Key words: Android, SQLite, Google map 目 录 1第1章 绪论 11.1 研究背景 11.2 研究现状 21.3 研究目的及意义 21.4 本次课题研究内容 21.5 本文组织结构 3第2章 Android相关技术背景介绍 32.1 Android操作系统简介 32.1.1 Android简介 32.1.2 Android的特点 32.1.3 Android架构 42.2 SQLite简介 52.3 Android布局管理器 52.4 Android基本组件介绍 52.4.1 Activity简介 62.4.2 Intent简介 72.5 Toast的使用 72.6 Google Map介绍 8第3章 系统总体结构设计 83.1 系统主要功能模块 83.2 数据库设计 83.2.1 数据库概念模型设计 93.2.2 数据库表设计 103.2.3 数据库的相关操作 11第4章 公交系统的实现 114.1 欢迎界面的实现 114.2 主要功能的实现 154.3 Google Map的使用 154.3.1 地图开发的前期准备 164.3.2 地图的初始化 164.3.3 地图图层的开发 18第5章 整体测试与分析改进 185.1 截图及运行说明 235.2 软件可以改进之处 24结论 25参考文献 26谢辞 27附录1 部分关键源码及解释 第1章 绪论 1.1 研究背景 随着城市规模的逐步扩大,使整个城市的交通干道越来越复杂。在这种情况下,城市公共交通运输以其覆盖面广、经济、快捷的特点,成为绝大多数出行者的首选方式,也是各地城市政府大力推荐的一种出行方式。因为它从很大程度上缓解了交通压力,改善了交通状况。要想提高公交服务的水平的途径很多,其中很重要的一条途径就是提高智能公交系统的建设。但是我国城市公交车查询系统的发展还处于一个相对落后的水平,广大乘客可以获取公车线路的方式很少,而且线路的完整性、准确性及实时性无法得到保证。 1.2 研究现状 国外许多国家都十分重视公交查询的研究和应用。其目的在于通过提供及时准确的信息和服务,吸引更多的出行者使用公共交通,促进公交的大力发展,减缓城市的交通压力。尤其是美国,他们的研究取得了较好的效果。他们发展公交查询系统的特点是能够提供快捷、方便的电话咨询服务;与定位技术相结合,提供实时信息服务;触摸屏在公共场所的广泛使用以及查询与网络的结合。欧洲一些国家,如芬兰、意大利等,他们在研究公交查询方面也取得了不小的成果。 近年来,我国的公交查询系统也在迅速地发展,不少城市也都有拥有公交线路查询系统,网络上也可以下载到许多不同的版本。不过公交查询系统在发展的同时也存在一些问题,需要不断地改进和完善。 比如早期的公交查询系统脱离了网络,只是一种供人下载后方可查询的程序,是一种单机程序。这样的信息不够准确,也不够及时。 有一部分公交查询系统,它们只是简单地将各个线路和站点的信息一一罗列出来,让用户自己去一条条查找。而真正意义上的公交查询系统应该是用户输入想要查询的内容,系统能够自动查询出结果,而不是靠用户人工进行查询。 还有一部分网上的公交查询系统,它们的系统功能比较完善,实现站点、线路查询以及换乘查询,更加完善一点的系统还有电子地图查询等功能,但是对城市有代表性的地点介绍和查询的功能,做得好的比较少。 还有就是手机上的公交查询系统,可以采用短消息的形式进行查询,但也有一定的局限性。硬件方面,比如遇到服务器、网络繁忙时或者信号盲区,导致用户请求长时间得不到回应。软件方面,运营商不一定提供此类的查询服务。 现行的公交车系统或多或少都还是存在一些缺陷的。但是随着技术的更新以及不断的改进,相信可以做出更人性化、更完善的公交查询工具。 1.3 研究目的及意义 出行是人们日常生活中不可或缺的一部分,而公交车是大多数人出行首选的交通工具,如何才能随时随地、方便快捷的获取公交线路的信息,合理安排自己的出行线路,是很多人非常关心的问题。 建设智能公交系统,利用当代高新技术:电子、信息、通信、计算机、GPS、GIS等,将交通系统中的人、交通设施和交通工具有机的联系起来,建立智能公交系统,如公交优先系统、公交查询系统、智能化行车系统等,为乘客提供实时的更多更全面的出行信息,更好的为乘客服务[1]。 在智能公交系统中,公交查询系统的服务是目前最贴近乘客日常生活的,也是最能让乘客亲身体会公交服务水平高低的方面。因此,如何给乘客提供一个良好的平台,让乘客选择或是推荐合适的乘车方案出行,以节约乘车时间,缩短到达目的的乘坐距离,减少乘坐的票款成本,才是提高公交服务水平最值得关注的问题之一[2]。 越来越多的人倾向通过上网获得和共享信息,随着网络应用的普及而不断的发展,Internet的应用成了世人关注的焦点[3]。智能公交查询系统既提供全面的公交信息,更具有实用性、便利性、多样性。因此我们提出开发并设计了一个基于Android平台的公交查询系统。用户可以在任意一款Android手机中安装此工具。通过此查询工具可以查看线路,查找任意两地的乘车方案等,更方便用户出行,节约时间,减缓交通压力。 1.4 本次课题研究内容 本次毕业设计要研究的内容是学会界面的设计,进行数据库的设计并学会使用SQLite数据库,学会在Google Map的基础上进行地图开发。 1.5 本文组织结构 第二部分为关键技术介绍,主要介绍本系统中所涉及到的主要关键技术,第三部分是关于系统总体结构设计,主要介绍系统的功能模块和数据库的设计与实现。第四和第五部分就是系统详细的设计与实现及测试结果等,然后对整个毕业设计进行了 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf ,最后部分为致谢。 第2章 Android相关技术背景介绍 2.1 Android操作系统简介 2.1.1 Android简介 Android是Google在2007年11月宣布的基于Linux平台的开源手机操作系统的名称,而在Android系统底层方面,Android使用C/C++作为开发语言[4]。该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的解决方案。 2.1.2 Android的特点 Android系统就是一个开发式的手机和平台电脑操作系统[5],早期由Google开发,后由开放手机联盟开发[6]。它提供了从底层操作系统到上层的程序界面的所有软件,使用这个平台无需缴纳任何的授权许可费用,同时不同的厂商还可以根据自身的需求修改和扩展Android平台。 在Android平台下,除了应用程序运行的载体虚拟机之外,所有的Android应用程序之间是完全平等的。所有的应用程序都运行在虚拟机上面,虚拟机提供了一系列用于应用程序和硬件资源间通信的API。Android打破了应用程序之间的界限,在Android平台下开发应用程序,可以很方便的实现应用程序之间的数据共享。一个应用程序不但可以通过API访问系统提供的功能,还可以通过申明自身的功能供其他应用程序调用[7]。 Android为开发人员提供了大量的使用库和工具,使得开发人员可以快速地创建自己的应用程序。例如Android将著名的Google Map集成进来,开发人员通过简单的几行代码就可以快速的开发出基于地图的应用。 2.1.3 Android架构 图2-1显示的是Android操作系统的主要组件。 Android同一个核心应用程序包一起发布,该应用程序包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用Java编写的。Android应用程序框架即开发者也完全可以访问核心应用程序使用的API框架。该应用程序架构用来简化组件软件的重用:任何一个应用程序都可以发布它的功能模块并且任何其他的应用程序都可以使用其所发布的功能模块(不过得遵循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换[8]。 图2-1 Android系统架构图 2.2 SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。SQLite 支持多数 SQL92 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 ,很多常用的SQL命令都能在SQLite上面使用,除此之外Android还提供了一系列自定义的方法去简化对SQLite数据库的操作[9]。 SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。 SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储[10]。 2.3 Android布局管理器 Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以唯一的该系统主要用到的布局有线性布局和帧布局。 (1) LinearLayout类 线性布局是最简单的布局之一。android:orientation可以设置线性布局的朝向,可以是水平(horizontal)或者垂直(vertical)两种排列方式。同时使用android:gravity设置控件的对齐方式,还可以通过设置控件的weight参数控制各个控件在容器中的相对大小。 (2) FrameLayout类 FrameLayout帧布局在屏幕上开辟出了一块区域,在这块区域上可以添加多个子控件,但是所有的子控件都被对齐到屏幕的左上角。帧布局的大小由子控件尺寸最大的那个子控件来决定。如果子控件一样大,同一时刻只能看到最上面的子控件,因为在FrameLayout中,子控件是通过栈来绘制的 [11]。 2.4 Android基本组件介绍 2.4.1 Activity简介 Activity是android最常用的组件,是应用程序的表示层,Activity一般通过View来实现应用程序的用户界面,相当于一个屏幕,用户与程序的交互是通过该类实现的。  Activity类创建了一个窗口,开发人员可以通过 setContentView(View)接口把UI放到activity创建的窗口上,当activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的activity(使用ActivityGroup)[12]。 如图2-2所示,Activity的生命周期主要包含三个状态,各种状态之间的切换是通过各种回调方法实现。处于运行态的Activity拥有焦点,正在与用户进行交互,该状态的Activity可以为用户提供信息并接收用户的事件响应。而处于暂停态的Activity失去了焦点,一般被运行态的Activity替代,当前台显示的Activity不是全屏时,可以见到暂停态的Activity。而处于停止态的Activity没有焦点,并且是不可见的,系统可以随时将其释放。 图2-2 Activity生命周期 2.4.2 Intent简介 所谓Intent,就是一种运行时的绑定机制,在应用程序运行时连接两个不同的组件。一般的应用是通过Intent向android系统发出某种情求或者意愿,然后android系统会到根据请求查询各个组件声明的IntentFilter,找到需要的组件并运行它。 Activity、Service和BroadcastReceiver,他们都是通过Intent机制激活的,不同类型的组件有传递Intent的不同方式[13]。而本系统中就是要激活一个新的Activity,可以通过调用Context.startActivity()方法。这个方法需要传入的Intent参数也称为Activity Action Intent(活动行为意图),为了能够使用该方法,所有的activity类都必须在AndroidManifest.xml文件中定义有相关的“activity”项。然后根据Intent对象对目标Activity描述的不同,来启动与之相匹配的Activity或者传递信息。 2.5 Toast的使用 Toast向用户提供比较快速的即时消息,当Toast被显示时,虽然其悬浮于应用程序的最上方,但是Toast从不获得焦点。因为设计Toast时就是为了让其在提示有用信息时尽量不显眼。比如:提示用户某些输入为不合法输入等。 Toast对象的创建是通过Toast类的静态方法makeText来实现的,该方法有两个重载实现,主要的不同是一个接受字符串,而另外一个接受字符串的资源标实符作为参数。Toast对象创建好之后,调用其show方法即可将消息提示显示到屏幕上。Toast一般只显示比较简短的文本消息,当然也可以显示图片。 2.6 Google Map介绍 Google Map是谷歌最为成功的一款网络服务之一,广泛应用在旅游景点的查询以线路导航等场合[14]。 Google提供了一组API,可以方便的在应用程序当中添加基于地图的功能,详细介绍Google Map API的使用。 Android中定义了一个名为com.google.android.map的包,其中包含了一系列用于在google map上显示、控制和叠层信息的功能类,以下是对该包中重要的几个类的介绍: (1) MapActivity:这个类是用于显示Google Map的Activity类,它需要连接底层网络。MapActivity是一个抽象类,任何想要显示MapView的Activity都需要派生自继承MapActivity,并且子其派生类的onCreate()中,都要创建一个MapView实例。 (2)MapView:MapView是用于显示地图的View组件。它派生自android.view.ViewGroup.它必须和MapActivity配合使用,而且只能被MapActivity创建,这是因为MapView需要通过后台的线程来连接网络或者文件系统,而这些线程需要MapActivity 来管理。 (3) OverLay:这是一个可显示于地图之上的可绘制的对象。 (4) GeoPoint:这是一个包含经纬度位置的对象[15]。 第3章 系统总体结构设计 3.1 系统主要功能模块 公交换乘查询模块:主要实现的是输入出发站和目的站,查询出乘车的方案,至多乘车3次到达目的地。 公交线路查询模块:输入想要查询的线路,按顺序显示相应的站名,还可以进行线路的地图查询,在地图上显示线路。 公交站名查询模块:输入想要查询的站名,显示经过该站的相关线路,点击线路,又可显示有哪些站经过该线路,还可以显示以该站为中心的相应线路。 3.2 数据库设计 3.2.1 数据库概念模型设计 根据系统的功能设计分析,本系统的实体主要有两个:站点和线路。下图列出了各个实体及其属性,如图3-1和3-2所示。 图3-1 站点实体及属性 图3-2 线路实体及属性 一条线路有多个的站点,一个站点可以被多条线路经过,所以线路和站点的关系是一对多。由此可以得到公交系统的E-R图,如图3-3所示。 图3-3 公交查询系统的E-R图 3.2.2 数据库表设计 将概念模型里的实体及属性转换成关系模型,于是知道了本系统需要三张表,分别是线路表lines,站名表station,线路关系表ls,以下将详细介绍每张表的结构。 (1) 线路表lines: 用于 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 线路的基本信息。 表3-1 lines表 字段名 数据类型 是否主键 是否为空 字段含义 L_ number int 是 否 线路编号 L_name Varchar2(20) 否 是 线路名称 (2) 公交车站信息表station:用于记录公交车站的基本信息。 表3-2 station表 字段名 数据类型 是否主键 是否为空 字段含义 S_ number int 是 否 站编号 S_ name varchar(50) 否 是 站名称 S_jd varchar2(20) 否 是 站经度 S_wd varchar2(20) 否 是 站纬度 (3) 线站关系表ls:用于记录公交线路与站之间的关系。 表3-3 ls表 字段名 数据类型 是否主键 是否为空 字段含义 LS_ id int 是 否 编号 L_ number int 否 是 线路编号 S_ number int 否 是 站编号 3.2.3 数据库的相关操作 (1) 数据库表的创建 CreatTable类主要通过SQL语句建立表和插入部分数据,将所有SQL语句放入一个数组中,在通过循环调用的方法执行SQL语句即可实现建表和初始化数据功能。 (2) 数据库的相关操作 LoadUtil类是一个只提供功能的类,主要对数据库进行操作。其中连接数据库的方法是createOrOpenDatabase(),而查询数据库的方法是query()方法,先连接数据库,然后将查询结果以Cursor对象返回,再调用其moveToNext方法进行遍历,最后返回查询结果向量。该类还提供了许多静态方法供其他对象调用。 第4章 公交系统的实现 4.1 欢迎界面的实现 (1) 欢迎界面的设计 WelcomeView类是本系统的欢迎界面。WelcomeView继承自SurfaceView,其绘画机制与普通的View并不相同。 本系统的欢迎界面由两张图片组成。该类新起一个单独的线程重新绘制画面。首先绘制以白色填充的矩形画布,再依次绘制两张图片,该线程通过for循环,对欢迎界面图片1的透明度进行变化,每变化一次就画一次,这样就达到了渐变的效果。当第一张图片完全消失后,线程等待一小段时间,切换到第二张图片进行相同的处理,这样就达到了动态的效果。 (2) 自定义GGView类 使用Android,我们可以在屏幕上绘制各种诸如PNG和JPG的图像,以及文本和基本图形。要在屏幕上绘制,需要一个可用的Canvas(画布)对象。所以,该类就是通过继承View类,实现onDraw()方法,来获得一个Canvas。 该类最终实现的功能是循环播放图片,提升界面的美观度。要想在相应的界面实现该功能,只需将在使用的地方添加如下代码即可。 4.2 主要功能的实现 (1) 换乘查询的实现 换乘查询主要实现的是提供从出发站到目的站的乘车方案,最多实现二次换乘(即乘车次数为三次)。 实现该模块功能有关的类:QueryUtil类、LineNode 类 LineNode类的主要变量和函数的介绍: lineName:线路名称 startStation:边的起点站 endStation:边的到达站 方法: LineNode(String lineName, String startStation, String endStation)是描述搜索过程中的边,比如说从车站A通过线路L可以到达车站B,如图4-1所示。 图4-1 LineNode结点 QueryUtil类的主要变量和函数的介绍: 主要变量: Set stationsSearched:用于保存已搜索过的车站。 Set lineSearched: 用于保存已搜索过的线路,相同的线路不给出多次方案。 Set oldStations:当前搜索中旧的站点集。 Set newStations:当前搜索中新的站点集。 Map>:这个结构很重要,Map<>中的String表示某个车站名,后面Set表示可以搜索到这个车站的LineNode结点。 方法: getLinesByStation(String station):获取经过某个车站有哪些线路。 getStationsByLine(String line):获取某条线路经过那些车站。 查找出所有经过出发站和目的站的换乘方案,默认的换乘次数为二,即乘三次车。系统会先通过isLegal()方法对输入的出发站和目的站进行判断,当出发站或者目的站为空,或者出发站和目的站相同时,就会弹出相应的错误提示,如果输入合法,就进入数据库查询,是否存在经过用户输入出发站和目的站的线路,如果没有,也弹出错误的提示。若有直达的线路,则排除对该线路继续换乘的方案。比如如果乘111路可以到达目的站,则不再考虑111路转乘到站点再转其他线路到达目的站。通过while循环,主要是为了找出站点到线路LineNode结点的映射,表示某个站点经过某条线路可到达该站点。直到搜索不到新的站点或者是换乘的次数大于二,就结束循环。再通过递归调用extractResult()方法提取所有的换乘方案,然后将方案进行排序,实现乘车次数最少的显示在界面的最前面。 (2) 线路查询的实现 线路查询主要实现的是查询该线路经过的所有站点,下图4-2是线路查询的流程图。 图4-2 线路查询流程 当进入线路查询界面时,标识界面值curr=WhichView.XLCX_VIEW;当按下查询按钮后,通过FZGJActivity类中的isLegal()方法用于判断当前输入的文本是否为空,如果为空,使用Toast弹出提示框否则就执行 LoadUtil类中的LineSearch()方法,即到数据库中查找该线路经过的站点,然后再判断返回的结果是否为空,为空则弹出提示框。否则将返回的结果通过goToPassStationView()方法显示的界面上,该方法主要实现的是先为ListView创建适配器,然后每一行使用一个LinearLayout,再将需要显示的文本放入TextView中,再将TextView放到LinearLayout中,得到每一行列表要显示的内容 。 (3) 站点查询的实现 站点查询主要实现的是查找与该站点相关的线路信息,下图4-3是站点查询的流程图。 图4-3 站点查询流程 当进入站点查询界面时,标识界面值curr=WhichView.ZMCX_VIEW;同线路查询一样,当按下查询按钮后,先通过FZGJActivity类中的isLegal()方法判断当前输入的文本是否为空,如果为空,就弹出提示框。然后再判断是否有该站点的相关信息,如果没有,就弹出提示没有相关的车站信息。若不为空,LoadUtil类中的stationSearch()方法是查找出经过该站点的所有线路,然后通过goToListView()方法将结果显示在界面上。 goToListView()方法和goToPassStationView()其实差不多,goToListView()方法就是多了为每行LinearLayout添加监听器,当用户单击列表的某一项时,从数据库中取出对应的数据,即调用LineSearch()方法查找出该线路的详细信息,再将结果显示到passstation界面上。 4.3 Google Map的使用 4.3.1 地图开发的前期准备 (1) 申请Map API Key 使用JDK自带的keytool生成MD5指纹,当进入.android目录下,在命令行输入如下代码:keytool –list –alias androiddebugkey –keystore debug.keystore。输人keystore密码:输入android回车即可。结果如图4-4所示。 图4-4 命令行中的MD5值计算 获取了MD5指纹认证后,打开浏览器,在地址栏输入地址http://code.google.com/intl/zh-CN/android/maps-api-signup.html ,填入刚申请到的认证指纹(MD5)就可以获得API Key,但必须要注册一个Google账号,如图4-5所示。 图4-5 网页申请Android Map Key的值 (2) 地图界面的开发,地图界面主要包含一个导航条和一个实现地图的加载MapView,用于显示地图的信息,只须在需要加载地图的XML文件中添加如下代码。 4.3.2 地图的初始化 当单击地图显示的图片按钮时,跳转到Map界面,通过Intent进行传递和处理接收消息。当界面标记flag=1时,即进行查询线路的地图显示,这时传递的消息为该线路的首站站点的经纬度以及站点的名称,若flag=2,即进行查询站点的相关线路显示,这时传递的消息为输入的查询站点的经纬度和站点名称。创建bundle对象获取Intent的消息。 接下来介绍MapNavigateActivity类,值得注意的是该类继承的不再是Activity类而是继承MapActivity,MapActivity用于显示Google Map的Activity类,它需要连接底层网络,MapNavigateActivity类主要的任务是完成地图的初始化,对地图进行简单的设置及图层的添加。setBuiltInZoomControls(Boolean bool)将其参数设置为true,可实现了地图缩放功能,此外还设置了地图的缩放比例的大小和地图显示的中心位置以及拖拽功能。当进入线路地图查询界面(flag=1),显示用户选择的线路地图,并将该线路的首站站点显示在地图的中心位置。当进入站点地图查询界面(flag=2),显示它的地图信息,就将用户要查找的站点显示在地图的中心,并显示用户所选择的线路,而这时线路地图的图层就变成了NothingOverlay图层,即为一个透明图层。 4.3.3 地图图层的开发 在Map地图上主要开发了四个图层:线路图层、站点图层、信息图层和捕捉触控事件图层。 (1) 线路图层开发 根据用户的选择,绘制不同的公交车线路。实现该功能的主要是LineOverlay类。其中的valueofline()方法是用笛卡尔公式求得两个站点之间的直线距离。calDirection1方法()根据两点的X、Y坐标差构成的atan值来求得两个站点间的方向问题,求得了距离和方向角就可以进行线路的绘制了。 (2) 站点图层开发 站点图层StationPicture类主要是在用户选择显示的线路上,将本线路上的站点图标随线路的显示而显示,这时就需要用到LoadUtil类中的searchSinglejw()方法,该方法为了获取指定线路上所有站点的经纬度,还需要用到MiddleLineOverl类中的getPoint1()方法,通过该方法将数据库中查询得到的站点经纬度转换成标准经纬度形式,再将标准经纬度转成成屏幕上得XY坐标,最后就是绘制站点图标将其显示在线路图层上。 (3) 信息图层开发 当用户可以查询相关线路上的站点了,但用户还是无法知道自己选择的站点是哪个站点,所以就需要开发一个信息图层MyBallonOverlay。 该信息图层主要显示一个用于定位当前站点的图标和一个显示当前站点信息的文本提示框,图标开发是在当前位置实施贴图操作,即将图标和信息提示窗口显示于站点之上。 其drawWindow()方法是用于绘制信息提示的矩形圆角边框及文本内容,并通过重写onTouchEvent()方法,通过对动作和触控范围的判断实现信息文本提示框的屏蔽或者显示。就是当用户不需要提示框显示时,单击相应的站点图标就会隐藏信息提示框,若还需要信息显示,再次单击即可。 (4) 触控事件图层开发 用户可以单击不同的站点就会显示当前站点的信息,实现该功能的是MyMapOverlay类。它是一个覆盖整个地图捕捉触控事件的透明图层,主要是通过重写onTouchEvent()方法,,判断当前地图信息提示图层是否是用户选择的站点,如果不是,则去掉该信息提示图层之后直接添加当前信息图层。 第5章 整体测试与分析改进 5.1 截图及运行说明 (1) 运行该程序首先进入的是欢迎界面,效果如图5-1和图5-2所示。 图5-1 欢迎界面1 图5-2 欢迎界面2 (2) 当欢迎界面完毕,进入主界面,如图5-3所示。 图5-3 主页面 (3) 进入主界面,单击各个按钮,就进入相应的查询界面,如图5-4、图5-5和图5-6所示。 图5-4 换乘查询界面 图5-5 线路查询界面 图5-6 站点查询界面 (4) 在换乘查询界面上,输入出发站和目的站,如果输入的两个站名不为空且存在经过这两个站点的线路,将其查询结果显示在界面,如图5-7所示。 图5-7 换乘查询结果界面 (5) 在线路查询界面上,输入要查询的线路名称,单击查询按钮,如果有此线路,将其结果显示在界面上,如图5-8。 图5-8 线路查询结果界面 (6) 在站点查询界面上,输入要查询的站点名称,单击查询按钮,如果该站点存在,就先显示经过该站点的线路(图5-9),然后单击其中的某一项,即可进入对应线路的详细信息界面,如图5-10。 图5-9 站点查询ListView界面 图5-10 某线路详细查询结果 (7) 当进入线路地图查询界面时,显示用户选择的线路,并将该线路的首站显示在地图的中心位置,如图5-11。 图5-11 线路地图查询界面 (8) 当进入站点查询界面时,也是显示用户选择的线路,但是将用户查询的站点显示在地图的中心位置,如图5-12。 图5-12 站点地图查询界面 5.2 软件可以改进之处 软件还可以进行一系列改进和优化,主要有以下几方面: (1) 换乘的算法比较简单,没有进行最短路径的优化。 (2) 可以增加导航的功能,让用户可以根据导航找到所要去的车站。 结论 本次毕业设计是结合福州公交线路系统开发的一款手机查询工具。 历经几个月的毕业设计,我的收获还是很大的。从资料查找到课题的设计分析、数据库的设计、界面的设计、然后进行代码编写、程序调试等,整个开发过程都是一边摸索一边实践出来的。为了毕业设计,我阅读了不少的资料,付出了不少的心血,有些是对毕设有帮助的,有些只能作为知识来积累,我深有体会的是要完成一个完善的系统是相当不容易,要考虑周全也是相当困难的。 在这一步一步地学习摸索的过程中,我感到开心的就是能够将所学到的知识应用到设计中,使自己的设计能更加完善些。由于能力的限制,最终的系统还是没有那么令人满意,还是存在一些不足之处。希望在日后有机会对其继续改进。比如实现导航功能,换乘查询的算法能够更加完善等。 在设计过程中,遇到不少的问题,遇到问题时,我刚开始很难静下心来去想该怎么解决,而是过分的依赖老师或者同学,结果问题是很快解决了,可是却发现都是些小毛病,有些甚至是自己不够认真所致。后来,再遇到问题时,我想我必须要冷静下来,不然又是些小问题就不好了,我就静下心去思考,慢慢去调试,去找出问题的所在,这样其实更有成就感。直到实在没有办法了,再去请教老师或者同学,印象会更加深刻,对知识的理解也就更清晰了。在这个过程中,我知道了要提高自己独立处理问题的能力,不要过分地依赖别人,做一件事要有耐心,遇到困难要去寻找解决的办法,而不是退缩,这样才能不断提高自己,迎接更多新的挑战。 还有最重要的一点就是,系统发开之前一定要做足准备工作,做好规划,切记盲目,不然后期去重新调整规划会浪费更多的时间,我前期的工作做得还是不够充分,所以在后期开发过程中,有些界面和代码设计部分又重新进行调整,反而浪费了更多的时间和精力。 我相信有努力还是有回报的,从刚开始对ANDROID的陌生到慢慢的了解的过程,由最初的不知所措、不懂得该如何入手到最终完成设计的充实感,这都要靠自己平时的努力,还是相信一分耕耘一分收获! 总之,这次的毕业设计不仅让我学到了知识,还提高了我独立处理问题的能力,这对我将来的工作也有很大的帮助。 参考文献 [1] 陶佩枫.城市公交查询系统的设计与实现.万方中文数据库,2008-05-18. [2] 张坤和.公交车查询系统的设计与实现.万方中文学位论文数据库,2009-09-30. [3] 胡翌阳.基于GIS的城市公交查询系统研究.CNKI,2007-06-03. [4] Sams.Teach Yourself Android Application Development in 24 Hours(影印版)[M].美国:Lauren Darcey&Shane Conder,2000.1-10. [5] 李刚.疯狂Android讲义[M].北京:电子工业出版社,2011.1-36. [6] [美]Lauren Darcey,Shane Conder. Andriod移动开发一本就够,张魏等译.北京:人民邮电出版社,2011.7-18. [7] 吴亚峰,苏亚光.Android 应用案例开发大全 [M].北京:人民邮电出版社,2011. 2-16. [8] yangBelieve.Android 操作系统简介[EB/OL]. http://wenku.baidu.com/view/b8314a1ea76e58fafab003cc.html,2010-11-12. [9] 说过了.Sqlite百度名片[EB/OL].http://baike.baidu.com/view/19310.htm#1,2011-12-05. [10] 谢亚力.Android 开发中使用SQLite数据库[EB/OL]. http://www.ibm.com/developerworks/cn/opensource/os-cn-sqlite/,2010-08-19. [11] 吴亚峰,索依娜.Android 核心技术与实例详解 [M].北京:电子工业出版社,2011. 63-66. [12] hbzha.Activity简介[EB/OL]. http://hi.baidu.com/hbzha/blog/item/c5e334893b8d3683a5c27216.html,2011-05-09. [13] E2EColud工作室.深入浅出Google Android[M].北京:人民邮电出版社,2009-08-01. 70-76. [14] 孙育春.Google Maps API开发大全[M].北京:机械工业出版社,2010-01-01.10-28. [15] X317071630.Android Google Map开发笔记[EB/OL]. http://www.docin.com/p-312082321.html,2011-12-21. 谢辞 在本文即将结束之际,首先,我要由衷地感谢我的指导老师陈羽中。很感谢他在繁忙的教学、科研任务中抽出时间,定期召集我们开会,耐心的给我们讲解并一一指导,在我的设计中,陈老师给了我很多宝贵的建议。 在此,我要感谢这四年所有教导过我的老师,是你们培养了我,还要感谢所有帮助过我、关心过我的同学们,尤其是在这次设计中帮助我的同学们,他们帮我解决了不少的难题。没有你们的帮助,我是无法顺利完成毕业设计的。再次感谢所有关心和帮助我的老师和同学们。 附录1 部分关键源码及解释 //换乘查询部分主要代码 /** * 获取换乘方案 * @param startStation 出发站 * @param endStation 目的站 * @param transferCount 最多乘车次数 * @return 换乘方案集 */ public static Vector> getTransfer(String startStation, String endStation, int transferCount) { // 用于保存换乘方案结果集 Vector> result = new Vector>(); // 获取经过起点站有哪些路线 Vector linesInStartStation = getLinesByStation(startStation); // 获取经过目的站有哪些路线 Vector linesInEndStation = getLinesByStation(endStation); if (linesInStartStation.size() == 0|| linesInEndStation.size() == 0) { return result; // 返回一个空的结果集 } int count = 0; // 当前乘车次数 // 用于保存已搜索过的车站 Set stationsSearched = new HashSet(); Set lineSearched = new HashSet(); // 当前搜索中旧的站点集 Set oldStations = new HashSet(); // 当前搜索中新的站点集 Set newStations = new HashSet(); // 开始搜索前将起点站放入旧站点集中,并标记为已搜索过的车站 oldStations.add(startStation); stationsSearched.add(startStation); // 用于保存站点到线路节点集的映射,表示哪些线路节点可到达本站点 // 用于保存到达某个车站的所有边 Map> stationMap = new HashMap>(); while (true) { for (String stationInOldStations : oldStations) { // 获取经过当前旧站点的所有线路 Vector lines = getLinesByStation(stationInOldStations); // 遍历所有线路 for (String line : lines) { if (lineSearched.contains(line)) continue; lineSearched.add(line); // 获取此线路所经过的所有车站 Vector stations = getStationsByLine(line); if(stations.contains(endStation)) { stations.clear(); stations.add(endStation); } // 遍历所有车站 for (String station : stations) { // 此站点已经被搜索过,跳过此站 if (stationsSearched.contains(station)) continue; // 将新搜索到的站点添加到新站集 newStations.add(station); LineNode node = new LineNode(line, stationInOldStations, station); if (stationMap.containsKey(station)) { stationMap.get(station).add(node); } else { Set set = new HashSet(); set.add(node); stationMap.put(station, set); } } } } // 如果新搜素到的站点数量为0,搜索结束 if (newStations.size() == 0) break; newStations.remove(endStation); // 当转车次大于指定的最大乘次数,停止搜索 if (++count >= transferCount) { break; } // 使得新站点集成为旧站点集 oldStations = newStations; newStations = new HashSet(); // 把这次所搜到的全部站点标记己搜索 stationsSearched.addAll(oldStations); }袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 站纬度 站经度 站名称 站编号 站点 线路 线路名称 线路编号 1 n 线路名称 线路编号 站纬度 站经度 站名称 站编号 关联 站点 线路 是 否 否 是 查询结束 显示查询 结果 提示没有相关线路 提示线路不能为空 结果是否为空 在数据库中进行查询,返回结果 线路是否为空 输入线路 查询结束 提示没有相关信息 是 否 否 是 显示线路的信息 显示经过站点的所有线路 结果 提示线路不能为空 结果是否为空 在数据库中进行查询,返回结果 站点是否为空 输入站点 startStation Line endStation
本文档为【ANDROID平台公交查询工具的设计与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
北溟愚鱼
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:0
分类:工学
上传时间:2018-09-22
浏览量:1