一、源码特点
?? ?java 基于协同过滤课程推荐管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开
发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。
java web协同过滤课程推荐系统1
二、功能介绍
前台功能:
系统首页浏览
公告浏览
课程浏览
查看学习记录。利用过滤算法进行推荐课程信息
后台功能:
(1)管理员管理:对管理员信息进行添加、删除、修改和查看
(2)用户管理:对用户信息进行添加、删除、修改和查看
(3)公告管理:对公告信息进行添加、删除、修改和查看
(4)课程管理:对课程信息进行添加、删除、修改和查看
(5)课程明细管理:对课程明细信息进行添加、删除、修改和查看
(6)学习历史管理:对学习历史信息进行删除、修改和查看
利用通过用访问对记录访问过的课程信息,通过访问记录用户的最相近的课程,做计算协同数据的数据来源,通过java 协同算法,生成推荐业务数据,通过方法实时读取推荐和现在访问相近的课程信息,来进行展现
数据库设计
(1)管理员信息表如表5.1所示:
表5.1 管理员信息表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | glyid | INTEGER | 11 | 是 | 管理员编号 |
2 | yhm | VARCHAR | 40 | 否 | 用户名 |
3 | mm | VARCHAR | 40 | 否 | 密码 |
4 | xm | VARCHAR | 40 | 否 | 姓名 |
(2)用户如表5.2所示:
表5.2 用户表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | yhid | INTEGER | 11 | 是 | 用户编号 |
2 | yhm | VARCHAR | 40 | 否 | 用户名 |
3 | mm | VARCHAR | 40 | 否 | 密码 |
4 | xm | VARCHAR | 40 | 否 | 姓名 |
5 | lxdh | VARCHAR | 40 | 否 | 联系电话 |
6 | lxdz | VARCHAR | 40 | 否 | 联系地址 |
(3)公告表如表5.3所示:
表5.3 公告表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | ggid | INTEGER | 11 | 是 | 公告编号 |
2 | bt | VARCHAR | 40 | 否 | 标题 |
3 | nr | VARCHAR | 40 | 否 | 内容 |
4 | fbsj | VARCHAR | 40 | 否 | 发布时间 |
(4)课程如表5.4所示:
表5.4 课程信息表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | kcid | INTEGER | 11 | 是 | 课程编号 |
2 | kcmc | VARCHAR | 40 | 否 | 课程名称 |
3 | js | VARCHAR | 40 | 否 | 介绍 |
4 | tp | VARCHAR | 40 | 否 | 图片 |
5 | zz | VARCHAR | 40 | 否 | 作者 |
6 | cbs | VARCHAR | 40 | 否 | 出版社 |
(5)课程明细表如表5.5所示:
表5.5 课程明细表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | kcmxid | INTEGER | 11 | 是 | 课程明细编号 |
2 | kc | VARCHAR | 40 | 否 | 课程 |
3 | mxzy | VARCHAR | 40 | 否 | 明细摘要 |
4 | nr | VARCHAR | 40 | 否 | 内容 |
实体关系图
核心代码
public static String outNearbyUserList(String user) { //课程id
DBO db=new DBO();
Map scores = new HashMap();
String sql="";
ResultSet rs=null;
///商品
int i=0;
sql="select * from kecheng where 1=1";
try{
rs=db.query(sql);
while(rs.next()){
// i++;
if (rs.getString("kcid").equalsIgnoreCase(user)) {
continue;
}
double score = getOSScore(user, rs.getString("kcid"));
System.out.println("score="+score);
scores.put(rs.getString("kcid"), String.valueOf(score));
}
db.close();
}catch(Exception e){
e.printStackTrace();
}
/*
for (String tempUser : users) {
if (tempUser.equalsIgnoreCase(user)) {
continue;
}
double score = getOSScore(user, tempUser);
System.out.println("score="+score);
scores.put(tempUser, score);
}
*/
System.out.println(scores.toString());
TreeMapTest mp=new TreeMapTest();
String a= mp.getMin(scores);
System.out.println("a="+a);
return a;
}
private static Double getOSScore(String user1, String user2) {
HashMap user1Score = (HashMap) score.get(user1);
HashMap user2Score = (HashMap) score.get(user2);
double totalscore = 0.0;
Iterator it = user1Score.keySet().iterator();
while (it.hasNext()) {
String film = (String) it.next();
int a1 = (Integer) user1Score.get(film);
int a2 = (Integer) user1Score.get(film);
int b1 = (Integer) user2Score.get(film);
int b2 = (Integer) user2Score.get(film);
int a = a1 * a2 - b1 * b2;
//System.out.println(Math.abs(a));
totalscore += Math.sqrt(Math.abs(a));
}
return totalscore;
}
private static Map getScore() {
Map score = new HashMap();
// aaa
HashMap tempScore = null;
DBO db=new DBO();
String sql="select * from kecheng ";
String sq="";
ResultSet rs=null;
ResultSet r=null;
ResultSet rr=null;
db.open();
int num=0;
try{
rs=db.query(sql);
int j=0;
while(rs.next()){
tempScore= new HashMap();
sql="select * from yonghu ";
db.open();
r=db.query(sql);
while(r.next()){
sq="select count(1) as num from xxls where kc='"+rs.getString("kcid")+"' ";//and yh='"+r.getString("yhm")+"'
db.open();
rr=db.query(sq);
if(rr.next()){
num=rr.getInt("num");
}
tempScore.put(r.getString("yhm"), num);
}
score.put(rs.getString("kcid"), tempScore);
j++;
}
}catch(Exception e){
e.printStackTrace();
}finally{
db.close();
}
return score;
}
计算过程
三、注意事项
?? ?1、管理员账号:admin密码:admin 数据库配置文件DBO.java
?? ? 2、开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。
?? ?3、数据库文件名是jspkctj.sql ,系统名称kctj
?? ?4、系统首页地址:http://127.0.0.1:8080/kctj/index.jsp
四 系统实现
源码获取 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓