版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
系统设计3.1系统总体设计本课题使用用户端和管理员端两种角色设计系统,用户端的主要功能有,用户注册登录,电影浏览、详情展示、在线选座、用户订单、订单退票、个人中心等,管理员端的主要功能有电影院管理、影厅信息管理、用户评论管理、电影销量统计、电影排片管理、用户购票管理、用户账号信息管理等。(1)用户端功能用户登录:用户通过注册的账号和密码在登录页面中进行验证登录进入系统购票。用户注册:用户注册使用登录名称、密码、邮箱等信息进行快速注册,注册成功后可在个人中心上传头像等。网站首页:首页显示正在上映的影片、即将上映的影片和影片销量排行榜。影院影厅:选择购买的电影后可以在详情页面选择具体影院和影院的影厅。可视化选座:实现影厅内的座位可视化展示用户可以查看已售出和未售出的座位,并进行选座。在线支付:系统会根据影片的售价计算出购买的总价,实现在线支付功能。发布影评:用户具有写影评的功能,方便其他用户参考。用户订单:实现对购买的电影票查询和在线退票的功能。个人中心:对个人账号信息修改、头像的上传和账号密码的变更。(2)管理员端功能管理员登录:管理员是通过系统设置固定账号密码进行登录,登录时验证是否有管理员角色权限。用户管理:前台用户注册的账号等基础信息,管理可以查询或修改用户资料。影院管理:影院的封面、名称、地址等信息管理员可以添加影院、修改影院和删除影院。影厅管理:影厅和影院之间属于一对多的关系,一个影院里包含了多个影厅信息。订单管理:用户在线购买电影票后会按座位号影片管理:对影片进行上映或者下架,管理影片的基础数据,如电影封面、演员、上映时间等。场次管理:电影场次可以设置电影在影厅放映的时间以及购票价格等内容。评论管理:用户发布的电影影评管理员可以对不良评论进行删除。票房统计:通过可视化数据分析实现票房前十的电影进行排名统计。根据上述的功能可以画出功能模块图,如图3.1所示。图3.1系统功能结构图3.2数据库设计3.2.1概念结构设计数据库的概念设计通过电影购票系统的用户需求分析,设计出系统的实体之间的联系,通过实体联系E-R图可以描述出电影购票系统的数据库逻辑关系,系统采用MySQL数据设计表属性,表之间通过主外键实现一对多或多对多的关系。E-R实体联系图如下图4.2所示:根据电影购票系统的实体属性可以将系统划分为以下多个实体:电影实体的属性有主键、电影名称、演员、电影封面、演员、电影播放时长、上映时间、上映地区等。影院实体的属性有主键、影院名称、影院地址等。(3)影厅实体的属性有主键、影厅名称、所属影院。(4)用户信息实体的属性有主键、用户昵称、登录名、登录密码、联系邮箱、用户类型等。(5)电影订单实体的属性有主键、用户主键、电影场次、座位号、购买价格、购买电影、所属影院和影厅等。(6)电影评论实体的属性有主键、评论者、评论内容、发布时间、所属电影等。(7)电影场次实体的属性有主键、价格、播放时间、影厅、所属电影等。图3.2系统E-R图3.2.2数据库表设计电影购票系统数据库表主要用于用户账号信息、电影信息、影院信息、影厅信息、电影场次、用户订单、用户评论等信息的存储。数据库表设计介绍如下:(1)注册用户表用来存在前台注册的账号信息和管理员的账号信息,包含的表属性有主键id、用户账号、账号密码、联系邮箱、用户类型、头像等。注册用户表结构如下表3-1所示。表3-1t_user(注册用户表)属性数据类型字段长度是否可为空属性说明idint10主键idnick_namevarchar20用户账号pwdvarchar20账号密码emailvarchar30联系邮箱rolevarchar10用户类型user_imgvarchar255yes头像(2)影院表用来存储电影院的基本信息,包含的属性有主键、影院名称和影院地址等。影院表结构如下表3-2所示。表3-2t_cinema(影院表)属性数据类型字段长度是否可为空属性说明idint11主键namevarchar20影院名称addressvarchar255yes影院地址(3)电影评论表用来记录用户发布的电影的影评信息,包含的属性有主键用户id、评论信息、电影主键id、发布时间等。电影评论表结构如下表3-3所示。表3-3t_comment(电影评论表)属性数据类型字段长度是否可为空属性说明idint11主键u_idint11用户idcontextvarchar255评论信息movieIdint11电影主键idcreate_timedatetime0发布时间(4)影厅表用来存储影院中的影厅的信息,一个影院可以对应多个影厅,包含的属性有主键、影厅编号、影厅座位数、电影院id等。影厅表结构如下表3-4所示。表3-4movie_hall(影厅表)属性数据类型字段长度是否可为空属性说明idint11主键namevarchar255影厅编号volumeint11影厅座位数cine_idint11电影院id(5)电影表用来存储电影的信息,电影上架后可以在首页显示给用户浏览,包含的属性有主键、电影名称、演员、导演、详情介绍、电影时长、类型、封面、是否上架。电影表设计结构如下表3-5所示。表3-5movie_film(电影表)属性数据类型字段长度是否可为空属性说明idint11主键namevarchar255电影名称performervarchar20演员m_directorvarchar20导演m_detailvarchar2000yes详情介绍m_durationvarchar10电影时长m_typevarchar20类型movie_picvarchar255封面statusint10是否上架(6)用户订单表用来记录用来购买的电影票信息,包含的属性有主键、购买人、电影场次、座位号、状态、总价、购买时间等。用户订单表计结构如下表3-6所示。表3-6t_order(用户订单表)属性数据类型字段长度是否可为空属性说明idvarchar20主键user_idbigint10购买人num_idbigint10电影场次positionvarchar20座位号stateint10状态total_priceint10总价create_timedatetime0购买时间(7)电影场次表用来记录电影院的电影播放场次信息。包含的属性有主键、影厅、电影主键、电影播放时间、购买价格、剩余座位等。电影场次表计结构如下表3-7所示。表3-7film_schedule(电影场次表)属性数据类型字段长度是否可为空属性说明idvarchar10主键hallbigint10影厅moviebigint10电影主键start_timevarchar20电影播放时间priceint10购买价格schedule_surplusint10yes剩余座位4系统实现4.1系统功能实现电影购票系统系统设计功能符合用户需求,设计时考虑用户体验和系统性能,在满足用户功能的同时还满足系统的安全性,充分保证了系统的数据安全和保障,以下将介绍系统的功能实现。4.1.1用户注册用户未注册时只能在电影系统首页浏览电影信息,购买电影票需要注册成为系统用户才可以购买,点击登录页面中的注册按钮显示注册表单,在表单中只需要输入账号、邮箱和密码即可实现快速注册,其他信息注册成功后可以在个人中心进行补充,点击注册按钮会验证用户输入的用户名是否已经存在,在未存在时才会注册成功,否则将提示用户注册失败。用户注册页面如下图4.1所示。图4.1用户注册页面4.1.2用户登录用户在首页点击登录时将跳转到login.jsp页面中,在页面中通过账号和密码来验证登录,页面中通过实现form表单的提交,通过表单action来请求登录接口,当接口接收到用户提交的账号信息时首先会通过账号来查询数据库user表,当登录账号不存在时不在继续以下步骤,直接提示用户用户存在,否则将继续验证密码是否匹配,密码匹配将提示登录成功并跳转到index.jsp页面。用户登录页面如下图4.2所示。图4.2用户登录页面4.1.3用户首页用户进入首页index.jsp页面会查询管理员上架的热播电影和即将商家的电影,在后台管理员通过设定电影的上架的时间,当上架的时间大于等于当前时间时影片将展示在热播电影的板块,并且可以根据电影的分类进行快速的检索电影,电影的票房排行榜通过购买的总金额进行排序,在首页展示前十的电影销量排行榜。用户首页页面如下图4.3所示。实现电影渲染的代码如下:@RequestMapping("getHomeMovies") @ResponseBody publicHashMap<String,object>getHomeMovies(){ HashMapmaps=newHashMap(); List<Movie>list1=moviesService.getMovies(); List<Movie>list2=moviesService.getTopMovies(); Stringtype[]=getList(); ArrayList<Object>types=newArrayList<Object>(); for(inti=0;i<types.length;i++){ List<Movie>movieData=tmovieService.getMoviesType(types[i]); HashMaptypemaps=newHashMap(); typemaps.put(type[i],box); typemaps.add(typemaps); } maps.put("codes",0); maps.put("size",list.size()); maps.put("data2",list1); maps.put("data1",list2); maps.put("type",typemaps); returnmaps; }(a)(b)图4.3用户首页页面(a)热播电影;(b)即将上映和电影排行4.1.4电影详情电影的详情页面是由用户在主页面电影的列表中点击某一个电影通过电影的movie_id查询电影的详情和电影的影院列表,通过查询电影表和影院表,影院和电影之间通过主外键movie_id进行关联属于一对多的关系,通过movie_id查询出多个影院list集合,在页面中通过js实现列表的循环展示。电影详情页面如下图4.4所示。电影详情的代码如下:functionmovieList(data){varmovieList=$(".movie-list");varmovieLength;varmoviePrice=[];varminmoviePrice=[];for(vari=0;i<data.movieList.length;i++){varscheCount=0;for(varj=0;j<data.movieList[i].hallList.length;j++){if(data.movieList[i].hal[j].movieList.length==0){scheCount++;}}if(scheCount==data.cinemaList[i].hal.length){data.movieList.splice(i,1);}}cinist=data.cinist.length;for(varc=0;i<data.cinist.length;c++){TPrice[i]="";for(varj1=0;j1<data.cinist[c].hal.length;j++){for(varp=0;a1<data.cinist[c].hallList[j1].scheList.length;a1++){TPrice[c]+=data.cinist[i].hal[j1].scheList[a1].sprice;TPrice[c]+=",";}}TPrice[i]=TPrice[i].substr(1,TPrice[i].length-2);}}图4.4电影详情页面4.1.5用户评论用户在电影详情页面可以点击“我要评论”按钮在弹出的窗口中输入对电影的影评,点击发布按钮将判断当前用户是否登录,未登录状态则提示用户需要登录才能发布评论,在登录的状态下将用户userId和电影movie_id保存到评论表中,查询时通过movie_id可以关联查出评论列表list集合,用户评论页面如图4.5所示。图4.5用户评论页面4.1.6电影筛选电影的筛选页面展示了电影的全部分类,点击分类可以查看分类下的所有电影,通过type值和电影表中的type字段相匹配,一个电影的分类可以包含多个类型,并可以通过热度排序,热度通过电影的销售排行来由高到低排序,上映时间排序通过时间正序排列,评价排序通过影片的评价次数倒叙排列,影评高的排在前面。电影筛选页面如下图4.6所示。电影筛选的代码如下:$.ajax({type:"post",url:url+"/movie/sortAllMovies",data:{order:order},dataType:"json",success:function(data){for(vari=0;i<data.count;i++){list.append("<li><divclass=\"item\"><ahref="./buy.jsp?id="+data.data[i]id+"\"><divclass=\"poster\"><imgsrc=\""+data.data[i].pic+"\"></div></a>"+"<divclass=\"action-sale\"><a>购票<a/></div><divclass=\"movie-ver\"></div>"<divclass=\"channel-title\"title=\""+obj.data[i].movie_cn_name+"\">"+</div>"+"<divclass=\"orange\"><iclass=\"integer\"></i></div>"+"</li>"},error:function(){alert("查询失败");}图4.6电影筛选页面4.1.7电影影厅一个影院中包含多个影厅,通过影院的主键id查询出影院中包含的多个影厅,影厅和影院属于一对多的关系,请求数据库影厅表返回影厅的list集合,在通过json的格式返回到页面端。电影影厅页面如下图4.7所示。电影影厅的代码如下:publicHashMapgetHallList(@RequestParam(value="page",value="1")Integerpage,Stringname){ Page<Hall>info=hallService.getlistPage(page,10,name); HashMapdata=newHashMap(); data.put("codes",0); data.put("count",info.getcount()); List<Hall>list=info.getList(); for(Hallhall:list){ Cinemaentity=cinemaMapper.getById(hall.getid()); if(null!=entity){ hall.setName(entity.getName()); } } data.put("datas",info); returndata; }图4.7电影影厅页面4.1.8电影选座电影选座页面通过影厅中设置的座位数展示所有的座位号,座位号通过二维数组的设计模式,列如“[1,1]”代表第一排第一列,通过三种颜色来区分座位的状态,分别有可选座位、已售座位、已选座位三种,已售的座位是不能被选中的,通过选择座位后自动计算订单的价格,点击确认选座后将跳转到订单支付页面进行在线支付,支付成功后在订单管理中可以查看购票的电影票。电影选座页面如下图4.8所示。图4.8电影选座页面4.1.9购票订单购票订单在用户登录的状态下,点击个人中心按钮后在购票订单菜单中可以查看购票记录,当登录状态下通过session中保存的用户userId来查询订单“t_order”使用select*fromt_orderwhereuserId=?orrderbytimedesc实现购票订单的时间倒序的排列方式,未过期的订单可以申请退票,申请后由管理员审核才可以退票,超时的订单申请退票会提示用户申请失败。购票订单页面如图4.9所示。购票订单的代码如下:for(varj=0;j<data.length;j++){varstate;switch(obj.data[i].order_state){case0:state="退票申请";break;case1:state="已结束";break;case2:state="退票完成";break;}text="<divclass=\"box\">"+"<spanclass=\"head\">"+"<divclass=\"date\">"+data[i].time+"</div>"+"<divclass=\"id\">订单号:"+data[i].id+"</div>"+"<divclass=\"delete\">退票</span>"+"</div>"+"</div>";orderList.append(text);}图4.9购票订单页面4.1.10个人资料点击个人资料菜单,通过登录会话session的userId查询用户user表,将user表的数据映射到实体类user.java中,通过js将实体类显示到页面中,用户修改后点击保存按钮通过数据库updateSQL语句来修改用户信息。个人资料页面如图4.10所示。个人资料代码如下:$.ajax({type:'post',data:{userId:userId,name:name,pic:pic}url:"/user/updateUser",success:function(data){varobj=eval('('+data+')');if(data.code==0){layer.alert('修改成功!',{icon:0,offset:clientHeight/5},function(){window.location.reload();});图4.10个人资料页面4.1.11修改密码用户修改密码时需要在登录的状态下才可以进入修改密码页面,否则将跳转到登录页面中,通过输入旧密码进行验证是否是本人修改,当输入的旧密码验证错误时将提醒用户旧密码错误,修改密码时需要输入两次新密码防止用户一次输入错误密码,点击保存将请求UserController.java控制器中modifyUserPwd接口进行修改,修改密码页面如下图4.11所示。图4.11修改密码页面4.2用户管理用户管理信息是前台注册用户的账号信息管理,管理员登录后在后台的管理中心通过请求UserController.java控制器中findAllUser方法实现数据的分页请求,控制器中接收page对象用来计算每页的数据条数,查询后通过注解@ResponseBody将list集合以JSON的格式返回到前端页面内进行数据展示,用户管理页面如下图4.12所示。图4.12用户管理页面4.2.1影院管理影院管理列表的查询通过请求CinemaController.java控制器的findCinemaList()方法来实现数据列表的查询,数据通过cinemaService接口查询Cinema表,并通过SQL语句limitpage,pageSize来控制数据的分页,影院的添加通过form表单进行数据提交,数据保存接口addCinemat(Cinematcinemat),影院的删除执行deleteCinema(id)通过主键id来删除影院。影院管理页面如下图4.13所示。影院管理的代码如下:publicPag<Cinema>getCinemaPage(Integerpage,IntegerpageSize,Stringname){ helper.Page(page,pageSize); List<Cinema>datas=newArrayList<Cinema>(); if(name!=null&&!name.equals("")){ datas=cinemaMapper.getList(keyword); }else{ datas=cinemaMapper.getList(); } Pag<Cinema>result=newPage<Cinema>(datas); returnresult; }图4.13影院管理页面4.2.2影厅管理影厅的数据管理添加时通form表单录入影厅名称和选择对应的影院即可,在表中通过name和cinema_id来保存数据,每一个影院cinema_id可以查询出多个影厅,也就是影院表的主键id来关联影厅表的cinema_id字段实现数据的查询,修改时通过在表格列表中点击影厅名称即可实现修改操作,删除影厅则通过主键id执行数据库delete删除语句。影厅管理页面如下图4.14所示。图4.14影厅管理页面4.2.3电影管理电影信息的管理通过管理实现对电影的添加、修改和删除下架,添加时点击“添加电影”按钮,在弹出的窗口中录入电影的基础信息,如演员、电影名称、电影介绍、电影封面上传等,点击保存按钮,调用MovieController.java控制器中的addMovie()来实现电影的添加,电影修改时点击修改按钮通过主键id获取电影的视图信息来填充表单,修改后执行update语句实现数据库表的修改,电影下架则执行删除delete语句删除数据库中电影信息。电影管理页面如下图4.15所示。图4.15电影管理页面4.2.4场次管理电影场次就是电影的排片,一部电影肯定存在多个放映时间,而每个时间端放映的影厅各不相同,所以通过给影片建立场次,添加场次通过ScheduleController.java中的addSchedule方法包含影院的名称、影院地址、影厅以及播放的时间和购票的价格。场次管理页面如下图4.16所示。图4.16电影管理页面4.2.5订单管理用户购票后会生成对应的订单,订单号按当前时间生成,每一个座位号对应一个订单,订单的数据查询“t_order”表,请求OrderController.java控制器findAllOrders()方法,实现订单的查询,订单按时间倒序的方式排序,点击退单审核通过订单表中的state字段类筛选退款订单,订单的状态包含未使用、退款申请中、已完成和已退款四个状态。订单管理页面如下图4.17所示。图4.17订单管理页面4.2.6票房统计电影票房统计采用echarts.js插件,通过对电影销量的前十名进行排序,电影的总金额存储在订单表中,通过SQL语句实现电影的分组排序将最高销售额的电影通过SQLdesc语句排序后但会到前端页面中,echarts通过对x轴和y轴进行数据的填充即可展示排行榜柱状图。电影饼图分析通过计算每个种类的电影占总销售额的百分比,并将百分比存入数组交给echarts插件来渲染图表。票房统计页面如下图4.18所示。票房统计的代码如下:varecharts=$("#echarts");echarts.append("<divid=\"echarts\"></div>")EchartsV=document.getElementById(echarts)varmyEcharts=echarts.init(EchartsV);options={title:{text:'电影排名统计',},tip:{trigger:'axis'},xAxis:[{type:'value',boundaryGap:[1,1.01]}],yAxis:[{type:'category',data:movieList,}],series:[{type:'bar',data:listData,color:'#11a380'},]};myEcharts.setOption(options);图4.18电影统计页面结论本课题重选题前期进行文献查阅,根据借鉴前人的设计理念和当前电影购票系统的现状进行需求分析,设计了基于web的影院票务及会员管理系统,分别对系统功能和数据库进行设计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年保险反欺诈知识图谱构建方案
- 播音稿题目及答案
- 绿色食品油菜籽
- 2026春北师大版小学数学五年级下册第二单元《长方体二》测试练习卷含答案
- 符号数在自动驾驶中的多车协同控制方法
- 纸电融合批发市场分析
- 2025-2030中国卷边机市场深度调研及发展策略研究报告
- 2026中国户外运动水壶市场竞争创新与未来发展潜力研究报告
- 2025-2030中国农机行业供需趋势及投资风险研究报告
- 2026全球与中国乙醇汽油行业销售状况及投资盈利预测报告
- 学堂在线 雨课堂 学堂云 网球技术动作入门 章节测试答案
- 2026广东惠州市自然资源局招聘编外人员4人笔试参考题库及答案解析
- 养生食膳行业分析报告
- 2026中国中原对外工程有限公司校园招聘笔试历年难易错考点试卷带答案解析
- DB42∕T 2523-2026 党政机关办公用房面积核定工作规范
- 2026南京六合科技创业投资发展有限公司招聘9人笔试备考试题及答案解析
- 2026济南市第七人民医院公开招聘派遣制工作人员(2名)考试参考试题及答案解析
- 成都合资公司管理手册模板
- 二类医疗器械零售经营备案质量管理制度
- (2026年)肩峰下撞击综合征的诊断与治疗课件
- 2026年中考英语必考3500个高频词汇
评论
0/150
提交评论