博主介绍:✌退职 Java 研发工程师、专一于程序设计、源码分享、技术交换、专一于 Java 技术畛域和毕业设计✌
[项目名称
基于 java 的图书管理系统
视频演示
基于 java 的图书管理系统_哔哩哔哩_bilibili](https://ym.maptoface.com/archives/58335)
零碎介绍
[摘要] 互联网时代刚新启之时,公众还不太理解和承受这种新型技术,通过智能手机的到来,公众逐步开始承受到互联网的益处,手机到电脑,各种不拘一格的智能软件到电脑网页等等,波及到各行各业当中。扩充产业的推广面,也减少了更多丰盛的行业,缩小纸质化净化,晋升治理能力,让各行各业失去更全面的倒退和保护。图书馆的数据十分多,这就很好的能够让零碎经行治理,系统管理根本有点就是能够很好的治理大量的数据,这一点也是齐全符合的。传统的图书馆治理是通过纸质的形式记录借阅的状况,非常容易弄丢,治理上也是十分的不不便,批改信息的时候也会应为大量的数据而翻找很久,也容易遗失,更新数据也不及时。
因为有了网络的帮忙,这些图书的数据的治理就变得十分不便了,所有的数据贮存交给数据库,所有的逻辑解决交给后盾,咱们只须要在电脑上针对不同的性能操作,经行数据的提交和批改就行。依据查阅的材料和结合实际需要加上参考大量的我的项目来进行剖析和设计,采纳 B / S 框架联合 JSP 技术来开发。为了保证数据长久化须要应用数据库保留数据,应用 MySQL 数据库来保留。
3.4 具体功能模块
零碎是帮忙图书管理员不便对图书进行书籍治理的性能零碎,能无效晋升管理效率,并且能够缩小保护老本。本零碎次要是分为前台和后盾,后盾是用来做数据管理和保护。零碎前台是用户对图书借阅、图书浏览、集体信息管理的次要性能界面,前台次要性能包含注册登录、首页、图书分类、新闻资讯、对于咱们、我的预约、个人信息、借阅预约、留言板等。对于图书系统管理员来说则是须要对系统的所有数据进行对立的布局和治理,次要包含了计剖析、留言治理、会员治理、资讯治理、系统管理、类别治理、图书治理、借阅预约等功能模块;。系统管理员的性能图如图 3 - 2 所示
图 3 -2 功能模块图
3.5 零碎业务形容
零碎是帮忙图书管理员不便对图书进行书籍治理的性能零碎,能无效晋升管理效率,并且能够缩小保护老本。本零碎次要是分为前台和后盾,后盾是用来做数据管理和保护,前台能够进行图书数据操作和根底性能操作。图书管理系统的次要功能模块如下:
用户的次要功能模块:
1. 图书展现模块
图书展现模块次要向用户展现在线图书的展现。
2. 新闻显示模块
次要用于公布最新告诉信息,或者图书的推广等等。
3. 预约图书模块
图书预约模块次要是实现用户的网上预约过程。图书预约模块分为两个子模块:增加我的预约和借阅预约操作。
4. 用户治理模块
包含用户注册、登录、图书分类、新闻资讯、对于咱们、我的主页、我的预约、借阅和预约的状况、查看个人信息。
图书治理网站的用户用例图如图 3 - 3 所示。
图 3 -3 用户用例图
1. 会员治理模块
治理所有的会员用户的数据,能够针对某条数据进行批改或者删除,也能够进行搜寻,找到须要查看的用户信息。
2. 统计分析模块
针对书籍借阅的状况能够进行数据的统计,应用图表的形式展现进去,能够让管理员清晰的查看到以后的状况。
3. 图书治理模块
所有图书信息进行治理,针对图书的信息能够录入、批改、查看、删除,内容介绍等等。
4. 借阅治理模块
图书管理系统提供给了前台用户以图书借阅的性能操作,用户在登录零碎后对须要借阅的图书进行操作,即可生成惟一的借阅信息,管理员就能够在后盾查看以后记录并且进行治理。
5. 留言治理模块
用户在前台进行留言后,所有的留言信息都会展现在零碎后盾当中,管理员能够针对不当的留言进行删除。
基于 java 的图书治理网站后盾性能图如图 3 - 4 所示。
编辑
编辑
编辑
环境须要
1. 运行环境:最好是 java jdk 1.8,咱们在这个平台上运行的。其余版本实践上也能够。
2.IDE 环境:IDEA,Eclipse,Myeclipse 都能够。举荐 IDEA;
3.tomcat 环境:Tomcat 7.x,8.x,9.x 版本均可
4. 硬件环境:windows 7/8/10 1G 内存以上;或者 Mac OS;
5. 数据库:MySql 5.7 版本;
6. 是否 Maven 我的项目:否;
技术栈
- 后端:Spring+SpringMVC+Mybatis
- 前端:JSP+CSS+JavaScript+jQuery
应用阐明
- 应用 Navicat 或者其它工具,在 mysql 中创立对应名称的数据库,并导入我的项目的 sql 文件;
- 应用 IDEA/Eclipse/MyEclipse 导入我的项目,Eclipse/MyEclipse 导入时,若为 maven 我的项目请抉择 maven;
若为 maven 我的项目,导入胜利后请执行 maven clean;maven install 命令,而后运行; - 将我的项目中 springmvc-servlet.xml 配置文件中的数据库配置改为本人的配置;
- 运行我的项目,在浏览器中输出 http://localhost:8080/ 登录
运行截图
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
用户管理控制层:
package com.houserss.controller;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
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 org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.houserss.common.Const;
import com.houserss.common.Const.Role;
import com.houserss.common.ServerResponse;
import com.houserss.pojo.User;
import com.houserss.service.IUserService;
import com.houserss.service.impl.UserServiceImpl;
import com.houserss.util.MD5Util;
import com.houserss.util.TimeUtils;
import com.houserss.vo.DeleteHouseVo;
import com.houserss.vo.PageInfoVo;
/**
- Created by admin
*/
@Controller
@RequestMapping(“/user/”)
public class UserController {
@Autowired
private IUserService iUserService;
/**
* 用户登录
* @param username
* @param password
* @param session
* @return
*/
@RequestMapping(value = "login.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse<User> login(User user,String uvcode, HttpSession session){String code = (String)session.getAttribute("validationCode");
if(StringUtils.isNotBlank(code)) {if(!code.equalsIgnoreCase(uvcode)) {return ServerResponse.createByErrorMessage("验证码不正确");
}
}
ServerResponse<User> response = iUserService.login(user.getUsername(),user.getPassword());
if(response.isSuccess()){session.setAttribute(Const.CURRENT_USER,response.getData());
}
return response;
}
}
管理员管理控制层:
package com.sxl.controller.admin;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxl.controller.MyController;
@Controller(“adminController”)
@RequestMapping(value = “/admin”)
public class AdminController extends MyController {
@RequestMapping(value = "/index")
public String frame(Model model, HttpServletRequest request)throws Exception {return "/admin/index";}
@RequestMapping(value = "/main")
public String main(Model model, HttpServletRequest request)throws Exception {return "/admin/main";}
@RequestMapping(value = "/tj1")
public String tj1(Model model, HttpServletRequest request)throws Exception {String sql="select DATE_FORMAT(insertDate,'%Y-%m-%d') dates,sum(allPrice) price from t_order order by DATE_FORMAT(insertDate,'%Y-%m-%d') desc";
List<Map> list = db.queryForList(sql);
model.addAttribute("list", list);
System.out.println(list);
return "/admin/tj/tj1";
}
@RequestMapping(value = "/password")
public String password(Model model, HttpServletRequest request)throws Exception {return "/admin/password";}
@RequestMapping(value = "/changePassword")
public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {Map admin = getAdmin(request);
if(oldPassword.equals(admin.get("password").toString())){
String sql="update t_admin set password=? where id=?";
db.update(sql, new Object[]{newPassword,admin.get("id")});
return renderData(true,"1",null);
}else{return renderData(false,"1",null);
}
}
}
批改明码业务逻辑:
package com.sxl.controller.admin;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxl.controller.MyController;
@Controller(“userController”)
@RequestMapping(value = “/user”)
public class UserController extends MyController {
@RequestMapping(value = "/index")
public String frame(Model model, HttpServletRequest request)throws Exception {return "/user/index";}
@RequestMapping(value = "/main")
public String main(Model model, HttpServletRequest request)throws Exception {return "/user/main";}
@RequestMapping(value = "/password")
public String password(Model model, HttpServletRequest request)throws Exception {return "/user/password";}
@RequestMapping(value = "/changePassword")
public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {Map user = getUser(request);
if(oldPassword.equals(user.get("password").toString())){
String sql="update t_user set password=? where id=?";
db.update(sql, new Object[]{newPassword,user.get("id")});
return renderData(true,"1",null);
}else{return renderData(false,"1",null);
}
}
@RequestMapping(value = "/mine")
public String mine(Model model, HttpServletRequest request)throws Exception {
Map user =getUser(request);Map map = db.queryForMap(“select * from t_user where id=?”,new Object[]{user.get(“id”)});model.addAttribute(“map”, map); return “/user/mine”;
}
@RequestMapping(value = "/mineSave")
public ResponseEntity<String> mineSave(Model model,HttpServletRequest request,Long id
,String username,String password,String name,String gh,String mobile) throws Exception{
int result = 0;
String sql="update t_user set name=?,gh=?,mobile=? where id=?";
result = db.update(sql, new Object[]{name,gh,mobile,id});
if(result==1){return renderData(true,"操作胜利",null);
}else{return renderData(false,"操作失败",null);
}
}
}
通用治理模块:
package com.sxl.controller;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import com.sxl.util.JacksonJsonUtil;
import com.sxl.util.StringUtil;
import com.sxl.util.SystemProperties;
public class BaseController {
public static final Long EXPIRES_IN = 1000 * 3600 * 24 * 1L;// 1 天
@Autowired
private SystemProperties systemProperties;
/**
* 取得配置文件内容
*/
public String getConfig(String key) {return systemProperties.getProperties(key);
}
/**
* 返回服务器地址 like http://192.168.1.1:8441/UUBean/
*/
public String getHostUrl(HttpServletRequest request) {String hostName = request.getServerName();
Integer hostPort = request.getServerPort();
String path = request.getContextPath();
if (hostPort == 80) {return "http://" + hostName + path + "/";} else {return "http://" + hostName + ":" + hostPort + path + "/";}
}
/***
* 获取以后的 website 门路 String
*/
public static String getWebSite(HttpServletRequest request) {String returnUrl = request.getScheme() + "://"
+ request.getServerName();
if (request.getServerPort() != 80) {returnUrl += ":" + request.getServerPort();
}
returnUrl += request.getContextPath();
return returnUrl;
}
/**
* 初始化 HTTP 头.
*
* @return HttpHeaders
*/
public HttpHeaders initHttpHeaders() {HttpHeaders headers = new HttpHeaders();
MediaType mediaType = new MediaType("text", "html",
Charset.forName("utf-8"));
headers.setContentType(mediaType);
return headers;
}
/**
* 返回 信息数据
*
* @param status
* @param msg
* @return
*/
public ResponseEntity<String> renderMsg(Boolean status, String msg) {if (StringUtils.isEmpty(msg)) {msg = "";}
String str = "{\"status\":\"" + status + "\",\"msg\":\""+ msg +"\"}";
ResponseEntity<String> responseEntity = new ResponseEntity<String>(str,
initHttpHeaders(), HttpStatus.OK);
return responseEntity;
}
/**
* 返回 obj 数据
*
* @param status
* @param msg
* @param obj
* @return
*/
public ResponseEntity<String> renderData(Boolean status, String msg,
Object obj) {if (StringUtils.isEmpty(msg)) {msg = "";}
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("\"status\":\"" + status + "\",\"msg\":\""+ msg +"\",");
sb.append("\"data\":" + JacksonJsonUtil.toJson(obj) + "");
sb.append("}");
ResponseEntity<String> responseEntity = new ResponseEntity<String>(sb.toString(), initHttpHeaders(), HttpStatus.OK);
return responseEntity;
}
/***
* 获取 IP(如果是多级代理,则失去的是一串 IP 值)*/
public static String getIpAddr(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();
}
if (ip != null && ip.length() > 0) {String[] ips = ip.split(",");
for (int i = 0; i < ips.length; i++) {if (!"unknown".equalsIgnoreCase(ips[i])) {ip = ips[i];
break;
}
}
}
return ip;
}
/**
* 国际化取得语言内容
*
* @param key
* 语言 key
* @param args
* @param argsSplit
* @param defaultMessage
* @param locale
* @return
*/
public static String getLanguage(String key, String args, String argsSplit,
String defaultMessage, String locale) {
String language = "zh";
String contry = "cn";
String returnValue = defaultMessage;
if (!StringUtil.isEmpty(locale)) {
try {String[] localeArray = locale.split("_");
language = localeArray[0];
contry = localeArray[1];
} catch (Exception e) {}}
try {
ResourceBundle resource = ResourceBundle.getBundle("lang.resource",
new Locale(language, contry));
returnValue = resource.getString(key);
if (!StringUtil.isEmpty(args)) {String[] argsArray = args.split(argsSplit);
for (int i = 0; i < argsArray.length; i++) {returnValue = returnValue.replace("{" + i + "}",
argsArray[i]);
}
}
} catch (Exception e) { }
return returnValue;
}
}