基于springboot vue 电影推荐系统

devtools/2024/10/22 0:01:26/

博主介绍:专注于Java(springboot  ssm 等开发框架) vue  .net  php python(flask Django)  小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1400+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文末有源码下载地址

系统实现预览

第4章  架构设计

4.1  系统体系结构

电影推荐系统的结构图4-1所示:

图4-1 系统结构

登录系统结构图,如图4-2所示:

图4-2 登录结构图

系统结构图,如图4-3所示:

图4-3 系统结构图

4.2  数据库实体设计

数据库的功能就是对系统中所有的数据进行存储和管理。所有的数据可以在数据库中产时间的进行存储,方便用户的使用。而且所有的数据库中的数据也应该具有一定的共享性,任何的系统可以对一些数据进行使用,同时还应该保持一定的独立性,每一个数据库中的数据都有很强的安全性,可以被很好的存放到数据库,没有进行身份的验证是不能对这些数据进行查看和使用的。数据库的设计需要明确每一个实体之间的联系,系统的E-R图如下图所示:

图4-4用户管理实体属性图

电影信息管理实体属性图如图4-5所示。

图4-5电影信息管理实体属性图

4.3  数据库表设计

当电影推荐系统在运行的时候,数据库要能确保自己的独立性,想要哪部分的数据就选择相应的设置选项,对应的数据就会以表格的形式展现出来。当对这一个功能进行设置,他就会与数据库进行连接,会在对话框中弹出相应的数据源。

daily_movie

字段名称

类型

长度

不是null

主键

字段说明

daily_movie_id

int

11

主键

每日电影ID

movie_title

varchar

64

电影名称

alias

varchar

64

别名

director

varchar

64

导演

screenwriter

varchar

64

编剧

performer

varchar

64

演员

type

varchar

64

类型

country

varchar

64

国家

language

varchar

64

语言

particular_year

varchar

64

年份

film_length

varchar

64

片长

release_time

varchar

64

上映时间

official_website

varchar

255

官方网站

idmb_link

varchar

255

IDMB链接

idmb_score

varchar

64

IDMB评分

douban_score

varchar

64

豆瓣评分

awards

varchar

64

获奖情况

movie_poster

varchar

255

影片海报

similar_film_recommendation

varchar

64

相似电影推荐

plot

text

0

剧情

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

forum

字段名称

类型

长度

不是null

主键

字段说明

forum_id

mediumint

8

主键

论坛id

display

smallint

5

排序

user_id

mediumint

8

用户ID

nickname

varchar

16

昵称

praise_len

int

10

点赞数

hits

int

10

访问数

title

varchar

125

标题

keywords

varchar

125

关键词

description

varchar

255

描述

url

varchar

255

来源地址

tag

varchar

255

标签

img

text

0

封面图

content

longtext

0

正文

create_time

timestamp

0

创建时间

update_time

timestamp

0

更新时间

avatar

varchar

255

发帖人头像

type

varchar

64

论坛分类

forum_type

字段名称

类型

长度

不是null

主键

字段说明

type_id

smallint

5

主键

分类ID

name

varchar

16

分类名称

description

varchar

255

描述

url

varchar

255

外链地址

father_id

smallint

5

上级分类

icon

varchar

255

分类图标

create_time

timestamp

0

创建时间

update_time

timestamp

0

更新时间

high_score_film

字段名称

类型

长度

不是null

主键

字段说明

high_score_film_id

int

11

主键

高分电影ID

movie_title

varchar

64

电影名称

alias

varchar

64

别名

director

varchar

64

导演

screenwriter

varchar

64

编剧

performer

varchar

64

演员

type

varchar

64

类型

country

varchar

64

国家

language

varchar

64

语言

particular_year

varchar

64

年份

film_length

varchar

64

片长

release_time

varchar

64

上映时间

official_website

varchar

255

官方网站

idmb_link

varchar

255

IDMB链接

idmb_score

varchar

64

IDMB评分

douban_score

varchar

64

豆瓣评分

awards

varchar

64

获奖情况

movie_poster

varchar

255

影片海报

similar_film_recommendation

varchar

64

相似电影推荐

plot

text

0

剧情

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

ordinary_users

字段名称

类型

长度

不是null

主键

字段说明

ordinary_users_id

int

11

主键

普通用户ID

user_number

varchar

64

用户编号

user_name

varchar

64

用户姓名

user_gender

varchar

64

用户性别

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

popular_movies

字段名称

类型

长度

不是null

主键

字段说明

popular_movies_id

int

11

主键

热门电影ID

movie_title

varchar

64

电影名称

alias

varchar

64

别名

director

varchar

64

导演

screenwriter

varchar

64

编剧

performer

varchar

64

演员

type

varchar

64

类型

country

varchar

64

国家

language

varchar

64

语言

particular_year

varchar

64

年份

film_length

varchar

64

片长

release_time

varchar

64

上映时间

official_website

varchar

255

官方网站

idmb_link

varchar

255

IDMB链接

idmb_score

varchar

64

IDMB评分

douban_score

varchar

64

豆瓣评分

awards

varchar

64

获奖情况

movie_poster

varchar

255

影片海报

similar_film_recommendation

varchar

64

相似电影推荐

plot

text

0

剧情

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

praise

字段名称

类型

长度

不是null

主键

字段说明

praise_id

int

10

主键

点赞ID

user_id

int

11

点赞人

create_time

timestamp

0

创建时间

update_time

timestamp

0

更新时间

source_table

varchar

255

来源表

source_field

varchar

255

来源字段

source_id

int

10

来源ID

status

tinyint

1

点赞状态1为点赞,0已取消

第5章  系统实现

5.1  系统功能模块

电影推荐系统,在系统的首页可以查看首页、影片交流、公告栏、影片资讯、每日电影、高分电影、热门电影、我的跳转到后台等信息进行相关操作,如图5-1所示。 

图5-1系统首页界面图

核心系统类

package com.project.demo.controller.base;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.project.demo.service.base.BaseService;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/***/
@Slf4j
public class BaseController<E, S extends BaseService<E>> {@Setterprotected S service;@PostMapping("/add")@Transactionalpublic Map<String, Object> add(HttpServletRequest request) throws IOException {service.insert(service.readBody(request.getReader()));return success(1);}@Transactionalpublic Map<String, Object> addMap(Map<String,Object> map){service.insert(map);return success(1);}@PostMapping("/set")@Transactionalpublic Map<String, Object> set(HttpServletRequest request) throws IOException {service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));return success(1);}@RequestMapping(value = "/del")@Transactionalpublic Map<String, Object> del(HttpServletRequest request) {service.delete(service.readQuery(request), service.readConfig(request));return success(1);}@RequestMapping("/get_obj")public Map<String, Object> obj(HttpServletRequest request) {Query select = service.select(service.readQuery(request), service.readConfig(request));List resultList = select.getResultList();if (resultList.size() > 0) {JSONObject jsonObject = new JSONObject();jsonObject.put("obj",resultList.get(0));return success(jsonObject);} else {return success(null);}}@RequestMapping("/get_list")public Map<String, Object> getList(HttpServletRequest request) {Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));return success(map);}@RequestMapping("/list_group")public Map<String, Object> listGroup(HttpServletRequest request) {Map<String, Object> map = service.selectToList(service.readQuery(request), service.readConfig(request));return success(map);}@RequestMapping("/bar_group")public Map<String, Object> barGroup(HttpServletRequest request) {Map<String, Object> map = service.selectBarGroup(service.readQuery(request), service.readConfig(request));return success(map);}@RequestMapping(value = {"/count_group", "/count"})public Map<String, Object> count(HttpServletRequest request) {Query count = service.count(service.readQuery(request), service.readConfig(request));return success(count.getResultList());}@RequestMapping(value = {"/sum_group", "/sum"})public Map<String, Object> sum(HttpServletRequest request) {Query count = service.sum(service.readQuery(request), service.readConfig(request));return success(count.getResultList());}@RequestMapping(value = {"/avg_group", "/avg"})public Map<String, Object> avg(HttpServletRequest request) {Query count = service.avg(service.readQuery(request), service.readConfig(request));return success(count.getResultList());}@PostMapping("/upload")public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {log.info("进入方法");if (file.isEmpty()) {return error(30000, "没有选择文件");}try {//判断有没路径,没有则创建String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";File targetDir = new File(filePath);if (!targetDir.exists() && !targetDir.isDirectory()) {if (targetDir.mkdirs()) {log.info("创建目录成功");} else {log.error("创建目录失败");}}
//            String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload/";
//            String filePath = path.replace('/', '\\').substring(1, path.length());String fileName = file.getOriginalFilename();File dest = new File(filePath + fileName);log.info("文件路径:{}", dest.getPath());log.info("文件名:{}", dest.getName());file.transferTo(dest);JSONObject jsonObject = new JSONObject();jsonObject.put("url", "/api/upload/" + fileName);return success(jsonObject);} catch (IOException e) {log.info("上传失败:{}", e.getMessage());}return error(30000, "上传失败");}@PostMapping("/import_db")public Map<String, Object> importDb(@RequestParam("file") MultipartFile file) throws IOException {service.importDb(file);return success(1);}@RequestMapping("/export_db")public void exportDb(HttpServletRequest request, HttpServletResponse response) throws IOException {HSSFWorkbook sheets = service.exportDb(service.readQuery(request), service.readConfig(request));response.setContentType("application/octet-stream");response.setHeader("Content-disposition", "attachment;filename=employee.xls");response.flushBuffer();sheets.write(response.getOutputStream());sheets.close();}public Map<String, Object> success(Object o) {Map<String, Object> map = new HashMap<>();if (o == null) {map.put("result", null);return map;}if (o instanceof List) {if (((List) o).size() == 1) {o =  ((List) o).get(0);map.put("result", o);}else {String jsonString = JSONObject.toJSONString(o);JSONArray objects = service.covertArray(JSONObject.parseArray(jsonString));map.put("result", objects);}} else if (o instanceof Integer || o instanceof String) {map.put("result", o);} else {String jsonString = JSONObject.toJSONString(o);JSONObject jsonObject = JSONObject.parseObject(jsonString);JSONObject j = service.covertObject(jsonObject);map.put("result", j);}return map;}public Map<String, Object> error(Integer code, String message) {Map<String, Object> map = new HashMap<>();map.put("error", new HashMap<String, Object>(4) {{put("code", code);put("message", message);}});return map;}
}

用户注册,在用户注册页面可以填写账号、密码、姓名、昵称、手机等信息进行注册操作,如图5-2所示。在个人中心页面可以填写学号、密码、手机等信息进行更新操作,如图5-3所示。

图5-2学生注册界面图

图5-3个人中心界面图

新闻信息,在新闻信息页面中可以查看新闻信息标题、新闻信息名称、图片、新闻内容、发布时间、账号、社长姓名等信息,如图5-4所示。

图5-4新闻信息界面图

电影信息,在电影信息页面可以查看电影名称、别名、导演、编剧、演员、类型、语言、国家等信息进行添加,如图5-5所示。

图5-5电影信息界面图

5.2  用户功能模块

用户登录进入系统后台可以对首页、影片交流、公告栏、影片资讯、每日电影、高分电影、热门电影、我的等信息进行相应的操作管理,如图5-6所示。

图5-6用户功能界面图

每日电影列表,在每日电影页面中可以查看电影名称、类型、年份、豆瓣评分等信息,如图5-7所示。

图5-7每日电影界面图

大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者


http://www.ppmy.cn/devtools/122127.html

相关文章

【C#生态园】探索地理信息系统软件套件与库:功能、API和应用

探索地理信息系统&#xff1a;软件套件与库详解 前言 地理信息系统&#xff08;GIS&#xff09;是当今世界上广泛使用的技术之一&#xff0c;它以空间数据为基础&#xff0c;能够提供丰富的地理信息分析和可视化功能。在GIS领域&#xff0c;有许多优秀的软件套件和库&#xf…

Florr.io 花瓣图鉴之Dark Mark[黑暗标记]

描述 一个将自己束缚在堕落灵魂上的黑暗印记。 &#xff08;A dark mark that binds itself to a fallen soul.&#xff09; 你知道吗 超级 1.0s 4.0s 究极 1.0s 10.0s 神话 1.0s 30.0s 传奇 1.0s 60.0s 史诗 1.0s 120.0s 稀…

torchvision.transforms.Resize()的用法

今天我在使用torchvision.transforms.Resize()的时候发现&#xff0c;一般Resize中放的是size或者是(size,size)这样的二元数。 这两个里面&#xff0c;torchvision.transforms.Resize((size,size))&#xff0c;大家都很清楚&#xff0c;会将图像的h和w大小都变成size。 但是…

『Linux』 第三章 Linux环境基础开发工具使用

Linux 软件包管理器yum 什么是软件包 在Linux下安装软件&#xff0c;一个通常的办法是下载到程序的源代码&#xff0c;进行编译&#xff0c;得到可执行程序但是这样太麻烦了&#xff0c;于是有些人把一些常用的软件提前编译好&#xff0c;做成软件包&#xff08;可以理解成wi…

flutter_鸿蒙next(win)环境搭建

第一步 拉取鸿蒙版本flutterSDK仓库 仓库地址&#xff1a;OpenHarmony-SIG/flutter_flutter 第二步 找到拉取的仓库中的README.md 并根据说明配置环境 第三步 配置好环境变量之后 用管理员开启cmd 输入&#xff1a;flutter dcotor 并查看此时flutter所支持的系统 包括&…

微信小程序处理交易投诉管理,支持多小程序

大家好&#xff0c;我是小悟 1、问题背景 玩过微信小程序生态的&#xff0c;或许就有这种感受&#xff0c;如果收到投诉单&#xff0c;不会及时通知到手机端&#xff0c;而是每天早上10:00向小程序的管理员及运营者推送通知。通知内容为截至前一天24时该小程序账号内待处理的交…

CSS 布局——清除浮动 (二)

目录 1. 清除浮动 2. 清除浮动本质 3. 清除浮动 4. 清除浮动方法 4.1 额外标签法 4.1.1 总结 4.2 父级添加 overflow 4.3 after 伪元素法 4.4 双伪元素清除浮动 5 总结 1. 清除浮动 这是上面的源代码&#xff1a; <!DOCTYPE html> <html lang"en"&…

【AI知识点】词嵌入(Word Embedding)

词嵌入&#xff08;Word Embedding&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一种技术&#xff0c;用于将词语或短语映射为具有固定维度的实数向量。这些向量&#xff08;嵌入向量&#xff09;能够捕捉词语之间的语义相似性&#xff0c;即将语义相近的词映射到…