freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于j2me的公交查詢(xún)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)—論文(編輯修改稿)

2025-01-06 19:11 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 站,通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句“ select * from businfo” 獲得全部公交線路信息,再把每一路車(chē)的信息依次迭代出來(lái),判斷 A 站和 B 站是否同時(shí)在該線路中,如結(jié)果為 true,則可以直達(dá),同時(shí)將直達(dá)方案存入一個(gè)集合中, 第 6 頁(yè) 共 27 頁(yè) 繼續(xù)向下遍歷,如果結(jié)果為 false,則該車(chē)不能直達(dá),繼續(xù)向下遍歷。 一次換乘的算法設(shè)計(jì) 一 次換乘采用基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法,現(xiàn)在 A,B 兩個(gè)公交站,通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句查找出經(jīng)過(guò) A 站的所有公交車(chē)集合 Collection1,再通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句查找出經(jīng)過(guò) B 站的所有公交車(chē)集合 Collection2,判斷Collection1 和 Collection2 是否有交集,若有,則得到一次換乘方案,存放在結(jié)果集合中。判斷結(jié)束后,再按照經(jīng)過(guò)站點(diǎn)總數(shù)對(duì)換乘方案進(jìn)行排序,因?yàn)閾Q乘結(jié)果往往數(shù)以百計(jì),所以只取結(jié)果集的前 N 條記錄展現(xiàn)給用戶(hù)。若判斷結(jié)束后沒(méi)有找到一次換乘的方案,則執(zhí)行 2 次換乘算法。 一次換乘算法,如 圖 3 所示。 圖 3 一次換乘算法示意圖 圖 4 二次換乘算法示意圖 第 7 頁(yè) 共 27 頁(yè) 二次換乘的算法設(shè)計(jì) 二次換乘采用上下矩陣算法,現(xiàn)有 A,B 兩個(gè)公交站,先通過(guò)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句和程序業(yè)務(wù)邏輯得到 A 站能直達(dá)的所有站點(diǎn),放在集合 Collection1 中,再按照 A 站的方法找出 B 站能知道的所有站點(diǎn),放在集合 Collection2 中,再判斷是否有公交車(chē)可以從 Collection1 中的站點(diǎn)直達(dá) Collection2 中的站點(diǎn),如果,則將方案存放到結(jié)果集合中。至此為止,根據(jù)公交線路設(shè)計(jì)的理論,是肯定可以找到二次換乘的方案的,故不再考慮 3 次換乘方案。 二次換乘算法,如圖 4 所示。 手機(jī)公交查詢(xún)數(shù)據(jù)庫(kù)的設(shè)計(jì) 數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì) 圖 5 數(shù)據(jù)庫(kù)主要 ER 圖 準(zhǔn)確了解與分析用戶(hù)需求(包括數(shù)據(jù)與處理)是整個(gè)設(shè)計(jì)過(guò)程的基礎(chǔ) 。而根據(jù)用戶(hù)需求設(shè)計(jì)合適的數(shù)據(jù)庫(kù)以及選擇恰當(dāng)?shù)臄?shù)據(jù)庫(kù)以確保系統(tǒng)能高速穩(wěn)定的運(yùn)行則是數(shù)據(jù)庫(kù)設(shè)計(jì)的根本目地。 由于本系統(tǒng)涉及到大量數(shù)據(jù)的讀取,并且對(duì)安全性要求不高,故選用占用系統(tǒng)資源較少并且速度相對(duì)較快的 MySQL 作為本系統(tǒng)的數(shù)據(jù)庫(kù)。 通過(guò)對(duì)用戶(hù)需求的分析以及對(duì)系統(tǒng)本身應(yīng)用背景的 研究,可以看出本系統(tǒng)需要有以下數(shù)據(jù)支持:公交線路信息,公交站點(diǎn)信息,站點(diǎn)附近標(biāo)志信息,用戶(hù)通知信息,同時(shí)考慮到節(jié)約系統(tǒng)資源,在用戶(hù)進(jìn)行完站站查詢(xún)后還會(huì)產(chǎn)生一個(gè)存放查詢(xún)結(jié)果的緩存信息。由上述可以確認(rèn)該算法所關(guān)系到的數(shù)據(jù)表。 第 8 頁(yè) 共 27 頁(yè) 根據(jù)上述分析,可以得出公交信息模型的 ER 圖,如圖 5 所示。 公交信息相關(guān)數(shù)據(jù)庫(kù)的數(shù)據(jù)字典,如表 1 所示。 表 1 公交信息相關(guān)的數(shù)據(jù)字典 序 號(hào) 數(shù) 據(jù) 項(xiàng) 名 稱(chēng) 數(shù) 據(jù) 項(xiàng) 內(nèi) 容 1. 公交線路信息 公交線路的信息匯總 線路 ID 公交線路的 ID 線路 NO 公交線路的 名稱(chēng),如 502A 經(jīng)過(guò)站點(diǎn) 公交線路經(jīng)過(guò)的站點(diǎn) 收發(fā)車(chē)時(shí)間 公交車(chē)的收發(fā)車(chē)時(shí)間 是否上下行 判斷該公交車(chē)是否有上下行 2. 公交站點(diǎn)信息 公交站點(diǎn)相關(guān)信息 公交站名 該站點(diǎn)的站名 附近標(biāo)志 1 附近標(biāo)志 1 的名字 附近標(biāo)志 2 附近標(biāo)志 2 的名字 附近標(biāo)志 3 附近標(biāo)志 3 的名字 附近標(biāo)志 4 附近標(biāo)志 4 的名字 附近標(biāo)志 5 附近標(biāo)志 5 的名字 附近標(biāo)志 6 附近標(biāo)志 6 的名字 附近標(biāo)志 7 附近標(biāo)志 7 的名字 附近標(biāo)志 8 附近標(biāo)志 8 的名字 附近標(biāo)志 9 附近標(biāo)志 9 的名字 附近標(biāo)志 10 附近標(biāo)志 10 的名字 3. 站點(diǎn)附近標(biāo)志匯總 站點(diǎn)附近標(biāo)志性建筑物或者地名的匯總 標(biāo)志 ID 標(biāo)志編號(hào) 標(biāo)志名稱(chēng) 站點(diǎn)附近標(biāo)志性建筑物或者地段的名稱(chēng) 數(shù)據(jù)庫(kù)的物理設(shè)計(jì) ( 1)公交線路信息表 負(fù)責(zé)存放公交線路信息,考慮到部分公交車(chē)存在上行和下行不一致的情況,表中添加了是否上下行的字段,以供算法確認(rèn)。如表 2 所示。 表 2 公交線路信息表 公交 線路信息表 (businfo) 字段名 注釋 第 9 頁(yè) 共 27 頁(yè) Busid 公交車(chē)的 id Busno 公交車(chē)的車(chē)號(hào) stop1 第 1 個(gè)站的站名 stop2 第 2 個(gè)站的站名 …… …… …… …… stop50 第 50 個(gè)站的站名 Time 公交車(chē)的發(fā)車(chē)收車(chē)時(shí)間 Startend 公交車(chē)的起點(diǎn)和終點(diǎn) Updown 是否有上下行 ( 2) 站點(diǎn)信息表 負(fù)責(zé)存放站點(diǎn)相關(guān)信息,并且存放一定的周?chē)鷺?biāo)志建筑和地名的信息,以供算法進(jìn)行模糊查詢(xún)。如表 3 所示。 表 3 站點(diǎn)信息表 站點(diǎn)信息表 (stopinfo) 字段名 注釋 Stopname 公交站站名 near1 附近標(biāo)志 1 near2 附近標(biāo)志 2 near3 附近標(biāo)志 3 near4 附近標(biāo)志 4 near5 附近標(biāo)志 5 near6 附近標(biāo)志 6 near7 附近標(biāo)志 7 near8 附近標(biāo)志 8 near9 附近標(biāo)志 9 near10 附近標(biāo)志 10 Stoppic 臃余字段,為以后功能預(yù)先留出 (3) 站點(diǎn)附近標(biāo)志匯總表 負(fù)責(zé)存放站點(diǎn)周?chē)鷺?biāo)志建筑或地名的匯總信息,本表為站點(diǎn)信息表的 near集合自動(dòng)生成 。如表 4 所示。 第 10頁(yè) 共 27頁(yè) 表 4 站點(diǎn)附近標(biāo)志匯總表 站點(diǎn)附近標(biāo)志匯總表 (stopinfo) 字段名 注釋 Id 標(biāo)志的 id Nearname 標(biāo)志的名字 (4) 用戶(hù)公告表 負(fù)責(zé)存放本系統(tǒng)的公告信息。如表 5 所示。 表 5 用戶(hù)公告表 用戶(hù)公告表 (notify) 字段名 注釋 Id 消息的 id Content 消息內(nèi)容 Date 消息發(fā)布日期 (5) 查詢(xún)統(tǒng)計(jì)表 負(fù)責(zé)統(tǒng)計(jì)用戶(hù)查詢(xún)和下載量。如表 6 所示。 表 6 查詢(xún)統(tǒng)計(jì)表 查詢(xún)統(tǒng)計(jì)表 (jishuqi) 字段名 注釋 Id id Fangwen 查詢(xún)量 Xiazai 客戶(hù)端下載量 4 手機(jī)公交查詢(xún)系統(tǒng)功能詳細(xì)實(shí)現(xiàn) 經(jīng)過(guò)上面的描述,已經(jīng)明確了手機(jī)公交查詢(xún)系統(tǒng)需要實(shí)現(xiàn)的功能以及如何去完成這些功能。下面將具體的闡述如何實(shí)現(xiàn)這些功能。 服務(wù)器端的實(shí)現(xiàn) 本系統(tǒng)遵照 J2EE 4 層結(jié)構(gòu) ,使用了 MVC、 AO 等設(shè)計(jì)模式 ,組織結(jié)構(gòu)圖如圖 6 所示。 第 11 頁(yè) 共 27 頁(yè) 圖 6 系統(tǒng)組織結(jié)構(gòu)圖 基類(lèi)( Base Class)的實(shí)現(xiàn) 采用 AO 模式,將數(shù)據(jù)庫(kù)相關(guān)方法封裝到一個(gè)基類(lèi)中,由業(yè)務(wù)邏輯繼承該基類(lèi)。 數(shù)據(jù)庫(kù)連接( Connection) 通過(guò)配置 WEB 服務(wù)器上的連接池,同時(shí)將數(shù)據(jù)源綁定到 JNDI,程序直接通過(guò) JNDI Name 獲取,實(shí)現(xiàn)了數(shù)據(jù)源的可配置性和高度可移植性。獲取 JNDI Name 方法如下: ds = () (dsName) 。 //從數(shù)據(jù)源得到連接 conn = () 。 因?yàn)楹竺嫘枰啻握{(diào)用關(guān)閉數(shù)據(jù)庫(kù)連接,故關(guān)閉連接封裝到一個(gè)方法中,具體實(shí)現(xiàn)如下: //關(guān)閉數(shù)據(jù)庫(kù)連接 第 12頁(yè) 共 27頁(yè) public void close(ResultSet rs,PreparedStatement ps,Connection con){ try{ if(rs!=null){ ()。 } if(ps!=null){ ()。 } if(con!=null){ ()。 } }catch(Exception e){ ()。 } } 輔助類(lèi)( Help Class)的實(shí)現(xiàn) 輔助類(lèi)主要為業(yè)務(wù)類(lèi)提供一些輔助功能,盡量實(shí)現(xiàn)功能的分離和高度封裝。同時(shí)為了加快運(yùn)行速度,減少 JVM 編譯負(fù)擔(dān),采用 PreparedStatement。部分方法如下: ( 1)獲得公交總數(shù) 一般查找總數(shù)用 ”select count(*) from businfo”,但這樣因?yàn)槭琼樞虮闅v,一直要遍歷到最后一條,效率不高,此處使用 ()。使游標(biāo)直接指向最后一條記錄,再用 buscount = ()。記錄最后一條記錄的行號(hào),從而得到了總行數(shù),比起前一個(gè)方法更快而且節(jié)約系統(tǒng)資源。 ( 2)插入數(shù)據(jù)庫(kù)緩存,使得下一個(gè)用戶(hù)查詢(xún)?cè)摲桨笗r(shí)可以直接從數(shù)據(jù)庫(kù)中獲取結(jié)果,從而大大的節(jié)約了用戶(hù)時(shí)間和系統(tǒng)資源。實(shí)現(xiàn)方法如下: String sql=insert into zhuancheng(id,result1,result2,result3,result4) VALUES(?,?,?,?,?)。 ps1 = (sql) 。 (1,start+end)。 (2,result1)。 (3,result2)。 (4,result3)。 (5,result4)。 ()。 用戶(hù)查詢(xún)時(shí)若數(shù)據(jù)庫(kù)中已有緩存數(shù)據(jù),則調(diào)用以下方法獲取緩存的換乘數(shù)據(jù): 第 13頁(yè) 共 27頁(yè) String sql1=select * from zhuancheng where id=+39。+start+end+39。 ps1 = (sql1) 。 rs1 = () 。 while(()){ result1=(result1)。 result2=(result2)。 result3=(result3)。 result4=(result4)。 業(yè)務(wù)邏輯類(lèi)( Logic Class)的實(shí)現(xiàn) ( 1)查詢(xún)公交線路 該方法比較簡(jiǎn)單,通過(guò)“ select * from businfo where busno=+busno”即可得到符合條件的公交車(chē),同時(shí)返回用戶(hù)需要的數(shù)據(jù)。 ( 2)按站查詢(xún)經(jīng)過(guò)的公交線路,步驟如下: ① 通過(guò)輔助類(lèi)判斷用戶(hù)輸入的站名或者附近標(biāo)志名,并找到對(duì)應(yīng)的公交站名。 ② 通過(guò) Sql 語(yǔ)句找到經(jīng)過(guò)該站的公交車(chē),存放在一個(gè)集合中并返回。 ( 3)按起點(diǎn)終點(diǎn)查找乘坐方案 這是本系統(tǒng)中最復(fù)雜的一塊,通過(guò)前面提到的基于站點(diǎn)優(yōu)先級(jí)和鄰接矩陣的公交換乘算法和 上下矩陣算法來(lái)實(shí)現(xiàn),具體實(shí)現(xiàn)方法如下: ① 通過(guò) start=(start)。 end=(end)。來(lái)確定起點(diǎn)和終點(diǎn)的公交站名。 ② 檢驗(yàn)站名是否存在,存在則繼續(xù)往下,不存在則返回提示信息。 ③ 若站名存在,則嘗試從數(shù)據(jù)庫(kù)中取得直達(dá)緩存信息,如數(shù)據(jù)庫(kù)中沒(méi)有直達(dá)信息,則查找換乘信息。 ④ 若數(shù)據(jù)庫(kù)中沒(méi)有緩存,則開(kāi)始查找有無(wú)直達(dá)線路,找到后把結(jié)果存入數(shù)據(jù)庫(kù)。 ⑤ 如果沒(méi)有直達(dá)方案,則開(kāi)始查找 1 次換乘方案,找到后按照經(jīng)過(guò)站數(shù)排序,站數(shù)少的排前面,由于換乘 方案過(guò)多,故只返回前幾條。 由于一次換乘結(jié)果可能成百上千 ,故只給用戶(hù)前幾條換乘方案進(jìn)行選擇 ,先將全部換乘方案按經(jīng)過(guò)車(chē)站數(shù)進(jìn)行排序 ,再取前 4 條返回給用戶(hù)。 排序類(lèi)為一個(gè)實(shí)現(xiàn)了 Serializable 和 Comparable 的工具類(lèi),具體排序方法在pareTo 方法中實(shí)現(xiàn) ,通過(guò) pareTo(Object b)來(lái)定義如何排序, 代碼如下: public int pareTo(Object b) 第 14頁(yè) 共 27頁(yè) { SortBean sort=(SortBean)b。 return () 。 } ⑥ 換乘得到結(jié)果后放入 Collection 中返回。 ⑦ 最后把找到的結(jié)果集寫(xiě)入到數(shù)據(jù)庫(kù)緩存中。 (start,end,zhuanchengresult[0],zhuanchengresult[1],zhuanchengresult[2],zhuanchengresult[3])。 ⑧如果找不到一次換乘(這種情況非常渺茫),而用戶(hù)又非常執(zhí)著的要繼續(xù)找公交車(chē),就不得不使用二次換乘,算法在 節(jié)已有說(shuō)明,下面列出具體做法: 首先查找出經(jīng)過(guò) 起點(diǎn)站和終點(diǎn)站的線路,再通過(guò)線路找到該站能直達(dá)的所有站點(diǎn),以起點(diǎn)站為例: Collection stop1bus=findbusnobystop(stop1)。//經(jīng)過(guò) stop1的公交車(chē) Collection stop2bus=findbusnobystop(stop2)。//經(jīng)過(guò) stop2 的公交車(chē) Iterator itr=()。 while((
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1