畢業(yè)設(shè)計(jì)-基于android的手機(jī)公交線路查詢系統(tǒng)_第1頁
畢業(yè)設(shè)計(jì)-基于android的手機(jī)公交線路查詢系統(tǒng)_第2頁
畢業(yè)設(shè)計(jì)-基于android的手機(jī)公交線路查詢系統(tǒng)_第3頁
畢業(yè)設(shè)計(jì)-基于android的手機(jī)公交線路查詢系統(tǒng)_第4頁
畢業(yè)設(shè)計(jì)-基于android的手機(jī)公交線路查詢系統(tǒng)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

湖南科技大學(xué)畢業(yè)設(shè)計(jì)〔論文〕題目公交線路查詢系統(tǒng)作者學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院專業(yè)網(wǎng)絡(luò)工程學(xué)號(hào)指導(dǎo)教師二〇一〇年六月六日湖南科技大學(xué)畢業(yè)設(shè)計(jì)〔論文〕指導(dǎo)人評語[主要對學(xué)生畢業(yè)設(shè)計(jì)〔論文〕的工作態(tài)度,研究內(nèi)容與方法,工作量,文獻(xiàn)應(yīng)用,創(chuàng)新性,實(shí)用性,科學(xué)性,文本〔圖紙〕標(biāo)準(zhǔn)程度,存在的缺乏等進(jìn)行綜合評價(jià)]指導(dǎo)人:〔簽名〕年月日指導(dǎo)人評定成績:湖南科技大學(xué)畢業(yè)設(shè)計(jì)〔論文〕評閱人評語[主要對學(xué)生畢業(yè)設(shè)計(jì)〔論文〕的文本格式、圖紙標(biāo)準(zhǔn)程度,工作量,研究內(nèi)容與方法,實(shí)用性與科學(xué)性,結(jié)論和存在的缺乏等進(jìn)行綜合評價(jià)]評閱人:〔簽名〕年月日評閱人評定成績:湖南科技大學(xué)畢業(yè)設(shè)計(jì)〔論文〕辯論記錄日期:2010年6月9日學(xué)生:學(xué)號(hào):班級(jí):網(wǎng)絡(luò)工程一班題目:公交線路查詢系統(tǒng)提交畢業(yè)設(shè)計(jì)〔論文〕辯論委員會(huì)以下材料:1設(shè)計(jì)〔論文〕說明書 共 50 頁2設(shè)計(jì)〔論文〕圖紙 共 21 頁3指導(dǎo)人、評閱人評語 共 2 頁畢業(yè)設(shè)計(jì)〔論文〕辯論委員會(huì)評語:[主要對學(xué)生畢業(yè)設(shè)計(jì)〔論文〕的研究思路,設(shè)計(jì)〔論文〕質(zhì)量,文本圖紙標(biāo)準(zhǔn)程度和對設(shè)計(jì)〔論文〕的介紹,答復(fù)以下問題情況等進(jìn)行綜合評價(jià)]辯論委員會(huì)主任:〔簽名〕委員:〔簽名〕〔簽名〕〔簽名〕〔簽名〕辯論成績:總評成績:摘要隨著人們生活水平的提高,出行坐車成為日常生活中不可缺少的一局部。而乘往目的地的線路需要隨時(shí)掌握,于是公交線路查詢軟件,將成為人們生活出行的好幫手。公交線路查詢軟件主要包括了效勞器端以及客戶端,效勞器和客戶端擁有各自獨(dú)立的數(shù)據(jù)庫,客戶端采用數(shù)據(jù)庫同步方式從效勞器數(shù)據(jù)庫獲取信息。用戶既能從本地?cái)?shù)據(jù)庫獲取信息,又能從互聯(lián)網(wǎng)上獲取信息,即便脫離效勞器也能做為單機(jī)版軟件使用。通過公交查詢軟件,用戶能夠及時(shí)更新公交信息和查詢線路,也能夠借助Google效勞器進(jìn)行地圖查詢。效勞器有后臺(tái)管理軟件,方便了管理員對效勞器的管理操作。本公交線路查詢系統(tǒng)采用了B/S-C/S結(jié)構(gòu)。關(guān)鍵詞:Java;公交線路查詢;B/S-C/S結(jié)構(gòu);AbstractWiththelevelofpeople’slifeimproving,goingoutbybusbecomeanecessarypartofdailylife.Andthetrafficlinetodestinationshouldbeknowneverytime.ThesoftwareofMobileandqueryingtrafficlinebecomemoreandmoreimportantnowadaysgradually.Itscontainsserverandclient,serverandclienthaveitsowndatabase,clientgetsinformationbysynchronizingdatabasefromserver.Itsatifiesusersrequirementsofgettinginformationfromlocaledatabaseandobtaininginformationfrominternet,italsocanbeusedwithoutthehelpofserver.WiththisMobileandqueryingtrafficlinesoftware,usercanupdatedataintimeandcheckThereisamanagementsoftwareinserver,facilitateadministratortomanageserver.MobileandqueryingtrafficlinesoftwaresuitsforB/S-C/Sstructure.Keywords:Java;Mobileandqueryingtrafficline;B/S-C/Sstructure.目錄第一章引言1第二章需求分析與概要設(shè)計(jì)22.1需求分析22.1.1效勞器端需求分析22.1.2客戶端需求分析22.1.3開發(fā)環(huán)境及工具需求分析32.2概要設(shè)計(jì)42.2.1開發(fā)流程42.2.2系統(tǒng)數(shù)據(jù)流圖4第三章模式設(shè)計(jì)53.1C/S模式簡介53.2B/S模式簡介53.3B/S-C/S模式63.3.1B/S-C/S模式定義63.3.2B/S-C/S模式特點(diǎn)7第四章數(shù)據(jù)庫設(shè)計(jì)84.1數(shù)據(jù)庫結(jié)構(gòu)84.2效勞器數(shù)據(jù)庫設(shè)計(jì):84.3客戶端數(shù)據(jù)庫設(shè)計(jì):104.3.1SQLite簡介104.3.2數(shù)據(jù)庫設(shè)計(jì)10第五章效勞器打量細(xì)設(shè)計(jì)125.1后臺(tái)管理模式125.2查詢簡析18線路查詢18站點(diǎn)查詢185.3數(shù)據(jù)庫同步195.3.1Servlet195.3.2DAO195.3.3XML19第六章客戶打量細(xì)設(shè)計(jì)216.1簡述216.2什么是Android216.3Android系統(tǒng)架構(gòu)簡介216.3.1應(yīng)用程序(APPLICATIONS)226.3.2應(yīng)用程序框架(APPLICATIONFRAMEWORK)226.3.3Android運(yùn)行時(shí)(RUNTIME)236.3.4系統(tǒng)庫(LIBRARIES)236.3.5Linux236.4實(shí)現(xiàn)客戶端數(shù)據(jù)庫236.4.1SQL語言236.4.2創(chuàng)立數(shù)據(jù)庫246.4.3客戶端數(shù)據(jù)庫操作246.5客戶端功能模塊實(shí)現(xiàn)266.5.1線路查詢266.5.2地圖功能276.5.3數(shù)據(jù)更新296.5.4意見反應(yīng)30第七章結(jié)論31參考文獻(xiàn)32致謝33附錄A數(shù)據(jù)庫更新語句34附錄B線路和站點(diǎn)查詢代碼35附錄C票價(jià)和發(fā)車時(shí)間查詢代碼47第一章引言隨著因特網(wǎng)開展的日新月異,人們利用網(wǎng)絡(luò)實(shí)現(xiàn)資源共享以及協(xié)同工作越來越成為時(shí)代的潮流,使用各種網(wǎng)上的軟件方便生活,已經(jīng)成為了一個(gè)不可扭轉(zhuǎn)的趨勢。以此設(shè)計(jì)題目為目的,選擇湘潭市作為實(shí)踐對象,以湘潭市公交系統(tǒng)為根底,再利用所學(xué)知識(shí),熟練運(yùn)用開發(fā)工具后,開發(fā)一個(gè)湘潭市公交線路查詢軟件,并且盡可能將其開發(fā)為一個(gè)方便群眾使用的公交線路查詢軟件。而且在當(dāng)今公交出行線路多數(shù)是通過PC機(jī)查詢獲得的,但是假想一下在公交出行線路走到一半的時(shí)候方案有所變化,公交出行線路需要有所調(diào)整,那么如何能夠動(dòng)態(tài)掌握線路信息顯得尤為重要,而且將來對生活的滿意度也不僅僅是百姓致富安居樂業(yè)就足以,而是逐漸趨向于一個(gè)更人性化的效勞。城市交通效勞以及附屬的一些效勞一直都在不斷的隨著社會(huì)的進(jìn)步而進(jìn)步,這些效勞從最開始的直接人力效勞轉(zhuǎn)向技術(shù)型效勞,如詢問,路牌等,然而這些效勞總是有比擬大的局限性,即縱然你知道了這條路該怎么走,下條路線該通到哪卻不知,于是開發(fā)這個(gè)公交線路查詢軟件,可在上隨時(shí)隨地對公交線路進(jìn)行查詢,對用戶將要出行的路線了如指掌,這對用戶來說可以省去很多麻煩,節(jié)省不少時(shí)間。本次畢業(yè)設(shè)計(jì)結(jié)合湘潭市公交線路系統(tǒng)開發(fā)一個(gè)湘潭公交線路查詢軟件,效勞于群眾。第二章需求分析與概要設(shè)計(jì)2.1需求分析公交線路查詢軟件最根本的功能是能夠有效的為用戶提供查詢效勞,在最短的時(shí)間內(nèi)給用戶一條或多條到達(dá)目標(biāo)地的路徑。整個(gè)查詢過程中,只有數(shù)據(jù)信息是依靠效勞器同步獲取,其余功能均在端完成。在此分別對公交線路查詢軟件的效勞器端和客戶端做需求分析。2.1.1效勞器端需求分析效勞器作為后臺(tái),需要專業(yè)人員對效勞器操作和維護(hù),一般情況可由非專業(yè)人員借助管理軟件對效勞器進(jìn)行常規(guī)維護(hù)。效勞器可以通過數(shù)據(jù)庫同步,為客戶端數(shù)據(jù)庫提供數(shù)據(jù)。通過仔細(xì)分析效勞器需求之后,效勞器端要完成以下功能:1、效勞器后臺(tái)管理功能效勞器后臺(tái)管理是針對數(shù)據(jù)庫進(jìn)行操作,具有增、刪、改、查功能。2、數(shù)據(jù)同步功能。采用Servlet技術(shù),響應(yīng)客戶端請求,返回給客戶端一端數(shù)據(jù)流,該數(shù)據(jù)流按照Xml語言標(biāo)準(zhǔn)寫入數(shù)據(jù)流。效勞器端功能模塊劃分如圖2.1所示。圖2.1效勞器端功能模塊圖2.1.2客戶端需求分析客戶端主要是,用戶無法通過對本地?cái)?shù)據(jù)庫進(jìn)行操作,也無法對效勞器數(shù)據(jù)庫操作,管理員可以通過瀏覽器登錄到效勞器管理員頁面對數(shù)據(jù)庫進(jìn)行操作,可以使用一些功能。該軟件應(yīng)滿足假設(shè)干要求,比方能夠隨時(shí)掌握公交信息,動(dòng)態(tài)更新最新數(shù)據(jù)等。也要考慮作為軟件可能會(huì)出現(xiàn)查詢速度慢,數(shù)據(jù)流量過大,過度依賴效勞器等問題。通過仔細(xì)分析用戶需求之后,該軟件要完成以下功能:1、查詢線路功能獲得線路經(jīng)過的每個(gè)站點(diǎn)信息以及線路的票價(jià)信息和發(fā)車時(shí)間信息。 2、地圖查詢功能借助GoogleMap,完成公交查詢并顯示地圖線路。 3、數(shù)據(jù)更新功能效勞器響應(yīng)客戶端請求返回一段數(shù)據(jù)流,客戶端接收此數(shù)據(jù)流后,按照Xml語言標(biāo)準(zhǔn)對數(shù)據(jù)流進(jìn)行解析,解析后將數(shù)據(jù)存入客戶端數(shù)據(jù)庫。 4、意見反應(yīng)功能通過郵件將意見發(fā)送到管理員的郵箱。 客戶端功能模塊劃分如圖2.2所示。圖2.2客戶端功能模塊圖2.1.3開發(fā)環(huán)境及工具需求分析效勞器端開發(fā)環(huán)境,以windows7操作系統(tǒng)為開發(fā)平臺(tái),用Tomcat6.0做為效勞器,Mysql5.0作為數(shù)據(jù)源,JSP作為開發(fā)工具,Dreamweaver8.0作為輔助開發(fā)工具,運(yùn)行在一般的PC機(jī)上即可。客戶端開發(fā)環(huán)境,以Android操作系統(tǒng)為開發(fā)平臺(tái),用Android操作系統(tǒng)自帶的SQLite作為數(shù)據(jù)源。Java語言和Xml語言作為開發(fā)工具,Eclipse3.5作為輔助開發(fā)工具。整個(gè)Android操作系統(tǒng)是在AndroidSDK提供的虛擬機(jī)中運(yùn)行,該虛擬機(jī)運(yùn)行在windows7操作系統(tǒng)上,所以客戶端的開發(fā)是在windows7操作系統(tǒng)上運(yùn)行的Android操作系統(tǒng)中進(jìn)行的二次開發(fā)。開發(fā)環(huán)境配置請參考文獻(xiàn)[6]。2.2概要設(shè)計(jì)2.2.1開發(fā)流程開發(fā)流程如圖2.3所示。運(yùn)行測試調(diào)試程序編寫程序確定功能調(diào)查研究優(yōu)化完善運(yùn)行測試調(diào)試程序編寫程序確定功能調(diào)查研究優(yōu)化完善圖2.3開發(fā)流程圖2.2.2系統(tǒng)數(shù)據(jù)流圖系統(tǒng)數(shù)據(jù)流程如圖2.4所示。圖2.4系統(tǒng)數(shù)據(jù)流圖第三章模式設(shè)計(jì)3.1C/S模式簡介精簡的說:C/S模式是一種三層結(jié)構(gòu)的系統(tǒng),第一層在客戶機(jī)上安裝了客戶機(jī)應(yīng)用程序,第二層在效勞器上安裝效勞器管理程序,第三層是數(shù)據(jù)訪問層。在C/S模式的工作過程中,客戶機(jī)程序發(fā)出請求,效勞器程序接收并且處理客戶機(jī)程序提出的請求,然后返回結(jié)果。C/S模式特點(diǎn):(1)C/S模式將應(yīng)用與效勞別離,系統(tǒng)具有穩(wěn)定性和靈活性(2)C/S模式配備的是點(diǎn)對點(diǎn)的結(jié)構(gòu)模式,適用于局域網(wǎng),有可靠的平安性(3)由于客戶端實(shí)現(xiàn)與效勞器端的直接連接,沒有中間環(huán)節(jié),因此響應(yīng)速度快(4)在C/S模式中,作為客戶機(jī)的計(jì)算機(jī)都要安裝客戶機(jī)程序,一旦軟件系統(tǒng)升每臺(tái)客戶機(jī)都要安裝客戶機(jī)程序,系統(tǒng)升級(jí)和維護(hù)較為復(fù)雜發(fā)。3.2B/S模式簡介精簡的說:B/S模式是一種從傳統(tǒng)的三層C/S模式開展起來的新的網(wǎng)絡(luò)結(jié)構(gòu)模式,其本質(zhì)也是三層結(jié)構(gòu)的C/S模式。在用戶的計(jì)算機(jī)上安裝瀏覽器軟件,在效勞器上存放數(shù)據(jù)并且安裝效勞應(yīng)用程序,效勞器有WWW效勞器和文件效勞器等。用戶通過瀏覽器訪問效勞器,進(jìn)行信息瀏覽、文件傳輸和電子郵件等效勞。B/S模式特點(diǎn):(1)系統(tǒng)開發(fā)、維護(hù)、升級(jí)方便每當(dāng)效勞器應(yīng)用程序升級(jí)時(shí),只要在效勞器上升級(jí)效勞應(yīng)用程序即可,用戶計(jì)算機(jī)上的瀏覽器軟件不需要修改,系統(tǒng)開發(fā)和升級(jí)維護(hù)方便。(2)B/S模式具有很強(qiáng)的開放性在B/S模式下,用戶通過通用的瀏覽器進(jìn)行訪問,系統(tǒng)開放性好。(3)B/S模式的結(jié)構(gòu)易于擴(kuò)展由于Web的平臺(tái)無關(guān)性,B/S模式的結(jié)構(gòu)可以任意擴(kuò)展,可以從包含一臺(tái)效勞器和幾個(gè)用戶的小型系統(tǒng)擴(kuò)展成為擁有成千上萬個(gè)用戶的大型系統(tǒng)。(4)用戶使用方便B/S模式的應(yīng)用軟件都是基于Web瀏覽器的,而Web瀏覽器的界面是類似的。對于無用戶交換功能的頁面。用戶接觸的界面都是一致的,用戶使用方便。3.3B/S-C/S模式3.3.1B/S-C/S模式定義B/S-C/S模式是將B/S模式和C/S模式組合而來的,吸取這兩種模式的優(yōu)點(diǎn),到達(dá)互補(bǔ)的作用。B/S模式和C/S模式都是三層結(jié)構(gòu),B/S模式第一層是表現(xiàn)層,第二層是業(yè)務(wù)邏輯層,第三層是數(shù)據(jù)訪問層。C/S模式三層結(jié)構(gòu)中第一層是客戶端與B/S模式中的第一層不一樣,其余兩層相同。在B/S模式和C/S模式數(shù)據(jù)訪問過程和業(yè)務(wù)邏輯處理過程中是在效勞器端完成,用戶只需接受效勞器返回的結(jié)果。在B/S-C/S模式中,一局部數(shù)據(jù)訪問過程和業(yè)務(wù)邏輯處理過程在客戶端完成,另外一局部數(shù)據(jù)訪問過程和業(yè)務(wù)邏輯處理過程在效勞器端完成。本公交線路查詢軟件一局部功能只要依靠本地?cái)?shù)據(jù)庫就可以實(shí)現(xiàn),令外一局部功能需要借助互聯(lián)網(wǎng)實(shí)現(xiàn)。目前不管是硬件還是計(jì)算機(jī)硬件,更新速度很快,而且硬件的配置水平也越來越高,在硬件條件允許的情況下把一局部業(yè)務(wù)處理、數(shù)據(jù)訪問的過程放在客戶端去完成,那么對效勞器的硬件要求就會(huì)低一些,甚至一些高性能的PC機(jī)就可以作為效勞器。從整個(gè)作業(yè)量來看,本質(zhì)上是把作業(yè)量往客戶端多分?jǐn)傄痪植?,降低效勞器的作業(yè)量,因此,對客戶端的硬件要求是比擬高的。B/S-C/S模式結(jié)構(gòu)如圖3.1所示。圖3.1B/S-C/S模式結(jié)構(gòu)圖本軟件系統(tǒng)采用B/S-C/S模式,系統(tǒng)框架如圖3.2所示。圖3.2系統(tǒng)框架圖3.3.2B/S-C/S模式特點(diǎn)B/S-C/S模式在繼承了B/S模式和C/S模式的優(yōu)點(diǎn)之后,還具有以下特點(diǎn):(1)可靠性高1、客戶端不必完全依賴于效勞器,即便脫離效勞器,還有數(shù)據(jù)庫的支持,可以繼續(xù)使用一局部功能。2、客戶端的數(shù)據(jù)喪失的時(shí)候,可以采用數(shù)據(jù)庫同步的方式從效勞器獲得新的數(shù)據(jù)信息。(2)省資源一局部作業(yè)在客戶端完成,效勞器的訪問量和作業(yè)量都會(huì)減少,省資源,維護(hù)起來會(huì)更加方便。第四章數(shù)據(jù)庫設(shè)計(jì)4.1數(shù)據(jù)庫結(jié)構(gòu)效勞器數(shù)據(jù)庫為總數(shù)據(jù)源,每一個(gè)客戶端都擁有獨(dú)立的小型數(shù)據(jù)庫。客戶端數(shù)據(jù)庫信息從效勞器端同步獲得。效勞器的數(shù)據(jù)庫是基于Mysql建立,客戶端數(shù)據(jù)庫是基于SQLite建立。數(shù)據(jù)庫體系結(jié)構(gòu)如圖4.1所示。圖4.1數(shù)據(jù)庫體系結(jié)構(gòu)圖4.2效勞器數(shù)據(jù)庫設(shè)計(jì):E-R關(guān)系如圖4.2所示。圖4.2效勞器數(shù)據(jù)E-R圖根據(jù)上面的E-R圖,本軟件效勞器端定義的arashmen數(shù)據(jù)庫設(shè)計(jì)了以下4張表:站點(diǎn)表:station(表2)、線路表:routes(表3)、發(fā)車時(shí)間表:departuretime(表4)、票表:fare(表5)。本軟件效勞器數(shù)據(jù)庫所包含的表的描述如表1。表4.1數(shù)據(jù)庫概況表表名描述主要字段stations(站點(diǎn)表)保存站點(diǎn)信息ID,stationroutes(線路表)保存線路信息ID,RouteName,Contentdeparturetime(發(fā)車時(shí)間表)保存首班發(fā)車時(shí)間保存末班發(fā)車時(shí)間RouteNameFirstDepartureTime,LastDepartureTimefare(票價(jià)信息表)保存公交線路票價(jià)信息ID,isFixed,F(xiàn)ullFare表4.2站點(diǎn)表字段名數(shù)據(jù)類型長度主鍵/外鍵默認(rèn)值描述idInt4PKID,自動(dòng)增長StationVarchar50站點(diǎn)名稱表4.3線路表字段名數(shù)據(jù)類型長度主鍵/外鍵默認(rèn)值描述RouteNameChar20PK線路名稱ContentLongText線路全徑表4.4發(fā)車時(shí)間表字段名數(shù)據(jù)類型長度主鍵/外鍵默認(rèn)值描述idInt4PKID,自動(dòng)增長RouteNameChar20FK線路名稱FirstDepartureTimeTime首班發(fā)車時(shí)間LastDepartureTimeTime末班發(fā)車時(shí)間表4.5票價(jià)信息表字段名數(shù)據(jù)類型長度主鍵/外鍵默認(rèn)值描述idInt4PKID,自動(dòng)增長RouteNameChar20FK線路名稱isFixedFareChar5是否為分段計(jì)費(fèi)FullFareDouble8全程票價(jià)4.3客戶端數(shù)據(jù)庫設(shè)計(jì):4.3.1SQLite簡介Android數(shù)據(jù)庫使用的是SQLiteDatabase,我們來簡單的介紹下Android平臺(tái)上的SQLiteDatabase。SQLite是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語言相結(jié)合,比方Tcl、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款世界著名開源的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。該軟件數(shù)據(jù)庫的建立是完全在Android平臺(tái)上執(zhí)行Java代碼,通過DVM編譯來建立的,沒有什么輔助工具,由于整個(gè)SQLite數(shù)據(jù)庫是非可視化操作,所有對數(shù)據(jù)庫的操作都是通過執(zhí)行Java代碼實(shí)現(xiàn),在完成其查詢功能的時(shí)候沒有使用數(shù)據(jù)庫高級(jí)編程,較為麻煩的關(guān)節(jié)是在如何有機(jī)的將客戶端數(shù)據(jù)庫整體結(jié)構(gòu)實(shí)現(xiàn)出來,實(shí)現(xiàn)過程是無可視界面,也沒有數(shù)據(jù)庫輔助工具情況下,整個(gè)過程很抽象。且表的設(shè)計(jì)應(yīng)盡量簡單,不要有錯(cuò)綜復(fù)雜的關(guān)系,每張表都是獨(dú)立的,不存在任何約束,數(shù)據(jù)庫也是獨(dú)立數(shù)據(jù)庫,不采用Android特有的可共享數(shù)據(jù)庫。4.3.2數(shù)據(jù)庫設(shè)計(jì)E-R關(guān)系如圖4.3所示。圖4.3客戶端數(shù)據(jù)庫E-R圖根據(jù)上面的E-R圖,本軟件客戶端定義的arashmen數(shù)據(jù)庫中包含以下4張表:站點(diǎn)表:station(表7)、線路表:routes(表8)、發(fā)車時(shí)間表:departuretime(表9)、票表:fare(表10)。本軟件效勞器數(shù)據(jù)庫所包含的表的描述如表6。表4.6數(shù)據(jù)庫概況表表名描述主要字段stations(站點(diǎn)表)保存站點(diǎn)信息ID,stationroutes(線路表)保存線路信息ID,RouteName,ContentDeparturetime(發(fā)車時(shí)間表)保存首班發(fā)車時(shí)間保存末班發(fā)車時(shí)間RouteNameFirstDepartureTime,LastDepartureTimefare(票價(jià)信息表)保存公交線路票價(jià)信息ID,isFixed,F(xiàn)ullFare表4.7站點(diǎn)表字段名數(shù)據(jù)類型長度主鍵/外鍵默認(rèn)值描述idInt4PKID,自動(dòng)增長StationVarchar50站點(diǎn)名稱表4.8線路表字段名數(shù)據(jù)類型長度主鍵/外鍵默認(rèn)值描述RouteNameChar20PK線路名稱ContentLongText線路全徑表4.9發(fā)車時(shí)間表字段名數(shù)據(jù)類型長度主鍵/外鍵默認(rèn)值描述idInt4PKID,自動(dòng)增長RouteNameChar20FK線路名稱FirstDepartureTimeTime首班發(fā)車時(shí)間LastDepartureTimeTime末班發(fā)車時(shí)間表4.10票價(jià)信息表字段名數(shù)據(jù)類型長度主鍵/外鍵默認(rèn)值描述idInt4PKID,自動(dòng)增長RouteNameChar20FK線路名稱isFixedFareChar5是否為分段計(jì)費(fèi)FullFareDouble8全程票價(jià)第五章效勞器打量細(xì)設(shè)計(jì)5.1后臺(tái)管理模式后臺(tái)制作使用JSP完成。根本管理流程如圖5.1所示。圖5.1管理流程圖通過管理員模式進(jìn)入管理員添加線路頁面,可以添加公交線路名稱,首班發(fā)車時(shí)間,末班發(fā)車時(shí)間,線路全徑。添加頁面如圖5.2所示。圖5.2添加線路頁面實(shí)現(xiàn)添加功能代碼如下所示:<%@pagecontentType="text/html;charset=gb2312"%><%@pagelanguage="java"%><%@pageimport="com.mysql.jdbc.Driver"%><%@pageimport="java.sql.*"%><%@pageimport="java.util.regex.Pattern"%><%request.setCharacterEncoding("GB2312");%><% //接收從adminPageInsert.jsp傳來的數(shù)據(jù)StringroutesName=request.getParameter("RoutesName").trim();Stringroute=request.getParameter("Route");StringfirstDepartureTime=request.getParameter("FirstDepartureTime");StringfinalDepartureTime=request.getParameter("LastDepartureTime"); Stringurl="jdbc:mysql://localhost:3306/arashmen"; Stringuser="root"; Stringpassword="Jone"; Class.forName("com.mysql.jdbc.Driver").newInstance(); Connectioncon=DriverManager.getConnection(url,user,password); PreparedStatementstmt_routes; PreparedStatementstmt_departuretime; try{//拋出異常就直接執(zhí)行rollback Stringinsert_routes="insertintoroutes(RouteName,Content)values(?,?)"; Stringinsert_departuretime="insertintodeparturetime(FirstDepartureTime,LastDepartureTime)values(?,?)"; //preparedstatement相比statement更具有優(yōu)勢 stmt_routes=con.prepareStatement(insert_routes); stmt_departuretime=con.prepareStatement(insert_departuretime); stmt_routes.setString(1,routesName); stmt_routes.setString(2,route); stmt_departuretime.setString(1,firstDepartureTime); stmt_departuretime.setString(2,finalDepartureTime); stmt_routes.executeUpdate(); stmt_departuretime.executeUpdate(); response.sendRedirect("adminPageInsert.jsp"); }catch(Exceptionex){ //con.rollback();//回滾 }finally{ con.close(); }%>通過管理員模式進(jìn)入管理員修改、刪除線路頁面,可以對已經(jīng)添加成功的公交線路信息修改并保存,也可以直接在該頁面刪除數(shù)據(jù)。修改、刪除線路頁面如圖5.3所示。圖5.3修改,刪除頁面實(shí)現(xiàn)修改、刪除功能代碼如下所示:<%@pagecontentType="text/html;charset=gb2312"%><%@pagelanguage="java"%><%@pageimport="com.mysql.jdbc.Driver"%><%@pageimport="java.sql.*"%><%request.setCharacterEncoding("GB2312");%><%StringrouteName=request.getParameter("routeNameText").substring(0,3).trim();;StringfirstDepartureTime=request.getParameter("firstDepartureText");StringfinalDepartureTime=request.getParameter("finalDepartureText");StringupdateValue=request.getParameter("Update");Stringroutes=request.getParameter("routesTextArea"); Stringurl="jdbc:mysql://localhost:3306/arashmen"; Stringuser="root"; Stringpassword="Jone"; Class.forName("com.mysql.jdbc.Driver").newInstance(); Connectioncon=DriverManager.getConnection(url,user,password); try{Stringupdate_routes="updateroutessetContent=?whereRouteName=?";Stringupdate_departuretime="updatedeparturetimesetFirstDepartureTime=?,LastDepartureTime=?whereRouteName=?";Stringdelete="deletefromroutes,departuretimewhereRouteName=?";StringstrRoutes=null; if("修改并保存".equals(updateValue)){ PreparedStatementstmt_routes=con.prepareStatement(update_routes); PreparedStatementstmt_departuretime=con.prepareStatement(update_departuretime); stmt_routes.setString(1,routes); stmt_routes.setString(2,routeName); stmt_departuretime.setString(1,firstDepartureTime); stmt_departuretime.setString(2,finalDepartureTime); stmt_departuretime.setString(3,routeName); stmt_routes.executeUpdate(); stmt_departuretime.executeUpdate(); stmt_routes.close(); stmt_departuretime.close(); con.close(); }else{ PreparedStatementstmt=con.prepareStatement(delete); stmt.setString(1,routeName); stmt.executeUpdate(); stmt.close(); con.close(); } out.println("alert(\"刪除成功!\")"); response.sendRedirect("adminPageUpdate.jsp"); }catch(Exceptione){ con.rollback(); }finally{ con.close(); } %>通過管理員模式進(jìn)入管理員查詢頁面,可以使用線路查詢和站點(diǎn)查詢,查詢功能如圖5.4所示。圖5.4查詢頁面實(shí)現(xiàn)管理員查詢頁面功能代碼如下所示:<%@pagecontentType="text/html;charset=gb2312"%><%@pagelanguage="java"%><%@pageimport="com.mysql.jdbc.Driver"%><%@pageimport="java.sql.*"%><%request.setCharacterEncoding("GB2312");%><% Stringcheck=request.getParameter("Check"); StringrouteName=request.getParameter("routeName"); StringbusStopBegin=request.getParameter("busStopBegin"); StringbusStopEnd=request.getParameter("busStopEnd"); Stringurl="jdbc:mysql://localhost:3306/arashmen"; Stringuser="root"; Stringpassword="Jone"; Class.forName("com.mysql.jdbc.Driver").newInstance(); Connectioncon=DriverManager.getConnection(url,user,password); Stringquery1="select*fromrouteswhereRouteNamelike?"; Stringquery2="select*fromrouteswhereContentlike?";%><html><head><title>線路查詢結(jié)果頁面</title><body> <% if(check.trim().equals("1")){ PreparedStatementstmt=con.prepareStatement(query1); stmt.setString(1,"%"+routeName+"%"); ResultSetrs=stmt.executeQuery(); while(rs.next()){ Stringroutes=rs.getString("Content"); Stringroutesname=rs.getString("RouteName"); %> <ahref=""> <%out.println(routesname+":"+routes+"<br>"+"<br>"+"<br>"); %></a> <% } rs.close(); stmt.close(); con.close(); }elseif(check.trim().equals("2")){ PreparedStatementstmt=con.prepareStatement(query2); stmt.setString(1,"%"+busStopBegin+"%"+busStopEnd+"%"); ResultSetrs=stmt.executeQuery(); while(rs.next()){ Stringroutes=rs.getString("Content"); Stringroutesname=rs.getString("RouteName"); %> <ahref=""><%out.println(routesname+":"+routes+"<br>"+"<br>"+"<br>");%></a> <%} rs.close(); stmt.close(); con.close(); } %></body></head></html>查詢結(jié)果如圖5.5所示。圖5.5結(jié)果頁面5.2查詢簡析查詢方式與數(shù)據(jù)存儲(chǔ)格式有關(guān),線路全徑的存儲(chǔ)為字符串,湘潭市13路公交車線路全徑如下所示:湘潭火車站-公安局-基建營-韶山東路-文家圍子-護(hù)潭廣場-護(hù)潭村-永紅村-潭九路口-科技大學(xué)南-科大路口-糧庫-桃園路口-高嶺路口-湘潭大學(xué)新路口-湘潭大學(xué)。5.2.1線路查詢按線路名稱查詢,如13路,13路公交車,13等只要不在13這個(gè)數(shù)字的1和3中間插入其他字符,就可以返回該線路的線路信息,票價(jià)信息和發(fā)車時(shí)間。5.2.2站點(diǎn)查詢在站點(diǎn)查詢頁面設(shè)置了兩個(gè)文本域,用來獲得起點(diǎn)地址和目標(biāo)地址,暫稱起點(diǎn)地址為A,稱目標(biāo)地址為B。(1)獲取了A與B的信息后,在數(shù)據(jù)查詢語句中將組合成“%A%B%”的形式,進(jìn)入數(shù)據(jù)庫進(jìn)行查詢,將所查詢到的所有結(jié)果返回到頁面顯示。如果沒有結(jié)果,那么進(jìn)行情況2。(2)考慮是否是乘車方向不對,數(shù)據(jù)庫只存儲(chǔ)單向的線路,沒有存儲(chǔ)一條返回的線路,在此只需要在查詢語句中將A與B的位置交換,將其組合成“%B%A%”形式再次進(jìn)行查詢,如果仍舊沒有返回結(jié)果,那么很有可能是A到B處可能沒有直達(dá)公交線路,在此那么要考慮換乘問題。(3)該情況采用的是將含有站點(diǎn)A和含有站點(diǎn)B的所有線路信息都查詢出來,然后利用當(dāng)初存儲(chǔ)標(biāo)準(zhǔn),使用正那么表達(dá)式中的split方法將每一個(gè)線路信息〔String類型〕分割成字符串?dāng)?shù)組(String[]),然后便利分割后的A與B的字符串?dāng)?shù)組,字符串?dāng)?shù)組中的每個(gè)字元素代表每個(gè)站點(diǎn),在返回假設(shè)干結(jié)果之后,再進(jìn)行判斷,返回有效路徑中經(jīng)過站點(diǎn)數(shù)最少的路徑。算法請參考附錄B中算法onQueryStationOne(),onQueryStationTwo()。5.3數(shù)據(jù)庫同步5.3.1Servlet客戶端發(fā)出一個(gè)請求,效勞器接收后并且響應(yīng)返回一段流。客戶端接收后再根據(jù)效勞器端返回流的格式來解析數(shù)據(jù)。5.3.2DAODAO是DataAccessObject數(shù)據(jù)訪問接口,數(shù)據(jù)訪問:故名思義就是與數(shù)據(jù)庫打交道。夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間。在此使用DAO模式中封裝數(shù)據(jù)的方法,將這些數(shù)據(jù)封裝后按照一定的格式寫成數(shù)據(jù)流。5.3.3XMLXml語言具有特殊標(biāo)準(zhǔn),所以效勞器端返回的流均是按照xml語言標(biāo)準(zhǔn)寫入,客戶端也按照Xml語言標(biāo)準(zhǔn)讀出數(shù)據(jù)。按Xml標(biāo)準(zhǔn)將表routes數(shù)據(jù)信息寫成數(shù)據(jù)流的代碼如下:response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();UpdateDaoRoutesdao=newUpdateDaoRoutesImpl();Listlist=dao.getRoutesList();out.println("<?xmlversion='1.0'encoding='UTF-8'?>"); out.println("<RoutesList>"); for(inti=0;i<list.size();i++){ Routesroute=(Routes)list.get(i); out.println("<routes>"); out.print("<RouteName>"); out.print(route.getRouteName()); out.println("</RouteName>"); out.print("<Content>"); out.print(route.getContent()); out.println("</Content>"); out.println("</routes>"); } out.println("</RoutesList>"); out.flush(); out.close();第六章客戶打量細(xì)設(shè)計(jì)6.1簡述在互聯(lián)網(wǎng)迅速開展的形式下,我們不得不考慮,是否還真的有必要將公交線路查詢軟件緊緊局限于PC機(jī)上,每次查詢都要找個(gè)PC機(jī)然后再記錄下來,那樣雖然到達(dá)了查詢的目的,但是這種方式是否就能夠滿足用戶的需求了,那如果在沒有PC機(jī)的環(huán)境呢,或者說總不能隨身帶個(gè)PC機(jī)或者筆記本電腦出門,只為了查詢公交線路,很明顯這種方法意義不大。但是我們可以換種思維去考慮,既然PC機(jī)可以迷你成筆記本,那么也肯定有一定的方法將其的局部功能放到更小型的“PC”上面去,比方。其實(shí)隨著硬件設(shè)備的逐漸開展,不少的高端甚至可以沖當(dāng)一臺(tái)計(jì)算機(jī)使用,如今沒電腦的人可能不在少數(shù),但是放眼望去,有幾個(gè)沒有呢。此次設(shè)計(jì)的主要目的是實(shí)用,讓人們使用起來會(huì)更加簡便。目前主流操作系統(tǒng)有MacOS,WindowsMobile,Android,Symbian,分別由蘋果公司,微軟,谷歌,諾基亞推出,而本次設(shè)計(jì)是在Android平臺(tái)下進(jìn)行開發(fā)。在此就不分別一一介紹每一個(gè)軟件開發(fā)平臺(tái),主要對Android進(jìn)行介紹。 環(huán)境搭建請參考文獻(xiàn)[3]。6.2什么是AndroidAndroid是首個(gè)基于Linux平臺(tái)的開源操作系統(tǒng),該平臺(tái)由操作系統(tǒng)中間件,用戶界面和應(yīng)用軟件組成號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的軟件。Android一詞的本義指“機(jī)器人”,2003年美國有一家以Android為名的小公司成立,開發(fā)平臺(tái)。Google收購Android之后,于07年11月5日發(fā)布了開源的Android平臺(tái)——一款包括操作系統(tǒng)〔基于Linux內(nèi)核〕、中間件和關(guān)鍵應(yīng)用的平臺(tái),并組建了開放聯(lián)盟(OpenHandsetAlliance),包括Google、中國移動(dòng)、T-Mobile、宏達(dá)、高通、摩托羅拉等領(lǐng)軍企業(yè)。2008年9月22日,美國運(yùn)營商T-MobileUSA在紐約正式發(fā)布第一款Google——T-MobileG1。該款為宏達(dá)電制造,是世界上第一部使用Android操作系統(tǒng)的。6.3Android系統(tǒng)架構(gòu)簡介從軟件分層的角度來看,Android平臺(tái)由應(yīng)用程序,應(yīng)用程序框架,Android運(yùn)行時(shí),庫以及Linux內(nèi)核共5局部構(gòu)成。如圖6.1所示。圖6.1整體結(jié)構(gòu)6.3.1應(yīng)用程序(APPLICATIONS)Android平臺(tái)默認(rèn)包含了一系列核心應(yīng)用程序,包括電子郵件、短信、日歷、地圖、瀏覽器、聯(lián)系人管理程序等,這些程序都以java程序語言編寫,你也可以用自己便攜的應(yīng)用程序來替換Android提供的應(yīng)用程序,這個(gè)替換的機(jī)制實(shí)際是由應(yīng)用程序框架來保證的。如圖6.2所示。圖6.2應(yīng)用層6.3.2應(yīng)用程序框架(APPLICATIONFRAMEWORK)應(yīng)用程序框架是我們進(jìn)行Android開發(fā)的根底應(yīng)用程序框架層包含了視圖系統(tǒng),內(nèi)容提供器,窗口管理器,活動(dòng)管理器,通知管理器,位置管理器,資源管理器,管理器和包管理器9大局部。如圖6.3所示。圖6.3中間件層6.3.3Android運(yùn)行時(shí)(RUNTIME)Android雖然采取Java程序語言來編寫應(yīng)用程序,但不使用J2ME執(zhí)行Java程序,而是用Android自有的Android運(yùn)行時(shí)〔RunTime〕.Android運(yùn)行時(shí)包括核心庫和Dalvik虛擬機(jī)兩局部。如圖6.4所示。圖6.4核心庫,虛擬機(jī)6.3.4系統(tǒng)庫(LIBRARIES)應(yīng)用程序框架是貼近于應(yīng)用程序的軟件組件效勞,而更底層那么是Android的函數(shù)庫,這一局部是應(yīng)用程序框架的支撐,其架構(gòu)如圖6.5所示。圖6.5 系統(tǒng)庫6.3.5LinuxAndroid平臺(tái)是開放,采用Linux內(nèi)核那么是Android平臺(tái)開放性的根底。Android平臺(tái)中的操作系統(tǒng)采用了Linux2.6版的內(nèi)核,它包括了顯示驅(qū)動(dòng)、攝像頭驅(qū)動(dòng)、Flash內(nèi)存驅(qū)動(dòng)、Binder〔IPC〕驅(qū)動(dòng)、鍵盤驅(qū)動(dòng)、wifi驅(qū)動(dòng)、Audio驅(qū)動(dòng)以及電源管理局部。Linux內(nèi)核層為我們在軟件層和硬件層建立了一個(gè)抽象層,使得應(yīng)用程序開發(fā)人員無需關(guān)心硬件細(xì)節(jié)。對于的開發(fā)商而言,如果想要Android平臺(tái)運(yùn)行到自己的硬件平臺(tái)上就必須通過對Linux層進(jìn)行修改,通常要做的工作就是為自己的硬件便攜驅(qū)動(dòng)程序。6.4實(shí)現(xiàn)客戶端數(shù)據(jù)庫6.4.1SQL語言創(chuàng)立表請參考附錄A。6.4.2創(chuàng)立數(shù)據(jù)庫在Android平臺(tái)上,不能像Mysql一樣通過啟動(dòng)mysqld來進(jìn)入數(shù)據(jù)庫進(jìn)行操作,Android平臺(tái)上的數(shù)據(jù)庫操作只有通過執(zhí)行Java代碼,將有效的SQL語句傳入后臺(tái),來進(jìn)行有效操作。這種訪問數(shù)據(jù)庫的方式,是目前唯一在Android平臺(tái)上訪問數(shù)據(jù)庫的途徑。數(shù)據(jù)庫創(chuàng)立代碼如下:publicSQLiteDatabaseDatabaseonCreate(){ SQLiteDatabasedb=null; try{//數(shù)據(jù)庫名arashmen,文件格式.dbdb=this.openOrCreateDatabase("arashmen.db",MODE_WORLD_WRITEABLE,null); }catch(Exceptione){ e.printStackTrace(); } returndb; }6.4.3客戶端數(shù)據(jù)庫操作DBHelper類,是數(shù)據(jù)庫操作類,onCreate()方法是創(chuàng)立表,onUpgrade()方法是刪除所有表,onRoutesInsert()、onDepartureTimeInsert()、onFareInsert()、onStationsInsert()分別是對表routes、departuretime、fare、stations進(jìn)行插入數(shù)據(jù)操作,DBHelper類及方法用于數(shù)據(jù)同步更新。DBHelper類代碼如下:packagevider;importjava.sql.SQLData;importandroid.content.ContentValues;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;importandroid.database.sqlite.SQLiteDatabase.CursorFactory;importandroid.util.Log;importandroid.widget.ArrayAdapter;importandroid.widget.ListView;publicclassDBHelperextendsSQLiteOpenHelper{privatestaticfinalStringDATABASE_NAME="arashmen.db";publicstaticfinalintDATABASE_VERSION=2; publicstaticfinalStringTABLE_Routes="routes"; publicstaticfinalStringTABLE_DepartureTime="departuretime";publicstaticfinalStringTABLE_Fare="fare";publicstaticfinalStringTABLE_Stations="stations"; publicDBHelper(Contextcontext){ super(context,DATABASE_NAME,null,DATABASE_VERSION); } publicvoidonCreate(SQLiteDatabasedb){ db.execSQL(Table.routesTB); db.execSQL(Table.departuretimeTB); db.execSQL(Table.fareTB); db.execSQL(Table.stationsTB); } publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){ db.execSQL("DROPTABLEIFEXISTSroutes;"); db.execSQL("DROPTABLEIFEXISTSdeparturetime;"); db.execSQL("DROPTABLEIFEXISTSfare;"); db.execSQL("DROPTABLEIFEXISTSstations;"); onCreate(db); } publicvoidonRoutesInsert(ContentValuesvalues,SQLiteDatabasedb){ db.insert(TABLE_Routes,null,values); } publicvoidonDepartureTimeInsert(ContentValuesvalues,SQLiteDatabasedb){ db.insert(TABLE_DepartureTime,null,values); } publicvoidonFareInsert(ContentValuesvalues,SQLiteDatabasedb){ db.insert(TABLE_Fare,null,values); } publicvoidonStationsInsert(ContentValuesvalues,SQLiteDatabasedb){ db.insert(TABLE_Stations,null,values); }}Table類是將所有要執(zhí)行創(chuàng)立過程的語句歸到該類。Table類代碼如下:packagevider;publicclassTable{ publicstaticfinalStringARASHMEN_TABLE_RPOUTES="routes"; publicstaticfinalStringARASHMEN_TABLE_DEIPARTURETIME="departuretime";publicstaticfinalStringARASHMEN_TABLE_FARE="fare";publicstaticfinalStringARASHMEN_TABLE_STATIONS="stations";publicstaticfinalStringroutesTB="createtableroutes(RouteNamechar(16)primarykey,Contenttext);";publicstaticfinalStringdeparturetimeTB="createtabledeparturetime(idintprimarykey,RouteNamechar(16),FirstDepartureTimechar(20),LastDepartureTimechar(20));";publicstaticfinalStringfareTB="createtablefare(idintprimarykey,RouteNamechar(16),isFixedFarechar(6),FullFaredouble);";publicstaticfinalStringstationsTB="createtablestations(idintprimarykey,Stationvarchar(50));";}6.5客戶端功能模塊實(shí)現(xiàn)6.5.1線路查詢用戶登錄公交線路查詢頁面,可以用按照站點(diǎn)查詢和按照線路名查詢兩個(gè)功能,線路查詢和站點(diǎn)查詢界面如圖6.6所示。圖(a) 圖(b)圖6.6線路查詢和站點(diǎn)查詢頁面線路查詢和站點(diǎn)查詢功能代碼詳見附錄B。票價(jià)信息查詢和發(fā)車時(shí)間查詢界面如圖6.7所示。 圖(a) 圖(b)圖6.7票價(jià)信息查詢和發(fā)車時(shí)間查詢頁面票價(jià)信息和發(fā)車時(shí)間數(shù)據(jù)均為虛擬出的數(shù)據(jù),以實(shí)際的湘潭市公交信息為準(zhǔn),票價(jià)信息查詢和發(fā)車時(shí)間查詢功能代碼詳見附錄C。6.5.2地圖功能借助GoogleMap完成地圖查詢功能,地圖查詢結(jié)果界面如圖6.8所示。圖6.8地圖查詢結(jié)果顯示向Google效勞器發(fā)出請求代碼如下:fromGeoPoint=getGeoByAddress(departure);toGeoPoint=getGeoByAddress(arrive);Intentintent=newIntent();intent.setAction(android.content.Intent.ACTION_VIEW);/*傳入路徑規(guī)劃所需要的地標(biāo)地址*/intent.setData(Uri.parse("://maps.google/maps?f=d&saddr="+GeoPointToString(fromGeoPoint)+"&daddr="+GeoPointToString(toGeoPoint)+"&hl=cn"+""));startActivity(intent);地址解析方法代碼如下:privateGeoPointgetGeoByAddress(StringstrSearchAddress){ GeoPointgp=null; try{ if(strSearchAddress!=""){ GeocodermGeocoder01=newGeocoder(QueryPage.this,Locale .getDefault()); List<Address>lstAddress=mGeocoder01.getFromLocationName( strSearchAddress,1); if(!lstAddress.isEmpty()){ AddressadsLocation=lstAddress.get(0); doublegeoLatitude=adsLocation.getLatitude()*1E6; doublegeoLongitude=adsLocation.getLongitude()*1E6; gp=newGeoPoint((int)geoLatitude,(int)geoLongitude); } } }catch(Exceptione){ e.printStackTrace(); } returngp; }privateStringGeoPointToString(GeoPointgp){ StringstrReturn=""; try{ if(gp!=null){ doublegeoLatitude=(int)gp.getLatitudeE6()/1E6; doublegeoLongitude=(int)gp.getLongitudeE6()/1E6; strReturn=String.valueOf(geoLatitude)+"," +String.valueOf(geoLongitude); } }catch(Exceptione){ e.printStackTrace(); } returnstrReturn; }Android平臺(tái)是由Google公司推出的一個(gè)開源的開發(fā)平臺(tái),Google公司將軟件GoogleMap集成在該平臺(tái)上了,調(diào)出地圖界面就是僅僅幾行代碼,在此所做的工作是,從本地?cái)?shù)據(jù)庫獲取到合法站點(diǎn)名,將地址解析成對應(yīng)的經(jīng)緯度,然后再將經(jīng)緯度傳入Google效勞器,Google效勞器便返回一段數(shù)據(jù)流,客戶端接收后加以處理,并以地圖的形式顯示。6.5.3數(shù)據(jù)更新數(shù)據(jù)更新功能,從效勞器獲得一段數(shù)據(jù)流,將該數(shù)據(jù)流解析,存入數(shù)據(jù)庫,解析表routes內(nèi)容的代碼如下:URLurl=newURL(“://43:8080/BusLineServer/servlet/UpdateRoutesServlet”); URLConnectionconn=url.openConnection(); conn.setConnectTimeout(5000); InputStreamin=conn.getInputStream(); DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance(); DocumentBuilderbuilder=factory.newDocumentBuilder(); Documentdoc=builder.parse(in); NodeListnl=doc.getElementsByTagName("routes"); for(inti=0;i<nl.getLength();i++){ ContentValuesvalues=newContentValues(); StringRouteName=doc.getElementsByTagName("RouteName") .item(i).getFirstChild().getNodeValue(); StringContent=doc.getElementsByTagName("Content").item(i) .getFirstChild().getNodeValue(); values.put("RouteName",RouteName); values.put("Content",Content); helper.onRoutesInsert(values,db); } }catch(Exceptione){ e.printStackTrace(); }6.5.4意見反應(yīng)用戶進(jìn)入意見反應(yīng)頁面,可以對該軟件提出意見,并以郵件的方式發(fā)給作者,如圖6.9所示。圖6.9意見反應(yīng)發(fā)送郵件代碼如下:Uriuri=Uri.parse("mailto:Arashmen@163");Intentit=newIntent(Intent.ACTION_SENDTO,uri);startActivity(it);第七章結(jié)論目前,該軟件可以在多款上使用,比方摩托羅拉,HTC,三星,清華同方等多家公司出臺(tái)的Android,支持該軟件的型號(hào)有Qdroid,G2,G3,HTCAndroid,清華同方QD等。此次開發(fā)中,完成了對湘潭市公交線路查詢軟件的需求分析,模塊設(shè)計(jì),數(shù)據(jù)庫設(shè)計(jì),搜集并整理了湘潭市公交線路信息。學(xué)習(xí)了最新的Android平臺(tái)開發(fā)技術(shù),充分進(jìn)行考慮,最終采用了B/S-C/S模式。實(shí)現(xiàn)了湘潭市公交線路查詢軟件預(yù)期功能。在今后不斷的測試中,發(fā)現(xiàn)缺乏和改善,以便能滿足大局部用戶的需求。整個(gè)公交線路查詢軟件過程中,走了不少彎路,遇到的問題很多,但是只要肯下功夫,方法總能有。對待從沒有見過的問題,敢于探討,敢于發(fā)表自己的意見,敢于創(chuàng)新,并且將想法在實(shí)踐中驗(yàn)證。參考文獻(xiàn)[1]張孝祥.Java就業(yè)培訓(xùn)教程[M].北京:清華大學(xué)出版社.2009:76-243.[2]王曉軍,田中雨,劉躍軍.JSP動(dòng)態(tài)網(wǎng)站開發(fā)根底教程與實(shí)驗(yàn)指導(dǎo)[M].北京:清華大學(xué)出版社.2008.11:121-280.[3]劉彬彬,馬文強(qiáng).Eclipse應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社.2005:204-386.[4]施伯樂,丁寶康,汪衛(wèi).數(shù)據(jù)庫庫系統(tǒng)教程北京[M].北京:高等教育出版社.2003.8:170-432.[5]韓超,梁泉著.Android系統(tǒng)原理及開發(fā)要點(diǎn)詳解[M].北京:電子工業(yè)出版社.2010.1:317-363389-512.[6]楊豐富.Android應(yīng)用開發(fā)解密[M].北京:機(jī)械工業(yè)出版社.2010.1:44-109156-187.致謝從畢業(yè)設(shè)計(jì)定題結(jié)束便著手搜集資料,按照要求完成了提綱,方案表等。雖然起步比晚,但確明白“笨鳥先飛”的道理,選完課題的時(shí)候,許多需要掌握的知識(shí)幾乎是零根底,一直本著既然做就要做好的想法,堅(jiān)信方法總是比困難多!所以有再大困難,只要用積極的態(tài)度去面對,總會(huì)有希望去解決并且完成。首先,感謝導(dǎo)師王潤云老師,雖然此次設(shè)計(jì)開發(fā),大局部時(shí)間都不在學(xué)校,王老師還是對我寄予了很多關(guān)心,依稀記得第一次開會(huì)的時(shí)候,王老師說的這么句話:“當(dāng)你要做設(shè)計(jì)的時(shí)候,雖然有很多東西都不會(huì),但是要敢于下決心,拿出精神頭來,好好的去學(xué)這么一回,只要這幾個(gè)月你好好做設(shè)計(jì),那么學(xué)的不僅僅是設(shè)計(jì)的這點(diǎn)知識(shí),有些東西你將終身受益!”。而如今,在畢業(yè)之際,回想老師說的這句話,確實(shí)深有體會(huì)當(dāng)初王老師說的那些話,在此要特別感謝我的導(dǎo)師,王潤云老師!朱建軍老師是我的班主任,平時(shí)朱老師的工作確實(shí)很忙,還要常抽出時(shí)間照顧這群還沒長大的大學(xué)生,一晃四年即將過去,大家都從懵懂的少年,變的成熟穩(wěn)重了。朱老師寄予我們的幫助是很多很多的,在此真誠的對朱老師表示謝意。 此外還要感謝很多很多,親人,朋友以及所有幫助過的你的人,你都應(yīng)該表示感謝,在這次設(shè)計(jì)開發(fā)的過程中,確實(shí)碰到了很多困難,但是也碰到很多朋友,都很熱情的給予幫助,在這個(gè)過程中我漸漸學(xué)會(huì),并且懂得了另外的一些東西,比方:感恩,堅(jiān)持! 畢業(yè)之際,做為一名科大學(xué)子,我深深的為此感到驕傲,四年之內(nèi),我品嘗了人生五味瓶,珍惜每一段記憶,感謝每一位科大學(xué)子,感謝計(jì)算機(jī)科學(xué)與工程學(xué)院,感謝我的母校,湖南科技大學(xué)!附錄A數(shù)據(jù)庫更新語句//刪除同名表DROPTABLEIFEXISTSroutes;DROPTABLEIFEXISTSdeparturetime;DROPTABLEIFEXISTSfare;DROPTABLEIFEXISTSstations;//創(chuàng)立表routescreatetableroutes(RouteNamechar(16)primarykey,Contenttext);//創(chuàng)立表departuretimecreatetabledeparturetime(idintprimarykey,RouteNamechar(16),FirstDepartureTimechar(20),LastDepartureTimechar(20));//創(chuàng)立表farecreatetablefare(idintprimarykey,RouteNamechar(16),isFixedFarechar(6),FullFaredouble);//創(chuàng)立表stationscreatetablestations(idintprimarykey,Stationvarchar(50));附錄B線路和站點(diǎn)查詢代碼publicclassQueryPage<Resource>extendsTabActivity{ publicfinalstaticStringXTCity="中國湖南省湘潭市"; privateImageButtonbusStopButton,routeNameButton; privateAutoCompleteTextViewdepartureText,arriveText,routeNameText; privateListViewstationListView,routeNameListView; privateDBHelperhelper; privateSQLiteDatabasearashmen; privateViewtabLinear; privateLinearLayoutlinearLayout; privateZoomControlsmZoom; privateGeoPointfromGeoPoint,toGeoPoint; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); tabLinear=(View)findViewById(R.id.View01); TabHostchoice=getTabHost(); LayoutInflater.from(this).inflate(R.layout.querytab, choice.getTabContentView(),true); choice.addTab(choice.newTabSpec("busStop").setIndicator("站點(diǎn)-站點(diǎn)") .setContent(R.id.LinearLayout01)); choice.addTab(choice.newTabSpec("routeName").setIndicator("線路名稱") .setContent(R.id.LinearLayout02)); busStopButton=(ImageButton)findViewById(R.id.SureButton1); routeNameButton=(ImageButton)findViewById(R.id.SureButton2); departureText=(AutoCompleteTextView)findViewById(R.id.DepartureAutoText); arriveText=(AutoCompleteTextView)findViewById(R.id.ArriveAutoText); routeNameText=(AutoCompleteTextView)findViewById(R.id.RouteNameAutoText); routeNameListView=(ListView)findViewById(R.id.RouteNameListView); stationListView=(ListView)findViewById(R.id.BusStopListView); arashmen=DatabaseonCreate(); intflag=0; Cursorc1=arashmen.query(DBHelper.TABLE_Routes,null,null,null, null,null,null); List<String>list1=newArrayList<

溫馨提示

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

最新文檔

評論

0/150

提交評論