版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
旅游資源及線路管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1引言1.1系統(tǒng)開發(fā)背景隨著現(xiàn)代科技的發(fā)展和飛速的進(jìn)步,具有效率高、準(zhǔn)確率高等特點(diǎn),對(duì)我們的生活和生產(chǎn)有著巨大的影響。許多前沿技術(shù)的發(fā)展都依賴于計(jì)算機(jī)技術(shù),例如:計(jì)算、數(shù)據(jù)和圖像的處理、醫(yī)療、國(guó)防等領(lǐng)域。這些都是源于它擁有這處理信息量大和快的特點(diǎn)。計(jì)算機(jī)技術(shù)面向系統(tǒng)的設(shè)計(jì),較大程度上提高了系統(tǒng)的性能,讓我們?cè)谶M(jìn)行程序設(shè)計(jì)時(shí)能夠有更大的靈活性,同時(shí)也改善了開發(fā)系統(tǒng)的效率,讓系統(tǒng)的維護(hù)變得更加簡(jiǎn)單。從數(shù)據(jù)來(lái)看,每年的旅游人數(shù)都在增加,這與我們?nèi)嗣竦纳詈褪杖氲牟粩嗵岣哂兄懿豢煞值年P(guān)系,與此同時(shí)人民對(duì)高質(zhì)量的生活有著更大的期盼,這也促使我們迎來(lái)了我國(guó)旅游業(yè)的快速發(fā)展以及消費(fèi)熱潮、各種各樣地旅游相關(guān)的企業(yè)也都拔地而起。旅游涉及到人們生活的很多方面,并且包含世界上每一個(gè)角落的旅游資源,對(duì)資源的管理如果不依賴管理信息系統(tǒng),將非常困難。1.2研究應(yīng)用現(xiàn)狀隨著旅游資源的不斷開發(fā)和發(fā)展,越來(lái)越多的旅游資源希望能夠被更多的人熟知,而能夠很好地實(shí)現(xiàn)資源共享的最好的方式之一,莫過(guò)于將旅游資源信息化,才能讓更多的人能夠共享到更多的旅游資源,這樣也會(huì)極大地推動(dòng)我國(guó)旅游產(chǎn)業(yè)的快速發(fā)展。在這個(gè)機(jī)遇前提之下,我們同樣面臨著許多挑戰(zhàn),對(duì)龐大的信息資源的管理就是較為重要的問(wèn)題之一,合理的信息管理系統(tǒng)就可以很好的推進(jìn)問(wèn)題的解決。旅游業(yè)與信息化的結(jié)合,將作為未來(lái)經(jīng)濟(jì)中的重要產(chǎn)業(yè)。旅游信息化的一個(gè)很重要的內(nèi)容就是旅游信息管理系統(tǒng)的搭建。如果想要科學(xué)的管理,必然要與高新技術(shù)手段的結(jié)合,可以說(shuō)企業(yè)信息技術(shù)的應(yīng)用情況能夠直接反應(yīng)出它的管理水平是否先進(jìn)高效。在我國(guó)乃至全世界的范圍內(nèi),存在許多已經(jīng)開發(fā)的旅游信息資源,但是這些信息,很多的時(shí)候又得不到及時(shí)的更新,無(wú)法給與游客一個(gè)更好的旅行。而旅游業(yè)信息化的管理可以成為許多游客的最好的信息服務(wù)中介。先進(jìn)的管理和思維方式憑借著信息和網(wǎng)絡(luò)技術(shù)的發(fā)展, 能夠?yàn)槁糜螛I(yè)帶來(lái)翻天覆地的變化,促進(jìn)旅游資源國(guó)際化的發(fā)展。1.3論文研究?jī)?nèi)容旅游資源及線路管理系統(tǒng)主要服務(wù)于旅行供應(yīng)商對(duì)旅游資源的管理和旅客對(duì)旅游資源的檢索等相關(guān)問(wèn)題,來(lái)設(shè)計(jì)合理的解決方案,以便能夠解決資源管理復(fù)雜、線路編輯繁瑣等問(wèn)題。在系統(tǒng)的需求分析、設(shè)計(jì)和實(shí)現(xiàn)階段主要實(shí)現(xiàn)功能如下:整體旅游業(yè)務(wù)管理該系統(tǒng)的設(shè)計(jì)主要服務(wù)于中小旅行社進(jìn)行日常的旅游資源管理,做出的一系列解決方案。在系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中,運(yùn)用面向?qū)ο缶幊碳夹g(shù)對(duì)關(guān)鍵業(yè)務(wù)需求進(jìn)行需求分析、設(shè)計(jì)和實(shí)現(xiàn)。主要包括:地域資源管理、景點(diǎn)資源管理、賓館資源管理、旅游線路編輯以及報(bào)價(jià)管理。[1]旅游資源檢索該系統(tǒng)的設(shè)計(jì)主要針對(duì)兩種用戶,第一種用戶是上面提及的中小旅行社(商戶),第二種是需要尋找旅游資源的用戶(用戶),該系統(tǒng)為第二種用戶提供了旅游資源檢索功能,為用戶提供了一個(gè)能夠選擇自己喜愛(ài)旅游路線的平臺(tái)。該論文的目的是利用計(jì)算機(jī)技術(shù)能夠?yàn)樯虘艉陀慰吞峁┮粋€(gè)平臺(tái),商戶可以過(guò)該系統(tǒng)完成對(duì)資源的日常管理,游客可以通過(guò)檢索平臺(tái)了解商戶們發(fā)表的旅游資源信息。系統(tǒng)的開發(fā)運(yùn)用面向?qū)ο缶幊毯蛿?shù)據(jù)庫(kù)技術(shù)對(duì)該系統(tǒng)的各個(gè)功能實(shí)現(xiàn)。
2系統(tǒng)相關(guān)技術(shù)2.1面向?qū)ο缶幊碳夹g(shù)Java作為一門面向?qū)ο蟮脑O(shè)計(jì)語(yǔ)言,最主要的特點(diǎn)就是面向?qū)ο螅煤诵牡娜齻€(gè)功能,封裝、繼承、多態(tài)能夠很好的編寫出邏輯嚴(yán)謹(jǐn)?shù)某绦騕2]。Java雖然只支持單繼承,但是它可以通過(guò)實(shí)現(xiàn)接口來(lái)達(dá)到多繼承的效果。Java語(yǔ)言同樣是一門健壯性較高的語(yǔ)言,尤其是異常處理機(jī)制能夠很好的捕獲異常,并處理異常。2.2MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)部分是在該系統(tǒng)中的一個(gè)核心部分,一個(gè)良好的數(shù)據(jù)庫(kù)設(shè)計(jì)不僅能夠給用戶更好的體驗(yàn),能夠提升開發(fā)人員的開發(fā)效率,系統(tǒng)的運(yùn)行效率同樣能夠得到很大的提升。數(shù)據(jù)庫(kù)技術(shù)涉及到數(shù)據(jù)的安全性,該數(shù)據(jù)庫(kù)擁有良好的安全機(jī)制[3]。數(shù)據(jù)庫(kù)設(shè)計(jì)通常核心的幾個(gè)階段包括:需求分析需求分析階段主要是了解用戶的需求,站在用戶需求的角度涉及系統(tǒng)。其中包括數(shù)據(jù)與處理。該過(guò)程可能會(huì)花費(fèi)較長(zhǎng)的事件,但是做好準(zhǔn)確的需求分析,極大地提高系統(tǒng)數(shù)據(jù)庫(kù)的質(zhì)量,從而能夠提高整個(gè)系統(tǒng)的健壯性,為后期的開發(fā)工作和維護(hù)工作減少工作量。概念結(jié)構(gòu)設(shè)計(jì)概念結(jié)構(gòu)設(shè)計(jì)作為數(shù)據(jù)庫(kù)設(shè)計(jì)中的關(guān)鍵一步,將前期總結(jié)的用戶需求進(jìn)行歸納與抽象,形成概念模型。邏輯結(jié)構(gòu)設(shè)計(jì)階段(E-R圖)邏輯結(jié)構(gòu)設(shè)計(jì)階段最主要的工作就是將概念模型轉(zhuǎn)換為數(shù)據(jù)模型,并完成E-R圖的設(shè)計(jì),并完成對(duì)每個(gè)實(shí)體和實(shí)體間聯(lián)系的定義。2.3EclipseEclipse[4]是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。盡管Eclipse是使用Java語(yǔ)言開發(fā)的,但它的用途并不限于Java語(yǔ)言;其他編程語(yǔ)言的插件都可以使用,它提供的僅僅是框架的集成,便于開發(fā)人員的使用,通過(guò)插件組件構(gòu)建開發(fā)環(huán)境。
3系統(tǒng)概述與需求分析3.1系統(tǒng)總體描述伴隨著旅游業(yè)的快速發(fā)展和人民生活質(zhì)量的需求提高,旅游成為了人們消費(fèi),放松身心的一個(gè)很好的選擇。更多的人會(huì)選擇報(bào)名參團(tuán)的方式出行。該系統(tǒng)主要實(shí)現(xiàn)用戶管理、地域資源管理、景點(diǎn)資源管理、賓館資源管理、旅游資源檢索、旅游線路編輯及報(bào)價(jià)管理等主要功能模塊。用戶(旅客):可以實(shí)現(xiàn)登錄,旅游資源檢索、查看景點(diǎn)詳情、查看賓館詳情、查看旅游線路。商戶(旅行供應(yīng)商):可以完成旅游資源的錄入,錄入旅游景點(diǎn)資源、賓館資源、以及對(duì)旅游信息的發(fā)布和增刪改查。3.2系統(tǒng)數(shù)據(jù)流程通過(guò)對(duì)旅行供應(yīng)商的業(yè)務(wù)和需求的具體分析與調(diào)查,了解到旅游資源及線路管理系統(tǒng)的數(shù)據(jù)流程的整個(gè)過(guò)程,下面通過(guò)用數(shù)據(jù)流程圖的方式來(lái)大致描述整個(gè)系統(tǒng)的數(shù)據(jù)流動(dòng)。旅游資源及線路管理系統(tǒng)的系統(tǒng)數(shù)據(jù)流程圖如圖3-1所示。圖3-1系統(tǒng)數(shù)據(jù)流程圖3.3功能需求分析根據(jù)實(shí)地的調(diào)查和測(cè)試,最后功能需求分為:用戶管理模塊、地域資源管理模塊、景點(diǎn)資源管理模塊、賓館資源管理模塊、旅游線路編輯及報(bào)價(jià)管理模塊、旅游資源檢索模塊。用戶管理模塊用戶管理模塊主要包含用戶的注冊(cè)和登錄功能,完成對(duì)于不同的兩種類型的用戶的注冊(cè)和登錄。地域資源管理模塊地域資源管理模塊服務(wù)于旅行供應(yīng)商,用于完成對(duì)旅游信息所屬城市的管理,主要操作有增加新的地域資源,刪除某地域資源,及查詢旅行供應(yīng)商所發(fā)布的旅游信息所在城市。景點(diǎn)資源管理模塊景點(diǎn)資源管理模塊服務(wù)于旅行供應(yīng)商,用于完成對(duì)旅游信息所發(fā)布的景點(diǎn)的管理,主要操作包括增加及刪除景點(diǎn)資源,查看及修改景點(diǎn)資源。賓館資源管理模塊賓館資源管理模塊服務(wù)于旅行供應(yīng)商,用于完成對(duì)旅游信息所發(fā)布的賓館資源的增刪改查操作。旅游線路管理模塊旅游線路作為該系統(tǒng)的一個(gè)核心模塊,對(duì)于旅行供應(yīng)商來(lái)說(shuō),主要是完成對(duì)線路的編輯及發(fā)布,增加及刪除旅游線路。而對(duì)于用戶旅客來(lái)說(shuō),主要是對(duì)旅游線路的查詢,并收藏旅游線路等。旅游資源檢索模塊旅游資源檢索模塊主要服務(wù)于旅客,用于完成旅客對(duì)旅游信息的檢索,并為旅客提供了對(duì)檢索結(jié)果按價(jià)格升降排序的功能,同時(shí)為旅客提供了推薦景點(diǎn)及住宿資源的功能[5]。系統(tǒng)功能圖如圖3-2所示。圖3-2系統(tǒng)功能圖
3.4各模塊功能描述用戶注冊(cè)登錄模塊:該模塊主要完成用戶的注冊(cè)和登錄功能,第一類用戶為旅行供應(yīng)商,第二類用戶為旅客。地域資源管理模塊:該模塊主要是面向旅行供應(yīng)商的。用于完成旅行供應(yīng)商在整理發(fā)布旅游信息時(shí),選擇地域。處理方案是通過(guò)創(chuàng)建一棵樹來(lái)完成對(duì)地域資源的管理,管理員可以通過(guò)增加或者刪除來(lái)創(chuàng)建一個(gè)地域的子節(jié)點(diǎn)。例如:管理員需要發(fā)布一則關(guān)于北京市的旅游信息,只需要在根節(jié)點(diǎn)上點(diǎn)擊,輸入“北京市”即可完成地理位置的創(chuàng)建。景點(diǎn)資源管理模塊:該模塊主要是面向旅行供應(yīng)商的。用于完成旅行供應(yīng)商在編輯旅游線路的過(guò)程中,所涉及的景點(diǎn)資源管理。我的處理方案是通過(guò)一個(gè)表格來(lái)完成線路的編輯功能,表格一共包含五列,分別為時(shí)間、行程、景點(diǎn)、住宿、餐飲。在景點(diǎn)一列綁定了鼠標(biāo)點(diǎn)擊事件,觸發(fā)事件時(shí),彈出景點(diǎn)資源錄入界面,輸入對(duì)應(yīng)的景點(diǎn)相關(guān)的信息,即可完成對(duì)景點(diǎn)的錄入。賓館資源管理模塊:該模塊主要是面向旅行供應(yīng)商的。用于完成旅行供應(yīng)商在編輯旅游線路的過(guò)程中,對(duì)賓館資源的錄入。處理方案是對(duì)線路的表格中的住宿一列添加鼠標(biāo)點(diǎn)擊時(shí)間,觸發(fā)時(shí)間后,彈出對(duì)應(yīng)的賓館資源錄入界面,輸入對(duì)應(yīng)的住宿相關(guān)的信息,即可完成對(duì)賓館資源的錄入。旅游線路管理模塊:該模塊作為一個(gè)服務(wù)于旅行供應(yīng)商的核心模塊。用于完成對(duì)整個(gè)旅游線路的編輯以及報(bào)價(jià)等信息的錄入。旅游線路的錄入,主要是通過(guò)一張表格的形式來(lái)展示。通過(guò)對(duì)表格中的時(shí)間、行程、景點(diǎn)、住宿、餐飲等所有信息的錄入之后,一則旅游信息的整個(gè)線路就已經(jīng)錄入完成了。旅游資源檢索模塊:該模塊主要是面向旅客服務(wù)的。旅客可以通過(guò)該模塊完成對(duì)旅游資源的檢索以及收藏心儀的旅游路線等功能,檢索功能主要是根據(jù)一些關(guān)鍵字,進(jìn)行匹配旅行供應(yīng)商發(fā)布的旅游信息。同時(shí)在得到檢索結(jié)果后,提供給旅客根據(jù)報(bào)價(jià)進(jìn)行升降序排序的功能,并且會(huì)根據(jù)旅游信息的點(diǎn)擊率,為旅客提供較為熱門的景點(diǎn)、賓館等信息。
4系統(tǒng)總體設(shè)計(jì)4.1系統(tǒng)技術(shù)架構(gòu)根據(jù)整個(gè)旅游資源及線路管理系統(tǒng)的需求分析,系統(tǒng)的開發(fā)采用的事MVC[6]框架進(jìn)行設(shè)計(jì)的,具體如下圖所示系統(tǒng)總體技術(shù)設(shè)計(jì)圖如圖4-1所示。圖4-1系統(tǒng)總體技術(shù)圖在上述系統(tǒng)總體技術(shù)圖中,視圖層是實(shí)現(xiàn)采用的GUI編程完成的界面,用戶能夠清晰地看到系統(tǒng)反饋的信息的匯總界面;通過(guò)控制層來(lái)完成與用戶的人機(jī)交互,并將用戶輸入的指令和數(shù)據(jù)傳遞給模型層;然后通過(guò)模型層與數(shù)據(jù)庫(kù)的交互,采用一些相對(duì)獨(dú)立的業(yè)務(wù)邏輯模塊,使系統(tǒng)能夠更好地可能不斷變化的業(yè)務(wù)流程,技術(shù)上采用的事JDBC實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的一系列操作。使用MySQL作為后臺(tái)數(shù)據(jù)庫(kù)系統(tǒng),完成整個(gè)系統(tǒng)的設(shè)計(jì)。系統(tǒng)項(xiàng)目目錄圖如圖4-2所示。圖4-2系統(tǒng)結(jié)構(gòu)目錄圖4.2系統(tǒng)總體功能設(shè)計(jì)總體功能結(jié)構(gòu)圖分為旅行供應(yīng)商的功能結(jié)構(gòu)、旅客的功能結(jié)構(gòu)圖分別如圖4-3、4-4所示。圖4-3旅行供應(yīng)商的功能結(jié)構(gòu)圖
圖4-4旅客功能結(jié)構(gòu)圖
4.3系統(tǒng)數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)4.3.1數(shù)據(jù)庫(kù)E-R圖分析設(shè)計(jì)具體如圖4-5所示。圖4-5系統(tǒng)E-R圖4.3.2數(shù)據(jù)庫(kù)表設(shè)計(jì)根據(jù)以上E-R圖設(shè)計(jì)了5張表,分別是用戶表、旅游信息表、收藏表、旅游路線表、景點(diǎn)/賓館表。表的結(jié)構(gòu)如表4-1至4-5所示。表4-1用戶表字段屬性長(zhǎng)度注釋不為空主鍵useridvarchar11用戶id是是usernamevarchar20用戶賬號(hào)是否passwordvarchar20用戶密碼是否typevarchar10用戶類型是否表4-2旅游信息表字段屬性長(zhǎng)度注釋不為空主鍵idvarchar11旅游信息id是是locationvarchar128地理位置是否descriptionvarchar256旅游信息描述否否imagesvarchar256旅游信息圖片是否priceint11報(bào)價(jià)是否dayint11旅游天數(shù)是否user_idint11所屬用戶id是否表4-3收藏表字段屬性長(zhǎng)度注釋不為空主鍵idint11收藏id是是path_idint11路線id是否user_idint11用戶id是否
表4-4旅游路線表字段屬性長(zhǎng)度注釋不為空主鍵idint11旅游路線id是是dayint11路線天數(shù)是否pathint128路線行程否否beautyvarchar256路線包含的景點(diǎn)id是否accommodationvarchar256路線包含的賓館id是否foodvarchar128餐飲信息描述是否scene_idint11旅游信息id是否表4-5景點(diǎn)/賓館表字段屬性長(zhǎng)度注釋不為空主鍵idint11景點(diǎn)/賓館id是是namevarchar128名稱是否descriptiontext0描述否否imagesvarchar256圖片是否typeint11類型(1:景點(diǎn),0:賓館)是否weightint11權(quán)值是否path_idint11路線id是否路線表與景點(diǎn)/賓館表的表間聯(lián)系說(shuō)明:路線與景點(diǎn)/賓館之間的一對(duì)多關(guān)系,實(shí)現(xiàn)方式為分別在路線表的beauty、accommodation字段中存入多個(gè)景點(diǎn)/賓館id。在線路編輯的過(guò)程中,添加景點(diǎn)/賓館信息,這樣的實(shí)現(xiàn)方式即便景點(diǎn)/賓館的名稱相同,但是id也不同。
5系統(tǒng)詳細(xì)設(shè)計(jì)5.1用戶管理模塊實(shí)現(xiàn)該模塊可以實(shí)現(xiàn)旅客用戶注冊(cè)、登錄,以及供應(yīng)商管理員的登錄。5.1.1用戶注冊(cè)功能用戶注冊(cè)功能是對(duì)用戶的用戶名和密碼進(jìn)行注冊(cè),申請(qǐng)一個(gè)賬號(hào)。界面如圖5-1所示。圖5-1用戶注冊(cè)圖設(shè)計(jì)思路如下:頁(yè)面的布局采用三個(gè)標(biāo)簽、三個(gè)文本框、兩個(gè)單選按鈕和一個(gè)按鈕。對(duì)必要的一些約束條件,核心的邏輯約束即為密碼框和確認(rèn)密碼框的核實(shí),確認(rèn)密碼無(wú)誤,才可以進(jìn)行注冊(cè)操作;還有就是單選按鈕兩者選其一,是通過(guò)將兩個(gè)單選按鈕加入同一個(gè)ButtonGroup來(lái)實(shí)現(xiàn)。對(duì)判斷用戶名是否已經(jīng)存在的功能實(shí)現(xiàn),這里有兩種方法,第一種將注冊(cè)的用戶名和數(shù)據(jù)庫(kù)庫(kù)中記錄進(jìn)行比對(duì),如若相等,則表明用戶名已經(jīng)存在,第二種方法是通過(guò)利用數(shù)據(jù)庫(kù)的UNIQUE關(guān)鍵字,對(duì)用戶名資源添加UNIQUE關(guān)鍵字,則表明該資源不允許出現(xiàn)重復(fù),如若在執(zhí)行插入操作的過(guò)程中,數(shù)據(jù)庫(kù)中已經(jīng)存在該值,會(huì)導(dǎo)致報(bào)錯(cuò);而java的異常捕獲機(jī)制能夠很好的處理異常,在捕獲異常后,給用戶提示該用戶名已經(jīng)存在。用戶注冊(cè)核心代碼://單擊“注冊(cè)”按鈕后,對(duì)用戶名和密碼的邏輯約束進(jìn)行判斷。判斷成功后,申請(qǐng)一個(gè)User對(duì)象,將用戶的屬性傳給User對(duì)象。register.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEventarg0){//密碼框和確認(rèn)密碼框的值是否一致 if(String.valueOf(jf2.getPassword()).equals(String.valueOf(jf2.getPassword()))){//定義用戶類Useruser_temp=newUser();user_temp.setPassword(String.valueOf(jf2.getPassword())); //判斷若為旅客類型則為1,旅行供應(yīng)商則為0 if(user.isSelected()){user_temp.setType(1);}else{user_temp.setType(0); } user_temp.setUsername(jf1.getText()); //調(diào)用數(shù)據(jù)庫(kù)執(zhí)行插入操作 intflag=Travel_Service.getInstance().insertUser(user_temp); if(flag==1) JOptionPane.showMessageDialog(null,"注冊(cè)成功"); else JOptionPane.showMessageDialog(null,"注冊(cè)失敗"); }}});5.1.2用戶登錄功能用戶用注冊(cè)成功時(shí)的用戶名和密碼進(jìn)行登錄,一種情況是用戶若為旅客,則進(jìn)入旅游信息檢索界面,另一種情況是用戶若為供應(yīng)商,則進(jìn)入旅游資源及線路管理界面。登錄界面如圖5-2所示。 圖5-2用戶登錄圖設(shè)計(jì)思路如下:首先在JFrame窗體上添加一個(gè)JPanel面板,并設(shè)置面板的背景為背景圖,再加一個(gè)面板作為容器面板,設(shè)置該容器面板為透明即可看到背景圖片,然后往容器面板上添加所需組件,這里包括兩個(gè)標(biāo)簽、兩個(gè)文本框、兩個(gè)單選按鈕和兩個(gè)按鈕。登錄功能的實(shí)現(xiàn),主要通過(guò)為登錄按鈕綁定一個(gè)事件ActionListener,通過(guò)觸發(fā)事件后,完成對(duì)登錄模塊的校驗(yàn),通過(guò)將輸入的用戶名和密碼與數(shù)據(jù)庫(kù)中的用戶名和密碼進(jìn)行一一比對(duì),如若找到則直接返回真,進(jìn)入相應(yīng)的界面。對(duì)于用旅客而言,則是進(jìn)入旅游信息檢索界面;對(duì)于供應(yīng)商而言,則是進(jìn)入旅游資源及線路管理界面。用戶登錄的核心代碼://登錄的業(yè)務(wù)邏輯@Override publicvoidactionPerformed(ActionEventarg0){ //設(shè)置User的屬性 user.setUsername(main.getJf1().getText().toString()); user.setPassword(String.valueOf(main.getJf2().getPassword())); if(main.getUser().isSelected()) user.setType(1); else user.setType(0); //與數(shù)據(jù)庫(kù)中的用戶名和密碼進(jìn)行校驗(yàn) intflag=Travel_Service.getInstance().User_Login(user); if(flag==1) main.login(user); }//與數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行校驗(yàn),然后返回結(jié)果。publicintUser_Login(Useruser){ Connectionconn=JdbcUtil.getConnection(); Statementstmt=null; ResultSetrs=null; try{ stmt=conn.createStatement(); rs=stmt.executeQuery("select*fromuser"); while(rs.next()){ intid=rs.getInt("id"); Stringusername=rs.getString("username"); Stringpassword=rs.getString("password"); if(username.equals(user.getUsername())//用戶名及密碼的校驗(yàn) &&password.equals(user.getPassword())){ user.setId(id); return1; } } }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(rs,stmt,conn); } return0;}5.1.3用戶修改密碼功能該功能設(shè)計(jì)是為了滿足用戶修改面的需求。界面如圖5-3所示。圖5-3修改密碼圖設(shè)計(jì)思路如下:修改密碼界面延用用戶注冊(cè)界面的風(fēng)格,只需將注冊(cè)按鈕移除,添加一個(gè)修改按鈕。再設(shè)置相應(yīng)的其他組件的編輯狀態(tài),例如:用戶的類型是不可以修改的等。修改用戶密碼功能,通過(guò)SQL語(yǔ)句中的update關(guān)鍵字來(lái)完成。定義修改密碼的方法,將修改過(guò)后的User對(duì)象作為參數(shù)傳入,即可。核心代碼如下:publicintupdateUser(Useruser){ Connectionconn=null; Statementstmt=null; //執(zhí)行修改SQL語(yǔ)句 Stringsql="updateusersetpassword='"+user.getPassword()+"'whereid="+user.getId(); try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement(); stmt.executeUpdate(sql); return1; }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(null,stmt,conn); } return0;}5.2地域資源管理模塊實(shí)現(xiàn)該模塊能夠?qū)崿F(xiàn)旅行供應(yīng)商對(duì)地域資源的管理。5.2.1增刪地域資源功能該模塊的設(shè)計(jì),作為旅游資源和線路發(fā)布中的一個(gè)重要模塊,在發(fā)布一則旅游信息之前,首先必須要選擇你所要發(fā)布的地域,即你所發(fā)布的這則旅游信息,是屬于哪個(gè)城市的地域資源。地域資源管理界面、添加地域信息界面分別如圖5-4(紅框部分)、5-5所示。圖5-4地域資源管理界面圖5-5添加地域信息圖設(shè)計(jì)思路如下:對(duì)于地域資源的管理主要是通過(guò)樹的結(jié)構(gòu)來(lái)完成整個(gè)模塊的設(shè)計(jì),首先頁(yè)面是由樹(JTree)、彈出菜單(JPopupMenu)和一個(gè)滾動(dòng)面板(JScrollPane)組成。將樹加到一個(gè)滾動(dòng)面板上,這個(gè)設(shè)計(jì)是為以后地域資源可能越來(lái)越復(fù)雜的情況,提前考慮。彈出菜單則是對(duì)每一個(gè)子節(jié)點(diǎn)的點(diǎn)擊事件上觸發(fā)彈出。對(duì)于整個(gè)樹的操作主要通過(guò)彈出菜單來(lái)完成,彈出菜單有兩個(gè)菜單項(xiàng),添加和刪除。當(dāng)單擊添加菜單項(xiàng)時(shí),彈出輸入對(duì)話框,錄入地域資源,則樹中會(huì)添加一個(gè)以輸入地域名命名的子節(jié)點(diǎn)。刪除操作是通過(guò)鼠標(biāo)右擊該子節(jié)點(diǎn)點(diǎn)擊刪除,即可。該模塊主要是為了旅游資源及線路編輯模塊服務(wù)的,當(dāng)選中要發(fā)布的地域節(jié)點(diǎn)后,才可以點(diǎn)擊發(fā)布旅游資源信息。地域資源管理核心代碼://彈出菜單的事件處理程序(需要實(shí)現(xiàn)ActionListener接口)publicvoidactionPerformed(ActionEvente){DefaultMutableTreeNodenode= //獲得右鍵選中的節(jié)點(diǎn) (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if(e.getSource()==addItem){//當(dāng)點(diǎn)擊添加菜單項(xiàng)時(shí)StringinputValue=JOptionPane.showInputDialog("輸入有效城市名"); if(inputValue!=null){ ((DefaultTreeModel)tree.getModel()).insertNodeInto( newDefaultMutableTreeNode(inputValue),node,node.getChildCount()); tree.expandPath(tree.getSelectionPath()); } }elseif(e.getSource()==delItem){//當(dāng)點(diǎn)擊刪除菜單項(xiàng)時(shí)if(node.isRoot()) return; ((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node); }}5.3景點(diǎn)資源管理模塊實(shí)現(xiàn)該模塊服務(wù)于旅行供應(yīng)商的管理模塊,用于完成對(duì)旅行供應(yīng)商已發(fā)布的所有的旅游信息中所涉及的所有的景點(diǎn)資源的增刪改查的功能。賓館資源管理模塊的功能為對(duì)已發(fā)布所有旅游信息中的所有賓館資源管理,同樣包含增刪改查的功能,實(shí)現(xiàn)方式與景點(diǎn)管理模塊一致,后不詳細(xì)贅述。5.3.1查看及修改景點(diǎn)資源功能景點(diǎn)資源管理界面、景點(diǎn)資源修改界面分別如圖5-6(紅框部分),5-7所示。圖5-6景點(diǎn)資源管理圖圖5-7景點(diǎn)資源修改圖設(shè)計(jì)思路如下:景點(diǎn)資源管理界面,圖示中每一景點(diǎn)的信息占據(jù)著一行,通過(guò)自定義景點(diǎn)資源展示組件,來(lái)實(shí)現(xiàn)一個(gè)類似于表格的效果。每個(gè)自定義界面有兩個(gè)JLabel組件和兩個(gè)JButton組成。兩個(gè)JLabel分別用于展示景點(diǎn)的名稱和描述信息。兩個(gè)JButton用于滿足旅行供應(yīng)商對(duì)景點(diǎn)的查看和修改功能。查看功能的實(shí)現(xiàn)比較簡(jiǎn)單,直接將景點(diǎn)實(shí)體類作為參數(shù)傳值給景點(diǎn)展示界面即可。修改功能的是對(duì)數(shù)據(jù)庫(kù)中某個(gè)具體的景點(diǎn)資源信息進(jìn)行重新修改,用SQL語(yǔ)句中的update命令來(lái)完成。//核心代碼如下://修改景點(diǎn)信息publicvoidupdateBeautyData(Beautybeauty){ Connectionconn=null; Statementstmt=null;//使用UPDATE命令修改數(shù)據(jù) Stringsql="updatebeautysetname='"+beauty.getName()+"'," +"description='"+beauty.getDescription()+"'" +",images='"+contactImages(beauty.getImages())+"'" +"whereid="+beauty.getId(); try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement(); stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(null,stmt,conn);//釋放數(shù)據(jù)庫(kù)連接資源 }}//帶分頁(yè)功能的資源面板類 publicResourcePanel(List<Scene>scenes,intpage,inttype){ this.type=type; this.scenes=scenes; s_id=listConvertArray(scenes); beauty_id=Travel_Service.getInstance().getBeautyData(s_id,type); beauties=Travel_Service.getInstance().getBeautyData(beauty_id,type); pageBean.setPage(page); pageBean.setLimit(3); //設(shè)置總頁(yè)數(shù) if(beauties.size()%pageBean.getLimit()==0){ pageBean.setTotalPage(beauties.size()/pageBean.getLimit()); }else{ pageBean.setTotalPage(beauties.size()/pageBean.getLimit()+1); } //利用公式(1)*limit來(lái)計(jì)算當(dāng)前查詢第多少條數(shù)據(jù) beauties=Travel_Service.getInstance().getBeautyDataByPage((1)*pageBean.getLimit(),pageBean.getLimit(),beauty_id,type); initPane();//初始化面板}5.3.2添加及刪除景點(diǎn)資源功能景點(diǎn)資源添加界面如圖5-8所示,刪除界面如旅游線路編輯功能中的圖5-8所示。圖5-8景點(diǎn)資源添加圖設(shè)計(jì)思路如下:添加界面的設(shè)計(jì)較為簡(jiǎn)單,主要有三個(gè)標(biāo)簽和三個(gè)文本框組成。其中上傳圖片的文本框觸發(fā)事件同添加旅游信息功能中的上傳圖片事件相同,點(diǎn)擊添加按鈕添加了響應(yīng)事件。刪除功能是通過(guò)旅游線路編輯模塊中的刪除旅游信息的功能來(lái)實(shí)現(xiàn)的,在旅行供應(yīng)商刪除一條發(fā)布的旅游信息時(shí),會(huì)同時(shí)刪除該旅游信息所包含的所有的路線,同時(shí)會(huì)刪除所有路線包含的所有的景點(diǎn)和賓館資源。核心代碼如下://添加按鈕監(jiān)聽事件publicvoidactionPerformed(ActionEventarg0){ //封裝界面所得數(shù)據(jù)Beautybeauty=newBeauty(); beauty.setName(beauty_frame.getName1().getText()); beauty.setDescription(beauty_frame.getDescription().getText()); beauty.setImages(beauty_frame.getImage().getText().split(",")); beauty.setType(beauty_frame.getBeauty_type()); //執(zhí)行插入SQL語(yǔ)句,并返回id intb_id=Travel_Service.getInstance().insertBeautyData(beauty,row); //更新線路表格中數(shù)據(jù)。 JTabletable=edit.getLine_table(); if(b_id!=0){Stringtext=(String)table.getModel().getValueAt(table.getSelectedRow(),table.getSelectedColumn()); if(text==null) text="";table.getModel().setValueAt(text+beauty.getName()+",",table.getSelectedRow(),table.getSelectedColumn()); if(beauty.getType()==1){ edit.getBeauty_id()[table.getSelectedRow()]+=(b_id+","); }else{edit.getAccommodation_id()[table.getSelectedRow()]+=(b_id+","); } //刷新表格 table.revalidate(); beauty_frame.dispose(); }}//刪除旅游信息功能,同時(shí)刪除旅游信息包含的路線,景點(diǎn),賓館資源。publicvoiddeleteData(int[]s_id,List<Beauty>list){ Connectionconn=null; Statementstmt=null; //將list轉(zhuǎn)為數(shù)組 int[]b_id=convertArray(list); try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement();//刪除旅游信息stmt.executeUpdate("deletefromscenewhere"+contact("id",s_id)+"");//刪除收藏路線stmt.executeUpdate("deletefrommylinewhere"+contact("path_id",s_id)+""); //刪除旅游信息所包含路線stmt.executeUpdate("deletefromlinewhere"+contact("scene_id",s_id)+""); //刪除路線所包含景點(diǎn)stmt.executeUpdate("deletefrombeautywhere"+contact("id",b_id)+""); ManageFrame.getInstance().updateResourcePane(); }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(null,stmt,conn); }}5.4旅游線路管理模塊實(shí)現(xiàn)該模塊作為一個(gè)提供給供應(yīng)商的核心界面,主要是用來(lái)完成景點(diǎn)、賓館、餐飲信息等資源的錄入。通過(guò)表格完成對(duì)旅游線路的編輯。5.4.1添加旅游信息功能該模塊是用于完成對(duì)旅游信息的錄入設(shè)計(jì)的,供應(yīng)商在編輯線路前必須先錄入旅游信息,主要信息包括:描述,圖片,報(bào)價(jià),旅游天數(shù)等,以及選擇需上傳圖片界面。界面分別如圖5-9(紅框部分)、5-10所示。圖5-9添加旅游信息圖圖5-10選擇圖片圖設(shè)計(jì)思路如下:添加旅游信息界面主要包含四個(gè)標(biāo)簽、一個(gè)文本域、三個(gè)文本框、和一個(gè)用于實(shí)現(xiàn)提交功能的按鈕,選擇圖片界面則采用java語(yǔ)言中自帶文件選擇器(JFileChooser)來(lái)完成。這里的事件主要包含兩部分,首先第一部分是上傳圖片所用的文本框,添加鼠標(biāo)單擊事件,當(dāng)鼠標(biāo)點(diǎn)擊上傳圖片的文本框時(shí),彈出選擇文本的文本框。選擇相應(yīng)的圖片(與該旅游信息相關(guān)的)。獲取該文件的相對(duì)路徑,并將其顯示到文本框當(dāng)中。第二部分是提交按鈕的提交數(shù)據(jù)事件,當(dāng)所有的數(shù)據(jù)填寫完畢,并且無(wú)語(yǔ)義錯(cuò)誤的時(shí)候,就將數(shù)據(jù)存儲(chǔ)到旅游信息表(Scene)中。錄入旅游信息核心代碼://提交按鈕的觸發(fā)事件submit.addActionListener(newActionListener(){//提交按鈕監(jiān)聽事@Override publicvoidactionPerformed(ActionEventarg0){ scene=newScene();//實(shí)例化一個(gè)旅游信息類,并設(shè)置相關(guān)屬性值 scene.setDay(Integer.parseInt(day.getText())); scene.setPrice(Integer.parseInt(price.getText())); scene.setDescription(description.getText()); scene.setImages(file.getText().split(",")); JTreetree=ManageFrame.getInstance().getTreepane().getTree();DefaultMutableTreeNodenote=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); scene.setLocation(note.toString());//獲得地域節(jié)點(diǎn)上信息 scene.setUser_id(ManageFrame.getInstance().getUser().getId()); //存儲(chǔ)到數(shù)據(jù)庫(kù) ints_id=Travel_Service.getInstance().insertSceneData(scene); if(s_id>=1){ scene.setId(s_id); JOptionPane.showMessageDialog(null,"成功添加1條旅游信息"); submit.setEnabled(false); p2.add(add_line);p2.add(remove_line);p2.add(check); p2.updateUI(); initBA(Integer.parseInt(price.getText())); } }});//上傳圖片文本框,點(diǎn)擊觸發(fā)事件publicvoidmouseClicked(MouseEventarg0){JFileChooserchooser=newJFileChooser();//設(shè)置選擇器 chooser.setDialogTitle("選擇相應(yīng)圖片"); chooser.setMultiSelectionEnabled(true);//設(shè)為多選 intreturnVal=chooser.showOpenDialog(field);//是否打開文件選擇框if(returnVal==JFileChooser.APPROVE_OPTION){//如果符合文件類型field.setText(field.getText()+"images/"+chooser.getSelectedFile().getName()+",");//相對(duì)路徑 }}5.4.2旅游線路編輯功能該模塊是完成旅游線路編輯的功能,通過(guò)表格的直觀方式,給用戶更加方便便捷的線路編輯體驗(yàn),同時(shí)在編輯的過(guò)程中,完成對(duì)旅游景點(diǎn)的添加和賓館資源的添加,以及餐飲信息的添加,最終生成一個(gè)完整的旅游信息顯示在展示界面上。界面分別如圖5-11(紅框部分)、5-12(紅框部分)所示。圖5-11線路編輯圖圖5-12旅游信息展示圖設(shè)計(jì)思路如下:線路編輯界面主要包括上半部分的三個(gè)按鈕,和下半部分的一個(gè)表格。表格中共有五列,分別為時(shí)間,行程,游玩景點(diǎn),住宿,和用餐。住宿資源錄入界面主要包括三個(gè)標(biāo)簽、三個(gè)文本域、和一個(gè)按鈕。景點(diǎn)資源錄入界面的布局與住宿保持一致。旅游信息展示界面,每一項(xiàng)是自定義的旅游信息面板,旅游信息面板中包含組件則較為復(fù)雜。首先時(shí)間一列,需要根據(jù)上面錄入的旅游信息的天數(shù),自動(dòng)自增,每當(dāng)點(diǎn)擊一次添加按鈕,表格會(huì)自動(dòng)生成一行,并且時(shí)間自增,每一行則表示一天的旅游線路。其次,在景點(diǎn)和住宿兩列分別都添加了鼠標(biāo)點(diǎn)擊事件,當(dāng)觸發(fā)事件時(shí),會(huì)分別彈出景點(diǎn)錄入界面和住宿酒店錄入界面,餐飲信息和行程,則可以直接用格式化的語(yǔ)言進(jìn)行描述,例如:行程可描述為“北京接站,觀光游覽”,餐飲信息可以描述為“早餐:包含,午餐:無(wú),晚餐:無(wú)”。在所有的信息錄入,并且無(wú)誤后,方可點(diǎn)擊確認(rèn)。此時(shí)一條完整的旅游資源及線路信息就錄入完畢了,并且會(huì)顯示旅游信息展示界面上。上傳圖片觸發(fā)事件,同旅游信息錄入模塊同。旅游信息展示界面用于展示展示完整生成的每一個(gè)自定義旅游信息面板。旅游線路編輯核心代碼://表格監(jiān)聽事件line_table.addMouseListener(newMouseAdapter(){@OverridepublicvoidmouseClicked(MouseEventarg0){//根據(jù)單擊表格列數(shù),選擇相應(yīng)的錄入界面if(line_table.getSelectedColumn()==2){newBeautyEditFrame(edit_frame,scene,1); }elseif(line_table.getSelectedColumn()==3){ newBeautyEditFrame(edit_frame,scene,0); } }});//確認(rèn)按鈕事件check.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){inti,j;line=newLine[day_index];//定義一個(gè)數(shù)組。用于存儲(chǔ)線路 for(i=0;i<line.length;i++){//for循環(huán)獲得每一天的線路信息line[i]=newLine(); line[i].setDay(Integer.valueOf(model.getValueAt(i,0).toString()));line[i].setPath(model.getValueAt(i,1).toString());//行程 line[i].setBeauty(beauty_id[i]);//景點(diǎn)ID line[i].setAccommodation(accommodation_id[i]);//住宿ID line[i].setFood(model.getValueAt(i,4).toString());//餐飲信息 line[i].setScene_id(scene.getId()); //旅游信息ID Travel_Service.getInstance().insertLineData(line[i]);//執(zhí)行SQL } JOptionPane.showMessageDialog(null,"成功添加"+day_index+"條路線"); ManageFrame.getInstance().getMp().addPane(scene);//旅游信息展示 ManageFrame.getInstance().getMp().updateUI(); edit_frame.dispose(); }});5.5旅游資源檢索模塊實(shí)現(xiàn)該模塊主要是服務(wù)于旅客,其完成的主要功能包括:旅游信息的展示,根據(jù)關(guān)鍵字對(duì)旅游信息進(jìn)行檢索,收藏路線,為用戶推薦熱度較高的景點(diǎn),賓館等資源,對(duì)檢索的旅游信息進(jìn)行排序等功能。5.5.1旅游信息的展示及查看功能該模塊作為旅游資源檢索的主界面,其主要用于旅游信息的展示,對(duì)于每一條旅游信息又提供給用戶以查看的功能,通過(guò)旅游信息查看界面,用戶可以很好地查看該旅游信息具體包含的信息。對(duì)于線路的查看功能,通過(guò)兩種方式進(jìn)行展示,表格和詳情兩種方式。界面如圖5-13、5-14、5-15所示。圖5-13旅游信息檢索圖圖5-14旅游信息查看圖圖5-15旅游信息行程明細(xì)圖設(shè)計(jì)思路如下:旅游信息檢索主界面分為以下幾個(gè)區(qū)域,展示區(qū),檢索框和右邊的側(cè)邊欄。展示區(qū)又由一系列的主題模塊組成,每一個(gè)主題模塊中,包含著一系列的旅游信息,分類展示,主要按照地區(qū)進(jìn)行分類展示。我這里尚未實(shí)現(xiàn)分類顯示,我是直接將旅游信息讀出來(lái),放在每一個(gè)展示面板上。旅游信息查看界面主要由左上角的景點(diǎn)輪播圖、右上角的旅游信息詳情,和下方的旅游線路展示區(qū)組成。旅游線路展示區(qū)又有兩個(gè)界面日歷模式和行程詳細(xì)界面。以上三個(gè)界面讀取的信息,包含了多張表的信息,主要任務(wù)就是將數(shù)據(jù)庫(kù)中的信息,通過(guò)界面的形式,匯總進(jìn)行展示。設(shè)計(jì)的難度主要在于界面的布局問(wèn)題,設(shè)計(jì)這樣復(fù)雜的界面時(shí),應(yīng)先將實(shí)現(xiàn)的目標(biāo)效果,畫個(gè)簡(jiǎn)圖,然后再一步一步實(shí)現(xiàn),想最終的效果靠近。要對(duì)每一種布局,它的效果是怎樣的,做到熟悉。即可完成復(fù)雜界面的數(shù)據(jù)讀取和顯示。同時(shí)為了讓用戶有更好的瀏覽體驗(yàn),必要的事件,實(shí)現(xiàn)界面的動(dòng)態(tài)展示。旅游信息的展示及查看功能核心代碼://讀取旅游信息進(jìn)行展示publicThemePane(LayoutManagerarg0,Stringtopic){ super(arg0); this.topic=topic; //從數(shù)據(jù)庫(kù)讀取所有旅游信息 scenes=Travel_Service.getInstance().getSceneData(); scene=newScenePane[scenes.length]; for(inti=0;i<scene.length;i++){//自定義旅游信息面板,只要將旅游信息對(duì)象傳入即可。 scene[i]=newScenePane(newBorderLayout(),scenes[i]); } initPane();}//行程詳細(xì)中一天行程的封裝類構(gòu)造方法publicDayDetailPanel(LayoutManagerlayout,Lineline){ super(layout); this.line=line; beauty=ts.getBeautyData(line.getBeauty().split(","), line.getAccommodation().split(","));//執(zhí)行SQL查詢出該路線包含的景點(diǎn)及住宿酒店 InitPane();//出示組件}//旅游信息封裝類構(gòu)造方法publicScenePane(LayoutManagerlayout,Scenes){ super(layout); icon=newImageIcon(s.getImages()[0]);//旅游信息圖片第一張作為封面展示 this.s=s; initPane();//初始化組件}5.5.2旅游信息的收藏功能該功能主要為用戶提供便利,方便用戶在收藏某條旅游信息后,退出后再登錄,仍然可以查看收藏的旅游信息,而無(wú)需再次尋找。界面如圖5-16所示。圖5-16路線收藏圖設(shè)計(jì)思路如下:界面的設(shè)計(jì),就是一個(gè)頁(yè)簽面板(JTabbedPane)中,添加一個(gè)滾動(dòng)面板(JScrollPane)。在旅游信息查看界面中,有一個(gè)加入收藏按鈕,點(diǎn)擊加入收藏。將會(huì)向Myline表中添加一條數(shù)據(jù),數(shù)據(jù)中旅游信息ID。然后點(diǎn)擊我的路線觸發(fā)事件,從數(shù)據(jù)庫(kù)Myline表中讀取數(shù)據(jù)中的旅游信息ID,然后再根據(jù)獲取的旅游信息ID查詢對(duì)應(yīng)的Scene表得到最終搜藏的旅游信息。這里涉及到兩個(gè)表的查詢,我的解決方案是通過(guò)一個(gè)數(shù)據(jù)庫(kù)的連接查詢來(lái)完成。旅游信息的收藏功能核心代碼://加入收藏按鈕監(jiān)聽事件order.addActionListener(newActionListener(){@Override publicvoidactionPerformed(ActionEvente){ //將收藏路線及用戶ID插入收藏表 Travel_Service.getInstance().insertMeData( MainFrame.getInstance().getUser(),s.getId()); MainFrame.getInstance().getMp().addPane(s); newMessageFrame("已加入收藏1條路線");//自定義提示框 }});//數(shù)據(jù)庫(kù)Scene、Myline表連接查詢publicList<Scene>getMylineData(intuser_id){ Connectionconn=null; Statementstmt=null; ResultSetrs=null; List<Scene>list=newArrayList(); try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement();//連接查詢,查詢用戶收藏的路線 rs=stmt.executeQuery("select*frommylinem,scenes" +"wherem.scene_id=s.idandm.user_id="+user_id); while(rs.next()){ Scenescene=newScene(); scene.setId(rs.getInt(4));//路線ID scene.setLocation(rs.getString(5)); //地域信息 scene.setDescription(rs.getString(6)); //描述 scene.setImages(rs.getString(7).split(","));//圖片 scene.setPrice(rs.getInt(8));//價(jià)格 scene.setDay(rs.getInt(9));//天數(shù) list.add(scene); } }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(rs,stmt,conn); } returnlist;}5.5.3旅游信息的檢索及推薦景點(diǎn)功能該功能主要為用戶提供根據(jù)旅游相關(guān)的關(guān)鍵字,檢索旅游信息的功能,并為用戶提供按價(jià)格升降排序,并為用戶提供簡(jiǎn)單的推薦功能,推薦給用戶瀏覽次數(shù)較高的景點(diǎn)、賓館等資源,供旅客參考。界面分別如圖5-17、5-18、5-19所示。圖5-17旅游信息檢索結(jié)果圖圖5-18熱門景點(diǎn)住宿推薦圖圖5-19景點(diǎn)查看圖設(shè)計(jì)思路如下:旅游信息檢索結(jié)果界面采用了一個(gè)分頁(yè)顯示的結(jié)構(gòu),旅游信息檢索結(jié)果界面采用了一個(gè)頁(yè)簽面板,三個(gè)頁(yè)面分別發(fā)表熱門景點(diǎn)、熱門住宿等資源,景點(diǎn)查看界面則是一個(gè)輪播圖和一個(gè)用于描述景點(diǎn)的文本域組成。檢索的功能是通過(guò)數(shù)據(jù)庫(kù)中模糊查詢實(shí)現(xiàn)的,對(duì)旅游信息表中的Description字段進(jìn)行模糊查詢。景點(diǎn)推薦的功能是,用一個(gè)集合HashSet,該容器的特性是不允許有重復(fù)的資源,在用戶每一次登錄系統(tǒng)之后,點(diǎn)擊過(guò)什么景點(diǎn),系統(tǒng)將會(huì)該景點(diǎn)的ID加入到該集合中,在用戶退出登錄后。系統(tǒng)將會(huì)提交本次用戶瀏覽過(guò)的所有景點(diǎn)資源,對(duì)數(shù)據(jù)庫(kù)中的這些景點(diǎn)的權(quán)值加一。表示其熱度增加一個(gè)單位。旅游信息的檢索及推薦景點(diǎn)功能核心代碼://數(shù)據(jù)庫(kù)模糊查詢publicList<Scene>getResultData(Stringkey,intorder){ List<Scene>list=newArrayList(); Connectionconn=null; Statementstmt=null; ResultSetrs=null; Stringsql="select*fromscenewhere" +"descriptionlike'%"+key+"%'";//模糊查詢匹配關(guān)鍵字的旅游信息 if(order==1){ sql+="orderbypricedesc";//按價(jià)格降序 }else{ sql+="orderbyprice";//按價(jià)格升序 } try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement(); rs=stmt.executeQuery(sql); while(rs.next()){ Scenescene=newScene(); scene.setId(rs.getInt("id")); scene.setLocation(rs.getString("location")); scene.setDescription(rs.getString("description")); scene.setImages(rs.getString("images").split(",")); scene.setPrice(rs.getInt("price")); scene.setDay(rs.getInt("day")); scene.setUser_id(rs.getInt("user_id")); list.add(scene); } }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(rs,stmt,conn); } returnlist;}//升序降序監(jiān)聽事件,用數(shù)據(jù)庫(kù)Order關(guān)鍵字實(shí)現(xiàn)。publicvoidinitListener(){ orderlabel[1].addMouseListener(newMouseAdapter(){//價(jià)格降序 @Override publicvoidmouseClicked(MouseEventarg0){ mainFrame.getSr().initResult(key,1); mainFrame.addSearchPane(); } }); orderlabel[2].addMouseListener(newMouseAdapter(){//價(jià)格升序 @Override publicvoidmouseClicked(MouseEventarg0){ mainFrame.getSr().initResult(key,0); mainFrame.addSearchPane(); } });}//邏輯分頁(yè)顯示。publicvoidinitResult(Stringkey,intorder){ inti,j=0; this.key=key; scenes=ts.getResultData(key,order);//獲取關(guān)鍵字模糊查詢結(jié)果//計(jì)算當(dāng)前查詢結(jié)果最大頁(yè)數(shù) pagepane.setMaxpage(scenes.size()/pagepane.getSingle_page()); if(scenes.size()%pagepane.getSingle_page()!=0) pagepane.setMaxpage(pagepane.getMaxpage()+1); ssp=getSearchScenePane(scenes.size()); pagepane.setCurrentpage(1);//默認(rèn)當(dāng)前頁(yè)為第一頁(yè) if(scenes.size()<pagepane.getSingle_page()) j=scenes.size(); el
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年茶葉收購(gòu)與倉(cāng)儲(chǔ)管理合同2篇
- 水電安裝工程2025年度合同書協(xié)議2篇
- 二零二五版快遞物流服務(wù)質(zhì)量監(jiān)控與評(píng)估協(xié)議合同2篇
- 二零二五年電子供應(yīng)鏈采購(gòu)合同3篇
- 二零二五年度校園巴士運(yùn)營(yíng)管理合同范本3篇
- 二零二五年高端餐飲會(huì)所租賃承包合同范本3篇
- 2025年危險(xiǎn)品運(yùn)輸及應(yīng)急處理合同3篇
- 二零二五版物流倉(cāng)儲(chǔ)與新能源利用合同3篇
- 小學(xué)教師事業(yè)單位聘用合同(2篇)
- 二零二五年度綠色交通PPP特許經(jīng)營(yíng)權(quán)轉(zhuǎn)讓合同3篇
- 2024年云南省中考數(shù)學(xué)試題含答案解析
- 《火災(zāi)調(diào)查 第2版》 課件全套 劉玲 第1-12章 緒論、詢問(wèn) -火災(zāi)物證鑒定
- 汽車修理廠管理方案
- 借用他人名義買車協(xié)議完整版
- (正式版)JBT 5300-2024 工業(yè)用閥門材料 選用指南
- 校園超市經(jīng)營(yíng)投標(biāo)方案(技術(shù)方案)
- 基于Web服務(wù)的辦公系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的開題報(bào)告
- 國(guó)企工程類工作總結(jié)
- 電腦教室設(shè)計(jì)方案
- 計(jì)算機(jī)江蘇對(duì)口單招文化綜合理論試卷
- 高速公路環(huán)保水保方案
評(píng)論
0/150
提交評(píng)論