当前位置: 代码迷 >> 综合 >> 基于idea-SSM协同过滤算法的图书借阅管理系统开发与制作(javaweb-php-asp.netC#-j2ee)包含借阅个性化推荐统计分析
  详细解决方案

基于idea-SSM协同过滤算法的图书借阅管理系统开发与制作(javaweb-php-asp.netC#-j2ee)包含借阅个性化推荐统计分析

热度:42   发布时间:2023-11-23 05:27:27.0

 

 

目录

 

 

0、效果展示

1、协同过滤算法的图书借阅管理系统概述

2、协同过滤算法的图书借阅管理系统搭建环境

3、协同过滤算法的图书借阅管理系统数据表结构

?4、后端代码示例

5、前端代码示例


 

0、效果展示

 

 

 

1、协同过滤算法的图书借阅管理系统概述

 

 

个性化推荐:依据借阅用户的借阅记录,分析用户的喜好,主动向用户推荐可能喜欢的图书

协同过滤是根据用户借阅书籍编号以及对书籍的评分去计算的


很多用户(M)借阅同几本书(N),并且评分比较相近, 如果其他的某个用户借阅了(N)中的某几本书, 
那么M用户借阅的其他书籍就可以推荐给这个用户

 

本系统实现的功能包含:图书分类管理,图书管理查询,图书收藏,借阅管理,续借管理,逾期管理,预约管理,协同过滤推荐图书查询,还书提醒,借阅统计,预约统计,推荐统计

2、协同过滤算法的图书借阅管理系统搭建环境

 

本文以实现一个线上协同过滤算法的图书借阅管理系统为目标,从环境搭建到编码实现全过程讲述

我们使用javaweb、J2EE来构建协同过滤算法的图书借阅管理系统,环境使用最新版jdk和tomcat,配合mysql数据库

开发工具使用idea(也可以使用eclipse),数据库管理工具使用Navicat Premium 

开发框架使用SSH(Struts+Spring+Hibernate);

没有使用JavaBean Servlet MVC结构或SSM(Spring+SpringMVC+MyBatis),这两个框架我们在别的项目中再介绍开发过程

 

 

 

3、协同过滤算法的图书借阅管理系统数据表结构

 

表英文名称 表中文名称 字段名称 数据类型 字段说明
t_book   id int(11)  
t_book   author varchar(255)  
t_book   filePath varchar(255)  
t_book   name varchar(255)  
t_book   note varchar(255)  
t_book   price double  
t_book   publishDate varchar(255)  
t_book   publisher varchar(255)  
t_book   sid varchar(255)  
t_book   tags varchar(255)  
t_book   status varchar(255)  
t_book   book_type_id int(11)  
t_book_borrow   id int(11)  
t_book_borrow   days int(11)  
t_book_borrow   endDate varchar(255)  
t_book_borrow   outDeal varchar(255)  
t_book_borrow   realDate varchar(255)  
t_book_borrow   startDate varchar(255)  
t_book_borrow   book_id int(11)  
t_book_borrow   user_id int(11)  
t_book_borrow   score int(11)  
t_book_type   id int(11)  
t_book_type   name varchar(255)  
t_book_user   id int(11)  
t_book_user   book_id int(11)  
t_book_user   user_id int(11)  
t_sysuser   id int(11)  
t_sysuser   userID int(11)  
t_user   id int(11)  
t_user   userID int(11)  
t_user_filter_result   id int(11)  
t_user_filter_result   memberid int(11)  
t_user_filter_result   productids varchar(255)  
t_user_order   id int(11)  
t_user_order   days int(11)  
t_user_order   startDate varchar(255)  
t_user_order   status varchar(255)  
t_user_order   book_id int(11)  
t_user_order   user_id int(11)  
t_userinfo   userID int(11)  
t_userinfo   uname varchar(20)  
t_userinfo   userAddress varchar(100)  
t_userinfo   userBirth varchar(10)  
t_userinfo   userEmail varchar(50)  
t_userinfo   userGender int(11)  
t_userinfo   userName varchar(20)  
t_userinfo   userPassword varchar(150)  
t_userinfo   userPhone varchar(255)  
t_userinfo   checkcode varchar(255)  

?4、后端代码示例

 

package biz.web.action;import biz.entity.UserOrder;
import biz.entity.main.Book;
import biz.entity.main.BookBorrow;
import biz.entity.main.SimpleUser;
import biz.web.service.impl.BizService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import util.*;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;@Controller
@RequestMapping("/sys")
public class ABookBorrow extends BaseAction {@Autowiredprivate BizService service;@RequestMapping(value = "/add2BookBorrow.do", method = RequestMethod.GET)public String add2() {return "sys/addBookBorrow";}@RequestMapping(value = "/borrowWarn.do", method = RequestMethod.GET)public String borrowWarn() {String lastdate = DateUtil.addDays(DateUtil.getCurrentTime(), 1);List<BookBorrow> list = service.queryByHQL("from BookBorrow where realDate is null and endDate<=? and user.id=?", lastdate,getSimpleUser().getId());putRequestValue("list", list);return "sys/borrowWarn";}@RequestMapping(value = "/queryBookBorrowMonth.do")public String queryBookBorrowMonth() {String lastdate = DateUtil.addDays(DateUtil.getCurrentTime(), -60);List<BookBorrow> list = service.queryByHQL("from BookBorrow where realDate is null and endDate<=?", lastdate);putRequestValue("list", list);return "sys/queryBookBorrowMonth";}@RequestMapping(value = "/add2BookBack.do", method = RequestMethod.GET)public String add2BookBack() {return "sys/addBookBorrowBack";}@RequestMapping(value = "/add2BookBorrowRE.do", method = RequestMethod.GET)public String add2BookBorrowRE() {return "sys/addBookBorrowRE";}@RequestMapping(value = "/getBookBorrow.do", method = RequestMethod.GET)public String get(int uid) {try {BookBorrow bean = (BookBorrow) service.get(BookBorrow.class, uid);request.setAttribute("modifybean", bean);return "sys/modifyBookBorrow";} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "获取信息失败.");return ERROR;}}@RequestMapping(value = "/deleteBookBorrow.do")public String delete(String ids) {try {service.delete(BookBorrow.class, ids);MessageUtil.addRelMessage(request, "删除信息成功.", "mainquery");return SUCCESS;} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "删除信息失败.");return ERROR;}}@RequestMapping(value = "/addBookBorrow.do")public String add(BookBorrow bean) {try {SimpleUser user = service.getSimpleUserById(bean.getUser().getUser().getUname());if (user == null) {MessageUtil.addMessage(request, "用户编号错误.");return ERROR;}Book book = (Book) service.get(Book.class, bean.getBook().getId());if (!book.getStatus().equals("在架")) {MessageUtil.addMessage(request, "图书已借外借了.");return ERROR;}bean.setBook(book);bean.setUser(user);SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");Date s = sf.parse(bean.getStartDate());String endDate = sf.format(DateUtil.addDays(s, bean.getDays()));bean.setEndDate(endDate);service.addBookBorrow(bean);MessageUtil.addMessage(request, "添加成功.");return SUCCESS;} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "添加失败.");return ERROR;}}@RequestMapping(value = "/addBookBorrowByUser.do")public String addBookBorrowByUser(UserOrder bean) {try {SimpleUser user = getSimpleUser();List<?> list = service.queryByHQL("from UserOrder where user.id=? and status='失约'", user.getId());if (list.size() >= 3) {MessageUtil.addMessage(request, "你失约已达3次,不能预约");return ERROR;}Book book = (Book) service.get(Book.class, bean.getBook().getId());if (!book.getStatus().equals("在架")) {MessageUtil.addMessage(request, "图书已借外借了.");return ERROR;}UserOrder order = new UserOrder();order.setBook(book);order.setUser(user);order.setDays(30);order.setStartDate(DateUtil.addDays(DateUtil.getCurrentTime(), 3));//			SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");//			Date s = sf.parse(bean.getStartDate());//			String endDate = sf.format(DateUtil.addDays(s, bean.getDays()));//			bean.setEndDate(endDate);service.addUserOrder(order);MessageUtil.addRelMessage(request, "预约成功.请在3天内到馆取书", "mainquery");return SUCCESS;} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "预约失败.");return ERROR;}}@RequestMapping(value = "/addBookBorrowBack.do")public String addBookBorrowBack(BookBorrow bean) {try {Book book = service.getBookBySid(bean.getBook().getSid());if (book == null) {MessageUtil.addMessage(request, "图书编号不存在.");return ERROR;}if (book.getStatus().equals("在架")) {MessageUtil.addMessage(request, "图书已在架.");return ERROR;}bean.setBook(book);service.updateBookBorrowBack(bean);MessageUtil.addMessage(request, "还书成功.");return SUCCESS;} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "还书失败.");return ERROR;}}@RequestMapping(value = "/addBookBorrowBackByUser.do")public String addBookBorrowBackByUser(BookBorrow bean) {try {Book book = (Book) service.get(Book.class, bean.getBook().getId());if (book == null) {MessageUtil.addMessage(request, "图书不存在.");return ERROR;}if (book.getStatus().equals("在架")) {MessageUtil.addMessage(request, "图书已在架.");return ERROR;}bean.setBook(book);service.updateBookBorrowBackUser(bean);MessageUtil.addRelMessage(request, "还书成功.", "mainquery");return SUCCESS;} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "还书失败.");return ERROR;}}@RequestMapping(value = "/addBookBorrowRE.do")public String addBookBorrowRE(BookBorrow bean) {try {Book book = service.getBookBySid(bean.getBook().getSid());if (book == null) {MessageUtil.addMessage(request, "图书编号不存在.");return ERROR;}if (book.getStatus().equals("在架")) {MessageUtil.addMessage(request, "图书未外借.");return ERROR;}bean.setBook(book);service.updateBookBorrowRE(bean);MessageUtil.addMessage(request, "续借成功.");return SUCCESS;} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "续借失败.");return ERROR;}}@RequestMapping(value = "/updateBookBorrow.do")public String update(BookBorrow bean) {try {service.update(bean);MessageUtil.addMessage(request, "更新成功.");return SUCCESS;} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "更新失败.");return ERROR;}}@RequestMapping(value = "/updateBookBorrowScore.do")public String updateBookBorrowScore(BookBorrow bean) {try {BookBorrow temp = (BookBorrow) service.get(BookBorrow.class, bean.getId());temp.setScore(bean.getScore());service.update(temp);MessageUtil.addRelMessage(request, "更新成功.", "baseAdd");return SUCCESS;} catch (Exception e) {e.printStackTrace();MessageUtil.addMessage(request, "更新失败.");return ERROR;}}@RequestMapping(value = "/queryBookBorrow.do")public String query() {try {int pageNum = 0;String t = request.getParameter("pageNum");if (StringUtil.notEmpty(t)) {pageNum = Integer.valueOf(t);}Page p = (Page) session.getAttribute(Constant.SESSION_PAGE);if (pageNum == 0 || p == null) {p = new Page();p.setCurrentPageNumber(1);p.setTotalNumber(0l);p.setItemsPerPage(Constant.SESSION_PAGE_NUMBER);// 字段名称集合LinkedList<String> parmnames = new LinkedList<String>();// 字段值集合LinkedList<Object> parmvalues = new LinkedList<Object>();// 页面参数集合Set parm = request.getParameterMap().entrySet();for (Object o : parm) {Entry<String, Object> e = (Entry<String, Object>) o;String name = e.getKey();// 页面字段名称if (name.startsWith("s_")) {String fieldValue = request.getParameter(name);// 页面字段值if (StringUtil.notEmpty(fieldValue)) {name = name.substring(2, name.length());// 实体字段名称if ("user.user.uname".equals(name)) {parmnames.add(name);parmvalues.add(fieldValue);} else {parmnames.add(name);parmvalues.add(FieldUtil.format(BookBorrow.class, name, fieldValue));}}}}Object user = getSessionUser();if (user instanceof SimpleUser) {parmnames.add("user.id");SimpleUser su = (SimpleUser) user;parmvalues.add(su.getId());}SearchParamBean sbean = new SearchParamBean();sbean.setParmnames(parmnames);sbean.setParmvalues(parmvalues);p.setConditonObject(sbean);} else {p.setCurrentPageNumber(pageNum);}Page page = null;page = service.find(p, BookBorrow.class);session.setAttribute(Constant.SESSION_PAGE, page);return "sys/listBookBorrow";} catch (Exception e) {e.printStackTrace();return ERROR;}}}

5、前端代码示例

 

<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ include file="./head.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>${appTitle }</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><script type="text/javascript" src="login/js/jquery-1.9.0.min.js"></script><script type="text/javascript" src="login/images/login.js"></script><link href="login/css/login2.css" rel="stylesheet" type="text/css"/><script src="login/bootstrap.min.js" type="text/javascript"></script>
</head>
<body>
<h1>${appTitle }</h1><div class="login" style="margin-top:50px;"><div class="header"><div class="switch" id="switch"><a class="switch_btn_focus" id="switch_qlogin" href="javascript:void(0);"tabindex="7">登录</a><!-- 			<a class="switch_btn" id="switch_login" href="javascript:void(0);" tabindex="8">快速注册</a><div class="switch_bottom" id="switch_bottom" style="position: absolute; width: 64px; left: 0px;"></div> --></div></div><div class="web_qr_login" id="web_qr_login" style="display: block;"><!--登录--><div class="web_login" id="web_login"><div class="login-box"><div class="login_form"><form action="${pageContext.request.contextPath }/com/login.do" name="loginform" id="loginform"accept-charset="utf-8" id="login_form" class="loginForm" method="post"><div class="uinArea" id="uinArea"><label class="input-tips" for="u">帐号:</label><div class="inputOuter" id="uArea"><input type="text" name="loginid" id="username"   class="inputstyle"rel="tooltip" data-original-title="请输入您的登陆账号" data-placement="button" value="admin"/></div></div><div class="pwdArea" id="pwdArea"><label class="input-tips" for="p">密码:</label><div class="inputOuter" id="pArea"><input type="password" name="password" id="password" value="111111" rel="tooltip"data-original-title="请输入您的登录密码" class="inputstyle" data-placement="button"/></div></div><div class="uinArea" id="uinArea"><label class="input-tips" for="u">角色:</label><div class="inputOuter" id="uArea"><select name="logintype" class="selectstyle"><option value="SysUser">管理员</option><option value="SimpleUser">用户</option></select></div></div><div class="uinArea" id="uinArea"><label class="input-tips" for="u">验证码:</label><div class="inputOuter" id="uArea"><a href="javascript:void(0);"><img style="border: 0px; float: right" width="110px"height="40px"src="${pageContext.request.contextPath }/checkcode"alt="验证码" align="left"onclick="this.src = '${pageContext.request.contextPath }/checkcode?' + Math.random();"/></a><input type="text" id="captcha-code" name="checkcode" class="codestyle" rel="tooltip"data-original-title="请输入验证码" data-placement="button"/></div></div><c:if test="${not empty signErrorMessage }"><div class="alert alert-error"><strong>提示:</strong><br/><iclass="icon-exclamation-sign"></i> ${signErrorMessage }</div></c:if><%session.removeAttribute("signErrorMessage"); %><div style="padding-left:50px;margin-top:20px;"><input type="submit" value="登 录"style="width:150px;"class="button_blue"/><a href="./reg.jsp" style="margin-left: 5px">用户注册</a><br/></div></form></div></div></div><!--登录end--></div><!--注册--><div class="qlogin" id="qlogin" style="display: none; "><div class="web_login"><form name="form2" id="regUser" accept-charset="utf-8" action="" method="post"><input type="hidden" name="to" value="reg"/><input type="hidden" name="did" value="0"/><ul class="reg_form" id="reg-ul"><div id="userCue" class="cue">快速注册请注意格式</div><li><label for="user" class="input-tips2">用户名:</label><div class="inputOuter2"><input type="text" id="user" name="user" maxlength="16" class="inputstyle2"/></div></li><li><label for="passwd" class="input-tips2">密码:</label><div class="inputOuter2"><input type="password" id="passwd" name="passwd" maxlength="16" class="inputstyle2"/></div></li><li><label for="passwd2" class="input-tips2">确认密码:</label><div class="inputOuter2"><input type="password" id="passwd2" name="" maxlength="16" class="inputstyle2"/></div></li><li><label for="qq" class="input-tips2">QQ:</label><div class="inputOuter2"><input type="text" id="qq" name="qq" maxlength="10" class="inputstyle2"/></div></li><li><div class="inputArea"><input type="button" id="reg" style="margin-top:10px;margin-left:85px;" class="button_blue"value="同意协议并注册"/> <a href="#" class="zcxy" target="_blank">注册协议</a></div></li><div class="cl"></div></ul></form></div></div><!--注册end-->
</div>
<script type="text/javascript">$("[rel=tooltip]").tooltip();$("#captcha-code").keyup(function () {if (this.value.match(/[^a-zA-Z0-9 ]/g)) this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');});$("#loginform").submit(function () {if ($("#username").val().length < 2 || $("#username").val().length > 14) {$("#usernamecontrol").addClass("error");$("#username").focus();return false;} else $("#usernamecontrol").removeClass("error");if ($("#password").val().length < 4 || $("#password").val().length > 30) {$("#passwordcontrol").addClass("error");$("#password").focus();return false;} else $("#passwordcontrol").removeClass("error");if ($("#captcha-code").val().length != 4) {$("#captcha-codecontrol").addClass("error");$("#captcha-code").tooltip("show");$("#captcha-code").focus();return false;} else $("#captcha-codecontrol").removeClass("error");return true;});function toreg() {window.location = "./reg.jsp";}
</script>
</body>
</html>

 

  相关解决方案