版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
影院票务系统详细设计与实现分析案例目录TOC\o"1-3"\h\u16424影院票务系统详细设计与实现分析案例 1230501.1系统前台功能的实现 1247341.1.1登录模块设计与实现 1157171.1.2注册模块设计实现 4199591.1.3售票模块设计实现 6323201.1.4退票模块设计实现 98571.1.5个人中心设计实现 10159671.2系统后台功能的实现 15188931.2.1电影信息管理设计实现 15245001.2.2电影场次管理设计实现 17277401.2.3影院信息管理设计实现 19139491.2.4账号管理设计实现 20138881.2.5推荐功能设计实现 221.1系统前台功能的实现1.1.1登录模块设计与实现登录模块分为普通用户和管理员用户,两者登录区分开。当用户未登录时,只能查看主页面的电影信息、资讯信息、余票数等信息。当前台用户处于未登录状态点击购票或者收藏电影操作时,系统会提示用户未登录。登录模块确认了用户的身份,用户输入账户和密码,系统核实用户名是否存在,并检查与用户名相匹配的密码是否正确,用户只有登录才可以进行接下来的操作。登录流程如图1.1所示:图1.1登录流程图用户登录界面如图1.2所示:图1.2用户登录界面用户登录失败界面如图1.3、1.4所示:图1.3用户登录账号密码错误界面图1.4用户登录验证码错误界面实现验证码功能核心代码如下://产生随机四位数String
sRand="";
for
(int
i=0;i<4;i++){
String
rand=String.valueOf(random.nextInt(10));
sRand+=rand;
//将数字放到图像中g.setColor(new
Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand,13*i+6,16);
}
//
将验证码存入session
session.setAttribute("random",sRand);
//图像生效g.dispose();
//输出图像到页面ImageIO.write(image,
"JPEG",
response.getOutputStream());
验证码采用random随机类,随机生成四位数字。为了防止页面的验证码总是一个,使用out.clear()方法设置页面不缓存,并通过for循环使用给出坐标的g.drawLine()方法生成干扰线,加干扰线的目的是为了防止机器识别,增加系统在使用时的安全性。用户可能出现看不清验证码的情况,在界面上用点击事件来控制刷新验证码。实现登录功能代码如下:String
utype
=
request.getParameter("cx");String
pagerandom
=
request.getParameter("pagerandom")
==
null
?
""
:
request.getParameter("pagerandom");
String
random
=
(String)
request.getSession().getAttribute("random");//如果输入的验证码和图片验证码不同
if中的判断为
ture
则输出错误if
(!pagerandom.equals(random)
&&
request.getParameter("a")
!=
null)
{request.setAttribute("error",
"验证码错误");go("index.jsp",
request,
response);
}//错误后返回主页面
//如果相同
执行else
else
{//如果当前是会员则从会员表中查找账号密码符合条件的会员String
sql1
=
"";
if
(utype.equals("会员"))
{
sql1
=
"select
*
from
huiyuan
where
yonghuming='"
+
username
+
"'
and
mima='"
+
password
+
"'
";}
HashMap
map
=
dao.find(sql1);
if
(!map.isEmpty())
{
Iterator
iter
=
map.keySet().iterator();
……
//省略:将值赋值给session中的值,并使用迭代器对hashmap进行遍历并将value值赋值给key
}//如果正确进入主页面,错误提示错误
gor("index.jsp",
request,
response);
}
else
{request.setAttribute("error",
"账号或密码错误");
}
用户登录时,首先判断用户的类型,再通过session判断用户输入的验证码是否正确,最后通过sql语句判断账号密码是否正确。这样做的原因是为了系统的安全性,账号密码其中之一错误时,验证码也错误,若先提示账号或密码错误,那么验证码的存在就变得没有必要。登录成功、失败时进入电影票务系统主界面。1.1.2注册模块设计实现注册模块是为了给前台普通用户注册账号用来购票,而登录后台的账号需要通过管理员来进行添加。用户通过填写注册时需要的信息,系统自动判断用户输入信息的必要的格式是否正确。注册流程图如图1.5所示:图1.5注册流程图注册界面如图1.6所示:图1.6注册界面用户注册核心代码如下:public
String
insert(HttpServletRequest
request,
String
tablename,
HashMap
extmap)
{
//
设置添加时间为当前时间
extmap.put("addtime",
Info.getDateStr());
//
新建查询模块
Query
query
=
new
Query(tablename);
//
获取前台提交的数据将数据写成Map对象
HashMap
post
=
getParameterStringMap(request);
//
扩展的数据以覆盖方式写到提交的数据中
post.putAll(extmap);//
将数据生成sql
insert语句,并执行,可以查看输出控制台中执行的SQL语句
return
query.add(post);
}用户在前台页面进行注册后,系统会先提交form表单到当前的页面,JSP界面将数据处理成HashMap结构,在将HashMap结构转化成sql插入语句,使用jdbc将插入语句执行,执行成功后提示成功,回到主页面。1.1.3售票模块设计实现前台用户点击系统主界面上自己想看的电影,在电影信息下方点击购票,并在购票栏可以看到当前电影开场时间、散场时间、余票等信息。用户点击购票,这时若用户未登录,则提示用户未登录,用户登录才可以进行操作。若用户处于登录状态,点击购票按钮,则进入选座界面。用户选完座位后,点击提交,则座位预定成功,页面返回到电影信息界面。用户此时可以,选择其他操作,也可以选择在个人中心选择自己需要的方式去支付。图1.7购票流程图电影详情页的场次表如图1.8所示:图1.8电影场次列表选座界面中,红色的表示已经被预订或已经售出的座位,此时红色部分座位不可被选座;浅绿色的表示可以选择的座位;深绿色表示当前选择的座位。选座界面如图1.9所示:图1.9选座界面选座界面核心代码如下:
click:
function
()
{
//点击事件
if
(this.status()
==
'available')
{
//可选座……//省略:获取当前座位的行列并在界面右侧展示出来,且将座位数量加1
return
'selected';//状态变为已选中
}
else
if
(this.status()
==
'selected')
{
//已选中
$counter.text(sc.find('selected').length
-
1);//票数减1
$number.val(sc.find('selected').length
-
1);
$total.text(recalculateTotal(sc)
-
this.data().price);
//总价
//取消当前座位
$('#cart-item-'
+
this.settings.id).remove();//座位变为可选状态
return
'available';
}
else
if
(this.status()
==
'unavailable')
{
//已售出
return
'unavailable';//不可选中状态
}}});当我们选座时,可以通过点击事件来判断我们所选的座位是否可选,若已选中,则可以通过再次点击或点击右侧删除按钮的方式取消当前座位。此时,若购票完成,那么座位又将变为可选中状态,所已需要将已经售出的座位设为不可选中状态。已售座位设置核心代码如下:
//已售出的座位//查询订票信息表电影场次id是当前id且支付状态是待支付或已出票的选座信息
<%
List<String>
lis
=
Query.make("dingpiaoxinxi")
.where("dianyingchangciid"
,readMap.get("id"))
.where("dingpiaozhuangtai","in","待支付,已出票")
.getCol("xuanzuo");String[]
xxs
=
StringUtil.join(","
,
lis).split(",");%>//将已经有选座信息的座位设为不可选中状态<%
if(lis.size()>0){
%>
sc.get(<%=JSON.toJSONString(xxs)%>).status('unavailable');
<%
}
%>当在选座界面时,判断当前场次的id,读取与当前电影场次的订票状态及选座信息,若状态为待支付、已出票则座位变为不可选中状态。若用户取消订或进行退票,操作成功后座位变为可选中状态。个人中心订票信息如图1.10所示:图1.10个人订票信息查看支付界面如图1.11所示:图1.11支付界面1.1.4退票模块设计实现若订票状态处于未支付状态则可选择支付或者删除改变当前状态,选择支付则订票状态变为已支付,若选择删除,则取消当前的订票,订票信息将会从数据库中删除,那么订票的位置将会空出来。若当前时间未超过开场时间则出现退票操作,若时间超出则不出现退票操作。电影订票状态界面如下图1.12:图1.12电影订票状态界面在退票界面我们可以看到我们已经购票的信息,并可以通过退票备注来向后台反馈。退票界面如图1.13所示:图1.13退票界面退票代码如下://
获取当前需要执行的方法
String
a
=
Request.get("a");
if
(a.equals("insert"))
{
//
执行插入退票信息,表名:tuipiaoxinxiHashMap
ext
=
new
HashMap();
//
创建Map对象,主要用于插入扩展数据,和覆盖前台提交的数据String
charuid
=
new
CommDAO().insert(request,
"tuipiaoxinxi",
ext);
//
将数据提交到后台代码执行//将当前订票状态更新为已退票new
CommDAO().commOper("UPDATE
dingpiaoxinxi
SET
dingpiaozhuangtai='已退票'
WHERE
id='"
+
request.getParameter("dingpiaoxinxiid")
+
"'");
//更新退票的该场次电影剩余影票数量new
CommDAO().commOper("update
dianyingchangci
set
shengyupiaoshu=shengyupiaoshu+'"
+
request.getParameter("tuipiaozhangshu")
+
"'
where
dianyingbianhao='"
+
request.getParameter("dianyingbianhao")
+
"'");退票时,界面使用get方法获取订票信息表中的数据,若当前表中未存有某项信息,则通过ComDao文件下定义的find方法来根据sql语句获取数据,find方法是根据sql语句来获取一行数据。在退票信息表中,存放的是电影分类的id,通过电影分类的id来找到当前电影的分类中文名称。find方法主要代码如下:ResultSet
rs
=
st.executeQuery(sql);//获得结果集ResultSetMetaData
rsmd
=
rs.getMetaData();//获得列集while
(rs.next())
{
int
i
=
rsmd.getColumnCount();//获取列的个数
for
(int
j
=
1;
j
<=
i;
j++)
{
if
(!rsmd.getColumnName(j).equals("ID"))
{//将列值与ID比较
//不等时,若为空,将空值插入到hashmap中
String
str
=
rs.getString(j)
==
null
?
""
:
rs.getString(j);
if
(str.equals("null"))
str
=
"";
map.put(rsmd.getColumnName(j),
str);
}
else//相等时
map.put("id",
rs.getString(j));}1.1.5个人中心设计实现个人资料管理用户可以在个人中心选择对自己的个人资料进行修改,修改内容包括用户名、手机号码、性别、头像、性别。用户名可以保持不变。个人资料管理流程图如图1.14所示:图1.14修改个人资料流程图个人资料修改界面如图1.15所示:图1.15个人资料修改界面个人资料修改处理主要代码如下:
public
String
update(HttpServletRequest
request,
String
tablename,
HashMap
extmap)
{
Query
query
=
new
Query(tablename);//新建查询模块
HashMap
post
=
getParameterStringMap(request);//获取前台提交的数据将它写成Map对象
post.putAll(extmap);//扩展的数据以覆盖方式写到提交的数据中
if(query.save(post)){//判断数据是否生成sqlupdate语句
return
String.valueOf(post.get("id"));//获取当前id,并转化成字符串格式返回
}
return
"";
}用户修改与用户注册类似,a为当前用户进行的操作,在此处a=update。用户在页面操作后,执行更新模块,将数据处理成HashMap结构,再将它转变成sql语句通过jdbc更新。用户图片上传核心代码如下://获取粘贴板文件列表或者拖放文件列表items
=
e.type
==
'paste'
?
getPasteImage(e.originalEvent)
:
getDropImage(e.originalEvent);console.log(items);
if
(items)
{
var
len
=
items.length,file;//
将获取到的数据
使用ajax
方式提交给后台
while
(len--)
{
hasImg
=
true;
file
=
items[len];
if
(file.getAsFile)
file
=
file.getAsFile();
if
(file
&&
file.type
&&
/^image\//.test(file.type)
&&
file.size
>
0)
{
sendAndInsertImage(file);
hasImg
=
true;
}
}用户上传图片时,我们采用layer弹窗加载上传页面upload.html,并使用html5进行上传图片,上传后通过后端数据处理并保存到前端,把路径写到表单中。个人收藏前台用户通过在电影详情页,可以对电影进行收藏操作。收藏成功后收藏按钮消失显示已收藏。在个人中心,我的收藏可以看到,点击详情可跳转到电影的详情界面,点击删除则删除当前的收藏信息。收藏如图1.16所示:图1.16收藏个人中心我的收藏如下图1.17所示:图1.17我的收藏实现收藏功能代码如下:<%//查询表
if
(Query.make("shoucangjilu").where("xwid",
map.get("id")).where("username",
session.getAttribute("username")).count()
==
0)
{
%><button
type="button"
class="btn
btn-default"
onclick="location.href='jrsc.jsp?id=<%=
map.get("id")
%>&biao=dianyingxinxi&ziduan=dianyingmingcheng'">收藏
</button>
<%
}
else
{
%>
您已收藏!<%
}
%>查询收藏记录表,当收藏记录表中xwid与当前表的id相同,xwid为收藏电影对应的表的id,且用户名与当前用户名相同,并且值为0时,出现收藏按钮,当点击收藏按钮时,执行jrsc.jsp页面,将对应的收藏url、对应表名称、收藏的用户等写入收藏记录表。当用户已经收藏该电影时,收藏表里就会出现这条记录,次数就变为1,不符合出现收藏按钮条件。密码修改输入原来的密码,并验证原来的密码是否正确,若正确则判断输入的新密码是否为空,若为空则弹出提示。若正确,则在数据库中更新信息。密码修改界面如图1.18所示:图1.18密码修改在线留言前台用户通过在线留言来给后台用户反馈一些信息,后台用户通过阅读这些留言信息,可以选择对系统做出一些调整。前台用户可以在个人中心产看后台用户的回复信息。在线留言功能如下图1.19所示:图1.19在线留言回复查看如图1.20所示:图1.20回复查看留言删除主要代码如下://
获取一行数据
HashMap
map
=
Query.make("liuyanban").find(Request.get("id"));//
执行删除命令
new
CommDAO().delete(request,"liuyanban");
//输出提示并返回删除时的页面
out.println("<script>alert('删除成功');location.replace(document.referrer);</script>");
return;在填留言人框内,若得到username的属性值不为空,则留言人的值为得到的username属性值,若得到的属性值为空,则为空,发生错误。留言的实质是向数据库中插入数据,后台管理员在回复这些内容时就是更新数据。并且,在进入留言板界面时需要先验证用户是否登录。用户登录时间过久,session中内容清除,退出登录。人为退出登录时,点击退出按钮,退出按钮跳转到退出界面,退出界面使用session.invalidate()将session清空,并使用response.sendRedirect()重定向系统主界面,此时主界面变为无用户登录状态时的主页面。判断登录状态代码如下:<%
if(
request.getSession().getAttribute("username")
==
null
||
"".equals(
request.getSession().getAttribute("username")
)
){
%>//判断当前用户名是否为空,若为空则空,不为空则为当前用户名//为空时执行提示并跳转到login.jsp页面
<script>
alert('对不起,请您先登陆!');
location.href='login.jsp';
</script>1.2系统后台功能的实现1.2.1电影信息管理设计实现影院票务系统的后台电影信息管理功能主要有对影片分类与电影信息的添加、查询、修改、删除。电影信息的内容包括电影名称、分类、海报、时长、上映时间等。用户可以通过电影的编号、分类、名称、状态来查询电影信息,并可以通过按影票价格、影片时长、浏览量来对内容进行排序。影片分类添加如图1.21所示:图1.21影片分类添加用户可以通过名称进行查询,得出自己想要的分类内容进行修改。影片分类修改、查询、删除如图1.22所示:图1.22影片分类的修改、查询、删除添加电影信息时,系统会判断电影的主要信息:时长、名称、价格是否为空,若为空则弹出提示。电影信息的上架状态控制电影信息是否在主页面展示。电影信息添加界面如下图1.23所示:图1.23添加电影信息界面管理员页可以按名称、编号、影院等来查询电影的信息,并可以进行添加、删除、修改等操作,成功操作之后都会弹出提示信息来验证操作的是否执行。电影信息修改界面如图1.24:图1.24修改电影信息界面电影信息更新主要代码如下:
//
执行更新电影信息模块else
if
(a.equals("update"))
{//
创建Map对象,主要用于插入扩展数据,和覆盖前台提交的数据
HashMap
ext
=
new
HashMap();
//
将前台编辑器内容的图片远程下载下来并保存在本地中ext.put("xiangqing",
util.DownloadRemoteImage.run(Request.get("xiangqing")));//
将数据提交到后台代码执行
String
charuid
=
new
CommDAO().update(request,
"dianyingxinxi",
ext);
if
(Request.get("referer").equals("1"))
{
out.println("<script>alert('保存成功');location.replace(document.referrer);</script>");
}
执行更新电影信息时,在电影信息处理界面执行更新模块,创建主要用于覆盖前台提交数据和插入扩展数据的map对象,将前台编辑器内容的图片远程下载下来并保存在本地中,将数据提交到后台代码执行。后台通过sql语句更新。1.2.2电影场次管理设计实现电影场次的管理与电影信息管理类似,但电影场次管理只能修改电影的场次信息、开散场时间、影院信息等。电影场次列表如图1.25:图1.25电影场次列表电影场次修改详情页如图1.26:图1.26电影场次修改电影场次包含影院、座位具体位置、影票价格播放厅等信息。电影场次查询代码如下://订票编号模糊查询if(request.getParameter("dianyingbianhao")
!=
null
&&
!"".equals(
request.getParameter("dianyingbianhao")
)){
where+="
AND
dianyingbianhao
LIKE
'%"+request.getParameter("dianyingbianhao")+"%'";
}
//查询该分类下的电影
if(request.getParameter("fenlei")
!=
null
&&
!"".equals(
request.getParameter("fenlei")
)){
where+="
AND
fenlei
='"+request.getParameter("fenlei")+"'";
}
//电影名称模糊查询
if(request.getParameter("dianyingmingcheng")
!=
null
&&
!"".equals(
request.getParameter("dianyingmingcheng")
)){
where+="
AND
dianyingmingcheng
LIKE
'%"+request.getParameter("dianyingmingcheng")+"%'";
}
……//省略按其他的条件进行查询的语句管理员在管理电影场次时,可以通过电影编号、名称、分类、影院、状态等来进行查询,准备的找到管理员想要进行管理的电影场次。在电影场次管理界面上,通过sql查询语句,来显示电影的各项场次信息。当用户需要进行增删改查操作时,首先获取需要执行的模块,再去执行相应的模块。电影场次处理代码如下:
String
a
=
Request.get("a");
//
获取当前需要执行的方法if
(a.equals("insert"))
{
//
执行插入电影信息模块……//省略:插入过程//
插入数据完成,弹出页面并跳转到指定页面
if
(!Request.get("referer").equals(""))
{
//
提交了跳转地址,则跳转到这个地址中
out.println("<script>alert('添加成功');location.href='"
+
Request.get("referer")
+
"';</script>");
}
else
{
//
没提交跳转地址则返回到上一页中out.println("<script>alert('添加成功');location.href=document.referrer;</script>");}
}
else
if
(a.equals("update"))
{
//
执行更新电影信息……//省略:更新过程
}return;}
else
if
(a.equals("delete"))
{//执行电影信息删除//
获取一行数据HashMap
map
=
Query.make("dianyingxinxi").find(Request.get("id"));
new
CommDAO().delete(request,
"dianyingxinxi");
//
执行删除命令
out.println("<script>alert('删除成功');location.replace(document.referrer);</script>");
return;}1.2.3影院信息管理设计实现影院信息管理是为了让前台用户选择购票的具体影院,影院信息内也可对影厅信息进行添加、修改、删除操作。影厅信息包括:影厅名称、座位有多少行列、影厅编号。影院信息添加如图1.27:图1.27影院信息添加影院信息列表如图1.28:图1.28影院信息列表播放影厅的添加如图1.29:图1.29添加播放影厅播放影厅列表如图1.30:图1.30播放影厅列表1.2.4账号管理设计实现账号管理分为管理员账号管理和前台会员账号管理。管理员账号只有后台用户才可看到,后台用户可以对管理与前台会员账号进行增删改查。添加会员与前台用户注册时相同,都需要信息正确才可将信息正确上传到数据库中。但后台用户不可更改前台用户的密码,同样后台用户仅可修改当前登录用户的密码,并在修改时需要核实密码是否正确。管理员可以通过账号、姓名、性别等来进行查询。管理员列表如图1.31:图1.31管理员列表管理员添加如图1.32:后台对前台会员修改界面如图1.33:图1.32管理员账号添加图1.33后台对前台会员修改会员列表如图1.34:图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公务员培训考试题库与解析
- 施工人员安全防护用品使用流程
- 农产品质量安全检测技术介绍
- 项目经理安全责任及考核细则
- 2026年办公自动化流程再造降本增效方案
- 2026年医疗领域患者服务优化方案
- 2026年零售业供应链仓储物流成本压缩增效项目方案
- 2026年员工技能培训提升工作效率方案
- 2026年供应链成本控制降本增效项目分析方案
- 面向智能制造2026年升级方案分析
- 2026年普洱市墨江县中医医院招聘编外人员(11人)笔试备考试题及答案解析
- 2026中国电信四川公用信息产业有限责任公司社会成熟人才招聘备考题库附答案详解
- 码头安全专题培训内容
- GB/T 46559-2025二氧化碳地质封存场地评价指标体系
- DB11∕T 2490-2025 文物保护单位无障碍设施设置规范
- 2026年数据服务企业数据交易合规培训课件与数据变现风控
- 填饲对鹅肝胆固醇合成相关基因表达的影响:基于分子机制与生理响应的研究
- CJ/T 510-2017城镇污水处理厂污泥处理稳定标准
- 视频旋转滴方法在界面扩张流变性质研究中的应用
- 传统医学师承关系合同书
- 血流动力学不稳定骨盆骨折急诊处理
评论
0/150
提交评论