畢業(yè)設(shè)計-基于J2ME的公交查詢系統(tǒng)的設(shè)計與實現(xiàn)論文.doc_第1頁
畢業(yè)設(shè)計-基于J2ME的公交查詢系統(tǒng)的設(shè)計與實現(xiàn)論文.doc_第2頁
畢業(yè)設(shè)計-基于J2ME的公交查詢系統(tǒng)的設(shè)計與實現(xiàn)論文.doc_第3頁
畢業(yè)設(shè)計-基于J2ME的公交查詢系統(tǒng)的設(shè)計與實現(xiàn)論文.doc_第4頁
畢業(yè)設(shè)計-基于J2ME的公交查詢系統(tǒng)的設(shè)計與實現(xiàn)論文.doc_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

畢畢 業(yè)業(yè) 設(shè)設(shè) 計計( 論論 文文) 基于基于 j2me 的公交查詢系統(tǒng)的設(shè)計與實現(xiàn)的公交查詢系統(tǒng)的設(shè)計與實現(xiàn) 論論文作者姓名:文作者姓名: 申申請請學位學位專業(yè)專業(yè): : 申申請請學位學位類別類別: : 指指導導教教師師姓姓名名( (職職稱稱) ): : 論論文提交日期:文提交日期: 基于基于 j2me 的公交查詢系統(tǒng)的設(shè)計與實現(xiàn)的公交查詢系統(tǒng)的設(shè)計與實現(xiàn) 摘摘 要要 當今,人類社會已步入信息時代,信息化革命給所有領(lǐng)域帶來了前所未有 的變革。電腦、手機等信息工具的普及,人們獲取信息變得更加完善、快捷。 而隨著信息技術(shù)的飛速發(fā)展,手機所蘊藏的無限商機,正在被人們逐步發(fā)掘, 它不再僅僅局限于通信這一單一功能,正在朝著手提電腦甚至更完善的方向發(fā) 展。由于手機價廉物美,它已成為人們獲得在生活工作上等各種信息服務(wù)的最 佳選擇。 在我國,隨著城市化的快速發(fā)展,城市公交系統(tǒng)也隨之迅速擴大,且更加 復雜化,找不到合適的乘車路線的事情經(jīng)常發(fā)生。當前,復雜的公交系統(tǒng)使得 用戶往往處于迷惑的狀態(tài),給出行帶來諸多不便,而手機公交查詢系統(tǒng)的選題 也正是基于該背景。本系統(tǒng)通過對城市公交系統(tǒng)的調(diào)研,提出了基于站點優(yōu)先 級和鄰接矩陣的公交換乘算法和上下矩陣算法;以 j2me 作為開發(fā)工具,將其 移植到用戶手機上,借助于無線互聯(lián)網(wǎng),能為客戶隨時隨地提供公交信息的查 詢;通過測試與分析,證實了該系統(tǒng)的可行性及實用價值。 關(guān)鍵詞關(guān)鍵詞:公交查詢;站點優(yōu)先級;公交換乘算法;手機;無線互聯(lián)網(wǎng) design and implementation of city-bus information inquiry system based on j2me abstract at 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 目目 錄錄 論文總頁數(shù):27 頁 1引言1 1.1課題背景1 1.2國內(nèi)外研究現(xiàn)狀1 1.3本課題研究的意義2 1.4本軟件的開發(fā)方法2 1.5本文的主要工作3 1.5.1研究的主要內(nèi)容3 1.5.2各章節(jié)的安排3 2手機公交查詢的需求分析和開發(fā)工具介紹3 2.1用戶的原始需求3 2.2手機公交查詢系統(tǒng)功能模塊及流程圖4 2.3開發(fā)工具介紹5 3手機公交查詢系統(tǒng)的設(shè)計5 3.1手機公交查詢系統(tǒng)算法的設(shè)計5 3.1.1直達的算法設(shè)計5 3.1.2一次換乘的算法設(shè)計6 3.1.3二次換乘的算法設(shè)計7 3.2手機公交查詢數(shù)據(jù)庫的設(shè)計7 3.2.1數(shù)據(jù)庫的邏輯設(shè)計7 3.2.2數(shù)據(jù)庫的物理設(shè)計8 4手機公交查詢系統(tǒng)功能詳細實現(xiàn)10 4.1服務(wù)器端的實現(xiàn)10 4.1.1基類(base class)的實現(xiàn)11 4.1.2輔助類(help class)的實現(xiàn)12 4.1.3業(yè)務(wù)邏輯類(logic class)的實現(xiàn).13 4.1.4服務(wù)器對外接口(servlet)的實現(xiàn) 16 4.2web 端的實現(xiàn)16 4.3wap 端的實現(xiàn)18 4.4手機客戶端的實現(xiàn)20 4.4.1客戶端界面的實現(xiàn)20 4.4.2客戶端工作原理20 4.4.3手機網(wǎng)絡(luò)設(shè)置22 5手機公交查詢系統(tǒng)測試與分析22 5.1測試環(huán)境22 5.2運行與測試22 5.3測試結(jié)果24 結(jié) 論24 參考文獻25 致 謝26 聲 明27 第 1 頁 共 27 頁 1 引言引言 1.1 課題背景課題背景 作為關(guān)系國計民生的社會公益事業(yè),城市公共交通一直都是政府工作的重 點。就武漢市而言,調(diào)研數(shù)據(jù)顯示,武漢市乘客以公交方式出行的比例為 23.36%, 可見城市公交的重要性。但是從客觀上說,公交硬件建設(shè)跟不上城市建設(shè)的步 伐,是全國大城市尤其是特大城市都正在遭遇的發(fā)展瓶頸。也常常造成人們的 出行不便。 在我國,隨著城市化的快速發(fā)展,市公交系統(tǒng)也隨之迅速擴大,且更加復 雜化,找不到合適的乘車路線的事情經(jīng)常發(fā)生。當前,復雜的公交系統(tǒng)使得用 戶往往處于迷惑的狀態(tài),給出行帶來諸多不便,在另一個方面,我國城市的手 機普及率已經(jīng)非常高了,如果能把這兩種情況結(jié)合起來,開發(fā)出一種基于手機 的公交查詢軟件,將會給用戶帶來便捷。 1.2 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀 從有關(guān)的文獻看, 如今全世界可以支持 j2me 的手持設(shè)備如今已經(jīng)達到了 七千五百萬,有 34 個運營商在使用 j2me 技術(shù); 傳統(tǒng)手機在出廠之后,功能(通訊錄、游戲、商務(wù)應用)就已經(jīng)固化,用 戶將無法刪除無用的功能,同樣也不能增加新的功能。即使用戶找到提供新功 能的程序,也往往由于程序和手機平臺無法兼容而不能使用。這成為了手機行 業(yè)發(fā)展的瓶頸,而 java 在移動終端領(lǐng)域的出現(xiàn)改變了這一局面。java 以其 可移植性,資源重用性,安全性,移動性以及強大的網(wǎng)絡(luò)功能迅速占領(lǐng)了全球 手機市場,未來的手機出貨將主要以 java 手機為主。 據(jù)美國高科技研究公司 strategies unlimited 日前發(fā)表的2.5g 和 3g 手機 性能:2002-2006 全球分析與市場預測的報告稱,市場上 java 手機的數(shù)量預 計將每年翻一番,到 2006 年將從 2001 年的 1,910 萬部增長到 5.53 億部。硬件 中加快集成 java 預計將進一步促進 java 在市場中的普及,j2me 將成為事實上 的標準。到 2006 年,java 手機預計將占全部手機出貨量的 83%。 就國內(nèi)來說,java 是未來無線數(shù)據(jù)服務(wù)的主流方向,也開始采用基于開 放應用平臺的移動增值服務(wù)架構(gòu)。從 2003 年起,移動、聯(lián)通均已開通無線 java 業(yè)務(wù)。java 手機已經(jīng)成為絕大多數(shù)用戶選購手機時的必要考慮條件。 在 j2me 通信方面,midp1.0 支持 http,midp2.0 則增加了對 https、 報文、socket 通信以及串口通信的支持。另外,midp2.0 還支 持服務(wù)器 push 體系架構(gòu),這樣,你的手機能夠收到來自服務(wù)器的報警、消息或者廣播,根據(jù) 要求啟動手機上的應用程序進行操作。 第 2 頁 共 27 頁 支持 over-the-air (ota) provisioning 是 midp2.0 的一個重要的新特點,它 使得用戶能夠動態(tài)地部署和更新移動設(shè)備上的應用程序。新版的 midp 規(guī)范中 規(guī)定了如何在移動設(shè)備上發(fā)現(xiàn)、安裝、更新和刪除 midlet 套件;同時,提供應 用程序下載的服務(wù)提供商還能夠判斷該 midlet 套件是否能夠運行在申請下載的 設(shè)備上,并且從設(shè)備上獲取安裝、更新和刪除的信息。midp ota provisioning 模型為移動服務(wù)提供商提供了單一、標準的部署 midp 應用程序的途徑。該模 型已經(jīng)被眾多技術(shù)領(lǐng)先的移動設(shè)備制造商和服務(wù)提供商所采納。 j2me 針對嵌入式和移動設(shè)備,提供了開發(fā)和運行應用程序的平臺,隨著 新的規(guī)范的不斷推出和眾多制造商、軟件開發(fā)商的支持,j2me 正在飛速向前 發(fā)展。jtwi 將保證 j2me 應用程序在不同制造商的產(chǎn)品上的兼容性。今后 j2me 將借助 web services 的力量,真正成為企業(yè)級信息解決方案中不可或缺 的一部分。 1.3 本課題研究的意義本課題研究的意義 在我國,隨著城市化的快速發(fā)展,市公交系統(tǒng)也隨之迅速擴大,且更加復 雜化,找不到合適的乘車路線的事情經(jīng)常發(fā)生。當前,復雜的公交系統(tǒng)使得用 戶往往處于迷惑的狀態(tài),給出行帶來諸多不便,在另一個方面,我國城市的手 機普及率已經(jīng)非常高了,如果能把這兩種情況結(jié)合起來,開發(fā)出一種基于手機 的公交查詢軟件,將會給用戶帶來便捷?;谝陨显?,本系統(tǒng)通過對城市公 交系統(tǒng)的調(diào)研,提出了基于站點優(yōu)先級和鄰接矩陣的公交換乘算法和上下矩陣 算法;以 j2me 作為開發(fā)工具,將其移植到用戶手機上,借助于無線互聯(lián)網(wǎng), 能為客戶隨時隨地提供公交信息的查詢。 1.4 本軟件的開發(fā)方法本軟件的開發(fā)方法 由于公交數(shù)據(jù)相對比較龐大和繁瑣,同時設(shè)計換乘時對系統(tǒng)處理的性能要 求也比較高,故本系統(tǒng)采用在服務(wù)器上進行計算,結(jié)果通過無線網(wǎng)絡(luò)傳輸?shù)娇?戶端的形式進行開發(fā)。又由于當前絕大多數(shù)手機都支持 java,而 j2ee 和 j2me 因為同出一門,具備先天性無縫銜接的優(yōu)勢,故本系統(tǒng)采用 j2me 和 j2ee 結(jié)合的方式進行開發(fā)。 通過 j2me 和 j2ee 技術(shù)的結(jié)合,采用 c/s 模式和 b/s 模式共同存在的方式, 服務(wù)器端采用 mysql+tomcat/weblogic,通過 servlet 實現(xiàn)對外服務(wù)器通信,同時 前臺開發(fā)出 web 模塊和 wap 模塊,web 模塊采用 mvc 模式,使用 struts 框架。手機客戶端采用 j2me 編程,使用線程技術(shù)實現(xiàn)和服務(wù)器的網(wǎng)絡(luò)通信, 并且在從服務(wù)器取得數(shù)據(jù)后自動斷開連接,節(jié)約用戶流量。 第 3 頁 共 27 頁 1.5本文的主要工作本文的主要工作 .1 研究的主要內(nèi)容研究的主要內(nèi)容 本設(shè)計采用 b/s 和 c/s 結(jié)合的結(jié)構(gòu),綜合運用以前所學的專業(yè)知識,設(shè)計 開發(fā)一個功能較完善的基于手機的公交查詢系統(tǒng),具體包括以下內(nèi)容: (1)研究并掌握 tcp/ip 等傳輸協(xié)議、數(shù)據(jù)庫操作等的基本原理。 (2)學習并掌握 j2ee,j2me 等相關(guān)知識。 (3)以前面的研究為基礎(chǔ),編程實現(xiàn)服務(wù)器及手機客戶端線路查詢,按站 查詢,站站查詢并且實現(xiàn)手機無線網(wǎng)絡(luò)通信等功能。 .2 各章節(jié)的安排各章節(jié)的安排 本文章詳細介紹了該系統(tǒng)的分析和實現(xiàn)各個流程。在文章的引言中,主要 介紹了該系統(tǒng)面臨的背景,研究意義和開發(fā)方法等,使讀者對本文有全面的了 解。在接下來的第二章里,對系統(tǒng)的需求分析和與之對應的開發(fā)工具介紹。在 第三章里,對系統(tǒng)開發(fā)涉及的算法進行了介紹和對數(shù)據(jù)庫設(shè)計給出了詳細的說 明。第四章是系統(tǒng)功能具體實現(xiàn)的介紹其中包括了關(guān)鍵的編程技術(shù),功能的代 碼說明。第五章是對系統(tǒng)的測試和分析,包括代碼測試和功能測試,并對測試 分析總結(jié)。最后,是作者通過對本系統(tǒng)的研究和設(shè)計總結(jié)出的系統(tǒng)特點以及研 究心得。 2手機公交查詢的需求分析手機公交查詢的需求分析和開發(fā)工具介紹和開發(fā)工具介紹 2.1用戶的原始需求用戶的原始需求 作為關(guān)系國計民生的社會公益事業(yè),城市公共交通一直都是政府工作的重 點。就武漢市而言,調(diào)研結(jié)果中的另一個數(shù)據(jù),武漢市乘客以公交方式出行的 比例為 23.36%,可見城市公交的重要性。但是從客觀上說,公交硬件建設(shè)跟不 上城市建設(shè)的步伐,是全國大城市尤其是特大城市都正在遭遇的發(fā)展瓶頸。也 常常造成人們的出行不便。 本系統(tǒng)通過對城市公交查詢用戶需求的調(diào)研,發(fā)現(xiàn)用戶在查找公交信息的 時候一般只有 3 種方式,即按線路進行查找,按站進行查找線路,按起點站和 終點站查找乘坐方案。同時由于城市公交系統(tǒng)在規(guī)劃的時候是以站作為單位進 行規(guī)劃的,故經(jīng)過站數(shù)的多少直接決定了公交線路的長短和時間。 因此,在本系統(tǒng)的設(shè)計中提出以下方案: 用戶在使用本系統(tǒng)的時候,可以按照線路進行公交查詢,或者按起點終點 進行查詢,系統(tǒng)自動按照換乘篩選算法提供出最佳換乘方案,該算法根據(jù)用戶 輸入的站名,查找全部可以直達的方案,如無直達方案,則找出全部換乘方案 并按照站點優(yōu)先級進行排序,返回給用戶線路最短的前 n 條的換乘信息,如果 第 4 頁 共 27 頁 用戶使用按站查詢線路,系統(tǒng)也提供了一定的模糊查詢,比如用戶查詢“百腦 匯” ,系統(tǒng)能自動辨認出當?shù)卣军c“磨子橋” 。同時,用戶在手機上可以通過 j2me 手機客戶端和 wap 的方式進行查詢,在電腦上可以通過訪問 web 站點 的方式進行查詢。 2.2手機公交查詢系統(tǒng)功能模塊及流程手機公交查詢系統(tǒng)功能模塊及流程圖圖 通過對需求分析的調(diào)研,得出了經(jīng)過用戶確認的手機公交查詢系統(tǒng)的系統(tǒng) 邏輯模型。根據(jù)手機公交查詢系統(tǒng)的業(yè)務(wù)流程圖,明確了整個系統(tǒng)的流程。 (1)web 和 wap 功能模塊,如圖 1 所示。 圖 1 web 和 wap 功能模塊圖 第 5 頁 共 27 頁 圖 2 手機客戶端流程圖 (2)j2me 手機客戶端的系統(tǒng)流程圖,如圖 2 所示。 用戶查詢流程分為查詢內(nèi)容選擇、查詢信息輸入和信息接收 3 個步驟。 從該流程圖中可以看出,按起點終點查詢是整個系統(tǒng)最重要的一部分,也 是本系統(tǒng)最能體現(xiàn)算法的一部分,經(jīng)過對成都公交系統(tǒng)的觀察和分析,本系統(tǒng) 提出了一次換乘時采用基于站點優(yōu)先級和鄰接矩陣的公交換乘算法,如果第一 次換乘沒有可以換乘的方案,則采用上下矩陣算法,得出二次換乘信息,同時 把得到的方案緩存到數(shù)據(jù)庫中,下個用戶查詢相同起點終點時就直接從數(shù)據(jù)庫 中提取緩存信息,大大的節(jié)約了用戶的時間和系統(tǒng)資源。 2.3開發(fā)工具介紹開發(fā)工具介紹 java 語言是目前 internet 上大型的 web 應用和手機程序開發(fā)時使用得最 熱門的編程語言,而目前國內(nèi)銷售的大多數(shù)手機都支持 java,同時 j2me 和 j2ee 因為都是基于 java 技術(shù),可以進行無縫連接,所以本系統(tǒng)選用 j2me 和 j2ee 做為開發(fā)語言,同時在 web 端應用相關(guān)的 struts 框架,并完成一個基于 這 2 種技術(shù)結(jié)合的手機無線公交查詢系統(tǒng)。 本系統(tǒng)采用的開發(fā)工具為 mysql+eclipse+tomcat/weblogic,mysql 是一 個廣受 linux 社區(qū)人們喜愛的半商業(yè)的數(shù)據(jù)庫。mysql 具有強大且簡單易用的 特點,而且運行速度極快,能夠處理企業(yè)數(shù)據(jù)庫絕大多數(shù)的應用需求。eclipse 是一個開放源代碼的、基于 java 的可擴展開發(fā)平臺。就其本身而言,它只是 一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,eclipse 附 帶了一個標準的插件集,包括 java 開發(fā)工具(java development tools,jdt) 。 tomcat 服務(wù)器是一個免費的開放源代碼的 web 應用服務(wù)器,它是 apache 軟件 基金會(apache software foundation)的 jakarta 項目中的一個核心項目,由 apache、sun 和其他一些公司及個人共同開發(fā)而成。由于有了 sun 的參與和支 持,最新的 servlet 和 jsp 規(guī)范總是能在 tomcat 中得到體現(xiàn),tomcat5 支持最 新的 servlet 2.4 和 jsp 2.0 規(guī)范。因為 tomcat 技術(shù)先進、性能穩(wěn)定,而且免費, 因而深受 java 愛好者的喜愛并得到了部分軟件開發(fā)商的認可,成為目前比較流 行的 web 應用服務(wù)器。 3手機公交查詢系統(tǒng)的設(shè)計手機公交查詢系統(tǒng)的設(shè)計 3.1手機公交查詢系統(tǒng)算法的設(shè)計手機公交查詢系統(tǒng)算法的設(shè)計 .1 直達的算法設(shè)計直達的算法設(shè)計 現(xiàn)有 a,b 兩個公交站,通過數(shù)據(jù)庫查詢語句“select * from businfo” 獲得 全部公交線路信息,再把每一路車的信息依次迭代出來,判斷 a 站和 b 站是否 第 6 頁 共 27 頁 同時在該線路中,如結(jié)果為 true,則可以直達,同時將直達方案存入一個集合 中,繼續(xù)向下遍歷,如果結(jié)果為 false,則該車不能直達,繼續(xù)向下遍歷。 .2 一次換乘的算法設(shè)計一次換乘的算法設(shè)計 一次換乘采用基于站點優(yōu)先級和鄰接矩陣的公交換乘算法,現(xiàn)在 a,b 兩個 公交站,通過數(shù)據(jù)庫查詢語句查找出經(jīng)過 a 站的所有公交車集合 collection1,再 通過數(shù)據(jù)庫查詢語句查找出經(jīng)過 b 站的所有公交車集合 collection2,判斷 collection1 和 collection2 是否有交集,若有,則得到一次換乘方案,存放在結(jié) 果集合中。判斷結(jié)束后,再按照經(jīng)過站點總數(shù)對換乘方案進行排序,因為換乘 結(jié)果往往數(shù)以百計,所以只取結(jié)果集的前 n 條記錄展現(xiàn)給用戶。若判斷結(jié)束后 沒有找到一次換乘的方案,則執(zhí)行 2 次換乘算法。 一次換乘算法,如圖 3 所示。 圖 3 一次換乘算法示意圖 第 7 頁 共 27 頁 圖 4 二次換乘算法示意圖 .3 二次換乘的算法設(shè)計二次換乘的算法設(shè)計 二次換乘采用上下矩陣算法,現(xiàn)有 a,b 兩個公交站,先通過數(shù)據(jù)庫查詢語 句和程序業(yè)務(wù)邏輯得到 a 站能直達的所有站點,放在集合 collection1 中,再按 照 a 站的方法找出 b 站能知道的所有站點,放在集合 collection2 中,再判斷是 否有公交車可以從 collection1 中的站點直達 collection2 中的站點,如果,則將 方案存放到結(jié)果集合中。至此為止,根據(jù)公交線路設(shè)計的理論,是肯定可以找 到二次換乘的方案的,故不再考慮 3 次換乘方案。 二次換乘算法,如圖 4 所示。 3.2手機公交查詢數(shù)據(jù)庫的設(shè)計手機公交查詢數(shù)據(jù)庫的設(shè)計 .1 數(shù)據(jù)庫的邏輯設(shè)計數(shù)據(jù)庫的邏輯設(shè)計 圖 5 數(shù)據(jù)庫主要 e-r 圖 準確了解與分析用戶需求(包括數(shù)據(jù)與處理)是整個設(shè)計過程的基礎(chǔ)。而 根據(jù)用戶需求設(shè)計合適的數(shù)據(jù)庫以及選擇恰當?shù)臄?shù)據(jù)庫以確保系統(tǒng)能高速穩(wěn)定 的運行則是數(shù)據(jù)庫設(shè)計的根本目地。 由于本系統(tǒng)涉及到大量數(shù)據(jù)的讀取,并且對安全性要求不高,故選用占用 系統(tǒng)資源較少并且速度相對較快的 mysql 作為本系統(tǒng)的數(shù)據(jù)庫。 通過對用戶需求的分析以及對系統(tǒng)本身應用背景的研究,可以看出本系統(tǒng) 需要有以下數(shù)據(jù)支持:公交線路信息,公交站點信息,站點附近標志信息,用 戶通知信息,同時考慮到節(jié)約系統(tǒng)資源,在用戶進行完站站查詢后還會產(chǎn)生一 第 8 頁 共 27 頁 個存放查詢結(jié)果的緩存信息。由上述可以確認該算法所關(guān)系到的數(shù)據(jù)表。 根據(jù)上述分析,可以得出公交信息模型的 e-r 圖,如圖 5 所示。 公交信息相關(guān)數(shù)據(jù)庫的數(shù)據(jù)字典,如表 1 所示。 表 1 公交信息相關(guān)的數(shù)據(jù)字典 序 號數(shù) 據(jù) 項 名 稱數(shù) 據(jù) 項 內(nèi) 容 1.公交線路信息公交線路的信息匯總 1.1線路 id公交線路的 id 1.2線路 no公交線路的名稱,如 502a 1.3經(jīng)過站點公交線路經(jīng)過的站點 1.4收發(fā)車時間公交車的收發(fā)車時間 1.5是否上下行判斷該公交車是否有上下行 2.公交站點信息公交站點相關(guān)信息 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標志名稱站點附近標志性建筑物或者地段的名稱 .2 數(shù)據(jù)庫的物理設(shè)計數(shù)據(jù)庫的物理設(shè)計 (1)公交線路信息表 負責存放公交線路信息,考慮到部分公交車存在上行和下行不一致的情況, 表中添加了是否上下行的字段,以供算法確認。如表 2 所示。 表 2公交線路信息表 公交線路信息表(businfo) 第 9 頁 共 27 頁 字段名注釋 busid公交車的 id busno公交車的車號 stop1第 1 個站的站名 stop2第 2 個站的站名 stop50第 50 個站的站名 time公交車的發(fā)車收車時間 startend公交車的起點和終點 updown是否有上下行 (2) 站點信息表 負責存放站點相關(guān)信息,并且存放一定的周圍標志建筑和地名的信息,以 供算法進行模糊查詢。如表 3 所示。 表 3站點信息表 站點信息表(stopinfo) 字段名注釋 stopname公交站站名 near1附近標志 1 near2附近標志 2 near3附近標志 3 near4附近標志 4 near5附近標志 5 near6附近標志 6 near7附近標志 7 near8附近標志 8 near9附近標志 9 near10附近標志 10 stoppic臃余字段,為以后功能預先留出 (3) 站點附近標志匯總表 負責存放站點周圍標志建筑或地名的匯總信息,本表為站點信息表的 near 集合自動生成。如表 4 所示。 第 10 頁 共 27 頁 表 4站點附近標志匯總表 站點附近標志匯總表(stopinfo) 字段名注釋 id標志的 id nearname標志的名字 (4) 用戶公告表 負責存放本系統(tǒng)的公告信息。如表 5 所示。 表 5用戶公告表 用戶公告表(notify) 字段名注釋 id消息的 id content消息內(nèi)容 date消息發(fā)布日期 (5) 查詢統(tǒng)計表 負責統(tǒng)計用戶查詢和下載量。如表 6 所示。 表 6 查詢統(tǒng)計表 查詢統(tǒng)計表(jishuqi) 字段名注釋 idid fangwen查詢量 xiazai客戶端下載量 4手機公交查詢系統(tǒng)功能手機公交查詢系統(tǒng)功能詳細實現(xiàn)詳細實現(xiàn) 經(jīng)過上面的描述,已經(jīng)明確了手機公交查詢系統(tǒng)需要實現(xiàn)的功能以及如何 去完成這些功能。下面將具體的闡述如何實現(xiàn)這些功能。 4.1 服務(wù)器端的實現(xiàn)服務(wù)器端的實現(xiàn) 本系統(tǒng)遵照 j2ee 3、4 層結(jié)構(gòu),使用了 mvc、ao 等設(shè)計模式,組織結(jié)構(gòu)圖如 圖 6 所示。 第 11 頁 共 27 頁 圖 6 系統(tǒng)組織結(jié)構(gòu)圖 .1 基類(基類(base class)的實現(xiàn))的實現(xiàn) 采用 ao 模式,將數(shù)據(jù)庫相關(guān)方法封裝到一個基類中,由業(yè)務(wù)邏輯繼承該 基類。 數(shù)據(jù)庫連接(connection)通過配置 web 服務(wù)器上的連接池,同時將數(shù)據(jù) 源綁定到 jndi,程序直接通過 jndi name 獲取,實現(xiàn)了數(shù)據(jù)源的可配置性和 高度可移植性。獲取 jndi name 方法如下: javax.sql.datasource ds = (javax.sql.datasource) ctx.lookup(dsname) ; /從數(shù)據(jù)源得到連接 conn = ds.getconnection() ; 因為后面需要多次調(diào)用關(guān)閉數(shù)據(jù)庫連接,故關(guān)閉連接封裝到一個方法中, 具體實現(xiàn)如下: /關(guān)閉數(shù)據(jù)庫連接 第 12 頁 共 27 頁 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(); .2 輔助類(輔助類(help class)的實現(xiàn))的實現(xiàn) 輔助類主要為業(yè)務(wù)類提供一些輔助功能,盡量實現(xiàn)功能的分離和高度封裝。 同時為了加快運行速度,減少 jvm 編譯負擔,采用 preparedstatement。部分方 法如下: (1)獲得公交總數(shù) 一般查找總數(shù)用”select count(*) from businfo”,但這樣因為是順序遍歷,一直 要遍歷到最后一條,效率不高,此處使用 sqlrst.last();使游標直接指向最后一條 記錄,再用 buscount = sqlrst.getrow();記錄最后一條記錄的行號,從而得到了 總行數(shù),比起前一個方法更快而且節(jié)約系統(tǒng)資源。 (2)插入數(shù)據(jù)庫緩存,使得下一個用戶查詢該方案時可以直接從數(shù)據(jù)庫中 獲取結(jié)果,從而大大的節(jié)約了用戶時間和系統(tǒng)資源。實現(xiàn)方法如下: 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(); 用戶查詢時若數(shù)據(jù)庫中已有緩存數(shù)據(jù),則調(diào)用以下方法獲取緩存的換乘數(shù) 據(jù): 第 13 頁 共 27 頁 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“); .3 業(yè)務(wù)邏輯類(業(yè)務(wù)邏輯類(logic class)的實現(xiàn))的實現(xiàn) (1)查詢公交線路 該方法比較簡單,通過“select * from businfo where busno=“+busno”即可 得到符合條件的公交車,同時返回用戶需要的數(shù)據(jù)。 (2)按站查詢經(jīng)過的公交線路,步驟如下: 通過輔助類判斷用戶輸入的站名或者附近標志名,并找到對應的公 交站名。 通過 sql 語句找到經(jīng)過該站的公交車,存放在一個集合中并返回。 (3)按起點終點查找乘坐方案 這是本系統(tǒng)中最復雜的一塊,通過前面提到的基于站點優(yōu)先級和鄰接矩陣 的公交換乘算法和上下矩陣算法來實現(xiàn),具體實現(xiàn)方法如下: 通過 start=tool.getbusstop(start); end=tool.getbusstop(end);來確定起點和 終點的公交站名。 檢驗站名是否存在,存在則繼續(xù)往下,不存在則返回提示信息。 若站名存在,則嘗試從數(shù)據(jù)庫中取得直達緩存信息,如數(shù)據(jù)庫中沒有 直達信息,則查找換乘信息。 若數(shù)據(jù)庫中沒有緩存,則開始查找有無直達線路,找到后把結(jié)果存入 數(shù)據(jù)庫。 如果沒有直達方案,則開始查找 1 次換乘方案,找到后按照經(jīng)過站數(shù) 排序,站數(shù)少的排前面,由于換乘方案過多,故只返回前幾條。 由于一次換乘結(jié)果可能成百上千,故只給用戶前幾條換乘方案進行選擇,先將 全部換乘方案按經(jīng)過車站數(shù)進行排序,再取前 4 條返回給用戶。 排序類為一個實現(xiàn)了 serializable 和 comparable 的工具類,具體排序方法在 compareto 方法中實現(xiàn),通過 compareto(object b)來定義如何排序,代碼如下: 第 14 頁 共 27 頁 public int compareto(object b) sortbean sort=(sortbean)b; return (this.length-sort.length) ; 換乘得到結(jié)果后放入 collection 中返回。 最后把找到的結(jié)果集寫入到數(shù)據(jù)庫緩存中。 tool.insertdb(start,end,zhuanchengresult0,zhuanchengresult1,zhuanchengres ult2,zhuanchengresult3); 如果找不到一次換乘(這種情況非常渺茫) ,而用戶又非常執(zhí)著的要繼續(xù) 找公交車,就不得不使用二次換乘,算法在 3.3 節(jié)已有說明,下面列出具體做 法: 首先查找出經(jīng)過起點站和終點站的線路,再通過線路找到該站能直達的所 有站點,以起點站為例: collection stop1bus=findbusnobystop(stop1);/經(jīng)過stop1的公交車 collection stop2bus=findbusnobystop(stop2);/經(jīng)過 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 作為存放站名的容器,因為從一個站臺輻射出 去的公交線路經(jīng)過的站點往往有重復,而 hashmap 在 key 重復的時候只是重 新設(shè)置了 value 值,key 值則無法重復插入,故選用 hashmap。 在分別找到起點和終點能直達的站點集合后,就開始進行循環(huán)查找,開始 檢驗起點能直達的站點中是否有能直達終點能直達站點的站點,如有,則證明 可以進行二次換乘。 iterator key1= map1.keyset().iterator(); iterator key2= map2.keyset().iterator(); while(key1.hasnext() while(key2.hasnext() if(zhida.isempty() string sop1=(string)key1.next(); 第 15 頁 共 27 頁 string sop2=(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; 找到一條可行的線路后,再開始查找起點到轉(zhuǎn)乘點 1 的線路和轉(zhuǎn)乘點 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+“站出發(fā),乘坐“+busno1+“到“+huanchengstop1+“站轉(zhuǎn) “+nonstop.getbusno()+“到“+ 第 16 頁 共 27 頁 huanchengstop2+“站轉(zhuǎn)“+busno2+“到“+stop2; twohg.add(result); system.out.println(“find one“); catch(exception e) e.printstacktrace(); return twohg; 本算法采用了 3 個 bean 來保存 3 段路線的信息,每個 bean 中分別有 start,end,busno3 個屬性,使得算法條理更加清晰化。 至此站站查詢?nèi)客瓿伞?.4 服務(wù)器對外接口(服務(wù)器對外接口(servlet)的實現(xiàn))的實現(xiàn) 本系統(tǒng)采用 servlet 作為和手機通訊的接口,采用 http 的應答機制,免去 了自己寫應答的麻煩,系統(tǒng)在執(zhí)行了一次查詢后在服務(wù)器的 log 中記錄一次, 同時數(shù)據(jù)庫中負責記錄查詢次數(shù)的計數(shù)器加 1。發(fā)送信息關(guān)鍵代碼如下: 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(); 有過開發(fā)經(jīng)驗的人都知道,在做 java 開發(fā)時傳輸中文常常遇到亂碼現(xiàn)象, 這里我在 content_type 里面編碼方式設(shè)置成 gb2312,并且在客戶端發(fā)送 數(shù)據(jù)時也把編碼設(shè)置成 gb2312,同時采用 writeutf 方法,成功解決中文問題。 4.2 web 端的實現(xiàn)端的實現(xiàn) 本系統(tǒng) web 端采用 struts 框架,嚴格遵循 mvc 模式,用戶提交信息后先 放到 formbean 中暫存,然后在 action 中實現(xiàn)業(yè)務(wù)方法的調(diào)用,實現(xiàn)代碼的高 度封裝性和分離性。本系統(tǒng)只采用了一個 action 作為中央控制器,通過參數(shù)關(guān) 鍵字判斷是那種查詢,同時查詢頁面和結(jié)果頁面為同一頁面,在 action 中查詢 第 17 頁 共 27 頁 完畢后統(tǒng)一放入 collection 中傳遞到結(jié)果頁面中,使得頁面重用性大大提高。 首頁顯示圖 7 所示。 圖 7 首頁圖樣 查詢頁面顯示如圖 8 所示。 圖 8 查詢頁面 action 作為中央控制器負責執(zhí)行判斷用戶輸入和查詢,以線路查詢?yōu)槔?核心代碼如下: 判斷用戶提交內(nèi)容: /如果用戶按公交車號查詢 if (busno != null) try busnoresult = dealbus.searchbusline(busno) ; 第 18 頁 共 27 頁 httpservletrequest.setattribute(“buslineresult“ , busnoresult) ; dealactionform.setbusno(null); busno=null; result=null; /返回“buslineresult”對應的頁面,具體配置在struts-configure里面設(shè)置 return (actionmapping.findforward(“buslineresult“) ; catch (exception e) /將錯誤信息放到request中傳遞到錯誤頁面 httpservletrequest.setattribute(“errormsg“, e.getmessage(); e.printstacktrace() ; return (actionmapping.findforward(“error“) ; 4.3 wap 端的實現(xiàn)端的實現(xiàn) wap 端采用 wml(wireless markup language - 無線標記語言)編寫,無 限標記語言 wml(wireless markup language)是一種基于擴展標記語言 xml(extension markup language)的語言,是 xml 的子集。它可以顯示各種文 字、圖像等數(shù)據(jù),是由 wap 論壇()提出并專為無線 設(shè)備用戶提供交互界面而設(shè)計的,目前版本為 1.1 版。這些無線設(shè)備包括移動 電話,呼機和個人數(shù)字助理 pda(personal digital assistants)等。 wap 模塊主要有首頁,功能選擇頁面,線路查詢頁面,站站查詢頁面等組 成,部分頁面顯示如下: 功能選擇頁面,讓用戶選擇使用哪種方式進行查詢,如圖 9 所示。 圖 9 功能選擇頁面 客戶端下載頁面,有 jar 和 jad 可供選擇,以兼容支持不同的手機,如圖 第 19 頁 共 27 頁 10 所示。 圖 10 客戶端下載頁面 詳細原理以線路查詢?yōu)槔?,線路查詢提交代碼如下: 其中$(busno:n)為變量的表示方法,:n 的意思為變量中沒有 escape 字符, 即不需要進行 escape 八進制轉(zhuǎn)碼。 服務(wù)器端處理代碼(selectnumber.jsp)如下: if(busno!=null) try tool.fangwen();/用戶查詢計數(shù)器加1 dealbus dealbus=new dealbus(); coll =dealbus.searchbusline(busno);/調(diào)用業(yè)務(wù)處理方法 iterator itr=coll.iterator() ; /將結(jié)果輸出到一個string中 while (itr.hasnext() result = result+(string) itr.next() ; 然后將結(jié)果顯示在用戶手機上: 第 20 頁 共 27 頁 返回 返回首頁 4.4 手機客戶端的實現(xiàn)手機客戶端的實現(xiàn) .1 客戶端界面的實現(xiàn)客戶端界面的實現(xiàn) 界面使用了內(nèi)部類技術(shù),整個界面是一個大類,里面的每一個選項都是一 個內(nèi)部類,并且部署監(jiān)聽器,實現(xiàn)按鍵事件監(jiān)聽。控件添加如下例所示: /定義控件 mainlist = new list(“請選擇功能“, choice.implicit, listitem, null); mainnokcommand = new command(“確定“, command.ok, 1); string listitem = “查詢公交線路“, “查詢乘坐方案“, “按站查公交“, “網(wǎng) 絡(luò) 設(shè) 置“, “系 統(tǒng) 說 明“ ; exitcommand = new command(“退出“, command.exit, 1); cancelcommand = new command(“取消“, command.cancel, 1); /添加控件 mainlist.addcommand(exitcommand); mainlist.addcommand(mainnokcommand); /添加監(jiān)聽器 mainlist.setcommandlistener(this); /把該面板顯示到屏幕上 display.setcurrent(mainlist); .2 客戶端工作原理客戶端工作原理 下面以線路查詢功能為例,詳細說明 j2me 手機客戶端工作原理。 界面控件代碼如下: searchfield=new textfield(“請輸入查詢線路“,“,3,textfield.numeric); backcommand1=new command(“返回“,command.back,1);/返回按鈕 okcomman

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論