電影售票系統(tǒng)優(yōu)秀畢業(yè)論文_第1頁
電影售票系統(tǒng)優(yōu)秀畢業(yè)論文_第2頁
電影售票系統(tǒng)優(yōu)秀畢業(yè)論文_第3頁
電影售票系統(tǒng)優(yōu)秀畢業(yè)論文_第4頁
電影售票系統(tǒng)優(yōu)秀畢業(yè)論文_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本科畢業(yè)論文目錄TOC\o"1-3"\h\u286251緒論 頁1緒論隨著經(jīng)濟(jì)的發(fā)展,人們生活質(zhì)量提高了,娛樂方式也日新月異。電影不再是“奢侈品”,而是人們?nèi)粘I钪行蓍e娛樂必備的商業(yè)產(chǎn)物。在這個(gè)網(wǎng)絡(luò)信息化濃厚的時(shí)代,網(wǎng)絡(luò)成為主要的通訊手段。當(dāng)代網(wǎng)絡(luò)如此發(fā)達(dá),也有不少基于Web的電影院網(wǎng)站,如深圳太陽數(shù)碼影城、Mtime時(shí)光網(wǎng)、58影院等。他們多用JSP實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)站制作。JSP將網(wǎng)頁的設(shè)計(jì)同網(wǎng)頁的后臺(tái)邏輯分離,是支持可重用的基于組件的設(shè)計(jì)。但是JSP的組件不夠豐富,要實(shí)現(xiàn)特殊功能的控件,如用戶打分的可拖拉五角星打分條,沒有現(xiàn)成的組件,編寫制作起來非常復(fù)雜麻煩。雖然JSP簡(jiǎn)化了編程開發(fā),但在復(fù)雜邏輯中還是要編寫很多代碼,開發(fā)人員的學(xué)習(xí)負(fù)擔(dān)也不斷加重。JavaServerFaces(JSF)框架可以很好的解決以上問題,它提供全新的,動(dòng)態(tài)的標(biāo)簽庫,且組件豐富多樣,組件可以同托管Bean綁定,進(jìn)一步簡(jiǎn)化了代碼編寫,減少了代碼量。利用JSF能制作出飽滿的頁面,且支持拖拽功能,非常方便。因此本系統(tǒng)要使用JSF框架,利用發(fā)達(dá)的網(wǎng)絡(luò)技術(shù),構(gòu)建起一個(gè)基于Web的影院信息管理系統(tǒng)。1.1研究背景及研究意義信息時(shí)代的今天,我們感受到計(jì)算機(jī)科學(xué)日新月異的氣息日漸膨脹。如此,信息的傳播途徑與傳遞方式也隨之豐富多彩。發(fā)展日漸成熟的計(jì)算機(jī)網(wǎng)絡(luò)承載著大量信息的流通任務(wù),人們的生活也越來越依靠網(wǎng)絡(luò)。在日常娛樂商品中,電影成為豐富精神生活的佳品。而如今信息流逝太快,傳統(tǒng)媒體不能對(duì)影院起到較高效的宣傳與展示,電影文化只存在于紙張和膠片中使其傳播力度受到局限。由此一來,人們不易在第一時(shí)間獲知影院動(dòng)態(tài),許多精彩的電影信息得不到廣泛交流,得不到有效的定格,人們想要了解詳細(xì)的、日志性的影院信息可能也無從下手。我們要利用發(fā)達(dá)的網(wǎng)絡(luò),利用時(shí)新的技術(shù),構(gòu)建起一個(gè)基于Web的影院信息管理系統(tǒng)。這樣,各大影院就可以合理規(guī)劃電影信息,展示影院文化,與客戶做好充分交流,讓用戶感受到實(shí)時(shí)信息,使影院運(yùn)營(yíng)的更加流暢,獲取更好的經(jīng)濟(jì)效益。1.2研究?jī)?nèi)容該系統(tǒng)主要面向普通用戶和管理員兩種人群。對(duì)于普通用戶可實(shí)現(xiàn)注冊(cè)/登錄功能、積分獲取功能、查找站內(nèi)電影功能(多條件查找)、瀏覽影院電影信息功能、添加影評(píng)功能、電影投票功能、訂/退票功能、兌換禮品功能;管理員可實(shí)現(xiàn)注冊(cè)/登錄功能、更新電影信息功能、據(jù)用戶投票進(jìn)行電影排名功能、更新展示的禮品功能、管理用戶功能。該系統(tǒng)使用了新框架JavaServerFaces2.0,使用的開發(fā)語言為Java語言,開發(fā)工具采用的是MyEclipse10.0,采用Tomcat7.0作為Web服務(wù)器,采用MySQL作為數(shù)據(jù)庫。1.3論文結(jié)構(gòu)本文首先對(duì)實(shí)現(xiàn)系統(tǒng)所有的技術(shù)和工具進(jìn)行了介紹(第二章);其次對(duì)系統(tǒng)需求進(jìn)行了詳細(xì)的分析(第三章);再次,本文對(duì)系統(tǒng)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn),以及所遇到的關(guān)鍵問題及解決方案做了詳細(xì)的闡述(第四章);最后對(duì)系統(tǒng)實(shí)現(xiàn)效果進(jìn)行了展示(第五章)。

2系統(tǒng)開發(fā)工具與相關(guān)技術(shù)介紹本系統(tǒng)使用JSF2.0技術(shù),PrimeFaces3.5參考實(shí)作,MyEclipse10.0開發(fā)環(huán)境,MySQL數(shù)據(jù)庫,Tomcat7.0服務(wù)器。2.1JSF技術(shù)JavaServerFaces(JSF)是一個(gè)新的,基于Java的標(biāo)準(zhǔn)框架。它為Web應(yīng)用程序提供了用戶接口,而且它化簡(jiǎn)了用戶接口的應(yīng)用。也就是說,JSF提供了一種以組件為中心的用戶界面(UI)構(gòu)建方法[1],不管是前臺(tái)頁面設(shè)計(jì)人員還是后臺(tái)程序開發(fā)人員,都可以使用JSF獨(dú)立地完成自己涉及的模塊,前臺(tái)與后臺(tái)得到了有效地分離,大大減小了耦合度。JSF2.0內(nèi)置于Facelets提供的先進(jìn)模板,與Ajax更完美地結(jié)合;它提供了復(fù)合多種功能的組件,只需將組件的功能屬性啟動(dòng),就可以非常簡(jiǎn)便的使用該功能;它整合了Bean的驗(yàn)證,改進(jìn)了驗(yàn)證規(guī)范[2]。JSF有很多用于提高其Web應(yīng)用程序的類庫,如PrimeFaces,MyFaces等,本系統(tǒng)使用了PrimeFaces類庫。MVC是常用的設(shè)計(jì)模式,本系統(tǒng)使用了JSF來實(shí)現(xiàn)。MVC是Model-View-Controller的簡(jiǎn)稱,即模型—視圖—控制器[3]。使用JSF實(shí)現(xiàn)視圖層,使頁面更加獨(dú)特美觀,它解決了網(wǎng)頁設(shè)計(jì)的靜態(tài)性與程序設(shè)計(jì)的動(dòng)態(tài)性間的矛盾,使設(shè)計(jì)更加方便簡(jiǎn)潔。JSF提供了一組新的動(dòng)態(tài)的標(biāo)簽,它與后臺(tái)動(dòng)態(tài)程序相連接。JSF框架自帶的Servlet擔(dān)任了MVC中的控制器,而后臺(tái)Bean實(shí)現(xiàn)了模型層。JSF實(shí)現(xiàn)了視圖和業(yè)務(wù)邏輯代碼的完全分離,完全遵循MVC—2模式[4]。那么在JSF中是怎樣實(shí)現(xiàn)前臺(tái)與后臺(tái)的聯(lián)系,利用什么來管理資源的呢?這就是托管Bean。在Java編程語言中,一個(gè)托管Bean(ManagedBean)就是一個(gè)Java對(duì)象。定義了托管Bean,就不需再手動(dòng)實(shí)例化類對(duì)象了。托管Bean代表了一種可管理的資源,比如一個(gè)組件,一個(gè)臺(tái)設(shè)備,一個(gè)服務(wù)類。托管Bean具有惰性初始化的性質(zhì),僅當(dāng)在運(yùn)行時(shí)間內(nèi)應(yīng)用程序需要它時(shí),容器才將它初始化,也就是說,在JSF架構(gòu)中,后臺(tái)處理Bean交由JSF容器進(jìn)行管理。配置文件為faces-config.xml,Bean對(duì)象的生命周期可以為null:用時(shí)才生成[5]。任何Java公共類,任何無參的構(gòu)造函數(shù)都能做托管Bean,List和Map對(duì)象也可以[2]。2.2PrimeFacesPrimefaces是JSF的參考實(shí)例。它提供了豐富的組件,內(nèi)置于Ajax,基于JSF2.0標(biāo)準(zhǔn)。它是輕組件庫,只有一個(gè)jar文件,無需配置,沒有必要的依附體,是頁面表現(xiàn)的更生動(dòng),倍受程序開發(fā)者的青睞。PrimeFaces提供了局部頁面呈現(xiàn)功能,這就可以選擇在一個(gè)JSF生命周期中要運(yùn)行什么,最后要同Ajax返回什么數(shù)據(jù)。JSF的原稿基于jQuery和JavaScript[6]。PrimeFaces提高了JSFWeb應(yīng)用程序開發(fā)的效率,它主要由三個(gè)模塊構(gòu)成,即UI模塊,Optimus模塊和FacesTrace模塊。UI提供的組件支持通過Ajax更新頁面。Optimus模塊簡(jiǎn)化了JSF的開發(fā),F(xiàn)acesTrace模塊提供的各種工具能夠JSFWeb應(yīng)用程序,可查看JSF生命周期,進(jìn)行性能跟蹤查看,監(jiān)聽頁面信息等。2.3MyEclipse本系統(tǒng)使用MyEclipse10.0開發(fā)平臺(tái)。Myeclipse是Eclipse支持下的J2EE開發(fā)插件,功能十分完善,具備了完備的編碼、調(diào)試、測(cè)試和發(fā)布等功能并且完整支持HTML、Struts、JSF、CSS、JSP、SQL、Hibernate、Spring等技術(shù)。Myeclipse插件基本上涵蓋了眾多Eclipse插件的功能,能滿足我們的各種應(yīng)用需求,基本上安裝了它就無須其它任何插件[7]。用Genuitec公司的集成開發(fā)環(huán)境MyEclipse做開發(fā),人機(jī)界面良好、交互性好、實(shí)時(shí)性強(qiáng)、移植性強(qiáng),經(jīng)過實(shí)際運(yùn)行檢驗(yàn),證實(shí)了該系統(tǒng)操作簡(jiǎn)便,響應(yīng)快,通用性、靈活性和安全性好[8],能夠明顯提影院信息管理的效率。2.4MySQLMySQL是由瑞典MySQLAB公司開發(fā)的一個(gè)開放源碼的小型關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),由于其體積小、速度快、總體擁有成本低被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站開發(fā)中,目前通過JDBC連接MySQL一般采用兩種方式:JDBC-ODBC連接橋方式和純Java驅(qū)動(dòng)程序直接連接的方式[9]。JDBC(JavaDataBaseConnectivity)是基于中間件平臺(tái)的一種數(shù)據(jù)庫訪問技術(shù),他能夠很好的與ODBC(OpenDataBaseConnectivity)結(jié)合,具有可移植性、平臺(tái)無關(guān)性[10]。要通過JDBC訪問MySQL,需要下載JDBC驅(qū)動(dòng)程序。通過DriverManager類的getConnection方法可以建立連接[11]。數(shù)據(jù)庫中數(shù)據(jù)的丟失,若無法通過軟件等途徑恢復(fù),則會(huì)致使業(yè)務(wù)無法進(jìn)行[12]。所以數(shù)據(jù)庫的備份是非常重要的。MySQL可通過Mysqldump、客戶端管理工具、直接拷貝、日志進(jìn)行備份。2.5Java語言Java語言是一種純面向?qū)ο蟮木幊陶Z言。它主要的特性是面向?qū)ο?,可移植性,多線程,動(dòng)態(tài)性。面向?qū)ο笏哂械姆庋b性,繼承性,多態(tài)性等特點(diǎn)使其具有強(qiáng)大的生命力[15]。.java文件中存放了Java源程序,它經(jīng)javac命令編譯后就生成了相應(yīng)的.class文件。3需求分析所謂好的開始是成功的一半,在啟動(dòng)一個(gè)項(xiàng)目前需求分析是必不可少的也是至關(guān)重要的一步。我們要對(duì)準(zhǔn)啟動(dòng)項(xiàng)目進(jìn)行數(shù)據(jù)采集,分析預(yù)計(jì)實(shí)現(xiàn)的功能及功能的可行性,對(duì)系統(tǒng)結(jié)構(gòu)進(jìn)行搭建,對(duì)數(shù)據(jù)對(duì)象進(jìn)行物理建模,對(duì)其存儲(chǔ)方式、存儲(chǔ)結(jié)構(gòu)、依賴關(guān)系進(jìn)行縝密的揣測(cè)定奪。3.1系統(tǒng)功能需求分析基于Web的影院信息管理系統(tǒng)面向兩種用戶,即普通用戶和管理員。普通用戶為影院的大眾客戶,通過該系統(tǒng)與影院進(jìn)行信息交流;管理員則是對(duì)系統(tǒng)的數(shù)據(jù)進(jìn)行管理,主要是對(duì)數(shù)據(jù)的修改,添加和修改。下面對(duì)面向普通用戶功能和面向管理員功能進(jìn)行具體分析。3.1.1普通用戶功能普通用戶功能用例圖建模分析如圖3.1所示。圖3.SEQ圖\*ARABIC1普通用戶功能用例建模分析圖普通用戶注冊(cè)功能:用戶輸入用戶名及密碼后,注冊(cè)成功后方可登錄。未經(jīng)注冊(cè)登錄者,系統(tǒng)予以提示,并拒絕本次登錄。普通用戶身份代碼為“0”。普通用戶登錄功能:對(duì)已注冊(cè)用戶經(jīng)行用戶名與密碼的匹配驗(yàn)證。驗(yàn)證通過后方可登錄成功。積分獲取功能:用戶注冊(cè)成功后自動(dòng)獲取相應(yīng)積分(本系統(tǒng)為30分)。訂票成功后會(huì)獲取相應(yīng)積分(本系統(tǒng)為10分),退票后收回所獲積分。積分可換取禮品。添加影評(píng)功能:用戶可對(duì)電影進(jìn)行評(píng)價(jià),打分。電影投票功能:用戶可選擇進(jìn)入投票頁面,對(duì)電影進(jìn)行投票。訂票功能:用戶登錄成功后可訂電影票,根據(jù)座位圖選擇座位號(hào),訂票成功后返回訂單號(hào)。退票功能:登錄后可查看訂單信息,在訂單生產(chǎn)后24小時(shí)內(nèi)可退訂。查找電影功能:用戶可根據(jù)電影名稱,電影效果(是否為3D電影),上映日期,觀看日期,電影分類查找站內(nèi)電影。瀏覽網(wǎng)站功能:用戶無需登錄,可查看近期上映電影信息,站內(nèi)電影列表,電影詳細(xì)信息等頁面,但如果要實(shí)現(xiàn)登錄后才有的功能,若尚未登錄,系統(tǒng)會(huì)予以提示。3.1.2管理員功能管理員功能用例圖建模分析如圖3.2所示。圖3.SEQ圖\*ARABIC2管理員功能用例建模分析圖管理員登錄功能:管理員已添加到數(shù)據(jù)庫中,身份代碼為“1”。管理員無注冊(cè)功能,新的管理與由已有管理員進(jìn)行添加(見更新用戶功能)。登錄時(shí),系統(tǒng)根據(jù)身份代碼驗(yàn)證身份,同時(shí)驗(yàn)證用戶名和密碼是否匹配,可報(bào)錯(cuò)。登錄成功后進(jìn)行相應(yīng)操作。更新電影信息功能:可添加/刪除電影;修改電影信息:電影名稱,上映時(shí)間,電影簡(jiǎn)介,電影效果,海報(bào)。更新禮品信息:對(duì)用戶積分可換取的禮品進(jìn)行添加,刪除。發(fā)布電影排榜功能:根據(jù)用戶投票對(duì)電影進(jìn)行熱度排名,將排名列表公布。更新用戶功能:總管理員(身份代碼為“1”)可添加新管理員和普通用戶,新管理員屬于二級(jí)管理員,身份代碼為“2”。只有總管理員才能刪除二級(jí)管理員和普通用戶。普通用戶功能:管理員登錄后擁有普通用戶的多有功能。3.2系統(tǒng)數(shù)據(jù)庫分析本系統(tǒng)設(shè)計(jì)到的實(shí)體表有:用戶信息表、電影信息表、電影分類表、影評(píng)表、禮品信息表、影院座位表、訂單表、禮品兌換單表。3.2.1數(shù)據(jù)庫物理建模分析系統(tǒng)數(shù)據(jù)庫物理建模如圖3.3所示。圖3.3數(shù)據(jù)庫物理建模userinform(用戶信息表)與gift(禮品表)通過giftexchange(禮品兌換單表)關(guān)聯(lián)起來;userinform與film(電影信息表)通過subscribe(訂單表)關(guān)聯(lián)起來;film與criticism(評(píng)論表)為N:1的關(guān)系;film與filmcategory(電影分類表)為N:N的關(guān)系;allseat為座位表,存儲(chǔ)影院多有座位號(hào),與其他表沒有關(guān)聯(lián)。3.2.2實(shí)體表詳細(xì)分析userinform為用戶信息表。它記錄了用戶名(userName),用戶密碼(passWord),身份編碼(ustatus,標(biāo)記普通用戶和管理員級(jí)別),用戶編號(hào)(userId),用戶積分(uscore)。用戶信息表如表3.1所示。film為電影信息表。它記錄了電影名稱(filmName),電影編號(hào)(filmId),電影效果(is3D),電影海報(bào)(filmPicture),電影簡(jiǎn)介(filmDescribe),電影得分(filmScore),所得投票數(shù)(vote),上映時(shí)間(filmTime),播出時(shí)間(showTime),電影分類(category1,category2,category3),余票數(shù)(ticketCount)。電影信息表如表3.2所示。表3.1用戶信息表字段名稱字段類型主鍵外鍵是否為空默認(rèn)值userIdint(11)是否userNamevarchar(10)否passWordvarchar(15)否ustatusint(1)否uscoreint(10)unsigned是表3.2電影信息表字段名稱字段類型主鍵外鍵是否為空默認(rèn)值filmIdint(11)是否filmNamevarchar(20)是NULLIs3Dvarchar(5)是NULLfilmDescribetext是NULLfilmPicturevarchar(20)是NULLcategory1varchar(10)是NULLcategory2varchar(10)是NULLcategory3varchar(10)是NULLfilmTimevarchar(20)是NULLshowTimevarchar(100)是NULLvoteint(11)是NULLfilmScoreint(11)是NULLticketCountint(11)是NULLfilmcategory為電影分類表。它記錄了分類編號(hào)(fcategoryId),分類名稱(fcategory)。電影分類表如表3.3所示。表3.3電影分類表字段名稱字段類型主鍵外鍵是否為空默認(rèn)值fcategoryIdint(11)是否fcategoryvarchar(10)是NULLgift為用戶積分兌換的禮品信息表。它記錄了禮品編號(hào)(giftId),禮品名稱(giftName),禮品描述(giftDescribe),禮品實(shí)體圖(giftPicture),所需積分(requiredScore)。禮品信息表如表3.4所示。表3.4禮品信息表字段名稱字段類型主鍵外鍵是否為空默認(rèn)值giftIdint(11)是否giftNamevarchar(20)是NULLgiftDescribetext是NULLgiftPicturevarchar(20)是NULLrequiredScoreint(11)是NULL表3.5電影票訂單表字段名稱字段類型主鍵外鍵是否為空默認(rèn)值subIdint(11)是否filmIdint(11)是否filmNamevarchar(20)是NULLsubTimevarchar(20)是NULLsubNumint(11)是NULLuserIdint(11)是否subscrib為電影票訂單表。它記錄了訂單號(hào)(subId),電影編號(hào)(filmId),電影名稱(filmName),下單時(shí)間(subTime),座位號(hào)(subNum),用戶編號(hào)(userId)。電影票訂單表如表3.5所示。citicism為電影評(píng)論表。它記錄了影評(píng)編號(hào)(criId),影評(píng)內(nèi)容(criDescribe),電影編號(hào)(filmId)。電影評(píng)論表如表3.6所示。表3.6電影評(píng)論表字段名稱字段類型主鍵外鍵是否為空默認(rèn)值criIdint(11)是否criDescribetext否filmIdvarchar(20)是否giftexchange為禮品兌換單表,它的性質(zhì)同電影票訂單表一樣,用戶每?jī)稉Q一樣禮品便生成一張兌換單。它記錄了兌換單編號(hào)(giftexchangeId),禮品編號(hào)(giftId),用戶編號(hào)(userId),禮品名稱(giftName),禮品實(shí)體圖(giftPicture)。禮品兌換單表如表3.7所示。表3.7禮品兌換單表字段名稱字段類型主鍵外鍵是否為空默認(rèn)值giftexchangeIdint(11)是否giftIdint(11)是否userIdint(11)是否giftNamevarchar(20)是NULLgiftPictureint(11)是NULLallseat為影院所有的座位編號(hào)表。它為獨(dú)立的表,與其它表沒有聯(lián)系。它之記錄了所有座位號(hào)(seatNumber)。座位編號(hào)表如表3.8所示。表3.8座位編號(hào)表字段名稱字段類型主鍵外鍵是否為空默認(rèn)值seatNumberint(11)是否3.3系統(tǒng)結(jié)構(gòu)分析3.3.1系統(tǒng)功能結(jié)構(gòu)分析本系統(tǒng)面向的操作主體為普通用戶和管理員,操作對(duì)象主要為電影信息、用戶信息和禮品信息。普通用戶對(duì)電影信息的操作有查看、打分、投票、訂/退票;對(duì)禮品信息的操作有查看、兌換;對(duì)用戶個(gè)人信息的操作有查看和修改。管理員對(duì)三種信息的操作有增加、刪除、修改。系統(tǒng)功能結(jié)構(gòu)圖如圖3.4所示。3.3.2系統(tǒng)邏輯結(jié)構(gòu)分析JSF中用到托管Bean實(shí)現(xiàn)前臺(tái)頁面同后臺(tái)的傳值。該系統(tǒng)采用JDBC技術(shù)實(shí)現(xiàn)同數(shù)據(jù)庫的連接。包c(diǎn)inemasManageBean中定義了所有的托管Bean,托管Bean與前臺(tái)空間綁定。Dao包中定義了所有的具體的業(yè)務(wù)邏輯。后臺(tái)通過Dao包同數(shù)據(jù)庫連接,對(duì)數(shù)據(jù)庫進(jìn)行操作,在cinemasManageBean包中調(diào)用這些操作和返回的結(jié)果集向前臺(tái)頁面?zhèn)髦?。filter包中是過濾器,文件上傳時(shí)用到。系統(tǒng)包圖如圖3.5所示?;赪eb的影院信息管理系統(tǒng)基于Web的影院信息管理系統(tǒng)普通用戶功能管理員功能電影信息禮品個(gè)人信息電影信息禮品信息用戶信息個(gè)人信息查看添加影評(píng)、打分訂/退票兌換修改刪除修改增加圖3.4系統(tǒng)功能結(jié)構(gòu)圖圖3.5系統(tǒng)包圖

4系統(tǒng)詳細(xì)設(shè)計(jì)本系統(tǒng)面向管理員和普通用戶兩種人群。管理員不可注冊(cè),只能由已有管理員進(jìn)行添加。系統(tǒng)主頁,所有電影信息是開放的,無需登錄就可瀏覽;而訂票,兌換積分,電影投票,電影評(píng)價(jià)是要用戶進(jìn)行登錄后才可享有的功能。系統(tǒng)要對(duì)實(shí)體:用戶、電影、電影分類、影評(píng)、禮品、訂單進(jìn)行管理,所以建立了相應(yīng)的托管Bean的類:UserBean,F(xiàn)ilmBean,AllfCategoryBean,CriticismBean,GiftBean,SubscribBean;托管Bean要對(duì)數(shù)據(jù)庫進(jìn)行訪問則通過Dao包的相應(yīng)類:UserDao,F(xiàn)ilmDao,AllfCategoryDao,CriticismDao,GiftDao,SubscribDao實(shí)現(xiàn)。系統(tǒng)類圖如圖4.1所示。圖4.1系統(tǒng)類圖4.1普通用戶功能的設(shè)計(jì)4.1.1用戶注冊(cè)/登錄功能用戶注冊(cè)圖4.2用戶注冊(cè)時(shí)序圖該功能實(shí)質(zhì)就是對(duì)數(shù)據(jù)庫的用戶表進(jìn)行插入操作。用戶注冊(cè)時(shí)向頁面的<h:inputText>輸入用戶名和密碼,分別與userBean中的userName和passWord綁定,<h:inputText>的required屬性值為真,用<p:message>進(jìn)行輸入空的提示。注冊(cè)按鈕的action屬性值為#{userBean.uRegist},即與userBean的publicStringuRegist()方法綁定。點(diǎn)擊注冊(cè)按鈕后,觸發(fā)UserBean類中的uRegist()方法,在該方法中又嵌套調(diào)用UserDao中的publicStringuserRegist(StringuserName,StringpassWord)方法,將前臺(tái)傳入userBean的userName和passWord的值作為參數(shù)傳給userRegist()方法。若注冊(cè)成功,則返回字符串“yes”,若失敗則返回“fail”。對(duì)face-config.xml進(jìn)行配置,檢測(cè)與userBean綁定的函數(shù)的返回值,實(shí)現(xiàn)頁面跳轉(zhuǎn)。時(shí)序圖如圖4.2所示。用戶登錄圖4.3用戶登錄時(shí)序圖用戶登錄就是對(duì)數(shù)據(jù)庫的用戶表進(jìn)行查找,鎖定用戶名和密碼兩個(gè)條件。用戶登錄時(shí)向<h:inputText>中輸入用戶名和密碼,兩個(gè)輸入文本框分別與userBean的userName和passWord綁定,其required屬性值為真。登錄按鈕與userBean的publicStringucheckLogin()方法綁定,點(diǎn)擊登錄按鈕后觸發(fā)UserBean類中的ucheckLogin()方法,在該方法中又嵌套調(diào)用UserDao類中的publicStringfindusers(StringuserName,StringpassWord)方法,將前臺(tái)傳入userBean的userName和passWord作為參數(shù)送入findusers(),登錄成功后返回字符串“success”,若失敗則返回“fail”。同樣對(duì)face-config.xml文件進(jìn)行配置實(shí)現(xiàn)頁面跳轉(zhuǎn)。時(shí)序圖如圖4.3所示。4.1.2查找電影功能該功能使用PrimeFaces中的控件dataTable實(shí)現(xiàn)。dataTable的value屬性值是一個(gè)數(shù)據(jù)集,即要放入該數(shù)據(jù)表的數(shù)據(jù)集合。在此,該數(shù)據(jù)集為filmBean.films,即dataTable與filmBean中的集合films綁定。films由FilmDao類中的publicList<FilmBean>findFilm()方法返回。dataTable的var屬性值表示數(shù)據(jù)集中的一個(gè)元素,在此var=“fsearch”。dataTable中加入<p:column>,使用期filterBy屬性即可實(shí)現(xiàn)按指定字段查找。如按電影上映日期查找,賦值filterBy=“#{fsearch.filmTime}”(filmTime為filmBean的一個(gè)屬性,表示上映時(shí)間)即可。4.1.3電影投票功能圖4.4電影投票時(shí)序圖該功能就是對(duì)數(shù)據(jù)庫的電影表的票數(shù)字段進(jìn)行更新操作。該功能使用dataTable盛放數(shù)據(jù)集,即所有電影,每條記錄后面加一個(gè)投票功能列,使用<p:commandLink>。其actionListener屬性值為#{filmBean.filmVote},即與FilmBean類的publicvoidfilmVote(ActionEventevent)方法綁定。filmVote()中調(diào)用FilmDao類的publicintfilmVote(intvote,intfilmId)方法。形參vote為當(dāng)前票數(shù),filmId為待打分電影的編號(hào),這兩個(gè)參數(shù)由頁面的<f:attribute>傳入。在后臺(tái)使用event.getComponent().getAttributes().get(“f:attribute的name屬性值”)方法即可獲取f:attribute的值。時(shí)序圖如圖4.4所示。4.1.4添加影評(píng)功能用戶在電影詳細(xì)信息頁面進(jìn)行電影打分和添加影評(píng)。電影打分使用PrimeFaces的rating組件實(shí)現(xiàn),并給rating添加ajax。設(shè)置rating與filmScore(filmBean的一個(gè)屬性,表示電影當(dāng)前得分)綁定,設(shè)置ajax監(jiān)聽事件為“rate”,監(jiān)聽動(dòng)作為filmBean.onrate,更新對(duì)象為消息控件,即用戶進(jìn)行打分動(dòng)作后會(huì)觸發(fā)FilmBean類的publicvoidonrate(RateEventrateevent)方法,在該方法中嵌套調(diào)用FilmDao類中的publicintrateScore(intfilmScore,intfilmId)方法,將前臺(tái)傳入的電影當(dāng)前得分(通過getSessionValue(“鍵”)得到)和電影編號(hào)(通過前臺(tái)rating組件的<f:attribute>得到)作為實(shí)參傳入,如此實(shí)現(xiàn)打分。打分的實(shí)質(zhì)就是對(duì)數(shù)據(jù)庫的電影表進(jìn)行更新操作,更新其得分字段。打分成功后會(huì)有消息提示用戶的打分值,在onrate()方法中調(diào)用FaceContext.getCurrentInstance().addMessage()方法實(shí)現(xiàn)消息提示。添加影評(píng)影評(píng)的添加實(shí)質(zhì)上就是在數(shù)據(jù)庫中影評(píng)表里插入一條記錄的操作。使用<h:inputTextarea>盛放用戶輸入的評(píng)論,該控件與criticismBean.criDescribe(criDescribe屬性為影評(píng)字段)綁定。提交按鈕與criticismBean.fCriticismInsert綁定,且設(shè)置提交按鈕的ajax值為真,更行對(duì)象為整個(gè)表單,實(shí)現(xiàn)動(dòng)態(tài)刷新,提交評(píng)論后就能立刻看到自己的評(píng)論。點(diǎn)擊提交按鈕后觸發(fā)CriticismBean類的publicvoidfCriticismInsert()方法,該方法中又嵌套調(diào)用CriticismDao類中的publicintfilmCriInsertByid(intfilmId,StringcriDescribe)方法,filmId通過getSessionValue()方法得到,criDescribe通過綁定的前臺(tái)控件傳入。4.1.5禮品兌換功能用戶登錄成功后,點(diǎn)擊禮品兌換選項(xiàng)卡進(jìn)入禮品列表頁面,此選項(xiàng)卡使用PrimeFaces的<p:tabView>控件實(shí)現(xiàn)。用戶每?jī)稉Q一次禮品前進(jìn)行用戶的積分檢測(cè),積分符合則實(shí)現(xiàn)兌換,用戶的積分要相應(yīng)的減少,對(duì)數(shù)據(jù)庫中禮品兌換單表插入一天兌換記錄。giftBean是管理禮品的托管Bean,集合allgifts是其屬性之一,表示所有禮品的集合,通過GiftDao類中的findAllGifts()方法返回,該方法實(shí)質(zhì)就是對(duì)數(shù)據(jù)庫進(jìn)行一次查詢操作。在前臺(tái)頁面中使用PrimeFaces的dataGrid控件來盛放該集合,與dataTable相似,var屬性也表示集合中的一個(gè)元素。兌換按鈕的actionListener值為#{giftBean.giftExchange},ajax值為真,更新對(duì)象為整個(gè)表單,這樣用戶兌換后就能立刻看到剛才兌換的禮品(頁面動(dòng)態(tài)刷新具體實(shí)現(xiàn)見4.4)。點(diǎn)擊兌換按鈕后觸發(fā)GiftBean類的giftExchange(ActionEventevent)方法。在該方法中,首先通過session得到用戶積分,將該積分與禮品所需積分對(duì)比,少于則提示積分不足,多余則先后調(diào)用GiftDao類中publicStringexchange(intuserId,intgiftId,StringgiftName,StringgiftPicture)和publicvoiduserScoreDivid(intrequiredScore,intuserId)兩個(gè)方法,其中g(shù)iftId,giftName,giftPicture,requiredScore通過兌換按鈕下的<f:attribute>得到,userId通過session得到。4.1.5用戶訂/退功能用戶訂票圖4.5用戶訂票時(shí)序圖用戶登錄成功后點(diǎn)擊訂票選項(xiàng)卡進(jìn)入有訂票功能的電影列表。該列表由PrimeFaces的dataGrid盛放。訂票操作實(shí)質(zhì)上是對(duì)數(shù)據(jù)庫中三個(gè)表的操作:對(duì)訂單表插入一條訂單記錄,對(duì)電影表的余票字段進(jìn)行減量更新,對(duì)用戶表的用戶積分字段進(jìn)行增量更新。點(diǎn)擊訂票按鈕后跳轉(zhuǎn)到buyticket(訂票)頁面,將該電影編號(hào)傳入此頁面(頁面?zhèn)髦翟敿?xì)實(shí)現(xiàn)見4.4),該頁面根據(jù)電影余票數(shù)動(dòng)態(tài)生成座位號(hào)(生成座位號(hào)詳細(xì)實(shí)現(xiàn)見4.4),即已訂走的座位號(hào)不再出現(xiàn)。每個(gè)座位號(hào)是一個(gè)按鈕,點(diǎn)擊按鈕生成一個(gè)訂單,該按鈕actionListener屬性與subscribBean.buyTicket綁定,點(diǎn)擊座位號(hào)按鈕觸發(fā)SubscribBean類的publicvoidbuyTicket(ActionEventevent)方法,在該方法中首先嵌套調(diào)用FilmDao類的publicintticketCounts(intfilmId)方法檢測(cè)電影余票數(shù),有余票則先后調(diào)用SubscribBean類的publicStringaddSubscrib(intuserId,intfilmId,StringsubsTime,intseatNum,StringfilmName),publicvoidfilmTicketsDivid(intfilmId)和publicvoiduserScoreAdd(intuserId)方法。其中filmId,filmName,userId通過session得到,seatNum通過座位號(hào)按鈕下的<f:attribute>得到,subsTime是下單時(shí)間,通過調(diào)用GidtDao.nowTime()方法得到當(dāng)前系統(tǒng)時(shí)間(詳細(xì)實(shí)現(xiàn)見4.4)。時(shí)序圖見圖4.5所示。用戶退票圖4.6用戶退票時(shí)序圖用戶登錄成功后會(huì)進(jìn)入用戶詳情界面,其中包括用戶訂單列表,可對(duì)該列表進(jìn)行刪除行的操作。刪除訂單的實(shí)質(zhì)就是對(duì)數(shù)據(jù)庫的訂單表進(jìn)行刪除操作,對(duì)用戶表的用戶積分字段值進(jìn)行減量更新,對(duì)電影表的余票數(shù)字段值進(jìn)行增量更新。使用PrimeFaces的dataTable控件盛放該用戶訂單的集合,由SubscribDao類的publicList<SubscribBean>findAllSubs(intuserId)方法返回。其中userId通過session得到,即通過用戶編號(hào)從數(shù)據(jù)庫的訂單表中選出對(duì)應(yīng)用戶的所有訂單。刪除按鈕同subscribBean.deleteSub綁定,及點(diǎn)擊刪除按鈕后調(diào)用SubscribBean的publicvoiddeleteSub(ActionEventevent)方法,在該方法中先后調(diào)用SubscribDao類的publicvoiddeleteSub(StringsubId)方法,publicvoidfilmTicketsAdd(intfilmId)方法和publicvoiduserScoreDivid(intuserId)方法。其中subId和filmId通過刪除按鈕下的<f:attribute>得到,userId通過session得到。時(shí)序圖如圖4.6所示。4.2管理員功能的設(shè)計(jì)4.2.1管理員登錄功能同用戶登錄相似。不同的是管理員登錄時(shí)調(diào)用UserBean類中的publicStringcheckLogin()方法,在此方法中嵌套調(diào)用UserDao類中的publicStringfindMUers(StringuserName,StringpassWord)方法,該方法中調(diào)用了setSessionValue()方法,將管理員編號(hào)與身份代碼保存到session中,供修改個(gè)人信息和刪除操作時(shí)用。此方法中加上了身份代碼的驗(yàn)證條件(管理員的身份代碼為1或2),通過驗(yàn)證則登錄成功。4.2.2電影信息管理功能電影信息管理功能分為添加電影,修改電影信息,刪除電影,添加電影分類,和刪除分類。添加電影電影名稱(filmName),電影效果(is3D),電影分類(category1,category2,category3),代售票數(shù)(ticketCount),上映日期(filmTime)都使用<h:inputText>輸入,電影簡(jiǎn)介(filmDescribe)使用<h:inputTextarea>輸入,這些控件分別與filmBean的相應(yīng)屬性綁定。電影的海報(bào)添加要使用文件上傳功能,由PrimeFaces的fileUpload控件實(shí)現(xiàn)(詳細(xì)實(shí)現(xiàn)見4.4)。添加按鈕與filmBean.filmInsert綁定,點(diǎn)擊添加按鈕觸發(fā)FilmBean類的publicvoidfilmInsert()方法,在此方法中嵌套調(diào)用FilmDao類中的publicintfilmInsert(StringfilmName,Stringis3D,Stringcategory1,Stringcategory2,Stringcategory3,StringfilmPicture,StringfilmDescribe,StringfilmTime,intticketCount)方法,其中的參數(shù)都有前臺(tái)綁定的filmBean的屬性值得到。添加成功或失敗都有相應(yīng)的消息提示,設(shè)置添加按鈕的ajax屬性值為真,更新對(duì)象為相應(yīng)消息提示框<p:growl>。時(shí)序圖如圖4.7所示。圖4.7添加電影時(shí)序圖修改電影信息該功能就是根據(jù)前臺(tái)頁面?zhèn)鱽淼膄ilmId查到電影表的一條記錄,對(duì)該記錄進(jìn)行更新操作。電影列表由<p:dataTable>盛放,每條記錄后有一個(gè)修改按鈕,此修改按鈕下的<f:attribute>將filmId傳入后臺(tái),通過filmId選出要修改的電影的詳細(xì)表單,管理員能夠修改電影名稱(filmName),電影效果(is3D),電影分類(category1,category2,category3),代售票數(shù)(ticketCount),上映日期(filmTime),電影簡(jiǎn)介(filmDescribe),這些字段與前臺(tái)<h:inputText>綁定,且在這些字段的set方法中調(diào)用setSessionValue(),進(jìn)行修改后,通過session獲取新值。點(diǎn)擊保存按鈕后觸發(fā)FilmBean類的publicvoidfilmUpdate(ActionEventevent)方法,其中嵌套調(diào)用FilmDao類的publicintfilmUpdateById(StringfilmName,Stringis3D,Stringcategory1,Stringcategory2,Stringcategory3,StringfilmPicture,StringfilmDescribe,StringfilmTime,intfilmId)方法,除filmId外其他參數(shù)由getSessionValue()方法得到,filmId由保存按鈕下的<f:attribute>得到。刪除電影該功能實(shí)質(zhì)是根據(jù)filmId刪除數(shù)據(jù)庫中電影表的一條記錄。電影列表由<p:dataTable>盛放,dataTable的value值為#{filmBean.films},films為所有電影的集合,由FilmDao類的publicList<FilmBean>findFilm()方法返回。dataTable中每條電影記錄后都有一個(gè)刪除按鈕,該按鈕與filmBean.filmDelete綁定,點(diǎn)擊后觸發(fā)FilmBean類的publicvoidfilmDelete(ActionEventevent)方法,該方法中嵌套調(diào)用publicvoidfilmDeleteByID(intfilmId)方法,filmId有刪除按鈕下的<f:attribute>得到。刪除后頁面使用ajax進(jìn)行動(dòng)態(tài)刷新。添加電影分類電影分類由托管Bean:allfCategoryBean管理。頁面的<h:inputText>與allfCategoryBean.fcategory綁定,點(diǎn)擊添加按鈕觸發(fā)AllfCategoryBean類的publicvoidcategoryInsert() 方法,該方法中嵌套調(diào)用AllfCategoryDao類的publicintfCategoryInsert(Stringfcategory)方法,fcategory參數(shù)由前臺(tái)被allCategoryBean.fcategory綁定的<h:inputText>得到。添加成功后進(jìn)行消息提示,即在AllCategoryBean類的categoryInsert()方法中調(diào)用addMessage()方法。刪除電影分類同電影刪除功能相似,分類列表由PrimeFaces的dataTable盛放,點(diǎn)擊每行記錄后的刪除按鈕后觸發(fā)AllfCategoryBean類的publicvoidcategoryDelete(ActionEventevent)方法,在該方法中嵌套調(diào)用AllfCategoryDao類的publicvoidcategoryDeleteByID(intcategoryId)方法,參數(shù)categoryId通過刪除按鈕下的<f:attribute>得到。4.2.3用戶信息管理功能管理用戶分為對(duì)管理員的管理和對(duì)普通用戶的管理,對(duì)普通用戶只是刪除功能,對(duì)管理員可以添加、刪除,修改個(gè)人信息。對(duì)用戶和管理員的刪除功能只有終極管理員才能實(shí)現(xiàn)(其身份代碼為1),根據(jù)身份代碼檢測(cè)其是否有刪除權(quán)限。普通用戶刪除圖4.8刪除普通用戶時(shí)序圖普通用戶列表由PrimeFaces的dataTable盛放,普通用戶集合nusers由UserDao類的publicList<UserBean>findNusers()方法返回。每條記錄后都有一個(gè)刪除按鈕,點(diǎn)擊刪除按鈕會(huì)觸發(fā)UserBean類的publicvoiduserDelete(ActionEventevent)方法,該方法中首先通過session得到登錄的管理員的身份代碼,若不是1則消息提示“沒有刪除權(quán)限”,若是1則調(diào)用UserDao類的publicvoiduserDeleteByID(intuserId)方法,參數(shù)userId通過刪除按鈕下的<f:attribute>傳入。該功能實(shí)質(zhì)就是對(duì)數(shù)據(jù)庫的用戶列表記錄進(jìn)行對(duì)號(hào)刪除操作。時(shí)序圖如圖4.8所示。添加管理員在后臺(tái)管理處添加的管理員身份代碼為2,初始密碼為888888,自行登錄后可修改個(gè)人名稱和密碼。使用<h:outputText>盛放身份代碼值和密碼值,這兩項(xiàng)是定死的不可輸入。管理員名稱使用<h:inputText>盛放并與userBean.userName綁定。點(diǎn)擊添加按鈕后觸發(fā)UserBean類的publicvoidmanagerInsert()方法,該方法中嵌套調(diào)用UserDao類的publicintmanagerInsert(StringuserName,intustatus,StringpassWord,intuscore)方法,userName參數(shù)由前臺(tái)被userBean綁定的控件傳入,參數(shù)ustatus、passWord、uscore直接賦值。刪除管理員同普通用戶的刪除功能相似。不同的是點(diǎn)擊刪除按鈕后觸發(fā)UserBean類的publicvoidmanagerDelete(ActionEventevent)方法,該方法中同樣對(duì)管理員身份代碼進(jìn)行檢測(cè)。個(gè)人信息修改點(diǎn)擊個(gè)人修改功能項(xiàng)進(jìn)入已登錄管理員信息列表。該信息集合由dataGrid盛放,其綁定值為userBean.loguser。loguser是一個(gè)集合,盛放了一個(gè)已登錄的管理員對(duì)象(UserBean類型)。loguser由UserDao類的publicList<UserBean>findLogUsers(intuserId)方法返回。在管理員登錄的方法publicStringfindMUers(StringuserName,StringpassWord)中已將管理員編號(hào)放入session中,因此通過getSessionValue()方法可得到userId。點(diǎn)擊修改按鈕觸發(fā)UserBean類的publicvoidlogedUserUpdate()方法,在其中嵌套調(diào)用UserDao類的publicintlogUserUpdate(StringuserName,StringpassWord,intuserId)方法。userName和passWord的set()方法中已調(diào)用setSessionValue()方法,所以通過session可得到他們的值,也是頁面?zhèn)鱽淼男轮?。時(shí)序圖如圖4.9所示。圖4.9修改個(gè)人信息時(shí)序圖4.2.4禮品管理功能禮品的管理包括添加禮品和刪除禮品。在后臺(tái),禮品信息由managedBean:giftBean管理。添加禮品同添加電影功能相似,禮品的添加包括添加禮品名稱(giftName),禮品實(shí)體圖(giftPicture),禮品簡(jiǎn)介(giftDescribe),所需積分(requiredScore)這些數(shù)據(jù)項(xiàng)。giftName,giftDescribe和requiredScore直接和前臺(tái)頁面的<h:inputText>綁定。giftPicture通過上傳文件得到(文件上傳的具體實(shí)現(xiàn)見4.4)。點(diǎn)擊添加按鈕觸發(fā)GiftBean類的publicvoidgiftInsert()方法,此方法中嵌套調(diào)用GiftDao類的publicintgiftsInsert(StringgiftName,StringgiftPicture,StringgiftDescribe,intrequiredScore)方法。刪除禮品禮品刪除功能同電影刪除功能相似,不同的是此刪除功能沒有權(quán)限限制,點(diǎn)擊刪除按鈕后觸發(fā)GiftBean類的publicvoidgiftDelete(ActionEventevent)方法,在此方法中嵌套調(diào)用GiftDao類的publicvoidgiftDeleteByID(intgiftId)方法。參數(shù)giftId通過前臺(tái)刪除按鈕下的<f:attribute>得到。4.3主要界面設(shè)計(jì)4.3.1主頁設(shè)計(jì)主頁(mainpage.xhtml)的頁面布局使用PrimeFaces的layout實(shí)現(xiàn),設(shè)置layout的fullpage屬性值為true。本系統(tǒng)主頁的layout將頁面分成北(north)、西(west)、中(center)三個(gè)模塊。且主頁作為后繼頁面的模板。模板使用詳細(xì)實(shí)現(xiàn)見4.4。northnorth中盛放系統(tǒng)的工具條,該工具條使用PrimeFaces的dock實(shí)現(xiàn)。<p:dock>的position屬性值為top,表示這個(gè)dock要放置在頁面的頂部。在<p:dock>中添加<p:menueitem>,表示屬于此dock的某一個(gè)元素,設(shè)置其value屬性值為本系統(tǒng)功能的相應(yīng)名稱,表示鼠標(biāo)聚焦于此時(shí)顯示的文字內(nèi)容;設(shè)置icon屬性值為想要使用的圖標(biāo)路徑,表示該功能按鈕的圖標(biāo);設(shè)置url屬性值為將要跳轉(zhuǎn)的頁面名稱。westwest模塊兒展示電影的分類集合。使用PrimeFaces的dataGrid盛放分類集合allCategory,allCategory由AllfCatrgoryDao類的publicList<AllfCategoryBean>findAllfCategory()方法返回。頁面上每個(gè)分類名稱都是一個(gè)鏈接,點(diǎn)擊某分類名稱,通過該鏈接下的<f:attribute>將分類編號(hào)傳入后臺(tái),該鏈接與filmBean.showByCategory綁定,publicList<FilmBean>showByCategory(ActionEventevent)方法返回根據(jù)分類選出的電影列表集合showByCatg,該方法中調(diào)用FilmDao類下的publicList<FilmBean>showByCatg(intcatgId),將從前臺(tái)得到的分類編號(hào)傳入。點(diǎn)擊分類鏈接后跳轉(zhuǎn)與分類名稱相對(duì)應(yīng)的電影列表的新頁面,根據(jù)分類選出的電影列表showByCatg由PrimeFaces的dataGrid控件盛放,設(shè)置dataGrid的paginator屬性值為"true"實(shí)現(xiàn)分頁功能。每個(gè)電影都可以查看詳情,查看按鈕下的<f:attribute>將選中電影的電影編號(hào)傳入后臺(tái),后臺(tái)根據(jù)此編號(hào)從數(shù)據(jù)庫中讀出對(duì)應(yīng)的電影數(shù)據(jù),將該數(shù)據(jù)放入集合中,供將要跳轉(zhuǎn)到的電影詳情頁面使用。centercenter模塊展示最新上線電影。最新上線電影集合nfilms(FilmBean的一個(gè)屬性)由FilmDao類的publicList<FilmBean>findNewFilm()方法返回。在前臺(tái)頁面中使用dataGrid盛放該集合。設(shè)置<p:dataGridvar=“nf”value=“#{filmBean.nfilms}”>的columns屬性值為4,即想要顯示的數(shù)據(jù)列為4列,<p:dataGrid>中嵌套一個(gè)<p:panel>,即一個(gè)panel占一個(gè)數(shù)據(jù)列,設(shè)置panel的header屬性值為#{nf.filmName},<p:pannel>中嵌套一個(gè)<p:panelGrid>,設(shè)置其columns屬性值為1,即數(shù)據(jù)滿一列則換行,在此panelGrid中順次嵌套<p:graphicImagevalue="/materials/images/#{nf.filmPicture}">(展示電影海報(bào))、<h:outputTextvalue="#{nf.category1}#{nf.category2}#{nf.category3}">(展示電影分類)、<p:commandLinkactionListener="#{filmBean.selectedFilm}"action="fdetail.faces">,commandLink被點(diǎn)擊后觸發(fā)FilmBean類的publicList<FilmBean>selectedFilm(ActionEventevent)方法,之后跳轉(zhuǎn)到電影詳情頁面,在該方法中嵌套調(diào)用FilmDao類下的publicList<FilmBean>selectById(intfId)方法,參數(shù)fId通過<p:commandLink>下的<f:attribute>得到,此方法的返回值付給FilmBean的集合selectedFilmInfor,它是被選中電影的詳細(xì)信息集合,在電影詳情頁面用到。電影詳情頁面同樣使用dataGrid盛放selectedFilmInfor集合。4.3.2電影詳情頁面設(shè)計(jì)電影詳情(fdetail.xhtml)頁面使用mainpage.xhtml做模板。該頁面分為兩個(gè)區(qū),每個(gè)區(qū)域都用p:fieldset包裹。第一個(gè)區(qū)域是電影詳情區(qū),展示電影詳細(xì)信息(集合selectedFilmInfor),得分情況,可對(duì)電影進(jìn)行打分;第二個(gè)區(qū)域是展示影評(píng)區(qū),也可對(duì)電影進(jìn)行評(píng)價(jià)。打分和影評(píng)功能上面以做過描述。用戶詳細(xì)信息頁面設(shè)計(jì)用戶登錄成功后跳轉(zhuǎn)到用戶詳情頁面(userdetail,xhtml)。該頁面使用mainpage.xhtml做模板,分為三個(gè)區(qū)域,每個(gè)區(qū)域使用p:fieldset盛放。第一個(gè)區(qū)域展示用戶名和當(dāng)前積分,是一個(gè)由dataGrid盛放的集合loguser,此集合由UserDao類的publicList<UserBean>findLogUsers(intuserId)方法返回,參數(shù)userId通過session得到。第二個(gè)區(qū)域是用戶兌換的禮品清單selectedug,是GiftBean類的一個(gè)集合,它由GiftDao類下的publicList<GiftBean>selectedUserGifts(intuserId)返回。該方法實(shí)質(zhì)是根據(jù)用戶編號(hào)從數(shù)據(jù)庫的禮品兌換單表中選出對(duì)應(yīng)用戶的所有禮品。第三個(gè)區(qū)域是用戶訂單列表,可對(duì)訂單進(jìn)行撤銷操作。后臺(tái)管理頁面設(shè)計(jì)后臺(tái)管理的所有頁面都是用后臺(tái)管理主頁(managewelcome.xhtml)做模板,管理主頁的布局使用p:layout實(shí)現(xiàn),分為north、west、center、east四個(gè)模塊。north模塊顯示“影視棧管理系統(tǒng)”的字樣;west顯示后臺(tái)管理的功能列表,使用p:panelMenu實(shí)現(xiàn);center是可編輯的模塊,顯示各功能的具體操作頁面;east顯示一個(gè)flash,使用p:media盛放,對(duì)<p:media>嵌套<f:paramname="wmode"value="transparent"/>可使flash透明。4.4關(guān)鍵問題及解決方案模板的引用在模板頁面中,將可編輯的模塊用<ui:insertname="模塊名稱"></ui:insert>包裹住即可。在后繼頁面中使用此模板,只需寫要編輯模塊的代碼即可,將要編輯的模塊代碼用<ui:compositiontemplate="/模板頁面文件全名"><ui:definename="待編輯模塊名">代碼部分</ui:define></ui:composition>包裹住即可。編碼問題從前臺(tái)頁面向后臺(tái)傳參數(shù)時(shí),若不能傳中文字符,則在數(shù)據(jù)庫連接字符串中的數(shù)據(jù)庫名稱后面加上?characterEncoding=uft8即可。界面的背景問題若把界面的背景圖加在body的background屬性中,則會(huì)因?yàn)闉g覽器不支持可修改擴(kuò)展名的圖片的問題導(dǎo)致背景圖片無法顯示。那么將此背景圖加在模板頁面的layout中即可。后繼頁面引用此模板后當(dāng)然也就引用了這個(gè)背景圖。在模板頁面的<h:head></h:head>中加上style樣式,樣式中加上css代碼。具體代碼截圖如圖4.1所示。圖4.1界面背景設(shè)置代碼截圖.ui-layout-unit的background-image:url()屬性設(shè)置背景圖路徑,background-repeat屬性設(shè)置圖片的連續(xù)方式,background-attachment:fixed屬性設(shè)置背景固定還是滑動(dòng),background-size屬性設(shè)置圖片的大小。由于layout是將整個(gè)頁面分成多個(gè)模塊,所以各個(gè)模塊之間會(huì)有間隙,設(shè)置p:layouUnit的gutter屬性值為負(fù)值(本系統(tǒng)設(shè)置為-5)即可。頁面控件與托管Bean綁定問題直接設(shè)置控件的value屬性值為el表達(dá)式#{托管Bean.屬性名}即可。p:dataGrid樣式問題在頁面頭部加上style樣式:.ui-datagrid.ui-paginator{background:顏色值;}設(shè)置的是dataGrid分頁條的顏色;.ui-datagrid-content{background:transparent;border:none}設(shè)置的是數(shù)據(jù)內(nèi)容的背景和邊框,此處背景透明,無邊框。動(dòng)態(tài)刷新是用ajax進(jìn)行動(dòng)態(tài)刷新。點(diǎn)擊某按鈕后需要刷新頁面的,設(shè)置按鈕的ajax屬性值為true,update屬性值為要刷新對(duì)象,若是整個(gè)表單,則update=“:表單名”;若刷新對(duì)象為某個(gè)控件則update=“控件名”。再如打分時(shí)的動(dòng)態(tài)刷新,在<p:rating></p:rating>中嵌套<p:ajaxevent="rate"listener="#{filmBean.onrate}"update="messages"/>即可。頁面?zhèn)髦祮栴}一個(gè)頁面要使用另一個(gè)頁面的某個(gè)字段作為參數(shù),那么就需要另一頁面將這個(gè)字段傳給它。當(dāng)觸發(fā)了某一事件后傳參,如點(diǎn)擊某p:commandButton,那么就給<p:commandButton>嵌套<f:attributeid=“”value=“”>,value表示f:attribute的值,是將要要傳給其他頁面的值,id是它的名字,我們?cè)诤笈_(tái)通過id值找到這個(gè)f:attribute。在點(diǎn)擊該p:commandButton觸發(fā)的方法定義為帶參數(shù)的方法,形參為ActionEventevent,表示將前臺(tái)動(dòng)作事件作為參數(shù)傳入,這樣在方法體中就可以通過event調(diào)用event.getComponent().getAttributes().get("f:attributeid值")得到頁面?zhèn)鱽淼闹?,在另一頁面的后臺(tái)方法中就可直接使用了。若沒有形成動(dòng)作事件的控件,那么可以使用session得到。在該屬性的set方法中調(diào)用setSessionValue(“鍵名”,鍵值),在某頁面用到這個(gè)屬性時(shí)就將其值保存到了session里,另一個(gè)頁面再使用它時(shí)就通過getSessionValue(“鍵名”)來得到它。動(dòng)態(tài)生成座位號(hào)在SubscribBean中定義集合List<SubscribBean>allSeats盛放剩余座位號(hào),在它的get方法中給它賦值。具體代碼如圖4.2所示。每次調(diào)用get方法時(shí)都將allSeats清空,避免座位累加。數(shù)組sS(由SubscribDao類的publicint[]findSelectedSeats(intfilmId)返回)為已訂走的座位,數(shù)組aS(由SubscribDao類的publicint[]findSeats()返回)為原始的所有座位號(hào)。從aS[]中除去sS[]的所有座位號(hào)就是余下的座位號(hào),在此用到了有序表的順序查找算法,在aS[]中逐個(gè)與sS[]中的元素對(duì)比,aS[]中沒有,則將這個(gè)元素加到allSeats中。消息提示圖4.2動(dòng)態(tài)生成座位號(hào)代碼在前臺(tái)頁面使用消息控件p:growl顯示消息,設(shè)置其showDetail屬性值為真,設(shè)置頁面ajax值為真,更新對(duì)象為這個(gè)消息控件。在后臺(tái)方法中調(diào)用FacesContext.getCurrentInstance().addMessage("",newFacesMessage(“消息內(nèi)容”))即可在滿足特定條件時(shí)輸出消息提示。

5系統(tǒng)的實(shí)現(xiàn)介紹了系統(tǒng)功能的實(shí)現(xiàn)效果以及操作流程。5.1系統(tǒng)開發(fā)以及運(yùn)行環(huán)境操作系統(tǒng):WindowsXP;開發(fā)環(huán)境:MyEclipse10.0;數(shù)據(jù)庫:MySQL;服務(wù)器:Tomcat7.0;開發(fā)語言:Java;Java運(yùn)行平臺(tái):JDK1.6.0。5.2面向普通用戶的系統(tǒng)功能5.2.1系統(tǒng)主頁功能系統(tǒng)主頁實(shí)現(xiàn)圖如圖5.1所示。圖5.1系統(tǒng)主頁界面點(diǎn)擊某一分類(如:冒險(xiǎn)),進(jìn)入符合該分類的電影列表,實(shí)現(xiàn)圖如圖5.2所示。圖5.2符合冒險(xiǎn)類的電影列表界面點(diǎn)擊某電影(如:阿黛拉的非凡冒險(xiǎn)),進(jìn)入該電影詳情頁面,實(shí)現(xiàn)效果如圖5.3所示。圖5.3電影詳情界面5.2.2用戶注冊(cè)/登錄功能點(diǎn)擊功能條的用戶注冊(cè)/登錄功能進(jìn)入功能界面,實(shí)現(xiàn)效果如圖5.4所示。注冊(cè)后進(jìn)行登錄,登錄成功跳轉(zhuǎn)到用戶詳細(xì)信息頁面,詳細(xì)信息包括用戶名,當(dāng)前積分,已兌換禮品,訂單列表。實(shí)現(xiàn)效果圖如圖5.5所示。點(diǎn)擊禮品兌換功能選項(xiàng)卡,進(jìn)入兌換禮品的界面,兌換前檢測(cè)積分是否充足,不足進(jìn)行提示。兌換成功后進(jìn)行消息提示。實(shí)現(xiàn)效果如圖5.6所示。圖5.4用戶注冊(cè)/登錄功能界面圖5.5用戶詳細(xì)信息界面點(diǎn)擊訂票功能選項(xiàng)卡,進(jìn)入電影列表,點(diǎn)擊某電影(如:101次求婚)進(jìn)入購票界面,選擇座位號(hào)后生成訂單,并進(jìn)行消息提示。實(shí)現(xiàn)效果如圖5.7所示。5.2.3查找電影功能點(diǎn)擊功能條的查找功能進(jìn)入查找界面,可進(jìn)行多條件查找。實(shí)現(xiàn)效果如圖5.8所示。5.2.4查看全部電影功能點(diǎn)擊功能條的查看全部進(jìn)入全部電影的列表頁面。實(shí)現(xiàn)效果如圖5.9所示。圖5.6禮品兌換功能效果界面圖5.7用戶訂票界面圖5.8查找功能界面圖5.9查看全部電影界面點(diǎn)擊某電影(如:黑影)進(jìn)入電影詳細(xì)信息界面,可進(jìn)行打分操作和添加影評(píng)操作。實(shí)現(xiàn)效果如圖5.10,圖5.11所示。圖5.10打分功能界面圖5.11添加影評(píng)界面5.2.4查看電影排名功能點(diǎn)擊功能條的查看排名,進(jìn)入電影排名界面。實(shí)現(xiàn)效果如圖5.12所示。5.2.5投票功能點(diǎn)擊功能條的投票,進(jìn)入投票界面,點(diǎn)擊投票按鈕完成一次投票,票數(shù)動(dòng)態(tài)增長(zhǎng)。實(shí)現(xiàn)效果如圖5.13所示。圖5.13投票界面5.3面向管理員的系統(tǒng)功能5.3.1管理員主頁管理員登錄成功后進(jìn)入管理員主頁,界面實(shí)現(xiàn)效果如圖5.13所示。圖5.13系統(tǒng)管理主頁界面5.3.2電影信息管理功能點(diǎn)擊添加電影功能選項(xiàng)跳轉(zhuǎn)到添加電影界面,輸入電影信息,上傳海報(bào)后點(diǎn)擊添加按鈕,添加結(jié)果會(huì)有消息提示。實(shí)現(xiàn)效果如圖5.13所示。圖5.13添加電影功能界面點(diǎn)擊刪除功能選項(xiàng),進(jìn)入刪除功能界面,點(diǎn)擊刪除按鈕后完成刪除工作,頁面會(huì)動(dòng)態(tài)刷新。實(shí)現(xiàn)效果如圖5.14所示。圖5.14刪除功能界面點(diǎn)擊修改功能選項(xiàng),進(jìn)入待修改電影列表界面,點(diǎn)擊修改按鈕進(jìn)入修改界面,修改后點(diǎn)擊保存完成修改工作并有消息提示。實(shí)現(xiàn)效果如圖5.15、圖5.16所示。點(diǎn)擊添加電影分類功能項(xiàng)進(jìn)入添加分類界面,添加成功后有消息提示。實(shí)現(xiàn)效果如圖5.17所示。圖5.15待修改電影列表界面圖5.16修改界面圖5.17添加電影分類界面點(diǎn)擊刪除電影分類選項(xiàng),進(jìn)入刪除分類功能界面,點(diǎn)擊刪除按鈕后完成刪除操作,頁面動(dòng)態(tài)刷新。5.3.3用戶信息管理功能普通用戶的管理只有刪除功能,并且有刪除權(quán)限,若不是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論