【正文】
oute bees more difficult. Presently, the plex 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 Inter. Finally, through testing and analyzing, it confirms this system is some feasibility and practical value. Key words: City Bus Inquiry。本系統(tǒng)通過對(duì)城市公交系統(tǒng)的調(diào)研,提出了基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法和上下矩陣算法;以 J2ME 作為開發(fā)工具,將其移植到用戶手機(jī)上,借助于無(wú)線互聯(lián)網(wǎng),能為客戶隨時(shí)隨地提供公交信息的查詢;通過測(cè)試與分析,證實(shí)了該 系統(tǒng)的可行性及實(shí)用價(jià)值。 在我國(guó),隨著城市化的快速發(fā)展,城市公交系統(tǒng)也隨之迅速擴(kuò)大,且更加復(fù)雜化,找不到合適的乘車路線的事情經(jīng)常發(fā)生。而隨著信息技術(shù)的飛速發(fā)展,手機(jī)所蘊(yùn)藏的無(wú)限商機(jī),正在被人們逐步發(fā)掘,它不再僅僅局限于通信這一單一功能,正在朝著手提電腦甚至更完善的方向發(fā) 展。 畢業(yè)設(shè)計(jì) ( 論文 ) 基于 J2ME 的公交查詢系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 論文作者姓名: 申請(qǐng)學(xué)位專業(yè): 申請(qǐng)學(xué)位類別: 指導(dǎo)教師姓名(職稱): 論文提交日期: 基于 J2ME 的公交查詢系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 摘 要 當(dāng)今,人類社會(huì)已步入信息時(shí)代,信息化革命給所有領(lǐng)域帶來了前所未有的變革。電腦、手機(jī)等信息工具的普及,人們獲取信息變得更加完善、快捷。由于手機(jī)價(jià)廉物美,它已成為人們獲得在生活工作上等各種信息服務(wù)的最佳選擇。當(dāng)前,復(fù)雜的公交系統(tǒng)使得用戶往往處于迷惑的狀態(tài),給出行帶來諸多不便,而手機(jī)公交查詢系統(tǒng)的選題也正是基于該背景。 關(guān)鍵詞 : 公交查詢;站點(diǎn)優(yōu)先級(jí);公交換乘算法;手機(jī);無(wú)線互聯(lián)網(wǎng) Design and Implementation of Citybus Information Inquiry System Based on J2ME Abstract At present, the human society marches into the information time。 Stand Priority。 Handset。就武漢市而言, 調(diào)研 數(shù)據(jù) 顯示 ,武漢市乘客以公交方式出行的比例為 %,可見城市公交的重要性。 也常常造成人們的出行不便。當(dāng)前,復(fù)雜的公交系統(tǒng)使得用戶往往處于迷惑的狀態(tài),給出行帶來諸多不便,在另一個(gè)方面,我國(guó)城市 的手機(jī)普及率已經(jīng)非常高了,如果能把這兩種情況結(jié)合起來,開發(fā)出一種基于手機(jī)的公交查詢軟件,將會(huì)給用戶帶來便捷。即使用戶找到提供新功能的程序,也往往由于程序和手機(jī)平臺(tái)無(wú)法兼容而不能使用。 JAVA 以 其可移植性,資源重用性,安全性,移動(dòng)性以及強(qiáng)大的網(wǎng)絡(luò)功能迅速占領(lǐng)了全球手機(jī)市場(chǎng),未來的手機(jī)出貨將主要以 JAVA 手機(jī)為主。硬件中加快集成 Java 預(yù)計(jì)將進(jìn)一步促進(jìn) Java 在市場(chǎng)中的普及, J2ME 將成為事實(shí)上的標(biāo)準(zhǔn)。 就國(guó)內(nèi)來說, JAVA 是未來無(wú)線數(shù)據(jù)服務(wù)的主流方向,也開始采用基于開放應(yīng)用平臺(tái)的移動(dòng)增值服務(wù)架構(gòu)。 JAVA 手機(jī)已經(jīng)成為絕大多數(shù)用戶選購(gòu)手機(jī)時(shí)的必要考慮條件。另外, 還支 持服務(wù)器 Push 體系架構(gòu),這樣,你的手機(jī)能夠收到來自服務(wù)器的報(bào)警、消息或者廣播,根據(jù)要求啟動(dòng)手機(jī)上的應(yīng)用程序進(jìn)行操作。新版的 MIDP 規(guī)范中規(guī)定了如何在移動(dòng)設(shè)備上發(fā)現(xiàn)、安裝、更新和刪除 MIDlet 套件;同時(shí),提供應(yīng)用程序下載的服務(wù)提供商還能夠判斷該 MIDlet 套件是否能夠運(yùn)行在申請(qǐng)下載的設(shè)備上,并且從設(shè)備上獲取安裝、更新和刪除的信息。該模型已經(jīng)被眾多技術(shù)領(lǐng)先的移動(dòng)設(shè)備制造商和服務(wù)提供商所采 納。JTWI 將保證 J2ME 應(yīng)用程序在不同制造商的產(chǎn)品上的兼容性。 本課題研究的意義 在我國(guó),隨著城市化的快速發(fā)展,市公交系統(tǒng)也隨之迅速擴(kuò)大,且更加復(fù)雜化,找不到合適的乘車路線的事情經(jīng)常發(fā)生?;谝陨显颍鞠到y(tǒng)通過對(duì)城市公交系統(tǒng)的調(diào)研,提出了基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法和上下矩陣算法;以 J2ME作為開發(fā)工具,將其移植到用戶手機(jī)上,借助于無(wú)線互聯(lián)網(wǎng),能為客戶隨時(shí)隨地提供公交信息的查詢 。又由于當(dāng)前絕大多數(shù) 手機(jī)都支持 JAVA,而 J2EE 和 J2ME 因?yàn)橥鲆婚T,具備先天性無(wú)縫銜接的優(yōu)勢(shì),故本系統(tǒng)采用 J2ME 和 J2EE 結(jié)合的方式進(jìn)行開發(fā)。手機(jī)客戶端采用 J2ME 編程,使用線程技術(shù)實(shí)現(xiàn)和服務(wù)器的網(wǎng)絡(luò)通信,并且在從服務(wù)器取得數(shù)據(jù)后自動(dòng)斷開連接,節(jié)約用戶流量。 ( 2)學(xué)習(xí)并掌握 J2EE,J2ME 等相關(guān)知識(shí)。 各章節(jié)的安排 本文章詳細(xì)介紹了該系統(tǒng)的分析和實(shí)現(xiàn)各個(gè)流程。在接下來的第二章里,對(duì)系統(tǒng)的需求分析和與之對(duì)應(yīng)的開發(fā)工具介紹。第四章是系統(tǒng)功能具體實(shí)現(xiàn)的介紹其中包括了關(guān)鍵的編程技術(shù),功能的代碼說明。最后,是作者通過對(duì)本系統(tǒng)的研究和設(shè)計(jì)總結(jié)出的系統(tǒng)特點(diǎn)以及研究心得。就武漢市而言,調(diào) 研結(jié)果中的另一個(gè)數(shù)據(jù),武漢市乘客以公交方式出行的比例為 %, 可見城市公交的重要性。 也常常造成人們的出行不便。同時(shí)由于城市公交系統(tǒng)在規(guī)劃的時(shí)候是以站作為單位進(jìn)行規(guī)劃的,故經(jīng)過站數(shù)的多少直接決定了公交線路的長(zhǎng)短和時(shí)間。同時(shí),用戶在手機(jī)上可以通過 J2ME 手機(jī)客戶端和 WAP 的方式進(jìn)行查詢,在電腦上可以通過訪問 WEB 站點(diǎn)的方式進(jìn)行查詢。根據(jù)手機(jī)公交查詢系統(tǒng)的業(yè)務(wù)流程圖,明確了整個(gè)系統(tǒng)的流程。 圖 1 WEB 和 WAP 功能模塊圖 圖 2 手機(jī)客戶端流程圖 第 5 頁(yè) 共 27 頁(yè) ( 2) J2ME 手機(jī)客戶端的系統(tǒng)流程圖,如圖 2 所示。 從該流程圖中可以看出,按起點(diǎn)終點(diǎn)查詢是整個(gè)系統(tǒng)最重要的一部分,也是本系統(tǒng)最能體現(xiàn)算法的一部分,經(jīng)過對(duì)成都公交系統(tǒng)的觀察和分析,本系統(tǒng)提出了一次換乘時(shí)采用基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法,如果第一次換乘沒有可以換乘的方案,則采用上下矩陣算法,得出二次換乘信息,同時(shí)把得到的方案緩存到數(shù)據(jù)庫(kù)中,下個(gè)用戶查詢相同起點(diǎn)終點(diǎn)時(shí)就直接從數(shù)據(jù)庫(kù)中提取緩存信息,大大的節(jié)約了用戶的時(shí)間和系統(tǒng)資源。 本系統(tǒng)采用的開發(fā)工具為 MySQL+Eclipse+Tomcat/Weblogic, MySQL 是一個(gè)廣受 Linux 社區(qū)人們喜愛的半商業(yè)的數(shù)據(jù)庫(kù)。 Eclipse 是一個(gè)開放源代碼的、基于 Java 的可擴(kuò)展開發(fā)平臺(tái)。幸運(yùn)的是, Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的 插件集,包括 Java 開發(fā)工具( Java Development Tools, JDT)。由于有了 Sun 的參與和支持,最新的Servlet 和 JSP 規(guī)范總是能在 Tomcat 中得到體現(xiàn), Tomcat5 支持最新的 Servlet 和 JSP 規(guī)范。 3 手機(jī)公交查詢系統(tǒng)的設(shè)計(jì) 手機(jī)公交查詢系統(tǒng)算法的設(shè)計(jì) 直達(dá)的算法設(shè)計(jì) 現(xiàn)有 A,B 兩個(gè)公交站,通過數(shù)據(jù)庫(kù)查詢語(yǔ)句“ select * from businfo” 獲得全部公交線路信息,再把每一路車的信息依次迭代出來,判斷 A 站和 B 站是否同時(shí)在該線路中,如結(jié)果為 true,則可以直達(dá),同時(shí)將直達(dá)方案存入一個(gè)集合中, 第 6 頁(yè) 共 27 頁(yè) 繼續(xù)向下遍歷,如果結(jié)果為 false,則該車不能直達(dá),繼續(xù)向下遍歷。判斷結(jié)束后,再按照經(jīng)過站點(diǎn)總數(shù)對(duì)換乘方案進(jìn)行排序,因?yàn)閾Q乘結(jié)果往往數(shù)以百計(jì),所以只取結(jié)果集的前 N 條記錄展現(xiàn)給用戶。 一次換乘算法,如 圖 3 所示。至此為止,根據(jù)公交線路設(shè)計(jì)的理論,是肯定可以找到二次換乘的方案的,故不再考慮 3 次換乘方案。 手機(jī)公交查詢數(shù)據(jù)庫(kù)的設(shè)計(jì) 數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì) 圖 5 數(shù)據(jù)庫(kù)主要 ER 圖 準(zhǔn)確了解與分析用戶需求(包括數(shù)據(jù)與處理)是整個(gè)設(shè)計(jì)過程的基礎(chǔ) 。 由于本系統(tǒng)涉及到大量數(shù)據(jù)的讀取,并且對(duì)安全性要求不高,故選用占用系統(tǒng)資源較少并且速度相對(duì)較快的 MySQL 作為本系統(tǒng)的數(shù)據(jù)庫(kù)。由上述可以確認(rèn)該算法所關(guān)系到的數(shù)據(jù)表。 公交信息相關(guān)數(shù)據(jù)庫(kù)的數(shù)據(jù)字典,如表 1 所示。如表 2 所示。如表 3 所示。如表 4 所示。如表 5 所示。如表 6 所示。下面將具體的闡述如何實(shí)現(xiàn)這些功能。 第 11 頁(yè) 共 27 頁(yè) 圖 6 系統(tǒng)組織結(jié)構(gòu)圖 基類( Base Class)的實(shí)現(xiàn) 采用 AO 模式,將數(shù)據(jù)庫(kù)相關(guān)方法封裝到一個(gè)基類中,由業(yè)務(wù)邏輯繼承該基類。獲取 JNDI Name 方法如下: ds = () (dsName) 。 因?yàn)楹竺嫘枰啻握{(diào)用關(guān)閉數(shù)據(jù)庫(kù)連接,故關(guān)閉連接封裝到一個(gè)方法中,具體實(shí)現(xiàn)如下: //關(guān)閉數(shù)據(jù)庫(kù)連接 第 12頁(yè) 共 27頁(yè) public void close(ResultSet rs,PreparedStatement ps,Connection con){ try{ if(rs!=null){ ()。 } if(con!=null){ ()。 } } 輔助類( Help Class)的實(shí)現(xiàn) 輔助類主要為業(yè)務(wù)類提供一些輔助功能,盡量實(shí)現(xiàn)功能的分離和高度封裝。部分方法如下: ( 1)獲得公交總數(shù) 一般查找總數(shù)用 ”select count(*) from businfo”,但這樣因?yàn)槭琼樞虮闅v,一直要遍歷到最后一條,效率不高,此處使用 ()。記錄最后一條記錄的行號(hào),從而得到了總行數(shù),比起前一個(gè)方法更快而且節(jié)約系統(tǒng)資源。實(shí)現(xiàn)方法如下: String sql=insert into zhuancheng(id,result1,result2,result3,result4) VALUES(?,?,?,?,?)。 (1,start+end)。 (3,result2)。 (5,result4)。 用戶查詢時(shí)若數(shù)據(jù)庫(kù)中已有緩存數(shù)據(jù),則調(diào)用以下方法獲取緩存的換乘數(shù)據(jù): 第 13頁(yè) 共 27頁(yè) String sql1=select * from zhuancheng where id=+39。 ps1 = (sql1) 。 while(()){ result1=(result1)。 result3=(result3)。 業(yè)務(wù)邏輯類( Logic Class)的實(shí)現(xiàn) ( 1)查詢公交線路 該方法比較簡(jiǎn)單,通過“ select * from businfo where busno=+busno”即可得到符合條件的公交車,同時(shí)返回用戶需要的數(shù)據(jù)。 ② 通過 Sql 語(yǔ)句找到經(jīng)過該站的公交車,存放在一個(gè)集合中并返回。 end=(end)。 ② 檢驗(yàn)站名是否存在,存在則繼續(xù)往下,不存在則返回提示信息。 ④ 若數(shù)據(jù)庫(kù)中沒有緩存,則開始查找有無(wú)直達(dá)線路,找到后把結(jié)果存入數(shù)據(jù)庫(kù)。 由于一次換乘結(jié)果可能成百上千 ,故只給用戶前幾條換乘方案進(jìn)行選擇 ,先將全部換乘方案按經(jīng)過車站數(shù)進(jìn)行排序 ,再取前 4 條返回給用戶。 return () 。 ⑦ 最后把找到的結(jié)果集寫入到數(shù)據(jù)庫(kù)緩存中。 ⑧如果找不到一次換乘(這種情況非常渺茫),而用戶又非常執(zhí)著的要繼續(xù)找公交車,就不得不使用二次換乘,算法在 節(jié)已有說明,下面列出具體做法: 首先查找出經(jīng)過 起點(diǎn)站和終點(diǎn)站的線路,再通過線路找到該站能直達(dá)的所有站點(diǎn),以起點(diǎn)站為例: Collection stop1bus=findbusnobystop(stop1)。//經(jīng)過 stop2 的公交車 Iterator itr=()。 while(())