基于Web的影院信息管理系统的设计与实现毕业论文.doc
-
资源ID:3939437
资源大小:14.85MB
全文页数:43页
- 资源格式: DOC
下载积分:8金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于Web的影院信息管理系统的设计与实现毕业论文.doc
目 录1 绪论11.1 研究背景及研究意义11.2 研究内容11.3 论文结构22 系统开发工具与相关技术介绍32.1 JSF技术32.2 PrimeFaces32.3 MyEclipse42.4 MySQL42.5 Java语言43 需求分析53.1 系统功能需求分析53.1.1 普通用户功能53.1.2 管理员功能63. 2 系统数据库分析73.2.1 数据库物理建模分析73.2.2 实体表详细分析73. 3 系统结构分析103.3.1 系统功能结构分析103.3.2 系统逻辑结构分析104 系统详细设计124.1 普通用户功能的设计124.1.1 用户注册/登录功能124.1.2 查找电影功能144.1.3 电影投票功能144.1.4 添加影评功能154.1.5 礼品兑换功能154.1.5 用户订/退功能164.2 管理员功能的设计174.2.1 管理员登录功能184.2.2 电影信息管理功能184.2.3 用户信息管理功能194.2.4 礼品管理功能214.3 主要界面设计224.3.1 主页设计224.3.2 电影详情页面设计234.4 关键问题及解决方案235系统的实现275.1系统开发以及运行环境275.2面向普通用户的系统功能275.2.1 系统主页功能275.2.2 用户注册/登录功能285.2.3 查找电影功能295.2.4 查看全部电影功能295.2.4 查看电影排名功能325.2.5 投票功能325.3面向管理员的系统功能325.3.1 管理员主页325.3.2 电影信息管理功能335.3.3 用户信息管理功能355.3.4 礼品管理功能37结 论39致 谢40参 考 文 献411 绪论随着经济的发展,人们生活质量提高了,娱乐方式也日新月异。电影不再是“奢侈品”,而是人们日常生活中休闲娱乐必备的商业产物。在这个网络信息化浓厚的时代,网络成为主要的通讯手段。当代网络如此发达,也有不少基于Web的电影院网站,如深圳太阳数码影城、Mtime时光网、58影院等。他们多用JSP实现动态网站制作。JSP将网页的设计同网页的后台逻辑分离,是支持可重用的基于组件的设计。但是JSP的组件不够丰富,要实现特殊功能的控件,如用户打分的可拖拉五角星打分条,没有现成的组件,编写制作起来非常复杂麻烦。虽然JSP简化了编程开发,但在复杂逻辑中还是要编写很多代码,开发人员的学习负担也不断加重。JavaServer Faces(JSF)框架可以很好的解决以上问题,它提供全新的,动态的标签库,且组件丰富多样,组件可以同托管Bean绑定,进一步简化了代码编写,减少了代码量。利用JSF能制作出饱满的页面,且支持拖拽功能,非常方便。因此本系统要使用JSF框架,利用发达的网络技术,构建起一个基于Web的影院信息管理系统。1.1 研究背景及研究意义信息时代的今天,我们感受到计算机科学日新月异的气息日渐膨胀。如此,信息的传播途径与传递方式也随之丰富多彩。发展日渐成熟的计算机网络承载着大量信息的流通任务,人们的生活也越来越依靠网络。在日常娱乐商品中,电影成为丰富精神生活的佳品。而如今信息流逝太快,传统媒体不能对影院起到较高效的宣传与展示,电影文化只存在于纸张和胶片中使其传播力度受到局限。由此一来,人们不易在第一时间获知影院动态,许多精彩的电影信息得不到广泛交流,得不到有效的定格,人们想要了解详细的、日志性的影院信息可能也无从下手。我们要利用发达的网络,利用时新的技术,构建起一个基于Web的影院信息管理系统。这样,各大影院就可以合理规划电影信息,展示影院文化,与客户做好充分交流,让用户感受到实时信息,使影院运营的更加流畅,获取更好的经济效益。1.2 研究内容该系统主要面向普通用户和管理员两种人群。对于普通用户可实现注册/登录功能、积分获取功能、查找站内电影功能(多条件查找)、浏览影院电影信息功能、添加影评功能、电影投票功能、订/退票功能、兑换礼品功能;管理员可实现注册/登录功能、更新电影信息功能、据用户投票进行电影排名功能、更新展示的礼品功能、管理用户功能。该系统使用了新框架JavaServer Faces 2.0,使用的开发语言为Java语言,开发工具采用的是MyEclipse10.0,采用Tomcat7.0作为Web服务器,采用MySQL作为数据库。1.3 论文结构本文首先对实现系统所有的技术和工具进行了介绍(第二章);其次对系统需求进行了详细的分析(第三章);再次,本文对系统的详细设计与实现,以及所遇到的关键问题及解决方案做了详细的阐述(第四章);最后对系统实现效果进行了展示(第五章)。2 系统开发工具与相关技术介绍本系统使用JSF2.0技术,PrimeFaces3.5参考实作,MyEclipse10.0开发环境,MySQL数据库,Tomcat7.0服务器。2.1 JSF技术JavaServerFaces(JSF)是一个新的,基于Java的标准框架。它为Web应用程序提供了用户接口,而且它化简了用户接口的应用。也就是说,JSF提供了一种以组件为中心的用户界面(UI)构建方法1,不管是前台页面设计人员还是后台程序开发人员,都可以使用JSF独立地完成自己涉及的模块,前台与后台得到了有效地分离,大大减小了耦合度。JSF2.0内置于Facelets提供的先进模板,与Ajax更完美地结合;它提供了复合多种功能的组件,只需将组件的功能属性启动,就可以非常简便的使用该功能;它整合了Bean的验证,改进了验证规范2。JSF有很多用于提高其Web应用程序的类库,如PrimeFaces,MyFaces等,本系统使用了PrimeFaces类库。MVC是常用的设计模式,本系统使用了JSF来实现。MVC是Model-View-Controller的简称,即模型视图控制器3。使用JSF实现视图层,使页面更加独特美观,它解决了网页设计的静态性与程序设计的动态性间的矛盾,使设计更加方便简洁。JSF提供了一组新的动态的标签,它与后台动态程序相连接。JSF框架自带的Servlet担任了MVC中的控制器,而后台Bean实现了模型层。JSF实现了视图和业务逻辑代码的完全分离,完全遵循MVC2模式4。那么在JSF中是怎样实现前台与后台的联系,利用什么来管理资源的呢?这就是托管Bean。在Java编程语言中,一个托管Bean(Managed Bean)就是一个Java对象。定义了托管Bean,就不需再手动实例化类对象了。托管Bean代表了一种可管理的资源,比如一个组件,一个台设备,一个服务类。托管Bean具有惰性初始化的性质,仅当在运行时间内应用程序需要它时,容器才将它初始化,也就是说,在JSF 架构中, 后台处理Bean 交由JSF容器进行管理。配置文件为faces-config.xml,Bean 对象的生命周期可以为null: 用时才生成5。任何Java公共类,任何无参的构造函数都能做托管Bean,List和Map对象也可以2。2.2 PrimeFaces Primefaces是JSF的参考实例。它提供了丰富的组件,内置于Ajax,基于JSF2.0标准。它是轻组件库,只有一个jar文件,无需配置,没有必要的依附体,是页面表现的更生动,倍受程序开发者的青睐。PrimeFaces提供了局部页面呈现功能,这就可以选择在一个JSF生命周期中要运行什么,最后要同Ajax返回什么数据。JSF的原稿基于jQuery和JavaScript6。PrimeFaces提高了JSF Web应用程序开发的效率,它主要由三个模块构成,即UI模块,Optimus模块和FacesTrace模块。UI提供的组件支持通过Ajax更新页面。Optimus模块简化了JSF的开发,FacesTrace模块提供的各种工具能够JSF Web应用程序,可查看JSF生命周期,进行性能跟踪查看,监听页面信息等。2.3 MyEclipse本系统使用My Eclipse10.0开发平台。Myeclipse 是Eclipse 支持下的J2EE开发插件,功能十分完善,具备了完备的编码、调试、测试和发布等功能并且完整支持HTML、Struts、JSF、CSS、JSP、SQL、Hibernate、Spring 等技术。Myeclipse 插件基本上涵盖了众多Eclipse 插件的功能,能满足我们的各种应用需求,基本上安装了它就无须其它任何插件7。用Genuitec公司的集成开发环境MyEclipse做开发,人机界面良好、交互性好、实时性强、移植性强,经过实际运行检验,证实了该系统操作简便,响应快,通用性、灵活性和安全性好8,能够明显提影院信息管理的效率。2.4 MySQLMySQL 是由瑞典MySQL AB 公司开发的一个开放源码的小型关联式数据库管理系统,由于其体积小、速度快、总体拥有成本低被广泛地应用在Internet 上的中小型网站开发中,目前通过JDBC 连接MySQL 一般采用两种方式:JDBC-ODBC 连接桥方式和纯Java 驱动程序直接连接的方式9。JDBC(Java Data Base Connectivity)是基于中间件平台的一种数据库访问技术,他能够很好的与ODBC(Open DataBase Connectivity)结合,具有可移植性、平台无关性10。要通过JDBC 访问MySQL,需要下载JDBC 驱动程序。通过DriverManager 类的getConnection 方法可以建立连接11。数据库中数据的丢失,若无法通过软件等途径恢复,则会致使业务无法进行12。所以数据库的备份是非常重要的。MySQL可通过Mysqldump、客户端管理工具、直接拷贝、日志进行备份。2.5 Java语言Java语言是一种纯面向对象的编程语言。它主要的特性是面向对象,可移植性,多线程,动态性。面向对象所具有的封装性,继承性,多态性等特点使其具有强大的生命力15。.java文件中存放了Java源程序,它经javac命令编译后就生成了相应的.class文件。3 需求分析所谓好的开始是成功的一半,在启动一个项目前需求分析是必不可少的也是至关重要的一步。我们要对准启动项目进行数据采集,分析预计实现的功能及功能的可行性,对系统结构进行搭建,对数据对象进行物理建模,对其存储方式、存储结构、依赖关系进行缜密的揣测定夺。3.1 系统功能需求分析基于Web的影院信息管理系统面向两种用户,即普通用户和管理员。普通用户为影院的大众客户,通过该系统与影院进行信息交流;管理员则是对系统的数据进行管理,主要是对数据的修改,添加和修改。下面对面向普通用户功能和面向管理员功能进行具体分析。3.1.1 普通用户功能普通用户功能用例图建模分析如图3.1所示。图 3.1普通用户功能用例建模分析图a 普通用户注册功能:用户输入用户名及密码后,注册成功后方可登录。未经注册登录者,系统予以提示,并拒绝本次登录。普通用户身份代码为“0”。b 普通用户登录功能:对已注册用户经行用户名与密码的匹配验证。验证通过后方可登录成功。c 积分获取功能:用户注册成功后自动获取相应积分(本系统为30分)。订票成功后会获取相应积分(本系统为10分),退票后收回所获积分。积分可换取礼品。d 添加影评功能:用户可对电影进行评价,打分。e 电影投票功能:用户可选择进入投票页面,对电影进行投票。f 订票功能:用户登录成功后可订电影票,根据座位图选择座位号,订票成功后返回订单号。g 退票功能:登录后可查看订单信息,在订单生产后24小时内可退订。h 查找电影功能:用户可根据电影名称,电影效果(是否为3D电影),上映日期,观看日期,电影分类查找站内电影。i 浏览网站功能:用户无需登录,可查看近期上映电影信息,站内电影列表,电影详细信息等页面,但如果要实现登录后才有的功能,若尚未登录,系统会予以提示。3.1.2 管理员功能管理员功能用例图建模分析如图3.2所示。图 3.2管理员功能用例建模分析图a 管理员登录功能:管理员已添加到数据库中,身份代码为“1”。管理员无注册功能,新的管理与由已有管理员进行添加(见更新用户功能)。登录时,系统根据身份代码验证身份,同时验证用户名和密码是否匹配,可报错。登录成功后进行相应操作。b 更新电影信息功能:可添加/删除电影;修改电影信息:电影名称,上映时间,电影简介,电影效果,海报。c 更新礼品信息:对用户积分可换取的礼品进行添加,删除。d 发布电影排榜功能:根据用户投票对电影进行热度排名,将排名列表公布。e 更新用户功能:总管理员(身份代码为“1”)可添加新管理员和普通用户,新管理员属于二级管理员,身份代码为“2”。只有总管理员才能删除二级管理员和普通用户。f 普通用户功能:管理员登录后拥有普通用户的多有功能。3. 2 系统数据库分析本系统设计到的实体表有:用户信息表、电影信息表、电影分类表、影评表、礼品信息表、影院座位表、订单表、礼品兑换单表。3.2.1 数据库物理建模分析系统数据库物理建模如图3.3所示。图3.3 数据库物理建模userinform(用户信息表)与gift(礼品表)通过giftexchange(礼品兑换单表)关联起来;userinform与film(电影信息表)通过subscribe(订单表)关联起来;film与criticism(评论表)为N:1的关系;film与filmcategory(电影分类表)为N:N的关系;allseat为座位表,存储影院多有座位号,与其他表没有关联。3.2.2 实体表详细分析a userinform为用户信息表。它记录了用户名(userName),用户密码(passWord),身份编码(ustatus,标记普通用户和管理员级别),用户编号(userId),用户积分(uscore)。用户信息表如表3.1所示。b film为电影信息表。它记录了电影名称(filmName),电影编号(filmId),电影效果(is3D),电影海报(filmPicture),电影简介(filmDescribe),电影得分(filmScore),所得投票数(vote),上映时间(filmTime),播出时间(showTime),电影分类(category1,category2,category3),余票数(ticketCount)。电影信息表如表3.2所示。表3.1 用户信息表字段名称字段类型主键外键是否为空默认值userId int(11) 是否userNamevarchar(10)否passWordvarchar(15)否ustatusint(1)否uscoreint(10)unsigned是表3.2 电影信息表字段名称字段类型主键外键是否为空默认值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)是NULLc filmcategory为电影分类表。它记录了分类编号(fcategoryId),分类名称(fcategory)。电影分类表如表3.3所示。表3.3 电影分类表字段名称字段类型主键外键是否为空默认值fcategoryId int(11) 是否fcategoryvarchar(10)是NULLd gift为用户积分兑换的礼品信息表。它记录了礼品编号(giftId),礼品名称(giftName),礼品描述(giftDescribe),礼品实体图(giftPicture),所需积分(requiredScore)。礼品信息表如表3.4所示。表3.4 礼品信息表字段名称字段类型主键外键是否为空默认值giftId int(11) 是否giftNamevarchar(20)是NULLgiftDescribetext是NULLgiftPicture varchar(20) 是NULLrequiredScoreint(11) 是NULL表3.5 电影票订单表字段名称字段类型主键外键是否为空默认值subId int(11) 是否filmIdint(11) 是否filmNamevarchar(20)是NULLsubTime varchar(20) 是NULLsubNumint(11) 是NULLuserIdint(11) 是否e subscrib为电影票订单表。它记录了订单号(subId),电影编号(filmId),电影名称(filmName),下单时间(subTime),座位号(subNum),用户编号(userId)。电影票订单表如表3.5所示。f citicism为电影评论表。它记录了影评编号(criId),影评内容(criDescribe),电影编号(filmId)。电影评论表如表3.6所示。表3.6 电影评论表字段名称字段类型主键外键是否为空默认值criId int(11) 是否criDescribetext否filmIdvarchar(20)是否g giftexchange为礼品兑换单表,它的性质同电影票订单表一样,用户每兑换一样礼品便生成一张兑换单。它记录了兑换单编号(giftexchangeId),礼品编号(giftId),用户编号(userId),礼品名称(giftName),礼品实体图(giftPicture)。礼品兑换单表如表3.7所示。表3.7 礼品兑换单表字段名称字段类型主键外键是否为空默认值giftexchangeId int(11) 是否giftIdint(11) 是否userIdint(11) 是否giftName varchar(20) 是NULLgiftPictureint(11) 是NULLh allseat为影院所有的座位编号表。它为独立的表,与其它表没有联系。它之记录了所有座位号(seatNumber)。座位编号表如表3.8所示。表3.8 座位编号表字段名称字段类型主键外键是否为空默认值seatNumber int(11) 是否3. 3 系统结构分析3.3.1 系统功能结构分析本系统面向的操作主体为普通用户和管理员,操作对象主要为电影信息、用户信息和礼品信息。普通用户对电影信息的操作有查看、打分、投票、订/退票;对礼品信息的操作有查看、兑换;对用户个人信息的操作有查看和修改。管理员对三种信息的操作有增加、删除、修改。系统功能结构图如图3.4所示。3.3.2 系统逻辑结构分析JSF中用到托管Bean实现前台页面同后台的传值。该系统采用JDBC技术实现同数据库的连接。包cinemasManageBean中定义了所有的托管Bean,托管Bean与前台空间绑定。Dao包中定义了所有的具体的业务逻辑。后台通过Dao包同数据库连接,对数据库进行操作,在cinemasManageBean包中调用这些操作和返回的结果集向前台页面传值。filter包中是过滤器,文件上传时用到。系统包图如图3.5所示。基于Web的影院信息管理系统普通用户功能管理员功能电影信息礼品个人信息电影信息礼品信息用户信息个人信息查看添加影评、打分订/退票兑换修改删除修改增加图3.4 系统功能结构图图3.5 系统包图4 系统详细设计本系统面向管理员和普通用户两种人群。管理员不可注册,只能由已有管理员进行添加。系统主页,所有电影信息是开放的,无需登录就可浏览;而订票,兑换积分,电影投票,电影评价是要用户进行登录后才可享有的功能。系统要对实体:用户、电影、电影分类、影评、礼品、订单进行管理,所以建立了相应的托管Bean的类:UserBean,FilmBean,AllfCategoryBean,CriticismBean,GiftBean,SubscribBean;托管Bean要对数据库进行访问则通过Dao包的相应类:UserDao,FilmDao,AllfCategoryDao,CriticismDao,GiftDao,SubscribDao实现。系统类图如图4.1所示。图4.1 系统类图4.1 普通用户功能的设计4.1.1 用户注册/登录功能a 用户注册图4.2 用户注册时序图该功能实质就是对数据库的用户表进行插入操作。用户注册时向页面的<h:inputText>输入用户名和密码,分别与userBean中的userName和passWord绑定,<h:inputText>的required属性值为真,用<p:message>进行输入空的提示。注册按钮的action属性值为#userBean.uRegist,即与userBean的public String uRegist()方法绑定。点击注册按钮后,触发UserBean类中的uRegist()方法,在该方法中又嵌套调用UserDao中的public String userRegist(String userName,String passWord)方法,将前台传入userBean的userName和passWord的值作为参数传给userRegist()方法。若注册成功,则返回字符串“yes”,若失败则返回“fail”。对face-config.xml进行配置,检测与userBean绑定的函数的返回值,实现页面跳转。时序图如图4.2所示。b 用户登录图4.3 用户登录时序图用户登录就是对数据库的用户表进行查找,锁定用户名和密码两个条件。用户登录时向<h:inputText>中输入用户名和密码,两个输入文本框分别与userBean的userName和passWord绑定,其required属性值为真。登录按钮与userBean的public String ucheckLogin()方法绑定,点击登录按钮后触发UserBean类中的ucheckLogin()方法,在该方法中又嵌套调用UserDao类中的public String findusers(String userName,String passWord)方法,将前台传入userBean的userName和passWord作为参数送入findusers(),登录成功后返回字符串“success”,若失败则返回“fail”。同样对face-config.xml文件进行配置实现页面跳转。时序图如图4.3所示。4.1.2 查找电影功能该功能使用PrimeFaces中的控件dataTable实现。dataTable的value属性值是一个数据集,即要放入该数据表的数据集合。在此,该数据集为filmBean.films,即dataTable与filmBean中的集合films绑定。films由FilmDao类中的public List<FilmBean> findFilm()方法返回。dataTable的var属性值表示数据集中的一个元素,在此var=“fsearch”。dataTable中加入<p:column>,使用期filterBy属性即可实现按指定字段查找。如按电影上映日期查找,赋值filterBy=“#fsearch.filmTime”(filmTime为filmBean的一个属性,表示上映时间)即可。4.1.3 电影投票功能图4.4 电影投票时序图该功能就是对数据库的电影表的票数字段进行更新操作。该功能使用dataTable盛放数据集,即所有电影,每条记录后面加一个投票功能列,使用<p:commandLink>。其actionListener属性值为#filmBean.filmVote,即与FilmBean类的public void filmVote(ActionEvent event)方法绑定。filmVote()中调用FilmDao类的public int filmVote(int vote,int filmId)方法。形参vote为当前票数,filmId为待打分电影的编号,这两个参数由页面的<f:attribute>传入。在后台使用event.getComponent().getAttributes().get(“f:attribute的name属性值”)方法即可获取f:attribute的值。时序图如图4.4所示。4.1.4 添加影评功能用户在电影详细信息页面进行电影打分和添加影评。a 电影打分使用PrimeFaces的rating组件实现,并给rating添加ajax。设置rating与filmScore(filmBean的一个属性,表示电影当前得分)绑定,设置ajax监听事件为“rate”,监听动作为filmBean.onrate,更新对象为消息控件,即用户进行打分动作后会触发FilmBean类的public void onrate(RateEvent rateevent)方法,在该方法中嵌套调用FilmDao类中的public int rateScore(int filmScore,int filmId)方法,将前台传入的电影当前得分(通过getSessionValue(“键”)得到)和电影编号(通过前台rating组件的<f:attribute>得到)作为实参传入,如此实现打分。打分的实质就是对数据库的电影表进行更新操作,更新其得分字段。打分成功后会有消息提示用户的打分值,在onrate( )方法中调用FaceContext.getCurrentInstance( ).addMessage( )方法实现消息提示。b 添加影评影评的添加实质上就是在数据库中影评表里插入一条记录的操作。使用<h:inputTextarea>盛放用户输入的评论,该控件与criticismBean.criDescribe(criDescribe属性为影评字段)绑定。提交按钮与criticismBean.fCriticismInsert绑定,且设置提交按钮的ajax值为真,更行对象为整个表单,实现动态刷新,提交评论后就能立刻看到自己的评论。点击提交按钮后触发CriticismBean类的public void fCriticismInsert()方法,该方法中又嵌套调用CriticismDao类中的public int filmCriInsertByid(int filmId, String criDescribe)方法,filmId通过getSessionValue()方法得到,criDescribe通过绑定的前台控件传入。4.1.5 礼品兑换功能用户登录成功后,点击礼品兑换选项卡进入礼品列表页面,此选项卡使用PrimeFaces的<p:tabView>控件实现。用户每兑换一次礼品前进行用户的积分检测,积分符合则实现兑换,用户的积分要相应的减少,对数据库中礼品兑换单表插入一天兑换记录。giftBean是管理礼品的托管Bean,集合allgifts是其属性之一,表示所有礼品的集合,通过GiftDao类中的findAllGifts()方法返回,该方法实质就是对数据库进行一次查询操作。在前台页面中使用PrimeFaces的dataGrid控件来盛放该集合,与dataTable相似,var属性也表示集合中的一个元素。兑换按钮的actionListener值为#giftBean.giftExchange,ajax值为真,更新对象为整个表单,这样用户兑换后就能立刻看到刚才兑换的礼品(页面动态刷新具体实现见4.4)。点击兑换按钮后触发GiftBean类的giftExchange(ActionEvent event)方法。在该方法中,首先通过session得到用户积分,将该积分与礼品所需积分对比,少于则提示积分不足,多余则先后调用GiftDao类中public String exchange(int userId,int giftId,String giftName,String giftPicture)和public void userScoreDivid(int requiredScore,int userId)两个方法,其中giftId,giftName,giftPicture,requiredScore通过兑换按钮下的<f:attribute>得到,userId通过session得到。4.1.5 用户订/退功能a 用户订票图4.5 用户订票时序图用户登录成功后点击订票选项卡进入有订票功能的电影列表。该列表由PrimeFaces的dataGrid盛放。订票操作实质上是对数据库中三个表的操作:对订单表插入一条订单记录,对电影表的余票字段进行减量更新,对用户表的用户积分字段进行增量更新。点击订票按钮后跳转到buyticket(订票)页面,将该电影编号传入此页面(页面传值详细实现见4.4),该页面根据电影余票数动态生成座位号(生成座位号详细实现见4.4),即已订走的座位号不再出现。每个座位号是一个按钮,点击按钮生成一个订单,该按钮actionListener属性与subscribBean.buyTicket绑定,点击座位号按钮触发SubscribBean类的public void buyTicket(ActionEvent event)方法,在该方法中首先嵌套调用FilmDao类的public int ticketCounts(int filmId)方法检测电影余票数,有余票则先后调用SubscribBean类的public String addSubscrib(int userId,int filmId,String subsTime,int seatNum,String filmName),public void filmTicketsDivid(int filmId)和public void userScoreAdd(int userId)方法。其中filmId,filmName,userId通过session得到,seatNum通过座位号按钮下的<f:attribute>得到,subsTime是下单时间,通过调用GidtDao.nowTime()方法得到当前系统时间(详细实现见4.4)。时序图见图4.5所示。b 用户退票图4.6 用户退票时序图用户登录成功后会进入用户详情界面,其中包括用户订单列表,可对该列表进行删除行的操作。删除订单的实质就是对数据库的订单表进行删除操作,对用户表的用户积分字段值进行减量更新,对电影表的余票数字段值进行增量更新。使用PrimeFaces的dataTable控件盛放该用户订单的集合,由SubscribDao类的public List<SubscribBean> findAllSubs(int userId)方法返回。其中userId通过session得到,即通过用户编号从数据库的订单表中选出对应用户的所有订单。删除按钮同subscribBean.deleteSub绑定,及点击删除按钮后调用SubscribBean的public void deleteSub(ActionEvent event)方法,在该方法中先后调用SubscribDao类的public void deleteSub( String subId )方法,public void filmTicketsAdd( int filmId )方法和public void userScoreDivid ( int userId )方法。其中subId和filmId通过删除按钮下的<f:attribute>得到,userId通过session得到。时序图如图4.6所示。4.2 管理员功能的设计4.2.1 管理员登录功能同用户登录相似。不同的是管理员登录时调用UserBean类中的public String checkLogin()方法,在此方法中嵌套调用UserDao类中的public String findMUers(String userName,String passWord)方法,该方法中调用了setSessionValue()方法,将管理员编号与身份代码保存到session中,供修改个人信息和删除操作时用。此方法中加上了身份代码的验证条件(管理员的身份代码为1或2),通过验证则登录成功。4.2.2 电影信息管理功能电影信息管理功能分为添加电影,修改电影信息,删除电影,添加电影分类,和删除分类。a 添加电影电影名称(filmName),电影效果(is3D),电影分类(category1,category2,category3),代售票数(ticketCount),上映日期(filmTime)都使用<h:inputText>输入,电影简介(filmDescribe)使用<h:inputTextarea>输入,这些控件分别与filmBean的相应属性绑定。电影的海报添加要使用文件上传功能,由PrimeFaces的fileUpload控件实现(详细实现见4.4)。添加按钮与filmBean.f