Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)
🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍
文章目录
1.0 项目介绍
2.0 用户登录功能
3.0 用户管理功能
4.0 影院管理功能
5.0 电影管理功能
6.0 影厅管理功能
7.0 电影排片管理功能
8.0 用户评论管理功能
9.0 用户购票功能
10.0 用户购票记录管理
1.0 项目介绍
开发工具:IDEA、VScode
服务器:Tomcat, JDK 17
项目构建:maven
数据库:mysql 5.7
系统用户前台和管理后台两部分,项目采用前后端分离
前端技术:vue +elementUI
服务端技术:springboot+mybatis+redis+mysql
项目功能描述:
1)前台功能:
1.登录、注册、退出系统、首页、搜索
2.电影:正在热映、即将热映、经典影片
3.影院:选座订票、下单支付
4.榜单:TOP100榜
5.个人中心:我的订单、基本信息
2)后台功能:
1.登录、退出系统、首页
2.影院管理
(1)影院信息管理:添加、修改、删除、查询等功能
(2)影院区域管理:添加、修改、删除等功能
3.电影管理
(1)电影信息管理:添加、修改、删除、查询、演员和影片分类等功能
(2)电影评论管理:添加、删除等操作
(5)电影类别管理:添加、修改、删除等功能
4.影厅管理
(1)影厅信息管理:添加、修改、删除、查询、安排座位等功能
(2)影厅类别管理:添加、修改、删除等功能
5.场次管理
(1)场次信息管理:添加、修改、删除、查询、查看座位等功能
6.用户管理
(1)用户信息管理:添加、修改、删除、查询等功能
(2)订单信息管理:查询、删除等功能
(3)用户爱好管理:添加、修改、删除等功能
7.权限管理
(1)角色信息管理:添加、修改、删除、分配权限等功能
(2)资源信息管理:添加、修改、删除等功能
注意:不一定非要完全符合开发环境,有稍微的差别也是可以开发的。
2.0 用户登录功能
实现了登录校验,还有用户注册功能:
用到了 Spring Security 框架来实现登录、校验、验证等功能。
相关的部分源码:
@RestController public class SysLoginController { @Autowired private SysLoginService loginService; @Autowired private ISysMenuService menuService; @Autowired private SysPermissionService permissionService; /** * 登录方法 * * @param loginBody 登录信息 * @return 结果 */ @PostMapping("/login") public AjaxResult login(@RequestBody LoginBody loginBody) { AjaxResult ajax = AjaxResult.success(); // 生成令牌 String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid()); ajax.put(Constants.TOKEN, token); return ajax; } /** * 获取用户信息 * * @return 用户信息 */ @GetMapping("getInfo") public AjaxResult getInfo() { SysUser user = SecurityUtils.getLoginUser().getUser(); // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 Set permissions = permissionService.getMenuPermission(user); AjaxResult ajax = AjaxResult.success(); ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); return ajax; } /** * 获取路由信息 * * @return 路由信息 */ @GetMapping("getRouters") public AjaxResult getRouters() { Long userId = SecurityUtils.getUserId(); List menus = menuService.selectMenuTreeByUserId(userId); return AjaxResult.success(menuService.buildMenus(menus)); } }
public String login(String username, String password, String code, String uuid) { // 验证码校验 validateCaptcha(username, code, uuid); // 登录前置校验 loginPreCheck(username, password); // 用户验证 Authentication authentication = null; try { UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); AuthenticationContextHolder.setContext(authenticationToken); // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername authentication = authenticationManager.authenticate(authenticationToken); } catch (Exception e) { if (e instanceof BadCredentialsException) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); throw new UserPasswordNotMatchException(); } else { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); throw new ServiceException(e.getMessage()); } } finally { AuthenticationContextHolder.clearContext(); } AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); recordLoginInfo(loginUser.getUserId()); // 生成token return tokenService.createToken(loginUser); }
3.0 用户管理功能
上传图片使用了第三方接口:x-File-Storage 框架。
相关的部分源码:
1)后端代码:
@RestController @RequestMapping("/manage/user") public class UserController extends BaseController { @Autowired private IUserService userService; @Autowired private SysUserServiceImpl sysUserService; /** * 查询用户信息列表 */ /*@PreAuthorize("@ss.hasPermi('manage:user:list')")*/ @GetMapping("/list") public TableDataInfo list(User user) { List list = userService.selectUserList(user); TableDataInfo rspData = new TableDataInfo(); rspData.setCode(HttpStatus.SUCCESS); rspData.setMsg("查询成功"); rspData.setRows(list); rspData.setTotal(new PageInfo(list).getTotal()); return rspData; } /** * 导出用户信息列表 */ @PreAuthorize("@ss.hasPermi('manage:user:export')") @Log(title = "用户信息", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, User user) { List list = userService.selectUserList(user); ExcelUtil util = new ExcelUtil(User.class); util.exportExcel(response, list, "用户信息数据"); } /** * 获取用户信息详细信息 */ @PreAuthorize("@ss.hasPermi('manage:user:query')") @GetMapping(value = "/{userId}") public AjaxResult getInfo(@PathVariable("userId") Long userId) { return success(userService.selectUserByUserId(userId)); } /** * 新增用户信息 */ @PreAuthorize("@ss.hasPermi('manage:user:add')") @Log(title = "用户信息", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody User user) { return toAjax(userService.insertUser(user)); } /** * 修改用户信息 */ @PreAuthorize("@ss.hasPermi('manage:user:edit')") @Log(title = "用户信息", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody User user) { return toAjax(userService.updateUser(user)); } /** * 删除用户信息 */ @PreAuthorize("@ss.hasPermi('manage:user:remove')") @Log(title = "用户信息", businessType = BusinessType.DELETE) @DeleteMapping("/{userIds}") public AjaxResult remove(@PathVariable Long[] userIds) { return toAjax(userService.deleteUserByUserIds(userIds)); } /** * 查询全部用户信息列表 */ /*@PreAuthorize("@ss.hasPermi('manage:user:list')")*/ @GetMapping("/allUserList") public TableDataInfo allUserList(User user) { List list = userService.addUserList(user); return getDataTable(list); } }
2)前端代码:
搜索 重置 新增 修改 删除 导出 修改 删除 确 定 取 消
4.0 影院管理功能
相关的部分源码:
1)后端代码:
@RestController @RequestMapping("/manage/cinema") public class CinemaController extends BaseController { @Autowired private ICinemaService cinemaService; /** * 查询影院信息列表 */ @PreAuthorize("@ss.hasPermi('manage:cinema:list')") @GetMapping("/list") public TableDataInfo list(Cinema cinema) { startPage(); List list = cinemaService.selectCinemaList(cinema); return getDataTable(list); } /** * 导出影院信息列表 */ @PreAuthorize("@ss.hasPermi('manage:cinema:export')") @Log(title = "影院信息", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, Cinema cinema) { List list = cinemaService.selectCinemaList(cinema); ExcelUtil util = new ExcelUtil(Cinema.class); util.exportExcel(response, list, "影院信息数据"); } /** * 获取影院信息详细信息 */ @PreAuthorize("@ss.hasPermi('manage:cinema:query')") @GetMapping(value = "/{cinemaId}") public AjaxResult getInfo(@PathVariable("cinemaId") Long cinemaId) { return success(cinemaService.selectCinemaByCinemaId(cinemaId)); } /** * 新增影院信息 */ @PreAuthorize("@ss.hasPermi('manage:cinema:add')") @Log(title = "影院信息", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody Cinema cinema) { return toAjax(cinemaService.insertCinema(cinema)); } /** * 修改影院信息 */ @PreAuthorize("@ss.hasPermi('manage:cinema:edit')") @Log(title = "影院信息", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody Cinema cinema) { return toAjax(cinemaService.updateCinema(cinema)); } /** * 删除影院信息 */ @PreAuthorize("@ss.hasPermi('manage:cinema:remove')") @Log(title = "影院信息", businessType = BusinessType.DELETE) @DeleteMapping("/{cinemaIds}") public AjaxResult remove(@PathVariable Long[] cinemaIds) { return toAjax(cinemaService.deleteCinemaByCinemaIds(cinemaIds)); } }
2)前端代码:
搜索 重置 新增 修改 删除 导出 {{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {i}:{h}:{m}') }} 修改 删除 确 定 取 消
5.0 电影管理功能
相关部分源码:
@Autowired private IFilmService filmService; /** * 查询电影信息列表 */ @PreAuthorize("@ss.hasPermi('manage:film:list')") @GetMapping("/list") public TableDataInfo list(Film film) { startPage(); List list = filmService.selectFilmList(film); return getDataTable(list); } /** * 导出电影信息列表 */ @PreAuthorize("@ss.hasPermi('manage:film:export')") @Log(title = "电影信息", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, Film film) { List list = filmService.selectFilmList(film); ExcelUtil util = new ExcelUtil(Film.class); util.exportExcel(response, list, "电影信息数据"); }
6.0 影厅管理功能
相关源码:
/** * 获取影厅信息详细信息 */ @PreAuthorize("@ss.hasPermi('manage:hall:query')") @GetMapping(value = "/{hallId}") public AjaxResult getInfo(@PathVariable("hallId") Long hallId) { return success(hallService.selectHallByHallId(hallId)); } /** * 新增影厅信息 */ @PreAuthorize("@ss.hasPermi('manage:hall:add')") @Log(title = "影厅信息", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody Hall hall) { return toAjax(hallService.insertHall(hall)); } /** * 修改影厅信息 */ @PreAuthorize("@ss.hasPermi('manage:hall:edit')") @Log(title = "影厅信息", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody Hall hall) { return toAjax(hallService.updateHall(hall)); }
7.0 电影排片管理功能
相关源码:
/** * 获取电影排片详细信息 */ @PreAuthorize("@ss.hasPermi('manage:schedule:query')") @GetMapping(value = "/{scheduleId}") public AjaxResult getInfo(@PathVariable("scheduleId") Long scheduleId) { return success(scheduleService.selectScheduleByScheduleId(scheduleId)); } /** * 新增电影排片 */ @PreAuthorize("@ss.hasPermi('manage:schedule:add')") @Log(title = "电影排片", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody Schedule schedule) { return toAjax(scheduleService.insertSchedule(schedule)); } /** * 修改电影排片 */ @PreAuthorize("@ss.hasPermi('manage:schedule:edit')") @Log(title = "电影排片", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody Schedule schedule) { return toAjax(scheduleService.updateSchedule(schedule)); }
8.0 用户评论管理功能
相关源码:
/** * 获取用户评价详细信息 */ @PreAuthorize("@ss.hasPermi('manage:review:query')") @GetMapping(value = "/{reviewId}") public AjaxResult getInfo(@PathVariable("reviewId") Long reviewId) { return success(reviewService.selectReviewByReviewId(reviewId)); } /** * 新增用户评价 */ @PreAuthorize("@ss.hasPermi('manage:review:add')") @Log(title = "用户评价", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody Review review) { return toAjax(reviewService.insertReview(review)); } /** * 修改用户评价 */ @PreAuthorize("@ss.hasPermi('manage:review:edit')") @Log(title = "用户评价", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody Review review) { return toAjax(reviewService.updateReview(review)); }
9.0 用户购票功能
相关源码:
1)后端代码:
/** * 获取购票数据详细信息 */ @PreAuthorize("@ss.hasPermi('manage:byTicket:query')") @GetMapping(value = "/{ticketId}") public AjaxResult getInfo(@PathVariable("ticketId") Long ticketId) { return success(byTicketService.selectByTicketByTicketId(ticketId)); } /** * 新增购票数据 */ @PreAuthorize("@ss.hasPermi('manage:byTicket:add')") @Log(title = "购票数据", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody ByTicket byTicket) { if (byTicket.getUserId() == null){ byTicket.setUserId(getUserId()); } return toAjax(byTicketService.insertByTicket(byTicket)); } /** * 修改购票数据 */ @PreAuthorize("@ss.hasPermi('manage:byTicket:edit')") @Log(title = "购票数据", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody ByTicket byTicket) { return toAjax(byTicketService.updateByTicket(byTicket)); }
2)前端代码:
{{ movie.filmName }} 主演:{{ movie.actors }} 确 定 取 消
10.0 用户购票记录管理
相关部分代码:
//根据电影ID查询电影排片列表获取对应的电影院 @GetMapping("/cinemaList/{filmId}") @PreAuthorize("@ss.hasPermi('manage:byTicket:list')") public AjaxResult cinemaList(@PathVariable("filmId") Long filmId){ return success(byTicketService.cinemaSelectScheduleListByFilmId(filmId)); } //根据电影ID查询电影排片列表获取对应的影厅 @GetMapping("/hallList/{filmId}") @PreAuthorize("@ss.hasPermi('manage:byTicket:list')") public AjaxResult hallList(@PathVariable("filmId") Long filmId){ return success(byTicketService.hallSelectScheduleListByFilmId(filmId)); }
若需要项目完整源码,可以在 CSDN 私信给我,我每天都有查看消息的,感谢大家支持,希望可以帮助到大家!