文档库 最新最全的文档下载
当前位置:文档库 › 电影售票系统优秀毕业论文

电影售票系统优秀毕业论文

目录

1 绪论 (1)

1.1 研究背景及研究意义 (1)

1.2 研究内容 (1)

1.3 论文结构 (2)

2 系统开发工具与相关技术介绍 (3)

2.1 JSF技术 (3)

2.2 PrimeFaces (3)

2.3 MyEclipse (4)

2.4 MySQL (4)

2.5 Java语言 (4)

3 需求分析 (5)

3.1 系统功能需求分析 (5)

3.1.1 普通用户功能 (5)

3.1.2 管理员功能 (6)

3. 2 系统数据库分析 (7)

3.2.1 数据库物理建模分析 (7)

3.2.2 实体表详细分析 (7)

3. 3 系统结构分析 (10)

3.3.1 系统功能结构分析 (10)

3.3.2 系统逻辑结构分析 (10)

4 系统详细设计 (12)

4.1 普通用户功能的设计 (12)

4.1.1 用户注册/登录功能 (12)

4.1.2 查找电影功能 (14)

4.1.3 电影投票功能 (14)

4.1.4 添加影评功能 (15)

4.1.5 礼品兑换功能 (15)

4.1.5 用户订/退功能 (16)

4.2 管理员功能的设计 (17)

4.2.1 管理员登录功能 (18)

4.2.2 电影信息管理功能 (18)

4.2.3 用户信息管理功能 (19)

4.2.4 礼品管理功能 (21)

4.3 主要界面设计 (22)

4.3.1 主页设计 (22)

4.3.2 电影详情页面设计 (23)

4.4 关键问题及解决方案 (23)

5系统的实现 (27)

5.1系统开发以及运行环境 (27)

5.2面向普通用户的系统功能 (27)

5.2.1 系统主页功能 (27)

5.2.2 用户注册/登录功能 (28)

5.2.3 查找电影功能 (29)

5.2.4 查看全部电影功能 (29)

5.2.4 查看电影排名功能 (32)

5.2.5 投票功能 (32)

5.3面向管理员的系统功能 (32)

5.3.1 管理员主页 (32)

5.3.2 电影信息管理功能 (33)

5.3.3 用户信息管理功能 (35)

5.3.4 礼品管理功能 (37)

结论 (39)

致谢 (40)

参考文献 (41)

1 绪论

随着经济的发展,人们生活质量提高了,娱乐方式也日新月异。电影不再是“奢侈品”,而是人们日常生活中休闲娱乐必备的商业产物。在这个网络信息化浓厚的时代,网络成为主要的通讯手段。当代网络如此发达,也有不少基于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实现了视图和业务逻辑代码的完全分离,完全遵循MVC—2模式[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和

JavaScript[6]。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 MySQL

MySQL 是由瑞典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) 是否

userName varchar(10) 否

passWord varchar(15) 否

ustatus int(1) 否

uscore int(10)unsigned 是

表3.2 电影信息表

字段名称字段类型主键外键是否为空默认值filmId int(11) 是否

filmName varchar(20) 是NULL Is3D varchar(5) 是NULL filmDescribe text 是NULL filmPicture varchar(20) 是NULL category1 varchar(10) 是NULL category2 varchar(10) 是NULL category3 varchar(10) 是NULL filmTime varchar(20) 是NULL showTime varchar(100) 是NULL vote int(11) 是NULL filmScore int(11) 是NULL ticketCount int(11) 是NULL

c.filmcategory为电影分类表。它记录了分类编号(fcategoryId),分类名称(fcategory)。电影分类表如表3.3所示。

表3.3 电影分类表

字段名称字段类型主键外键是否为空默认值fcategoryId int(11) 是否

fcategory varchar(10) 是NULL d.gift为用户积分兑换的礼品信息表。它记录了礼品编号(giftId),礼品名称

(giftName),礼品描述(giftDescribe),礼品实体图(giftPicture),所需积分(requiredScore)。礼品信息表如表3.4所示。

表3.4 礼品信息表

字段名称字段类型主键外键是否为空默认值giftId int(11) 是否

giftName varchar(20) 是NULL giftDescribe text 是NULL giftPicture varchar(20) 是NULL requiredScore int(11) 是NULL

表3.5 电影票订单表

字段名称字段类型主键外键是否为空默认值subId int(11) 是否

filmId int(11) 是否

filmName varchar(20) 是NULL subTime varchar(20) 是NULL subNum int(11) 是NULL userId int(11) 是否

e.subscrib为电影票订单表。它记录了订单号(subId),电影编号(filmId),电影名称(filmName),下单时间(subTime),座位号(subNum),用户编号(userId)。电影票订单表如表3.5所示。

f.citicism为电影评论表。它记录了影评编号(criId),影评内容(criDescribe),电影编号(filmId)。电影评论表如表3.6所示。

表3.6 电影评论表

字段名称字段类型主键外键是否为空默认值criId int(11) 是否

criDescribe text 否

filmId varchar(20) 是否

g.giftexchange为礼品兑换单表,它的性质同电影票订单表一样,用户每兑换一样

礼品便生成一张兑换单。它记录了兑换单编号(giftexchangeId),礼品编号(giftId),用户编号(userId),礼品名称(giftName),礼品实体图(giftPicture)。礼品兑换单表如表3.7所示。

表3.7 礼品兑换单表

字段名称字段类型主键外键是否为空默认值giftexchangeId int(11) 是否

giftId int(11) 是否

userId int(11) 是否

giftName varchar(20) 是NULL giftPicture int(11) 是NULL

h.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所示。

图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 用户注册时序图

该功能实质就是对数据库的用户表进行插入操作。用户注册时向页面的

输入用户名和密码,分别与userBean中的userName和passWord绑定,

的required属性值为真,用进行输入空的提示。注册按钮的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 用户登录时序图

用户登录就是对数据库的用户表进行查找,锁定用户名和密码两个条件。用户登录时向中输入用户名和密码,两个输入文本框分别与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 findFilm ()方法返回。dataTable的var属性值表示数据集中的一个元素,在此var=“fsearch”。dataTable中加入,使用期filterBy属性即可实现按指定字段查找。如按电影上映日期查找,赋值filterBy=“#{fsearch.filmTime}”(filmTime为filmBean的一个属性,表示上映时间)即可。

4.1.3 电影投票功能

图4.4 电影投票时序图

该功能就是对数据库的电影表的票数字段进行更新操作。该功能使用dataTable盛放数据集,即所有电影,每条记录后面加一个投票功能列,使用。其actionListener属性值为#{filmBean.filmV ote},即与FilmBean类的public void filmV ote (ActionEvent event)方法绑定。filmV ote()中调用FilmDao类的public int filmV ote(int

vote,int filmId)方法。形参vote为当前票数,filmId为待打分电影的编号,这两个参数由页面的传入。在后台使用

event.getCompone nt().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组件的得到)作为实参传入,如此实现打分。打分的实质就是对数据库的电影表进行更新操作,更新其得分字段。打分成功后会有消息提示用户的打分值,在onrate( )方法中调用FaceContext.getCurrentInstance( ).addMessage( )方法实现消息提示。

b.添加影评

影评的添加实质上就是在数据库中影评表里插入一条记录的操作。使用

盛放用户输入的评论,该控件与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 的控件实现。用户每兑换一次礼品前进行用户的积分检测,积分符合则实现兑换,用户的积分要相应的减少,对数据库中礼品兑换单表插入一天兑换记录。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通过兑换按钮下的得到,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 通过座位号按钮下的得到,subsTime是下单时间,通过调用GidtDao.nowTime ()方法得到当前系统时间(详细实现见4.4)。时序图见图4.5所示。

b.用户退票

图4.6 用户退票时序图

用户登录成功后会进入用户详情界面,其中包括用户订单列表,可对该列表进行删除行的操作。删除订单的实质就是对数据库的订单表进行删除操作,对用户表的用户积分字段值进行减量更新,对电影表的余票数字段值进行增量更新。使用PrimeFaces的dataTable控件盛放该用户订单的集合,由SubscribDao类的public List 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通过删除按钮下的得到,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)都使用输入,电影简介(filmDescribe)使用输入,这些控件分别与filmBean的相应属性绑定。电影的海报添加要使用文件上传功能,由PrimeFaces的fileUpload控件实现(详细实现见4.4)。添加按钮与filmBean.filmInsert绑定,点击添加按钮触发FilmBean类的public void filmInsert()方法,在此方法中嵌套调用FilmDao类中的public int filmInsert(String filmName,String is3D,String category1,String category2,String category3,String filmPicture,String filmDescribe,String filmTime,int ticketCount)方法,其中的参数都有前台绑定的filmBean的属性值得到。添加成功或失败都有相应的消息提示,设置添加按钮的ajax属性值为真,更新对象为相应消息提示框。时序图如图4.7所示。

图4.7 添加电影时序图

b.修改电影信息

该功能就是根据前台页面传来的filmId查到电影表的一条记录,对该记录进行更新操作。电影列表由盛放,每条记录后有一个修改按钮,此修改按钮下的

将filmId传入后台,通过filmId选出要修改的电影的详细表单,管理员能够

相关文档
相关文档 最新文档