毕业设计-基于J2ME的公交查询系统的设计与实现论文.doc

上传人:小小飞 文档编号:3944250 上传时间:2019-10-10 格式:DOC 页数:36 大小:545.50KB
返回 下载 相关 举报
毕业设计-基于J2ME的公交查询系统的设计与实现论文.doc_第1页
第1页 / 共36页
毕业设计-基于J2ME的公交查询系统的设计与实现论文.doc_第2页
第2页 / 共36页
毕业设计-基于J2ME的公交查询系统的设计与实现论文.doc_第3页
第3页 / 共36页
毕业设计-基于J2ME的公交查询系统的设计与实现论文.doc_第4页
第4页 / 共36页
毕业设计-基于J2ME的公交查询系统的设计与实现论文.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《毕业设计-基于J2ME的公交查询系统的设计与实现论文.doc》由会员分享,可在线阅读,更多相关《毕业设计-基于J2ME的公交查询系统的设计与实现论文.doc(36页珍藏版)》请在三一文库上搜索。

1、 毕毕 业业 设设 计计( 论论 文文) 基于基于 J2ME 的公交查询系统的设计与实现的公交查询系统的设计与实现 论论文作者姓名:文作者姓名: 申申请请学位学位专业专业: : 申申请请学位学位类别类别: : 指指导导教教师师姓姓名名( (职职称称) ): : 论论文提交日期:文提交日期: 基于基于 J2ME 的公交查询系统的设计与实现的公交查询系统的设计与实现 摘摘 要要 当今,人类社会已步入信息时代,信息化革命给所有领域带来了前所未有 的变革。电脑、手机等信息工具的普及,人们获取信息变得更加完善、快捷。 而随着信息技术的飞速发展,手机所蕴藏的无限商机,正在被人们逐步发掘, 它不再仅仅局限于

2、通信这一单一功能,正在朝着手提电脑甚至更完善的方向发 展。由于手机价廉物美,它已成为人们获得在生活工作上等各种信息服务的最 佳选择。 在我国,随着城市化的快速发展,城市公交系统也随之迅速扩大,且更加 复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得 用户往往处于迷惑的状态,给出行带来诸多不便,而手机公交查询系统的选题 也正是基于该背景。本系统通过对城市公交系统的调研,提出了基于站点优先 级和邻接矩阵的公交换乘算法和上下矩阵算法;以 J2ME 作为开发工具,将其 移植到用户手机上,借助于无线互联网,能为客户随时随地提供公交信息的查 询;通过测试与分析,证实了该系统的可行性及实

3、用价值。 关键词关键词:公交查询;站点优先级;公交换乘算法;手机;无线互联网 Design and Implementation of City-bus Information Inquiry System Based on J2ME Abstract At present, the human society marches into the information time; the information revolution has brought the unprecedented revolution for all domains. With the popularization

4、 of information tool as like Computer, handset and so on, obtaining the information is more and more perfectly and quickly. But along with the rapid development of information technology, the infinite opportunity that the handset contains is being gradually excavated by the people, it no longer mere

5、ly limits to this sole function of communication, is facing to the development of portable computer or even more perfect aspect. As a result of the low-price and high-quality of the handset, it has become the best choice that the people obtain each kind of information service in life. In our country

6、, along with urbanized fast development, city bus system also rapidly expands, and even becomes more complex. So, finding city bus route becomes more difficult. Presently, the complex city bus system causes the condition which the users often are confused, which brings many inconvenient to people, b

7、ut handset city bus inquiry system is also based on this background. Firstly, the author investigates the city bus system, provides “the Algorithm based on the stand priority and the next linking matrix” and “the Algorithm based on upward and downward matrix”. Secondly, these Algorithms are transpla

8、nted to the handset by J2ME, which can provide the inquiry for city bus at any time and any where by the aid of to the wireless Internet. Finally, through testing and analyzing, it confirms this system is some feasibility and practical value. Key words: City Bus Inquiry; Stand Priority; City Bus Exc

9、hanging Algorithm; Handset; Wireless Internet 目目 录录 论文总页数:27 页 1引言1 1.1课题背景1 1.2国内外研究现状1 1.3本课题研究的意义2 1.4本软件的开发方法2 1.5本文的主要工作3 1.5.1研究的主要内容3 1.5.2各章节的安排3 2手机公交查询的需求分析和开发工具介绍3 2.1用户的原始需求3 2.2手机公交查询系统功能模块及流程图4 2.3开发工具介绍5 3手机公交查询系统的设计5 3.1手机公交查询系统算法的设计5 3.1.1直达的算法设计5 3.1.2一次换乘的算法设计6 3.1.3二次换乘的算法设计7 3.2

10、手机公交查询数据库的设计7 3.2.1数据库的逻辑设计7 3.2.2数据库的物理设计8 4手机公交查询系统功能详细实现10 4.1服务器端的实现10 4.1.1基类(Base Class)的实现11 4.1.2辅助类(Help Class)的实现12 4.1.3业务逻辑类(Logic Class)的实现.13 4.1.4服务器对外接口(Servlet)的实现 16 4.2WEB 端的实现16 4.3WAP 端的实现18 4.4手机客户端的实现20 4.4.1客户端界面的实现20 4.4.2客户端工作原理20 4.4.3手机网络设置22 5手机公交查询系统测试与分析22 5.1测试环境22 5.

11、2运行与测试22 5.3测试结果24 结 论24 参考文献25 致 谢26 声 明27 第 1 页 共 27 页 1 引言引言 1.1 课题背景课题背景 作为关系国计民生的社会公益事业,城市公共交通一直都是政府工作的重 点。就武汉市而言,调研数据显示,武汉市乘客以公交方式出行的比例为 23.36%, 可见城市公交的重要性。但是从客观上说,公交硬件建设跟不上城市建设的步 伐,是全国大城市尤其是特大城市都正在遭遇的发展瓶颈。也常常造成人们的 出行不便。 在我国,随着城市化的快速发展,市公交系统也随之迅速扩大,且更加复 杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用 户往往处于

12、迷惑的状态,给出行带来诸多不便,在另一个方面,我国城市的手 机普及率已经非常高了,如果能把这两种情况结合起来,开发出一种基于手机 的公交查询软件,将会给用户带来便捷。 1.2 国内外研究现状国内外研究现状 从有关的文献看, 如今全世界可以支持 J2ME 的手持设备如今已经达到了 七千五百万,有 34 个运营商在使用 J2ME 技术; 传统手机在出厂之后,功能(通讯录、游戏、商务应用)就已经固化,用 户将无法删除无用的功能,同样也不能增加新的功能。即使用户找到提供新功 能的程序,也往往由于程序和手机平台无法兼容而不能使用。这成为了手机行 业发展的瓶颈,而 JAVA 在移动终端领域的出现改变了这一

13、局面。JAVA 以其 可移植性,资源重用性,安全性,移动性以及强大的网络功能迅速占领了全球 手机市场,未来的手机出货将主要以 JAVA 手机为主。 据美国高科技研究公司 Strategies Unlimited 日前发表的2.5G 和 3G 手机 性能:2002-2006 全球分析与市场预测的报告称,市场上 Java 手机的数量预 计将每年翻一番,到 2006 年将从 2001 年的 1,910 万部增长到 5.53 亿部。硬件 中加快集成 Java 预计将进一步促进 Java 在市场中的普及,J2ME 将成为事实上 的标准。到 2006 年,Java 手机预计将占全部手机出货量的 83%。

14、就国内来说,JAVA 是未来无线数据服务的主流方向,也开始采用基于开 放应用平台的移动增值服务架构。从 2003 年起,移动、联通均已开通无线 JAVA 业务。JAVA 手机已经成为绝大多数用户选购手机时的必要考虑条件。 在 J2ME 通信方面,MIDP1.0 支持 HTTP,MIDP2.0 则增加了对 HTTPS、 报文、socket 通信以及串口通信的支持。另外,MIDP2.0 还支 持服务器 Push 体系架构,这样,你的手机能够收到来自服务器的报警、消息或者广播,根据 要求启动手机上的应用程序进行操作。 第 2 页 共 27 页 支持 Over-the-air (OTA) Provis

15、ioning 是 MIDP2.0 的一个重要的新特点,它 使得用户能够动态地部署和更新移动设备上的应用程序。新版的 MIDP 规范中 规定了如何在移动设备上发现、安装、更新和删除 MIDlet 套件;同时,提供应 用程序下载的服务提供商还能够判断该 MIDlet 套件是否能够运行在申请下载的 设备上,并且从设备上获取安装、更新和删除的信息。MIDP OTA provisioning 模型为移动服务提供商提供了单一、标准的部署 MIDP 应用程序的途径。该模 型已经被众多技术领先的移动设备制造商和服务提供商所采纳。 J2ME 针对嵌入式和移动设备,提供了开发和运行应用程序的平台,随着 新的规范的

16、不断推出和众多制造商、软件开发商的支持,J2ME 正在飞速向前 发展。JTWI 将保证 J2ME 应用程序在不同制造商的产品上的兼容性。今后 J2ME 将借助 Web Services 的力量,真正成为企业级信息解决方案中不可或缺 的一部分。 1.3 本课题研究的意义本课题研究的意义 在我国,随着城市化的快速发展,市公交系统也随之迅速扩大,且更加复 杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用 户往往处于迷惑的状态,给出行带来诸多不便,在另一个方面,我国城市的手 机普及率已经非常高了,如果能把这两种情况结合起来,开发出一种基于手机 的公交查询软件,将会给用户带来便捷。基

17、于以上原因,本系统通过对城市公 交系统的调研,提出了基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵 算法;以 J2ME 作为开发工具,将其移植到用户手机上,借助于无线互联网, 能为客户随时随地提供公交信息的查询。 1.4 本软件的开发方法本软件的开发方法 由于公交数据相对比较庞大和繁琐,同时设计换乘时对系统处理的性能要 求也比较高,故本系统采用在服务器上进行计算,结果通过无线网络传输到客 户端的形式进行开发。又由于当前绝大多数手机都支持 JAVA,而 J2EE 和 J2ME 因为同出一门,具备先天性无缝衔接的优势,故本系统采用 J2ME 和 J2EE 结合的方式进行开发。 通过 J2ME 和

18、 J2EE 技术的结合,采用 C/S 模式和 B/S 模式共同存在的方式, 服务器端采用 Mysql+Tomcat/Weblogic,通过 Servlet 实现对外服务器通信,同时 前台开发出 WEB 模块和 WAP 模块,WEB 模块采用 MVC 模式,使用 Struts 框架。手机客户端采用 J2ME 编程,使用线程技术实现和服务器的网络通信, 并且在从服务器取得数据后自动断开连接,节约用户流量。 第 3 页 共 27 页 1.5本文的主要工作本文的主要工作 1.5.11.5.1 研究的主要内容研究的主要内容 本设计采用 B/S 和 C/S 结合的结构,综合运用以前所学的专业知识,设计 开

19、发一个功能较完善的基于手机的公交查询系统,具体包括以下内容: (1)研究并掌握 TCP/IP 等传输协议、数据库操作等的基本原理。 (2)学习并掌握 J2EE,J2ME 等相关知识。 (3)以前面的研究为基础,编程实现服务器及手机客户端线路查询,按站 查询,站站查询并且实现手机无线网络通信等功能。 1.5.21.5.2 各章节的安排各章节的安排 本文章详细介绍了该系统的分析和实现各个流程。在文章的引言中,主要 介绍了该系统面临的背景,研究意义和开发方法等,使读者对本文有全面的了 解。在接下来的第二章里,对系统的需求分析和与之对应的开发工具介绍。在 第三章里,对系统开发涉及的算法进行了介绍和对数

20、据库设计给出了详细的说 明。第四章是系统功能具体实现的介绍其中包括了关键的编程技术,功能的代 码说明。第五章是对系统的测试和分析,包括代码测试和功能测试,并对测试 分析总结。最后,是作者通过对本系统的研究和设计总结出的系统特点以及研 究心得。 2手机公交查询的需求分析手机公交查询的需求分析和开发工具介绍和开发工具介绍 2.1用户的原始需求用户的原始需求 作为关系国计民生的社会公益事业,城市公共交通一直都是政府工作的重 点。就武汉市而言,调研结果中的另一个数据,武汉市乘客以公交方式出行的 比例为 23.36%,可见城市公交的重要性。但是从客观上说,公交硬件建设跟不 上城市建设的步伐,是全国大城市

21、尤其是特大城市都正在遭遇的发展瓶颈。也 常常造成人们的出行不便。 本系统通过对城市公交查询用户需求的调研,发现用户在查找公交信息的 时候一般只有 3 种方式,即按线路进行查找,按站进行查找线路,按起点站和 终点站查找乘坐方案。同时由于城市公交系统在规划的时候是以站作为单位进 行规划的,故经过站数的多少直接决定了公交线路的长短和时间。 因此,在本系统的设计中提出以下方案: 用户在使用本系统的时候,可以按照线路进行公交查询,或者按起点终点 进行查询,系统自动按照换乘筛选算法提供出最佳换乘方案,该算法根据用户 输入的站名,查找全部可以直达的方案,如无直达方案,则找出全部换乘方案 并按照站点优先级进行

22、排序,返回给用户线路最短的前 N 条的换乘信息,如果 第 4 页 共 27 页 用户使用按站查询线路,系统也提供了一定的模糊查询,比如用户查询“百脑 汇” ,系统能自动辨认出当地站点“磨子桥” 。同时,用户在手机上可以通过 J2ME 手机客户端和 WAP 的方式进行查询,在电脑上可以通过访问 WEB 站点 的方式进行查询。 2.2手机公交查询系统功能模块及流程手机公交查询系统功能模块及流程图图 通过对需求分析的调研,得出了经过用户确认的手机公交查询系统的系统 逻辑模型。根据手机公交查询系统的业务流程图,明确了整个系统的流程。 (1)WEB 和 WAP 功能模块,如图 1 所示。 图 1 WEB

23、 和 WAP 功能模块图 第 5 页 共 27 页 图 2 手机客户端流程图 (2)J2ME 手机客户端的系统流程图,如图 2 所示。 用户查询流程分为查询内容选择、查询信息输入和信息接收 3 个步骤。 从该流程图中可以看出,按起点终点查询是整个系统最重要的一部分,也 是本系统最能体现算法的一部分,经过对成都公交系统的观察和分析,本系统 提出了一次换乘时采用基于站点优先级和邻接矩阵的公交换乘算法,如果第一 次换乘没有可以换乘的方案,则采用上下矩阵算法,得出二次换乘信息,同时 把得到的方案缓存到数据库中,下个用户查询相同起点终点时就直接从数据库 中提取缓存信息,大大的节约了用户的时间和系统资源。

24、 2.3开发工具介绍开发工具介绍 JAVA 语言是目前 Internet 上大型的 WEB 应用和手机程序开发时使用得最 热门的编程语言,而目前国内销售的大多数手机都支持 JAVA,同时 J2ME 和 J2EE 因为都是基于 JAVA 技术,可以进行无缝连接,所以本系统选用 J2ME 和 J2EE 做为开发语言,同时在 WEB 端应用相关的 Struts 框架,并完成一个基于 这 2 种技术结合的手机无线公交查询系统。 本系统采用的开发工具为 MySQL+Eclipse+Tomcat/Weblogic,MySQL 是一 个广受 Linux 社区人们喜爱的半商业的数据库。MySQL 具有强大且简

25、单易用的 特点,而且运行速度极快,能够处理企业数据库绝大多数的应用需求。Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是 一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附 带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT) 。 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,它是 Apache 软件 基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开

26、发而成。由于有了 Sun 的参与和支 持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现,Tomcat5 支持最 新的 Servlet 2.4 和 JSP 2.0 规范。因为 Tomcat 技术先进、性能稳定,而且免费, 因而深受 Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流 行的 Web 应用服务器。 3手机公交查询系统的设计手机公交查询系统的设计 3.1手机公交查询系统算法的设计手机公交查询系统算法的设计 3.1.13.1.1 直达的算法设计直达的算法设计 现有 A,B 两个公交站,通过数据库查询语句“select * from busin

27、fo” 获得 全部公交线路信息,再把每一路车的信息依次迭代出来,判断 A 站和 B 站是否 第 6 页 共 27 页 同时在该线路中,如结果为 true,则可以直达,同时将直达方案存入一个集合 中,继续向下遍历,如果结果为 false,则该车不能直达,继续向下遍历。 3.1.23.1.2 一次换乘的算法设计一次换乘的算法设计 一次换乘采用基于站点优先级和邻接矩阵的公交换乘算法,现在 A,B 两个 公交站,通过数据库查询语句查找出经过 A 站的所有公交车集合 Collection1,再 通过数据库查询语句查找出经过 B 站的所有公交车集合 Collection2,判断 Collection1 和

28、 Collection2 是否有交集,若有,则得到一次换乘方案,存放在结 果集合中。判断结束后,再按照经过站点总数对换乘方案进行排序,因为换乘 结果往往数以百计,所以只取结果集的前 N 条记录展现给用户。若判断结束后 没有找到一次换乘的方案,则执行 2 次换乘算法。 一次换乘算法,如图 3 所示。 图 3 一次换乘算法示意图 第 7 页 共 27 页 图 4 二次换乘算法示意图 3.1.33.1.3 二次换乘的算法设计二次换乘的算法设计 二次换乘采用上下矩阵算法,现有 A,B 两个公交站,先通过数据库查询语 句和程序业务逻辑得到 A 站能直达的所有站点,放在集合 Collection1 中,再

29、按 照 A 站的方法找出 B 站能知道的所有站点,放在集合 Collection2 中,再判断是 否有公交车可以从 Collection1 中的站点直达 Collection2 中的站点,如果,则将 方案存放到结果集合中。至此为止,根据公交线路设计的理论,是肯定可以找 到二次换乘的方案的,故不再考虑 3 次换乘方案。 二次换乘算法,如图 4 所示。 3.2手机公交查询数据库的设计手机公交查询数据库的设计 3.2.13.2.1 数据库的逻辑设计数据库的逻辑设计 图 5 数据库主要 E-R 图 准确了解与分析用户需求(包括数据与处理)是整个设计过程的基础。而 根据用户需求设计合适的数据库以及选择恰

30、当的数据库以确保系统能高速稳定 的运行则是数据库设计的根本目地。 由于本系统涉及到大量数据的读取,并且对安全性要求不高,故选用占用 系统资源较少并且速度相对较快的 MySQL 作为本系统的数据库。 通过对用户需求的分析以及对系统本身应用背景的研究,可以看出本系统 需要有以下数据支持:公交线路信息,公交站点信息,站点附近标志信息,用 户通知信息,同时考虑到节约系统资源,在用户进行完站站查询后还会产生一 第 8 页 共 27 页 个存放查询结果的缓存信息。由上述可以确认该算法所关系到的数据表。 根据上述分析,可以得出公交信息模型的 E-R 图,如图 5 所示。 公交信息相关数据库的数据字典,如表

31、1 所示。 表 1 公交信息相关的数据字典 序 号数 据 项 名 称数 据 项 内 容 1.公交线路信息公交线路的信息汇总 1.1线路 ID公交线路的 ID 1.2线路 NO公交线路的名称,如 502A 1.3经过站点公交线路经过的站点 1.4收发车时间公交车的收发车时间 1.5是否上下行判断该公交车是否有上下行 2.公交站点信息公交站点相关信息 2.1公交站名该站点的站名 2.2附近标志 1附近标志 1 的名字 2.3附近标志 2附近标志 2 的名字 2.4附近标志 3附近标志 3 的名字 2.5附近标志 4附近标志 4 的名字 2.6附近标志 5附近标志 5 的名字 2.7附近标志 6附近

32、标志 6 的名字 2.8附近标志 7附近标志 7 的名字 2.9附近标志 8附近标志 8 的名字 2.10附近标志 9附近标志 9 的名字 2.11附近标志 10附近标志 10 的名字 3.站点附近标志汇总站点附近标志性建筑物或者地名的汇总 3.1标志 ID标志编号 3.2标志名称站点附近标志性建筑物或者地段的名称 3.2.23.2.2 数据库的物理设计数据库的物理设计 (1)公交线路信息表 负责存放公交线路信息,考虑到部分公交车存在上行和下行不一致的情况, 表中添加了是否上下行的字段,以供算法确认。如表 2 所示。 表 2公交线路信息表 公交线路信息表(businfo) 第 9 页 共 27

33、 页 字段名注释 Busid公交车的 id Busno公交车的车号 stop1第 1 个站的站名 stop2第 2 个站的站名 stop50第 50 个站的站名 Time公交车的发车收车时间 Startend公交车的起点和终点 Updown是否有上下行 (2) 站点信息表 负责存放站点相关信息,并且存放一定的周围标志建筑和地名的信息,以 供算法进行模糊查询。如表 3 所示。 表 3站点信息表 站点信息表(stopinfo) 字段名注释 Stopname公交站站名 near1附近标志 1 near2附近标志 2 near3附近标志 3 near4附近标志 4 near5附近标志 5 near6附

34、近标志 6 near7附近标志 7 near8附近标志 8 near9附近标志 9 near10附近标志 10 Stoppic臃余字段,为以后功能预先留出 (3) 站点附近标志汇总表 负责存放站点周围标志建筑或地名的汇总信息,本表为站点信息表的 near 集合自动生成。如表 4 所示。 第 10 页 共 27 页 表 4站点附近标志汇总表 站点附近标志汇总表(stopinfo) 字段名注释 Id标志的 id Nearname标志的名字 (4) 用户公告表 负责存放本系统的公告信息。如表 5 所示。 表 5用户公告表 用户公告表(notify) 字段名注释 Id消息的 id Content消息内

35、容 Date消息发布日期 (5) 查询统计表 负责统计用户查询和下载量。如表 6 所示。 表 6 查询统计表 查询统计表(jishuqi) 字段名注释 Idid Fangwen查询量 Xiazai客户端下载量 4手机公交查询系统功能手机公交查询系统功能详细实现详细实现 经过上面的描述,已经明确了手机公交查询系统需要实现的功能以及如何 去完成这些功能。下面将具体的阐述如何实现这些功能。 4.1 服务器端的实现服务器端的实现 本系统遵照 J2EE 3、4 层结构,使用了 MVC、AO 等设计模式,组织结构图如 图 6 所示。 第 11 页 共 27 页 图 6 系统组织结构图 4.1.14.1.1

36、 基类(基类(Base Class)的实现)的实现 采用 AO 模式,将数据库相关方法封装到一个基类中,由业务逻辑继承该 基类。 数据库连接(Connection)通过配置 WEB 服务器上的连接池,同时将数据 源绑定到 JNDI,程序直接通过 JNDI Name 获取,实现了数据源的可配置性和 高度可移植性。获取 JNDI Name 方法如下: Javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(dsName) ; /从数据源得到连接 conn = ds.getConnection() ; 因为后面需要多次调用关闭数据库连接

37、,故关闭连接封装到一个方法中, 具体实现如下: /关闭数据库连接 第 12 页 共 27 页 public void close(ResultSet rs,PreparedStatement ps,Connection con) try if(rs!=null) rs.close(); if(ps!=null) ps.close(); if(con!=null) con.close(); catch(Exception e) e.printStackTrace(); 4.1.24.1.2 辅助类(辅助类(Help Class)的实现)的实现 辅助类主要为业务类提供一些辅助功能,尽量实现功能的分

38、离和高度封装。 同时为了加快运行速度,减少 JVM 编译负担,采用 PreparedStatement。部分方 法如下: (1)获得公交总数 一般查找总数用”select count(*) from businfo”,但这样因为是顺序遍历,一直 要遍历到最后一条,效率不高,此处使用 sqlRst.last();使游标直接指向最后一条 记录,再用 buscount = sqlRst.getRow();记录最后一条记录的行号,从而得到了 总行数,比起前一个方法更快而且节约系统资源。 (2)插入数据库缓存,使得下一个用户查询该方案时可以直接从数据库中 获取结果,从而大大的节约了用户时间和系统资源。实

39、现方法如下: String sql=“insert into zhuancheng(id,result1,result2,result3,result4) VALUES(?,?,?,?,?)“; ps1 = conn.prepareStatement(sql) ; ps1.setString(1,start+end); ps1.setString(2,result1); ps1.setString(3,result2); ps1.setString(4,result3); ps1.setString(5,result4); ps1.executeUpdate(); 用户查询时若数据库中已有缓存

40、数据,则调用以下方法获取缓存的换乘数 据: 第 13 页 共 27 页 String sql1=“select * from zhuancheng where id=“+“+start+end+“; ps1 = conn.prepareStatement(sql1) ; rs1 = ps1.executeQuery() ; while(rs1.next() result1=rs1.getString(“result1“); result2=rs1.getString(“result2“); result3=rs1.getString(“result3“); result4=rs1.getStr

41、ing(“result4“); 4.1.34.1.3 业务逻辑类(业务逻辑类(Logic Class)的实现)的实现 (1)查询公交线路 该方法比较简单,通过“select * from businfo where busno=“+busno”即可 得到符合条件的公交车,同时返回用户需要的数据。 (2)按站查询经过的公交线路,步骤如下: 通过辅助类判断用户输入的站名或者附近标志名,并找到对应的公 交站名。 通过 Sql 语句找到经过该站的公交车,存放在一个集合中并返回。 (3)按起点终点查找乘坐方案 这是本系统中最复杂的一块,通过前面提到的基于站点优先级和邻接矩阵 的公交换乘算法和上下矩阵算法

42、来实现,具体实现方法如下: 通过 start=tool.getbusstop(start); end=tool.getbusstop(end);来确定起点和 终点的公交站名。 检验站名是否存在,存在则继续往下,不存在则返回提示信息。 若站名存在,则尝试从数据库中取得直达缓存信息,如数据库中没有 直达信息,则查找换乘信息。 若数据库中没有缓存,则开始查找有无直达线路,找到后把结果存入 数据库。 如果没有直达方案,则开始查找 1 次换乘方案,找到后按照经过站数 排序,站数少的排前面,由于换乘方案过多,故只返回前几条。 由于一次换乘结果可能成百上千,故只给用户前几条换乘方案进行选择,先将 全部换乘方

43、案按经过车站数进行排序,再取前 4 条返回给用户。 排序类为一个实现了 Serializable 和 Comparable 的工具类,具体排序方法在 compareTo 方法中实现,通过 compareTo(Object b)来定义如何排序,代码如下: 第 14 页 共 27 页 public int compareTo(Object b) SortBean sort=(SortBean)b; return (this.length-sort.length) ; 换乘得到结果后放入 Collection 中返回。 最后把找到的结果集写入到数据库缓存中。 tool.insertDB(start,

44、end,zhuanchengresult0,zhuanchengresult1,zhuanchengres ult2,zhuanchengresult3); 如果找不到一次换乘(这种情况非常渺茫) ,而用户又非常执着的要继续 找公交车,就不得不使用二次换乘,算法在 3.3 节已有说明,下面列出具体做 法: 首先查找出经过起点站和终点站的线路,再通过线路找到该站能直达的所 有站点,以起点站为例: Collection stop1bus=findbusnobystop(stop1);/经过stop1的公交车 Collection stop2bus=findbusnobystop(stop2);/经

45、过 stop2 的公交车 Iterator itr=stop1bus.iterator(); while(itr.hasNext() Iterator initr1=searchbusline(String)itr.next().iterator(); while(initr1.hasNext() String stopname=(String)initr1.next(); map1.put(stopname,“rubbish“); 这里使用 HashMap 的 KEY 作为存放站名的容器,因为从一个站台辐射出 去的公交线路经过的站点往往有重复,而 HashMap 在 KEY 重复的时候只是重

46、 新设置了 VALUE 值,KEY 值则无法重复插入,故选用 HashMap。 在分别找到起点和终点能直达的站点集合后,就开始进行循环查找,开始 检验起点能直达的站点中是否有能直达终点能直达站点的站点,如有,则证明 可以进行二次换乘。 Iterator key1= map1.keySet().iterator(); Iterator key2= map2.keySet().iterator(); while(key1.hasNext() while(key2.hasNext() if(zhida.isEmpty() String sop1=(String)key1.next(); 第 15 页

47、 共 27 页 String sop2=(String)key2.next(); zhida=zhida(sop1,sop2); /内层 break if(!zhida.isEmpty() System.out.println(“找到中途换乘“+zhida.size(); break; /外层 break if(!zhida.isEmpty() System.out.println(“break2“+zhida.size(); break; 找到一条可行的线路后,再开始查找起点到转乘点 1 的线路和转乘点 2 到 重点的线路,并放到一个 String 中: /第 1 站到第 2 站的车号 wh

48、ile(one2two.iterator().hasNext() System.out.println(“step3“); nonstop2=(Nonstop)one2two.iterator().next(); busno1+=nonstop2.getBusno()+“,“; /第 3 站到第 4 站的车号 while(three2four.iterator().hasNext() System.out.println(“step4“); nonstop3=(Nonstop)three2four.iterator().next(); busno2+=nonstop3.getBusno()+“

49、,“; 最后把起点到第一换乘站,第一换乘站到第二换乘站,第二换乘站到终点 站 3 段线路连接到一个 String 中并将改 String 添加到集合中,最后返回该集合: result=“从“+stop1+“站出发,乘坐“+busno1+“到“+huanchengstop1+“站转 “+nonstop.getBusno()+“到“+ 第 16 页 共 27 页 huanchengstop2+“站转“+busno2+“到“+stop2; twohg.add(result); System.out.println(“find one“); catch(Exception e) e.printStackTrace(); return twohg; 本算法采用了 3 个 bean 来保存 3 段路线的信息,每个 bean 中分别有 start,end,busno3 个属性,使得算法条理更加清晰化。 至此站站查询全部完成。 4.1.44.1.4 服务器对外接口(服务器对外接口(Servlet)的实现)的实现 本系统采用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1