JavaWeb 图书管理系统
查看更多系统:系统大全,课程设计、毕业设计,请点击这里查看
01 系统简述
图书管理系统就是利用计算机,结合互联网对图书进行结构化、自动化管理的一种软件,来提高对图书的管理效率。
02 系统特点
集成主流框架,简单精简化开发,高拓展性
03 技术
springboot + jpa + mybatis + springsecurity +javaex
后端:
- 基础框架: SpringBoot
- 简单数据操作: Spring Data Jpa
- 复杂数据操作: Mybatis
- 安全框架:SpringSecurity
- 模板引擎: Thymeleaf
前端:
- javaEx, 其实就是对html,css,js的封装。比较接近原生 修改起来比较方便
- jQuery , 讲真的jQuery用着还是很舒服, 突破各种前端框架的限制
04 运行环境
jdk1.8 + maven3 + mysql5.7
05 功能介绍
图书管理
图书列表:显示已经上架的图书信息,可对上架图书进行搜索、修改、删除操作。
图书上架:录入图书信息,输入图书名称、作者、图书分类,页数,定价等数据进行图书录入。
借阅管理
搜索图书:根据图书名称、作者名称,图书分类等搜索图书。
借阅图书:录入图书信息,输入图书名称、作者、图书分类,页数,定价等数据进行图书借阅。
归还图书:对已经借阅的图书进行归还操作。
读者管理
读者列表:显示已经注册的读者用户。
读者添加:录入用户的昵称、用户名、密码、生日、电话、邮箱等信息添加新用户。
用户中心
个人信息:查看、修改个人信息。
用户管理:对已经添加的用户进行搜索、删除、使用权限信息进行设置。
添加管理员:录入管理员的昵称、用户名、密码、生日、电话、邮箱等信息添加新管理员。
06 运行截图
登录界面
首页
图书列表界面
添加图书界面
图书归还界面
读者列表界面
个人信息界面
用户管理界面
07 主要代码
图书管理
package com.book.manager.controller;
import com.book.manager.entity.Book;
import com.book.manager.service.BookService;
import com.book.manager.util.R;
import com.book.manager.util.http.CodeEnum;
import com.book.manager.util.ro.PageIn;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
* @Description 用户管理
*/
@Api(tags = "图书管理")
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookService;
@ApiOperation("图书搜索列表")
@PostMapping("/list")
public R getBookList(@RequestBody PageIn pageIn) {
if (pageIn == null) {
return R.fail(CodeEnum.PARAM_ERROR);
}
return R.success(CodeEnum.SUCCESS,bookService.getBookList(pageIn));
}
@ApiOperation("添加图书")
@PostMapping("/add")
public R addBook(@RequestBody Book book) {
return R.success(CodeEnum.SUCCESS,bookService.addBook(book));
}
@ApiOperation("编辑图书")
@PostMapping("/update")
public R modifyBook(@RequestBody Book book) {
return R.success(CodeEnum.SUCCESS,bookService.updateBook(book));
}
@ApiOperation("图书详情")
@GetMapping("/detail")
public R bookDetail(Integer id) {
return R.success(CodeEnum.SUCCESS,bookService.findBookById(id));
}
@ApiOperation("图书详情 根据ISBN获取")
@GetMapping("/detailByIsbn")
public R bookDetailByIsbn(String isbn) {
return R.success(CodeEnum.SUCCESS,bookService.findBookByIsbn(isbn));
}
@ApiOperation("删除图书")
@GetMapping("/delete")
public R delBook(Integer id) {
bookService.deleteBook(id);
return R.success(CodeEnum.SUCCESS);
}
}
借阅管理
package com.book.manager.controller;
import cn.hutool.core.date.DateUtil;
import com.book.manager.entity.Borrow;
import com.book.manager.service.BookService;
import com.book.manager.service.BorrowService;
import com.book.manager.util.R;
import com.book.manager.util.consts.Constants;
import com.book.manager.util.http.CodeEnum;
import com.book.manager.util.ro.RetBookIn;
import com.book.manager.util.vo.BackOut;
import com.book.manager.util.vo.BookOut;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Description 用户管理
*/
@Api(tags = "借阅管理")
@RestController
@RequestMapping("/borrow")
public class BorrowController {
@Autowired
private BorrowService borrowService;
@Autowired
private BookService bookService;
@ApiOperation("借阅列表")
@GetMapping("/list")
public R getBorrowList(Integer userId) {
return R.success(CodeEnum.SUCCESS,borrowService.findAllBorrowByUserId(userId));
}
@ApiOperation("借阅图书")
@PostMapping("/add")
public R addBorrow(@RequestBody Borrow borrow) {
Integer result = borrowService.addBorrow(borrow);
if (result == Constants.BOOK_BORROWED) {
return R.success(CodeEnum.BOOK_BORROWED);
}else if (result == Constants.USER_SIZE_NOT_ENOUGH) {
return R.success(CodeEnum.USER_NOT_ENOUGH);
}else if (result == Constants.BOOK_SIZE_NOT_ENOUGH) {
return R.success(CodeEnum.BOOK_NOT_ENOUGH);
}
return R.success(CodeEnum.SUCCESS,Constants.OK);
}
@ApiOperation("编辑借阅")
@PostMapping("/update")
public R modifyBorrow(@RequestBody Borrow borrow) {
return R.success(CodeEnum.SUCCESS,borrowService.updateBorrow(borrow));
}
@ApiOperation("借阅详情")
@GetMapping("/detail")
public R borrowDetail(Integer id) {
return R.success(CodeEnum.SUCCESS,borrowService.findById(id));
}
@ApiOperation("删除归还记录")
@GetMapping("/delete")
public R delBorrow(Integer id) {
borrowService.deleteBorrow(id);
return R.success(CodeEnum.SUCCESS);
}
@ApiOperation("已借阅列表")
@GetMapping("/borrowed")
public R borrowedList(Integer userId) {
List<BackOut> outs = new ArrayList<>();
if (userId!=null&&userId>0) {
// 获取所有 已借阅 未归还书籍
List<Borrow> borrows = borrowService.findBorrowsByUserIdAndRet(userId, Constants.NO);
for (Borrow borrow : borrows) {
BackOut backOut = new BackOut();
BookOut out = bookService.findBookById(borrow.getBookId());
BeanUtils.copyProperties(out,backOut);
backOut.setBorrowTime(DateUtil.format(borrow.getCreateTime(),Constants.DATE_FORMAT));
String endTimeStr = DateUtil.format(borrow.getEndTime(), Constants.DATE_FORMAT);
backOut.setEndTime(endTimeStr);
// 判断是否逾期
String toDay = DateUtil.format(new Date(), Constants.DATE_FORMAT);
int i = toDay.compareTo(endTimeStr);
if (i>0) {
backOut.setLate(Constants.YES_STR);
}else {
backOut.setLate(Constants.NO_STR);
}
outs.add(backOut);
}
}
return R.success(CodeEnum.SUCCESS,outs);
}
@ApiOperation("归还书籍")
@PostMapping("/ret")
public R retBook(Integer userId, Integer bookId) {
// 归还图书
borrowService.retBook(userId,bookId);
return R.success(CodeEnum.SUCCESS);
}
}
用户管理
package com.book.manager.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.book.manager.entity.Users;
import com.book.manager.service.UserService;
import com.book.manager.util.R;
import com.book.manager.util.consts.Constants;
import com.book.manager.util.consts.ConvertUtil;
import com.book.manager.util.http.CodeEnum;
import com.book.manager.util.vo.PageOut;
import com.book.manager.util.ro.PageIn;
import com.book.manager.util.vo.UserOut;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Description 用户管理
*/
@Api(tags = "用户管理")
@RestController
@RequestMapping("/user")
public class UsersController {
@Autowired
private UserService userService;
@ApiOperation("用户列表")
@PostMapping("/list")
public R getUsers(@RequestBody PageIn pageIn) {
if (pageIn == null) {
return R.fail(CodeEnum.PARAM_ERROR);
}
// 封装分页出参对象
PageInfo<Users> userList = userService.getUserList(pageIn);
PageOut pageOut = new PageOut();
pageOut.setCurrPage(userList.getPageNum());
pageOut.setPageSize(userList.getPageSize());
pageOut.setTotal((int) userList.getTotal());
List<UserOut> outs = new ArrayList<>();
for (Users users : userList.getList()) {
UserOut out = new UserOut();
BeanUtils.copyProperties(users,out);
out.setIdent(ConvertUtil.identStr(users.getIdentity()));
out.setBirth(DateUtil.format(users.getBirthday(),Constants.DATE_FORMAT));
outs.add(out);
}
pageOut.setList(outs);
return R.success(CodeEnum.SUCCESS,pageOut);
}
// @ApiOperation("添加用户")
// @PostMapping("/add")
// public R addUsers(@RequestBody Users users) {
// return R.success(CodeEnum.SUCCESS,userService.addUser(users));
// }
@ApiOperation("添加读者")
@PostMapping("/addReader")
public R addReader(@RequestBody Users users) {
if (users == null) {
return R.fail(CodeEnum.PARAM_ERROR);
}
// 读者默认是普通用户
users.setIsAdmin(1);
return R.success(CodeEnum.SUCCESS,userService.addUser(users));
}
@ApiOperation("添加管理员")
@PostMapping("/addAdmin")
public R addAdmin(@RequestBody Users users) {
if (users == null) {
return R.fail(CodeEnum.PARAM_ERROR);
}
// 设置管理员权限
users.setIsAdmin(0);
return R.success(CodeEnum.SUCCESS,userService.addUser(users));
}
@ApiOperation("编辑用户")
@PostMapping("/update")
public R modifyUsers(@RequestBody Users users) {
return R.success(CodeEnum.SUCCESS,userService.updateUser(users));
}
@ApiOperation("用户详情")
@GetMapping("/detail")
public R userDetail(Integer id) {
Users user = userService.findUserById(id);
if (user!=null) {
UserOut out = new UserOut();
BeanUtils.copyProperties(user,out);
out.setBirth(DateUtil.format(user.getBirthday(),Constants.DATE_FORMAT));
out.setIdent(ConvertUtil.identStr(user.getIdentity()));
return R.success(CodeEnum.SUCCESS,out);
}
return R.fail(CodeEnum.NOT_FOUND);
}
@ApiOperation("删除用户")
@GetMapping("/delete")
public R delUsers(Integer id) {
userService.deleteUser(id);
return R.success(CodeEnum.SUCCESS);
}
@ApiOperation("获取当前用户登陆信息")
@GetMapping("/currUser")
public R getCurrUser() {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal!=null) {
Map<String,Object> map = BeanUtil.beanToMap(principal);
String username = (String) map.get("username");
if (StrUtil.isNotBlank(username)) {
Users users = userService.findByUsername(username);
UserOut out = new UserOut();
BeanUtils.copyProperties(users,out);
out.setBirth(DateUtil.format(users.getBirthday(),Constants.DATE_FORMAT));
Integer identity = users.getIdentity();
String ident = "";
if (identity == Constants.STUDENT) {
ident = Constants.STU_STR;
}else if (identity == Constants.TEACHER) {
ident = Constants.TEA_STR;
}else if (identity == Constants.OTHER) {
ident = Constants.OTHER_STR;
}else if (identity == Constants.ADMIN) {
ident = Constants.ADMIN_STR;
}
out.setIdent(ident);
return R.success(CodeEnum.SUCCESS,out);
}
}
return R.fail(CodeEnum.USER_NOT_FOUND);
}
}
08 使用说明
- 本地搭建好java8环境,数据库MySQL5.5+;
- 导入sql文件至数据库中,修改数据连接(你自己库名,用户名,密码等);
- 导入项目,配置maven, 等待依赖下载完成;
- 安装IDE,打开项目;
- 启动访问http://localhost:8080 即可;
- 账号:【学生: stu/123】【教师: tea/123】【其他:other/123】【管理员:admin/123】
09 如何导入?
- idea:直接open打开源码文件夹,记住是pom文件所在的目录
- eclipse: 直接导入- 选择已存在导入maven项目
- 检查maven是否配置好
10 源码下载
关注公众号【C you again】,回复“JavaWeb 图书管理系统”免费领取。
亦可直接扫描主页二维码关注,回复“JavaWeb 图书管理系统”免费领取,点此打开个人主页
说明:此源码来源于网络,若有侵权,请联系删除!!
JavaWeb 图书管理系统的更多相关文章
- javaweb图书管理系统之不同用户跳转不同页面
关于分级自测题,我们知道该系统一共分为两个角色,一个是读者,一个是管理员,我们需要根据不同用户去到不同的页面,所以我们需要写一个登陆界面. 本文先写这个功能的实现,该功能主要在servlet里面实现. ...
- 项目:《JavaWeb图书管理系统视频》--代码修复还可以运行起来
1. 系统设计--项目效果图请看最后面 1技术选型 (系统架构) JSTL + JSP + Servlet + JavaBean + BeanUtils + FileUpload + JavaMail ...
- javaweb图书管理系统之账号密码验证登录
验证账号与密码是否正确功能 一.注册功能 首先,在验证账号与密码是否正确的前提下的,需要先注册一个账号,如果没有账号,就会进不去,也无法验证. 其实,注册功能就是一个添加的功能,仿照我的第一篇文章,往 ...
- javaWeb项目之图书管理系统(附视频讲解)
视频播放地址:javaWeb图书系统 本系统为"Swing项目之图书管理系统"(此源码已共享)的Web版,网页框架用采用EasyUI 数据库为MysqL,写Web项目摒弃了火狐浏览 ...
- 用java实现图书管理系统。
图书管理系统. 一.项目设计到的知识 1.MVC设计模式思想(分包) >项目分包 >MVC简单介绍 2.GUI(图形化界面) 3.JDBC连接MySql数据库 4.I/O流 5.面向对象思 ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- 基于TXT文本的简单图书管理系统
1 ////////////////////////////////////////////////////////////////////////////////////// //SqList.h ...
- struts2+hibernate 项目实战:图书管理系统
经典项目,练手必备. 图书管理系统 需求分析(大致,并不专业):1.需要有用户管理: 1.1 用户注册: 1.2 用户登录: 1.3 用户信息修改: 1.4 用户修改密码: 2.需要有书本管理: 2. ...
随机推荐
- Unity Shader学习笔记-1
本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...
- hystrix ,feign,ribbon的超时时间配置,以及原理分析
背景,网上看到很多关于hystrix的配置都是没生效的,如: 一.先看测试环境搭建: order 服务通过feign 的方式调用了product 服务的getProductInfo 接口 //---- ...
- Redis 4.0.2安装与卸载
安装 使用root用户安装: 1.wget http://download.redis.io/releases/redis-4.0.2.tar.gz 2.tar -zxvf redis-4.0.2.t ...
- Java 多线程并发编程
导读 创作不易,禁止转载! 并发编程简介 发展历程 早起计算机,从头到尾执行一个程序,这样就严重造成资源的浪费.然后操作系统就出现了,计算机能运行多个程序,不同的程序在不同的单独的进程中运行,一个进程 ...
- unity inspector 自动装载Commont和Prefab属性
在使用unity的过程中,经常遇到这样的问题:每次都需要手动为序列化属性拖拽赋值.像这样: 试着找了找,真的找到了一份代码,但是缺少自动装载Prefab的功能.之后我花了点时间添加这个功能. 使用方法 ...
- 开源两个spring api项目
开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...
- springboot项目打包瘦身
默认情况下,Spring Boot 项目发布时会将项目代码和项目的所有依赖文件一起打成一个可执行的 jar 包.但如果项目的依赖包很多,那么这个文件就会非常大.这样每次即使只改动一点东西,就需要将整个 ...
- Win7 64X 安装VisualSVNServer 2.6.0过程中出现Custom action InstallWMISchemaExcute failed: Cannot query proxy blanket: No such interface supported (0x80004002)
Win7 64X 安装VisualSVNServer 2.6.0过程中出现错误:Custom action InstallWMISchemaExcute failed: Cannot query pr ...
- 【题解】[CEOI2004]锯木厂选址
Link \(\text{Solution:}\) 注意到题目中的编号是倒着的,于是我们的距离要预处理的是后缀和. 考虑如何\(n^2\)搞: 设\(dp[i]\)表示选择\(i\)为第二个中转点的最 ...
- 【题解】[CH弱省胡策R2]TATT
本蒟蒻第一道\(K-D-Tree\)维护\(dp\) Question 题目大意:求一条路径,使得其四个维度单调不降. 先排序消掉一维再说. 对于每一个点,初始的时候绝对长度是1啊.于是,先赋值一个1 ...