教务管理系统 选课功能
1、用户账户管理
2、学生个人信息的查看与修改
3、学生的网上选课与课程的评分
4、教师个人信息的查看与修改
5、教师对学生课程评价结果的查看
6、管理员对学生信息与教师信息的查看与添加
7、管理员对课程的增删改查
8、管理员对课程评价结果的统计与删除。
9、根据学生对课程评分的高低,在学生选课时进行推荐。
在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。使用这个距离,欧氏空间成为度量空间。相关联的范数称为欧几里得范数。
二维空间的公式
基于一个这样的假设“跟你喜好相似的人喜欢的东西你也很有可能喜欢。”所以基于用户的协同过滤主要的任务就是找出用户的最近邻居,从而根据最近邻居的喜好做出未知项的评分预测。这种算法主要分为3个步骤:
这种算法存在性能上的瓶颈,当用户数越来越多的时候,寻找最近邻居的复杂度也会大幅度的增长。
参考:https://www.jianshu.com/p/d0df3ead55a1
package cn.ltysyn.task;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import cn.ltysyn.bean.Course;
import cn.ltysyn.bean.Student;
import cn.ltysyn.service.ICourseService;
import cn.ltysyn.service.IElectiveService;
import cn.ltysyn.service.IRecommendService;
import cn.ltysyn.service.IStudentService;
@Component
public class MyCFRecomment {
//获取学生编号
@Autowired
private IStudentService studentService;
//获取课程信息
@Autowired
private ICourseService courseService;
//获取评分的信息
@Autowired
private IElectiveService electiveService;
@Autowired
private IRecommendService iRecommendService;
// //创建用户信息
// //private List stuList = new ArrayList();
// private static int[] stuArr = {1,2,3};
// //创建课程信息
// private static int[] couArr = {10,20,30};
// //创建评分的集合 (学生 id , 分数集合)
// private static Map> goalMap = new HashMap>();
@Scheduled(cron = "0 0/10 * * * ?")
public void recommend() {
//获取到所有的学生
List selectAllStudent = studentService.selectAllStudent();
//获取所有的课程
//获取评分信息 根据学生id 和课程id 获取评分信息
if(selectAllStudent.size()!=0) {
Map> goalMap = new HashMap>();
List stuList = new ArrayList();
List selectAllCourse = (List) courseService.selectAllCourse();
for(Student stu:selectAllStudent) {
List courtsGoals = new ArrayList();
for(Course cou:selectAllCourse) {
CourtsGoal courtsGoal = new CourtsGoal();
Integer goal = electiveService.selectByStuAndCourseId(stu.getStuId(),cou.getCourseId());
courtsGoal.setCourtsId(cou.getCourseId());
courtsGoal.setGoal(goal);
courtsGoals.add(courtsGoal);
}
//获取到学生与课程评分的关系数据
goalMap.put(stu.getStuId(), courtsGoals);
stuList.add(stu.getStuId());
}
System.out.println(goalMap);
//System.out.println(selectAllCourse);
//计算用户相似度
Map>> dataMap = calcUserSimilarity(stuList.toArray(),goalMap);
//计算课程的推荐度
Map> recommendCourse = calcRecommendCourse(dataMap,goalMap);
//处理推荐电影列表
Map> handleRecommendCourse = handleRecommendCourse(recommendCourse,goalMap);
//删除所有推荐列表信息
delectAllRecommendCourse();
//保存推荐列表信息
saveRecommendCourse(handleRecommendCourse);
//删除重复的推荐信息
//repeatRecomendCourse();
}else {
}
}
private void repeatRecomendCourse() {
// TODO Auto-generated method stub
iRecommendService.repeatRecomendCourse();
}
private void delectAllRecommendCourse() {
// TODO Auto-generated method stub
iRecommendService.delectAllRecommendCourse();
}
private void saveRecommendCourse(Map> handleRecommendCourse) {
// TODO Auto-generated method stub
iRecommendService.saveRecommendCourse(handleRecommendCourse);
}
/*
* public static void main(String[] args) { System.out.println(goalMap);
* //计算用户相似度 Map>> dataMap =
* calcUserSimilarity(stuArr,goalMap); //计算课程的推荐度 Map>
* recommendCourse = calcRecommendCourse(dataMap,goalMap); //处理推荐电影列表
* handleRecommendCourse(recommendCourse,goalMap); }
*/
private static Map> handleRecommendCourse(Map> recommendCourse,Map> goalMap) {
Map> handleRecommendCourse = new HashMap>();
for(Map.Entry> reco:recommendCourse.entrySet()) {
//拿到推荐列表
List
等