图书管理系统汇报
【1A536】图书管理系统汇报
- 项目介绍
- 1.用户登录注册功能
- 1. 1用户角色管理
- 2.图书管理功能
- 2.1 添加图书
- 2.2 编辑图书
- 2.3 删除图书
- 3.图书搜索和筛选
- 3.1 图书搜索
- 3.2 图书筛选
- 4.图书借阅、图书归还
- 4.1 图书借阅
- 4.2 图书归还
- 5.用户信息管理
- 5.1上传头像
- 5.2修改头像
- 5.3 修改密码
项目介绍
本项目提供用户和管理员两种角色,支持图书的添加、编辑、删除、搜索和筛选功能,同时具备用户信息管理和借阅功能,确保图书管理高效便捷。
1.用户登录注册功能

注册部分(前端代码):

注册部分(后端代码):
//用户注册@PostMapping("/register")public Result register(@RequestBody User registerUser){System.out.println("register");// 查询用户QueryWrapper<User> queryWrapper1 = new QueryWrapper<>();queryWrapper1.eq("user_name", registerUser.getUserName());User userone = userService.getOne(queryWrapper1); // 调用 getOne 方法if (userone != null) {return Result.error("用户名已存在");}QueryWrapper<User> queryWrapper2 = new QueryWrapper<>();queryWrapper2.eq("user_email", registerUser.getUserEmail());User usertwo = userService.getOne(queryWrapper2); // 调用 getOne 方法if (usertwo != null) {return Result.error("邮箱已存在");}// 加密String md5Pwd = Md5Util.getMD5String(registerUser.getUserPassword());User user = new User();user.setUserName(registerUser.getUserName());user.setUserPassword(md5Pwd);user.setUserEmail(registerUser.getUserEmail());user.setUserRole("user");user.setUserStatus("0");// 调用插入数据的方法userService.save(user);UserStatistics userStatistics = new UserStatistics();userStatistics.setUserName(user.getUserName());userStatistics.setActivityCount(0);iUserStatisticsService.save(userStatistics);return Result.success();}
登录部分(前端代码):

登录部分(后端代码):
@PostMapping("/login")public Result<String> login(@RequestBody User user){LambdaQueryWrapper<User> wrapper=new LambdaQueryWrapper<>();wrapper.eq(User::getUserName,user.getUserName()).eq(User::getUserPassword, Md5Util.getMD5String(user.getUserPassword()));User userOne = userService.getOne(wrapper);if(userOne!=null){if(userOne.getUserStatus().equals("1")) return Result.error("用户已被封禁");HashMap<String, Object> claims = new HashMap<>();claims.put("userId",user.getUserId());claims.put("userName",user.getUserName());String token = JwtUtil.genToken(claims);redisTemplate.opsForValue().set(token,userOne,30, TimeUnit.MINUTES);return Result.success(token);}else{return Result.error("用户名密码错误");}}
1. 1用户角色管理
功能介绍:
- 系统支持用户和管理员两种角色,不同角色有不同的权限。
- 管理员可以添加、编辑和删除图书,普通用户只能借阅图书。
前端代码:


roleCheck 函数用于检查当前用户的登录状态和角色信息。它通过发送一个 HTTP GET 请求到后端 API 获取用户数据,并根据返回的数据进行相应的处理。如果用户未登录或请求失败,将重定向到首页;如果用户已登录且请求成功,则更新用户的角色、名称和头像URL,并将其存储在本地存储中。


后端代码:


2.图书管理功能
2.1 添加图书
- 功能介绍:通过抽屉组件实现,用户可以填写图书的详细信息并保存。
前端代码:


后端代码:

2.2 编辑图书
- 功能介绍:点击表格中的“编辑”按钮,弹出抽屉组件,预填当前图书的信息,用户可以进行修改。
前端代码:
当点击edit后,弹出抽屉,进行图书编辑,当点击提交时,调用点击事件的confirmClick方法进行提交表

后端代码:

2.3 删除图书
- 功能介绍:点击表格中的“删除”按钮,弹出确认框,确认后删除图书。
前端代码:



主要看这个handleDelete方法,获取行内元素row的id字段以及token作为deleteBook的参数。所以deleteBook才是删除图书的关键,下面可以发现,发通过axios发了一个delete请求,请求体参数就是id和token
后端代码:

查看后端代码发现,请求参数正是id跟token,通过对用户进行校验判断用户权限,权限通过后删除图书。
3.图书搜索和筛选
3.1 图书搜索
- 功能介绍:通过输入框输入图书名或ISBN,实时过滤显示结果。

搜索功能的实现,@input是当输入框的值发生变化时,触发 inputValue 方法,重点看该方法,它用于处理输入框值变化时的逻辑,根据输入的值过滤图书数据。

3.2 图书筛选
- 功能介绍:通过下拉选择框选择图书状态(全部、可借阅、不可借阅),动态更新表格数据。

这里@change 属性: 监听选择框值的变化,触发handleSelectChange 方法。

4.图书借阅、图书归还
4.1 图书借阅
- 功能介绍:用户可以点击图书列表中的“借阅”按钮,借阅图书。借阅成功后,图书状态会更新为“不可借阅”。
后端代码
@PostMapping("/borrow/{id}")public Result borrowBook(@PathVariable String id, String token){Book byId = bookService.getById(id);User user = checkInfo(token);if (user == null){return Result.error("用户未登录,无权限");}LambdaQueryWrapper<Book> userBorrowedBooksQuery = new LambdaQueryWrapper<>();userBorrowedBooksQuery.eq(Book::getBookBorrower, user.getUserName()).eq(Book::getBookStatus, "0"); // 假设 "0" 表示已借出Long borrowedBooksCount = bookService.count(userBorrowedBooksQuery);if (borrowedBooksCount >= 3) {return Result.error("您已达到最大借书数量,无法再借书");}LambdaQueryWrapper<BookStatistics> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(BookStatistics::getBookName,byId.getBookName());BookStatistics stats = IBookStatisticsService.getOne(queryWrapper);if(stats==null){return Result.error("该书不存在");}stats.setBorrowCount(stats.getBorrowCount() + 1);IBookStatisticsService.updateById(stats);UpdateWrapper<Book> wrapper = new UpdateWrapper<>();wrapper.eq("book_id",id).set("book_borrower",user.getUserName()).set("book_status","0").set("book_borrowtime",LocalDate.now().toString()).set("book_returntime", LocalDate.now().plus(30, ChronoUnit.DAYS).toString());boolean update = bookService.update(wrapper);return Result.success(update);}
前端代码


4.2 图书归还
- 功能介绍:用户可以点击图书列表中的“借阅”按钮,借阅图书。借阅成功后,图书状态会更新为“不可借阅”。
前端代码


后端代码
@PutMapping("/backBook/{id}")public Result<String> backBook(@PathVariable String id,String token){User user = checkInfo(token);if(user==null){return Result.error("用户未登录,无权限");}UpdateWrapper<Book> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("book_id",id).set("book_status","1").set("book_borrower","").set("book_borrowtime","").set("book_returntime","");boolean update = bookService.update(updateWrapper);QueryWrapper<Book> queryWrapper = new QueryWrapper<>();queryWrapper.eq("book_id",id);Book book = bookService.getOne(queryWrapper);Record newRecord = new Record();LocalDate now = LocalDate.now();newRecord.setRecordBookname(book.getBookName());newRecord.setRecordBorrower(user.getUserName());newRecord.setRecordBookisbn(book.getBookIsbn());newRecord.setRecordAuthor(book.getBookAuthor());newRecord.setRecordPress(book.getBookPress());newRecord.setRecordBorrowtime(now.toString());newRecord.setRecordRemandtime(now.plusMonths(1).toString());boolean save = recordService.save(newRecord);if(update&&save){LambdaQueryWrapper<UserStatistics> queryWrapper1 = new LambdaQueryWrapper<>();queryWrapper1.eq(UserStatistics::getUserName,user.getUserName());UserStatistics getOne = iUserStatisticsService.getOne(queryWrapper1);if(getOne==null){return Result.error("该用户不存在");}getOne.setActivityCount(getOne.getActivityCount() + 1);iUserStatisticsService.updateById(getOne);return Result.success("还书成功");}else {return Result.error("还书失败");}}
5.用户信息管理
5.1上传头像
要做头像上传,就得有存储的地方,阿里云OSS对象存储正好满足我们的需求。
通过阿里云官网,可查看找到OSS对象存储工具类
- ENDPOINT:阿里云 OSS 的服务端点。
- ID:阿里云 Access Key ID。
- KEY:阿里云 Access Key
Secret。 BUCKET_NAME:存储容器名称。
后端代码:


前端代码:

5.2修改头像
- 功能介绍:用户可以通过上传图片来修改自己的头像,上传成功后自动刷新页面。
后端代码:

前端代码:
主要就是这个avatarUpload方法上传头像,查看该方法发现

5.3 修改密码
- 功能介绍:用户可以点击菜单中的“修改密码”选项,弹出对话框进行密码修改。
前端代码:


后端代码:

相关文章:
图书管理系统汇报
【1A536】图书管理系统汇报 项目介绍1.用户登录注册功能1. 1用户角色管理2.图书管理功能2.1 添加图书2.2 编辑图书2.3 删除图书 3.图书搜索和筛选3.1 图书搜索3.2 图书筛选 4.图书借阅、图书归还4.1 图书借阅4.2 图书归还 5.用户信息管理5.1上传头像5.2修改头像5.3 修改密码 项…...
【发版通知】FormMaking 表单设计器新版发布,赋能企业实现低代码开发!
FormMaking 介绍 FormMaking 是基于 Vue 的可视化表单设计器,赋能企业实现低代码开发模式;帮助开发者从传统枯燥的表单代码中解放出来,更多关注业务,快速提高效率,节省研发成本。目前已经在OA系统、考试系统、报表系统…...
计算机科学与技术-毕业设计选题推荐
基于特定技术的系统设计与实现 基于深度学习的图像识别系统设计与实现基于区块链的数据安全保护技术研究与实现基于云计算的大数据处理平台设计与开发基于物联网的智能家居系统设计与实现基于机器学习的推荐算法研究与实现 面向实际应用的需求分析与开发 智慧医疗信息系统设…...
《C++音频频谱分析:开启声音世界的神秘之门》
在数字音频的广阔领域中,频谱分析是一项强大而引人入胜的技术。它能够将无形的声音转化为可视化的数据,让我们深入了解音频的特征和结构。那么,在 C这个强大的编程语言中,我们又该如何实现对音频的频谱分析呢? 音频频…...
GitHub 上传项目保姆级教程
构建项目仓库 登录 GitHub 并进入主页。点击右上角的 New 按钮,进入创建新仓库页面。输入仓库名称和描述(可选),选择是否公开(Public)或私有(Private)。可以选择是否初始化仓库&…...
联想笔记本电脑睡眠后打开黑屏解决方法
下载联想机器睡眠无法唤醒修复工具 下载地址:https://tools.lenovo.com.cn/exeTools/detail/id/233/rid/6182522.html 使用完后重启电脑,问题解决。...
计算机网络:网络层 —— 路由选择与静态路由配置
文章目录 路由选择路由选择的基本概念路由选择算法路由选择策略 路由器的工作原理路由表静态路由配置默认路由特定主机路由 路由选择 路由选择(Routing)是网络层的一个关键功能,负责在源和目的地之间选择最佳路径,以确保数据包高…...
[LeetCode-55]基于贪心算法的跳跃游戏的求解(C语言版)
/* 题目出处:LeetCode 题目序号:55. 跳跃游戏 题目叙述:给你一个非负整数数组 nums ,你最初位于数组的第一个下标位置 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可…...
C# 将批量图片转为PDF文件
目录 功能实现 范例运行环境 关键代码 组件库引入 将批量图片转换为PDF 总结 功能实现 功能实现主要使用 iTextSharp 库实现,将指定目录下的有序的一组图片,组合生成指定文件名的PDF文件。 范例运行环境 操作系统: Windows Server…...
大模型面试题63题(1-11)
扫一扫,实时跟踪面试题(关注“算法狗”)就可以啦 1. 什么是大型语言模型(LLMs)以及它们的工作原理是什么? 大型语言模型(LLMs)是设计用来理解、处理和生成类似人类文本的高级人工智…...
【Flask】二、Flask 路由机制
目录 什么是路由? Flask中的路由 基本路由 动态路由 路由中的HTTP方法 路由函数返回 在Web开发中,路由是将URL映射到相应的处理函数的过程。Flask是一个轻量级的Web应用框架,提供了简单而强大的路由机制,使得开发者能够轻松…...
Java项目实战II基于Spring Boot的交通管理在线服务系统设计与实现(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市化…...
【PythonWeb开发】Flask-RESTful视图类基础知识
flask_restful 是一个扩展库,它为 Flask 提供了快速构建 RESTful API 的功能。使用 flask_restful 可以简化 RESTful API 的开发过程,减少样板代码,并且提供了一些高级特性,如 HTTP 方法的映射、资源路由的定义等。 在flask_restf…...
Kubernetes——part10-2 kubernetes 日志收集方案 EFK
一、EFK 1.1 EFK介绍 EFK为elasticsearch、fluentd、kibana的简称,本案例主要对kubernetes集群日志收集。 1.2 Fluentd介绍 fluentd是一款开源的日志收集工具,其于2016年11月8日被云原生计算基金会录取,并于2019年毕业。 Fluentd优势&…...
mockito+junit完成单元测试
一:单元测试的特点 配合断言使用(可以杜绝System.out)可以重复执行不依赖环境不会对数据产生影响spring的上下文环境不是必须的一般都需要配合mock类框架来实现 二:常用的mock类框架 mockito 官网:Mockito framew…...
基于web的便捷饭店点餐小程序的设计与实现(lw+演示+源码+运行)
摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安全…...
CUDA环境安装终极指南——Linux(其它系统也一样)
文章目录 前言检查驱动配置nvcc安装cudnn完活 前言 不用看其它文章了,这篇文章保你不踩任何坑,安装方法简单快速 检查驱动 检查驱动是否安装,输入以下命令 nvidia-smi如果驱动已经安装,则可跳过此步,否则ÿ…...
安卓开发之登录页面(跳转版)
目录 前言:基础夯实:效果展示:核心代码:网盘源码: 前言: 熟悉安卓开发的基础知识,了解,弹窗,两个页面进行跳转,页面的布局,按钮,文本…...
solidworks学习6吊环-20241030
solidworks学习6吊环 图 1 使用到的命名:拉伸曲面,旋转曲面,镜像实体,剪裁曲面, 前视基准面绘制 图 2 绘制旋转轴 图 3 旋转曲面 图 4 上视基准面绘制,标准圆边尺寸的时候需要按住shift键标注&#x…...
数据结构和算法-动态规划(3)-经典问题
动态规划常见问题 打家劫舍 题目 [力扣198] 198. 打家劫舍 - 力扣(LeetCode) 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
