文末获取资源,收藏关注不迷路
项目介绍
人们越来越依赖网络来解决问题,该系统可在线上让用户随时随地解决购票问题。避免购票程序繁琐、排队时间长、选择影片困难等问题。在界面设计上,系统的界面直观地向用户呈现了每个模块的功能,且操作简单易上手。同样系统大众化推广也很简单方便,不受限。互联网技术的成熟和普及,势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营,互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容,再加上电影行业的发展,如此繁荣吸引了越多越多的人观影。可以让选择观影的用户享受到更好的购票观影体验,解决线下购票的繁琐过程,线上购票无疑是直击痛点的解决方案。一套完备的电影网络购票系统可以实现让用户又快又准找到自己喜欢的影片,一键购票、无痛取票,同时也是从侧面促使电影经济的稳定发展。
本设计采用Vue,ava、CSS等前端技术完成前端页面设计,采用Springboot框架、MySQL整合完成后台设计,不光方便用户购买电影票,还让管理员对整个影院的管理。本文首先阐述整个电影网络购票的背景,然后对系统的需求分析,给出整个系统的概要设计和数据库设计,最后展示电影购票系统的实现。
系统需求描述
系统功能需求分为用户使用功能和系统管理功能,其中用户包括未注册和已注册。
1、未注册用户因权限限制仅包含浏览查看评分排行、热映电影、电影资讯等信息。
2、已注册用户使用功能包括用户浏览评分排行、热映电影、电影资讯,进行用户选座、购买电影票、修改个人信息、余额充值、在线留言等功能。
3、系统管理功能包括管理员管理用户信息、电影类型、热映电影、评分排行、留言板信息、订单信息、系统信息等功能。
功能性需求分析
根据对本网站的功能需求分析,将通过参与系统使用的三个不同视角展现系统主要功能。
现在确定本系统用例模型有三种,分别是游客、注册用户和系统管理员。下面分别对这三个角色的功能进行描述。
2.2.1游客
游客是未注册的用户,他们可以浏览热映电影和评分排行,如需购买电影票,必须先注册成为网站用户。游客浏览本网站时,受限只可浏览网站的信息。进入网站首页时可以查看评分排行、热映电影和电影资讯,可以点击上方的导航栏上的电影进一步查看所有的电影。点击任意电影会出现该电影的详细信息,包括该电影的排片情况、选座购票、评论等。但游客仅限查看,无法评论、收藏、选座和购票。
2.2.2用户
已在本网站注册过的用户是经网站合法认证的用户。登录网站后可以浏览评分排行、热映电影、购买电影票、对影片评论、收藏、进行订单支付等。
用户注册登录系统的全部功能就会对用户全部开放,即可顺畅浏览整个系统,网站提供了两个入口供用户选择自己观影的影片并购买。首先是通过首页和热映电影两个入口,点击相应热映电影过后,会出现该电影详细的信息,用户选择适合自己的排片日期后可选座购票,选定后系统统计总价钱,若未在规定时间内购票则系统将自动取消本次订单,点击立即支付后系统扣除相应的金额至此选座购票完毕。每完成一次购票后,系统所生成的订单信息、余额信息会更新到个人中心中,可在个人中心中删除本次订单。用户可以对热映电影进行评论,相应信息都会个人中心查看。
2.2.3系统管理员
系统管理员主要负责系统的后台管理工作,系统管理员作为整个影院的核心人物,拥有对多种实体的不同操作权限。在用户管理中,可以增加、编辑、删除用户的信息。热映电影管理中管理员可以添加新的热映电影,可以对现有的的有效性进更改或是删除。为了防止热映电影过多编辑起来费事增加了查询热映电影的搜索栏。电影管理中还有查看评论的功能,后台管理员可以删除恶意评论。订单管理模块,管理员可以查看所有订单,并可以详细的查看到此订单的座位、场次和购买用户的电话。
明确整个系统中三个角色不同的功能后,这三者功能数据的联动就将整个系统紧密的连接在一起。
技术介绍
1、管理员账号:abo 密码:abo
2、开发环境为Eclipse/idea,数据库为mysql 使用java语言开发。
3.配置好Tomcat并点击启动按钮即可运行
4.数据库连接src\main\resources\application.yml中修改
5.maven包版本apache-maven-3.3.9.
开发语言:Java
框架:Springboot
前端框架:vue.js
JDK版本:JDK1.8+
服务器:tomcat8+
数据库工具:Navicat
开发软件:idea 支持eclipse
支持定做:Java/PHP/Python/Android/小程序/Vue/爬虫/C#/Asp.net
Springboot是当前最流向的一个框架,它的配置更加的简单,使开发变得更加的简单迅速。
Springboot的基础结构共三个文件,具体如下:
src/main/java:程序开发以及主程序入口;
src/main/resources:配置文件;
src/test/java:测试程序。
ssm的数据库配置默认支持两种格式的配置文件
1,application.properties
2,application.yaml
项目界面
关键代码
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
目录
目 录
目 录 III
1 绪论 1
1.1 研究背景 1
1.2 目的和意义 1
1.3 论文结构安排 2
2 相关技术 3
2.1 Springboot框架介绍 3
2.2 B/S结构介绍 3
2.3 Mysql数据库介绍 4
3 系统分析 6
3.1 系统可行性分析 6
3.1.1 技术可行性分析 6
3.1.2 经济可行性分析 6
3.1.3 运行可行性分析 6
3.2 系统性能分析 7
3.2.1 易用性指标 7
3.2.2 可扩展性指标 7
3.2.3 健壮性指标 7
3.2.4 安全性指标 8
3.3 系统流程分析 8
3.3.1 操作流程分析 8
3.3.2 登录流程分析 9
3.3.3 信息添加流程分析 10
3.3.4 信息删除流程分析 11
4 系统设计 12
4.1 系统概要设计 12
4.2 系统功能结构设计 12
4.3 数据库设计 13
4.3.1 数据库E-R图设计 13
4.3.2 数据库表结构设计 14
5 系统实现 17
5.1用户部分功能17
5.2 管理员部分功能展示
6 系统测试
6.1 系统测试的特点
6.2 系统功能测试
6.2.1 登录功能测试
6.2.2 添加类别功能测试
6.3 测试结果分析
结 论
致 谢
参考文献