# 毕业设计 **Repository Path**: ThroughFog/graduation-project ## Basic Information - **Project Name**: 毕业设计 - **Description**: 电影平台--后台管理 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2020-12-14 - **Last Updated**: 2025-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] # 电影个性化推荐系统 ## 概述 ​ 现在的生活,电影能够极大地满足人们日益增长的精神文化需求。但是世界每年生产的电影的数量是巨大的。因此面对令人眼花缭乱的种类,数不尽的数量,社会上出现了许许多多例如豆瓣等电影评论网站。这类网站对电影进行收集,筛选,汇总,并且有很多用户进行对电影评论,一定程度上减少了寻找电影的难度和复杂程度。但是还远远不能满足人们的个性化需求。本课题进行的研究也恰好与这一急待解决的痛点相吻合。项目研究爬虫技术从互联网获取电影相关信息,在推荐算法中融入电影的知识,能够将没有任何历史数据的新电影精准地推荐给目标用户。 ​ 项目研究爬虫技术从互联网获取电影相关信息,研究数据库存储电影知识。模仿豆瓣电影建立电影推荐网站。帮助用户找到想要的电影、影人、影院、电视剧。通过网友的影评,电影的评分帮助找到想要的电影。能够提供更多的社会化功能和个性化功能。完成建立电影网站信息及发布功能。 ## 模块设计 项目大致分为三层: 1. 表示层 1. 表示层用以承载、显示业务层处理过的信息,提供给用户一个美观的操作界面 1. 业务层 1. 业务层根据业务需求处理持久层发来的数据,对数据进行处理封装 2. 持久层 1. 持久层负责和数据库进行交互,获取数据 ## 数据库设计 数据库名:movie **电影表** **保存了电影的基本信息** tbl_subject | 列名 | 类型 | 长度 | 是否为空 | 主外键 | 备注 | | ---------------------------- | ------- | ------ | -------- | ------ | ------------------ | | s_id | int | 6 | 否 | 主键 | 电影id | | s_name | varchar | 50 | 否 | | 电影名 | | pic_src | varchar | 200 | 是 | | 海报路径 | | s_time | varchar | 10 | 是 | | 时长 | | s_date | varchar | 200 | 是 | | 上映日期 | | s_rate | float | 4 | 是 | | 评分 | | **s_totalUsers**(暂未添加) | **int** | **11** | **是** | | **总评分用户数** | | type_id | int | 2 | 是 | | 类型(数字) | | s_content | varchar | 200 | 否 | | 简介 | | s_hit | int | 3 | 是 | | 点击量 | **电影类型表** **保存了电影类型** 如**动作、科幻、冒险、动画、音乐、奇幻、爱情、剧情** tbl_type | 列名 | 类型 | 长度 | 是否为空 | 主外键 | 备注 | | --------- | ------- | ---- | -------- | ------ | ------ | | type_id | int | 3 | 否 | 主键 | 类型id | | type_name | varchar | 6 | 否 | | 类型名 | **收藏表** **保存用户收藏了哪些电影** tbl_love | 列名 | 类型 | 长度 | 是否为空 | 主外键 | 备注 | | ---- | ---- | ---- | -------- | ------ | ------ | | u_id | int | 10 | 否 | | 用户id | | s_id | int | 6 | 否 | | 电影id | | rate | int | 2 | 是 | | 评分 | subject表的评分由这个表计算而来,公式:**总评分=用户总分数/用户数** ```sql //获取对这个电影打分的用户数(字段数)及总分数 select sum(rate) as sumRate,count(rate) as num from tbl_rate where s_id = ${sId} //sumRate / num = 电影分数 ``` **管理员表(后续可能还要添加菜单、权限相关字段)** tbl_admin | 列名 | 类型 | 长度 | 是否为空 | 主外键 | 备注 | | ---------- | ------- | ---- | -------- | ------ | ---------- | | a_id | int | 6 | 否 | 主键 | 管理员id | | a_name | varchar | 20 | 否 | | 管理员账号 | | a_password | varchar | 50 | 否 | | 管理员密码 | **菜单表** **包含了管理页面左侧菜单及其继承管理(暂无权限)** system_menu | 列名 | 类型 | 长度 | 是否为空 | 主外键 | 备注 | | ------ | ------- | ---- | -------- | ------ | ----------------------- | | id | int | 11 | 否 | 主键 | ID | | pid | int | 11 | 否 | | 父ID | | title | varchar | 100 | 否 | | 名称 | | icon | varchar | 100 | 否 | | 菜单图标 | | href | varchar | 100 | 否 | | 请求链接 | | target | varchar | 20 | 否 | | 链接打开方式,默认_self | | sort | int | 11 | 是 | | 菜单排序 | | status | tinyint | 1 | 否 | | 状态(0-禁用,1-启用) | | remark | varchar | 255 | 是 | | 备注 | 用户表**(后续可能还要添加密保相关字段)** tbl_user | 列名 | 类型 | 长度 | 是否为空 | 主外键 | 备注 | | ---------- | ------- | ---- | -------- | ------ | ------ | | u_id | int | 10 | 否 | 主键 | 编号 | | u_name | varchar | 10 | 否 | | 用户名 | | u_password | varchar | 20 | 否 | | 密码 | | u_gender | int | 1 | 否 | | 性别 | ## 业务模块 **后台** **开发环境:** * 开发工具:IDEA * JDK版本:JDK 1.8 * Spring Boot * Maven **技术栈:** * Spring MVC * Spring * MyBatis * Mysql * Layui =>layuimini **组件:** * dtree * eCharts * MenuNode 1. 电影管理 * 发布、修改、删除 2. 爬虫模块(独立) 3. 用户管理模块 * 已注册用户查看 * 修改用户信息 * 密码重置 4. 菜单管理模块 * 快捷增删后台左侧列表 5. 权限管理模块 * 管理员与超级管理员权限分配 6. 系统设置模块(可选) 7. 管理员信息模块 8. 统计信息(数据可视化) * 用户收藏电影分类统计(哪些类型电影被收藏的最多) * 用户性别统计 * 哪些类型的电影评分较高(3分以上【不包括3】) 9. 日志(可选) 10. 放映管理 11. 影厅管理 --- ## 毕设进度记录 - [x] 登录 - [x] 主页 - [x] 修改密码 - [x] 电影管理 - [x] 用户管理 - [x] 上映电影管理(查看、撤档) - [x] 菜单管理(提供前端ui交互,快捷增删菜单) - [x] 放映厅管理 - [ ] 权限管理(不同权限显示不同菜单) - [x] 系统设置(添加通知公告) - [x] 统计信息 - [x] 日志 - [x] 类型管理 - [x] 角色管理 --- ## todoList - [ ] 登录加密 - [ ] 登录验证码 - [ ] 记住我 - [ ] 主页统计功能自动刷新 - [x] 左侧菜单列表动态获取 - [x] 分页功能 - [x] 电影管理页查询之按类型查询 - [x] 电影管理页海报显示 - [x] 电影管理页添加/修改电影信息类型下拉选择 - [ ] 左侧菜单整合权限 - [x] 下拉列表动态获取 - [x] 文件上传(目前只要一选完图片就会上传) - [x] 文件上传附带输入框回显 - [x] 添加`tbl_star`表、`tbl_rate`表,`tbl_subject`表添加总平均分以便实现统计 --- ## 零、前端页面设计 使用SPA标准开发,即加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。 ## 一、电影管理模块 1. 查看电影列表 * 使用layui提供的数据表格组件`table`来请求并放置数据 * 分页需要设置额外的属性,这些属性在进到controller层时,借助layui的工具类对数据进行封装,即可实现分页 * 电影类型名通过`templet`模板来实现 2. 添加电影页面 * 需要有添加电影的页面,将其放入`subject_table`中,通过按钮动态切换显示 * 监听表格头工具栏事件 * 编写打开窗口方法`openAddView` * 监听表单提交事件,通过post请求将url、数据传入并回调,根据回调信息判断是否添加成功 3. 编辑电影页面 * 复用上边的页面,做好数据回显(表单的name要与实体类一一对应,大小写敏感) * 监听表格行工具栏事件 * 编写打开修改窗口方法`openUpdateView` * 监听表单提交事件,注意此处使用的提交事件与添加电影是同一个 * 注意在form页面中添加隐藏域`sId`,这样才能通过id值更新 4. 模糊查找电影 * 按导演查找: * 按演员查找: * 按类型查找:通过ajax请求来获取类型列表,并动态放入下拉框 6. 删除电影 7. 批量删除电影 ## 二、类型管理 1. 查看类型列表 2. 新增电影类型 3. 编辑类型 4. 删除类型 5. 批量删除类型 > 思路:前端js监听复选框选种情况,点击批量删除时,从选中的行提取出类型id组成一个数组(Array),然后将其转换为JSON > 并通过post请求发送到Controller,控制器层接收JSON字符串,转换成List,然后就可以调用Service层方法 > 先做Check检查这个类型是否有Subject关联,有就返回,没有继续 > 发送post请求进行删除,参数依然传转换成JSON字符串的id数组 ## 三、首页 1. 数据统计:简单统计了用户与电影信息 2. 快捷入口:快捷地进入各个管理 3. 通知公告:动态地从数据库获取公告 4. 项目信息:记录了课题项目的相关信息 ## 四、菜单管理 **dtree组件** 1. 树形菜单筛选 2. 添加菜单 3. 编辑菜单 4. 删除菜单 5. 浏览菜单 ## 五、用户管理 1. 浏览用户 2. 编辑用户信息 3. 重置密码 4. 删除用户 5. 模糊查询 1. 按用户名 2. 按性别 ## 六、角色管理 1. 查看角色 2. 编辑角色 3. 添加角色 4. 删除角色 5. 批量删除角色 ## 七、爬虫模块(独立) 已完成 ## 八、权限管理模块 > 不同的登录用户,所能看到的管理功能是不一样的,具体如下 > > **管理员:**电影管理、用户管理、我的模块 > > **超级管理员:**以上、菜单管理、权限管理 > > 普通管理员权限为1,超级管理员权限为255 > > 根据取出来的权限值,来设置不同的展现方式 > > 本操作需要用到`tbl_admin`表,故在实体类中实现这个类 > > JWT/Shiro ```java //admin实体类 public class Admin implements Serializable{ Integer aId; String aName; String aPassword; Integer a_auth; } ``` * 查询出管理员的权限信息 ```mysql select a_auth from tbl_admin ``` ## 九、公告管理 **WangEditor组件** 1. 查看公告 2. 发布公告 3. 编辑公告 ## 十、修改密码 1. 修改已登录管理员密码 ## 十一、电影销售统计(数据可视化) > EChart ## 十二、放映管理模块 1. 上映电影查看 2. 电影撤档 3. 日期范围查询