SpringBoot+Vue实现前后端分离的个性化课程推荐系统
文末获取源码
开发语言:Java
使用框架:spring boot
前端技术:JavaScript、Vue.js 、css3
开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
数据库:MySQL 5.7/8.0
数据库管理工具:phpstudy/Navicat
JDK版本:Java jdk8
Maven:apache-maven 3.8.1-bin
目录
一、前言介绍
随着国家教育信息化教育战略目标的提出,各大在线教育机构如雨后春笋般拔地而起,各大高等学校也纷纷推出线上课程。然而,在线平台中海量、丰富的学习资源也为学习者带来了“信息迷航”、“信息过载”等问题,如何为目标用户精准的个性化推荐学习资源成为平台亟待解决的难题。因此将个性化推荐技术应用到在线教育领域中是一个可行的解决方案,它解决了用户难以从海量数据中搜寻自己感兴趣学习资源的问题,而且还可以提高用户的产品喜爱度和学习积极性。深度学习因为在图像识别、语音识别等领域高效的表现而得到了广泛的应用,同样也为解决传统推荐系统中稀疏性、复杂特征难提取和挖掘特征交叉等问题提出了有效方案。为此,本文提出了基于Springboot框架的个性化课程推荐系统,主要展开的研究工作如下:1、对现有基于深度学习的推荐和教育学习资源的研究进展进行概述,阐述了常用推荐算法的思想、原理、具体流程和各自的优缺点,对深度学习基本模型进行了简单介绍,最后提出本文评估个性化推荐系统实验方法和评估指标。2、建立基于Springboot框架下融合自然语言处理的网络模型的个性化课程推荐模型。1、系统应具有实用性、可靠性和适用性,同时注意到先进性。
二、功能需求分析
个性化课程推荐系统的功能主要分为台用户根据自己的需求进行注册登录,学生浏览课程资讯,课程学习,课程信息。老师进行课程信息管理、课程分类管理等,后台系统管理员主要对注册用户,课程资讯数据,课程分类、课程学习进行管理维护。
2.1前台用户功能
(1)注册账号:学生填写个人信息,并验证手机号码。
(2)登录:根据账号密码进行登录操作。
(3)浏览课程资讯数据:学生可以浏览主页面的课程资讯数据来了解最新的系统资讯数据。
(4)维护个人信息:学生因个人信息的变更可以随时修改自己注册信息。
(5)课程信息:学生可以在线进行课程查询操作。
(6)课程学习:学生可以进行课程学习。
(7)教师功能如下:
(8)课程信息管理:发布课程信息可供学生浏览。
(9)课程学习管理:上传学习视频到系统供学生在线进行视频学习。
2.2后台管理员功能
(1)修改密码:管理员可以随时修改自己进入系统的登录密码,以保证系统的安全性。
(2)课程资讯:发布课程最新资讯数据等。
(3)课程信息管理:对课程信息进行维护,添加、删除、修改信息。
(4)课程分类管理:对课程信息进行分类维护,添加、删除、修改信息。
(5)课程学习管理:对课程学习进行维护管理等。
三、前台用户功能
3.1用户首页模块
3.2学习论坛模块
3.3课程资讯模块
3.4课程信息推荐模块
3.5课程信息详细模块
四、管理员功能模块
4.1公告栏管理模块
4.2教师用户管理模块
4.3学习论坛管理模块
4.4课程信息管理模块
4.5课程学习添加管理模块
五、部分核心代码
5.1课程信息的逻辑代码
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
5.2课程学习界面逻辑代码
@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());
}
5.3课程分类管理界面逻辑代码
@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);
}
5.4学生管理界面关键代码
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
5.5用户注册逻辑代码
* 注册
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}