基于J2EE的公交查詢系統的設計與實現
20多年來,我國經濟得到了延續、快速、穩定、健康地發展。經濟的快速增長,帶動了汽車工業的蓬勃發展,并使交通狀態顯著改良。據統計,中國公路通車總里程已達130余萬千米,其中高速公路約1.5萬千米。居民收入普遍提高,到2000年年底,人均GDP已超過800美元,沿海地區已達2000-3000美元。按國際發展慣例,當人均GDP超越1000美元,汽車消費市場就將進入快速增長時間。我國城市人口約有2億,略低于美國人口。東部沿海地區大部份居民已具有了汽車消費實力。據中國消費者協會2000年對20個大城市調查顯示,有32%的消費準備在未來5年內購買家用轎車,其中30.6%的無車消費者已有駕駛執照。隨著個人信貸制度的啟動和日漸完善,家庭轎車的快速增長勢頭勢必開掘出巨大的中國汽車市場。
城市經濟發展,城市范圍愈來愈大,相應的城市公交系統也愈來愈龐大。許多新建小區大量出現,公交線路也日漸增多,給人們的出行帶來了極大便利,但是由于城市范圍的不斷發展,給人們選擇出行乘車線路造成了1定的困難。即便1個在城市生活多年的人,給他任意兩個地點,要他說出這兩個地點之間的乘車方案,他常常也是很難說出來的。但是如果給他1張交通地圖以后,他可以很快地找出圖上的任意兩點之間的乘車方案,所找出的方案即便不是最優的,也是1條可供參考的備選方案。但是這樣的查詢效力是相當低的,所以需要提供1個高效的查詢系統,才是問題更本所在。而基于J2EE的公交查詢系統,就是利用B/S結構開發出來的查詢系統,它通過利用數據結構當中的最短路徑算法,可以查出任意兩個地點之間最短的乘車方案。它不但可以用于公交公司管理系統中,也能夠單獨作為公交管理系統的1個模塊存在,并可以制作成公交信息系統查詢網,放置于城市的主要場所。這樣不但可以體現出1個城市的智能公交系統的水平,更顯示出城市的數字化,信息化水平。
目前,我國眾多大城市普遍存在交通擁堵,延誤人們平時上班時間。乃至影響了城市旅游業經濟的可延續發展。所以為了切實的改良公交車內擁堵狀態,適當增加發車次數以縮短乘客等車時間,但是能夠準確為人們提供最短的乘車線路才是得到解決的最好辦法,這樣大大的縮短了人們的乘車時間。
本項目研究的基于J2EE的公交查詢系統,讓人們通過互聯網很快的查出該城市任意兩站點之間的最短乘車線路。
本系統是從城市交通現狀動身,根據人們的出行規律,設計了1個完全的基于J2EE體系的公交車查詢系統。該系統可以根據商廈名稱,公交車號,平常站點和站點之間為查詢條件分別進行查詢,解決了市民出行乘坐公交車時常常遇到的困難。
本系統模型構架分為下面4層結構,以下。
(1)J2EE利用程序組件
J2EE利用程序是由組件構成的。J2EE組件是具有獨立功能的軟件單元,它們通過相干的類和文件組裝成J2EE利用程序,并與其他組件交互。本系統包括以下組件:
①利用客戶端程序及J2EE服務器。
②Java Servlet和JavaServer Pages(JSP)Web組件及JavaBean。
(2)WEB層組件
J2EE web層組件包括JSP頁面或Servlet。依照J2EE規范,還包括某些JavaBean對象來處理用戶輸入,并把輸入發送給運行在業務邏輯層上的組件來進行處理。
(3)客戶層組件
基于WEB方式的靜態HTML頁面或是Applet客戶真個小利用程序。
(4)編寫算法
編寫最短路徑數據結構算法,解決完成站點之間最短乘車路徑查詢。
開發工具:Eclipse 3.2 + MyEclipse 5.0GA。
運行環境:JSDK 1.5.0_04虛擬機。
服務器:Tomcat 5.5。
數據庫:MicroSoft SQL Server 2000。
操作系統:Windows XP。
所需內存:512 M。
J2EE是1種利用Java 2平臺來簡化企業解決方案的開發、部署和管理相干的復雜問題的體系結構。J2EE技術的基礎就是核心Java平臺或Java 2標準平臺。J2EE不但鞏固了標準版中的許多優點,例如“編寫1次、隨處運行”的特性、方便存取數據庫的JDBC API、CORBA技術和能夠在Internet利用中保護數據的安全模式等等,同時還提供了對EJB(Enterprise JavaBeans)、Java Servlet API、JSP(Java Server Pages)和XML技術的全面支持。其終究目的就是成為1個能夠使企業開發者大幅縮短投放市場時間的體系結構。
JSP程序是1個服務端頁面腳本程序,可以在這個腳本中直接編寫客戶端閱讀器需要顯示的HTML文檔內容,固然也能夠依照JSP規范將Java程序代碼嵌入腳本。JSP腳本規范提供了若干內部對象來簡化JSP程序和閱讀器之間的輸入輸出處理。由于JSP程序是從HTML頁面添加Java動態處理代碼而來,因此,JSP程序又稱為動態JSP頁面。
JavaBean是1種JAVA語言寫成的可重用組件,用戶可使用JavaBean將功能、處理、值、數據庫訪問和其他任何可以用java代碼創造的對象進行打包,并且其他的開發者可以通過內部的JSP頁面、Servlet、其他JavaBean、applet程序或利用來使用這些對象。用戶可以認為JavaBean提供了1種隨時隨地的復制和粘貼的功能,而不用關心任何改變。這個對J2EE業務邏輯層處理具有相當重要的部份。
Java Servlet使用的是1種要求/響應機制,也就是說通過特定的Java程序設計技術,由該Servlet動態產生的響應向某1特定的要求做出響應。Servlet所能利用的要求/響應場合很多,但經常使用的還是在Web利用程序中用于產生超文本傳輸協議響應(HTTP)。據此,Servlet可能取代其他類型的HTTP要求/響應機制,比方通用網關接口(CGI)腳本。
Session對象是類javax.servlet.Httpsession的1個對象,是用來保存每一個用戶信息(以會話的情勢直接保存在WEB服務器端),以便跟蹤每一個用戶的操作狀態。
J2EE結構具有1個很大的特點,就是與平臺無關性的J2EE結構。所開發出來的程序可以在任何操作系統下運行。這樣就使得J2EE程序的編寫變得10分簡單,由于業務邏輯被封裝成可以復用的組件,并且J2EE服務器以容器的情勢為所有的組件類型提供后臺服務,所以你可以集中精力解決手頭的業務邏輯。
J2EE容器類型可以分為WEB容器和EJB容器。
EJB容器管理所有J2EE利用程序中企業級Bean的履行,Enterprise Bean和它們的容器運行在J2EE服務器上。
WEB容器也是管理所有J2EE利用程序中JSP和Servlet組件履行,同理WEB組件和它們的容器也是運行在J2EE服務器上的。
(1)表示層:Web Page| HTML | HTTP
(2)控制層:JSP | Servlets
(3)邏輯層:JavaBean
(4)數據層:Database
(5)JDBC
MVC(Model – View – Controller)
頁面bean是1個模型(model),而JSP是1個視圖(view), Servlet是1個控制器(controller)。
公交查詢系統的需求最主要是通過站點與車次之間的關系,利用數據結構算法構造1個公交查詢的網絡圖,然后通過最短路徑算法,為用戶準確地提供兩站點之間的最短乘車線路。
其次從業務實現上來講,需要在業務邏輯層上編寫最短路徑算法,同時還要編寫當用戶查詢要求時必須的數據庫連接,然后根據用戶提供查詢站點信息,建立公交查詢網絡圖,終究調用算法獲得兩站點之間的最短乘車線路。當查詢完成后,如果用戶需要進行其它的操作,則釋放該連接資源。
最后,為了讓公交線路信息得到及時的更新或是信息刪除,需要做出相應的操作和處理。
圖3.1 系統數據流圖
(1)通過選擇商廈名稱進行相應的信息查詢。
(2)通過選擇車號進行相應的信息查詢。
(3)通過選擇站點進行相應的信息查詢。
(4)通過選擇任意兩個站點,完成兩站點之間最短乘車線路查詢。
(5)完成車次和站點添加功能。
(6)完成車次和站點更新功能。
(7)完成車次和站點刪除功能。
(8)用戶登錄驗證功能。
(9)用戶注冊信息功能。
(10)用戶注銷功能。
(11)刪除用戶信息功能。
(12)添加用戶留言,刪除用戶留言,查看用戶留言。
(13)管理員登錄驗證功能。
(14)管理員注銷功能。
圖3.2 用戶實體及屬性
圖3.3 管理員實體及屬性
圖3.4 留言板實體及屬性
圖3.5 車次與站點之間關系
(1)用戶表userInfo(如表3.1)
表3.1 用戶表信息
列名 |
中文名稱 |
數據類型 |
長度 |
允許空 |
username |
用戶名 |
varchar |
50 |
Not null |
userpassword |
用戶密碼 |
varchar |
50 |
Not null |
userage |
用戶年齡 |
int |
4 |
null |
address |
地址 |
varchar |
50 |
null |
|
郵箱 |
varchar |
50 |
null |
question |
問題 |
varchar |
50 |
null |
answer |
答案 |
varchar |
50 |
null |
idnum |
證件號 |
varchar |
50 |
null |
(1)打開Eclipse開工具,新建1個ConfirmServlet類(如圖4.1)
圖4.1 創建管理員登錄ConfirmServlet類
(2)在已創建好ConfirmServlet類中,生成1個具有私有屬性的login()方法,該方法就是對管理員要求過來的信息進行驗證。該方法首先利用HttpServletRequest,HttpServletResponse進行對象初始化。利用HttpServletRequest的getParameter()來獲得管理員頁面傳來的兩個參數,1個是adminname,另外一個是adminpassword。然后調用自定義連接數據庫類進行數據庫對象實例化,最后在進行驗證的時候,獲得管理頁面驗證碼,如果驗證碼無誤就對管理員賬號和管理員密碼驗證,終究將正確的管理員賬號和管理員密碼放入session會話變量中。
管理員登錄界面(如圖4.2)
圖4.2 管理員登錄界面
相應代碼:
(1)打開Eclipse開工具,新建1個UserLoginServlet類(如圖4.3)
圖4.3 創建用戶登錄UserLoginServlet類
(2)與管理員中的ConfirmServlet類1樣,也生成1個具有私有屬性的login()方法,該方法也一樣的繼承了HttpServletRequest和HttpServletResponse類,通過這個類來獲得用戶界面要求過來的參數,當通過用戶信息驗證后,一樣也將用戶賬號和用戶的密碼放入session會話變量中,1旦用戶終究關閉閱讀器,session會話變量也隨即燒毀。
用戶登錄界面(如圖4.4)
圖4.4 用戶登錄界面
商廈查詢是為用戶提供按具體的名稱(如:歐尚)查詢,并顯示到這個地點所有公交車車次的相干信息(如:車號,站點名稱,票價,車子的檔次和這個商廈的名稱等信息)。而查詢功能的實現是由系統的業務邏輯層中的QueryData類來實現的。當用戶傳來的車次提交信息,首先商廈查詢頁面先編譯成服務器上的Servlet,然后根據需要調用業務邏輯層中相應類。
商廈信息查詢結果(如圖4.5)
圖4.5 商廈查詢
相應代碼:
調用此方法時,在頁面中先援用包com.busSystem.util,再創建QueryData類的對象,通過對象調用queryPlace()這個方法。
車次信息查詢是為用戶提供1個按公交車的車號(如:1路)查詢,并顯示該公交車的相干信息(如:公交車的出發點站、終點站、票價和車子的檔次等信息)。而查詢功能的實現是由系統的業務邏輯層中的QueryData類來實現的。
車次信息查詢結果(如圖4.6)
圖4.6 車次信息查詢
相應的代碼:
調用此方法時,在頁面中先援用包com.busSystem.util,再創建QueryData類的對象,通過對象調用statisticsByBusInfo()這個方法。
站點信息查詢是為用戶提供按公交車某1個站點查詢到該站點需要乘坐公交車的車號。該查詢功能的實現也是由系統的業務邏輯層中的QueryData類來實現的。
站點信息查詢結果(如圖4.7)
圖4.7 站點信息查詢
相應代碼:
調用此方法時,在頁面中先援用包com.busSystem.util,再創建QueryData類的對象,通過對象調用queryStInfo()這個方法。
任意兩個站點間的查詢頁面(如圖4.8)
圖4.8 最短路徑查詢頁面
任意兩個站點間查詢結果頁面(如圖4.9)
圖4.9 任意兩個站點間查詢結果
(1)廣度優先遍歷概念
給定1個出發點,廣度優先遍歷首先訪問出發點與出發點的鄰接點,然后分別考察每個鄰接點并訪問它們的鄰接點。遍歷使用1個隊列寄存頂點的未被訪問鄰接點,每當從隊列中刪除1個頂點,就將這個頂點的未訪問鄰接點插入隊列,遍歷的順序即為頂點插入這個隊列的順序。
(2)圖的建立進程
圖4.10 構造圖的流程
①初始化車次列表listBusNum,它是用來存儲數據庫中現有的車號,為建立圖的先做好準備。
②在建立圖的進程需要連接數據庫,所以必須將需要用到連接數據庫的類全部對象初始化,如:connection,statement,resultset這3個關鍵類。
③首先建立圖的時候,需要添加圖的各個節點。而這里的節點就是數據庫站點信息(stinfo)表中的站點ID號。
④查詢站點信息表,將所有的站點從數據庫中取出來,調用添加站點graph.addVertex()的方法,將圖的各個節點建立好。
⑤通過車次列表,循環的取出各個車號,查詢車號與站點ID關系表(busst),找到該車號對應的所有站點。
⑥創建向量vector,該向量用來寄存1個車號對應多個站的ID號。
⑦初始化站點列表listStID,它用來寄存已保存好站點ID的向量,這模樣就建立起1個關系,就是站點列表中保存了每個車號所對應車號它本身的所有站點ID。
⑧將站點列表和初始化好了的圖1起傳入createEdgeByDateBase中,建立雙向圖。最后圖的建立進程結束。
(3)最短路徑算法原理圖(如圖4.11)
圖4.11 最短路徑算法原理圖
(4)最短路徑算法原理描寫:
①將頂點A入隊,同時將頂點A設置為已被訪問。
②判斷隊列是不是為空,如果不是則頂點A出隊,同時判斷頂點A的鄰接頂點B、E、D是不是已被訪問,如果沒有,則將頂點B、E、D入隊,并分別設置為已被訪問,接著將入隊頂點B、E、D分別指向他們的前置頂點A,并分別判斷頂點B、E、D是不是為目的頂點I,不是則進入下1步3。
③判斷隊列是不是為空,如果不是則頂點B出隊,同時判斷頂點B的鄰接頂點E是不是已被訪問。判斷可知頂點B的鄰接頂點E已被訪問,則頂點E不用指向他的前置頂點B。接著進入下1步4。
④判斷隊列是不是為空,如果不是則頂點E出隊,同時判斷頂點E的鄰接頂點F、H是不是已被訪問,如果沒有,則將頂點F、H入隊,并分別設置為已被訪問,接著將入隊頂點F、H分別指向他們的前置頂點E,并分別判斷頂點F、H是不是為目的頂點I,不是則進入下1步5。
⑤判斷隊列是不是為空,如果不是則頂點D出隊,同時判斷頂點D的鄰接頂點G是不是已被訪問,如果沒有,則將頂點G入隊,并分別設置為已被訪問,接著將入隊頂點G分別指向他們的前置頂點D,并分別判斷頂點G是不是為目的頂點I,不是則進入下1步6。
⑥判斷隊列是不是為空,同時判斷入隊的頂點F是不是是目的頂點I。如果不是則頂點F出隊,同時判斷頂點F的鄰接頂點C是不是已被訪問,如果沒有,則將頂點C入隊,并分別設置為已被訪問,接著將入隊頂點C分別指向他們的前置頂點F。并分別判斷頂點C是不是為目的頂點I,不是則進入下1步7。
⑦判斷隊列是不是為空,如果不是則頂點H出隊,同時判斷頂點H的鄰接頂點I是不是已被訪問,如果沒有,則將頂點I入隊,并分別設置為已被訪問,接著將入隊頂點I指向他們的前置頂點H,并分別判斷頂點I是不是為目的頂點I,可以判斷頂點I就是目的頂點,將頂點I入堆棧,進入下1步8。
⑧判斷I的前置頂點是不是為空,如果不是則將前置頂點入堆棧,循環判斷前置頂點的前置頂點,如果不為空,則入堆棧,直到循環判斷到空為止。這樣堆棧中的所有頂點出堆棧,出堆棧的頂點A->E->H->I就是查詢出來最短路徑。
最短路徑算法相應的程序(利用廣度優先遍歷算法查找最短路徑):
添加車次功能主要是增加1個車次詳細信息,其中包括:車次號,出發點站,終點站,票價,汽車檔次,票價類型。需要注意,在添加出發點站和終點站的時候,數據都是從站點庫取得然后添加到出發點站和終點站中去。由于添加車次它只觸及到車次的詳細信息,如果要想添加站點,則需要在添加站點功能頁面中進行相應的操作。
添加車次頁面(如圖4.12)
圖4.12 添加車次
添加站點功能:(1)在添加站點的文本框中輸入要添加的站點名稱。(2)提供了1個站點重名的查找功能,該功能可以對你輸入添加的站點名稱進行名稱查重,通過查詢站點編碼表,顯示這個站點是不是已存在。如果不存在,則將此新增站點名稱插入到站點編碼表中,如果存在,則不需將此站點名稱插入到站點編碼表中。(3)通過下拉選擇框選擇新增站點所對應的車次號。(4)如果查詢站點總數在文本框中顯示為“0”,則需要將出發點站和終點站同新增的站點1起插入車次和站點的關系表中。如果查詢站點總數在文本框中顯示不為“0”,則只需將新增的站點插入車次和站點關系表中便可。
添加站點頁面(如圖4.13)
圖4.13 添加站點
刪除車次功能:分頁列出車次信息表中所有的車次信息,選擇操作中的刪除,就能夠將對應的車次信息刪除,但是在刪除車次信息的時候需要先刪除車次與站點關系表中所有對應當車次的信息。如果不先刪除就會出現違背數據庫完全性。
刪除車次頁面(如圖4.14)
圖4.14 刪除車次
刪除站點功能:通過車次的下拉選擇框選擇車次,進行查詢列出該車次的所有站點信息,然后點擊刪除操作就能夠刪除該站點。需要注意:由于在車次中從出發點站到終點站計算,其所有的站點是1個有次序的排列,所以刪除1個站點,則它的下個站點次序號順次減少1位。
刪除站點頁面(如圖4.15)
圖4.15 刪除站點
更新站點功能:通過車次的下拉選擇框選擇車次,進行查詢列出該車次的所有站點信息,然后點擊更新操作就能夠更新該站點。需要注意的是,在更新出發點站(或是終點站)的時候,也要同時更新車次表中的出發點站(或是終點站)。
更新站點頁面(如圖4.16)
圖4.16 更新站點
發表留言是公交查詢系統的1個新增的功能,主要是搜集用戶的留言信息,可以根據用戶提供的留言信息或是提出的建議,對系統進行修改和完善。使得系統更加趨于成熟完全。注冊的用戶登錄到發表留言的板塊當中,系統會自動提取用戶名稱,用戶只需添上自己的郵箱,發表的主題和內容便可。
發表留言頁面(如圖4.17)
圖4.17 發表留言
查看留言很簡單為用戶提供了1個查看自己的發表的留言,而其它用戶是不能看見的。由于系統是1個管理方面的功能較多,所以不會將用戶留言信息提供其它的用戶查看。
查看留言(如圖4.18)
圖4.18 查看留言
刪除留言功能只有管理員才能查看并操作,在刪除的顯示頁面中會將所有的用戶留言信息及用戶名顯示出來。這樣也為管理員提供查看哪些用戶是非法的發布留言內容。針對這類情況刪除該用戶。
刪除留言頁面(如圖4.19)
圖4.19 刪除留言
設計完成系統的各個模塊以后,需要對全部系統進行全面的測試。目的是讓全部系統能夠快速、穩定、安全的運行。在進行系統測試進程中出現以下幾種情況:
(1)對頁面提交的過來的數據進行空指針異常捕捉。凡是遇到無效或是空值數據都需要用程序進行操作處理。
(2)及時的捕捉數據庫連接和關閉異常。以避免數據庫連接資源及時釋放,提供下1次要求調用。
(3)對數據庫查詢操作異常進行捕捉。
(4)對數據庫查詢操作異常進行捕捉。
(5)對數據庫更新操作異常進行捕捉。
(6)對數據庫添加操作異常進行捕捉。
(7)對數據庫刪除操作異常進行捕捉。
(8)權限控制,通過session會話變量對管理員和用戶的權限進行控制。
(9)頁面的編碼方式不同,需要的對字符串進行轉碼操作。
通過對J2EE知識的認真學習,理論聯系實踐,終究完成了基于J2EE公交查詢系統的設計與實現。經過量次測試,運行效果良好。對該系統,加強后臺管理,就能夠單獨作為大型公交管理系統的1個模塊,也能夠將它的功能更加完善后放置于城市公共場所,為人們提供快捷、方便的查詢。這樣不但體現出1個城市的公交查詢系統的發展水平,更可以顯示出城市的數字化和信息化水平。公交查詢系統的開發利用也勢必促使城市公交更好的服務于人們。
在完成這次畢業設計的進程中,自己查閱了大量的書籍,并且通過互聯網也查閱了許多相干資料,開發出具有B/S結構模式的公交系統,從而使我的編程能力和自學能力得到了很大程度的提高,對網站設計有了更深地了解。
但是,由于全部系統完全都是由個人設計的,有關J2EE許多知識都要靠自己去摸索,加上自己水平有限,未能完全地理解J2EE的強大功能,因此,系統還存在著許多不足的地方。
[1] 劉曉華.J2EE企業級利用開發[M].北京:飛思科技產品研發中心,2003。
[2] 賽奎春,陳威.JSP工程利用與項目實踐[M].北京:清華大學出版社,2004。
[3] Cay S.Horstmann,Gary Cornell.java核心技術卷2高級特性[M].北京:機械工業出版社,2003。
[4] Frank M.Carrano,Walter Savitch.數據結構與抽象:Java語言版[M].北京:清華大學出版社,2005。
[5] 孫衛琴,李洪成.Tomcat與Java Web開發技術詳解[M].北京:電子工業出版社,2004。
[6] 高鐵杠,顧巧論.智能公交查詢系統[J].新技術利用,2005,(7):31⑶2。
[7] 王宏.MSSQL 數據庫管理[M].北京:人民郵電出版社,2001。
10路
· 南菜園到鼓樓大街
· 南菜園到長陵
· 南菜園到永定門東街
· 南菜園到華聯商城大興店
· 南菜園到豐臺路口西
· 航天橋東到9龍山
· 航天橋東到史各莊(S216)
· 航天橋東到岔道口
· 航天橋東到土橋村
· 航天橋東到北京華僑城北站
11路:
(共20站)
· 1大北窯東站
· 28王墳南站
· 3北京東站北站
· 49龍山站
· 5珠江帝景站
· 6大郊亭橋西站
· 7大郊亭橋東站
· 8東石門站
· 9唐家村站
· 10小海子站
· 114根旗桿站
· 12方家村站
· 13朝陽半壁店站
· 14觀音堂北站
· 15觀音堂站
· 16古塔公園站
· 17王4營站
· 18王4營橋東站
· 19孛羅營村北站
· 20孛羅營站
12路
· 15間樓站
· 2橫7條站
· 3劉家窯橋東站
· 4方莊南口站
· 5芳星園站
· 68里河站
· 7左安門外站
· 8左安門內站
· 9龍潭湖游泳池站
· 10龍潭公園站
· 11龍潭湖站
· 12光明樓站
· 13夕照寺站
· 14夕照寺街北口站
· 15廣渠門內站
· 16安化樓站
· 17培新街站
· 18南花市大街站
· 19羊市口站
· 20花市路口北站
· 21崇文門東站
· 22北花市大街站
· 23小市口站
· 24東花市大街站
· 25白橋大街站
· 26夕照寺街北口站
· 27夕照寺站
· 28光明樓站
· 29龍潭湖站
· 30龍潭公園站
想要源碼和完全文檔的請聯系QQ:1329331182