👉文末查看项目功能视频演示+获取源码+sql脚本+视频导入教程视频
1 、功能描述
电影订票管理系统8拥有两种角色
管理员:用户管理、电影管理、场次管理、放映厅管理、评论管理、订单管理等
用户:登录注册、购票选座、评论、评分排序、订单管理
1.1 背景描述
电影购票系统是一个基于网络的平台,旨在让用户能够方便快捷地选择和购买电影院的电影票。这一系统应运而生,主要是因为互联网技术的发展和人们对便利购票方式的需求。
随着互联网的普及和移动设备的普遍应用,人们渐渐习惯于使用手机或电脑完成日常活动,包括购物、订餐以及预订各种服务。因此,传统的电影票购买方式已经无法满足大众对便捷性和快捷性的需求。
电影购票系统通过提供在线选座、支付和取票等功能,使用户能够不再排队等候,而是通过几个简单的步骤就能轻松完成购票。此外,该系统还提供了电影信息、放映时间表、座位选择和价格比较等多种功能,让用户可以更好地了解并计划观影行程。
另外,对于电影院来说,电影购票系统也有助于提高客户满意度、提升销售效率,并且能够更好地管理座位资源和票务信息。
总的来说,电影购票系统的出现改变了传统的购票方式,为用户提供了更加便捷和高效的购票体验,同时也促进了电影院的数字化转型和业务发展。
2、项目技术
后端框架: Servlet
前端技术:jsp、css、JavaScript、JQuery
2.1 MVC
MVC(Model-View-Controller)框架是一种用于构建Web应用程序的软件架构模式。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据逻辑,包括数据库交互、数据处理和业务规则。视图负责用户界面的呈现,将数据以易于理解的形式展示给用户。控制器充当中间人,接收用户输入并调用相应的模型和视图来完成用户请求。MVC框架使代码分离,提高了应用程序的可维护性和扩展性。开发人员可以独立地修改模型、视图或控制器,而不会影响其他部分。这种分离也有助于多人合作开发项目。MVC框架还促进了前后端的分离,使前端工程师和后端工程师能够更好地协同工作,从而提高了开发效率。
2.2 mysql
MySQL是一款Relational Database Management System,直译过来的意思就是关系型数据库管理系统,MySQL有着它独特的特点,这些特点使他成为目前最流行的RDBMS之一,MySQL想比与其他数据库如ORACLE、DB2等,它属于一款体积小、速度快的数据库,重点是它符合本次毕业设计的真实租赁环境,拥有成本低,开发源码这些特点,这也是选择它的主要原因。
3、开发环境
- JAVA版本:JDK1.8(最佳)
- IDE类型:IDEA、Eclipse都可运行
- tomcat版本:Tomcat 7-10版本均可
- 数据库类型:MySql(5.7、8.x版本都可)
- maven项目:否
- 硬件环境:Windows
4、功能截图+视频演示+文档目录
4.1 登录
4.2 前端
管理员后台
4.4 文档目录
5 、核心代码实现
5.1 配置代码
package com.movie.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcUtil {
private static String url = "jdbc:mysql://localhost:3306/movie?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true";
private static String username = "root";
private static String password = "root";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
5.2 其它核心代码
package com.movie.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.alibaba.fastjson.JSON;
import com.movie.bean.User;
import com.movie.service.UserService;
import com.movie.util.SystemParamsUtils;
@WebServlet("/user")
public class UserServlet extends HttpServlet{
private UserService userService;
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
userService = new UserService();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter("method");
if("login".equals(method)){
login(req,resp);
}else if("logout".equals(method)){
logout(req,resp);
}else if("register".equals(method)){
register(req,resp);
}else if("updateUser".equals(method)){
updateUser(req,resp);
}else if("modifyUserPwd".equals(method)){
modifyUserPwd(req,resp);
}else if("findAllUser".equals(method)){
findAllUser(req,resp);
}else if("findUserInfosByName".equals(method)){
findUserInfosByName(req,resp);
}else{//如果是multipart/form-data类型的提交,证明参数有上传的头像
try {
uploadHeadImg(req,resp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 重定向
//resp.sendRedirect("product_list");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
public void login(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String user_name = req.getParameter("user_name") == null?"":req.getParameter("user_name").toString();
String user_pwd = req.getParameter("user_pwd") == null?"":req.getParameter("user_pwd").toString();
resp.setContentType("text/json; charset=utf-8"); // 设置response的编码及格式
PrintWriter out = resp.getWriter();
Map<String,Object> map = new HashMap<>();
User user = userService.login(user_name, user_pwd);
if(user != null) {
HttpSession session = req.getSession();
session.setAttribute("user", user);
if(user.getUser_role() == 0) {
map.put("msg", "usersuccess");
map.put("data", user);
}else {
map.put("msg", "adminsuccess");
map.put("data", user);
}
}else{
map.put("msg", "fail");
}
String resJSON = JSON.toJSONString(map);
out.print(resJSON); // 输出
}
public void logout(HttpServletRequest req, HttpServletResponse resp) throws IOException {
HttpSession session = req.getSession();
session.removeAttribute("user");
resp.setContentType("text/json; charset=utf-8"); // 设置response的编码及格式
PrintWriter out = resp.getWriter();
Map<String,Object> map = new HashMap<>();
map.put("state", "success");
String resJSON = JSON.toJSONString(map);
out.print(resJSON); // 输出
}
public void register(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String user_name = req.getParameter("user_name") == null?"":req.getParameter("user_name").toString();
String user_pwd = req.getParameter("user_pwd") == null?"":req.getParameter("user_pwd").toString();
String user_email = req.getParameter("user_email") == null?"":req.getParameter("user_email").toString();
User user = new User();
user.setUser_name(user_name);
user.setUser_pwd(user_pwd);
user.setUser_email(user_email);
user.setUser_role(0);
resp.setContentType("text/json; charset=utf-8"); // 设置response的编码及格式
PrintWriter out = resp.getWriter();
Map<String,Object> map = new HashMap<>();
String result = "";
List<User> list = userService.findUserByName(user_name);
if(list.size() > 0) {
result = "fail";
}else {
Integer rs = userService.addUser(user);
if(rs > 0) {
result = "success";
}else {
result = "fail";
}
}
map.put("state", result);
String resJSON = JSON.toJSONString(map);
out.print(resJSON); // 输出
}
public void modifyUserPwd(HttpServletRequest req, HttpServletResponse resp) throws IOException {
HttpSession session = req.getSession();
User user = (User)session.getAttribute("user");
String oldPwd = req.getParameter("oldPwd") == null?"":req.getParameter("oldPwd").toString();
String newPwd = req.getParameter("newPwd") == null?"":req.getParameter("newPwd").toString();
String result = "";
if(user.getUser_pwd().equals(oldPwd)) {
user.setUser_pwd(newPwd);
userService.updateUserInfo(user);
session.removeAttribute("user");
result = "success";
}else {
result = "fail";
}
resp.setContentType("text/json; charset=utf-8"); // 设置response的编码及格式
PrintWriter out = resp.getWriter();
Map<String,Object> map = new HashMap<>();
map.put("state", result);
String resJSON = JSON.toJSONString(map);
out.print(resJSON); // 输出
}
public void findUserInfosByName(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String user_name = req.getParameter("user_name") == null?"":req.getParameter("user_name").toString();
List<User> list = userService.findUserLikeName(user_name);
resp.setContentType("text/json; charset=utf-8"); // 设置response的编码及格式
PrintWriter out = resp.getWriter();
Map<String,Object> map = new HashMap<>();
map.put("msg", "");
map.put("code", 0);
map.put("count", list.size());
map.put("data", list);
String resJSON = JSON.toJSONString(map);
out.print(resJSON); // 输出
}
public void uploadHeadImg(HttpServletRequest req, HttpServletResponse resp) throws Exception {
User user = new User();
//创建一个解析器工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//解析请求,将表单中每个输入项封装成一个FileItem对象
List<FileItem> fileItems = upload.parseRequest(req);
//所有表单非文件类型的集合
Map<String,Object> param = new HashMap<String,Object>();
// 迭代表单数据
for (FileItem fileItem : fileItems) {
//判断输入的类型是 普通输入项 还是文件
if (!fileItem.isFormField()) {
//上传的是文件,获得文件上传字段中的文件名
//注意IE或FireFox中获取的文件名是不一样的,IE中是绝对路径,FireFox中只是文件名
String fileName = fileItem.getName();
System.out.println(fileName);
//Substring是字符串截取,返回值是一个截取后的字符串
//lastIndexOf(".")是从右向左查,获取.之后的字符串
String ext = fileName.substring(fileName.lastIndexOf("."));
//UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法, UUID的唯一缺陷在于生成的结果串会比较长
String name = UUID.randomUUID()+ext;
//将FileItem对象中保存的主体内容保存到某个指定的文件中
String path = SystemParamsUtils.getSysConfig().get("address").toString()+ "/upload/head/" + name;
File file = new File(path);
String filePath = "/file/upload/head/" + name;
user.setUser_headImg(filePath);
fileItem.write(file);
}else{
param.put(fileItem.getFieldName(), fileItem.getString("utf-8"));//如果你页面编码是utf-8的
}
}
user.setUser_id(Long.valueOf(param.get("user_id").toString()));
user.setUser_name(param.get("user_name") == null?"":param.get("user_name").toString());
user.setUser_email(param.get("user_email") == null?"":param.get("user_email").toString());
resp.setContentType("text/json; charset=utf-8"); // 设置response的编码及格式
PrintWriter out = resp.getWriter();
Map<String,Object> map = new HashMap<>();
Integer rs = userService.updateUserInfo(user);
if(rs > 0) {
map.put("code", 0);
map.put("msg", "");
map.put("data",userService.findUserById(Long.valueOf(param.get("user_id").toString())));
}else {
map.put("code", 200);
map.put("msg", "");
}
String resJSON = JSON.toJSONString(map);
out.print(resJSON); // 输出
}
public void findAllUser(HttpServletRequest req, HttpServletResponse resp) throws IOException{
Integer page = req.getParameter("page") == null?1:Integer.valueOf(req.getParameter("page"));
Integer limit = req.getParameter("limit") == null?1:Integer.valueOf(req.getParameter("limit"));
String keyword = req.getParameter("keyword") == null?"":req.getParameter("keyword").toString();
resp.setContentType("text/json; charset=utf-8"); // 设置response的编码及格式
PrintWriter out = resp.getWriter();
Map<String,Object> map = new HashMap<>();
map.put("msg", "");
map.put("code", 0);
map.put("count", userService.findAllUserBySplitPageCount(keyword));
map.put("data", userService.findAllUserBySplitPage(page, limit, keyword));
String resJSON = JSON.toJSONString(map);
out.print(resJSON); // 输出
}
public void updateUser(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String result = "";
Long user_id = req.getParameter("user_id") == null?1:Long.valueOf(req.getParameter("user_id"));
String user_name = req.getParameter("user_name") == null?"":req.getParameter("user_name").toString();
String user_pwd = req.getParameter("user_pwd") == null?"":req.getParameter("user_pwd").toString();
String user_email = req.getParameter("user_email") == null?"":req.getParameter("user_email").toString();
User user = new User();
user.setUser_id(user_id);
user.setUser_name(user_name);
user.setUser_pwd(user_pwd);
user.setUser_email(user_email);
Integer rs = userService.updateUserInfo(user);
if(rs > 0) {
result = "success";
}else {
result = "fail";
}
resp.setContentType("text/json; charset=utf-8"); // 设置response的编码及格式
PrintWriter out = resp.getWriter();
Map<String,Object> map = new HashMap<>();
map.put("state", result);
String resJSON = JSON.toJSONString(map);
out.print(resJSON); // 输出
}
}