旅游資源及線路管理系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
旅游資源及線路管理系統(tǒng)的設(shè)計與實現(xiàn)_第2頁
旅游資源及線路管理系統(tǒng)的設(shè)計與實現(xiàn)_第3頁
旅游資源及線路管理系統(tǒng)的設(shè)計與實現(xiàn)_第4頁
旅游資源及線路管理系統(tǒng)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

旅游資源及線路管理系統(tǒng)的設(shè)計與實現(xiàn)1引言1.1系統(tǒng)開發(fā)背景隨著現(xiàn)代科技的發(fā)展和飛速的進步,具有效率高、準確率高等特點,對我們的生活和生產(chǎn)有著巨大的影響。許多前沿技術(shù)的發(fā)展都依賴于計算機技術(shù),例如:計算、數(shù)據(jù)和圖像的處理、醫(yī)療、國防等領(lǐng)域。這些都是源于它擁有這處理信息量大和快的特點。計算機技術(shù)面向系統(tǒng)的設(shè)計,較大程度上提高了系統(tǒng)的性能,讓我們在進行程序設(shè)計時能夠有更大的靈活性,同時也改善了開發(fā)系統(tǒng)的效率,讓系統(tǒng)的維護變得更加簡單。從數(shù)據(jù)來看,每年的旅游人數(shù)都在增加,這與我們?nèi)嗣竦纳詈褪杖氲牟粩嗵岣哂兄懿豢煞值年P(guān)系,與此同時人民對高質(zhì)量的生活有著更大的期盼,這也促使我們迎來了我國旅游業(yè)的快速發(fā)展以及消費熱潮、各種各樣地旅游相關(guān)的企業(yè)也都拔地而起。旅游涉及到人們生活的很多方面,并且包含世界上每一個角落的旅游資源,對資源的管理如果不依賴管理信息系統(tǒng),將非常困難。1.2研究應用現(xiàn)狀隨著旅游資源的不斷開發(fā)和發(fā)展,越來越多的旅游資源希望能夠被更多的人熟知,而能夠很好地實現(xiàn)資源共享的最好的方式之一,莫過于將旅游資源信息化,才能讓更多的人能夠共享到更多的旅游資源,這樣也會極大地推動我國旅游產(chǎn)業(yè)的快速發(fā)展。在這個機遇前提之下,我們同樣面臨著許多挑戰(zhàn),對龐大的信息資源的管理就是較為重要的問題之一,合理的信息管理系統(tǒng)就可以很好的推進問題的解決。旅游業(yè)與信息化的結(jié)合,將作為未來經(jīng)濟中的重要產(chǎn)業(yè)。旅游信息化的一個很重要的內(nèi)容就是旅游信息管理系統(tǒng)的搭建。如果想要科學的管理,必然要與高新技術(shù)手段的結(jié)合,可以說企業(yè)信息技術(shù)的應用情況能夠直接反應出它的管理水平是否先進高效。在我國乃至全世界的范圍內(nèi),存在許多已經(jīng)開發(fā)的旅游信息資源,但是這些信息,很多的時候又得不到及時的更新,無法給與游客一個更好的旅行。而旅游業(yè)信息化的管理可以成為許多游客的最好的信息服務中介。先進的管理和思維方式憑借著信息和網(wǎng)絡技術(shù)的發(fā)展, 能夠為旅游業(yè)帶來翻天覆地的變化,促進旅游資源國際化的發(fā)展。1.3論文研究內(nèi)容旅游資源及線路管理系統(tǒng)主要服務于旅行供應商對旅游資源的管理和旅客對旅游資源的檢索等相關(guān)問題,來設(shè)計合理的解決方案,以便能夠解決資源管理復雜、線路編輯繁瑣等問題。在系統(tǒng)的需求分析、設(shè)計和實現(xiàn)階段主要實現(xiàn)功能如下:整體旅游業(yè)務管理該系統(tǒng)的設(shè)計主要服務于中小旅行社進行日常的旅游資源管理,做出的一系列解決方案。在系統(tǒng)設(shè)計和實現(xiàn)過程中,運用面向?qū)ο缶幊碳夹g(shù)對關(guān)鍵業(yè)務需求進行需求分析、設(shè)計和實現(xiàn)。主要包括:地域資源管理、景點資源管理、賓館資源管理、旅游線路編輯以及報價管理。[1]旅游資源檢索該系統(tǒng)的設(shè)計主要針對兩種用戶,第一種用戶是上面提及的中小旅行社(商戶),第二種是需要尋找旅游資源的用戶(用戶),該系統(tǒng)為第二種用戶提供了旅游資源檢索功能,為用戶提供了一個能夠選擇自己喜愛旅游路線的平臺。該論文的目的是利用計算機技術(shù)能夠為商戶和游客提供一個平臺,商戶可以過該系統(tǒng)完成對資源的日常管理,游客可以通過檢索平臺了解商戶們發(fā)表的旅游資源信息。系統(tǒng)的開發(fā)運用面向?qū)ο缶幊毯蛿?shù)據(jù)庫技術(shù)對該系統(tǒng)的各個功能實現(xiàn)。

2系統(tǒng)相關(guān)技術(shù)2.1面向?qū)ο缶幊碳夹g(shù)Java作為一門面向?qū)ο蟮脑O(shè)計語言,最主要的特點就是面向?qū)ο?,利用核心的三個功能,封裝、繼承、多態(tài)能夠很好的編寫出邏輯嚴謹?shù)某绦騕2]。Java雖然只支持單繼承,但是它可以通過實現(xiàn)接口來達到多繼承的效果。Java語言同樣是一門健壯性較高的語言,尤其是異常處理機制能夠很好的捕獲異常,并處理異常。2.2MySQL數(shù)據(jù)庫數(shù)據(jù)庫部分是在該系統(tǒng)中的一個核心部分,一個良好的數(shù)據(jù)庫設(shè)計不僅能夠給用戶更好的體驗,能夠提升開發(fā)人員的開發(fā)效率,系統(tǒng)的運行效率同樣能夠得到很大的提升。數(shù)據(jù)庫技術(shù)涉及到數(shù)據(jù)的安全性,該數(shù)據(jù)庫擁有良好的安全機制[3]。數(shù)據(jù)庫設(shè)計通常核心的幾個階段包括:需求分析需求分析階段主要是了解用戶的需求,站在用戶需求的角度涉及系統(tǒng)。其中包括數(shù)據(jù)與處理。該過程可能會花費較長的事件,但是做好準確的需求分析,極大地提高系統(tǒng)數(shù)據(jù)庫的質(zhì)量,從而能夠提高整個系統(tǒng)的健壯性,為后期的開發(fā)工作和維護工作減少工作量。概念結(jié)構(gòu)設(shè)計概念結(jié)構(gòu)設(shè)計作為數(shù)據(jù)庫設(shè)計中的關(guān)鍵一步,將前期總結(jié)的用戶需求進行歸納與抽象,形成概念模型。邏輯結(jié)構(gòu)設(shè)計階段(E-R圖)邏輯結(jié)構(gòu)設(shè)計階段最主要的工作就是將概念模型轉(zhuǎn)換為數(shù)據(jù)模型,并完成E-R圖的設(shè)計,并完成對每個實體和實體間聯(lián)系的定義。2.3EclipseEclipse[4]是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。盡管Eclipse是使用Java語言開發(fā)的,但它的用途并不限于Java語言;其他編程語言的插件都可以使用,它提供的僅僅是框架的集成,便于開發(fā)人員的使用,通過插件組件構(gòu)建開發(fā)環(huán)境。

3系統(tǒng)概述與需求分析3.1系統(tǒng)總體描述伴隨著旅游業(yè)的快速發(fā)展和人民生活質(zhì)量的需求提高,旅游成為了人們消費,放松身心的一個很好的選擇。更多的人會選擇報名參團的方式出行。該系統(tǒng)主要實現(xiàn)用戶管理、地域資源管理、景點資源管理、賓館資源管理、旅游資源檢索、旅游線路編輯及報價管理等主要功能模塊。用戶(旅客):可以實現(xiàn)登錄,旅游資源檢索、查看景點詳情、查看賓館詳情、查看旅游線路。商戶(旅行供應商):可以完成旅游資源的錄入,錄入旅游景點資源、賓館資源、以及對旅游信息的發(fā)布和增刪改查。3.2系統(tǒng)數(shù)據(jù)流程通過對旅行供應商的業(yè)務和需求的具體分析與調(diào)查,了解到旅游資源及線路管理系統(tǒng)的數(shù)據(jù)流程的整個過程,下面通過用數(shù)據(jù)流程圖的方式來大致描述整個系統(tǒng)的數(shù)據(jù)流動。旅游資源及線路管理系統(tǒng)的系統(tǒng)數(shù)據(jù)流程圖如圖3-1所示。圖3-1系統(tǒng)數(shù)據(jù)流程圖3.3功能需求分析根據(jù)實地的調(diào)查和測試,最后功能需求分為:用戶管理模塊、地域資源管理模塊、景點資源管理模塊、賓館資源管理模塊、旅游線路編輯及報價管理模塊、旅游資源檢索模塊。用戶管理模塊用戶管理模塊主要包含用戶的注冊和登錄功能,完成對于不同的兩種類型的用戶的注冊和登錄。地域資源管理模塊地域資源管理模塊服務于旅行供應商,用于完成對旅游信息所屬城市的管理,主要操作有增加新的地域資源,刪除某地域資源,及查詢旅行供應商所發(fā)布的旅游信息所在城市。景點資源管理模塊景點資源管理模塊服務于旅行供應商,用于完成對旅游信息所發(fā)布的景點的管理,主要操作包括增加及刪除景點資源,查看及修改景點資源。賓館資源管理模塊賓館資源管理模塊服務于旅行供應商,用于完成對旅游信息所發(fā)布的賓館資源的增刪改查操作。旅游線路管理模塊旅游線路作為該系統(tǒng)的一個核心模塊,對于旅行供應商來說,主要是完成對線路的編輯及發(fā)布,增加及刪除旅游線路。而對于用戶旅客來說,主要是對旅游線路的查詢,并收藏旅游線路等。旅游資源檢索模塊旅游資源檢索模塊主要服務于旅客,用于完成旅客對旅游信息的檢索,并為旅客提供了對檢索結(jié)果按價格升降排序的功能,同時為旅客提供了推薦景點及住宿資源的功能[5]。系統(tǒng)功能圖如圖3-2所示。圖3-2系統(tǒng)功能圖

3.4各模塊功能描述用戶注冊登錄模塊:該模塊主要完成用戶的注冊和登錄功能,第一類用戶為旅行供應商,第二類用戶為旅客。地域資源管理模塊:該模塊主要是面向旅行供應商的。用于完成旅行供應商在整理發(fā)布旅游信息時,選擇地域。處理方案是通過創(chuàng)建一棵樹來完成對地域資源的管理,管理員可以通過增加或者刪除來創(chuàng)建一個地域的子節(jié)點。例如:管理員需要發(fā)布一則關(guān)于北京市的旅游信息,只需要在根節(jié)點上點擊,輸入“北京市”即可完成地理位置的創(chuàng)建。景點資源管理模塊:該模塊主要是面向旅行供應商的。用于完成旅行供應商在編輯旅游線路的過程中,所涉及的景點資源管理。我的處理方案是通過一個表格來完成線路的編輯功能,表格一共包含五列,分別為時間、行程、景點、住宿、餐飲。在景點一列綁定了鼠標點擊事件,觸發(fā)事件時,彈出景點資源錄入界面,輸入對應的景點相關(guān)的信息,即可完成對景點的錄入。賓館資源管理模塊:該模塊主要是面向旅行供應商的。用于完成旅行供應商在編輯旅游線路的過程中,對賓館資源的錄入。處理方案是對線路的表格中的住宿一列添加鼠標點擊時間,觸發(fā)時間后,彈出對應的賓館資源錄入界面,輸入對應的住宿相關(guān)的信息,即可完成對賓館資源的錄入。旅游線路管理模塊:該模塊作為一個服務于旅行供應商的核心模塊。用于完成對整個旅游線路的編輯以及報價等信息的錄入。旅游線路的錄入,主要是通過一張表格的形式來展示。通過對表格中的時間、行程、景點、住宿、餐飲等所有信息的錄入之后,一則旅游信息的整個線路就已經(jīng)錄入完成了。旅游資源檢索模塊:該模塊主要是面向旅客服務的。旅客可以通過該模塊完成對旅游資源的檢索以及收藏心儀的旅游路線等功能,檢索功能主要是根據(jù)一些關(guān)鍵字,進行匹配旅行供應商發(fā)布的旅游信息。同時在得到檢索結(jié)果后,提供給旅客根據(jù)報價進行升降序排序的功能,并且會根據(jù)旅游信息的點擊率,為旅客提供較為熱門的景點、賓館等信息。

4系統(tǒng)總體設(shè)計4.1系統(tǒng)技術(shù)架構(gòu)根據(jù)整個旅游資源及線路管理系統(tǒng)的需求分析,系統(tǒng)的開發(fā)采用的事MVC[6]框架進行設(shè)計的,具體如下圖所示系統(tǒng)總體技術(shù)設(shè)計圖如圖4-1所示。圖4-1系統(tǒng)總體技術(shù)圖在上述系統(tǒng)總體技術(shù)圖中,視圖層是實現(xiàn)采用的GUI編程完成的界面,用戶能夠清晰地看到系統(tǒng)反饋的信息的匯總界面;通過控制層來完成與用戶的人機交互,并將用戶輸入的指令和數(shù)據(jù)傳遞給模型層;然后通過模型層與數(shù)據(jù)庫的交互,采用一些相對獨立的業(yè)務邏輯模塊,使系統(tǒng)能夠更好地可能不斷變化的業(yè)務流程,技術(shù)上采用的事JDBC實現(xiàn)對數(shù)據(jù)庫的一系列操作。使用MySQL作為后臺數(shù)據(jù)庫系統(tǒng),完成整個系統(tǒng)的設(shè)計。系統(tǒng)項目目錄圖如圖4-2所示。圖4-2系統(tǒng)結(jié)構(gòu)目錄圖4.2系統(tǒng)總體功能設(shè)計總體功能結(jié)構(gòu)圖分為旅行供應商的功能結(jié)構(gòu)、旅客的功能結(jié)構(gòu)圖分別如圖4-3、4-4所示。圖4-3旅行供應商的功能結(jié)構(gòu)圖

圖4-4旅客功能結(jié)構(gòu)圖

4.3系統(tǒng)數(shù)據(jù)庫結(jié)構(gòu)設(shè)計4.3.1數(shù)據(jù)庫E-R圖分析設(shè)計具體如圖4-5所示。圖4-5系統(tǒng)E-R圖4.3.2數(shù)據(jù)庫表設(shè)計根據(jù)以上E-R圖設(shè)計了5張表,分別是用戶表、旅游信息表、收藏表、旅游路線表、景點/賓館表。表的結(jié)構(gòu)如表4-1至4-5所示。表4-1用戶表字段屬性長度注釋不為空主鍵useridvarchar11用戶id是是usernamevarchar20用戶賬號是否passwordvarchar20用戶密碼是否typevarchar10用戶類型是否表4-2旅游信息表字段屬性長度注釋不為空主鍵idvarchar11旅游信息id是是locationvarchar128地理位置是否descriptionvarchar256旅游信息描述否否imagesvarchar256旅游信息圖片是否priceint11報價是否dayint11旅游天數(shù)是否user_idint11所屬用戶id是否表4-3收藏表字段屬性長度注釋不為空主鍵idint11收藏id是是path_idint11路線id是否user_idint11用戶id是否

表4-4旅游路線表字段屬性長度注釋不為空主鍵idint11旅游路線id是是dayint11路線天數(shù)是否pathint128路線行程否否beautyvarchar256路線包含的景點id是否accommodationvarchar256路線包含的賓館id是否foodvarchar128餐飲信息描述是否scene_idint11旅游信息id是否表4-5景點/賓館表字段屬性長度注釋不為空主鍵idint11景點/賓館id是是namevarchar128名稱是否descriptiontext0描述否否imagesvarchar256圖片是否typeint11類型(1:景點,0:賓館)是否weightint11權(quán)值是否path_idint11路線id是否路線表與景點/賓館表的表間聯(lián)系說明:路線與景點/賓館之間的一對多關(guān)系,實現(xiàn)方式為分別在路線表的beauty、accommodation字段中存入多個景點/賓館id。在線路編輯的過程中,添加景點/賓館信息,這樣的實現(xiàn)方式即便景點/賓館的名稱相同,但是id也不同。

5系統(tǒng)詳細設(shè)計5.1用戶管理模塊實現(xiàn)該模塊可以實現(xiàn)旅客用戶注冊、登錄,以及供應商管理員的登錄。5.1.1用戶注冊功能用戶注冊功能是對用戶的用戶名和密碼進行注冊,申請一個賬號。界面如圖5-1所示。圖5-1用戶注冊圖設(shè)計思路如下:頁面的布局采用三個標簽、三個文本框、兩個單選按鈕和一個按鈕。對必要的一些約束條件,核心的邏輯約束即為密碼框和確認密碼框的核實,確認密碼無誤,才可以進行注冊操作;還有就是單選按鈕兩者選其一,是通過將兩個單選按鈕加入同一個ButtonGroup來實現(xiàn)。對判斷用戶名是否已經(jīng)存在的功能實現(xiàn),這里有兩種方法,第一種將注冊的用戶名和數(shù)據(jù)庫庫中記錄進行比對,如若相等,則表明用戶名已經(jīng)存在,第二種方法是通過利用數(shù)據(jù)庫的UNIQUE關(guān)鍵字,對用戶名資源添加UNIQUE關(guān)鍵字,則表明該資源不允許出現(xiàn)重復,如若在執(zhí)行插入操作的過程中,數(shù)據(jù)庫中已經(jīng)存在該值,會導致報錯;而java的異常捕獲機制能夠很好的處理異常,在捕獲異常后,給用戶提示該用戶名已經(jīng)存在。用戶注冊核心代碼://單擊“注冊”按鈕后,對用戶名和密碼的邏輯約束進行判斷。判斷成功后,申請一個User對象,將用戶的屬性傳給User對象。register.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEventarg0){//密碼框和確認密碼框的值是否一致 if(String.valueOf(jf2.getPassword()).equals(String.valueOf(jf2.getPassword()))){//定義用戶類Useruser_temp=newUser();user_temp.setPassword(String.valueOf(jf2.getPassword())); //判斷若為旅客類型則為1,旅行供應商則為0 if(user.isSelected()){user_temp.setType(1);}else{user_temp.setType(0); } user_temp.setUsername(jf1.getText()); //調(diào)用數(shù)據(jù)庫執(zhí)行插入操作 intflag=Travel_Service.getInstance().insertUser(user_temp); if(flag==1) JOptionPane.showMessageDialog(null,"注冊成功"); else JOptionPane.showMessageDialog(null,"注冊失敗"); }}});5.1.2用戶登錄功能用戶用注冊成功時的用戶名和密碼進行登錄,一種情況是用戶若為旅客,則進入旅游信息檢索界面,另一種情況是用戶若為供應商,則進入旅游資源及線路管理界面。登錄界面如圖5-2所示。 圖5-2用戶登錄圖設(shè)計思路如下:首先在JFrame窗體上添加一個JPanel面板,并設(shè)置面板的背景為背景圖,再加一個面板作為容器面板,設(shè)置該容器面板為透明即可看到背景圖片,然后往容器面板上添加所需組件,這里包括兩個標簽、兩個文本框、兩個單選按鈕和兩個按鈕。登錄功能的實現(xiàn),主要通過為登錄按鈕綁定一個事件ActionListener,通過觸發(fā)事件后,完成對登錄模塊的校驗,通過將輸入的用戶名和密碼與數(shù)據(jù)庫中的用戶名和密碼進行一一比對,如若找到則直接返回真,進入相應的界面。對于用旅客而言,則是進入旅游信息檢索界面;對于供應商而言,則是進入旅游資源及線路管理界面。用戶登錄的核心代碼://登錄的業(yè)務邏輯@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ù)庫中的用戶名和密碼進行校驗 intflag=Travel_Service.getInstance().User_Login(user); if(flag==1) main.login(user); }//與數(shù)據(jù)庫的數(shù)據(jù)進行校驗,然后返回結(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())//用戶名及密碼的校驗 &&password.equals(user.getPassword())){ user.setId(id); return1; } } }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(rs,stmt,conn); } return0;}5.1.3用戶修改密碼功能該功能設(shè)計是為了滿足用戶修改面的需求。界面如圖5-3所示。圖5-3修改密碼圖設(shè)計思路如下:修改密碼界面延用用戶注冊界面的風格,只需將注冊按鈕移除,添加一個修改按鈕。再設(shè)置相應的其他組件的編輯狀態(tài),例如:用戶的類型是不可以修改的等。修改用戶密碼功能,通過SQL語句中的update關(guān)鍵字來完成。定義修改密碼的方法,將修改過后的User對象作為參數(shù)傳入,即可。核心代碼如下:publicintupdateUser(Useruser){ Connectionconn=null; Statementstmt=null; //執(zhí)行修改SQL語句 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地域資源管理模塊實現(xiàn)該模塊能夠?qū)崿F(xiàn)旅行供應商對地域資源的管理。5.2.1增刪地域資源功能該模塊的設(shè)計,作為旅游資源和線路發(fā)布中的一個重要模塊,在發(fā)布一則旅游信息之前,首先必須要選擇你所要發(fā)布的地域,即你所發(fā)布的這則旅游信息,是屬于哪個城市的地域資源。地域資源管理界面、添加地域信息界面分別如圖5-4(紅框部分)、5-5所示。圖5-4地域資源管理界面圖5-5添加地域信息圖設(shè)計思路如下:對于地域資源的管理主要是通過樹的結(jié)構(gòu)來完成整個模塊的設(shè)計,首先頁面是由樹(JTree)、彈出菜單(JPopupMenu)和一個滾動面板(JScrollPane)組成。將樹加到一個滾動面板上,這個設(shè)計是為以后地域資源可能越來越復雜的情況,提前考慮。彈出菜單則是對每一個子節(jié)點的點擊事件上觸發(fā)彈出。對于整個樹的操作主要通過彈出菜單來完成,彈出菜單有兩個菜單項,添加和刪除。當單擊添加菜單項時,彈出輸入對話框,錄入地域資源,則樹中會添加一個以輸入地域名命名的子節(jié)點。刪除操作是通過鼠標右擊該子節(jié)點點擊刪除,即可。該模塊主要是為了旅游資源及線路編輯模塊服務的,當選中要發(fā)布的地域節(jié)點后,才可以點擊發(fā)布旅游資源信息。地域資源管理核心代碼://彈出菜單的事件處理程序(需要實現(xiàn)ActionListener接口)publicvoidactionPerformed(ActionEvente){DefaultMutableTreeNodenode= //獲得右鍵選中的節(jié)點 (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if(e.getSource()==addItem){//當點擊添加菜單項時StringinputValue=JOptionPane.showInputDialog("輸入有效城市名"); if(inputValue!=null){ ((DefaultTreeModel)tree.getModel()).insertNodeInto( newDefaultMutableTreeNode(inputValue),node,node.getChildCount()); tree.expandPath(tree.getSelectionPath()); } }elseif(e.getSource()==delItem){//當點擊刪除菜單項時if(node.isRoot()) return; ((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node); }}5.3景點資源管理模塊實現(xiàn)該模塊服務于旅行供應商的管理模塊,用于完成對旅行供應商已發(fā)布的所有的旅游信息中所涉及的所有的景點資源的增刪改查的功能。賓館資源管理模塊的功能為對已發(fā)布所有旅游信息中的所有賓館資源管理,同樣包含增刪改查的功能,實現(xiàn)方式與景點管理模塊一致,后不詳細贅述。5.3.1查看及修改景點資源功能景點資源管理界面、景點資源修改界面分別如圖5-6(紅框部分),5-7所示。圖5-6景點資源管理圖圖5-7景點資源修改圖設(shè)計思路如下:景點資源管理界面,圖示中每一景點的信息占據(jù)著一行,通過自定義景點資源展示組件,來實現(xiàn)一個類似于表格的效果。每個自定義界面有兩個JLabel組件和兩個JButton組成。兩個JLabel分別用于展示景點的名稱和描述信息。兩個JButton用于滿足旅行供應商對景點的查看和修改功能。查看功能的實現(xiàn)比較簡單,直接將景點實體類作為參數(shù)傳值給景點展示界面即可。修改功能的是對數(shù)據(jù)庫中某個具體的景點資源信息進行重新修改,用SQL語句中的update命令來完成。//核心代碼如下://修改景點信息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ù)庫連接資源 }}//帶分頁功能的資源面板類 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è)置總頁數(shù) if(beauties.size()%pageBean.getLimit()==0){ pageBean.setTotalPage(beauties.size()/pageBean.getLimit()); }else{ pageBean.setTotalPage(beauties.size()/pageBean.getLimit()+1); } //利用公式(1)*limit來計算當前查詢第多少條數(shù)據(jù) beauties=Travel_Service.getInstance().getBeautyDataByPage((1)*pageBean.getLimit(),pageBean.getLimit(),beauty_id,type); initPane();//初始化面板}5.3.2添加及刪除景點資源功能景點資源添加界面如圖5-8所示,刪除界面如旅游線路編輯功能中的圖5-8所示。圖5-8景點資源添加圖設(shè)計思路如下:添加界面的設(shè)計較為簡單,主要有三個標簽和三個文本框組成。其中上傳圖片的文本框觸發(fā)事件同添加旅游信息功能中的上傳圖片事件相同,點擊添加按鈕添加了響應事件。刪除功能是通過旅游線路編輯模塊中的刪除旅游信息的功能來實現(xiàn)的,在旅行供應商刪除一條發(fā)布的旅游信息時,會同時刪除該旅游信息所包含的所有的路線,同時會刪除所有路線包含的所有的景點和賓館資源。核心代碼如下://添加按鈕監(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語句,并返回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(); }}//刪除旅游信息功能,同時刪除旅游信息包含的路線,景點,賓館資源。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)+""); //刪除路線所包含景點stmt.executeUpdate("deletefrombeautywhere"+contact("id",b_id)+""); ManageFrame.getInstance().updateResourcePane(); }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(null,stmt,conn); }}5.4旅游線路管理模塊實現(xiàn)該模塊作為一個提供給供應商的核心界面,主要是用來完成景點、賓館、餐飲信息等資源的錄入。通過表格完成對旅游線路的編輯。5.4.1添加旅游信息功能該模塊是用于完成對旅游信息的錄入設(shè)計的,供應商在編輯線路前必須先錄入旅游信息,主要信息包括:描述,圖片,報價,旅游天數(shù)等,以及選擇需上傳圖片界面。界面分別如圖5-9(紅框部分)、5-10所示。圖5-9添加旅游信息圖圖5-10選擇圖片圖設(shè)計思路如下:添加旅游信息界面主要包含四個標簽、一個文本域、三個文本框、和一個用于實現(xiàn)提交功能的按鈕,選擇圖片界面則采用java語言中自帶文件選擇器(JFileChooser)來完成。這里的事件主要包含兩部分,首先第一部分是上傳圖片所用的文本框,添加鼠標單擊事件,當鼠標點擊上傳圖片的文本框時,彈出選擇文本的文本框。選擇相應的圖片(與該旅游信息相關(guān)的)。獲取該文件的相對路徑,并將其顯示到文本框當中。第二部分是提交按鈕的提交數(shù)據(jù)事件,當所有的數(shù)據(jù)填寫完畢,并且無語義錯誤的時候,就將數(shù)據(jù)存儲到旅游信息表(Scene)中。錄入旅游信息核心代碼://提交按鈕的觸發(fā)事件submit.addActionListener(newActionListener(){//提交按鈕監(jiān)聽事@Override publicvoidactionPerformed(ActionEventarg0){ scene=newScene();//實例化一個旅游信息類,并設(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é)點上信息 scene.setUser_id(ManageFrame.getInstance().getUser().getId()); //存儲到數(shù)據(jù)庫 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())); } }});//上傳圖片文本框,點擊觸發(fā)事件publicvoidmouseClicked(MouseEventarg0){JFileChooserchooser=newJFileChooser();//設(shè)置選擇器 chooser.setDialogTitle("選擇相應圖片"); chooser.setMultiSelectionEnabled(true);//設(shè)為多選 intreturnVal=chooser.showOpenDialog(field);//是否打開文件選擇框if(returnVal==JFileChooser.APPROVE_OPTION){//如果符合文件類型field.setText(field.getText()+"images/"+chooser.getSelectedFile().getName()+",");//相對路徑 }}5.4.2旅游線路編輯功能該模塊是完成旅游線路編輯的功能,通過表格的直觀方式,給用戶更加方便便捷的線路編輯體驗,同時在編輯的過程中,完成對旅游景點的添加和賓館資源的添加,以及餐飲信息的添加,最終生成一個完整的旅游信息顯示在展示界面上。界面分別如圖5-11(紅框部分)、5-12(紅框部分)所示。圖5-11線路編輯圖圖5-12旅游信息展示圖設(shè)計思路如下:線路編輯界面主要包括上半部分的三個按鈕,和下半部分的一個表格。表格中共有五列,分別為時間,行程,游玩景點,住宿,和用餐。住宿資源錄入界面主要包括三個標簽、三個文本域、和一個按鈕。景點資源錄入界面的布局與住宿保持一致。旅游信息展示界面,每一項是自定義的旅游信息面板,旅游信息面板中包含組件則較為復雜。首先時間一列,需要根據(jù)上面錄入的旅游信息的天數(shù),自動自增,每當點擊一次添加按鈕,表格會自動生成一行,并且時間自增,每一行則表示一天的旅游線路。其次,在景點和住宿兩列分別都添加了鼠標點擊事件,當觸發(fā)事件時,會分別彈出景點錄入界面和住宿酒店錄入界面,餐飲信息和行程,則可以直接用格式化的語言進行描述,例如:行程可描述為“北京接站,觀光游覽”,餐飲信息可以描述為“早餐:包含,午餐:無,晚餐:無”。在所有的信息錄入,并且無誤后,方可點擊確認。此時一條完整的旅游資源及線路信息就錄入完畢了,并且會顯示旅游信息展示界面上。上傳圖片觸發(fā)事件,同旅游信息錄入模塊同。旅游信息展示界面用于展示展示完整生成的每一個自定義旅游信息面板。旅游線路編輯核心代碼://表格監(jiān)聽事件line_table.addMouseListener(newMouseAdapter(){@OverridepublicvoidmouseClicked(MouseEventarg0){//根據(jù)單擊表格列數(shù),選擇相應的錄入界面if(line_table.getSelectedColumn()==2){newBeautyEditFrame(edit_frame,scene,1); }elseif(line_table.getSelectedColumn()==3){ newBeautyEditFrame(edit_frame,scene,0); } }});//確認按鈕事件check.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){inti,j;line=newLine[day_index];//定義一個數(shù)組。用于存儲線路 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]);//景點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旅游資源檢索模塊實現(xiàn)該模塊主要是服務于旅客,其完成的主要功能包括:旅游信息的展示,根據(jù)關(guān)鍵字對旅游信息進行檢索,收藏路線,為用戶推薦熱度較高的景點,賓館等資源,對檢索的旅游信息進行排序等功能。5.5.1旅游信息的展示及查看功能該模塊作為旅游資源檢索的主界面,其主要用于旅游信息的展示,對于每一條旅游信息又提供給用戶以查看的功能,通過旅游信息查看界面,用戶可以很好地查看該旅游信息具體包含的信息。對于線路的查看功能,通過兩種方式進行展示,表格和詳情兩種方式。界面如圖5-13、5-14、5-15所示。圖5-13旅游信息檢索圖圖5-14旅游信息查看圖圖5-15旅游信息行程明細圖設(shè)計思路如下:旅游信息檢索主界面分為以下幾個區(qū)域,展示區(qū),檢索框和右邊的側(cè)邊欄。展示區(qū)又由一系列的主題模塊組成,每一個主題模塊中,包含著一系列的旅游信息,分類展示,主要按照地區(qū)進行分類展示。我這里尚未實現(xiàn)分類顯示,我是直接將旅游信息讀出來,放在每一個展示面板上。旅游信息查看界面主要由左上角的景點輪播圖、右上角的旅游信息詳情,和下方的旅游線路展示區(qū)組成。旅游線路展示區(qū)又有兩個界面日歷模式和行程詳細界面。以上三個界面讀取的信息,包含了多張表的信息,主要任務就是將數(shù)據(jù)庫中的信息,通過界面的形式,匯總進行展示。設(shè)計的難度主要在于界面的布局問題,設(shè)計這樣復雜的界面時,應先將實現(xiàn)的目標效果,畫個簡圖,然后再一步一步實現(xiàn),想最終的效果靠近。要對每一種布局,它的效果是怎樣的,做到熟悉。即可完成復雜界面的數(shù)據(jù)讀取和顯示。同時為了讓用戶有更好的瀏覽體驗,必要的事件,實現(xiàn)界面的動態(tài)展示。旅游信息的展示及查看功能核心代碼://讀取旅游信息進行展示publicThemePane(LayoutManagerarg0,Stringtopic){ super(arg0); this.topic=topic; //從數(shù)據(jù)庫讀取所有旅游信息 scenes=Travel_Service.getInstance().getSceneData(); scene=newScenePane[scenes.length]; for(inti=0;i<scene.length;i++){//自定義旅游信息面板,只要將旅游信息對象傳入即可。 scene[i]=newScenePane(newBorderLayout(),scenes[i]); } initPane();}//行程詳細中一天行程的封裝類構(gòu)造方法publicDayDetailPanel(LayoutManagerlayout,Lineline){ super(layout); this.line=line; beauty=ts.getBeautyData(line.getBeauty().split(","), line.getAccommodation().split(","));//執(zhí)行SQL查詢出該路線包含的景點及住宿酒店 InitPane();//出示組件}//旅游信息封裝類構(gòu)造方法publicScenePane(LayoutManagerlayout,Scenes){ super(layout); icon=newImageIcon(s.getImages()[0]);//旅游信息圖片第一張作為封面展示 this.s=s; initPane();//初始化組件}5.5.2旅游信息的收藏功能該功能主要為用戶提供便利,方便用戶在收藏某條旅游信息后,退出后再登錄,仍然可以查看收藏的旅游信息,而無需再次尋找。界面如圖5-16所示。圖5-16路線收藏圖設(shè)計思路如下:界面的設(shè)計,就是一個頁簽面板(JTabbedPane)中,添加一個滾動面板(JScrollPane)。在旅游信息查看界面中,有一個加入收藏按鈕,點擊加入收藏。將會向Myline表中添加一條數(shù)據(jù),數(shù)據(jù)中旅游信息ID。然后點擊我的路線觸發(fā)事件,從數(shù)據(jù)庫Myline表中讀取數(shù)據(jù)中的旅游信息ID,然后再根據(jù)獲取的旅游信息ID查詢對應的Scene表得到最終搜藏的旅游信息。這里涉及到兩個表的查詢,我的解決方案是通過一個數(shù)據(jù)庫的連接查詢來完成。旅游信息的收藏功能核心代碼://加入收藏按鈕監(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ù)庫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));//價格 scene.setDay(rs.getInt(9));//天數(shù) list.add(scene); } }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(rs,stmt,conn); } returnlist;}5.5.3旅游信息的檢索及推薦景點功能該功能主要為用戶提供根據(jù)旅游相關(guān)的關(guān)鍵字,檢索旅游信息的功能,并為用戶提供按價格升降排序,并為用戶提供簡單的推薦功能,推薦給用戶瀏覽次數(shù)較高的景點、賓館等資源,供旅客參考。界面分別如圖5-17、5-18、5-19所示。圖5-17旅游信息檢索結(jié)果圖圖5-18熱門景點住宿推薦圖圖5-19景點查看圖設(shè)計思路如下:旅游信息檢索結(jié)果界面采用了一個分頁顯示的結(jié)構(gòu),旅游信息檢索結(jié)果界面采用了一個頁簽面板,三個頁面分別發(fā)表熱門景點、熱門住宿等資源,景點查看界面則是一個輪播圖和一個用于描述景點的文本域組成。檢索的功能是通過數(shù)據(jù)庫中模糊查詢實現(xiàn)的,對旅游信息表中的Description字段進行模糊查詢。景點推薦的功能是,用一個集合HashSet,該容器的特性是不允許有重復的資源,在用戶每一次登錄系統(tǒng)之后,點擊過什么景點,系統(tǒng)將會該景點的ID加入到該集合中,在用戶退出登錄后。系統(tǒng)將會提交本次用戶瀏覽過的所有景點資源,對數(shù)據(jù)庫中的這些景點的權(quán)值加一。表示其熱度增加一個單位。旅游信息的檢索及推薦景點功能核心代碼://數(shù)據(jù)庫模糊查詢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";//按價格降序 }else{ sql+="orderbyprice";//按價格升序 } 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ù)庫Order關(guān)鍵字實現(xiàn)。publicvoidinitListener(){ orderlabel[1].addMouseListener(newMouseAdapter(){//價格降序 @Override publicvoidmouseClicked(MouseEventarg0){ mainFrame.getSr().initResult(key,1); mainFrame.addSearchPane(); } }); orderlabel[2].addMouseListener(newMouseAdapter(){//價格升序 @Override publicvoidmouseClicked(MouseEventarg0){ mainFrame.getSr().initResult(key,0); mainFrame.addSearchPane(); } });}//邏輯分頁顯示。publicvoidinitResult(Stringkey,intorder){ inti,j=0; this.key=key; scenes=ts.getResultData(key,order);//獲取關(guān)鍵字模糊查詢結(jié)果//計算當前查詢結(jié)果最大頁數(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);//默認當前頁為第一頁 if(scenes.size()<pagepane.getSingle_page()) j=scenes.size(); el

溫馨提示

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

評論

0/150

提交評論