![基于JME的公交查詢(xún)系統(tǒng)的設(shè)計(jì)方案與實(shí)現(xiàn)_第1頁(yè)](http://file4.renrendoc.com/view/fa320bd32085d9e83d0ea7b8a9754053/fa320bd32085d9e83d0ea7b8a97540531.gif)
![基于JME的公交查詢(xún)系統(tǒng)的設(shè)計(jì)方案與實(shí)現(xiàn)_第2頁(yè)](http://file4.renrendoc.com/view/fa320bd32085d9e83d0ea7b8a9754053/fa320bd32085d9e83d0ea7b8a97540532.gif)
![基于JME的公交查詢(xún)系統(tǒng)的設(shè)計(jì)方案與實(shí)現(xiàn)_第3頁(yè)](http://file4.renrendoc.com/view/fa320bd32085d9e83d0ea7b8a9754053/fa320bd32085d9e83d0ea7b8a97540533.gif)
![基于JME的公交查詢(xún)系統(tǒng)的設(shè)計(jì)方案與實(shí)現(xiàn)_第4頁(yè)](http://file4.renrendoc.com/view/fa320bd32085d9e83d0ea7b8a9754053/fa320bd32085d9e83d0ea7b8a97540534.gif)
![基于JME的公交查詢(xún)系統(tǒng)的設(shè)計(jì)方案與實(shí)現(xiàn)_第5頁(yè)](http://file4.renrendoc.com/view/fa320bd32085d9e83d0ea7b8a9754053/fa320bd32085d9e83d0ea7b8a97540535.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGE分類(lèi)號(hào):TP311.1UDC:D10621-408-(2007)5720-0密級(jí):公開(kāi)編號(hào):2003215048成都信息工程學(xué)院學(xué)位論文基于J2ME的公交查詢(xún)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)論文作者姓名:劉應(yīng)嘉申請(qǐng)學(xué)位專(zhuān)業(yè):網(wǎng)絡(luò)工程申請(qǐng)學(xué)位類(lèi)別:工學(xué)學(xué)士張仕斌(副教授)論文提交日期:2007年06月10日基于J2ME的公交查詢(xún)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘要當(dāng)今,人類(lèi)社會(huì)已步入信息時(shí)代,信息化革命給所有領(lǐng)域帶來(lái)了前所未有的變革。電腦、手機(jī)等信息工具的普及,人們獲取信息變得更加完善、快捷.而隨著信息技術(shù)的飛速發(fā)展,手機(jī)所蘊(yùn)藏的無(wú)限商機(jī),正在被人們逐步發(fā)掘,它不再僅僅局限于通信這一單一功能,正在朝著手提電腦甚至更完善的方向發(fā)展。由于手機(jī)價(jià)廉物美,它已成為人們獲得在生活工作上等各種信息服務(wù)的最佳選擇.在我國(guó),隨著城市化的快速發(fā)展,城市公交系統(tǒng)也隨之迅速擴(kuò)大,且更加復(fù)雜化,找不到合適的乘車(chē)路線的事情經(jīng)常發(fā)生。當(dāng)前,復(fù)雜的公交系統(tǒng)使得用戶往往處于迷惑的狀態(tài),給出行帶來(lái)諸多不便,而手機(jī)公交查詢(xún)系統(tǒng)的選題也正是基于該背景.本系統(tǒng)通過(guò)對(duì)城市公交系統(tǒng)的調(diào)研,提出了基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法和上下矩陣算法;以J2ME作為開(kāi)發(fā)工具,將其移植到用戶手機(jī)上,借助于無(wú)線互聯(lián)網(wǎng),能為客戶隨時(shí)隨地提供公交信息的查詢(xún);通過(guò)測(cè)試與分析,證實(shí)了該系統(tǒng)的可行性及實(shí)用價(jià)值.關(guān)鍵詞:公交查詢(xún);站點(diǎn)優(yōu)先級(jí);公交換乘算法;手機(jī);無(wú)線互聯(lián)網(wǎng)DesignandImplementationofCity—busInformat(yī)ionInquirySystemBasedonJ2MEAbstractAtpresent,thehumansocietymarchesintotheinformationtime;theinformationrevolutionhasbroughttheunprecedentedrevolutionforalldomains。WiththepopularizationofinformationtoolaslikeComputer,handsetandsoon,obtainingtheinformationismoreandmoreperfectlyandquickly。Butalongwiththerapiddevelopmentofinformat(yī)iontechnology,theinfiniteopportunitythat(yī)thehandsetcontainsisbeinggraduallyexcavat(yī)edbythepeople,itnolongermerelylimitstothissolefunctionofcommunication,isfacingtothedevelopmentofportablecomputerorevenmoreperfectaspect。Asaresultofthelow-priceandhigh—qualityofthehandset,ithasbecomethebestchoicethatthepeopleobtaineachkindofinformationserviceinlife.Inourcountry,alongwithurbanizedfastdevelopment,citybussystemalsorapidlyexpands,andevenbecomesmorecomplex.So,findingcitybusroutebecomesmoredifficult.Presently,thecomplexcitybussystemcausestheconditionwhichtheusersoftenareconfused,whichbringsmanyinconvenienttopeople,buthandsetcitybusinquirysystemisalsobasedonthisbackground.Firstly,theauthorinvestigat(yī)esthecitybussystem,provides“theAlgorithmbasedonthestandpriorityandthenextlinkingmat(yī)rix”and“theAlgorithmbasedonupwardanddownwardmat(yī)rix”.Secondly,theseAlgorithmsaretransplantedtothehandsetbyJ2ME,whichcanprovidetheinquiryforcitybusatanytimeandanywherebytheaidoftothewirelessInternet。Finally,throughtestingandanalyzing,itconfirmsthissystemissomefeasibilityandpracticalvalue。Keywords:CityBusInquiry;StandPriority;CityBusExchangingAlgorithm;Handset;WirelessInternet目錄論文總頁(yè)數(shù):27頁(yè)TO(shè)C\o"1—3”\h\z\uHYPERLINK\l”_Toc170704325"1?引言 PAGEREF_Toc170704325\h1HYPERLINK\l"_Toc170704326”1.1 課題背景 PAGEREF_Toc170704326\h1HYPERLINK1.4?本軟件的開(kāi)發(fā)方法?PAGEREF_Toc170704329\h2HYPERLINK\l"_Toc170704330”1.5 本文的主要工作?PAGEREF_Toc170704330\h3HYPERLINK\l"_Toc170704331"1。5.1 研究的主要內(nèi)容?PAGEREF_Toc170704331\h3HYPERLINK\l"_Toc170704332”1.5.2?各章節(jié)的安排?PAGEREF_Toc170704332\h3HYPERLINK\l"_Toc170704333"2 手機(jī)公交查詢(xún)的需求分析和開(kāi)發(fā)工具介紹?PAGEREF_Toc170704333\h3HYPERLINK\l”_Toc170704334”2.1 用戶的原始需求?PAGEREF_Toc170704334\h3HYPERLINK\l”_Toc170704335"2.2?手機(jī)公交查詢(xún)系統(tǒng)功能模塊及流程圖?PAGEREF_Toc170704335\h4HYPERLINK3.1?手機(jī)公交查詢(xún)系統(tǒng)算法的設(shè)計(jì)?PAGEREF_Toc170704338\h5HYPERLINK\l”_Toc170704339”3.1.1?直達(dá)的算法設(shè)計(jì) PAGEREF_Toc170704339\h5HYPERLINK\l”_Toc170704340"3.1。2?一次換乘的算法設(shè)計(jì)?PAGEREF_Toc170704340\h6HYPERLINK\l"_Toc170704341"3。1.3 二次換乘的算法設(shè)計(jì)?PAGEREF_Toc170704341\h7HYPERLINK\l"_Toc170704342”3.2?手機(jī)公交查詢(xún)數(shù)據(jù)庫(kù)的設(shè)計(jì)?PAGEREF_Toc170704342\h7HYPERLINK\l"_Toc170704343"3。2.1?數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)?PAGEREF_Toc170704343\h7HYPERLINK\l”_Toc170704344”3.2.2?數(shù)據(jù)庫(kù)的物理設(shè)計(jì) PAGEREF_Toc170704344\h8HYPERLINK4.1?服務(wù)器端的實(shí)現(xiàn)?PAGEREF_Toc170704346\h10HYPERLINK\l"_Toc170704347"4.1。1?基類(lèi)(BaseClass)的實(shí)現(xiàn)?PAGEREF_Toc170704347\h11HYPERLINK\l”_Toc170704348"4.1。2?輔助類(lèi)(HelpClass)的實(shí)現(xiàn)?PAGEREF_Toc170704348\h12HYPERLINK\l"_Toc170704349"4.1。3?業(yè)務(wù)邏輯類(lèi)(LogicClass)的實(shí)現(xiàn)?PAGEREF_Toc170704349\h13HYPERLINK\l”_Toc170704350"4。1.4?服務(wù)器對(duì)外接口(Servlet)的實(shí)現(xiàn)?PAGEREF_Toc170704350\h16HYPERLINK\l"_Toc170704351"4。2 WEB端的實(shí)現(xiàn)?PAGEREF_Toc170704351\h16HYPERLINK\l"_Toc170704352"4.3 WAP端的實(shí)現(xiàn)?PAGEREF_Toc170704352\h18HYPERLINK\l"_Toc170704353”4.4 手機(jī)客戶端的實(shí)現(xiàn)?PAGEREF_Toc170704353\h20HYPERLINK\l”_Toc170704354"4。4。1?客戶端界面的實(shí)現(xiàn)?PAGEREF_Toc170704354\h20HYPERLINK\l"_Toc170704355”4.4.2?客戶端工作原理 PAGEREF_Toc170704355\h20HYPERLINK\l”_Toc170704356”4.4。3 手機(jī)網(wǎng)絡(luò)設(shè)置 PAGEREF_Toc170704356\h22HYPERLINK\l"_Toc170704357”5?手機(jī)公交查詢(xún)系統(tǒng)測(cè)試與分析 PAGEREF_Toc170704357\h22HYPERLINK\l”_Toc170704358"5。1?測(cè)試環(huán)境?PAGEREF_Toc170704358\h22HYPERLINK\l”_Toc170704359”5.2?運(yùn)行與測(cè)試?PAGEREF_Toc170704359\h22HYPERLINK\l”_Toc170704360"5.3 測(cè)試結(jié)果?PAGEREF_Toc170704360\h24HYPERLINK\l"_Toc170704361"結(jié)論 PAGEREF_Toc170704361\h24HYPERLINK\l"_Toc170704362"參考文獻(xiàn)?PAGEREF_Toc170704362\h25HYPERLINK\l"_Toc170704363”致謝?PAGEREF_Toc170704363\h26HYPERLINK\l”_Toc170704364"聲明?PAGEREF_Toc170704364\h27第26頁(yè)共27頁(yè)第1頁(yè)共27頁(yè)引言課題背景作為關(guān)系國(guó)計(jì)民生的社會(huì)公益事業(yè),城市公共交通一直都是政府工作的重點(diǎn).就武漢市而言,調(diào)研數(shù)據(jù)顯示,武漢市乘客以公交方式出行的比例為23.36%,可見(jiàn)城市公交的重要性.但是從客觀上說(shuō),公交硬件建設(shè)跟不上城市建設(shè)的步伐,是全國(guó)大城市尤其是特大城市都正在遭遇的發(fā)展瓶頸.也常常造成人們的出行不便。在我國(guó),隨著城市化的快速發(fā)展,市公交系統(tǒng)也隨之迅速擴(kuò)大,且更加復(fù)雜化,找不到合適的乘車(chē)路線的事情經(jīng)常發(fā)生。當(dāng)前,復(fù)雜的公交系統(tǒng)使得用戶往往處于迷惑的狀態(tài),給出行帶來(lái)諸多不便,在另一個(gè)方面,我國(guó)城市的手機(jī)普及率已經(jīng)非常高了,如果能把這兩種情況結(jié)合起來(lái),開(kāi)發(fā)出一種基于手機(jī)的公交查詢(xún)軟件,將會(huì)給用戶帶來(lái)便捷。國(guó)內(nèi)外研究現(xiàn)狀從有關(guān)的文獻(xiàn)看,如今全世界可以支持J2ME的手持設(shè)備如今已經(jīng)達(dá)到了七千五百萬(wàn),有34個(gè)運(yùn)營(yíng)商在使用J2ME技術(shù);傳統(tǒng)手機(jī)在出廠之后,功能(通訊錄、游戲、商務(wù)應(yīng)用)就已經(jīng)固化,用戶將無(wú)法刪除無(wú)用的功能,同樣也不能增加新的功能.即使用戶找到提供新功能的程序,也往往由于程序和手機(jī)平臺(tái)無(wú)法兼容而不能使用。這成為了手機(jī)行業(yè)發(fā)展的瓶頸,而JAVA在移動(dòng)終端領(lǐng)域的出現(xiàn)改變了這一局面。JAVA以其可移植性,資源重用性,安全性,移動(dòng)性以及強(qiáng)大的網(wǎng)絡(luò)功能迅速占領(lǐng)了全球手機(jī)市場(chǎng),未來(lái)的手機(jī)出貨將主要以JAVA手機(jī)為主。據(jù)美國(guó)高科技研究公司StrategiesUnlimited日前發(fā)表的《2.5G和3G手機(jī)性能:2002—2006全球分析與市場(chǎng)預(yù)測(cè)》的報(bào)告稱(chēng),市場(chǎng)上Java手機(jī)的數(shù)量預(yù)計(jì)將每年翻一番,到2006年將從2001年的1,910萬(wàn)部增長(zhǎng)到5.53億部。硬件中加快集成Java預(yù)計(jì)將進(jìn)一步促進(jìn)Java在市場(chǎng)中的普及,J2ME將成為事實(shí)上的標(biāo)準(zhǔn)。到2006年,Java手機(jī)預(yù)計(jì)將占全部手機(jī)出貨量的83%。就國(guó)內(nèi)來(lái)說(shuō),JAVA是未來(lái)無(wú)線數(shù)據(jù)服務(wù)的主流方向,也開(kāi)始采用基于開(kāi)放應(yīng)用平臺(tái)的移動(dòng)增值服務(wù)架構(gòu)。從2003年起,移動(dòng)、聯(lián)通均已開(kāi)通無(wú)線JAVA業(yè)務(wù)。JAVA手機(jī)已經(jīng)成為絕大多數(shù)用戶選購(gòu)手機(jī)時(shí)的必要考慮條件。在J2ME通信方面,MIDP1.0支持HTTP,MIDP2.0則增加了對(duì)HTTPS、報(bào)文、socket通信以及串口通信的支持。另外,MIDP2.0還支持服務(wù)器Push體系架構(gòu),這樣,你的手機(jī)能夠收到來(lái)自服務(wù)器的報(bào)警、消息或者廣播,根據(jù)要求啟動(dòng)手機(jī)上的應(yīng)用程序進(jìn)行操作。支持Over-the—air(OTA)Provisioning是MIDP2。0的一個(gè)重要的新特點(diǎn),它使得用戶能夠動(dòng)態(tài)地部署和更新移動(dòng)設(shè)備上的應(yīng)用程序。新版的MIDP規(guī)范中規(guī)定了如何在移動(dòng)設(shè)備上發(fā)現(xiàn)、安裝、更新和刪除MIDlet套件;同時(shí),提供應(yīng)用程序下載的服務(wù)提供商還能夠判斷該MIDlet套件是否能夠運(yùn)行在申請(qǐng)下載的設(shè)備上,并且從設(shè)備上獲取安裝、更新和刪除的信息。MIDPOTAprovisioning模型為移動(dòng)服務(wù)提供商提供了單一、標(biāo)準(zhǔn)的部署MIDP應(yīng)用程序的途徑。該模型已經(jīng)被眾多技術(shù)領(lǐng)先的移動(dòng)設(shè)備制造商和服務(wù)提供商所采納。J2ME針對(duì)嵌入式和移動(dòng)設(shè)備,提供了開(kāi)發(fā)和運(yùn)行應(yīng)用程序的平臺(tái),隨著新的規(guī)范的不斷推出和眾多制造商、軟件開(kāi)發(fā)商的支持,J2ME正在飛速向前發(fā)展。JTWI將保證J2ME應(yīng)用程序在不同制造商的產(chǎn)品上的兼容性。今后J2ME將借助WebServices的力量,真正成為企業(yè)級(jí)信息解決方案中不可或缺的一部分.本課題研究的意義在我國(guó),隨著城市化的快速發(fā)展,市公交系統(tǒng)也隨之迅速擴(kuò)大,且更加復(fù)雜化,找不到合適的乘車(chē)路線的事情經(jīng)常發(fā)生。當(dāng)前,復(fù)雜的公交系統(tǒng)使得用戶往往處于迷惑的狀態(tài),給出行帶來(lái)諸多不便,在另一個(gè)方面,我國(guó)城市的手機(jī)普及率已經(jīng)非常高了,如果能把這兩種情況結(jié)合起來(lái),開(kāi)發(fā)出一種基于手機(jī)的公交查詢(xún)軟件,將會(huì)給用戶帶來(lái)便捷。基于以上原因,本系統(tǒng)通過(guò)對(duì)城市公交系統(tǒng)的調(diào)研,提出了基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法和上下矩陣算法;以J2ME作為開(kāi)發(fā)工具,將其移植到用戶手機(jī)上,借助于無(wú)線互聯(lián)網(wǎng),能為客戶隨時(shí)隨地提供公交信息的查詢(xún)。本軟件的開(kāi)發(fā)方法由于公交數(shù)據(jù)相對(duì)比較龐大和繁瑣,同時(shí)設(shè)計(jì)換乘時(shí)對(duì)系統(tǒng)處理的性能要求也比較高,故本系統(tǒng)采用在服務(wù)器上進(jìn)行計(jì)算,結(jié)果通過(guò)無(wú)線網(wǎng)絡(luò)傳輸?shù)娇蛻舳说男问竭M(jìn)行開(kāi)發(fā)。又由于當(dāng)前絕大多數(shù)手機(jī)都支持JAVA,而J2EE和J2ME因?yàn)橥鲆婚T(mén),具備先天性無(wú)縫銜接的優(yōu)勢(shì),故本系統(tǒng)采用J2ME和J2EE結(jié)合的方式進(jìn)行開(kāi)發(fā)。通過(guò)J2ME和J2EE技術(shù)的結(jié)合,采用C/S模式和B/S模式共同存在的方式,服務(wù)器端采用Mysql+Tomcat/Weblogic,通過(guò)Servlet實(shí)現(xiàn)對(duì)外服務(wù)器通信,同時(shí)前臺(tái)開(kāi)發(fā)出WEB模塊和WAP模塊,WEB模塊采用MVC模式,使用Struts框架。手機(jī)客戶端采用J2ME編程,使用線程技術(shù)實(shí)現(xiàn)和服務(wù)器的網(wǎng)絡(luò)通信,并且在從服務(wù)器取得數(shù)據(jù)后自動(dòng)斷開(kāi)連接,節(jié)約用戶流量。本文的主要工作研究的主要內(nèi)容本設(shè)計(jì)采用B/S和C/S結(jié)合的結(jié)構(gòu),綜合運(yùn)用以前所學(xué)的專(zhuān)業(yè)知識(shí),設(shè)計(jì)開(kāi)發(fā)一個(gè)功能較完善的基于手機(jī)的公交查詢(xún)系統(tǒng),具體包括以下內(nèi)容:(1)研究并掌握TCP/IP等傳輸協(xié)議、數(shù)據(jù)庫(kù)操作等的基本原理。(2)學(xué)習(xí)并掌握J2EE,J2ME等相關(guān)知識(shí)。(3)以前面的研究為基礎(chǔ),編程實(shí)現(xiàn)服務(wù)器及手機(jī)客戶端線路查詢(xún),按站查詢(xún),站站查詢(xún)并且實(shí)現(xiàn)手機(jī)無(wú)線網(wǎng)絡(luò)通信等功能.各章節(jié)的安排本文章詳細(xì)介紹了該系統(tǒng)的分析和實(shí)現(xiàn)各個(gè)流程。在文章的引言中,主要介紹了該系統(tǒng)面臨的背景,研究意義和開(kāi)發(fā)方法等,使讀者對(duì)本文有全面的了解。在接下來(lái)的第二章里,對(duì)系統(tǒng)的需求分析和與之對(duì)應(yīng)的開(kāi)發(fā)工具介紹。在第三章里,對(duì)系統(tǒng)開(kāi)發(fā)涉及的算法進(jìn)行了介紹和對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)給出了詳細(xì)的說(shuō)明。第四章是系統(tǒng)功能具體實(shí)現(xiàn)的介紹其中包括了關(guān)鍵的編程技術(shù),功能的代碼說(shuō)明。第五章是對(duì)系統(tǒng)的測(cè)試和分析,包括代碼測(cè)試和功能測(cè)試,并對(duì)測(cè)試分析總結(jié)。最后,是作者通過(guò)對(duì)本系統(tǒng)的研究和設(shè)計(jì)總結(jié)出的系統(tǒng)特點(diǎn)以及研究心得。手機(jī)公交查詢(xún)的需求分析和開(kāi)發(fā)工具介紹用戶的原始需求作為關(guān)系國(guó)計(jì)民生的社會(huì)公益事業(yè),城市公共交通一直都是政府工作的重點(diǎn).就武漢市而言,調(diào)研結(jié)果中的另一個(gè)數(shù)據(jù),武漢市乘客以公交方式出行的比例為23.36%,可見(jiàn)城市公交的重要性。但是從客觀上說(shuō),公交硬件建設(shè)跟不上城市建設(shè)的步伐,是全國(guó)大城市尤其是特大城市都正在遭遇的發(fā)展瓶頸。也常常造成人們的出行不便.本系統(tǒng)通過(guò)對(duì)城市公交查詢(xún)用戶需求的調(diào)研,發(fā)現(xiàn)用戶在查找公交信息的時(shí)候一般只有3種方式,即按線路進(jìn)行查找,按站進(jìn)行查找線路,按起點(diǎn)站和終點(diǎn)站查找乘坐方案。同時(shí)由于城市公交系統(tǒng)在規(guī)劃的時(shí)候是以站作為單位進(jìn)行規(guī)劃的,故經(jīng)過(guò)站數(shù)的多少直接決定了公交線路的長(zhǎng)短和時(shí)間。因此,在本系統(tǒng)的設(shè)計(jì)中提出以下方案:用戶在使用本系統(tǒng)的時(shí)候,可以按照線路進(jìn)行公交查詢(xún),或者按起點(diǎn)終點(diǎn)進(jìn)行查詢(xún),系統(tǒng)自動(dòng)按照換乘篩選算法提供出最佳換乘方案,該算法根據(jù)用戶輸入的站名,查找全部可以直達(dá)的方案,如無(wú)直達(dá)方案,則找出全部換乘方案并按照站點(diǎn)優(yōu)先級(jí)進(jìn)行排序,返回給用戶線路最短的前N條的換乘信息,如果用戶使用按站查詢(xún)線路,系統(tǒng)也提供了一定的模糊查詢(xún),比如用戶查詢(xún)“百腦匯”,系統(tǒng)能自動(dòng)辨認(rèn)出當(dāng)?shù)卣军c(diǎn)“磨子橋”。同時(shí),用戶在手機(jī)上可以通過(guò)J2ME手機(jī)客戶端和WAP的方式進(jìn)行查詢(xún),在電腦上可以通過(guò)訪問(wèn)WEB站點(diǎn)的方式進(jìn)行查詢(xún)。手機(jī)公交查詢(xún)系統(tǒng)功能模塊及流程圖通過(guò)對(duì)需求分析的調(diào)研,得出了經(jīng)過(guò)用戶確認(rèn)的手機(jī)公交查詢(xún)系統(tǒng)的系統(tǒng)邏輯模型.根據(jù)手機(jī)公交查詢(xún)系統(tǒng)的業(yè)務(wù)流程圖,明確了整個(gè)系統(tǒng)的流程.(1)WEB和WAP功能模塊,如圖1所示.圖1WEB和WAP功能模塊圖圖2手機(jī)客戶端流程圖(2)J2ME手機(jī)客戶端的系統(tǒng)流程圖,如圖2所示.用戶查詢(xún)流程分為查詢(xún)內(nèi)容選擇、查詢(xún)信息輸入和信息接收3個(gè)步驟.從該流程圖中可以看出,按起點(diǎn)終點(diǎn)查詢(xún)是整個(gè)系統(tǒng)最重要的一部分,也是本系統(tǒng)最能體現(xiàn)算法的一部分,經(jīng)過(guò)對(duì)成都公交系統(tǒng)的觀察和分析,本系統(tǒng)提出了一次換乘時(shí)采用基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法,如果第一次換乘沒(méi)有可以換乘的方案,則采用上下矩陣算法,得出二次換乘信息,同時(shí)把得到的方案緩存到數(shù)據(jù)庫(kù)中,下個(gè)用戶查詢(xún)相同起點(diǎn)終點(diǎn)時(shí)就直接從數(shù)據(jù)庫(kù)中提取緩存信息,大大的節(jié)約了用戶的時(shí)間和系統(tǒng)資源。開(kāi)發(fā)工具介紹JAVA語(yǔ)言是目前Internet上大型的WEB應(yīng)用和手機(jī)程序開(kāi)發(fā)時(shí)使用得最熱門(mén)的編程語(yǔ)言,而目前國(guó)內(nèi)銷(xiāo)售的大多數(shù)手機(jī)都支持JAVA,同時(shí)J2ME和J2EE因?yàn)槎际腔贘AVA技術(shù),可以進(jìn)行無(wú)縫連接,所以本系統(tǒng)選用J2ME和J2EE做為開(kāi)發(fā)語(yǔ)言,同時(shí)在WEB端應(yīng)用相關(guān)的Struts框架,并完成一個(gè)基于這2種技術(shù)結(jié)合的手機(jī)無(wú)線公交查詢(xún)系統(tǒng).本系統(tǒng)采用的開(kāi)發(fā)工具為MySQL+Eclipse+Tomcat/Weblogic,MySQL是一個(gè)廣受Linux社區(qū)人們喜愛(ài)的半商業(yè)的數(shù)據(jù)庫(kù).MySQL具有強(qiáng)大且簡(jiǎn)單易用的特點(diǎn),而且運(yùn)行速度極快,能夠處理企業(yè)數(shù)據(jù)庫(kù)絕大多數(shù)的應(yīng)用需求.Eclipse是一個(gè)開(kāi)放源代碼的、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境.幸運(yùn)的是,Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開(kāi)發(fā)工具(JavaDevelopmentTools,JDT)。Tomcat服務(wù)器是一個(gè)免費(fèi)的開(kāi)放源代碼的Web應(yīng)用服務(wù)器,它是Apache軟件基金會(huì)(Apache
Software
Foundation)的Jakarta項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和JSP規(guī)范總是能在Tomcat中得到體現(xiàn),Tomcat5支持最新的Servlet
2。4和JSP
2.0規(guī)范。因?yàn)門(mén)omcat技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受Java愛(ài)好者的喜愛(ài)并得到了部分軟件開(kāi)發(fā)商的認(rèn)可,成為目前比較流行的Web應(yīng)用服務(wù)器.手機(jī)公交查詢(xún)系統(tǒng)的設(shè)計(jì)手機(jī)公交查詢(xún)系統(tǒng)算法的設(shè)計(jì)直達(dá)的算法設(shè)計(jì)現(xiàn)有A,B兩個(gè)公交站,通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句“select*frombusinfo"獲得全部公交線路信息,再把每一路車(chē)的信息依次迭代出來(lái),判斷A站和B站是否同時(shí)在該線路中,如結(jié)果為true,則可以直達(dá),同時(shí)將直達(dá)方案存入一個(gè)集合中,繼續(xù)向下遍歷,如果結(jié)果為false,則該車(chē)不能直達(dá),繼續(xù)向下遍歷。一次換乘的算法設(shè)計(jì)一次換乘采用基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法,現(xiàn)在A,B兩個(gè)公交站,通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句查找出經(jīng)過(guò)A站的所有公交車(chē)集合Collection1,再通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句查找出經(jīng)過(guò)B站的所有公交車(chē)集合Collection2,判斷Collection1和Collection2是否有交集,若有,則得到一次換乘方案,存放在結(jié)果集合中.判斷結(jié)束后,再按照經(jīng)過(guò)站點(diǎn)總數(shù)對(duì)換乘方案進(jìn)行排序,因?yàn)閾Q乘結(jié)果往往數(shù)以百計(jì),所以只取結(jié)果集的前N條記錄展現(xiàn)給用戶.若判斷結(jié)束后沒(méi)有找到一次換乘的方案,則執(zhí)行2次換乘算法。一次換乘算法,如圖3所示。圖3一次換乘算法示意圖圖4二次換乘算法示意圖二次換乘的算法設(shè)計(jì)二次換乘采用上下矩陣算法,現(xiàn)有A,B兩個(gè)公交站,先通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句和程序業(yè)務(wù)邏輯得到A站能直達(dá)的所有站點(diǎn),放在集合Collection1中,再按照A站的方法找出B站能知道的所有站點(diǎn),放在集合Collection2中,再判斷是否有公交車(chē)可以從Collection1中的站點(diǎn)直達(dá)Collection2中的站點(diǎn),如果,則將方案存放到結(jié)果集合中。至此為止,根據(jù)公交線路設(shè)計(jì)的理論,是肯定可以找到二次換乘的方案的,故不再考慮3次換乘方案.二次換乘算法,如圖4所示。手機(jī)公交查詢(xún)數(shù)據(jù)庫(kù)的設(shè)計(jì)數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)圖5數(shù)據(jù)庫(kù)主要E-R圖準(zhǔn)確了解與分析用戶需求(包括數(shù)據(jù)與處理)是整個(gè)設(shè)計(jì)過(guò)程的基礎(chǔ).而根據(jù)用戶需求設(shè)計(jì)合適的數(shù)據(jù)庫(kù)以及選擇恰當(dāng)?shù)臄?shù)據(jù)庫(kù)以確保系統(tǒng)能高速穩(wěn)定的運(yùn)行則是數(shù)據(jù)庫(kù)設(shè)計(jì)的根本目地。由于本系統(tǒng)涉及到大量數(shù)據(jù)的讀取,并且對(duì)安全性要求不高,故選用占用系統(tǒng)資源較少并且速度相對(duì)較快的MySQL作為本系統(tǒng)的數(shù)據(jù)庫(kù)。通過(guò)對(duì)用戶需求的分析以及對(duì)系統(tǒng)本身應(yīng)用背景的研究,可以看出本系統(tǒng)需要有以下數(shù)據(jù)支持:公交線路信息,公交站點(diǎn)信息,站點(diǎn)附近標(biāo)志信息,用戶通知信息,同時(shí)考慮到節(jié)約系統(tǒng)資源,在用戶進(jìn)行完站站查詢(xún)后還會(huì)產(chǎn)生一個(gè)存放查詢(xún)結(jié)果的緩存信息.由上述可以確認(rèn)該算法所關(guān)系到的數(shù)據(jù)表。根據(jù)上述分析,可以得出公交信息模型的E-R圖,如圖5所示.公交信息相關(guān)數(shù)據(jù)庫(kù)的數(shù)據(jù)字典,如表1所示.表1公交信息相關(guān)的數(shù)據(jù)字典序號(hào)數(shù)據(jù)項(xiàng)名稱(chēng)數(shù)據(jù)項(xiàng)內(nèi)容1。公交線路信息公交線路的信息匯總1。1線路ID公交線路的ID1。2線路NO公交線路的名稱(chēng),如502A1。3經(jīng)過(guò)站點(diǎn)公交線路經(jīng)過(guò)的站點(diǎn)1.4收發(fā)車(chē)時(shí)間公交車(chē)的收發(fā)車(chē)時(shí)間1。5是否上下行判斷該公交車(chē)是否有上下行2。公交站點(diǎn)信息公交站點(diǎn)相關(guān)信息2。1公交站名該站點(diǎn)的站名2.2附近標(biāo)志1附近標(biāo)志1的名字2.3附近標(biāo)志2附近標(biāo)志2的名字2。4附近標(biāo)志3附近標(biāo)志3的名字2。5附近標(biāo)志4附近標(biāo)志4的名字2。6附近標(biāo)志5附近標(biāo)志5的名字2.7附近標(biāo)志6附近標(biāo)志6的名字2。8附近標(biāo)志7附近標(biāo)志7的名字2.9附近標(biāo)志8附近標(biāo)志8的名字2。10附近標(biāo)志9附近標(biāo)志9的名字2.11附近標(biāo)志10附近標(biāo)志10的名字3.站點(diǎn)附近標(biāo)志匯總站點(diǎn)附近標(biāo)志性建筑物或者地名的匯總3.1標(biāo)志ID標(biāo)志編號(hào)3.2標(biāo)志名稱(chēng)站點(diǎn)附近標(biāo)志性建筑物或者地段的名稱(chēng)數(shù)據(jù)庫(kù)的物理設(shè)計(jì)(1)公交線路信息表負(fù)責(zé)存放公交線路信息,考慮到部分公交車(chē)存在上行和下行不一致的情況,表中添加了是否上下行的字段,以供算法確認(rèn).如表2所示。表2公交線路信息表公交線路信息表(businfo)字段名注釋Busid公交車(chē)的idBusno公交車(chē)的車(chē)號(hào)stop1第1個(gè)站的站名stop2第2個(gè)站的站名……stop50第50個(gè)站的站名Time公交車(chē)的發(fā)車(chē)收車(chē)時(shí)間Startend公交車(chē)的起點(diǎn)和終點(diǎn)Updown是否有上下行(2)站點(diǎn)信息表負(fù)責(zé)存放站點(diǎn)相關(guān)信息,并且存放一定的周?chē)鷺?biāo)志建筑和地名的信息,以供算法進(jìn)行模糊查詢(xún)。如表3所示。表3站點(diǎn)信息表站點(diǎn)信息表(stopinfo)字段名注釋Stopname公交站站名near1附近標(biāo)志1near2附近標(biāo)志2near3附近標(biāo)志3near4附近標(biāo)志4near5附近標(biāo)志5near6附近標(biāo)志6near7附近標(biāo)志7near8附近標(biāo)志8near9附近標(biāo)志9near10附近標(biāo)志10Stoppic臃余字段,為以后功能預(yù)先留出(3)站點(diǎn)附近標(biāo)志匯總表負(fù)責(zé)存放站點(diǎn)周?chē)鷺?biāo)志建筑或地名的匯總信息,本表為站點(diǎn)信息表的near集合自動(dòng)生成。如表4所示.表4站點(diǎn)附近標(biāo)志匯總表站點(diǎn)附近標(biāo)志匯總表(stopinfo)字段名注釋Id標(biāo)志的idNearname標(biāo)志的名字(4)用戶公告表負(fù)責(zé)存放本系統(tǒng)的公告信息。如表5所示。表5用戶公告表用戶公告表(notify)字段名注釋?zhuān)桑湎⒌膇dContent消息內(nèi)容Dat(yī)e消息發(fā)布日期(5)查詢(xún)統(tǒng)計(jì)表負(fù)責(zé)統(tǒng)計(jì)用戶查詢(xún)和下載量。如表6所示。表6查詢(xún)統(tǒng)計(jì)表查詢(xún)統(tǒng)計(jì)表(jishuqi)字段名注釋?zhuān)桑鋓dFangwen查詢(xún)量Xiazai客戶端下載量手機(jī)公交查詢(xún)系統(tǒng)功能詳細(xì)實(shí)現(xiàn)經(jīng)過(guò)上面的描述,已經(jīng)明確了手機(jī)公交查詢(xún)系統(tǒng)需要實(shí)現(xiàn)的功能以及如何去完成這些功能。下面將具體的闡述如何實(shí)現(xiàn)這些功能。服務(wù)器端的實(shí)現(xiàn)本系統(tǒng)遵照J2EE3、4層結(jié)構(gòu),使用了MVC、AO等設(shè)計(jì)模式,組織結(jié)構(gòu)圖如圖6所示。圖6系統(tǒng)組織結(jié)構(gòu)圖基類(lèi)(BaseClass)的實(shí)現(xiàn)采用AO模式,將數(shù)據(jù)庫(kù)相關(guān)方法封裝到一個(gè)基類(lèi)中,由業(yè)務(wù)邏輯繼承該基類(lèi)。數(shù)據(jù)庫(kù)連接(Connection)通過(guò)配置WEB服務(wù)器上的連接池,同時(shí)將數(shù)據(jù)源綁定到JNDI,程序直接通過(guò)JNDIName獲取,實(shí)現(xiàn)了數(shù)據(jù)源的可配置性和高度可移植性。獲?。剩蜠IName方法如下:Javax.sql。DataSourceds=(javax。sql.Dat(yī)aSource)ctx.lookup(dsName);//從數(shù)據(jù)源得到連接conn=ds。getConnection();因?yàn)楹竺嫘枰啻握{(diào)用關(guān)閉數(shù)據(jù)庫(kù)連接,故關(guān)閉連接封裝到一個(gè)方法中,具體實(shí)現(xiàn)如下://關(guān)閉數(shù)據(jù)庫(kù)連接publicvoidclose(ResultSetrs,PreparedStatementps,Connectioncon){?try{? if(rs!=null){ ??rs。close();??} ?if(ps!=null){ ??ps。close(); } ?if(con!=null){?? con.close(); ?}?}catch(Exceptione){? e。printStackTrace();?}}輔助類(lèi)(HelpClass)的實(shí)現(xiàn)輔助類(lèi)主要為業(yè)務(wù)類(lèi)提供一些輔助功能,盡量實(shí)現(xiàn)功能的分離和高度封裝。同時(shí)為了加快運(yùn)行速度,減少JVM編譯負(fù)擔(dān),采用PreparedStatement。部分方法如下:(1)獲得公交總數(shù)一般查找總數(shù)用”selectcount(*)frombusinfo”,但這樣因?yàn)槭琼樞虮闅v,一直要遍歷到最后一條,效率不高,此處使用sqlRst。last();使游標(biāo)直接指向最后一條記錄,再用buscount=sqlRst。getRow();記錄最后一條記錄的行號(hào),從而得到了總行數(shù),比起前一個(gè)方法更快而且節(jié)約系統(tǒng)資源。(2)插入數(shù)據(jù)庫(kù)緩存,使得下一個(gè)用戶查詢(xún)?cè)摲桨笗r(shí)可以直接從數(shù)據(jù)庫(kù)中獲取結(jié)果,從而大大的節(jié)約了用戶時(shí)間和系統(tǒng)資源。實(shí)現(xiàn)方法如下:Stringsql="insertintozhuancheng(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();用戶查詢(xún)時(shí)若數(shù)據(jù)庫(kù)中已有緩存數(shù)據(jù),則調(diào)用以下方法獲取緩存的換乘數(shù)據(jù):Stringsql1="select*fromzhuanchengwhereid="+”'”+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");業(yè)務(wù)邏輯類(lèi)(LogicClass)的實(shí)現(xiàn)(1)查詢(xún)公交線路該方法比較簡(jiǎn)單,通過(guò)“select*frombusinfowherebusno="+busno”即可得到符合條件的公交車(chē),同時(shí)返回用戶需要的數(shù)據(jù)。(2)按站查詢(xún)經(jīng)過(guò)的公交線路,步驟如下:①通過(guò)輔助類(lèi)判斷用戶輸入的站名或者附近標(biāo)志名,并找到對(duì)應(yīng)的公交站名。②通過(guò)Sql語(yǔ)句找到經(jīng)過(guò)該站的公交車(chē),存放在一個(gè)集合中并返回。(3)按起點(diǎn)終點(diǎn)查找乘坐方案這是本系統(tǒng)中最復(fù)雜的一塊,通過(guò)前面提到的基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法和上下矩陣算法來(lái)實(shí)現(xiàn),具體實(shí)現(xiàn)方法如下:①通過(guò)start=tool。getbusstop(start);end=tool。getbusstop(end);來(lái)確定起點(diǎn)和終點(diǎn)的公交站名.②檢驗(yàn)站名是否存在,存在則繼續(xù)往下,不存在則返回提示信息。③若站名存在,則嘗試從數(shù)據(jù)庫(kù)中取得直達(dá)緩存信息,如數(shù)據(jù)庫(kù)中沒(méi)有直達(dá)信息,則查找換乘信息。④若數(shù)據(jù)庫(kù)中沒(méi)有緩存,則開(kāi)始查找有無(wú)直達(dá)線路,找到后把結(jié)果存入數(shù)據(jù)庫(kù).⑤如果沒(méi)有直達(dá)方案,則開(kāi)始查找1次換乘方案,找到后按照經(jīng)過(guò)站數(shù)排序,站數(shù)少的排前面,由于換乘方案過(guò)多,故只返回前幾條。由于一次換乘結(jié)果可能成百上千,故只給用戶前幾條換乘方案進(jìn)行選擇,先將全部換乘方案按經(jīng)過(guò)車(chē)站數(shù)進(jìn)行排序,再取前4條返回給用戶.排序類(lèi)為一個(gè)實(shí)現(xiàn)了Serializable和Comparable的工具類(lèi),具體排序方法在compareTo方法中實(shí)現(xiàn),通過(guò)compareTo(Objectb)來(lái)定義如何排序,代碼如下:publicintcompareTo(Objectb){SortBeansort=(SortBean)b;return(this.length—sort。length);}⑥換乘得到結(jié)果后放入Collection中返回。⑦最后把找到的結(jié)果集寫(xiě)入到數(shù)據(jù)庫(kù)緩存中.tool.insertDB(start,end,zhuanchengresult[0],zhuanchengresult[1],zhuanchengresult[2],zhuanchengresult[3]);⑧如果找不到一次換乘(這種情況非常渺茫),而用戶又非常執(zhí)著的要繼續(xù)找公交車(chē),就不得不使用二次換乘,算法在3。3節(jié)已有說(shuō)明,下面列出具體做法:首先查找出經(jīng)過(guò)起點(diǎn)站和終點(diǎn)站的線路,再通過(guò)線路找到該站能直達(dá)的所有站點(diǎn),以起點(diǎn)站為例:??Collectionstop1bus=findbusnobystop(stop1);//經(jīng)過(guò)stop1的公交車(chē)??Collectionstop2bus=findbusnobystop(stop2);//經(jīng)過(guò)stop2的公交車(chē)Iteratoritr=stop1bus.iterator();??while(itr.hasNext()){???Iteratorinitr1=searchbusline((String)itr.next()).iterator(); ??while(initr1.hasNext()){????Stringstopname=(String)initr1.next();? ??map1.put(stopname,"rubbish”);這里使用HashMap的KEY作為存放站名的容器,因?yàn)閺囊粋€(gè)站臺(tái)輻射出去的公交線路經(jīng)過(guò)的站點(diǎn)往往有重復(fù),而HashMap在KEY重復(fù)的時(shí)候只是重新設(shè)置了VALUE值,KEY值則無(wú)法重復(fù)插入,故選用HashMap。在分別找到起點(diǎn)和終點(diǎn)能直達(dá)的站點(diǎn)集合后,就開(kāi)始進(jìn)行循環(huán)查找,開(kāi)始檢驗(yàn)起點(diǎn)能直達(dá)的站點(diǎn)中是否有能直達(dá)終點(diǎn)能直達(dá)站點(diǎn)的站點(diǎn),如有,則證明可以進(jìn)行二次換乘。? Iteratorkey1=map1。keySet()。iterator(); ?Iterat(yī)orkey2=map2.keySet().iterator(); ?while(key1.hasNext()){? ?while(key2.hasNext()){? ??if(zhida.isEmpty()){??? ?Stringsop1=(String)key1。next(); ? ??Stringsop2=(String)key2。next();? ?zhida=zhida(sop1,sop2); ??}?? ?//內(nèi)層break? ??if(!zhida.isEmpty()){? ???System.out。println("找到中途換乘”+zhida。size());???? break;????} ?}???//外層break ?if(!zhida。isEmpty()){? System.out。println(”break2"+zhida.size());? ? break;? ?}??}找到一條可行的線路后,再開(kāi)始查找起點(diǎn)到轉(zhuǎn)乘點(diǎn)1的線路和轉(zhuǎn)乘點(diǎn)2到重點(diǎn)的線路,并放到一個(gè)String中://第1站到第2站的車(chē)號(hào)??while(one2two.iterator().hasNext()){ ??System。out.println("step3"); ???nonstop2=(Nonstop)one2two。iterator().next();busno1+=nonstop2.getBusno()+",”; ?}??? ??//第3站到第4站的車(chē)號(hào)???while(three(cuò)2four.iterator().hasNext()){? ??System.out.println(”step4");? ??nonstop3=(Nonstop)three2four.iterator().next(); ? ?busno2+=nonstop3.getBusno()+",";???}最后把起點(diǎn)到第一換乘站,第一換乘站到第二換乘站,第二換乘站到終點(diǎn)站3段線路連接到一個(gè)String中并將改String添加到集合中,最后返回該集合:???result=”從"+stop1+"站出發(fā),乘坐”+busno1+”到"+huanchengstop1+"站轉(zhuǎn)”+nonstop。getBusno()+”到"+ huanchengstop2+"站轉(zhuǎn)"+busno2+"到"+stop2;? ?twohg.add(result);? System.out.println("findone");? }catch(Exceptione){???e.printStackTrace();??}??returntwohg;本算法采用了3個(gè)bean來(lái)保存3段路線的信息,每個(gè)bean中分別有start,end,busno3個(gè)屬性,使得算法條理更加清晰化.至此站站查詢(xún)?nèi)客瓿?服務(wù)器對(duì)外接口(Servlet)的實(shí)現(xiàn)本系統(tǒng)采用Servlet作為和手機(jī)通訊的接口,采用HTTP的應(yīng)答機(jī)制,免去了自己寫(xiě)應(yīng)答的麻煩,系統(tǒng)在執(zhí)行了一次查詢(xún)后在服務(wù)器的LO(píng)G中記錄一次,同時(shí)數(shù)據(jù)庫(kù)中負(fù)責(zé)記錄查詢(xún)次數(shù)的計(jì)數(shù)器加1。發(fā)送信息關(guān)鍵代碼如下:response.setContentType(CONTENT_TYPE);DataOutputStreamdos=newDataOutputStream(response。getOutputStream());Iteratoritr=coll。iterator();while(itr。hasNext()){result=result+(String)itr。next();}result+=”\n"+tool.getmessage();dos.writeUTF(result);dos.close();有過(guò)開(kāi)發(fā)經(jīng)驗(yàn)的人都知道,在做JAVA開(kāi)發(fā)時(shí)傳輸中文常常遇到亂碼現(xiàn)象,這里我在CONTENT_TYPE里面編碼方式設(shè)置成GB2312,并且在客戶端發(fā)送數(shù)據(jù)時(shí)也把編碼設(shè)置成GB2312,同時(shí)采用writeUTF方法,成功解決中文問(wèn)題。Web端的實(shí)現(xiàn)本系統(tǒng)Web端采用Struts框架,嚴(yán)格遵循MVC模式,用戶提交信息后先放到FormBean中暫存,然后在Action中實(shí)現(xiàn)業(yè)務(wù)方法的調(diào)用,實(shí)現(xiàn)代碼的高度封裝性和分離性。本系統(tǒng)只采用了一個(gè)Action作為中央控制器,通過(guò)參數(shù)關(guān)鍵字判斷是那種查詢(xún),同時(shí)查詢(xún)頁(yè)面和結(jié)果頁(yè)面為同一頁(yè)面,在Action中查詢(xún)完畢后統(tǒng)一放入Collection中傳遞到結(jié)果頁(yè)面中,使得頁(yè)面重用性大大提高。首頁(yè)顯示圖7所示.圖7首頁(yè)圖樣查詢(xún)頁(yè)面顯示如圖8所示。圖8查詢(xún)頁(yè)面Action作為中央控制器負(fù)責(zé)執(zhí)行判斷用戶輸入和查詢(xún),以線路查詢(xún)?yōu)槔诵拇a如下:判斷用戶提交內(nèi)容://如果用戶按公交車(chē)號(hào)查詢(xún)if(busno!=null)try{busnoresult=dealbus。searchbusline(busno);httpServletRequest.setAttribute("buslineresult",busnoresult);dealActionForm。setBusno(null);busno=null;result=null;//返回“buslineresult"對(duì)應(yīng)的頁(yè)面,具體配置在struts-configure里面設(shè)置return(actionMapping.findForward(”buslineresult”));}catch(Exceptione){//將錯(cuò)誤信息放到request中傳遞到錯(cuò)誤頁(yè)面?httpServletRequest。setAttribute(”errorMsg",e.getMessage());e.printStackTrace();return(actionMapping。findForward("error"));}WAP端的實(shí)現(xiàn)WAP端采用WML(WirelessMarkupLanguage-無(wú)線標(biāo)記語(yǔ)言)編寫(xiě),無(wú)限標(biāo)記語(yǔ)言WML(WirelessMarkupLanguage)是一種基于擴(kuò)展標(biāo)記語(yǔ)言XML(ExtensionMarkupLanguage)的語(yǔ)言,是XML的子集。它可以顯示各種文字、圖像等數(shù)據(jù),是由WAP論壇(http://www.wapforum.org)提出并專(zhuān)為無(wú)線設(shè)備用戶提供交互界面而設(shè)計(jì)的,目前版本為1.1版.這些無(wú)線設(shè)備包括移動(dòng)電話,呼機(jī)和個(gè)人數(shù)字助理PDA(PersonalDigitalAssistants)等。WAP模塊主要有首頁(yè),功能選擇頁(yè)面,線路查詢(xún)頁(yè)面,站站查詢(xún)頁(yè)面等組成,部分頁(yè)面顯示如下:功能選擇頁(yè)面,讓用戶選擇使用哪種方式進(jìn)行查詢(xún),如圖9所示。圖9功能選擇頁(yè)面客戶端下載頁(yè)面,有JAR和JAD可供選擇,以兼容支持不同的手機(jī),如圖10所示。圖10客戶端下載頁(yè)面詳細(xì)原理以線路查詢(xún)?yōu)槔?,線路查詢(xún)提交代碼如下:〈gohref=”selectNumber.jsp”method="post”〉<postfieldname="busno"value=”$(busno:n)"/〉</go>其中$(busno:n)為變量的表示方法,:n的意思為變量中沒(méi)有ESCAPE字符,即不需要進(jìn)行ESCAPE八進(jìn)制轉(zhuǎn)碼。服務(wù)器端處理代碼(selectNumber.jsp)如下:if(busno!=null){try{tool.fangwen();//用戶查詢(xún)計(jì)數(shù)器加1Dealbusdealbus=newDealbus();coll=dealbus.searchbusline(busno);//調(diào)用業(yè)務(wù)處理方法Iteratoritr=coll.iterator();//將結(jié)果輸出到一個(gè)String中while(itr.hasNext()){result=result+(String)itr.next();}然后將結(jié)果顯示在用戶手機(jī)上:<wml〉〈cardid="selectNumber"title="查詢(xún)結(jié)果"><palign=”center”〉<%=result%></p><palign="left"><ahref=”xianlu.wml">返回</a></p><palign=”left">〈ahref="index.wml”〉返回首頁(yè)</a>〈/p〉</card></wml>手機(jī)客戶端的實(shí)現(xiàn)客戶端界面的實(shí)現(xiàn)界面使用了內(nèi)部類(lèi)技術(shù),整個(gè)界面是一個(gè)大類(lèi),里面的每一個(gè)選項(xiàng)都是一個(gè)內(nèi)部類(lèi),并且部署監(jiān)聽(tīng)器,實(shí)現(xiàn)按鍵事件監(jiān)聽(tīng)??丶砑尤缦吕?//定義控件??mainList=newList(”請(qǐng)選擇功能",Choice.IMPLICIT,listitem,null); ?mainnokCommand=newCommand(”確定",Command.OK,1);String[]listitem={”查詢(xún)公交線路","查詢(xún)乘坐方案","按站查公交","網(wǎng)絡(luò)設(shè)置”,”系統(tǒng)說(shuō)明"};??exitCommand=newCommand(”退出",Command.EXIT,1); cancelCommand=newCommand("取消",Command。CANCEL,1);//添加控件??mainList。addCommand(exitCommand);??mainList。addCommand(mainnokCommand);//添加監(jiān)聽(tīng)器??mainList.setCommandListener(this);//把該面板顯示到屏幕上? display.setCurrent(mainList);客戶端工作原理下面以線路查詢(xún)功能為例,詳細(xì)說(shuō)明J2ME手機(jī)客戶端工作原理.界面控件代碼如下:searchField=newTextField("請(qǐng)輸入查詢(xún)線路","",3,TextField。NUMERIC);??backCommand1=newCommand("返回”,Command.BACK,1);//返回按鈕? okCommand1=newCommand("確定",Command。OK,1);//確定按鈕//把控件添加到屏幕上 ?append(searchField);? addCommand(backCommand1);??addCommand(okCommand1);//添加監(jiān)聽(tīng)器? setCommandListener(this);代碼顯示效果如圖11所示,其中TextField.NUMERIC將用戶輸入鎖定為數(shù)字,起到了入口數(shù)據(jù)控制作用。界面處理事件代碼如下:publicvoidcommandAction(Commandc,Displayabled){//如果按下后退按鈕,則 if(c==backCommand1){ display.setCurrent(mainList); }//如果按下確定按鈕,則調(diào)用查詢(xún)方法?if(c==okCommand1){??SearchActionsearchaction=newSearchAction();//啟動(dòng)線程 ?Threadt1=newThread(searchaction);??t1。start();//將屏幕切換到查詢(xún)結(jié)果界面??display.setCurrent(searchaction);查詢(xún)方法基于HTTP原理和JAVA線程技術(shù),查詢(xún)到需要的數(shù)據(jù)后就斷開(kāi)連接,節(jié)約用戶的流量,執(zhí)行查詢(xún)時(shí)先啟動(dòng)查詢(xún)線程,判斷當(dāng)前網(wǎng)絡(luò)是CMWAP還是CMNET,然后連接到服務(wù)器接口Servlet
,再將查詢(xún)數(shù)據(jù)發(fā)送給服務(wù)器,然后從服務(wù)器那里讀取返回?cái)?shù)據(jù),讀取完畢后關(guān)閉連接。關(guān)鍵代碼如下:?? result1.setText("正在連接。..");//給用戶提示信息//如果網(wǎng)絡(luò)情況是CMNET,則直接進(jìn)行連接?? ?if(iscmnet.endsWith("true")){????http=(HttpConnection)Connector.open(?? ???”http://127.0.0。1:8080/"????? +"cdbusapp/findline?busno="+no, ? ???Connector.READ,true);?? ?}//如果網(wǎng)絡(luò)情況是CMWAP,則通過(guò)移動(dòng)代理服務(wù)器進(jìn)行連接????if(iscmnet。endsWith("false”)){? http=(HttpConnection)Connector。open("http://10.0.0.172:80/”+"cdbusapp/findline?busno="+no,Connector.READ,true); ?? http.setRequestProperty("X-Online-Host”,"127.0。0。1:8080"); ? ?}//如果連接成功,則讀取數(shù)據(jù)? ? if(http。getResponseCode()==HttpConnection。HTTP_OK){ ?? ?result1。setText("正在讀取。。.”);???? iStrm=http.openInputStream();?????DataInputStreamdis=newDataInputStream(iStrm);//將讀入的流轉(zhuǎn)換為字符串輸出??? ?result1。setText(dis。readUTF());? ??dis.close();?? ?}手機(jī)網(wǎng)絡(luò)設(shè)置?這里需要提到網(wǎng)絡(luò)設(shè)置問(wèn)題,因?yàn)橹袊?guó)移動(dòng)設(shè)置了2個(gè)網(wǎng)絡(luò)接入點(diǎn)CMNET和CMWAP,以NOKIA為代表的手機(jī)往往默認(rèn)接入點(diǎn)是CMNET,而摩托羅拉之類(lèi)的手機(jī)的默認(rèn)接入點(diǎn)常常是CMWAP,所以本系統(tǒng)添加了網(wǎng)絡(luò)設(shè)置這個(gè)選項(xiàng),以便讓用戶選擇自己的網(wǎng)絡(luò)情況,如果用戶不清楚,也可以在查詢(xún)出錯(cuò)時(shí)看到提示。手機(jī)公交查詢(xún)系統(tǒng)測(cè)試與分析測(cè)試環(huán)境本系統(tǒng)測(cè)試環(huán)境:CPUP42.8G×2,內(nèi)存DDR4001G,MySQL5.0,TOMCAT5。016/Weblogic8.0,在WIN2000/XP下均測(cè)試通過(guò)。建議用戶在CPUP4,內(nèi)存1G及以上,數(shù)據(jù)庫(kù)版本MySQL5.0以上,WIN2000PRO/XP,2003,WIN2000SERVER及以上軟硬件平臺(tái)使用.運(yùn)行與測(cè)試以線路查詢(xún)?yōu)槔瑢?duì)手機(jī)公交查詢(xún)系統(tǒng)測(cè)試如下:(1)進(jìn)入手機(jī)客戶端主界面,客戶端用戶界面顯示如圖11所示.圖11手機(jī)客戶端主界面(2)進(jìn)入線路查詢(xún)界面,如圖12所示。圖12線路查詢(xún)界面(3)查詢(xún)結(jié)果界面顯示圖13所示。圖13線路查詢(xún)結(jié)果界面測(cè)試結(jié)果本系統(tǒng)采用白盒和黑盒測(cè)試相結(jié)合的方
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 5《七律 長(zhǎng)征》 說(shuō)課稿-2024-2025學(xué)年語(yǔ)文六年級(jí)上冊(cè)統(tǒng)編版001
- 2024年四年級(jí)英語(yǔ)下冊(cè) Unit 7 What's the matter第4課時(shí)說(shuō)課稿 譯林牛津版001
- 18《慈母情深》說(shuō)課稿-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)001
- 2025門(mén)窗工程承包合同
- 2025市場(chǎng)咨詢(xún)服務(wù)合同范本
- 2025嫁接種苗技術(shù)服務(wù)合同書(shū)
- 2024-2025學(xué)年高中歷史 第2單元 西方人文精神的起源及其發(fā)展 第7課 啟蒙運(yùn)動(dòng)說(shuō)課稿 新人教版必修3
- 信息平臺(tái)建設(shè)合同范本
- 7 《我在這里長(zhǎng)大》第一課時(shí)(說(shuō)課稿)2023-2024學(xué)年統(tǒng)編版道德與法治三年級(jí)下冊(cè)
- 書(shū)推廣合同范例
- 機(jī)器狗:技術(shù)成熟性能優(yōu)越場(chǎng)景剛需放量在即2025
- 2025年村民代表會(huì)議講話稿(3篇)
- 2025年日歷表(A4版含農(nóng)歷可編輯)
- 蒸汽換算計(jì)算表
- 四年級(jí)計(jì)算題大全(列豎式計(jì)算,可打印)
- 科技計(jì)劃項(xiàng)目申報(bào)培訓(xùn)
- 591食堂不合格食品處置制度
- 國(guó)際金融課件(完整版)
- 220t鍋爐課程設(shè)計(jì) 李學(xué)玉
- 全英文劇本 《劇院魅影》
- 北京城的中軸線PPT通用課件
評(píng)論
0/150
提交評(píng)論