基于Java+MySQL实现(Web)图书借阅管理系统

news2025/5/26 7:36:05

图书借阅管理系统(前后台)

1 需求分析

图书借阅管理系统是模拟学校图书馆实现的一个具有前后台的 Web 系统.对于读者,能够提供全文检索,个性化推荐,借阅等功能.对于管理员,能够提供可视化数据分析,信息管理等功能.

2 技术栈

前端: Layui,jQuery,echarts

后端:Spring Boot,MyBatis,elasticsearch,thymeleaf(一个模板引擎,代替 jsp)

开发工具:IDEA,HBuilder,postman,Navicat for MySQL

项目管理工具:Maven

3 总体设计

3.1 系统功能概述

3.1.1 前台系统

(1) 读者登录,注册,修改密码

(2) 基本资料查看,修改

(3) 图书查询(复杂查询),仿京东商城以图片卡片形式分页展示,可点击每本书的评价数进行评价,点击卡片查看详细图书信息以及借阅

(4) 个性化推荐图书:根据读者的兴趣爱好,每本书对应读者的浏览量,每本书的借阅量,每本书的评论数进行多重排序,展示在读者面前

(5) 历史记录浏览,查询

(6) 基于 Elasticsearch 搜索引擎的全文检索

3.1.2 后台系统

(1) 管理员登录,修改密码

(2) 读者管理:查看,添加,编辑,删除

(3) 管理员管理:查看,添加,删除

(4) 角色管理

(5) 统计分析:

A.分别以树状图,饼图展示图书分类占比

B.以折线图加饼图展示每年的图书类型借阅情况

C.查询每年的热门图书排名以及借阅次数

(6) 历史记录管理

(7) 图书管理:查看,添加,删除

3.2 E-R 模型

3.3 系统流程图

4 详细设计

4.1 前台系统

分页查询:当图书数量达到一定程度,分页显示就显得很重要了.通过使用 pagination.js 和 AJAX 向后端发起请求返回数据,每次点击页码执行回调函数.

多重检索:可通过 ID,书名,作者,出版社,分类,出版时间范围进行搜索,然后表单提交到后端接口,后端执行动态 MySQL 查询语句,然后返回数据,最后分页展示出来.

个性化推荐:在基本资料里可设置自己的兴趣爱好,此后推荐的图书符合自己设置的兴趣爱好.同时基于点击量,评论数,借阅量,出版时间进行多级排序,这点可通过 MySQL 的左连接实现,再通过 AJAX 请求后端接口返回数据.

全文检索:使用 Elasticsearch 搜索引擎,模仿 Google 浏览器实现对图书进行全文检索,并高亮显示出来.

其他: 基本资料修改,输入头像地址,头像可相应地改变,可修改密码.

核心代码:

function do_add() {
    $.ajax({
        type: "post",
        url: "/book/add",
        data: {
            "_bookId": $("#new_bookId").val(),
            "_bookName": $("#new_bookName").val(),
            "_author": $("#new_author").val(),
            "_press": $("#new_press").val(),
            "_bookDate": $("#new_bookDate").val(),
            "_bookType": $("#new_bookType").val(),
            "_bookDesc": $("#new_bookDesc").val(),
            "_bookImage": $("#new_bookImage").val()
        },
        success: function (data) {
            if (data = "OK") {
                alert("新书入库成功");
                window.location.reload();
            } else {
                alert("新书入库失败");
                window.location.reload();
            }
        }
    });
}
// 个性化推荐 MySQL语句
SELECT book.*,cnt FROM book
LEFT JOIN recommend ON recommend.bookId=book.bookId AND recommend.userId=#{userId}
LEFT JOIN (SELECT `comment`.bookId,COUNT(*) AS cnt FROM `comment` GROUP BY `comment`.bookId) as t ON t.bookId=book.bookId
LEFT JOIN (SELECT record.bookId,COUNT(*) AS num FROM record GROUP BY record.bookId) as tt ON tt.bookId=book.bookId
LEFT JOIN (SELECT recommend.bookId,SUM(clickNum) as s FROM recommend GROUP BY recommend.bookId) as ttt ON ttt.bookId=book.bookId
WHERE bookType in (SELECT myInterest FROM interest WHERE userId=#{userId})
ORDER BY clickNum DESC,cnt DESC,num DESC,s DESC

图 1 全文检索界面

图 2 图书复杂查询界面

图 3 基本资料修改界面

图 4 分页查询展示界面

4.2 后台系统

用户管理: 管理员分为管理员,超级管理员,运营人员等多种角色,那么就牵涉到权限问题,只有超级管理员才能添加和删除管理员,以及删除读者.用户管理模块实现了基本的增删改查功能以及分页展示.

历史记录: 对于网站用户的每次操作就展示在历史记录模块当中,可搜索某一年的记录,并分页展示.

图书管理: 基于 AJAX 实现的增删改查功能,并对查询功能进行了优化,可进行复杂的搜索功能.

图书分析: 按年份对每本书的借阅次数进行排序,可选择年份进行分页展示.对库存中图书类型以柱状图和饼图的形式展示出来,并显示出占比,这样管理员即可一目了然地了解图书的分类占比.

仪表盘(后台主页): 以卡片形式展示出访问量,用户量,库存量,活跃用户这四个指标.这样管理员登录后即可知悉系统现状.当然这部分由于时间关系来不及实现,后期再补上.此外,利用百度的 echarts 对每一年的每种图书类型借阅情况以折线图和饼图的形式清晰地展现出来,管理员通过观察折线图的趋势走向进行数据分析.

其他: 基本资料修改,输入头像地址,头像即可相应地及时改变.可修改密码.

核心代码:

// 分页查询 图书管理 后端代码
@ResponseBody
@GetMapping("/all")
public Object findAllBook(
    @RequestParam(name = "page", required = false, defaultValue = "1") int pageNum,
    @RequestParam(name = "limit", required = false, defaultValue = "10") int pageSize,
    Integer bookId, String bookName, String author, String press, String bookType, String date1, String date2) {
    if (!bookName.equals("#")) bookName = "%" + bookName + "%";
    System.out.println(bookId + " " + bookName + " " + author + " " + press + " " + bookType + " " + date1 + " " + date2);
    return bookService.findAllBook(pageNum, pageSize, bookId, bookName, author, press, bookType, date1, date2);
}
// 分页查询 图书管理 mybatis+pagehelper+动态查询
SELECT book.* FROM book
        <where>
            <if test="bookId!=0">
                book.bookId=#{bookId}
            </if>
            <if test="bookName!='#'.toString()">
                and bookName like #{bookName}
            </if>
            <if test="author!='#'.toString()">
                and author=#{author}
            </if>
            <if test="press!='#'.toString()">
                and press=#{press}
            </if>
            <if test="bookType!='#'.toString()">
                and bookType=#{bookType}
            </if>
            <if test="date1!='#'.toString()">
                and bookDate &gt;= #{date1}
            </if>
            <if test="date2!='#'.toString()">
                and bookDate &lt;= #{date2}
            </if>
        </where>

图 5 Dashboard 界面

图 6 图书分析界面

图 7 图书管理界面

5 总结

首先,非常感谢学院给予我们课设两周的时间,这两周和同专业的同学在机房完成任务,氛围非常好,时间也很充裕,这两周个人独立开发,coding 期间遇到问题自行 google,参考官网文档,仔细阅读官网给的 demo,在经过这两周的课设确确实实感到非常充实,也觉得在实践 coding 方面提到了很大的提升.平时上课老师讲授的是 jsp,但 Spring 官网推荐使用的模板引擎是 thymeleaf,由此我在课设前的周末花时间去了解并掌握基本语法,才发现 thymeleaf 确实比 JSP 好用,无需写 JSP 文件,而且在无网络的环境下也可运行.

由于平时接触前端的时间很少,于是想着做一个后台管理系统就不用花大部分时间去折腾前端布局而把重心放在后端.可是过了一个星期后,后台做完了还有很多时间就想着一个系统只有后台是不完整的,于是去折腾弄个前台.得益于 Layui 前端框架,前台布局很快就做好了.模仿京东商城,在每本书的展示卡片上显示了评价数,点击可进行评价.由于我希望这次的 Web 课设与上学期的数据库课设不一样,想添加些许新颖的想法,例如个性化推荐和数据可视化以及全文搜索.前台的个性化推荐基于兴趣,点击量,评论数,借阅量,出版时间进行多级排序,写 MySQL 查询语句较为复杂.后台的数据可视化是基于百度的 echarts,通过仔细阅读官网 demo 案例实现.前台的全文搜索是基于 Elasticsearch 搜索引擎,这是开源的分布式搜索引擎,并对匹配到的内容进行高亮展示,目前已实现.

这次的课设收获蛮大的.前端方面学会 ajax,jQuery,Layui,pagination,echarts,以及通过 Google 控制台 debug 前端布局.后端学会使用 Spring boot,mybatis,thymeleaf,elasticsearch,以及写复杂的 MySQL 语句并且掌握利用 postman 测试后端接口.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAR ADC的功耗设计

SAR ADC 由比较器、逻辑和DAC组成,功耗比可能是3:6:1,对于低功耗设计来说,我们需要尽量让DAC的功耗最小,这里来探讨一下CDAC的功耗计算方法。 CDAC从状态1切换到状态2时,需要从Vref buffer上抽拉电荷。C是状态2时连接Vref的总电容,V2就是状态2时接Vref的电容上的电压…

PP-OCRv5

目录 PP-OCRv5官方效果如下 C封装、C#调用效果 项目 代码 下载 PP-OCRv5官方效果如下 C封装、C#调用效果 项目 代码 using Newtonsoft.Json; using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; usi…

nginx的一些配置的意思

1.用这个端口可以访问到nginx 2.工作进程&#xff0c;设置成和cpu核心数一样即可 3.每个工作进程的最大网络连接数。 4.主机名称 设置反向代理时&#xff0c;把server_name设置成ip。 5.反向代理进行转发&#xff0c;localhost指的是nginx所在的机器。 关键字proxy_pass。 …

Agent模型微调

这篇文章讲解&#xff1a; 把 Agent 和 Fine-Tuning 的知识串起来&#xff0c;在更高的技术视角看大模型应用&#xff1b;加深对 Agent 工作原理的理解&#xff1b;加深对 Fine-Tuning 训练数据处理的理解。 1. 认识大模型 Agent 1.1 大模型 Agent 的应用场景 揭秘Agent核心…

Linux基本指令篇 —— whoami指令

whoami 是 Linux 和 Unix 系统中一个简单但实用的命令&#xff0c;全称 Who Am I&#xff08;我是谁&#xff09;。它的功能是显示当前登录用户的用户名。以下是关于 whoami 的详细解析&#xff1a; 目录 1. 基本用法 2. 命令特点 3. 实际应用场景 场景 1&#xff1a;脚本中…

力扣395做题笔记

题目链接 力扣395 第一次尝试 class Solution {public int longestSubstring(String str, int k) {char[] s str.toCharArray();int n s.length;int[] cnts new int[256];int ans 0;for (int r 0, l 0; r < n; r ) { cnts[s[r]];if (cnts[s[r]] > k) { ans Mat…

WebSocket(看这一篇就够了)

文章目录 WebSocket 基本概念什么是WebSocket?为什么需要 WebSocket&#xff1f;与 HTTP 协议的区别WebSocket协议的原理WebSocket工作流程WebSocket 数据帧结构和控制帧结构。JavaScript 中 WebSocket 对象的属性和方法&#xff0c;以及如何创建和连接 WebSocket。webSocket简…

旧物回收小程序:让闲置焕发光彩,为生活增添价值

你是否常常为家中堆积如山的闲置物品而烦恼&#xff1f;那些曾经心爱的物品&#xff0c;如今却成了占据空间的“鸡肋”&#xff0c;丢弃可惜&#xff0c;留着又无处安放。别担心&#xff0c;一款旧物二手回收小程序将为你解决这一难题&#xff0c;让闲置物品重新焕发光彩&#…

数学建模MathAI智能体-2025电工杯A题实战

题目&#xff1a; 光伏电站发电功率日前预测问题 光伏发电是通过半导体材料的光电效应&#xff0c;将太阳能直接转化为电能的技术。光伏电站是由众多光伏发电单元组成的规模化发电设施。 光伏电站的发电功率主要由光伏板表面接收到的太阳辐射总量决定&#xff0c;不同季节太阳…

C# Windows Forms应用程序-002

目录 项目结构 主类和命名空间 构造函数和析构函数 初始化组件 (InitializeComponent) 按钮点击事件处理程序 主程序入口点 项目截图&#xff1a; 完整代码&#xff1a; 项目结构 这个项目是一个简单的C# Windows Forms应用程序&#xff0c;获取指定文件的根信息…

理解计算机系统_线程(八):并行

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 接续理解计算机系统_并发编程(10)_线程(七):基于预线程化的…

【MySQL】09.索引

索引是用来提高数据库的性能的&#xff0c;但查询速度的提高是以插入、更新、删除的速度为代价的&#xff0c;这些写操作&#xff0c;增加了大量的IO。所以它的价值在于提高一个海量数据的检索速度。 1. 认识磁盘 MySQL 给用户提供存储服务&#xff0c;而存储的都是数据&…

【备忘】 windows 11安装 AdGuardHome,实现开机自启,使用 DoH

windows 11安装 AdGuardHome&#xff0c;实现开机自启&#xff0c;使用 DoH 下载 AdGuardHome解压 AdGuardHome启动 AdGuard Home设置 AdGuardHome设置开机自启安装 NSSM设置开机自启重启电脑后我们可以访问 **http://127.0.0.1/** 设置使用 AdGuardHome DNS 效果图 下载 AdGua…

[Windows] 游戏常用运行库- Game Runtime Libraries Package(6.2.25.0409)

游戏常用运行库 合集 整合了许多游戏会用到的运行库&#xff0c;支持 Windows XP – Windows 11 系统&#xff0c;并且支持自动检测系统勾选推荐的运行库&#xff0c;方便快捷。 本版特点&#xff1a; By&#xff1a;mefcl 整合常见最新游戏所需运行库 根据系统自动勾选推荐…

(九)PMSM驱动控制学习---高阶滑膜观测器

在之前的文章中&#xff0c;我们介绍了永磁同步电机无感控制中的滑模观测器&#xff0c;但是同时我们也认识到了他的缺点&#xff1a;因符号函数带来的高频切换分量&#xff0c;使用低通滤波器引发相位延迟&#xff1b;在本篇文章&#xff0c;我们将会介绍高阶滑模观测器的无感…

25年上半年五月之软考之设计模式

目录 一、单例模式 二、工厂模式 三、 抽象工厂模式 四、适配器模式 五、策略模式 六、装饰器模式 ​编辑 考点&#xff1a;会挖空super(coffeOpertion); 七、代理模式 为什么必须要使用代理对象&#xff1f; 和装饰器模式的区别 八、备忘录模式 一、单例模式 这个…

Mongo DB | 多种修改数据库名称的方式

目录 方法一&#xff1a;使用 mongodump 和 mongorestore 命令 方法二&#xff1a;使用 db.copyDatabase() 方法 方法三&#xff1a;使用 MongoDB Compass 在 MongoDB 中&#xff0c;更改数据库名称并不是一个直接的操作&#xff0c;因为 MongoDB 不提供直接重命名数据库的命…

QListWidget的函数,信号介绍

前言 Qt版本:6.8.0 该类用于列表模型/视图 QListWidgetItem函数介绍 作用 QListWidget是Qt框架中用于管理可交互列表项的核心组件&#xff0c;主要作用包括&#xff1a; 列表项管理 支持动态添加/删除项&#xff1a;addItem(), takeItem()批量操作&#xff1a;addItems()…

EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析

引言 在数智化转型浪潮席卷各行各业的今天,医疗领域同样面临着提升运营效率、改善患者体验和加强系统可靠性的多重挑战。Rockwell Automation于2025年5月20日推出的EtherNet/IP机柜内解决方案,为医疗中心的自动化升级提供了一种创新路径。本报告将深入分析这一解决方案的核心…

【结构设计】以3D打印举例——持续更新

【结构设计】以立创EDA举例——持续更新 文章目录 [TOC](文章目录) 前言立创EDA官网教程一、3D外壳绘制二、3D外壳渲染三、3D外壳打印1.3D打印机——FDM2.3D打印机——光固化 四、3D外壳LOG设计1.激光雕刻机 总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…