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

上传人:仙*** 文档编号:78175735 上传时间:2022-04-21 格式:DOC 页数:27 大小:473.51KB
返回 下载 相关 举报
毕业设计(论文)湖北公交查询系统的设计与实现_第1页
第1页 / 共27页
毕业设计(论文)湖北公交查询系统的设计与实现_第2页
第2页 / 共27页
毕业设计(论文)湖北公交查询系统的设计与实现_第3页
第3页 / 共27页
点击查看更多>>
资源描述
湖北公交查询系统的设计与实现摘 要当今,人类社会已步入信息时代,信息化革命给所有领域带来了前所未有的变革。电脑、手机等信息工具的普及,人们获取信息变得更加完善、快捷。而随着信息技术的飞速发展,手机所蕴藏的无限商机,正在被人们逐步发掘,它不再仅仅局限于通信这一单一功能,正在朝着手提电脑甚至更完善的方向发展。由于手机价廉物美,它已成为人们获得在生活工作上等各种信息服务的最佳选择。在我国,随着城市化的快速发展,城市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,而手机公交查询系统的选题也正是基于该背景。本系统通过对城市公交系统的调研,提出了基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法;以J2ME作为开发工具,将其移植到用户手机上,借助于无线互联网,能为客户随时随地提供公交信息的查询;通过测试与分析,证实了该系统的可行性及实用价值。关键词:公交查询;站点优先级;公交换乘算法;手机;无线互联网Design and Implementation of City-bus Information Inquiry System Based on J2MEAbstractAt present, the human society marches into 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 information 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-quality 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, 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 priority 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 analyzing, 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手机公交查询的需求分析和开发工具介绍32.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)的实现164.2WEB端的实现164.3WAP端的实现184.4手机客户端的实现204.4.1客户端界面的实现204.4.2客户端工作原理204.4.3手机网络设置225手机公交查询系统测试与分析225.1测试环境225.2运行与测试225.3测试结果24结 论24参考文献251 引言1.1 课题背景作为关系国计民生的社会公益事业,城市公共交通一直都是政府工作的重点。就武汉市而言,调研数据显示,武汉市乘客以公交方式出行的比例为23.36%,可见城市公交的重要性。但是从客观上说,公交硬件建设跟不上城市建设的步伐,是全国大城市尤其是特大城市都正在遭遇的发展瓶颈。也常常造成人们的出行不便。在我国,随着城市化的快速发展,市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,在另一个方面,我国城市的手机普及率已经非常高了,如果能把这两种情况结合起来,开发出一种基于手机的公交查询软件,将会给用户带来便捷。1.2 国内外研究现状从有关的文献看, 如今全世界可以支持J2ME的手持设备如今已经达到了七千五百万,有34个运营商在使用J2ME技术;传统手机在出厂之后,功能(通讯录、游戏、商务应用)就已经固化,用户将无法删除无用的功能,同样也不能增加新的功能。即使用户找到提供新功能的程序,也往往由于程序和手机平台无法兼容而不能使用。这成为了手机行业发展的瓶颈,而JAVA在移动终端领域的出现改变了这一局面。JAVA以其可移植性,资源重用性,安全性,移动性以及强大的网络功能迅速占领了全球手机市场,未来的手机出货将主要以JAVA手机为主。据美国高科技研究公司Strategies Unlimited日前发表的2.5G和3G手机性能:2002-2006全球分析与市场预测的报告称,市场上Java手机的数量预计将每年翻一番,到2006年将从2001年的1,910万部增长到5.53亿部。硬件中加快集成Java预计将进一步促进Java在市场中的普及,J2ME将成为事实上的标准。到2006年,Java手机预计将占全部手机出货量的83%。 就国内来说,JAVA是未来无线数据服务的主流方向,也开始采用基于开放应用平台的移动增值服务架构。从2003年起,移动、联通均已开通无线JAVA业务。JAVA手机已经成为绝大多数用户选购手机时的必要考虑条件。在J2ME通信方面,MIDP1.0支持HTTP,MIDP2.0则增加了对HTTPS、报文、socket通信以及串口通信的支持。另外,MIDP2.0还支 持服务器Push体系架构,这样,你的手机能够收到来自服务器的报警、消息或者广播,根据要求启动手机上的应用程序进行操作。支持Over-the-air (OTA) Provisioning是MIDP2.0的一个重要的新特点,它使得用户能够动态地部署和更新移动设备上的应用程序。新版的MIDP规范中规定了如何在移动设备上发现、安装、更新和删除MIDlet套件;同时,提供应用程序下载的服务提供商还能够判断该MIDlet套件是否能够运行在申请下载的设备上,并且从设备上获取安装、更新和删除的信息。MIDP OTA provisioning模型为移动服务提供商提供了单一、标准的部署MIDP应用程序的途径。该模型已经被众多技术领先的移动设备制造商和服务提供商所采纳。J2ME针对嵌入式和移动设备,提供了开发和运行应用程序的平台,随着新的规范的不断推出和众多制造商、软件开发商的支持,J2ME正在飞速向前发展。JTWI将保证J2ME应用程序在不同制造商的产品上的兼容性。今后J2ME将借助Web Services的力量,真正成为企业级信息解决方案中不可或缺的一部分。1.3 本课题研究的意义在我国,随着城市化的快速发展,市公交系统也随之迅速扩大,且更加复杂化,找不到合适的乘车路线的事情经常发生。当前,复杂的公交系统使得用户往往处于迷惑的状态,给出行带来诸多不便,在另一个方面,我国城市的手机普及率已经非常高了,如果能把这两种情况结合起来,开发出一种基于手机的公交查询软件,将会给用户带来便捷。基于以上原因,本系统通过对城市公交系统的调研,提出了基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法;以J2ME作为开发工具,将其移植到用户手机上,借助于无线互联网,能为客户随时随地提供公交信息的查询。1.4 本软件的开发方法由于公交数据相对比较庞大和繁琐,同时设计换乘时对系统处理的性能要求也比较高,故本系统采用在服务器上进行计算,结果通过无线网络传输到客户端的形式进行开发。又由于当前绝大多数手机都支持JAVA,而J2EE和J2ME因为同出一门,具备先天性无缝衔接的优势,故本系统采用J2ME和J2EE结合的方式进行开发。通过J2ME和J2EE技术的结合,采用C/S模式和B/S模式共同存在的方式,服务器端采用Mysql+Tomcat/Weblogic,通过Servlet实现对外服务器通信,同时前台开发出WEB 模块和WAP模块,WEB模块采用MVC模式,使用Struts框架。手机客户端采用J2ME编程,使用线程技术实现和服务器的网络通信,并且在从服务器取得数据后自动断开连接,节约用户流量。1.5 本文的主要工作1.5.1 研究的主要内容本设计采用B/S和C/S结合的结构,综合运用以前所学的专业知识,设计开发一个功能较完善的基于手机的公交查询系统,具体包括以下内容:(1)研究并掌握TCP/IP等传输协议、数据库操作等的基本原理。(2)学习并掌握J2EE,J2ME等相关知识。(3)以前面的研究为基础,编程实现服务器及手机客户端线路查询,按站查询,站站查询并且实现手机无线网络通信等功能。1.5.2 各章节的安排本文章详细介绍了该系统的分析和实现各个流程。在文章的引言中,主要介绍了该系统面临的背景,研究意义和开发方法等,使读者对本文有全面的了解。在接下来的第二章里,对系统的需求分析和与之对应的开发工具介绍。在第三章里,对系统开发涉及的算法进行了介绍和对数据库设计给出了详细的说明。第四章是系统功能具体实现的介绍其中包括了关键的编程技术,功能的代码说明。第五章是对系统的测试和分析,包括代码测试和功能测试,并对测试分析总结。最后,是作者通过对本系统的研究和设计总结出的系统特点以及研究心得。2 手机公交查询的需求分析和开发工具介绍2.1 用户的原始需求作为关系国计民生的社会公益事业,城市公共交通一直都是政府工作的重点。就武汉市而言,调研结果中的另一个数据,武汉市乘客以公交方式出行的比例为23.36%,可见城市公交的重要性。但是从客观上说,公交硬件建设跟不上城市建设的步伐,是全国大城市尤其是特大城市都正在遭遇的发展瓶颈。也常常造成人们的出行不便。本系统通过对城市公交查询用户需求的调研,发现用户在查找公交信息的时候一般只有3种方式,即按线路进行查找,按站进行查找线路,按起点站和终点站查找乘坐方案。同时由于城市公交系统在规划的时候是以站作为单位进行规划的,故经过站数的多少直接决定了公交线路的长短和时间。因此,在本系统的设计中提出以下方案:用户在使用本系统的时候,可以按照线路进行公交查询,或者按起点终点进行查询,系统自动按照换乘筛选算法提供出最佳换乘方案,该算法根据用户输入的站名,查找全部可以直达的方案,如无直达方案,则找出全部换乘方案并按照站点优先级进行排序,返回给用户线路最短的前N条的换乘信息,如果用户使用按站查询线路,系统也提供了一定的模糊查询,比如用户查询“百脑汇”,系统能自动辨认出当地站点“磨子桥”。同时,用户在手机上可以通过J2ME手机客户端和WAP的方式进行查询,在电脑上可以通过访问WEB站点的方式进行查询。2.2 手机公交查询系统功能模块及流程图通过对需求分析的调研,得出了经过用户确认的手机公交查询系统的系统逻辑模型。根据手机公交查询系统的业务流程图,明确了整个系统的流程。(1)WEB和WAP功能模块,如图1所示。图1 WEB和WAP功能模块图图2 手机客户端流程图(2)J2ME手机客户端的系统流程图,如图2所示。用户查询流程分为查询内容选择、查询信息输入和信息接收3个步骤。从该流程图中可以看出,按起点终点查询是整个系统最重要的一部分,也是本系统最能体现算法的一部分,经过对成都公交系统的观察和分析,本系统提出了一次换乘时采用基于站点优先级和邻接矩阵的公交换乘算法,如果第一次换乘没有可以换乘的方案,则采用上下矩阵算法,得出二次换乘信息,同时把得到的方案缓存到数据库中,下个用户查询相同起点终点时就直接从数据库中提取缓存信息,大大的节约了用户的时间和系统资源。2.3 开发工具介绍JAVA语言是目前Internet上大型的WEB应用和手机程序开发时使用得最热门的编程语言,而目前国内销售的大多数手机都支持JAVA,同时J2ME和J2EE因为都是基于JAVA技术,可以进行无缝连接,所以本系统选用J2ME和J2EE做为开发语言,同时在WEB端应用相关的Struts框架,并完成一个基于这2种技术结合的手机无线公交查询系统。本系统采用的开发工具为MySQL+Eclipse+Tomcat/Weblogic,MySQL是一个广受Linux社区人们喜爱的半商业的数据库。MySQL具有强大且简单易用的特点,而且运行速度极快,能够处理企业数据库绝大多数的应用需求。Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。Tomcat服务器是一个免费的开放源代码的Web应用服务器,它是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat5支持最新的Servlet2.4和JSP2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。3 手机公交查询系统的设计3.1 手机公交查询系统算法的设计3.1.1 直达的算法设计现有A,B两个公交站,通过数据库查询语句“select * from businfo” 获得全部公交线路信息,再把每一路车的信息依次迭代出来,判断A站和B站是否同时在该线路中,如结果为true,则可以直达,同时将直达方案存入一个集合中,继续向下遍历,如果结果为false,则该车不能直达,继续向下遍历。3.1.2 一次换乘的算法设计一次换乘采用基于站点优先级和邻接矩阵的公交换乘算法,现在A,B两个公交站,通过数据库查询语句查找出经过A站的所有公交车集合Collection1,再通过数据库查询语句查找出经过B站的所有公交车集合Collection2,判断Collection1和Collection2是否有交集,若有,则得到一次换乘方案,存放在结果集合中。判断结束后,再按照经过站点总数对换乘方案进行排序,因为换乘结果往往数以百计,所以只取结果集的前N条记录展现给用户。若判断结束后没有找到一次换乘的方案,则执行2次换乘算法。一次换乘算法,如图3所示。图3 一次换乘算法示意图图4 二次换乘算法示意图3.1.3 二次换乘的算法设计二次换乘采用上下矩阵算法,现有A,B两个公交站,先通过数据库查询语句和程序业务逻辑得到A站能直达的所有站点,放在集合Collection1中,再按照A站的方法找出B站能知道的所有站点,放在集合Collection2中,再判断是否有公交车可以从Collection1中的站点直达Collection2中的站点,如果,则将方案存放到结果集合中。至此为止,根据公交线路设计的理论,是肯定可以找到二次换乘的方案的,故不再考虑3次换乘方案。二次换乘算法,如图4所示。3.2 手机公交查询数据库的设计3.2.1 数据库的逻辑设计 图5 数据库主要E-R图准确了解与分析用户需求(包括数据与处理)是整个设计过程的基础。而根据用户需求设计合适的数据库以及选择恰当的数据库以确保系统能高速稳定的运行则是数据库设计的根本目地。由于本系统涉及到大量数据的读取,并且对安全性要求不高,故选用占用系统资源较少并且速度相对较快的MySQL作为本系统的数据库。通过对用户需求的分析以及对系统本身应用背景的研究,可以看出本系统需要有以下数据支持:公交线路信息,公交站点信息,站点附近标志信息,用户通知信息,同时考虑到节约系统资源,在用户进行完站站查询后还会产生一个存放查询结果的缓存信息。由上述可以确认该算法所关系到的数据表。根据上述分析,可以得出公交信息模型的E-R图,如图5所示。公交信息相关数据库的数据字典,如表1所示。表1 公交信息相关的数据字典序 号数 据 项 名 称数 据 项 内 容1.公交线路信息公交线路的信息汇总1.1线路ID公交线路的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标志ID标志编号3.2标志名称站点附近标志性建筑物或者地段的名称3.2.2 数据库的物理设计(1)公交线路信息表负责存放公交线路信息,考虑到部分公交车存在上行和下行不一致的情况,表中添加了是否上下行的字段,以供算法确认。如表2所示。表2公交线路信息表 公交线路信息表(businfo)字段名注释Busid公交车的idBusno公交车的车号stop1第1个站的站名stop2第2个站的站名stop50第50个站的站名Time公交车的发车收车时间Startend公交车的起点和终点Updown是否有上下行(2) 站点信息表负责存放站点相关信息,并且存放一定的周围标志建筑和地名的信息,以供算法进行模糊查询。如表3所示。表3站点信息表 站点信息表(stopinfo)字段名注释Stopname公交站站名near1附近标志1near2附近标志2near3附近标志3near4附近标志4near5附近标志5near6附近标志6near7附近标志7near8附近标志8near9附近标志9near10附近标志10Stoppic臃余字段,为以后功能预先留出(3) 站点附近标志汇总表负责存放站点周围标志建筑或地名的汇总信息,本表为站点信息表的near集合自动生成。如表4所示。表4站点附近标志汇总表 站点附近标志汇总表(stopinfo)字段名注释Id标志的idNearname标志的名字(4) 用户公告表负责存放本系统的公告信息。如表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 Class)的实现采用AO模式,将数据库相关方法封装到一个基类中,由业务逻辑继承该基类。数据库连接(Connection)通过配置WEB服务器上的连接池,同时将数据源绑定到JNDI,程序直接通过JNDI Name获取,实现了数据源的可配置性和高度可移植性。获取JNDI Name方法如下: Javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(dsName) ; /从数据源得到连接 conn = ds.getConnection() ; 因为后面需要多次调用关闭数据库连接,故关闭连接封装到一个方法中,具体实现如下: /关闭数据库连接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)获得公交总数一般查找总数用”select count(*) from businfo”,但这样因为是顺序遍历,一直要遍历到最后一条,效率不高,此处使用sqlRst.last();使游标直接指向最后一条记录,再用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,result1); ps1.setString(3,result2); ps1.setString(4,result3); ps1.setString(5,result4); ps1.executeUpdate();用户查询时若数据库中已有缓存数据,则调用以下方法获取缓存的换乘数据: 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.getString(result4);4.1.3 业务逻辑类(Logic Class)的实现(1)查询公交线路该方法比较简单,通过“select * from businfo where busno=+busno”即可得到符合条件的公交车,同时返回用户需要的数据。(2)按站查询经过的公交线路,步骤如下: 通过辅助类判断用户输入的站名或者附近标志名,并找到对应的公交站名。 通过Sql语句找到经过该站的公交车,存放在一个集合中并返回。(3)按起点终点查找乘坐方案这是本系统中最复杂的一块,通过前面提到的基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法来实现,具体实现方法如下: 通过 start=tool.getbusstop(start); end=tool.getbusstop(end);来确定起点和终点的公交站名。 检验站名是否存在,存在则继续往下,不存在则返回提示信息。 若站名存在,则尝试从数据库中取得直达缓存信息,如数据库中没有直达信息,则查找换乘信息。 若数据库中没有缓存,则开始查找有无直达线路,找到后把结果存入数据库。 如果没有直达方案,则开始查找1次换乘方案,找到后按照经过站数排序,站数少的排前面,由于换乘方案过多,故只返回前几条。由于一次换乘结果可能成百上千,故只给用户前几条换乘方案进行选择,先将全部换乘方案按经过车站数进行排序,再取前4条返回给用户。排序类为一个实现了Serializable和Comparable的工具类,具体排序方法在compareTo方法中实现,通过compareTo(Object b)来定义如何排序,代码如下: public int compareTo(Object b) SortBean sort=(SortBean)b; return (this.length-sort.length) ; 换乘得到结果后放入Collection中返回。最后把找到的结果集写入到数据库缓存中。tool.insertDB(start,end,zhuanchengresult0,zhuanchengresult1,zhuanchengresult2,zhuanchengresult3);如果找不到一次换乘(这种情况非常渺茫),而用户又非常执着的要继续找公交车,就不得不使用二次换乘,算法在3.3节已有说明,下面列出具体做法:首先查找出经过起点站和终点站的线路,再通过线路找到该站能直达的所有站点,以起点站为例: 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.next(); map1.put(stopname,rubbish);这里使用HashMap的KEY作为存放站名的容器,因为从一个站台辐射出去的公交线路经过的站点往往有重复,而HashMap在KEY重复的时候只是重新设置了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(); 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站的车号 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)three2four.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的应答机制,免去了自己写应答的麻烦,系统在执行了一次查询后在服务器的LOG中记录一次,同时数据库中负责记录查询次数的计数器加1。发送信息关键代码如下: response.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开发时传输中文常常遇到乱码现象,这里我在CONTENT_TYPE里面编码方式设置成GB2312,并且在客户端发送数据时也把编码设置成GB2312,同时采用writeUTF方法,成功解决中文问题。4.2 Web端的实现本系统Web端采用Struts框架,严格遵循MVC模式,用户提交信息后先放到FormBean中暂存,然后在Action中实现业务方法的调用,实现代码的高度封装性和分离性。本系统只采用了一个Action作为中央控制器,通过参数关键字判断是那种查询,同时查询页面和结果页面为同一页面,在Action中查询完毕后统一放入Collection中传递到结果页面中,使得页面重用性大大提高。首页显示图7所示。图7 首页图样查询页面显示如图8所示。图8 查询页面Action作为中央控制器负责执行判断用户输入和查询,以线路查询为例,核心代码如下:判断用户提交内容:/如果用户按公交车号查询 if (busno != null) try busnoresult = dealbus.searchbusline(busno) ; httpServletRequest.setAttribute(buslineresult , busnoresult) ; dealActionForm.setBusno(null); busno=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端的实现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模块主要有首页,功能选择页面,线路查询页面,站站查询页面等组成,部分页面显示如下:功能选择页面,让用户选择使用哪种方式进行查询,如图9所示。图9 功能选择页面客户端下载页面,有JAR和JAD可供选择,以兼容支持不同的手机,如图10所示。图10 客户端下载页面详细原理以线路查询为例,线路查询提交代码如下: 其中$(busno:n)为变量的表示方法,:n的意思为变量中没有ESCAPE字符,即不需要进行ESCAPE八进制转码。服务器端处理代码(selectNumber.jsp)如下:if(busno!=null)try tool.fangwen();/用户查询计数器加1 Dealbus dealbus=new Dealbus(); coll =dealbus.searchbusline(busno);/调用业务处理方法 Iterator itr=coll.iterator() ; /将结果输出到一个String中 while (itr.hasNext() result = result+(String) itr.next() ; 然后将结果显示在用户手机上:返回返回首页4.4 手机客户端的实现4.4.1 客户端界面的实现4.4.2 客户端工作原理4.4.3 手机网络设置这里需要提到网络设置问题,因为中国移动设置了2个网络接入点CMNET和CMWAP,以NOKIA为代表的手机往往默认接入点是CMNET,而摩托罗拉之类的手机的默认接入点常常是CMWAP,所以本系统添加了网络设置这个选项,以便让用户选择自己的网络情况,如果用户不清楚,也可以在查询出错时看到提示。5 手机公交查询系统测试与分析5.1 测试环境本系统测试环境:CPU P42.8G2,内存DDR400 1G,MySQL5.0,TOMCAT5.016/Weblogic8.0,在WIN2000/XP下均测试通过.建议用户在CPU P4,内存1G及以上,数据库版本MySQL5.0以上,WIN2000PRO/XP,2003,WIN2000 SERVER 及以上软硬件平台使用.5.2 运行与测试以线路查询为例,对手机公交查询系统测试如下:(1)进入手机客户端主界面,客户端用户界面显示如图11所示。图11 手机客户端主界面(2)进入线路查询界面,如图12所示。图12 线路查询界面(3)查询结果界面显示图13所示。图13 线路查询结果界面5.3 测试结果本系统采用白盒和黑盒测试相结合的方法,非开发人员(测试用户)随意进行查询,开发人员跟踪服务器LOG,观察Exception出错信息,并做出判断,经过一个月的测试,发现问题和解决方法总结如下:(1)最开始使用EJB+Weblogic,用户反映查询换乘速度太慢。由于EJB是基于RMI即远程调用机制,对于大量数据的取出会造成系统速度变慢,严重会造成数据库链接超时。解决方法:换成JDBC直连,并且使用连接池。(2)环城公交问题:如27路是从三官堂出发,终点站也在三官堂,而且为单向行驶,如磨子桥到电子科大就无法直达,但按照系统算法仍然会显示可以直达,需要特殊处理。解决方法:将成都市唯一两路环城公交车27路和34路独立出来,单独处理。(3)手机网络问题:由于移动GPRS接入点分CMWAP和CMNET 2个接入点,不同的手机有不同的设置,单一连接模式可能会造成一款手机可以上网而另一个品牌则不行。解决方法:手机客户端上增加网络设置功能。最终经过详细功能测试和代码修正后,本系统结果能够达到预期功能。证实了该系统的可行性及实用价值,不足之处在于由于目前手机上网仍比较昂贵,用户无法承担大流量,故无法实现远程地图定位功能.结 论本毕业设计采用B/S和C/S相结合的结构,综合运用以前所学的专业知识,设计开发了一个功能较完善的基于手机的公交查询系统,并且提出了基于站点优先级和邻接矩阵的公交换乘算法和上下矩阵算法。经过测试,本系统达到了预期的目标,实现了线路查询,站站查询等功能,同时在真实无线互联网中运行也表现出良好的性能。通过对基于J2ME的手机公交查询系统的开发,本人对J2EE和J2ME都有了更深入的了解,同时对手机无线网络有了更深刻的理解。在把以前学的理论运用到实践的过程中,才发现实际开发经验的重要性,特别是通过这次项目的开发,我意识到了自己的很多不足,比如在项目版本管理上就出现过混乱情况,同时对设计模式的应用还不够熟练,总的来讲,我的思想已经完成了从“怎么做出软件”到“怎么做好软件”的转变。这对以后的专业发展是极其重要的。在现在城市公交系统及其繁琐的情况下,通过技术手段解决人们的难题是当前手机技术的趋势,而且目前手机无线互联网正在高速发展,日益低廉的上网费用使得越来越多的用户加入到手机互联网使用者的行列中。对手机而言,在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第25页 共27页
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


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

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


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