《毕业设计论文湖北公交查询系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计论文湖北公交查询系统的设计与实现.doc(27页珍藏版)》请在三一办公上搜索。
1、湖北公交查询系统的设计与实现摘 要当今,人类社会已步入信息时代,信息化革命给所有领域带来了前所未有的变革。电脑、手机等信息工具的普及,人们获取信息变得更加完善、快捷。而随着信息技术的飞速发展,手机所蕴藏的无限商机,正在被人们逐步发掘,它不再仅仅局限于通信这一单一功能,正在朝着手提电脑甚至更完善的方向发展。由于手机价廉物美,它已成为人们获得在生活工作上等各种信息服务的最佳选择。在我国,随着城市化的快速发展,城市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,而手机公交查询系统的选题也正是基于该背景。本系
2、统通过对城市公交系统的调研,提出了基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法;以J2ME作为开发工具,将其移植到用户手机上,借助于无线互联网,能为客户随时随地提供公交信息的查询;通过测试与分析,证实了该系统的可行性及实用价值。关键词:公交查询;站点优先级;公交换乘算法;手机;无线互联网Design and Implementation of City-bus Information Inquiry System Based on J2MEAbstractAt present, the human society marches into the information time; t
3、he 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 information technology, the i
4、nfinite 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-quality of the handset, it
5、 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, the complex city bus s
6、ystem 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 priority and the next linkin
7、g 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 analyzing, it confirms this
8、 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手机公交查询的需求分析和开发工具介绍32.1用户的原始需求32.2手机公交查询系统功能模块及流程图42.3开
9、发工具介绍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)的实现164.2WEB端的实现164.3WAP端的实现184.4手机客户端的实现204.4.1客户端
10、界面的实现204.4.2客户端工作原理204.4.3手机网络设置225手机公交查询系统测试与分析225.1测试环境225.2运行与测试225.3测试结果24结 论24参考文献251 引言1.1 课题背景作为关系国计民生的社会公益事业,城市公共交通一直都是政府工作的重点。就武汉市而言,调研数据显示,武汉市乘客以公交方式出行的比例为23.36%,可见城市公交的重要性。但是从客观上说,公交硬件建设跟不上城市建设的步伐,是全国大城市尤其是特大城市都正在遭遇的发展瓶颈。也常常造成人们的出行不便。在我国,随着城市化的快速发展,市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前
11、,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,在另一个方面,我国城市的手机普及率已经非常高了,如果能把这两种情况结合起来,开发出一种基于手机的公交查询软件,将会给用户带来便捷。1.2 国内外研究现状从有关的文献看, 如今全世界可以支持J2ME的手持设备如今已经达到了七千五百万,有34个运营商在使用J2ME技术;传统手机在出厂之后,功能(通讯录、游戏、商务应用)就已经固化,用户将无法删除无用的功能,同样也不能增加新的功能。即使用户找到提供新功能的程序,也往往由于程序和手机平台无法兼容而不能使用。这成为了手机行业发展的瓶颈,而JAVA在移动终端领域的出现改变了这一局面。JAVA以
12、其可移植性,资源重用性,安全性,移动性以及强大的网络功能迅速占领了全球手机市场,未来的手机出货将主要以JAVA手机为主。据美国高科技研究公司Strategies Unlimited日前发表的2.5G和3G手机性能:2002-2006全球分析与市场预测的报告称,市场上Java手机的数量预计将每年翻一番,到2006年将从2001年的1,910万部增长到5.53亿部。硬件中加快集成Java预计将进一步促进Java在市场中的普及,J2ME将成为事实上的标准。到2006年,Java手机预计将占全部手机出货量的83%。 就国内来说,JAVA是未来无线数据服务的主流方向,也开始采用基于开放应用平台的移动增值
13、服务架构。从2003年起,移动、联通均已开通无线JAVA业务。JAVA手机已经成为绝大多数用户选购手机时的必要考虑条件。在J2ME通信方面,MIDP1.0支持HTTP,MIDP2.0则增加了对HTTPS、报文、socket通信以及串口通信的支持。另外,MIDP2.0还支 持服务器Push体系架构,这样,你的手机能够收到来自服务器的报警、消息或者广播,根据要求启动手机上的应用程序进行操作。支持Over-the-air (OTA) Provisioning是MIDP2.0的一个重要的新特点,它使得用户能够动态地部署和更新移动设备上的应用程序。新版的MIDP规范中规定了如何在移动设备上发现、安装、更
14、新和删除MIDlet套件;同时,提供应用程序下载的服务提供商还能够判断该MIDlet套件是否能够运行在申请下载的设备上,并且从设备上获取安装、更新和删除的信息。MIDP OTA provisioning模型为移动服务提供商提供了单一、标准的部署MIDP应用程序的途径。该模型已经被众多技术领先的移动设备制造商和服务提供商所采纳。J2ME针对嵌入式和移动设备,提供了开发和运行应用程序的平台,随着新的规范的不断推出和众多制造商、软件开发商的支持,J2ME正在飞速向前发展。JTWI将保证J2ME应用程序在不同制造商的产品上的兼容性。今后J2ME将借助Web Services的力量,真正成为企业级信息解
15、决方案中不可或缺的一部分。1.3 本课题研究的意义在我国,随着城市化的快速发展,市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,在另一个方面,我国城市的手机普及率已经非常高了,如果能把这两种情况结合起来,开发出一种基于手机的公交查询软件,将会给用户带来便捷。基于以上原因,本系统通过对城市公交系统的调研,提出了基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法;以J2ME作为开发工具,将其移植到用户手机上,借助于无线互联网,能为客户随时随地提供公交信息的查询。1.4 本软件的开发方法由于公交数据相对
16、比较庞大和繁琐,同时设计换乘时对系统处理的性能要求也比较高,故本系统采用在服务器上进行计算,结果通过无线网络传输到客户端的形式进行开发。又由于当前绝大多数手机都支持JAVA,而J2EE和J2ME因为同出一门,具备先天性无缝衔接的优势,故本系统采用J2ME和J2EE结合的方式进行开发。通过J2ME和J2EE技术的结合,采用C/S模式和B/S模式共同存在的方式,服务器端采用Mysql+Tomcat/Weblogic,通过Servlet实现对外服务器通信,同时前台开发出WEB 模块和WAP模块,WEB模块采用MVC模式,使用Struts框架。手机客户端采用J2ME编程,使用线程技术实现和服务器的网络
17、通信,并且在从服务器取得数据后自动断开连接,节约用户流量。1.5 本文的主要工作1.5.1 研究的主要内容本设计采用B/S和C/S结合的结构,综合运用以前所学的专业知识,设计开发一个功能较完善的基于手机的公交查询系统,具体包括以下内容:(1)研究并掌握TCP/IP等传输协议、数据库操作等的基本原理。(2)学习并掌握J2EE,J2ME等相关知识。(3)以前面的研究为基础,编程实现服务器及手机客户端线路查询,按站查询,站站查询并且实现手机无线网络通信等功能。1.5.2 各章节的安排本文章详细介绍了该系统的分析和实现各个流程。在文章的引言中,主要介绍了该系统面临的背景,研究意义和开发方法等,使读者对
18、本文有全面的了解。在接下来的第二章里,对系统的需求分析和与之对应的开发工具介绍。在第三章里,对系统开发涉及的算法进行了介绍和对数据库设计给出了详细的说明。第四章是系统功能具体实现的介绍其中包括了关键的编程技术,功能的代码说明。第五章是对系统的测试和分析,包括代码测试和功能测试,并对测试分析总结。最后,是作者通过对本系统的研究和设计总结出的系统特点以及研究心得。2 手机公交查询的需求分析和开发工具介绍2.1 用户的原始需求作为关系国计民生的社会公益事业,城市公共交通一直都是政府工作的重点。就武汉市而言,调研结果中的另一个数据,武汉市乘客以公交方式出行的比例为23.36%,可见城市公交的重要性。但
19、是从客观上说,公交硬件建设跟不上城市建设的步伐,是全国大城市尤其是特大城市都正在遭遇的发展瓶颈。也常常造成人们的出行不便。本系统通过对城市公交查询用户需求的调研,发现用户在查找公交信息的时候一般只有3种方式,即按线路进行查找,按站进行查找线路,按起点站和终点站查找乘坐方案。同时由于城市公交系统在规划的时候是以站作为单位进行规划的,故经过站数的多少直接决定了公交线路的长短和时间。因此,在本系统的设计中提出以下方案:用户在使用本系统的时候,可以按照线路进行公交查询,或者按起点终点进行查询,系统自动按照换乘筛选算法提供出最佳换乘方案,该算法根据用户输入的站名,查找全部可以直达的方案,如无直达方案,则
20、找出全部换乘方案并按照站点优先级进行排序,返回给用户线路最短的前N条的换乘信息,如果用户使用按站查询线路,系统也提供了一定的模糊查询,比如用户查询“百脑汇”,系统能自动辨认出当地站点“磨子桥”。同时,用户在手机上可以通过J2ME手机客户端和WAP的方式进行查询,在电脑上可以通过访问WEB站点的方式进行查询。2.2 手机公交查询系统功能模块及流程图通过对需求分析的调研,得出了经过用户确认的手机公交查询系统的系统逻辑模型。根据手机公交查询系统的业务流程图,明确了整个系统的流程。(1)WEB和WAP功能模块,如图1所示。图1 WEB和WAP功能模块图图2 手机客户端流程图(2)J2ME手机客户端的系
21、统流程图,如图2所示。用户查询流程分为查询内容选择、查询信息输入和信息接收3个步骤。从该流程图中可以看出,按起点终点查询是整个系统最重要的一部分,也是本系统最能体现算法的一部分,经过对成都公交系统的观察和分析,本系统提出了一次换乘时采用基于站点优先级和邻接矩阵的公交换乘算法,如果第一次换乘没有可以换乘的方案,则采用上下矩阵算法,得出二次换乘信息,同时把得到的方案缓存到数据库中,下个用户查询相同起点终点时就直接从数据库中提取缓存信息,大大的节约了用户的时间和系统资源。2.3 开发工具介绍JAVA语言是目前Internet上大型的WEB应用和手机程序开发时使用得最热门的编程语言,而目前国内销售的大
22、多数手机都支持JAVA,同时J2ME和J2EE因为都是基于JAVA技术,可以进行无缝连接,所以本系统选用J2ME和J2EE做为开发语言,同时在WEB端应用相关的Struts框架,并完成一个基于这2种技术结合的手机无线公交查询系统。本系统采用的开发工具为MySQL+Eclipse+Tomcat/Weblogic,MySQL是一个广受Linux社区人们喜爱的半商业的数据库。MySQL具有强大且简单易用的特点,而且运行速度极快,能够处理企业数据库绝大多数的应用需求。Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环
23、境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。Tomcat服务器是一个免费的开放源代码的Web应用服务器,它是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat5支持最新的Servlet2.4和JSP2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并
24、得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。3 手机公交查询系统的设计3.1 手机公交查询系统算法的设计3.1.1 直达的算法设计现有A,B两个公交站,通过数据库查询语句“select * from businfo” 获得全部公交线路信息,再把每一路车的信息依次迭代出来,判断A站和B站是否同时在该线路中,如结果为true,则可以直达,同时将直达方案存入一个集合中,继续向下遍历,如果结果为false,则该车不能直达,继续向下遍历。3.1.2 一次换乘的算法设计一次换乘采用基于站点优先级和邻接矩阵的公交换乘算法,现在A,B两个公交站,通过数据库查询语句查找出经过A站的所有公交车
25、集合Collection1,再通过数据库查询语句查找出经过B站的所有公交车集合Collection2,判断Collection1和Collection2是否有交集,若有,则得到一次换乘方案,存放在结果集合中。判断结束后,再按照经过站点总数对换乘方案进行排序,因为换乘结果往往数以百计,所以只取结果集的前N条记录展现给用户。若判断结束后没有找到一次换乘的方案,则执行2次换乘算法。一次换乘算法,如图3所示。图3 一次换乘算法示意图图4 二次换乘算法示意图3.1.3 二次换乘的算法设计二次换乘采用上下矩阵算法,现有A,B两个公交站,先通过数据库查询语句和程序业务逻辑得到A站能直达的所有站点,放在集合C
26、ollection1中,再按照A站的方法找出B站能知道的所有站点,放在集合Collection2中,再判断是否有公交车可以从Collection1中的站点直达Collection2中的站点,如果,则将方案存放到结果集合中。至此为止,根据公交线路设计的理论,是肯定可以找到二次换乘的方案的,故不再考虑3次换乘方案。二次换乘算法,如图4所示。3.2 手机公交查询数据库的设计3.2.1 数据库的逻辑设计 图5 数据库主要E-R图准确了解与分析用户需求(包括数据与处理)是整个设计过程的基础。而根据用户需求设计合适的数据库以及选择恰当的数据库以确保系统能高速稳定的运行则是数据库设计的根本目地。由于本系统涉
27、及到大量数据的读取,并且对安全性要求不高,故选用占用系统资源较少并且速度相对较快的MySQL作为本系统的数据库。通过对用户需求的分析以及对系统本身应用背景的研究,可以看出本系统需要有以下数据支持:公交线路信息,公交站点信息,站点附近标志信息,用户通知信息,同时考虑到节约系统资源,在用户进行完站站查询后还会产生一个存放查询结果的缓存信息。由上述可以确认该算法所关系到的数据表。根据上述分析,可以得出公交信息模型的E-R图,如图5所示。公交信息相关数据库的数据字典,如表1所示。表1 公交信息相关的数据字典序 号数 据 项 名 称数 据 项 内 容1.公交线路信息公交线路的信息汇总1.1线路ID公交线
28、路的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附近标志10的名字3.站点附近标志汇总站点附近标志性建筑物或者地名的汇总3.1
29、标志ID标志编号3.2标志名称站点附近标志性建筑物或者地段的名称3.2.2 数据库的物理设计(1)公交线路信息表负责存放公交线路信息,考虑到部分公交车存在上行和下行不一致的情况,表中添加了是否上下行的字段,以供算法确认。如表2所示。表2公交线路信息表 公交线路信息表(businfo)字段名注释Busid公交车的idBusno公交车的车号stop1第1个站的站名stop2第2个站的站名stop50第50个站的站名Time公交车的发车收车时间Startend公交车的起点和终点Updown是否有上下行(2) 站点信息表负责存放站点相关信息,并且存放一定的周围标志建筑和地名的信息,以供算法进行模糊查询
30、。如表3所示。表3站点信息表 站点信息表(stopinfo)字段名注释Stopname公交站站名near1附近标志1near2附近标志2near3附近标志3near4附近标志4near5附近标志5near6附近标志6near7附近标志7near8附近标志8near9附近标志9near10附近标志10Stoppic臃余字段,为以后功能预先留出(3) 站点附近标志汇总表负责存放站点周围标志建筑或地名的汇总信息,本表为站点信息表的near集合自动生成。如表4所示。表4站点附近标志汇总表 站点附近标志汇总表(stopinfo)字段名注释Id标志的idNearname标志的名字(4) 用户公告表负责存放
31、本系统的公告信息。如表5所示。表5用户公告表 用户公告表(notify)字段名注释Id消息的idContent消息内容Date消息发布日期(5) 查询统计表负责统计用户查询和下载量。如表6所示。表6查询统计表 查询统计表(jishuqi)字段名注释IdidFangwen查询量Xiazai客户端下载量4 手机公交查询系统功能详细实现经过上面的描述,已经明确了手机公交查询系统需要实现的功能以及如何去完成这些功能。下面将具体的阐述如何实现这些功能。4.1 服务器端的实现本系统遵照J2EE 3、4层结构,使用了MVC、AO等设计模式,组织结构图如图6所示。图6 系统组织结构图4.1.1 基类(Base
32、 Class)的实现采用AO模式,将数据库相关方法封装到一个基类中,由业务逻辑继承该基类。数据库连接(Connection)通过配置WEB服务器上的连接池,同时将数据源绑定到JNDI,程序直接通过JNDI Name获取,实现了数据源的可配置性和高度可移植性。获取JNDI Name方法如下: Javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(dsName) ; /从数据源得到连接 conn = ds.getConnection() ; 因为后面需要多次调用关闭数据库连接,故关闭连接封装到一个方法中,具体实现如下: /关闭数据库
33、连接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.2 辅助类(Help Class)的实现辅助类主要为业务类提供一些辅助功能,尽量实现功能的分离和高度封装。同时为了加快运行速度,减少JVM编译负担,采用PreparedStatement。部分方法如下:(1)获
34、得公交总数一般查找总数用”select count(*) from businfo”,但这样因为是顺序遍历,一直要遍历到最后一条,效率不高,此处使用sqlRst.last();使游标直接指向最后一条记录,再用buscount = sqlRst.getRow();记录最后一条记录的行号,从而得到了总行数,比起前一个方法更快而且节约系统资源。(2)插入数据库缓存,使得下一个用户查询该方案时可以直接从数据库中获取结果,从而大大的节约了用户时间和系统资源。实现方法如下: String sql=insert into zhuancheng(id,result1,result2,result3,resul
35、t4) 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();用户查询时若数据库中已有缓存数据,则调用以下方法获取缓存的换乘数据: String sql1=select * from zhuancheng where id=+start+en
36、d+; ps1 = conn.prepareStatement(sql1) ; rs1 = ps1.executeQuery() ; while(rs1.next() result1=rs1.getString(result1); result2=rs1.getString(result2); result3=rs1.getString(result3); result4=rs1.getString(result4);4.1.3 业务逻辑类(Logic Class)的实现(1)查询公交线路该方法比较简单,通过“select * from businfo where busno=+busno”即
37、可得到符合条件的公交车,同时返回用户需要的数据。(2)按站查询经过的公交线路,步骤如下: 通过辅助类判断用户输入的站名或者附近标志名,并找到对应的公交站名。 通过Sql语句找到经过该站的公交车,存放在一个集合中并返回。(3)按起点终点查找乘坐方案这是本系统中最复杂的一块,通过前面提到的基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法来实现,具体实现方法如下: 通过 start=tool.getbusstop(start); end=tool.getbusstop(end);来确定起点和终点的公交站名。 检验站名是否存在,存在则继续往下,不存在则返回提示信息。 若站名存在,则尝试从数据库中取
38、得直达缓存信息,如数据库中没有直达信息,则查找换乘信息。 若数据库中没有缓存,则开始查找有无直达线路,找到后把结果存入数据库。 如果没有直达方案,则开始查找1次换乘方案,找到后按照经过站数排序,站数少的排前面,由于换乘方案过多,故只返回前几条。由于一次换乘结果可能成百上千,故只给用户前几条换乘方案进行选择,先将全部换乘方案按经过车站数进行排序,再取前4条返回给用户。排序类为一个实现了Serializable和Comparable的工具类,具体排序方法在compareTo方法中实现,通过compareTo(Object b)来定义如何排序,代码如下: public int compareTo(O
39、bject b) SortBean sort=(SortBean)b; return (this.length-sort.length) ; 换乘得到结果后放入Collection中返回。最后把找到的结果集写入到数据库缓存中。tool.insertDB(start,end,zhuanchengresult0,zhuanchengresult1,zhuanchengresult2,zhuanchengresult3);如果找不到一次换乘(这种情况非常渺茫),而用户又非常执着的要继续找公交车,就不得不使用二次换乘,算法在3.3节已有说明,下面列出具体做法:首先查找出经过起点站和终点站的线路,再通过
40、线路找到该站能直达的所有站点,以起点站为例: Collection stop1bus=findbusnobystop(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.
41、next(); map1.put(stopname,rubbish);这里使用HashMap的KEY作为存放站名的容器,因为从一个站台辐射出去的公交线路经过的站点往往有重复,而HashMap在KEY重复的时候只是重新设置了VALUE值,KEY值则无法重复插入,故选用HashMap。在分别找到起点和终点能直达的站点集合后,就开始进行循环查找,开始检验起点能直达的站点中是否有能直达终点能直达站点的站点,如有,则证明可以进行二次换乘。 Iterator key1= map1.keySet().iterator(); Iterator key2= map2.keySet().iterator(); w
42、hile(key1.hasNext() while(key2.hasNext() if(zhida.isEmpty() String sop1=(String)key1.next(); 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
43、; 找到一条可行的线路后,再开始查找起点到转乘点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)th
44、ree2four.iterator().next(); busno2+=nonstop3.getBusno()+,; 最后把起点到第一换乘站,第一换乘站到第二换乘站,第二换乘站到终点站3段线路连接到一个String中并将改String添加到集合中,最后返回该集合: result=从+stop1+站出发,乘坐+busno1+到+huanchengstop1+站转+nonstop.getBusno()+到+ 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.4 服务器对外接口(Servlet)的实现本系统采用Servlet作为和手机通讯的接口,采用HTTP的应答机制,免去了自己写应答的麻烦,系统在执行了一次查询后在服务器的LO