基于XML的公交線路查詢系統(tǒng)設(shè)計與實現(xiàn)-精品_第1頁
基于XML的公交線路查詢系統(tǒng)設(shè)計與實現(xiàn)-精品_第2頁
基于XML的公交線路查詢系統(tǒng)設(shè)計與實現(xiàn)-精品_第3頁
基于XML的公交線路查詢系統(tǒng)設(shè)計與實現(xiàn)-精品_第4頁
基于XML的公交線路查詢系統(tǒng)設(shè)計與實現(xiàn)-精品_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

NUM參考文獻(xiàn)PAGE39

第一章緒論本章簡要介紹公交查詢系統(tǒng)的應(yīng)用背景、發(fā)展現(xiàn)狀及發(fā)展前景。1.1應(yīng)用背景隨著交通工具的不斷革新,距離已經(jīng)不再是人們足跡的羈絆,龐大復(fù)雜的交通網(wǎng)幾乎覆蓋了世界的每一個角落,使人們可以到達(dá)任何一個想去的地方,然而當(dāng)人們面對交通網(wǎng)時卻會因為它本身的復(fù)雜而顯得不知所措,從而感覺到出行的麻煩。在過去,當(dāng)人們在一個不熟悉的城市時,或不清楚本城市的公交線路時,只能采用打電話咨詢,看交通地圖,向熟人打聽等傳統(tǒng)方式查詢公交信息,這樣會浪費大家很多時間、精力和財力,而且得到的信息也不一定是可靠的。這是還沒有公交線路查詢系統(tǒng)時所出現(xiàn)的情況。在互聯(lián)網(wǎng)普及的今天,交通信息服務(wù)的電子化、網(wǎng)絡(luò)化是已經(jīng)是必然的趨勢,而提供良好的公交服務(wù)是建設(shè)和諧社會的基本要求。以信息化為基礎(chǔ),促進乘客、車輛、站點設(shè)施以及交通環(huán)境等要素之間的良性互動,能有效推動公交系統(tǒng)建設(shè)。為了能夠為市民特別是為外來旅游、出差、就醫(yī)、求職等急需了解本地的公交路線的人提供高效、快捷的公交信息查詢,讓他們可以方便的在網(wǎng)絡(luò)上得到自己所需要的各種相關(guān)信息,以便減少各種可能產(chǎn)生的不必要的交通流量,提高公交的運作效率,節(jié)約出行時間。因此,開發(fā)一個供人們快速查找公交線路的網(wǎng)絡(luò)程序是勢在必行的。1.2發(fā)展現(xiàn)狀近年來,公交查詢系統(tǒng)發(fā)展迅速,各大城市基本都擁有著自己的公交線路查詢系統(tǒng),網(wǎng)絡(luò)上也有著許多不同的版本。不過公交查詢系統(tǒng)在發(fā)展的同時也存在著一些問題,還需要進行不斷的規(guī)范和完善。最開始的公交查詢系統(tǒng)脫離了網(wǎng)絡(luò),只是一種放在網(wǎng)絡(luò)上供人下載后再查詢的程序,可以說是一種單機程序。用戶需下載后再使用程序來查詢公交路線,且若有更新的版本還需更新程序。這樣的查詢費時費力,還容易被人在程序中種入木馬,已經(jīng)逐漸被淘汰;有一部分公交查詢系統(tǒng),它們只是把各條線路和線路的信息一一羅列在頁面上,讓用戶自己一頁一頁的翻看查找,這樣的公交查詢根本不方便不快捷。一個真正完善的公交查詢系統(tǒng)應(yīng)該實現(xiàn)用戶輸入想查詢的內(nèi)容,系統(tǒng)自動給出查詢結(jié)果,而不是讓用戶手動去翻找查詢;也有一部分公交查詢系統(tǒng),它們的系統(tǒng)功能不完善,只實現(xiàn)了各個站點和線路的查詢信息,而沒有實現(xiàn)站點到站點的查詢和轉(zhuǎn)乘的功能,這也就是相當(dāng)于一種電子地圖。這種系統(tǒng)不能完全滿足用戶的需求;還有一部分公交查詢系統(tǒng),它們系統(tǒng)功能還算完善,但是頁面結(jié)構(gòu)復(fù)雜,而且頁面上布滿了廣告和各種與公交查詢無關(guān)的信息,容易誤導(dǎo)使用者。這樣使用戶查詢一點都不方便,而且影響美觀度,也影響了系統(tǒng)在用戶心目中的良好形象。除此之外,現(xiàn)行的公交查詢系統(tǒng)還有著或多或少的缺陷。因此,公交查詢系統(tǒng)的發(fā)展還有待進一步的規(guī)范和改進。1.3國內(nèi)外研究概況目前,國內(nèi)外公交查詢系統(tǒng)都發(fā)展到了一個比較成熟的階段,無論是從理論上還是從技術(shù)上都比較成熟。國外公交查詢系統(tǒng)更是早已經(jīng)實現(xiàn)了智能化、信息化、社會化。據(jù)相關(guān)資料了解,國外的公交查詢系統(tǒng)現(xiàn)在已經(jīng)將GIS、GPS、RS技術(shù)集合到公交查詢系統(tǒng)中。GIS技術(shù):即GeographyInfomationSystem,地理信息系統(tǒng)。簡單說就是將地圖與數(shù)據(jù)庫相結(jié)合。GPS技術(shù):即GlobePositionSystem,全球定位系統(tǒng),通過每3顆衛(wèi)星確定一個點的經(jīng)緯度坐標(biāo),使用WGS_1984坐標(biāo)系。RS技術(shù):RemoteSensing,遙感。通過衛(wèi)星或飛機接收地面反射波普,判斷地面情況的技術(shù)?,F(xiàn)在國內(nèi)的公交查詢系統(tǒng)也結(jié)合了很多技術(shù),比如:基于ASP.NET+XML的公交查詢系統(tǒng),基于J2ME的公交查詢系統(tǒng),基于WebGIS公交查詢系統(tǒng)。國內(nèi)公交查詢系統(tǒng)也正在向?qū)IS、GPS、RS技術(shù)相結(jié)合的方向發(fā)展。在20世紀(jì)90年代初意大利學(xué)者D.origo,V.Maniezzo,A.Colorni等通過模擬螞蟻搜索路徑的行為,發(fā)明出螞蟻算法。該算法可以帶記憶功能,選擇某路徑的次數(shù)最多,說明此路徑是比較優(yōu)的路徑,其信息素的值也越大,為以后選擇路徑提供必要的信息。系統(tǒng)使用的時間越長,為乘客提供的信息越全面,越準(zhǔn)確,系統(tǒng)也越智能化。1.4發(fā)展前景隨著公交查詢系統(tǒng)的不斷發(fā)展完善,各種新技術(shù)的不斷涌現(xiàn),未來的公交查詢系統(tǒng)將基于B/S架構(gòu),通過瀏覽器查詢,通過計算機網(wǎng)絡(luò)全面聯(lián)網(wǎng),實現(xiàn)中心控制、自動更新、異地查詢等功能,同時可添加電話服務(wù)、語音服務(wù)、在線服務(wù)等功能,幫助用戶更好的使用公交查詢系統(tǒng)。還可以開發(fā)手機版本的公交線路查詢系統(tǒng),使用手機上網(wǎng)的用戶可以輕松的隨時隨地進行公交線路查詢,免去了上網(wǎng)的時間,大大方便了用戶。1.5系統(tǒng)目標(biāo)隨著科學(xué)技術(shù)的迅猛發(fā)展,計算機已經(jīng)得到了廣泛的應(yīng)用。幾乎各行各業(yè)都有關(guān)于計算機的使用,這使得計算機已成為社會中普遍存在的事物。由于計算機的使用,使得人們在管理、應(yīng)用及服務(wù)等各個領(lǐng)域使用數(shù)據(jù)方面變得更加簡潔,更加方便,大大提高了工作效率,產(chǎn)生了以計算機為主體,以人為輔助的局面。在此所設(shè)計的公交車查詢系統(tǒng)就是為了方便人員在數(shù)據(jù)查詢方面的操作,使得他們在日常生活中都會達(dá)到事半功倍的效果,減輕了人力的負(fù)擔(dān),方便了數(shù)據(jù)的存儲,增加了安全性。本系統(tǒng)能夠使用戶簡單的查詢出他們自己想要的車次經(jīng)過哪些站點,在哪一站可以轉(zhuǎn)乘,然后繼續(xù)換乘哪路車;也可以預(yù)先知道可以通過哪些車次可以到達(dá)目的地。管理員可以通過對公交線路系統(tǒng)信息進行一系列的修改。

第二章相關(guān)理論基礎(chǔ)本章簡要介紹了數(shù)據(jù)庫、XML、C#、B/S系統(tǒng)的一些知識及系統(tǒng)的查詢算法。2.1數(shù)據(jù)庫介紹數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫,它產(chǎn)生于距今五十年前,隨著信息技術(shù)和市場的發(fā)展,特別是二十世紀(jì)九十年代以后,數(shù)據(jù)管理不再僅僅是存儲和管理數(shù)據(jù),而轉(zhuǎn)變成用戶所需要的各種數(shù)據(jù)管理的方式。數(shù)據(jù)庫有很多種類型,從最簡單的存儲有各種數(shù)據(jù)的表格到能夠進行海量數(shù)據(jù)存儲的大型數(shù)據(jù)庫系統(tǒng)都在各個方面得到了廣泛的應(yīng)用。例如,企業(yè)或事業(yè)單位的人事部門常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個數(shù)據(jù)庫。有了這個"數(shù)據(jù)倉庫"人們就可以根據(jù)需要隨時查詢某職工的基本情況,也可以查詢工資在某個范圍內(nèi)的職工人數(shù)等等。這些工作如果都能在計算機上自動進行,那企業(yè)的人事管理就可以達(dá)到極高的水平。此外,在財務(wù)管理、倉庫管理、生產(chǎn)管理中也需要建立眾多的這種"數(shù)據(jù)庫",使其可以利用計算機實現(xiàn)財務(wù)、倉庫、生產(chǎn)的自動化管理。數(shù)據(jù)庫發(fā)展史數(shù)據(jù)庫技術(shù)從誕生到現(xiàn)在,在不到半個世紀(jì)的時間里,形成了堅實的理論基礎(chǔ)、成熟的商業(yè)產(chǎn)品和廣泛的應(yīng)用領(lǐng)域,吸引越來越多的研究者加入。數(shù)據(jù)庫的誕生和發(fā)展給計算機信息管理帶來了一場巨大的革命。三十多年來,國內(nèi)外已經(jīng)開發(fā)建設(shè)了成千上萬個數(shù)據(jù)庫,它已成為企業(yè)、部門乃至個人日常工作、生產(chǎn)和生活的基礎(chǔ)設(shè)施。同時,隨著應(yīng)用的擴展與深入,數(shù)據(jù)庫的數(shù)量和規(guī)模越來越大,數(shù)據(jù)庫的研究領(lǐng)域也已經(jīng)大大地拓廣和深化了。30年間數(shù)據(jù)庫領(lǐng)域獲得了三次計算機圖靈獎(C.W.Bachman,E.F.Codd,J.Gray),更加充分地說明了數(shù)據(jù)庫是一個充滿活力和創(chuàng)新精神的領(lǐng)域[1]。2.1.1數(shù)據(jù)庫基本結(jié)構(gòu)數(shù)據(jù)庫的基本結(jié)構(gòu)分三個層次,反映了觀察數(shù)據(jù)庫的三種不同角度。1.物理數(shù)據(jù)層它是數(shù)據(jù)庫的最內(nèi)層,是物理存貯設(shè)備上實際存儲的數(shù)據(jù)的集合。這些數(shù)據(jù)是原始數(shù)據(jù),是用戶加工的對象,由內(nèi)部模式描述的指令操作處理的位串、字符和字組成。2.概念數(shù)據(jù)層它是數(shù)據(jù)庫的中間一層,是數(shù)據(jù)庫的整體邏輯表示。指出了每個數(shù)據(jù)的邏輯定義及數(shù)據(jù)間的邏輯聯(lián)系,是存貯記錄的集合。它所涉及的是數(shù)據(jù)庫所有對象的邏輯關(guān)系,而不是它們的物理情況,是數(shù)據(jù)庫管理員概念下的數(shù)據(jù)庫。3.邏輯數(shù)據(jù)層它是用戶所看到和使用的數(shù)據(jù)庫,表示了一個或一些特定用戶使用的數(shù)據(jù)集合,即邏輯記錄的集合。數(shù)據(jù)庫不同層次之間的聯(lián)系是通過映射進行轉(zhuǎn)換的。2.1.2SQLServer2005SQLServer2005是Microsoft公司發(fā)行的關(guān)系型數(shù)據(jù)庫管理與分析系統(tǒng),它提供了功能全面、操作簡單的圖形界面。SQLServer2005具有較好的可伸縮性和可靠性,提供了以Web標(biāo)準(zhǔn)為基礎(chǔ)的擴展數(shù)據(jù)庫編程功能,可以滿足電子商務(wù)和企業(yè)應(yīng)用程序的要求。SQLServer2005支持XML和Internet標(biāo)準(zhǔn),具有基于Web的分析能力,允許使用內(nèi)置的存儲過程以XML格式存儲、更新、刪除和檢索數(shù)據(jù)。由于ASP.NET與SQLServer2005都是由微軟公司出品的,所以在ASP.NET應(yīng)用于后臺程序中,有專門針對SQLServer2005的數(shù)據(jù)應(yīng)用類庫供用戶使用,方便了用戶對數(shù)據(jù)的操作。2.2XML介紹XML(ExtensibleMarkupLanguage)即可擴展標(biāo)記語言,它是從1996年開始有其雛形,并向W3C(全球信息網(wǎng)聯(lián)盟)提案,而在1998二月發(fā)布為W3C的標(biāo)準(zhǔn)(XML1.0)。XML的前身是SGML(TheStandardGeneralizedMarkupLanguage,標(biāo)準(zhǔn)通用標(biāo)記語言),是自IBM從60年代就開始發(fā)展的GML(GeneralizedMarkupLanguage)標(biāo)準(zhǔn)化后的名稱。XML與HTML一樣,都是SGML。XML是Internet環(huán)境中跨平臺的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。擴展標(biāo)記語言XML是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然XML占用的空間比二進制數(shù)據(jù)要占用更多的空間,但XML極其簡單易于掌握和使用。XML與Access,Oracle和SQLServer等數(shù)據(jù)庫不同,數(shù)據(jù)庫提供了更強有力的數(shù)據(jù)存儲和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,XML僅僅是展示數(shù)據(jù)。事實上XML與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:他極其簡單。XML的簡單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的唯一公共語言,雖然不同的應(yīng)用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持XML,那就意味著程序可以更容易的與Windows、MacOS,Linux以及其他平臺下產(chǎn)生的信息結(jié)合,然后可以很容易加載XML數(shù)據(jù)到程序中并分析他,并以XML格式輸出結(jié)果。為了使得SGML顯得用戶友好,XML重新定義了SGML的一些內(nèi)部值和參數(shù),去掉了大量的很少用到的功能,因為這些繁雜的功能使得SGML在設(shè)計網(wǎng)站時顯得復(fù)雜化。XML保留了SGML的結(jié)構(gòu)化功能,這樣就使得網(wǎng)站設(shè)計者可以定義自己的文檔類型,XML同時也推出一種新型文檔類型,使得開發(fā)者也可以不必定義文檔類型[2]。2.3C#介紹C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運行于.NETFramework之上的高級程序設(shè)計語言。并在微軟職業(yè)開發(fā)者論壇(PDC)上登臺亮相。C#看起來與Java有著驚人的相似;它包括了諸如單一繼承、接口、與Java幾乎同樣的語法和編譯成中間代碼再運行的過程。但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(ComponentObjectModel,組件對象模型)是直接集成的,而且它是微軟公司.NETwindows網(wǎng)絡(luò)框架的主角。C#語言定義主要是從C和C++繼承而來,是給那些愿意犧牲C++一點底層功能,以獲得更方便和更產(chǎn)品化的企業(yè)開發(fā)人員而創(chuàng)造的。C#簡單、面向?qū)ο蠛皖愋桶踩1M管它借鑒了C和C++的許多東西,但是在一些諸如名字空間、類、方法和異常處理等特定領(lǐng)域,它們之間還存在著巨大的差異。關(guān)于C#最重要的一點:它是現(xiàn)代的編程語言。它簡化和現(xiàn)代化了C++在類、名字空間、方法重載和異常處理等領(lǐng)域。屏棄了C++的復(fù)雜性,使它更易用、更少出錯[3]。2.3.1C#的特點C#是面向?qū)ο蟮恼Z言,其主要有6個特點:1.生成中間特點:使用C#開發(fā)的應(yīng)用程序,在編譯成機器碼,都是生成中間匯編形式的語言。只有當(dāng)它們運行時,才會被編譯成本地計算機可執(zhí)行的代碼。2.在命名空間中聲明:當(dāng)使用C#語言創(chuàng)建一個應(yīng)用程序,就會在一個命名空間里創(chuàng)建一個或多個類。同時在這個命名空間里,還有可能聲明要有結(jié)構(gòu)體、變量等。這時就必須使用using關(guān)鍵字來引用其他的命名空間內(nèi)容,用來支持對結(jié)構(gòu)體等類型的操作。3.豐富的數(shù)據(jù)類型:C#語言擁有比C、C++更廣泛和豐富的數(shù)據(jù)類型。4.有兩個基本類:在C#語言中,Object類是所有其他類的基類,String類和Object類一樣,是兩個基類之一,都是C#語言的一部分。5.方法可當(dāng)做參數(shù)傳遞:在一般情況下,默認(rèn)的參數(shù)傳遞只是對基本數(shù)據(jù)類型進行值傳遞。但是在C#語言中,既可以通過值傳遞,也可以通過應(yīng)用傳遞。通過引用傳遞參數(shù)允許函數(shù)成員(包括方法、屬性、索引器、運算符)和構(gòu)造函數(shù)等傳遞參數(shù)的值。6.與COM集成:COM技術(shù)是微軟公司的WIN32組件技術(shù)。C#語言能與COM組件進行無縫集成。用C#語言編寫的類可以子類化COM組件,所謂子類化就是指替換窗口的過程。C#語言生成的類也可以當(dāng)做一個COM組件使用,可用任何.NET語言進行子類化。2.3.2C#中的數(shù)據(jù)庫訪問用.NET框架編寫的(也包括用C#的)應(yīng)用程序需要訪問數(shù)據(jù)庫時,將使用ADO.NET來實現(xiàn)數(shù)據(jù)庫訪問。ADO.NET是微軟的數(shù)據(jù)訪問框架的最新產(chǎn)物,它是.NET框架的一部分。在ADO.NET之前,程序員在ASP(ActiveServerPages)或VisualBasic中使用ADO(AtiveXDataObjects),這是一組COM組件,它通過一個易于使用的封裝類提供對底層數(shù)據(jù)訪問代碼的訪問。ADO.NET比ADO的功能更強大,它是在.NET代碼中訪問數(shù)據(jù)庫的最好工具。.NET框架中的ADO.NET類型包括那些為訪問SQLServer、OLEDB、ODBC和Oracle數(shù)據(jù)庫而優(yōu)化的類型。它們是基于通用類的,因此使用ADO.NET訪問不同的DBMS是相似的。除此之外ADO.NET還將XML整合進來,這樣一來數(shù)據(jù)的交換就變的非常輕松容易了。ADO.NET包含5大主要對象:·Connection對象就是數(shù)據(jù)庫連接對象,專門進行數(shù)據(jù)庫連接?!ommand對象主要用于執(zhí)行SQL數(shù)據(jù)庫命令?!ataSet對象的目的就是想要實現(xiàn)獨立于任何數(shù)據(jù)源的數(shù)據(jù)訪問技術(shù)?!ataReader對象用于從數(shù)據(jù)源中獲取高性能的數(shù)據(jù)流。·DataAdapter對象用于提供連接DataSet對象和數(shù)據(jù)源的橋梁。ADO.NET類型實現(xiàn)兩個主要的功能:·數(shù)據(jù)訪問:用于訪問數(shù)據(jù)庫中數(shù)據(jù)和操作數(shù)據(jù)庫的類型;·數(shù)據(jù)表示:用于包含數(shù)據(jù)庫數(shù)據(jù)(如數(shù)據(jù)表)的類型。這兩種類型之間聯(lián)系密切,在數(shù)據(jù)庫開發(fā)中兩種類型都會用到。然而,如果使用數(shù)據(jù)訪問類型來填充數(shù)據(jù)表示類型將節(jié)省大量工作。ADO.NET目前的主流版本是3.5,比之前的版本提供了更先進的功能,主要包括以下高級特性:·支持批量復(fù)制,在其.NET類庫中提供了批量復(fù)制類?!ば碌闹饕獢?shù)據(jù)控件,包括DataGridView、DataConnector和DataNavigator。·DbProvidersFactories類,該類能導(dǎo)出本地計算機中的.NET數(shù)據(jù)提供者列表?!ataTable新增兩個重要的方法:Load()方法和Save()方法。Load()方法可將數(shù)據(jù)對象直接加載到DataTable中,而Save()方法可以將DataTable中的數(shù)據(jù)保存到一個持久化的存儲媒體中?!ぶС肿远x的數(shù)據(jù)提供者。2.4最短路徑算法介紹最短路經(jīng)算法分靜態(tài)最短路徑算法和動態(tài)最短路徑算法。靜態(tài)最短路徑算法是外界環(huán)境不變,計算最短路徑。主要有Dijkstra算法,A*(AStar)算法。動態(tài)最短路徑算法是外界環(huán)境不斷發(fā)生變化,即不能計算預(yù)測的情況下計算最短路。如在游戲中敵人或障礙物不斷移動的情況下。典型的有D*算法[4]。最短路徑不僅僅指一般意義上的距離最短,還可以引申到其他的度量,如時間、費用、線路容量等。相應(yīng)地,最短路徑問題就成為最快路徑問題、最低費用問題等。由于最短路徑問題在實際中常用于汽車導(dǎo)航系統(tǒng)以及各種應(yīng)急系統(tǒng)等(如110報警、119火警以及醫(yī)療救護系統(tǒng)),這些系統(tǒng)一般要求計算出到出事地點的最佳路線的時間應(yīng)該在1s~3s內(nèi),在行車過程中還需要實時計算出車輛前方的行駛路線,這就決定了最短路徑問題的實現(xiàn)應(yīng)該是高效率的。其實,無論是距離最短、時間最快、費用最低,它們的核心算法都是最短路徑算法。經(jīng)典的最短路徑算法——Dijkstra算法是目前多數(shù)系統(tǒng)解決最短路徑問題采用的理論基礎(chǔ),只是不同系統(tǒng)對Dijkstra算法采用了不同的實現(xiàn)方法。Dijkstra算法的基本思路是:假設(shè)每個點都有一對標(biāo)號(dj,pj),其中dj是從起源點s到點j的最短路徑的長度(從頂點到其本身的最短路徑是零路(沒有弧的路),其長度等于零);pj則是從s到j(luò)的最短路徑中j點的前一點。求解從起源點s到點j的最短路徑算法的基本過程如下:1.初始化。起源點設(shè)置為:①ds=0,ps為空;②所有其他點:di=∞,pi=?;③標(biāo)記起源點s,記k=s,其他所有點設(shè)為未標(biāo)記的。2.檢驗從所有已標(biāo)記的點k到其直接連接的未標(biāo)記的點j的距離,并設(shè)置:dj=min[dj,dk+lkj]式中,lkj是從點k到j(luò)的直接連接距離。3.選取下一個點。從所有未標(biāo)記的結(jié)點中,選取dj中最小的一個i:di=min[dj,所有未標(biāo)記的點j]點i就被選為最短路徑中的一點,并設(shè)為已標(biāo)記的。4.找到點i的前一點。從已標(biāo)記的點中找到直接連接到點i的點j*,作為前一點,設(shè)置:i=j*5.標(biāo)記點i。如果所有點已標(biāo)記,則算法完全推出,否則,記k=i,轉(zhuǎn)到2再繼續(xù)。從上面可以看出,在按標(biāo)記法實現(xiàn)Dijkstra算法的過程中,核心步驟就是從未標(biāo)記的點中選擇一個權(quán)值最小的弧段,即上面所述算法的(2)~(5)步。這是一個循環(huán)比較的過程,如果不采用任何技巧,未標(biāo)記點將以無序的形式存放在一個鏈表或數(shù)組中。那么要選擇一個權(quán)值最小的弧段就必須把所有的點都掃描一遍,在大數(shù)據(jù)量的情況下,這無疑是一個制約計算速度的瓶頸。要解決這個問題,最有效的做法就是將這些要掃描的點按其所在邊的權(quán)值進行順序排列,這樣每循環(huán)一次即可取到符合條件的點,可大大提高算法的執(zhí)行效率[5]。還有一種基于Dijkstra算法的優(yōu)化算法———鄰接結(jié)點算法,該算法充分利用了網(wǎng)絡(luò)拓?fù)湫畔⒅械幕《蔚倪B接關(guān)系,避免了使用含有大量無窮值的關(guān)聯(lián)矩陣,使之更適合帶有拐向限制設(shè)置的最短路徑算法和大量結(jié)點的實際數(shù)據(jù)。實踐證明,該算法可以節(jié)約大量的內(nèi)存,對于結(jié)點數(shù)比較大的網(wǎng)絡(luò),或帶有大量拐向限制設(shè)置的網(wǎng)絡(luò),具有較好的適用性。A*算法作為一種改進的Dijkstra算法,實際上是一種啟發(fā)式搜索,所謂啟發(fā)式搜索,就是利用一個估價函數(shù)評估每次的決策的價值,決定先嘗試那一種方案。這樣可以極大地優(yōu)化普通的廣度優(yōu)先搜索。一般來說,從起始點A到終點B的最短路徑是固定的,可以寫一個函數(shù)Judge()來估計A到B的最短距離,如果程序已經(jīng)嘗試著從A沿著某條路線移動到了C點,那么認(rèn)為這個方案的AB間的估計距離為A到C實際已經(jīng)行走了的距離H加上用Judge()估計出的C到B的距離。如此,無論程序搜索展開到了哪一步,都會算出一個評估值,每一次決策后,將評估值和等待處理的方案一起排序,然后挑出待處理的各個方案中最有可能是最短路線的一部分的方案展開到下一步,一直循環(huán)到對象移動到目的地為止[6]。2.5B/S介紹B/S(browser/server,簡稱B/S)模式,即瀏覽器/服務(wù)器模式,它是基于Intranet的需求而出現(xiàn)并發(fā)展的。Intranet是應(yīng)用TCP/IP協(xié)議建立的企事業(yè)單位內(nèi)部專用網(wǎng)絡(luò),它采用諸如TCP/IP、HTTP、SMTP和HTML等Internet技術(shù)和標(biāo)準(zhǔn),能為企事業(yè)單位內(nèi)部交換信息提供服務(wù)。同時,它具有連接Internet的功能和防止外界入侵的安全措施。另一方面,由于數(shù)據(jù)庫具有強大的數(shù)據(jù)存儲和管理能力,并且能夠動態(tài)地進行數(shù)據(jù)輸入和輸出,如果把數(shù)據(jù)庫應(yīng)用于Intranet上,不僅可以實現(xiàn)大量信息的網(wǎng)上發(fā)布,而且能夠為廣大用戶提供動態(tài)的信息查詢和數(shù)據(jù)處理服務(wù),進而加強企事業(yè)單位內(nèi)部部門之間、上級部門與下級部門之間、企事業(yè)單位員工之間、企事業(yè)單位與客戶之間以及企事業(yè)單位與企事業(yè)單位之間的信息交流,降低企事業(yè)單位的日常工作成本,提高企事業(yè)單位的經(jīng)濟效益。它通常采用3層結(jié)構(gòu):瀏覽器――WEB服務(wù)器――數(shù)據(jù)庫服務(wù)器。在Intranet框架中,Browser/Server模型的處理方式如下:1.用戶打開計算機中的瀏覽器。2.輸入或自動啟動主頁的URL(UniformResourceLocator),瀏覽器生成一個HTTP請求并把它發(fā)給指定的Internet服務(wù)器。3.服務(wù)器發(fā)回主頁的HTML(HypertextMarkupLanguage)頁面。瀏覽器將其顯示在屏幕上。4.用戶在主頁面上進行操作(如:點擊、鍵入等)。5.瀏覽器生成相應(yīng)的HTTP要求,發(fā)送給相應(yīng)的服務(wù)器。6.服務(wù)器收到請求后,查看本站點是否擁有這個文檔。如果有,就將它放入響應(yīng)信息中返回給瀏覽器。7.瀏覽器收到響應(yīng),查看頭文件的格式,判斷能否直接顯示。如果否,就調(diào)用對應(yīng)的幫助應(yīng)用程序或外掛程序處理顯示。

第三章系統(tǒng)需求分析本章分析了系統(tǒng)的各項需求,包括性能需求、功能需求、模塊劃分等。3.1性能需求分析為了保證系統(tǒng)能夠長期、安全、穩(wěn)定、可靠、高效地運行,公交查詢系統(tǒng)應(yīng)該滿足以下性能需求:1.系統(tǒng)處理的準(zhǔn)確性、及時性和響應(yīng)速度系統(tǒng)處理的準(zhǔn)確性和及時性是系統(tǒng)的必要性能。查詢時應(yīng)保證查全率,所有相應(yīng)域包含查詢關(guān)鍵字的記錄都應(yīng)能查到。在系統(tǒng)設(shè)計和開發(fā)過程中,要充分考慮系統(tǒng)當(dāng)前和將來可能承受的工作量,使系統(tǒng)的處理能力和響應(yīng)時間能夠滿足系統(tǒng)管理員對信息處理的需求。響應(yīng)時間,更新處理時間都要比較迅速,應(yīng)滿足大部分用戶的要求。一般操作的響應(yīng)時間應(yīng)在1-2s內(nèi),對數(shù)據(jù)的導(dǎo)入、導(dǎo)出的操作也應(yīng)在可接受的時間內(nèi)完成,原則上保證操作人員不會因為速度問題而影響工作效率。2.系統(tǒng)的開放性和系統(tǒng)的可擴充性系統(tǒng)在開發(fā)過程中,應(yīng)該充分考慮以后的可擴充性。例如,用戶查詢的需求也會不斷地更新和完善。這就要求系統(tǒng)提供足夠的手段進行功能的調(diào)整和擴充。而要實現(xiàn)這一點,應(yīng)通過系統(tǒng)的開放性來完成,即系統(tǒng)應(yīng)是一個開放系統(tǒng),只要符合一定的規(guī)范,可以簡單地加入和減少系統(tǒng)的模塊,配置系統(tǒng)的硬件。通過軟件的修補、替換,完成系統(tǒng)的升級和更新?lián)Q代。3.系統(tǒng)的易用性和易維護性系統(tǒng)是直接面對使用人員的,而使用人員往往對計算機并不是非常熟悉。這就要求系統(tǒng)能夠提供良好的用戶接口,易用的人機交互界面。所以在系統(tǒng)開發(fā)的時候就考慮到了這一點,只要用戶知道本系統(tǒng)的網(wǎng)址就可以直接使用本系統(tǒng)的查詢模塊而無須用戶注冊及登陸,充分節(jié)約了用戶查詢的方便及隨意性。其次,要實現(xiàn)本系統(tǒng)的易用性就要求系統(tǒng)應(yīng)該盡量使用用戶熟悉的術(shù)語和中文信息的界面;針對用戶可能出現(xiàn)的使用問題,要提供足夠的在線幫助,在本系統(tǒng)中專門設(shè)置了“聯(lián)系我們”這一信息,可以讓用戶對本系統(tǒng)的不足之處讓設(shè)計者知道,使系統(tǒng)更加完善。公交查詢系統(tǒng)中涉及到的數(shù)據(jù)是公交公司的相當(dāng)重要的信息,系統(tǒng)要提供方便的手段供系統(tǒng)維護人員進行數(shù)據(jù)的備份,日常的安全管理,系統(tǒng)意外崩潰時數(shù)據(jù)的恢復(fù)等工作。4.系統(tǒng)的標(biāo)準(zhǔn)性與先進性系統(tǒng)在設(shè)計開發(fā)使用過程中都要涉及到很多計算機硬件、軟件。所有這些都要符合主流國際、國家和行業(yè)標(biāo)準(zhǔn)。例如在開發(fā)中使用的操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、開發(fā)工具都必須符合通用標(biāo)準(zhǔn)。如規(guī)范的數(shù)據(jù)庫操縱界面、作為業(yè)界標(biāo)準(zhǔn)的TCP/IP網(wǎng)絡(luò)協(xié)議及ISO9002標(biāo)準(zhǔn)所要求的質(zhì)量規(guī)范等;同時,在自主開發(fā)本系統(tǒng)時,要進行良好的設(shè)計工作,制訂行之有效的軟件工程規(guī)范,保證代碼的易讀性、可操作性和可移植性。目前計算系統(tǒng)的技術(shù)發(fā)展相當(dāng)快,做為公交查詢系統(tǒng)工程,應(yīng)該保證系統(tǒng)長期保持先進,在系統(tǒng)的生命周期盡量做到系統(tǒng)的“與時俱進”,充分完成企業(yè)信息處理的要求而不至于落后。這一方面通過系統(tǒng)的開放性和可擴充性,不斷改善系統(tǒng)的功能完成。另一方面,在系統(tǒng)設(shè)計和開發(fā)的過程中,應(yīng)在考慮成本的基礎(chǔ)上盡量采用當(dāng)前主流并先進且有良好發(fā)展前途的產(chǎn)品。3.2功能需求分析本系統(tǒng)采用結(jié)構(gòu)化設(shè)計的方法來實現(xiàn)系統(tǒng)總體功能,提高系統(tǒng)的各項指標(biāo),即將整個系統(tǒng)合理的劃分成各個功能模塊,正確地處理模塊之間和模塊內(nèi)部的聯(lián)系以及和數(shù)據(jù)庫的聯(lián)系,定義各模塊的內(nèi)部結(jié)構(gòu),通過對模塊的設(shè)計和模塊之間關(guān)系的系統(tǒng)來實現(xiàn)整個系統(tǒng)的功能。3.2.1基于方便市民搭乘公交出行的原則,該系統(tǒng)應(yīng)滿足普通用戶下面幾方面功能需求:1.線路查詢:方便用戶了解到最快最新的線路信息,如:此線路經(jīng)過哪些站點,和站點在線路中的位置等。2.站點查詢:用戶如果對線路不清楚,只知道自己要去的地方,那么站點查詢會幫你快速找出可以搭乘哪些線路的公交車到達(dá)此地,還能提供各線路的相關(guān)信息,并注明了此站點在相應(yīng)線路中的順序,方便用戶了解該站點在線路中所處的位置。3.換乘查詢:如果沒有直達(dá)線路,則找出轉(zhuǎn)乘的最短公交路線。用戶輸入起始站和終點站作為查詢關(guān)鍵字,即可查詢到三次轉(zhuǎn)車內(nèi)到達(dá)目的地址的公交線路。可以為用戶節(jié)省更多的時間,也提高了效率。4.打印輸出:將用戶查詢到的內(nèi)容自動生成報表,并打印輸出。5.聯(lián)系與投訴:用戶可聯(lián)系管理員反映自己的意見。查詢者可以執(zhí)行線路查詢、站點查詢、換乘查詢(包括:一次換乘、二次換乘、三次換乘查詢)的操作。查詢者的用例分析如圖3.1所示:圖3.1查詢者的用例分析由上圖可查詢者所需執(zhí)行的系統(tǒng)功能。3.2.2為了維護系統(tǒng)的正常運行,系統(tǒng)還需提供后臺管理功能,用于管理員登陸,添加、修改、刪除公交數(shù)據(jù)信息,修改信息資料、安全密碼,回復(fù)用戶留言等,其中最主要的功能是新增、修改、刪除數(shù)據(jù)信息,以保證公交車線路是正確可用的。管理員的用例分析如圖3.2所示:圖3.2管理員的用例分析由上圖可知管理員所需執(zhí)行的系統(tǒng)功能。3.3功能模塊劃分1.普通用戶模塊該模塊實現(xiàn)公交查詢功能??蓪崿F(xiàn)按線路查詢、站點查詢和起點-終點查詢?nèi)N查詢方式。2.管理員用戶模塊該模塊實現(xiàn)數(shù)據(jù)的新增、修改、刪除功能。模塊的各功能劃分如圖3.3所示:公交路線查詢系統(tǒng)公交路線查詢系統(tǒng)普通用戶模塊管理員用戶模塊普通用戶模塊管理員用戶模塊刪除新增修改刪除新增修改車次查詢站點查詢站站查詢路線打印車次查詢站點查詢站站查詢路線打印站臺車次車輛參數(shù)線路站臺車次車輛參數(shù)線路圖3.3系統(tǒng)功能模塊圖系統(tǒng)的功能模塊由上圖所示劃分,在不同的模塊下實現(xiàn)不同的功能,如普通用戶模塊下有車次查詢、站點查詢等功能,管理員用戶模塊下有修改、刪除數(shù)據(jù)等功能,分工明確,一目了然。

第四章系統(tǒng)設(shè)計本章介紹了系統(tǒng)的各個設(shè)計步驟,具體為數(shù)據(jù)庫設(shè)計、功能模塊設(shè)計等。4.1數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計是系統(tǒng)設(shè)計的一個重要內(nèi)容,其設(shè)計質(zhì)量的好壞直接影響系統(tǒng)開發(fā)的成敗,系統(tǒng)的質(zhì)量,系統(tǒng)效率及可維護性。在本系統(tǒng)的設(shè)計中,充分考慮到了管理系統(tǒng)數(shù)據(jù)繁雜,重復(fù)性很大,數(shù)據(jù)使用頻繁。因此本系統(tǒng)采用了一種能正確反映用戶實現(xiàn)環(huán)境,能被現(xiàn)行系統(tǒng)接受,易于維護、效率高的數(shù)據(jù)管理方法—SQLServer2005數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫設(shè)計的核心問題是設(shè)計好的數(shù)據(jù)模型。數(shù)據(jù)模型是指數(shù)據(jù)庫中記錄與記錄之間聯(lián)系的數(shù)據(jù)結(jié)構(gòu)形成的。不同的數(shù)據(jù)管理系統(tǒng)有不同的數(shù)據(jù)模型。在目前的數(shù)據(jù)庫管理系統(tǒng)中有層次模型,網(wǎng)狀模型、關(guān)系模型三種數(shù)據(jù)模型。其中,關(guān)系模型具有較高的數(shù)據(jù)獨立性,使用也較為方便。本設(shè)計采用關(guān)系數(shù)據(jù)庫。該數(shù)據(jù)庫實行增、刪、編輯、統(tǒng)計、顯示和打印都極為方便。其中的排序和索引功能,對數(shù)據(jù)快速定位,查詢提供了有利條件。4.1.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計本系統(tǒng)采用“實體聯(lián)系模型”(ER模型)來描述數(shù)據(jù)庫的結(jié)構(gòu)與語義,以對現(xiàn)實世界進行抽象。ER模型直接從現(xiàn)實世界抽象出實體類型及實體間聯(lián)系,然后用ER圖來表示數(shù)據(jù)模型。它有兩個明顯的優(yōu)點:接近于人的思維,容易理解;與計算機無關(guān),用戶容易接受。E-R圖是直觀表示概念模型的工具,它有三個基本成分:1.矩形框,表示實體類型(考慮問題的對象)。2.菱形框,表示聯(lián)系類型(實體間的聯(lián)系)。3.橢圓形框,表示實體的屬性。實體和屬性的定義如下:管理員表(用戶名,登錄密碼)站點信息表(站點編號,站名)公交信息表(車次編號,車次,起止站點,運行時間,起步價,全程價)具體的實體關(guān)系圖如圖4.1所示:站點名稱站點編號站點用戶名管理員登陸密碼站點名稱站點編號站點用戶名管理員登陸密碼車次編號首發(fā)站車次編號首發(fā)站公交線路公交線路開班時間終點站開班時間終點站收班時間起步價收班時間起步價全程價全程價圖4.1各實體屬性關(guān)系圖建立E-R圖能有效理解各數(shù)據(jù)類型的關(guān)系,如圖存在三個實體:站點、管理員、公交線路,由此三實體可定義其獨自屬性,為建立數(shù)據(jù)庫表做好準(zhǔn)備。4.1.2數(shù)據(jù)庫表設(shè)計首先通過SQLServer2005創(chuàng)建一個名為“Bus_Search”的數(shù)據(jù)庫,然后在其中創(chuàng)建各個表。各個表的結(jié)構(gòu)及數(shù)據(jù)類型分述如下。1.管理員表(admin)管理員表存放登陸系統(tǒng)所需要的用戶名和密碼,修改密碼時也同樣需要訪問此表。如表4.1所示:表4.1管理員表名稱字段名類型主鍵非空用戶名namencharYesYes密碼passwordncharNoYes用戶名:每個管理員都有自己的用戶賬號,用戶名最多由十個字符組成。密碼:用戶密碼不能為空,不能復(fù)制密碼。2.關(guān)聯(lián)關(guān)系表(Bus_Station)關(guān)聯(lián)關(guān)系表存放各站點的編號和車次編號,在查詢站點和車次的關(guān)系時需要訪問此表。如表4.2所示:表4.2關(guān)聯(lián)關(guān)系表名稱字段名類型主鍵非空車次編號B_IdintYesYes站點編號S_IdintYesYes關(guān)系編號idintNoNo車次編號:代表不同的車次,由數(shù)字組成。站點編號:代表不同的站點,由數(shù)字組成。3.公交信息表(BusInfo)公交信息表存放車次的各項信息,在查詢車次時需要訪問此表。如表4.3所示:表4.3公交信息表名稱字段名類型主鍵非空車次編號B_IdintYesYes車次B_NamevarcharNoNo開班時間B_StimevarcharNoNo收班時間B_EtimevarcharNoNo起止站點B_StoEvarcharNoNo起步價B_SpricerealNoNo全程價B_ApricerealNoNo車次:存放具體的公交路線編號。開班時間、收班時間:公交車輛每天運行的時間。全程價:坐完全程所需交納的車費。4.站點信息表(StationInfo)站點信息表存放站點信息,在查詢站點時需要訪問此表。如表4.4所示:表4.4站點信息表名稱字段名類型主鍵非空站點編號S_IdintYesYes站點名稱S_NamevarcharNoNo站點名稱:存放各具體的站點名稱。為了保證各數(shù)據(jù)表間的獨立性,減少其間的關(guān)聯(lián)程度,設(shè)計的數(shù)據(jù)表基本獨立成表,儲存各自獨立的信息,操作方便簡單,出錯幾率較少。4.2功能模塊具體設(shè)計本節(jié)主要介紹系統(tǒng)主要功能模塊的設(shè)計,包括普通用戶查詢模塊的設(shè)計和管理員用戶模塊的設(shè)計。4.2.1普通用戶模塊設(shè)計查詢模塊是系統(tǒng)最主要的功能模塊,在此模塊下用戶無需登錄就能查詢公交信息,能使用系統(tǒng)的車次查詢、站點查詢、站站查詢等功能,每一個功能都是主要功能。其具體的程序流程圖如圖4.3所示。否開始否開始是否查詢?是否查詢?是是選擇相應(yīng)功能進行查詢選擇相應(yīng)功能進行查詢相應(yīng)XML文件是否存在相應(yīng)XML文件是否存在否否是是查詢數(shù)據(jù)庫文件訪問查詢數(shù)據(jù)庫文件訪問XML文件是是查詢完畢查詢完畢否是否再次查詢?否是否再次查詢?結(jié)束結(jié)束圖4.2查詢模塊程序流程圖在查詢模塊中,訪問相應(yīng)的XML文件能有效減輕系統(tǒng)負(fù)擔(dān),是查詢過程中的重要步驟。4.2.2管理員管理員模塊是系統(tǒng)一個非常重要的模塊,它需要防止其他人惡意冒充管理員來對系統(tǒng)進行隨意修改或破壞,而正常的管理員登陸后,還需要能對數(shù)據(jù)庫表進行操作,來維護系統(tǒng)的正常運行。其具體的程序流程圖如圖4.4所示。開始開始輸入管理員賬號和密碼輸入管理員賬號和密碼否是否正確?否是否正確?是是進入管理員模塊進入管理員模塊結(jié)束否是否維護?結(jié)束否是否維護?是是進行維護進行維護圖4.3管理員模塊程序流程圖兩大功能模塊均實現(xiàn)各自不同的功能,每個模塊的權(quán)限和職責(zé)明晰,結(jié)構(gòu)簡單明了,易于理解。

第五章系統(tǒng)實現(xiàn)與測試本章主要演示和測試程序功能,并展示程序核心代碼。5.1主要程序功能程序登陸主界面后,可以根據(jù)提示選擇相應(yīng)服務(wù)。如圖5.1所示圖5.1主界面截圖用戶可在主界面中選擇自己的去向,進入不同的分界面,在分界面中得到自己所選擇的服務(wù)。5.1.1連接數(shù)據(jù)庫的包含文件在動態(tài)網(wǎng)站中,調(diào)用數(shù)據(jù)庫中的數(shù)據(jù)是十分頻繁的,為了避免編寫重復(fù)的代碼。編寫一個數(shù)據(jù)庫連接文件是非常重要的。web.config文件中包含了本系統(tǒng)中的數(shù)據(jù)庫連接代碼。本系統(tǒng)的數(shù)據(jù)庫的連接代碼如下:<addname="SQLConnStr"connectionString="server=091F6BB946074F2;Database=Bus_Search;User=sa;password=506321236"/>5.1.2XML技術(shù)由于系統(tǒng)是運行在服務(wù)器端,當(dāng)使用查詢功能的人多了,難免會影響到查詢速度,這個時候運用XML技術(shù)就十分必要了。XML文件可作為數(shù)據(jù)存儲的媒介存在,系統(tǒng)從數(shù)據(jù)庫中讀出查詢到的相應(yīng)信息建立特定的XML文件,便于下次同樣的查詢不需要再訪問數(shù)據(jù)庫而是直接訪問XML文件。1.生成XML文件。將數(shù)據(jù)庫數(shù)據(jù)生成為XML文件,以便在查詢時可以讀取XML文件。以公交信息表為例,主要實現(xiàn)代碼如下:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=practice";Stringuser="sa";Stringpassword="506321236";Connectionconn=DriverManager.getConnection(url,user,password);Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);Stringsql="select*fromBusInfo";ResultSetrs=stmt.executeQuery(sql);Documentdocument=newDocument(newElement("BusInfo"));//創(chuàng)建文檔ResultSetMetaDatarsmd=rs.getMetaData();//獲取字段名intnumberOfColumns=rsmd.getColumnCount();//獲取字段數(shù)inti=0;while(rs.next()){//將查詢結(jié)果取出Elementelement0=newElement("BusInfo");//創(chuàng)建元素document.getRootElement().addContent(element0);for(i=1;i<=numberOfColumns;i++){Stringdate=newString(rs.getString(i).getBytes("ISO-8859-1"),"gb2312");Elementelement=newElement(rsmd.getColumnName(i)).setText(date);element0.addContent(element);}}rs.close();//關(guān)閉結(jié)果集stmt.close();//關(guān)閉statementconn.close();//關(guān)閉連接XMLOutputteroutp=newXMLOutputter("",true,"GB2312");outp.output(document,newFileOutputStream("D:\\jsp\\data.xml"));//輸出XML文檔out.print("XML文檔生成完畢!");2.查詢XML文件。查詢者在查詢過程中,首先看是否存在包含查詢數(shù)據(jù)的XML文件,若有則先讀取XML文件,沒有則查詢數(shù)據(jù)庫。查詢的主要實現(xiàn)代碼可添加在查詢模塊中,也可如下代碼所示:privatevoidPage_Load(Objectsender,EventArgse){if(!IsPostBack){ArrayListvalues=newArrayList();//將其當(dāng)作數(shù)據(jù)源XmlDocumentdoc=newXmlDocument();//表示XML文檔doc.Load(Server.MapPath("data.xml"));//返回一個XmlNodeList集合,包含與指定名稱匹配的所有子代元素列表XmlNodeListelemList=doc.GetElementsByTagName("name");//System.Xml命名空間for(inti=0;i<elemList.Count;i++){values.Add(elemList[i].InnerXml);}ListBox1.DataSource=values;ListBox1.DataBind();}}5.1.3按兩站點查詢用戶進入站站查詢模塊中后,可以在起點站輸入框中輸入自已的出發(fā)點,然后在終點站輸入框輸入出行的終點,也可以進行選擇。點擊查詢,系統(tǒng)便會檢測這兩個站點間是否有直達(dá)車,如果有直達(dá)車,系統(tǒng)會給出直達(dá)車次。如果沒有直達(dá)車,系統(tǒng)會給出所乘車次及中轉(zhuǎn)站名稱。如圖,有直達(dá)車的情況:圖5.2有直達(dá)車的站站查詢?nèi)鐖D,無直達(dá)車的情況:圖5.3無直達(dá)車的站站查詢系統(tǒng)首先通過文本框中的值查詢經(jīng)過起點站和終點站的車次編號B_Id,若相同則表示存在直達(dá)車,輸出直達(dá)車信息,若B_Id不相同就同時查詢經(jīng)過起點站和終點站的車次編號,然后將這兩個不同的車次循環(huán)比較它們的站點,若存在公共的站點就可以作為中轉(zhuǎn)站,最后輸出至文本框中。主要實現(xiàn)代碼如下:if(!S_S_Start.SelectedValue.ToString().Equals("1")&&!S_S_End.SelectedValue.ToString().Equals("1"))//如果選擇了下拉框的話,則按照下拉框的內(nèi)容查詢{//如果起止站點不相同If(!S_S_Start.SelectedValue.ToString().Equals(S_S_End.SelectedValue.ToString())){//判斷文本框的值if(Txt_S.Text==null||Txt_S.Text==""&&Txt_E.Text==null||Txt_E.Text==""||(Txt_S.Text.Equals(S_S_Start.SelectedItem.Text.ToString())&&Txt_E.Text.Equals(S_S_End.SelectedItem.Text.ToString()))){//根據(jù)選擇的內(nèi)容,查詢同時經(jīng)過起點站和終點站的公交信息Stringstr="select*fromBusInfowhereB_Idin(selectB_Idfrom"+"Station_Line_ViewwhereS_id='"+S_S_Start.SelectedValue.ToString()+"'INTERSECT"+"selectB_IdfromStation_Line_ViewwhereS_id='"+S_S_End.SelectedValue.ToString()+"')";if(database.GetList(str).Rows.Count>0)//表明有直達(dá)車{GridView_S_S.DataSource=database.GetList(str).DefaultView;//獲取查詢信息并將其顯示在表格中GridView_S_S.DataBind();}else//查找起止站點之間是否有中轉(zhuǎn)車{//查找所有經(jīng)過起點站的公交車Stringstr1="selectB_IdfromStation_Line_ViewwhereS_id='"+S_S_Start.SelectedValue.ToString()+"'";//查找所有經(jīng)過終點站的公交車Stringstr2="selectB_IdfromStation_Line_ViewwhereS_id='"+S_S_End.SelectedValue.ToString()+"'";for(inti=0;i<database.GetList(str1).Rows.Count;i++){//循環(huán)判斷經(jīng)過起點站的線路和經(jīng)過重點站的線路是否有公共的站點s1=database.GetList(str1).Rows[i]["B_Id"].ToString();//經(jīng)過起點站的公交車for(intj=0;j<database.GetList(str2).Rows.Count;j++){//經(jīng)過終點站的公交車s2=database.GetList(str2).Rows[j]["B_Id"].ToString();//判斷經(jīng)過起點站的線路和經(jīng)過終點站的線路是否有公共的站點Stringstr3="select*fromStation_Line_ViewwhereS_idin(selectS_idfrom"+"Station_Line_ViewwhereB_Id='"+s1+"'INTERSECT"+"selectS_idfromStation_Line_ViewwhereB_Id='"+s2+"')";if(database.GetList(str3).Rows.Count>0)//如果有公共的站點,則該站點就是中轉(zhuǎn)站{//分別查找經(jīng)過起點站的線路的詳細(xì)信息和經(jīng)過終點站的線路詳細(xì)信息Stringstr4="select*fromBusInfo,StationInfowhereB_Id='"+s1+"'andS_id='"+database.GetList(str3).Rows[i]["S_id"].ToString()+"'";Stringstr5="select*fromBusInfo,StationInfowhereB_Id='"+s2+"'andS_id='"+database.GetList(str3).Rows[i]["S_id"].ToString()+"'";//將起點站線路詳細(xì)信息顯示到表格GridView_S_S_to.DataSource=database.GetList(str4).DefaultView;GridView_S_S_to.DataBind();for(intk=0;k<database.GetList(str4).Rows.Count;k++){//定義label的幾個對象分別將終點站線路的詳細(xì)信息顯示到表格Labellab1=(Label)GridView_S_S_to.Rows[k].FindControl("Lab1");lab1.Text=S_S_Start.SelectedItem.Text.ToString();HyperLinkha=(HyperLink)GridView_S_S_to.Rows[k].FindControl("HyperLink1");ha.Text=database.GetList(str5).Rows[k]["B_Name"].ToString();Labellab2=(Label)GridView_S_S_to.Rows[k].FindControl("Lab2");lab2.Text=database.GetList(str5).Rows[k]["B_Sprice"].ToString();Labellab3=(Label)GridView_S_S_to.Rows[k].FindControl("Lab3");lab3.Text=database.GetList(str5).Rows[k]["B_Aprice"].ToString();Labellab4=(Label)GridView_S_S_to.Rows[k].FindControl("Lab4");lab4.Text=S_S_End.SelectedItem.Text.ToString();}}ElsePage.RegisterStartupScript("","<script>alert('對不起!無此相關(guān)站點的公交信息!');</script>");}}}}}5.1.4按站點查詢用戶進入站點查詢模塊中后,可以輸入自己要查詢的站點,也可以選擇要查詢的站點,選好后點擊查詢,系統(tǒng)會在數(shù)據(jù)庫中檢測該站點是否存在,如果存在,系統(tǒng)則顯示這個站點的相關(guān)信息。如圖,站點查詢結(jié)果如下:圖5.4站點查詢系統(tǒng)會優(yōu)先根據(jù)下拉框中的輸入信息進行查詢,首先根據(jù)站點名稱查詢站點信息表中站點名稱S_Name和站點編號S_Id,再根據(jù)此信息查詢關(guān)聯(lián)關(guān)系表和公交信息表中的相關(guān)數(shù)據(jù),最后將查找出來的信息都輸出至文本框中。主要實現(xiàn)代碼如下:publicpartialclassstation_search_station_search:System.Web.UI.Page{//下面執(zhí)行的是站點查詢的操作protectedvoidPage_Load(objectsender,EventArgse)//初始化操作{//初始化文本框if(!Station_Search.SelectedItem.Text.ToString().Equals("——請選擇站點——"))Txt_Station.Text=Station_Search.SelectedItem.Text.ToString();}//當(dāng)點擊查詢按鈕后激發(fā)查詢操作protectedvoidImageButton2_Click(objectsender,ImageClickEventArgse){if(Station_Search.SelectedValue.ToString().Equals("1"))//如果下拉框沒有選擇,表明其按文本框輸入查詢{if(Txt_Station.Text!=null&&Txt_Station.Text!="")//如果用戶已經(jīng)輸入站點名稱,則開始查詢{//查詢公交信息表BusInfo、站點信息表StationInfo和關(guān)聯(lián)關(guān)系表Bus_Station,找出符合用戶輸入條件的站點信息Stringstr="select*fromStationInfo,BusInfo,Bus_Station"+"whereBus_Station.S_id=StationInfo.S_idandBus_Station.B_Id="+"BusInfo.B_IdandS_Namelike'%"+Txt_Station.Text+"%'";if(database.GetList(str).Rows.Count>0){//將查找出來的信息顯示到表格中GridView_Station.DataSource=database.GetList(str).DefaultView;GridView_Station.DataBind();}ElsePage.RegisterStartupScript("","<script>alert('對不起!無此站點相關(guān)的公交信息!');</script>");}else//如果用戶沒有輸入任何內(nèi)容,則給出提示Page.RegisterStartupScript("","<script>alert('對不起!只有輸入或選擇站點才可以查詢!');</script>");}else//如果選擇了下拉框中的值,則按照下拉框的值進行查詢{//判斷文本框的值if(Txt_Station.Text==null||Txt_Station.Text==""||Txt_Station.Text.Equals(Station_Search.SelectedItem.Text.ToString())){//查詢公交信息表BusInfo、站點信息表StationInfo和關(guān)聯(lián)關(guān)系表Bus_Station,找出符合下拉框選取項的站點信息Stringstr="select*fromStationInfo,BusInfo,Bus_Stationwhere"+"Bus_Station.S_id=StationInfo.S_idandBus_Station.B_Id=BusInfo.B_Id"+"andBus_Station.S_id='"+Station_Search.SelectedValue.ToString()+"'";GridView_Station.DataSource=database.GetList(str).DefaultView;GridView_Station.DataBind();}}}}5.1.5按線路查詢用戶進入線路查詢模塊后,可以輸入自己要查詢的車次線路,或者選擇要查詢的線路,選好后點擊查詢,系統(tǒng)會在數(shù)據(jù)庫中檢測該線路點是否存在,如果存在,系統(tǒng)則顯示這條車次線路的相關(guān)信息。如圖,線路查詢結(jié)果如下:圖5.5線路查詢系統(tǒng)會優(yōu)先根據(jù)下拉框中的輸入信息進行查詢,將輸入信息賦值給B_Id,接著查詢公交信息表,看是否存在相同的B_Id值,若有則將該公交線路存儲在公交信息表中的數(shù)據(jù)輸出在表格中,然后查詢該線路經(jīng)過的所有站點,利用循環(huán)將所有站點輸出至文本框中。主要實現(xiàn)代碼如下:publicpartialclassline_search_line_search:System.Web.UI.Page{//下面執(zhí)行的是線路查詢的操作stringLine="";//定義兩個全局變量privateintB_Id;protectedvoidPage_Load(objectsender,EventArgse)//初始化操作{//獲取超鏈接傳送來的線路Id,如果傳送來的Id有值if(Request.QueryString["id"]!=null&&Request.QueryString["id"]!=""){B_Id=int.Parse(Request.QueryString["id"].ToString());//獲取傳送過來的Id值,并賦值給B_IdStringstr="select*fromBusInfowhereB_Id='"+B_Id+"'";//查詢公交信息表,獲取符合條件的線路信息GridView_Line.DataSource=database.GetList(str).DefaultView;//獲取查詢信息并將其顯示在表格中GridView_Line.DataBind();//查詢該公交線路經(jīng)過的所有站點信息Stringstr1="select*fromStation_Line_ViewwhereB_Id='"+B_Id+"'orderbyid";intend=database.GetList(str1).Rows.Count;//記錄查詢記錄的條數(shù)for(inti=0;i<end;i++)//利用循環(huán),將所有的站點都顯示到text文本框里{if(i!=end-1)//表明該站不是終點站Line=Line+database.GetList(str1).Rows[i]["S_Name"].ToString()+"—>";else//表明該站是終點站Line=Line+database.GetList(str1).Rows[i]["S_Name"].ToString();}TxtLine.Text=Line;//將上述所有站點信息顯示到文本框里}}//略}5.1.6管理員登陸隨著城市的高速發(fā)展,公交線路的改變亦相當(dāng)頻繁,所以數(shù)據(jù)的維護是必須的。在數(shù)據(jù)管理中,管理員完成對線路和站點的各種操作,包括:查看、新增、修改、刪除,管理員只需要在登陸界面中輸入自己的賬號密碼就可以登陸系統(tǒng)進行管理。如圖,管理員登陸界面如下:圖5.6管理員登陸界面圖管理員登陸系統(tǒng)后,可對線路和站點進行查看、新增、修改、刪除,對系統(tǒng)進行維護更新,保證其運行的穩(wěn)定性,為大眾用戶提供盡可能完善的服務(wù)。5.2測試和維護為了確保本系統(tǒng)能夠正常運行,需要在發(fā)布之后做一次較全面的測試。創(chuàng)建和測試應(yīng)用程序應(yīng)是交替進行的,既要注意開發(fā)的效率也要注意它的穩(wěn)定性。每編寫一個模塊,就要對這個模塊進行測試,看它能否根據(jù)特定的要求工作。及早發(fā)現(xiàn)問題,及早解決,否則到最后再來測試的話,難度會大大增加。5.2.1測試分類由于程序中隱藏的缺陷只在特定的環(huán)境下才有可靠顯露,系統(tǒng)缺陷通常是由于對某些特定情況考慮不周造成的。因此測試不是為了表明程序正確;成功的測試也不是沒有發(fā)現(xiàn)錯誤的測試。有意義的軟件測試應(yīng)該是從“破壞”軟件系統(tǒng)的角度出發(fā),精心設(shè)計最有可以暴露程序系統(tǒng)缺陷的測試方案。因此軟件測試的目標(biāo)應(yīng)該是以盡可能少的代價和時間找出軟件系統(tǒng)中潛在的錯誤和缺陷。從產(chǎn)品角度看,測試計劃中的測試項目包括軟件結(jié)構(gòu)中的分系統(tǒng)層、子系統(tǒng)層、功能模塊層、程序模塊層中的各類模塊,從測試本身看,分為單元測試,組合測試,確認(rèn)測試等。測試對象是隨不同階段而異的,最基本、最初的測試是單元測試,后面的組合測試、確認(rèn)測試都是以被測過的模塊作為測試對象的。單元測試。單元測試也稱模塊測試或程序測試,單元測試是對每個模塊單獨進行的,驗證模塊接口與設(shè)計說明書是否一致,對模塊的所有主要處理路徑進行測試且與預(yù)期的結(jié)構(gòu)進行對照,還要對所有錯誤處理路徑進行測試。對源碼進行審查,對照設(shè)計說明書,表態(tài)地檢查源程序是否符合功能的邏輯要求,是進行單元測試前的重要工作工。單元測試一般是由程序員完成,也稱程序調(diào)試。組合測試。組合測試也稱集成測試或子系統(tǒng)測試,通常采用自頂向下測試和自底向上測試兩種測試方法。組合測試的對象是指已經(jīng)通過單元測試的模塊,不是對零散模塊進行單個測試,而是用系統(tǒng)化的方法裝配和測試軟件系統(tǒng),是一個嚴(yán)格的過程,必須認(rèn)真地進行,其計劃的產(chǎn)生和單元模塊測試的完成日期要協(xié)調(diào)起來,這種測試應(yīng)在系統(tǒng)目標(biāo)機上進行,造成系統(tǒng)應(yīng)用的環(huán)境條件,除了開發(fā)部分項目負(fù)責(zé)人參加以外,還應(yīng)該有相應(yīng)系統(tǒng)的用戶參加,給評審員進行演示。確認(rèn)測試。確認(rèn)測試是對通過組合測試的軟件進行的,這些軟件已經(jīng)存于系統(tǒng)目標(biāo)設(shè)備的介質(zhì)上,確認(rèn)測試的目的是表明軟件是可以工作的,并且符合“軟件需求說明書”中規(guī)定的全部功能和性能要求。確認(rèn)測試是按照這些要求定出的“確認(rèn)測試計劃”進行的。測試工作是由一個獨立的組織進行,而且測試要從用戶的角度出發(fā)。系統(tǒng)測試。系統(tǒng)測試是對整體性能的測試,主要解決各子系統(tǒng)之間的數(shù)據(jù)通信和數(shù)據(jù)共享問題以及檢測系統(tǒng)是否達(dá)到用戶的實際要求,系統(tǒng)測試的依據(jù)是系統(tǒng)分析報告。系統(tǒng)測試應(yīng)在系統(tǒng)的整個范圍內(nèi)進行,這種測試不只對軟件進行,而是對構(gòu)成系統(tǒng)的硬、軟件一起進行。系統(tǒng)測試與建構(gòu)同時進行或略慢。系統(tǒng)測試需要確認(rèn)從頭到尾的功能正常才算完成,應(yīng)當(dāng)盡量避免系統(tǒng)測試延到項目末尾進行。用戶驗收測試。在系統(tǒng)測試完成后,進行用戶的驗收測試,它是用戶在實際應(yīng)用環(huán)境中所進行的真實數(shù)據(jù)測試。在具體的測試中,一般應(yīng)遵循以下原則:由程序設(shè)計者之外的人進行測試;測試用例應(yīng)由兩部分組成:輸入數(shù)據(jù)和預(yù)期輸出結(jié)果;應(yīng)選用不合理的輸入數(shù)據(jù)與非法輸入測試;不僅要檢驗程序是否實現(xiàn)預(yù)期功能,還應(yīng)檢查程序是否做了不應(yīng)該做的工作;集中測試容易出錯的程序模塊;對程序修改以后,必須重新進行測試[7]。5.2.2軟件維護軟件維護是指在軟件運行或維護階段對軟件產(chǎn)品所進行的修改。軟件維護是軟件生命周期中耗費最多、延續(xù)時間最長的活動。根據(jù)軟件維護的不同原因,軟件維護可以分成三種類型:改正性維護,適應(yīng)性維護,完善性維護。除了上述三種維護之外,還有一類維護活動,稱為預(yù)防性維護。通常,人們將預(yù)防性維護定義為:“把今天的方法學(xué)用于昨天的系統(tǒng)以滿足明天的需要”。也就是說,采用先進的軟件工程方法,對需要維護的軟件或軟件中的某一部分重新進行設(shè)計、編制和測試,提高軟件的可維護性和可靠性等,為以后進一步改進

溫馨提示

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

評論

0/150

提交評論