云借阅图书管理系统

前言

         基于SSM(Spring + Spring MVC + Mybatis)框架开发的一个较为简单的云借阅图书管理系统,虽然比较简单,但是耐心的做完会对 Spring框架 和 Spring MVC框架 以及 Mybatis框架 这三个框架的整合开发有一个较好的理解下面我就来简单的研究一下代码,全部的代码文件,我会放在结尾。

目录

前言

一、需求分析

二、数据库设计

三、部分功能和全部模块展示

四、核心功能代码(主要展示业务逻辑层的核心代码)

五、文件结构

总结


一、需求分析

二、数据库设计

用户表(user)

图书信息表(book)

借阅记录表(record)

 三、部分功能和全部模块展示

登录模块

新书推荐模块

 图书借阅模块 

当前借阅模块

借阅记录模块

添加图书功能

编辑图书功能

四、核心功能代码(主要展示业务逻辑层的核心代码)

登录功能模块

package com.demo.service.Impl;import com.demo.domain.User;
import com.demo.mapper.UserMapper;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @BelongsProject: CloudLibraryManagementSystem* @BelongsPackage: com.demo.service.Impl* @Author: 云边小屋(My.Tears)* @CreateTime: 2023-03-21  09:14* @Description: TODO* @Version: 1.0*/@Service
public class UserServiceImpl implements UserService {// 注入UserMapper对象private UserMapper userMapper;@Autowiredpublic UserServiceImpl(UserMapper userMapper) {this.userMapper = userMapper;}// 通过User的用户账户和用户密码查询用户信息@Overridepublic User login(User user) {return userMapper.login(user);}
}

图书功能模块

package com.demo.service.Impl;import com.demo.domain.Book;
import com.demo.domain.Record;
import com.demo.domain.User;
import com.demo.entity.PageResult;
import com.demo.mapper.BookMapper;
import com.demo.service.BookService;
import com.demo.service.RecordService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.text.SimpleDateFormat;
import java.util.Date;/*** @BelongsProject: CloudLibraryManagementSystem* @BelongsPackage: com.demo.service.Impl* @Author: 云边小屋(My.Tears)* @CreateTime: 2023-03-21  21:52* @Description: TODO* @Version: 1.0*/
@Service
// 开启事务注解 在操作多个数据库的时候要么同时成功 要么同时失败
@Transactional
public class BookServiceImpl implements BookService {// 注入BookMapper对象private BookMapper bookMapper;// 注入RecordService对象private RecordService recordService;@Autowiredpublic BookServiceImpl(BookMapper bookMapper, RecordService recordService) {this.bookMapper = bookMapper;this.recordService = recordService;}/*** 根据当前页码和每页需要展示的数据条数 查询最新上架的图书信息 (规定每页只存在几条图书信息)** @param pageNum  当前页码* @param pageSize 每页显示的数量* @return*/@Overridepublic PageResult selectNewBooks(Integer pageNum, Integer pageSize) {// 设置分页查询的参数 开始分页PageHelper.startPage(pageNum, pageSize);// 将查询到的结果集 给PagePage<Book> page = bookMapper.selectNewBooks();// 创建PageResult对象 将总和 和 查询到的结果集封装起来return new PageResult(page.getTotal(), page.getResult());}/*** 通过id查询图书信息** @param id id* @return {@link Book}*/@Overridepublic Book findBookById(String id) {return bookMapper.findBookById(id);}/*** 借阅图书** @param book 书* @return {@link Integer}*/@Overridepublic Integer borrowBook(Book book) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");// 设置当天为借阅时间book.setBorrowTime(dateFormat.format(new Date()));// 设置所借阅的图书状态为借阅中book.setStatus("1");// 更新图书信息return bookMapper.editBook(book);}/*** 查询图书** @param book     书* @param pageNum  当前页面* @param pageSize 页面的长度* @return {@link PageResult}*/@Overridepublic PageResult search(Book book, Integer pageNum, Integer pageSize) {// 设置分页查询PageHelper.startPage(pageNum, pageSize);// 封装结果集Page<Book> books = bookMapper.searchBooks(book);// 返回结果集给分页插件return new PageResult(books.getTotal(), books.getResult());}/*** 添加图书** @param book 书* @return {@link Integer}*/@Overridepublic Integer addBook(Book book) {// 设置上架时间SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");String uploadTime = format.format(new Date());book.setUploadTime(uploadTime);return bookMapper.addBook(book);}/*** 编辑图书** @param book 书* @return {@link Integer}*/@Overridepublic Integer editBook(Book book) {return bookMapper.editBook(book);}/*** 查询图书** @param book     封装图书* @param user     判断用户是否为管理员* @param pageNum  页面的码页* @param pageSize 页面的长度* @return {@link PageResult}*/@Overridepublic PageResult searchBorrowed(Book book, User user, Integer pageNum, Integer pageSize) {// 设置分页查询的参数PageHelper.startPage(pageNum, pageSize);// 将当前登录的用户获取book.setBorrower(user.getName());Page<Book> page = null;// 判断是否为管理员if ("ADMIN".equals(user.getRole())) {// 管理员 --> 可以查询当前的借阅图书以及所有的归还中的图书page = bookMapper.selectBorrowed(book);} else {// 普通人 --> 可以查询当前的借阅图书以及当前的归还中的图书和未归还的图书page = bookMapper.selectMyBorrowed(book);}// 返回封装的结果集 后面交给前端处理return new PageResult(page.getTotal(), page.getResult());}/*** 归还图书** @param id   归还图书的id* @param user 归还的人员* @return {@link Boolean}*/@Overridepublic Boolean returnBook(String id, User user) {// 根据图书id查询图书的完整信息Book bookById = this.findBookById(id);// 检查当前登录人员和图书借阅者是否为同一个人boolean flag = bookById.getBorrower().equals(user.getName());// 判断是否为空同一个人if (flag) {// 等于true 就说明是同一个人 修改图书的状态 改成归还中 等待管理员确认bookById.setStatus("2");bookMapper.editBook(bookById);}return flag;}/*** 确认归还** @param id 待归还的图书id* @return {@link Integer}*/@Overridepublic Integer returnConfirm(String id) {// 根据图书的id查询图书的完整信息Book bookById = this.findBookById(id);// 获取归还图书的借阅信息String borrower = bookById.getBorrower();String borrowTime = bookById.getBorrowTime();// 将图书的借阅状态修改成可借阅bookById.setStatus("0");// 清除当前图书的借阅人信息bookById.setBorrower("");// 清除当前图书的借阅时间信息bookById.setBorrowTime("");// 清除当前图书的预计归还时间信息bookById.setReturnTime("");Integer book = bookMapper.editBook(bookById);if (book > 0) {// 当管理员确认无误归还图书 就将图书记录添加到Record中Record record = new Record();// 设置借阅时间record.setId(bookById.getId());record.setBookIsbn(bookById.getIsbn());record.setBookName(bookById.getName());record.setBorrowTime(borrowTime);record.setBookBorrower(borrower);SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");String returnTime = format.format(new Date());record.setRemandTime(returnTime);recordService.addRecord(record);}return book;}}

借阅记录功能模块

package com.demo.service.Impl;import com.demo.domain.Record;
import com.demo.domain.User;
import com.demo.entity.PageResult;
import com.demo.mapper.RecordMapper;
import com.demo.service.RecordService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @BelongsProject: CloudLibraryManagementSystem* @BelongsPackage: com.demo.service.Impl* @Author: 云边小屋(My.Tears)* @CreateTime: 2023-03-24  15:19* @Description: TODO* @Version: 1.0*/@Service
public class RecordServiceImpl implements RecordService {// 注入RecordMapper对象private RecordMapper recordMapper;@Autowiredpublic RecordServiceImpl(RecordMapper recordMapper) {this.recordMapper = recordMapper;}/*** 添加借阅记录** @param record 记录* @return {@link Integer}*/@Overridepublic Integer addRecord(Record record) {return recordMapper.addRecord(record);}/*** 查询借阅记录** @param record   当前记录的查询条件* @param user     当前的登录用户* @param pageNum  页面码* @param pageSize 页面长度* @return {@link PageResult}*/@Overridepublic PageResult searchRecords(Record record, User user, Integer pageNum, Integer pageSize) {// 设置分页查询PageHelper.startPage(pageNum,pageSize);// 判断是否为管理员if (!"ADMIN".equals(user.getRole())){/*** 如果不是管理员 就将查询条件中的 借阅人设置为当前登录用户* 如果是管理员 那么就不会运行该if 反之 若为普通用户则运行该if* 将条件中的借阅人设置为当前登录人*/record.setBookBorrower(user.getName());}Page<Record> page = recordMapper.searchRecords(record);return new PageResult(page.getTotal(),page.getResult());}
}

五、文件结构


 

总结

云借阅图书管理系统的全部核心代码文件:

链接:百度网盘 请输入提取码 

提取码: 1234 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/71857.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苏炳添博士论文研究自己,奥运学术两兼顾

本文转载自IT之家 “我为什么能跑这么快&#xff1f;” 这可不是调侃&#xff0c;而是“亚洲飞人”苏炳添的正经博士论文&#xff01; 在题为《新时代中国男子 100m 短跑&#xff1a;回顾与展望》的论文中&#xff0c;苏炳添详细地分析了中国男子百米跑跻身世界一流的原因&a…

世界杯论文

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿…

你知道ERD Online中可以使用ChatGPT吗

功能介绍 ERD Online在4.1.0版本中&#xff0c;加入了ChatGPT功能&#xff0c;所有登录用户均可免费使用。 基于ChatGPT&#xff0c;ERD Online可以快速新建模型&#xff0c;自动生成数据分析需要的SQL&#xff0c;快速生成表字段中文注释等 和SQL相关的功能&#xff0c;你都可…

如何抓取trace

第一种方式&#xff1a; 1、打开 2、 3、文件还在platform-tools\Systrace中&#xff0c; 4、 chrome://tracing/ 第二种方式&#xff1a; 打开手机中的开发者选项的系统追踪。 然后进行录制。 Shift鼠标右键打开powershell https://ui.perfetto.dev/

爬取淘宝任意商品数据,你上你也行

文章目录 构造url分析页面结构爬取多页数据最后 构造url 第一页url https://s.taobao.com/search?q"面膜"第二页url https://s.taobao.com/search?q"面膜"&bcoffset4&p4ppushleft2%2C48&s44&ntoffset4第三页url https://s.taobao.com/se…

淘宝商品数据爬取并分析数据

一、抓取数据 1、抓取数据的意义 对电商来说&#xff0c;抓取某些数据&#xff0c;再进行分析&#xff0c;可以有效地反映出数据在某个区间内变化情况。数据受某些因素而发生巨大的影响&#xff0c;也可以借助分析的数据来规划相关项目的后续发展。因此&#xff0c;如果能利…

爬取淘宝商家货物简单销售数据(销量,价格,销售地,货物名称)

爬取淘宝商家货物简单销售数据&#xff08;销量&#xff0c;价格&#xff0c;销售地&#xff0c;货物名称&#xff09; 爬取淘宝店家数据信息 爬取淘宝商家货物简单销售数据&#xff08;销量&#xff0c;价格&#xff0c;销售地&#xff0c;货物名称&#xff09;一、登录淘宝&a…

第三方速卖通数据抓取工具全面解析

跨境电商的崛起&#xff0c;使得越来越多的卖家选择在速卖通平台上开店&#xff0c;但是如何获取有用的数据并进行分析&#xff0c;成为了卖家们面临的一个难题。第三方速卖通数据抓取工具应运而生&#xff0c;成为了卖家们获取有价值数据的新利器。本文将从以下八个方面对第三…

获取用户手机号码

小程序中有很多地方都会用到注册用户信息的地方&#xff0c;用户需要填写手机号等&#xff0c; 有了这个组件可以快速获取微信绑定手机号码&#xff0c;无须用户填写。 1.getPhoneNumber这个组件通过button来实现&#xff08;别的标签无效&#xff09;。将button中的open-type“…

获取微信手机号码

access_token是公众号的全局唯一接口调用凭据&#xff0c;公众号调用各接口时都需要使用access_token。 微信开发需要用到的access_token&#xff0c;其实是分为两个种类的&#xff0c;一种是普通的access_token&#xff0c;另一种是网页授权access_token。 普通的access_tok…

基于java的手机批量导入手机号系统,检测手机号微信是否开通

大量的手机号码按照记事本格式&#xff08;记事本文档里面只可以有手机号和状态&#xff09;导入&#xff08;手机号----状态&#xff09;&#xff0c;具体代码包括工具类的使用&#xff0c;可以点击下载查询。 //导出跳转GetMapping("/phone-list-export")public M…

Android快速实现手机号码识别OCR

在Android App中开发扫描手机号码、电话号码OCR功能&#xff0c;一般有多种方案选择&#xff1a; 1. 调用商业在线OCR接口 2. 集成商业离线OCR SDK 3. 集成开源OCR模块 &#xff08;若需集成离线识别SDK&#xff0c;可参考https://blog.csdn.net/dieqms/article/details/110…

写中文文章,字数≠质量,多少字最佳?

在这个自媒体盛行的时代&#xff0c;我们经常听到“字数至上”的说法&#xff0c;有人认为写作一定要达到一定的字数才能够算是一篇好文章&#xff0c;但是真的是这样吗&#xff1f;中文文章写多少字才算合适呢&#xff1f;下面就让我们来一起探讨一下。 1.字数不等于质量 首…

写完的文档有多少个字?字数统计在word哪里

还记得小时候写作文的时候&#xff0c;为了确保字数足够&#xff0c;会一个字一个字地去数&#xff0c;但是现在不用啦&#xff0c;现在基本上都是利用电脑来编写文档&#xff0c;利用word节省很多办公时间&#xff0c;而word很智能&#xff0c;功能也很齐全&#xff0c;再也不…

最适合十二星座的那些表白方式!

白羊座: 世俗又浪漫&#xff1b; 金牛座: 奢华大场面&#xff1b; 双子座: 诱发好奇心&#xff1b; 巨蟹座: 省钱又省事&#xff1b; 狮子座: 一起打肿脸&#xff1b; 处女座: 看谁更细腻&#xff1b; 天秤座: 需要好口才&#xff1b; 天蝎座: 深情加酒精&#xff1b; …

占星周运(白羊座)

冥王拱太阳 海王六合太阳 北交拱土星,北交合水星 火星六合天王 金星型木星 羊羊&#xff0c;继续追求金钱和财产吧。记忆也是一种财产。你的家庭生活既是充满活力/暴躁的&#xff0c;也是有吸引力/引人注目的。拥抱孩子。在五月剩下的时间里&#xff0c;偶然认识的朋友、交谈&…

星座与性格

星座与传说 | 星座与爱情 | 星座与性格 | 星座与生日愿望 | 星座与经商 | 测试你的性成熟程度 十二星座 宝瓶星座 双鱼星座 白羊星座 金牛星座 双子星座 巨蟹星座 狮子星座 处女星座 天秤星座 天蝎星座 射手星座 摩羯星座 十二星座 宝瓶星座 双鱼星座 白羊星座 金牛星座 双子…

PyTorch定长验证码训练集数字识别(几乎每行注释,开箱即用)

文章目录 前言一、代码1.1 MyDataset.py(加载数据集和计算均值&#xff0c;标准差)1.2 Mymodels.py(使用预训练模型)1.2.1 ResNet介绍 1.3 main.py(启动代码)1.4 inferring.py(验证是否识别成功)1.5 文件目录树1.6 资源链接 二、借鉴 前言 这是一个识别出验证码图片的代码。训…

chatgpt赋能python:Python制表位:优化数据可视化与分析的利器

Python 制表位&#xff1a;优化数据可视化与分析的利器 在数据可视化和分析中&#xff0c;表格是一种常用的数据展示方式。Python 提供了丰富的用于构建表格的库&#xff0c;其中之一便是制表位&#xff08;Tabulate&#xff09;。本文将介绍制表位的特点、使用方法以及另外一…