图书管理系统【Java实现】

article/2025/10/10 20:04:17

目录

  • 一、项目简介
  • 二、项目演示
    • 1.登录界面
    • 2.图书借阅信息管理界面
    • 3.新增图书借阅信息界面
    • 4.修改图书借阅信息界面
    • 5.删除图书借阅信息界面
  • 三、项目流程
    • 1.准备开发环境
      • (1)下载所需文件
      • (2)在IDEA中配置Maven
      • (3)配置pom.xml文件
      • (4)生成webapp资源文件夹和web描述文件
      • (5)配置Tomcat文件
      • (6)准备前端资源
    • 2.登录页面设计
    • 3.数据库设计
      • (1)创建数据库
      • (2)创建所需要的表
        • 用户表
        • 学生表
        • 班级表
        • 图书信息表
        • 图书借阅信息表
        • 数据字典表
        • 数据字典标签表
      • (3)各表之间的关系
      • (4)初始化数据
    • 4.实体类的实现
    • 5.接口的实现
  • 四、项目源码

一、项目简介

项目名称:图书管理系统。
主要业务:管理学校图书信息,记录并管理学生借阅图书信息。主要实现查询、新增、删除、修改图书借阅信息。
开发环境:windows、idea
技术栈:MySQL、Ajax、JDBC、Servlet、Maven、Jackson

二、项目演示

1.登录界面

在这里插入图片描述

2.图书借阅信息管理界面

在这里插入图片描述

3.新增图书借阅信息界面

在这里插入图片描述

4.修改图书借阅信息界面

在这里插入图片描述

5.删除图书借阅信息界面

在这里插入图片描述

三、项目流程

1.准备开发环境

(1)下载所需文件

下载settings.xml文件和本地仓库压缩包M2Repository.zip这两个文件。
(我的github里有这两个文件,往下看,就在下面放置源码库里哦)
在这里插入图片描述
图片里的lombok文件是什么呢?
lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法。
其实lombok文件在idea里就可以直接安装,但是由于我的idea一直加载不出来,所以就得我手动安装啦。
在这里插入图片描述

尝试几次后都加载不出来,只能点这里手动安装啦。
在这里插入图片描述
在这里插入图片描述

(2)在IDEA中配置Maven

在这里插入图片描述
在这里插入图片描述

(3)配置pom.xml文件

注意点:
在这里插入图片描述
在这里插入图片描述
两个位置名字一致
在这里插入图片描述
具体代码见项目源码。

(4)生成webapp资源文件夹和web描述文件


在这里插入图片描述
在这里插入图片描述

(5)配置Tomcat文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6)准备前端资源

具体代码文件见项目源码

2.登录页面设计

在这里插入图片描述
写一个form表单,给后台一个路径。
在这里插入图片描述
在后端写登录页面,当输入正确的用户名和密码时,点击登录,即可跳转到相应界面。当用户名或密码错误时,点击登录,会提示用户名或密码错误。

3.数据库设计

(1)创建数据库

drop database if exists book;
create database book character set utf8mb4;use book;

(2)创建所需要的表

用户表

drop table if exists user;
create table user(id int primary key auto_increment,username varchar(20) not null unique comment '用户账号',password varchar(20) not null comment '密码',nickname varchar(20) comment '用户昵称',email varchar(50) comment '邮箱',create_time timestamp default NOW() comment '创建时间'
) comment '用户表';

学生表

drop table if exists student;
create table student(id int primary key auto_increment,student_name varchar(20) not null comment '姓名',student_no varchar(20) comment '学号',id_card varchar(20) comment '身份证号',student_email varchar(50) comment '邮箱',classes_id int comment '班级id',create_time timestamp default NOW() comment '创建时间',foreign key (classes_id) references classes(id)
) comment '学生表';

班级表

drop table if exists classes;
create table classes(id int primary key auto_increment,classes_name varchar(20) not null comment '班级名称',classes_graduate_year varchar(20) comment '毕业年份,数据字典000001',classes_major varchar(20) comment '专业,数据字典000002',classes_desc varchar(50) comment '备注',create_time timestamp default NOW() comment '创建时间'
) comment '班级表';

图书信息表

drop table if exists book;
create table book(id int primary key auto_increment,book_name varchar(50) not null comment '图书名称',author varchar(20) comment '作者',price decimal(10,2) comment '价格',create_time timestamp default NOW() comment '创建时间'
) comment '图书信息';

图书借阅信息表

drop table if exists borrow_record;
create table borrow_record(id int primary key auto_increment,book_id int comment '图书id',student_id int comment '学生id',start_time timestamp not null comment '借阅日期',end_time timestamp null default null comment '归还日期',create_time timestamp default NOW() comment '创建时间',foreign key (book_id) references book(id),foreign key (student_id) references student(id)
) comment '图书借阅信息';

数据字典表

drop table if exists dictionary;
create table dictionary(id int primary key auto_increment,dictionary_key varchar(20) not null unique comment '键',dictionary_value varchar(20) not null comment '值',dictionary_desc varchar(20) comment '备注',create_time timestamp default NOW() comment '创建时间'
) comment '数据字典';

数据字典标签表

drop table if exists dictionary_tag;
create table dictionary_tag(id int primary key auto_increment,dictionary_tag_key varchar(20) not null comment '键',dictionary_tag_value varchar(20) not null comment '值',dictionary_tag_desc varchar(20) comment '备注',dictionary_id int comment '数据字典id',create_time timestamp default NOW() comment '创建时间',foreign key (dictionary_id) references dictionary(id)
) comment '数据字典标签';

数据字典表和数据字典标签表主要用在一些通用的下拉菜单选项。
在这里插入图片描述
下拉菜单的选项都是通过发送http请求,从数据库查询出来的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)各表之间的关系

在这里插入图片描述

  1. 学生表和班级表为多对一关系
  2. 学生表和图书借阅信息表为一对多关系
  3. 图书表和图书借阅信息表为一对多关系
  4. 图书表和学生表在借阅的场景下,表现出多对多关系
  5. 数据字典表和数据字典标签表为一对多关系

(4)初始化数据

-- 初始化数据
-- mysql中没有==,是用=号代替==。为了区分=和==,赋值时使用:=
set @username:='abc';
set @password:='123';
set @nickname:='柠萌呀';
set @email:='123@qq.com';set @dictionary_classes_graduate_year='000001';
set @dictionary_classes_major='000002';set @classes_name:='大学';
set @student_name:='柠萌';insert into user(username, nickname, password, email) values (@username, @nickname, @password, @email);
insert into user(username, nickname, password, email) values (concat(@username, '1'), concat(@nickname, '1'), @password, @email);
insert into user(username, nickname, password, email) values (concat(@username, '2'), concat(@nickname, '2'), @password, @email);
insert into user(username, nickname, password, email) values (concat(@username, '3'), concat(@nickname, '3'), @password, @email);
insert into user(username, nickname, password, email) values (concat(@username, '4'), concat(@nickname, '4'), @password, @email);
insert into user(username, nickname, password, email) values (concat(@username, '5'), concat(@nickname, '5'), @password, @email);## 数据字典:学生毕业年份
insert into dictionary(dictionary_key, dictionary_value, dictionary_desc)values (@dictionary_classes_graduate_year, '毕业年份', '学生毕业的年份');insert into dictionary_tag(dictionary_tag_key, dictionary_tag_value, dictionary_id)values ('001', '2020届', 1);
insert into dictionary_tag(dictionary_tag_key, dictionary_tag_value, dictionary_id)values ('002', '2021届', 1);
insert into dictionary_tag(dictionary_tag_key, dictionary_tag_value, dictionary_id)values ('003', '2022届', 1);
insert into dictionary_tag(dictionary_tag_key, dictionary_tag_value, dictionary_id)values ('004', '2023届', 1);## 数据字典:学生专业
insert into dictionary(dictionary_key, dictionary_value, dictionary_desc)values (@dictionary_classes_major, '专业', '学生的专业');
insert into dictionary_tag(dictionary_tag_key, dictionary_tag_value, dictionary_id)values ('001', '中文系', 2);
insert into dictionary_tag(dictionary_tag_key, dictionary_tag_value, dictionary_id)values ('002', '英语系', 2);
insert into dictionary_tag(dictionary_tag_key, dictionary_tag_value, dictionary_id)values ('003', '计算机科学与技术', 2);insert into classes(classes_name, classes_graduate_year, classes_major, classes_desc) values (concat(@classes_name, '三年级'), '000001001', '000002003', '为自己的未来不断努力,不断充实自己');
insert into classes(classes_name, classes_graduate_year, classes_major, classes_desc) values (concat(@classes_name, '二年级'), '000001002', '000002003', '开始明确自己的未来,为自己制定目标');
insert into classes(classes_name, classes_graduate_year, classes_major, classes_desc) values (concat(@classes_name, '一年级'), '000001003', '000002003', '刚步入大学学生,对大学生活充满好奇');insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'A1'), 's00001', '222222222222222222', @email, 1);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'A2'), 's00002', '222222222222222223', @email, 1);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'A3'), 's00003', '222222222222222224', @email, 1);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'A4'), 's00004', '222222222222222225', @email, 1);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'A5'), 's00005', '222222222222222226', @email, 1);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'B1'), 's00006', '222222222222222227', @email, 2);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'B2'), 's00007', '222222222222222228', @email, 2);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'B3'), 's00008', '222222222222222229', @email, 2);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'B4'), 's00009', '222222222222222230', @email, 2);
insert into student(student_name, student_no, id_card, student_email, classes_id) values (concat(@student_name, 'B5'), 's00010', '222222222222222231', @email, 2);insert into book(book_name, author, price, create_time) values ('高等数学', '小米', 115.2, now());
insert into book(book_name, author, price, create_time) values ('诗和远方', '小明', 61.5, now());
insert into book(book_name, author, price, create_time) values ('美术', '小画', 33, now());
insert into book(book_name, author, price, create_time) values ('四级单词', '小梦', 33, now());insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (1, 1, '2020-01-01 14:20:00', '2020-02-01 14:20:00', now());
insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (1, 2, '2020-03-01 14:20:00', '2020-03-22 14:20:00', now());
insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (1, 3, '2020-05-01 14:20:00', '2020-05-12 14:20:00', now());
insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (2, 5, '2020-01-01 14:20:00', '2020-02-03 14:20:00', now());
insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (2, 7, '2020-02-04 14:20:00', '2020-03-03 14:20:00', now());
insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (2, 9, '2020-04-01 14:20:00', '2020-06-01 14:20:00', now());
insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (3, 3, '2020-02-01 14:20:00', '2020-02-21 14:20:00', now());
insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (3, 6, '2020-04-01 14:20:00', '2020-05-01 14:20:00', now());
insert into borrow_record(book_id, student_id, start_time, end_time, create_time) values (3, 8, '2020-06-01 14:20:00', '2020-06-06 14:20:00', now());

4.实体类的实现

根据数据库中每个表的元素,来写每个实体类。
在这里插入图片描述
下图为所有实体类。
在这里插入图片描述
举例:如实体Book类

package lemon.model;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.util.Date;
/*** 图书信息*/
@Getter
@Setter
@ToString
public class Book extends DictionaryTag{    private Integer id;/*** 图书名称*/private String bookName;/*** 作者*/private String author;/*** 价格*/private BigDecimal price;/*** 创建时间*/private Date createTime;private Book book;private Classes classes;private Student student;
}

5.接口的实现

根据JDBC编程写出DAO类
在这里插入图片描述
例如:BookDAO

package lemon.dao;import lemon.exception.SystemException;
import lemon.model.Book;
import lemon.util.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;public class BookDAO {public static List<Book> queryAsDict() {List<Book> books = new ArrayList<>();Connection c = null;PreparedStatement ps = null;ResultSet rs = null;try{c = DBUtil.getConnection();String sql = "select id, book_name, author,price from book";ps = c.prepareStatement(sql);rs = ps.executeQuery();while (rs.next()){Book book = new Book();book.setDictionaryTagKey(String.valueOf(rs.getInt("id")));book.setDictionaryTagValue(rs.getString("book_name"));book.setAuthor(rs.getString("author"));book.setPrice(rs.getBigDecimal("price"));books.add(book);}}catch (Exception e){throw new SystemException("00004","查询图书数据字典出错",e);}finally {DBUtil.close(c,ps,rs);}return books;}
}

所有接口概览如下。
在这里插入图片描述

四、项目源码

https://github.com/ningmeng-zy/Projects


http://chatgpt.dhexx.cn/article/5fVEXqJp.shtml

相关文章

Java开发实现图书管理系统(超详细)

本文用Java代码实现图书代码管理系统&#xff0c;有些地方可能会有纰漏&#xff0c;希望各位大佬鉴赏&#xff01;&#xff01; 文章目录 文章目录 一、Java实现图书管理系统 1.1创建book包 二、创建图书管理系统的操作包 2.1创建Operation接口 三、创建User包 3.1创建User类 四…

Java实现图书管理系统(新手友好)

图书管理系统 一、初识工作二、具体实现三、代码book包Book类BookList类 operation包IOperation接口AddOperationBorrowOperationDelOperationDisplayOperationExitOperationFindOperationReturnOperation user包AdminUserNormalUserUser Main 一、初识工作 我们首先要清楚的是…

图书管理系统【java】

目录 &#x1f947;1.设计背景 &#x1f50e;2.设计思路 &#x1f511;3.book包 &#x1f4d7;3.1 Book类的实现 &#x1f4d5;3.2 BookList类的实现(书架) &#x1f511;4.user包 &#x1f4d9;4.1 User类的实现 &#x1f4d2;4.2 AdminUser&#xff08;管理员&#x…

图书管理系统(Java)

&#x1f4da; 一、前言1.1整体框架 二、book包2.1Book2.2BookList 三、user包3.1、User3.2、Adminuser3.3、Normaluser 四、Operation包4.1、IOperation接口4.2、AddOperattion4.3、ShowOperation4.4、FindOperation4.5、DelOperation4.6、BorrowOperation4.7、ReturnOperatio…

图书管理系统(Java简单版)(完整代码+详解)

目录 详解&#xff1a; BookList类&#xff1a; InOperation接口 User类&#xff08;父类&#xff09; 和 Main类&#xff08;这俩要一起看&#xff09; 完整代码 book包 Book类 BookList类 operation包 AddBook类 BorrowBook类 DeleteBook类 FindBook类 Pr…

用java实现图书管理系统。

在学完java基础篇的时候&#xff0c;安排做了一个综合版的java基础项目&#xff0c;可以把之前学到的知识综合运用。 图书管理系统。 一.项目设计到的知识1.MVC设计模式思想&#xff08;分包&#xff09;>项目分包>MVC简单介绍 2.GUI&#xff08;图形化界面&#xff09;3…

Java实现简易版的【图书管理系统】

目录 &#x1f30e;1.分析图书管理系统的功能 &#x1f30d; 2.在IDEA中进行功能类的创建 &#x1f984;2.1 创建一个名为book的包&#xff0c;里面存放书相关的 &#x1f984; 2.2 创建一个名为Operation的包&#xff0c;里面存放对书的所有操作 &#x1f30e; 3.进行用户…

Java图书管理系统(代码及详解)

图书管理系统在C、C、Java学习中我们都会进行练习来串联我们学习的一些知识以及使用场景&#xff0c;这里跟着我我带大家敲Java版本&#xff01; 结果展示&#xff1a; 这是我们最终实现的图书管理系统&#xff0c;下面我们慢慢来 思路&#xff1a; Java是面向对象的语言特点…

JAVA实现简易的图书管理系统(含过程)

目录 设计背景 成果展示 设计思路 详细代码 book包 Book类 BookList类 operation包 IOperation接口 AddOperation类 BorrowOperation类 DelOperation类 DisplayOperation类 ExitOperation类 ReturnOperation类 user包 User类 Admin类 NormalUser类 Test类…

图书管理系统(Java实现)[附完整代码]

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE 作者专栏&#xff1a;大三学生&#xff0c;希望跟大家一起进步&#xff01; 文章目录 目录 文章目录 一、图书管理系统菜单 二、实现基本框架 三、实现业务 3.1 打印所有图书 3.2 退出系统 3.3 查…

JAVA->实现图书管理系统

目录 一、图书管理系统展示 1.管理员 2.普通用户 ​编辑3.操作 二、图书管理系统基本实现思路 book --- 包 1.Book类 注意&#xff1a; 2.BookList类 注意&#xff1a; Opreration --- 包 Operration接口 1.AddOperation -- 增加图书 注意&#xff1a; 2. BorrowO…

Java实现简单的图书管理系统

图书管理系统 简介知识点类封装包继承接口多态 创建书&#xff08;Book&#xff09;书架&#xff08;BookList&#xff09;主函数&#xff08;Main&#xff09;用户&#xff08;User&#xff09;管理员&#xff08;Administrator&#xff09;接口&#xff08;IOperation&#x…

Java基础之图书管理系统

一&#xff1a;建立信息表 为图书管理人员编写一个图书管理系统&#xff0c;图书管理系统的设计主要是实现对图书的管理和相关操作&#xff0c;包括3个表&#xff1a; 图书信息表——存储图书的基本信息&#xff0c;包括书号、书名、作者、出版社、出版日期、存馆数量、定价等…

Java实现简单图书管理系统

目录 利物浦是冠军&#xff01; 一、图书管理系统的功能 二、图书管理系统的基本实现思路 1、Book包 2、user包 3、operation包 4、利用Main函数来连接所有包 三、图书管理系统的具体实现 1、Book包 &#xff08;1&#xff09;book类 &#xff08;2&#xff09;bookL…

Java实现图书管理系统(超详细解析)

图书管理系统简单实现。图书管理系统基于Java&#xff0c;页面使用jsp实现。 用户进入登录页面&#xff0c;输入账号密码&#xff0c;系统会自动检验账号和密码是否匹配&#xff0c;匹配成功则进入图书管理首页。首页查看图书信息&#xff0c;新增图书信息&#xff0c;删除不需…

Java实现简单的图书管理系统(讲解清晰,代码齐全,能正常运行)

目录 实现的样子 大致思路 代码 &#xff08;按照这个目录创建包&#xff09; 首先是book包下&#xff0c;有两个类 book类 bookList类 然后是operation包下&#xff0c;有7个类和1个接口 AddOperation类 BorrowOperation类 DelOperation类 DisplayOperation类 ExitO…

Java课程设计—— 图书管理系统

1系统需求分析 1.1功能需求分析 本课题根据图书信息管理综合分析&#xff0c;便出于方便管理考虑&#xff0c;将图书信息管理系统的功能总结起来&#xff0c;共需要实现以下几个方面功能: 1.1.1管理图书信息 管理所有图书的基本信息&#xff0c;对图书信息的操作包括添加、…

用Java实现简易的图书管理系统(超详细)

目录 1.设计背景 2.设计思路 3.模块展示及代码演示 3.1 Book类的实现 3.2 BookList类的实现(书架) 3.3 异常类的实现(OperationException) 3.4 用户类的实现 3.5 操作接口的实现(定义规范) 3.6 操作类的具体实现 3.6.1 增加操作 3.6.2 查找操作 3.6.3 删除操作 3.6…

mysql 数组函数_mysql数组函数知识讲解

MySQL的数组函数有很多种&#xff0c;今天给大家介绍的就是mysql数组中的mysql_fetch_array()函数&#xff0c;mysql_fetch_array()函数的代码编写有什么特点呢&#xff1f; MySQL中有很多功能强大的函数&#xff0c;下面为您介绍的函数mysql_fetch_array()属于MySQL数组函数&a…

MySQL聚合函数

一、聚合函数介绍 1、聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。 2、聚合函数类型 AVG() SUM() MAX() MIN() COUNT() 3、聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。 二、AVG和SUM函数 # AVG函数用于求一组数据的平均值&a…