毕业设计(论文)湖北公交查询系统的设计与实现

上传人:仙*** 文档编号:32462142 上传时间:2021-10-14 格式:DOC 页数:27 大小:473.52KB
收藏 版权申诉 举报 下载
毕业设计(论文)湖北公交查询系统的设计与实现_第1页
第1页 / 共27页
毕业设计(论文)湖北公交查询系统的设计与实现_第2页
第2页 / 共27页
毕业设计(论文)湖北公交查询系统的设计与实现_第3页
第3页 / 共27页
资源描述:

《毕业设计(论文)湖北公交查询系统的设计与实现》由会员分享,可在线阅读,更多相关《毕业设计(论文)湖北公交查询系统的设计与实现(27页珍藏版)》请在装配图网上搜索。

1、 湖北公交查询系统的设计与实现湖北公交查询系统的设计与实现摘摘 要要当今,人类社会已步入信息时代,信息化革命给所有领域带来了前所未有的变革。电脑、手机等信息工具的普及,人们获取信息变得更加完善、快捷。而随着信息技术的飞速发展,手机所蕴藏的无限商机,正在被人们逐步发掘,它不再仅仅局限于通信这一单一功能,正在朝着手提电脑甚至更完善的方向发展。由于手机价廉物美,它已成为人们获得在生活工作上等各种信息服务的最佳选择。在我国,随着城市化的快速发展,城市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,而手机公交查

2、询系统的选题也正是基于该背景。本系统通过对城市公交系统的调研,提出了基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法;以 J2ME 作为开发工具,将其移植到用户手机上,借助于无线互联网,能为客户随时随地提供公交信息的查询;通过测试与分析,证实了该系统的可行性及实用价值。关键词关键词:公交查询;站点优先级;公交换乘算法;手机;无线互联网 Design and Implementation of City-bus Information Inquiry System Based on J2MEAbstractAt present, the human society marches into

3、the information time; the information revolution has brought the unprecedented revolution for all domains. With the popularization 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 inform

4、ation technology, the infinite opportunity that the handset contains is being gradually excavated by the people, it no longer merely 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-qua

5、lity of the handset, it has become the best choice that the people obtain each kind of information service in life.In our country, 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,

6、 the complex city bus system causes the condition which the users often are confused, which brings many inconvenient to people, but 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 prior

7、ity and the next linking matrix” and “the Algorithm based on upward and downward matrix”. Secondly, these Algorithms are transplanted 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 anal

8、yzing, it confirms this system is some feasibility and practical value.Key words: City Bus Inquiry; Stand Priority; City Bus Exchanging Algorithm; Handset; Wireless Internet目目 录录论文总页数:27 页1引言.11.1课题背景.11.2国内外研究现状.11.3本课题研究的意义.21.4本软件的开发方法.21.5本文的主要工作.31.5.1研究的主要内容.31.5.2各章节的安排.32手机公交查询的需求分析和开发工具介绍.3

9、2.1用户的原始需求.32.2手机公交查询系统功能模块及流程图.42.3开发工具介绍.53手机公交查询系统的设计.53.1手机公交查询系统算法的设计.53.1.1直达的算法设计.53.1.2一次换乘的算法设计.63.1.3二次换乘的算法设计.73.2手机公交查询数据库的设计.73.2.1数据库的逻辑设计.73.2.2数据库的物理设计.84手机公交查询系统功能详细实现.104.1服务器端的实现.104.1.1基类(Base Class)的实现.114.1.2辅助类(Help Class)的实现.124.1.3业务逻辑类(Logic Class)的实现.134.1.4服务器对外接口(Servlet

10、)的实现 .164.2WEB 端的实现.164.3WAP 端的实现.184.4手机客户端的实现.204.4.1客户端界面的实现.204.4.2客户端工作原理.204.4.3手机网络设置.225手机公交查询系统测试与分析.225.1测试环境.225.2运行与测试.225.3测试结果.24结 论.24参考文献.25第 3 页 共 27 页1 引言引言1.1 课题背景课题背景作为关系国计民生的社会公益事业,城市公共交通一直都是政府工作的重点。就武汉市而言,调研数据显示,武汉市乘客以公交方式出行的比例为 23.36%,可见城市公交的重要性。但是从客观上说,公交硬件建设跟不上城市建设的步伐,是全国大城市

11、尤其是特大城市都正在遭遇的发展瓶颈。也常常造成人们的出行不便。在我国,随着城市化的快速发展,市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,在另一个方面,我国城市的手机普及率已经非常高了,如果能把这两种情况结合起来,开发出一种基于手机的公交查询软件,将会给用户带来便捷。1.2 国内外研究现状国内外研究现状从有关的文献看, 如今全世界可以支持 J2ME 的手持设备如今已经达到了七千五百万,有 34 个运营商在使用 J2ME 技术;传统手机在出厂之后,功能(通讯录、游戏、商务应用)就已经固化,用户将无法

12、删除无用的功能,同样也不能增加新的功能。即使用户找到提供新功能的程序,也往往由于程序和手机平台无法兼容而不能使用。这成为了手机行业发展的瓶颈,而 JAVA 在移动终端领域的出现改变了这一局面。JAVA 以其可移植性,资源重用性,安全性,移动性以及强大的网络功能迅速占领了全球手机市场,未来的手机出货将主要以 JAVA 手机为主。据美国高科技研究公司 Strategies Unlimited 日前发表的2.5G 和 3G 手机性能:2002-2006 全球分析与市场预测的报告称,市场上 Java 手机的数量预计将每年翻一番,到 2006 年将从 2001 年的 1,910 万部增长到 5.53 亿

13、部。硬件中加快集成 Java 预计将进一步促进 Java 在市场中的普及,J2ME 将成为事实上的标准。到 2006 年,Java 手机预计将占全部手机出货量的 83%。 就国内来说,JAVA 是未来无线数据服务的主流方向,也开始采用基于开放应用平台的移动增值服务架构。从 2003 年起,移动、联通均已开通无线JAVA 业务。JAVA 手机已经成为绝大多数用户选购手机时的必要考虑条件。在 J2ME 通信方面,MIDP1.0 支持 HTTP,MIDP2.0 则增加了对 HTTPS、报文、socket 通信以及串口通信的支持。另外,MIDP2.0 还支 持服务器 Push体系架构,这样,你的手机能

14、够收到来自服务器的报警、消息或者广播,根据要求启动手机上的应用程序进行操作。第 4 页 共 27 页支持 Over-the-air (OTA) Provisioning 是 MIDP2.0 的一个重要的新特点,它使得用户能够动态地部署和更新移动设备上的应用程序。新版的 MIDP 规范中规定了如何在移动设备上发现、安装、更新和删除 MIDlet 套件;同时,提供应用程序下载的服务提供商还能够判断该 MIDlet 套件是否能够运行在申请下载的设备上,并且从设备上获取安装、更新和删除的信息。MIDP OTA provisioning模型为移动服务提供商提供了单一、标准的部署 MIDP 应用程序的途径

15、。该模型已经被众多技术领先的移动设备制造商和服务提供商所采纳。J2ME 针对嵌入式和移动设备,提供了开发和运行应用程序的平台,随着新的规范的不断推出和众多制造商、软件开发商的支持,J2ME 正在飞速向前发展。JTWI 将保证 J2ME 应用程序在不同制造商的产品上的兼容性。今后J2ME 将借助 Web Services 的力量,真正成为企业级信息解决方案中不可或缺的一部分。1.3 本课题研究的意义本课题研究的意义在我国,随着城市化的快速发展,市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,在另一个方

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

17、,具备先天性无缝衔接的优势,故本系统采用 J2ME 和J2EE 结合的方式进行开发。通过 J2ME 和 J2EE 技术的结合,采用 C/S 模式和 B/S 模式共同存在的方式,服务器端采用 Mysql+Tomcat/Weblogic,通过 Servlet 实现对外服务器通信,同时前台开发出 WEB 模块和 WAP 模块,WEB 模块采用 MVC 模式,使用 Struts框架。手机客户端采用 J2ME 编程,使用线程技术实现和服务器的网络通信,并且在从服务器取得数据后自动断开连接,节约用户流量。第 5 页 共 27 页1.5本文的主要工作本文的主要工作1.5.11.5.1 研究的主要内容研究的主

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

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

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

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

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

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

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

25、新的 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 businfo” 获得全部公交线路信息,再把每一路车的信息依次迭代出

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

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

28、有公交车可以从 Collection1 中的站点直达 Collection2 中的站点,如果,则将方案存放到结果集合中。至此为止,根据公交线路设计的理论,是肯定可以找到二次换乘的方案的,故不再考虑 3 次换乘方案。二次换乘算法,如图 4 所示。3.2手机公交查询数据库的设计手机公交查询数据库的设计3.2.13.2.1 数据库的逻辑设计数据库的逻辑设计 图 5 数据库主要 E-R 图准确了解与分析用户需求(包括数据与处理)是整个设计过程的基础。而根据用户需求设计合适的数据库以及选择恰当的数据库以确保系统能高速稳定的运行则是数据库设计的根本目地。由于本系统涉及到大量数据的读取,并且对安全性要求不高

29、,故选用占用系统资源较少并且速度相对较快的 MySQL 作为本系统的数据库。通过对用户需求的分析以及对系统本身应用背景的研究,可以看出本系统需要有以下数据支持:公交线路信息,公交站点信息,站点附近标志信息,用户通知信息,同时考虑到节约系统资源,在用户进行完站站查询后还会产生一第 10 页 共 27页个存放查询结果的缓存信息。由上述可以确认该算法所关系到的数据表。根据上述分析,可以得出公交信息模型的 E-R 图,如图 5 所示。公交信息相关数据库的数据字典,如表 1 所示。表 1 公交信息相关的数据字典序 号数 据 项 名 称数 据 项 内 容1.公交线路信息公交线路的信息汇总1.1线路 ID公

30、交线路的 ID1.2线路 NO公交线路的名称,如 502A1.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附近标志 6 的名字2.8附近标志 7附近标志 7 的名字2.9附近标志 8附近标志 8 的名字2.10附近标志 9附近标志 9 的名字2.11附近标志 10附近标志 1

31、0 的名字3.站点附近标志汇总站点附近标志性建筑物或者地名的汇总3.1标志 ID标志编号3.2标志名称站点附近标志性建筑物或者地段的名称3.2.23.2.2 数据库的物理设计数据库的物理设计(1)公交线路信息表负责存放公交线路信息,考虑到部分公交车存在上行和下行不一致的情况,表中添加了是否上下行的字段,以供算法确认。如表 2 所示。表 2公交线路信息表 公交线路信息表(businfo)第 11 页 共 27页字段名注释Busid公交车的 idBusno公交车的车号stop1第 1 个站的站名stop2第 2 个站的站名stop50第 50 个站的站名Time公交车的发车收车时间Startend

32、公交车的起点和终点Updown是否有上下行(2) 站点信息表负责存放站点相关信息,并且存放一定的周围标志建筑和地名的信息,以供算法进行模糊查询。如表 3 所示。表 3站点信息表 站点信息表(stopinfo)字段名注释Stopname公交站站名near1附近标志 1near2附近标志 2near3附近标志 3near4附近标志 4near5附近标志 5near6附近标志 6near7附近标志 7near8附近标志 8near9附近标志 9near10附近标志 10Stoppic臃余字段,为以后功能预先留出(3) 站点附近标志汇总表负责存放站点周围标志建筑或地名的汇总信息,本表为站点信息表的 n

33、ear集合自动生成。如表 4 所示。第 12 页 共 27页表 4站点附近标志汇总表 站点附近标志汇总表(stopinfo)字段名注释Id标志的 idNearname标志的名字(4) 用户公告表负责存放本系统的公告信息。如表 5 所示。表 5用户公告表 用户公告表(notify)字段名注释Id消息的 idContent消息内容Date消息发布日期(5) 查询统计表负责统计用户查询和下载量。如表 6 所示。表 6 查询统计表 查询统计表(jishuqi)字段名注释IdidFangwen查询量Xiazai客户端下载量4手机公交查询系统功能手机公交查询系统功能详细实现详细实现经过上面的描述,已经明确

34、了手机公交查询系统需要实现的功能以及如何去完成这些功能。下面将具体的阐述如何实现这些功能。4.1 服务器端的实现服务器端的实现本系统遵照 J2EE 3、4 层结构,使用了 MVC、AO 等设计模式,组织结构图如图 6 所示。第 13 页 共 27页图 6 系统组织结构图4.1.14.1.1 基类(基类(Base Class)的实现)的实现采用 AO 模式,将数据库相关方法封装到一个基类中,由业务逻辑继承该基类。数据库连接(Connection)通过配置 WEB 服务器上的连接池,同时将数据源绑定到 JNDI,程序直接通过 JNDI Name 获取,实现了数据源的可配置性和高度可移植性。获取 J

35、NDI Name 方法如下: Javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(dsName) ; /从数据源得到连接 conn = ds.getConnection() ; 因为后面需要多次调用关闭数据库连接,故关闭连接封装到一个方法中,具体实现如下: /关闭数据库连接第 14 页 共 27页public void close(ResultSet rs,PreparedStatement ps,Connection con) try if(rs!=null) rs.close(); if(ps!=null) ps.clos

36、e(); if(con!=null) con.close(); catch(Exception e) e.printStackTrace(); 4.1.24.1.2 辅助类(辅助类(Help Class)的实现)的实现辅助类主要为业务类提供一些辅助功能,尽量实现功能的分离和高度封装。同时为了加快运行速度,减少 JVM 编译负担,采用 PreparedStatement。部分方法如下:(1)获得公交总数一般查找总数用”select count(*) from businfo”,但这样因为是顺序遍历,一直要遍历到最后一条,效率不高,此处使用 sqlRst.last();使游标直接指向最后一条记录,

37、再用 buscount = sqlRst.getRow();记录最后一条记录的行号,从而得到了总行数,比起前一个方法更快而且节约系统资源。(2)插入数据库缓存,使得下一个用户查询该方案时可以直接从数据库中获取结果,从而大大的节约了用户时间和系统资源。实现方法如下: String sql=insert into zhuancheng(id,result1,result2,result3,result4) VALUES(?,?,?,?,?); ps1 = conn.prepareStatement(sql) ; ps1.setString(1,start+end); ps1.setString(2

38、,result1); ps1.setString(3,result2); ps1.setString(4,result3); ps1.setString(5,result4); ps1.executeUpdate();用户查询时若数据库中已有缓存数据,则调用以下方法获取缓存的换乘数据:第 15 页 共 27页 String sql1=select * from zhuancheng where id=+start+end+; ps1 = conn.prepareStatement(sql1) ; rs1 = ps1.executeQuery() ; while(rs1.next() resul

39、t1=rs1.getString(result1); result2=rs1.getString(result2); result3=rs1.getString(result3); result4=rs1.getString(result4);4.1.34.1.3 业务逻辑类(业务逻辑类(Logic Class)的实现)的实现(1)查询公交线路该方法比较简单,通过“select * from businfo where busno=+busno”即可得到符合条件的公交车,同时返回用户需要的数据。(2)按站查询经过的公交线路,步骤如下: 通过辅助类判断用户输入的站名或者附近标志名,并找到对应的公

40、交站名。 通过 Sql 语句找到经过该站的公交车,存放在一个集合中并返回。(3)按起点终点查找乘坐方案这是本系统中最复杂的一块,通过前面提到的基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法来实现,具体实现方法如下: 通过 start=tool.getbusstop(start); end=tool.getbusstop(end);来确定起点和终点的公交站名。 检验站名是否存在,存在则继续往下,不存在则返回提示信息。 若站名存在,则尝试从数据库中取得直达缓存信息,如数据库中没有直达信息,则查找换乘信息。 若数据库中没有缓存,则开始查找有无直达线路,找到后把结果存入数据库。 如果没有直达方案

41、,则开始查找 1 次换乘方案,找到后按照经过站数排序,站数少的排前面,由于换乘方案过多,故只返回前几条。由于一次换乘结果可能成百上千,故只给用户前几条换乘方案进行选择,先将全部换乘方案按经过车站数进行排序,再取前 4 条返回给用户。排序类为一个实现了 Serializable 和 Comparable 的工具类,具体排序方法在compareTo 方法中实现,通过 compareTo(Object b)来定义如何排序,代码如下:第 16 页 共 27页 public int compareTo(Object b) SortBean sort=(SortBean)b; return (this.l

42、ength-sort.length) ; 换乘得到结果后放入 Collection 中返回。最后把找到的结果集写入到数据库缓存中。tool.insertDB(start,end,zhuanchengresult0,zhuanchengresult1,zhuanchengresult2,zhuanchengresult3);如果找不到一次换乘(这种情况非常渺茫) ,而用户又非常执着的要继续找公交车,就不得不使用二次换乘,算法在 3.3 节已有说明,下面列出具体做法:首先查找出经过起点站和终点站的线路,再通过线路找到该站能直达的所有站点,以起点站为例: Collection stop1bus=fi

43、ndbusnobystop(stop1);/经过stop1的公交车 Collection stop2bus=findbusnobystop(stop2);/经过 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);这里使用 Has

44、hMap 的 KEY 作为存放站名的容器,因为从一个站台辐射出去的公交线路经过的站点往往有重复,而 HashMap 在 KEY 重复的时候只是重新设置了 VALUE 值,KEY 值则无法重复插入,故选用 HashMap。在分别找到起点和终点能直达的站点集合后,就开始进行循环查找,开始检验起点能直达的站点中是否有能直达终点能直达站点的站点,如有,则证明可以进行二次换乘。 Iterator key1= map1.keySet().iterator(); Iterator key2= map2.keySet().iterator(); while(key1.hasNext() while(key2.

45、hasNext() if(zhida.isEmpty() String sop1=(String)key1.next();第 17 页 共 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; 找到一条可行的线路后,再开始查

46、找起点到转乘点 1 的线路和转乘点 2 到重点的线路,并放到一个 String 中:/第 1 站到第 2 站的车号 while(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)three

47、2four.iterator().next(); busno2+=nonstop3.getBusno()+,; 最后把起点到第一换乘站,第一换乘站到第二换乘站,第二换乘站到终点站 3 段线路连接到一个 String 中并将改 String 添加到集合中,最后返回该集合: result=从+stop1+站出发,乘坐+busno1+到+huanchengstop1+站转+nonstop.getBusno()+到+第 18 页 共 27页 huanchengstop2+站转+busno2+到+stop2; twohg.add(result); System.out.println(find one)

48、; catch(Exception e) e.printStackTrace(); return twohg;本算法采用了 3 个 bean 来保存 3 段路线的信息,每个 bean 中分别有start,end,busno3 个属性,使得算法条理更加清晰化。至此站站查询全部完成。4.1.44.1.4 服务器对外接口(服务器对外接口(Servlet)的实现)的实现本系统采用 Servlet 作为和手机通讯的接口,采用 HTTP 的应答机制,免去了自己写应答的麻烦,系统在执行了一次查询后在服务器的 LOG 中记录一次,同时数据库中负责记录查询次数的计数器加 1。发送信息关键代码如下: respon

49、se.setContentType(CONTENT_TYPE); DataOutputStream dos = new DataOutputStream(response.getOutputStream(); Iterator itr=coll.iterator() ; while (itr.hasNext() result = result+(String) itr.next() ; result+=n+tool.getmessage(); dos.writeUTF(result); dos.close();有过开发经验的人都知道,在做 JAVA 开发时传输中文常常遇到乱码现象,这里我在 C

50、ONTENT_TYPE 里面编码方式设置成 GB2312,并且在客户端发送数据时也把编码设置成 GB2312,同时采用 writeUTF 方法,成功解决中文问题。4.2 Web 端的实现端的实现本系统 Web 端采用 Struts 框架,严格遵循 MVC 模式,用户提交信息后先放到 FormBean 中暂存,然后在 Action 中实现业务方法的调用,实现代码的高度封装性和分离性。本系统只采用了一个 Action 作为中央控制器,通过参数关键字判断是那种查询,同时查询页面和结果页面为同一页面,在 Action 中查询第 19 页 共 27页完毕后统一放入 Collection 中传递到结果页面

51、中,使得页面重用性大大提高。首页显示图 7 所示。图 7 首页图样查询页面显示如图 8 所示。图 8 查询页面Action 作为中央控制器负责执行判断用户输入和查询,以线路查询为例,核心代码如下:判断用户提交内容:/如果用户按公交车号查询 if (busno != null) try busnoresult = dealbus.searchbusline(busno) ;第 20 页 共 27页 httpServletRequest.setAttribute(buslineresult , busnoresult) ; dealActionForm.setBusno(null); busno=

52、null; result=null;/返回“buslineresult”对应的页面,具体配置在struts-configure里面设置 return (actionMapping.findForward(buslineresult) ; catch (Exception e) /将错误信息放到request中传递到错误页面 httpServletRequest.setAttribute(errorMsg, e.getMessage(); e.printStackTrace() ; return (actionMapping.findForward(error) ; 4.3 WAP 端的实现端的

53、实现WAP 端采用 WML(Wireless Markup Language - 无线标记语言)编写,无限标记语言 WML(Wireless Markup Language)是一种基于扩展标记语言XML(Extension Markup Language)的语言,是 XML 的子集。它可以显示各种文字、图像等数据,是由 WAP 论坛(http:/www.wapforum.org)提出并专为无线设备用户提供交互界面而设计的,目前版本为 1.1 版。这些无线设备包括移动电话,呼机和个人数字助理 PDA(Personal Digital Assistants)等。WAP 模块主要有首页,功能选择页面

54、,线路查询页面,站站查询页面等组成,部分页面显示如下:功能选择页面,让用户选择使用哪种方式进行查询,如图 9 所示。图 9 功能选择页面客户端下载页面,有 JAR 和 JAD 可供选择,以兼容支持不同的手机,如图第 21 页 共 27页10 所示。图 10 客户端下载页面详细原理以线路查询为例,线路查询提交代码如下: 其中$(busno:n)为变量的表示方法,:n 的意思为变量中没有 ESCAPE 字符,即不需要进行 ESCAPE 八进制转码。服务器端处理代码(selectNumber.jsp)如下:if(busno!=null)try tool.fangwen();/用户查询计数器加1 De

55、albus dealbus=new Dealbus(); coll =dealbus.searchbusline(busno);/调用业务处理方法 Iterator itr=coll.iterator() ; /将结果输出到一个String中 while (itr.hasNext() result = result+(String) itr.next() ; 然后将结果显示在用户手机上:第 22 页 共 27页返回返回首页4.4 手机客户端的实现手机客户端的实现4.4.14.4.1 客户端界面的实现客户端界面的实现4.4.24.4.2 客户端工作原理客户端工作原理4.4.34.4.3 手机手机

56、网络设置网络设置这里需要提到网络设置问题,因为中国移动设置了 2 个网络接入点CMNET 和 CMWAP,以 NOKIA 为代表的手机往往默认接入点是 CMNET,而摩托罗拉之类的手机的默认接入点常常是 CMWAP,所以本系统添加了网络设置这个选项,以便让用户选择自己的网络情况,如果用户不清楚,也可以在查询出错时看到提示。5手机公交查询系统测试与分析手机公交查询系统测试与分析5.1 测试环境测试环境本系统测试环境:CPU P42.8G2,内存 DDR400 1G,MySQL5.0,TOMCAT5.016/Weblogic8.0,在 WIN2000/XP 下均测试通过.建议用户在 CPU P4,

57、内存 1G 及以上,数据库版本 MySQL5.0 以上,WIN2000PRO/XP,2003,WIN2000 SERVER 及以上软硬件平台使用.5.2 运行与测试运行与测试以线路查询为例,对手机公交查询系统测试如下:(1)进入手机客户端主界面,客户端用户界面显示如图 11 所示。第 23 页 共 27页图 11 手机客户端主界面(2)进入线路查询界面,如图 12 所示。图 12 线路查询界面(3)查询结果界面显示图 13 所示。图 13 线路查询结果界面第 24 页 共 27页5.3 测试结果测试结果本系统采用白盒和黑盒测试相结合的方法,非开发人员(测试用户)随意进行查询,开发人员跟踪服务器

58、 LOG,观察 Exception 出错信息,并做出判断,经过一个月的测试,发现问题和解决方法总结如下:(1)最开始使用 EJB+Weblogic,用户反映查询换乘速度太慢。由于 EJB是基于 RMI 即远程调用机制,对于大量数据的取出会造成系统速度变慢,严重会造成数据库链接超时。解决方法:换成 JDBC 直连,并且使用连接池。(2)环城公交问题:如 27 路是从三官堂出发,终点站也在三官堂,而且为单向行驶,如磨子桥到电子科大就无法直达,但按照系统算法仍然会显示可以直达,需要特殊处理。解决方法:将成都市唯一两路环城公交车 27 路和 34 路独立出来,单独处理。(3)手机网络问题:由于移动 G

59、PRS 接入点分 CMWAP 和 CMNET 2 个接入点,不同的手机有不同的设置,单一连接模式可能会造成一款手机可以上网而另一个品牌则不行。解决方法:手机客户端上增加网络设置功能。最终经过详细功能测试和代码修正后,本系统结果能够达到预期功能。证实了该系统的可行性及实用价值,不足之处在于由于目前手机上网仍比较昂贵,用户无法承担大流量,故无法实现远程地图定位功能.结结 论论本毕业设计采用 B/S 和 C/S 相结合的结构,综合运用以前所学的专业知识,设计开发了一个功能较完善的基于手机的公交查询系统,并且提出了基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法。经过测试,本系统达到了预期的目标,

60、实现了线路查询,站站查询等功能,同时在真实无线互联网中运行也表现出良好的性能。通过对基于 J2ME 的手机公交查询系统的开发,本人对 J2EE 和 J2ME 都有了更深入的了解,同时对手机无线网络有了更深刻的理解。在把以前学的理论运用到实践的过程中,才发现实际开发经验的重要性,特别是通过这次项目的开发,我意识到了自己的很多不足,比如在项目版本管理上就出现过混乱情况,同时对设计模式的应用还不够熟练,总的来讲,我的思想已经完成了从“怎么做出软件”到“怎么做好软件”的转变。这对以后的专业发展是极其重要的。在现在城市公交系统及其繁琐的情况下,通过技术手段解决人们的难题是第 25 页 共 27页当前手机

61、技术的趋势,而且目前手机无线互联网正在高速发展,日益低廉的上网费用使得越来越多的用户加入到手机互联网使用者的行列中。对手机而言,在 JAVA 手机迅猛发展的大环境下,适时的推出这个手机公交查询系统无疑会对人们的出行和出差产生极大的帮助。在技术方面,J2ME 手机游戏早已风靡世界,而随着手机功能的不断完善,手机应用程序的价值也在不断扩大,对 JAVA 而言,J2EE 和 J2ME 结合将是未来手机商务领域的趋势,如手机企业管理系统等都可以实现。手机网络资源以其丰富的信息容量、良好的人机交互界面、随时随地的信息获取,极大地满足了人们日益增长的咨询需求。业界的不断普及和技术的不断进步下,手机电子资源必将在人们的生活工作学习中发挥更大的作用。参考文献参考文献1 Ted Husted 著Struts in ActionM美国亚马逊出版社2005.52 耿祥义著JSP 实用教程M北京清华大学出版社2004.13 Erich Gamma 著设计模式M北京机械工业出版社2005.124 耿祥义著JAVA2 实用教程M北京清华大学出版社2004.15 林胜利著精通 J2ME 无线编程M 北京中国铁道出版社2004.11 6 阮文江等著JavaScript 程序设计基础教程M 北京人民邮电出版社2005.17 张文建等著JSP 案例开发M 北京中国水利水电出版社2005.1

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!