项目名称
图书管理系统
项目介绍
图书管理系统主要是针对管理员的,管理员首次登录需要注册,登录进去之后,管理员可以对学生的借书,还书的信息进行 管理,也可以对学生,班级和图书进行不同的分类和管理,达到方便,快速管理书籍的目的。
开发环境与涉及到的知识
Windows idea Maven Servlet MySQL
项目功能
主要业务:管理学校图书信息,记录并管理学生借阅图书信息 用户登录 图书借阅信息管理
功能演示
管理员登录
用户管理
图书借阅管理
借阅信息查询
新增借阅信息
修改借阅信息
删除借阅信息
数据库相关设计
数据库表关系图
(1)学生表和班级表为多对一 (2)学生表和图书借阅信息表为一对多 (3)图书表和图书借阅信息表为一对多 (4)数据字典表和数据字典标签表为一对多
字典表说明
数据字典表和数据字典标签表主要用在一些下拉菜单选项中。 如学生是哪一届的,一般考虑为两张表:数据字典表和数据字典标签表(一对多关系)来保存。两张表都是key、value的形式,字典表是父节点,字典标签表是子节点,下拉菜单通过父节点的key查询出所有关联的子节点,再使用子节点的key、value进行下拉菜单选项的初始化
创建数据库及表
drop database if exists book;
create database book character set utf8mb4;
use book;
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 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 '数据字典标签';
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 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 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 '创建时间'
) comment '图书借阅信息';
前后端实现
要实现功能,要先明确前后端约定好的接口,主要是实现图书借阅信息管理。
查询专业字典
请求
GET dict/tag/query?dictionaryKey=000002
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功",
"data" : [ {
"dictionaryTagKey" : "000002001",
"dictionaryTagValue" : "中文系"
}, {
"dictionaryTagKey" : "000002002",
"dictionaryTagValue" : "英语系"
}, {
"dictionaryTagKey" : "000002003",
"dictionaryTagValue" : "计算机科学与技术"
} ]
}
查询毕业年份字典
请求
GET dict/tag/query?dictionaryKey=000001
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功",
"data" : [ {
"dictionaryTagKey" : "000001001",
"dictionaryTagValue" : "2020届"
}, {
"dictionaryTagKey" : "000001002",
"dictionaryTagValue" : "2021届"
}, {
"dictionaryTagKey" : "000001003",
"dictionaryTagValue" : "2022届"
}, {
"dictionaryTagKey" : "000001004",
"dictionaryTagValue" : "2023届"
} ]
}
查询图书借阅信息
请求
GET borrowRecord/query?searchText=&sortOrder=asc&pageSize=7&pageNumber=1
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功",
"total" : 9,
"data" : [ {
"id" : 1,
"startTime" : "2020-01-01 14:20:00",
"endTime" : "2020-02-01 14:20:00",
"createTime" : "2020-06-17 15:52:33",
"book" : {
"id" : 1,
"bookName" : "高等数学",
"author" : "马拉司机",
"price" : 115.20
},
"classes" : {
"id" : 1,
"classesName" : "幼儿园\uD83D\uDE02大班",
"classesGraduateYear" : "000001001",
"classesMajor" : "000002002",
"classesDesc" : "已经4岁,即将成为大人的大班同学,不再是3岁小孩子了呀"
},
"student" : {
"id" : 1,
"studentName" : "小小的梦想\uD83D\uDC37A1",
"studentNo" : "s00001",
"idCard" : "222222222222222222",
"studentEmail" : "123@qq.com"
}
}, {
"id" : 7,
"startTime" : "2020-02-01 14:20:00",
"endTime" : "2020-02-21 14:20:00",
"createTime" : "2020-06-17 15:52:33",
"book" : {
"id" : 3,
"bookName" : "柴米油盐",
"author" : "家庭妇男",
"price" : 33.00
},
"classes" : {
"id" : 1,
"classesName" : "幼儿园\uD83D\uDE02大班",
"classesGraduateYear" : "000001001",
"classesMajor" : "000002002",
"classesDesc" : "已经4岁,即将成为大人的大班同学,不再是3岁小孩子了呀"
},
"student" : {
"id" : 3,
"studentName" : "小小的梦想\uD83D\uDC37A3",
"studentNo" : "s00003",
"idCard" : "222222222222222224",
"studentEmail" : "123@qq.com"
}
} ]
}
查询班级 (使用下拉菜单)
请求
GET http://localhost:8080/classes/queryAsDict
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功",
"data" : [ {
"dictionaryTagKey" : "1",
"dictionaryTagValue" : "幼儿园\uD83D\uDE02大班",
"classesGraduateYear" : "000001001",
"classesMajor" : "000002003"
}, {
"dictionaryTagKey" : "2",
"dictionaryTagValue" : "幼儿园\uD83D\uDE02中班",
"classesGraduateYear" : "000001002",
"classesMajor" : "000002003"
}, {
"dictionaryTagKey" : "3",
"dictionaryTagValue" : "幼儿园\uD83D\uDE02小班",
"classesGraduateYear" : "000001003",
"classesMajor" : "000002003"
} ]
}
查询图书 (下拉菜单)
请求
GET book/queryAsDict
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功",
"data" : [ {
"dictionaryTagKey" : "1",
"dictionaryTagValue" : "高等数学",
"author" : "马拉司机",
"price" : 115.20
}, {
"dictionaryTagKey" : "2",
"dictionaryTagValue" : "诗和远方",
"author" : "老湿",
"price" : 61.50
}, {
"dictionaryTagKey" : "3",
"dictionaryTagValue" : "柴米油盐",
"author" : "家庭妇男",
"price" : 33.00
}, {
"dictionaryTagKey" : "4",
"dictionaryTagValue" : "▄︻┻┳═一∵∴∷∶∵(∵_,∵)>>>>散弹发射!!",
"author" : "蚷神",
"price" : 33.00
} ]
}
查询学生
级联下拉菜单:选择班级下拉选项之后,根据选择的班级id查询所有学生。
请求
GET student/queryAsDict?dictionaryKey=2
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功",
"data" : [ {
"dictionaryTagKey" : "6",
"dictionaryTagValue" : "小小的梦想\uD83D\uDC37B1",
"studentNo" : "s00006",
"idCard" : "222222222222222227"
}, {
"dictionaryTagKey" : "7",
"dictionaryTagValue" : "小小的梦想\uD83D\uDC37B2",
"studentNo" : "s00007",
"idCard" : "222222222222222228"
} ]
}
新增图书借阅信息
请求
POST borrowRecord/add
Content-Type: application/json
{"studentId":"7","bookId":"3","startTime":"2020-06-10 19:40:56","endTime":""}
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功"
}
删除图书借阅信息
请求
GET borrowRecord/delete?ids=2&ids=3
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功"
}
查询图书借阅详情
请求
GET borrowRecord/queryById?id=1
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功",
"data" : {
"id" : 1,
"startTime" : "2020-01-01 14:20:00",
"endTime" : "2020-02-01 14:20:00",
"createTime" : "2020-06-17 15:52:33",
"book" : {
"id" : 1,
"bookName" : "高等数学",
"author" : "马拉司机",
"price" : 115.20
},
"classes" : {
"id" : 1,
"classesName" : "幼儿园\uD83D\uDE02大班",
"classesGraduateYear" : "000001001",
"classesMajor" : "000002002",
"classesDesc" : "已经4岁,即将成为大人的大班同学,不再是3岁小孩子了呀"
},
"student" : {
"id" : 1,
"studentName" : "小小的梦想\uD83D\uDC37A1",
"studentNo" : "s00001",
"idCard" : "222222222222222222",
"studentEmail" : "123@qq.com"
}
}
}
修改图书借阅信息
请求
POST borrowRecord/update
Content-Type: application/json
{"id":"10","studentId":"3","bookId":"4","startTime":"2020-06-11 19:24:46","endTime":"2020-06-18 19:54:49"}
响应
{
"success" : true,
"code" : "200",
"message" : "操作成功"
}
代码设计
设计http请求基类 主要针对前段表格中,可以输入文本搜索,并根据页码显示列表数据
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class BaseEntity {
private Integer pageNumber;
private Integer pageSize;
private String searchText;
private String sortOrder;
}
设计统一响应类
import com.github.pagehelper.Page;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.PrintWriter;
import java.io.StringWriter;
@Getter
@Setter
@ToString
public class ResponseResult {
private boolean success;
private String code;
private String message;
private Long total;
private Object data;
private String stackTrace;
}