web第八次作业
一、接口文档
1. 管理员登录
1.1 管理员登录
基本信息
请求参数
格式:application/x-www-form-urlencoded
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| username | string | 必须 | 管理员账号 |
| password | string | 必须 | 管理员密码 |
请求示例
username=admin&password=123456响应数据
格式:application/json
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| code | number | 必须 | 200成功,500失败 |
| message | string | 非必须 | 提示信息 |
响应示例
{ "code": 200, "message": "success" }2. 图书管理
2.1 查询所有图书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/book/list |
| 请求方式 | GET |
| 接口描述 | 查询所有图书列表 |
请求参数
无
响应数据
格式:application/json
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| code | number | 必须 | 200成功,500失败 |
| message | string | 非必须 | 提示信息 |
| data | array | 非必须 | 图书列表 |
data字段说明
| 参数名 | 类型 | 备注 |
|---|---|---|
| id | number | 图书ID |
| name | string | 书名 |
| author | string | 作者 |
| publisher | string | 出版社 |
| isbn | string | ISBN号 |
| category | string | 分类 |
| stock | number | 库存数量 |
响应示例
{ "code": 200, "message": "success", "data": [ { "id": 1, "name": "Java编程思想", "author": "Bruce Eckel", "publisher": "机械工业出版社", "isbn": "978-7-111-12345-6", "category": "编程", "stock": 10 } ] }2.2 搜索图书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/book/search |
| 请求方式 | GET |
| 接口描述 | 根据关键字搜索图书 |
请求参数
格式:application/x-www-form-urlencoded
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| keyword | string | 必须 | 搜索关键字(书名/作者) |
请求示例
/api/book/search?keyword=Java响应数据
格式:application/json
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| code | number | 必须 | 200成功,500失败 |
| message | string | 非必须 | 提示信息 |
| data | array | 非必须 | 匹配的图书列表 |
响应示例
{ "code": 200, "message": "success", "data": [ { "id": 1, "name": "Java编程思想", "author": "Bruce Eckel", "publisher": "机械工业出版社", "stock": 10 } ] }2.3 添加图书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/book/add |
| 请求方式 | POST |
| 接口描述 | 添加新图书 |
请求参数
格式:application/json
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| name | string | 必须 | 书名 |
| author | string | 必须 | 作者 |
| publisher | string | 非必须 | 出版社 |
| isbn | string | 非必须 | ISBN号 |
| category | string | 非必须 | 分类 |
| stock | number | 必须 | 库存数量 |
请求示例
json
{ "name": "Spring Boot实战", "author": "Craig Walls", "publisher": "人民邮电出版社", "isbn": "978-7-115-23456-7", "category": "编程", "stock": 8 }响应数据
格式:application/json
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| code | number | 必须 | 200成功,500失败 |
| message | string | 非必须 | 提示信息 |
| data | string | 非必须 | 附加信息 |
响应示例
json
{ "code": 200, "message": "添加成功", "data": null }2.4 更新图书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/book/update |
| 请求方式 | PUT |
| 接口描述 | 更新图书信息 |
请求参数
格式:application/json
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| id | number | 必须 | 图书ID |
| name | string | 必须 | 书名 |
| author | string | 必须 | 作者 |
| publisher | string | 非必须 | 出版社 |
| isbn | string | 非必须 | ISBN号 |
| category | string | 非必须 | 分类 |
| stock | number | 必须 | 库存数量 |
请求示例
json
{ "id": 1, "name": "Java编程思想(第4版)", "author": "Bruce Eckel", "publisher": "机械工业出版社", "isbn": "978-7-111-12345-6", "category": "编程", "stock": 5 }响应示例
json
{ "code": 200, "message": "更新成功", "data": null }2.5 删除图书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/book/delete/{id} |
| 请求方式 | DELETE |
| 接口描述 | 根据ID删除图书 |
请求参数
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| id | number | 必须 | 图书ID(路径参数) |
请求示例
DELETE /api/book/delete/1
响应示例
json
{ "code": 200, "message": "删除成功", "data": null }3. 读者管理
3.1 查询所有读者
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/reader/list |
| 请求方式 | GET |
| 接口描述 | 查询所有读者列表 |
请求参数
无
响应数据
| 参数名 | 类型 | 备注 |
|---|---|---|
| id | number | 读者ID |
| username | string | 登录用户名 |
| name | string | 姓名 |
| phone | string | 电话 |
| string | 邮箱 | |
| idCard | string | 身份证号 |
| enabled | boolean | 是否启用 |
响应示例
json
{ "code": 200, "message": "success", "data": [ { "id": 1, "username": "zhangsan", "name": "张三", "phone": "13800001111", "email": "zhangsan@email.com", "idCard": "110101199001011234", "enabled": true } ] }3.2 添加读者
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/reader/add |
| 请求方式 | POST |
| 接口描述 | 添加新读者 |
请求参数
格式:application/json
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| username | string | 必须 | 登录用户名 |
| name | string | 必须 | 姓名 |
| password | string | 必须 | 密码 |
| phone | string | 非必须 | 电话 |
| string | 非必须 | 邮箱 | |
| idCard | string | 必须 | 身份证号 |
请求示例
json
{ "username": "wangwu", "name": "王五", "password": "123456", "phone": "13800003333", "email": "wangwu@email.com", "idCard": "110101199003031234" }响应示例
json
{ "code": 200, "message": "添加成功", "data": null }3.3 删除读者
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/reader/delete/{id} |
| 请求方式 | DELETE |
| 接口描述 | 根据ID删除读者 |
请求示例
DELETE /api/reader/delete/1
响应示例
json
{ "code": 200, "message": "删除成功", "data": null }4. 借阅管理
4.1 借书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/borrow/borrow |
| 请求方式 | POST |
| 接口描述 | 借阅图书 |
请求参数
格式:application/x-www-form-urlencoded
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| bookId | number | 必须 | 图书ID |
| readerId | number | 必须 | 读者ID |
请求示例
bookId=1&readerId=1
响应示例
json
{ "code": 200, "message": "借书成功", "data": null }错误响应
json
{ "code": 500, "message": "借书失败,请检查库存或是否已借", "data": null }4.2 还书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/borrow/return |
| 请求方式 | POST |
| 接口描述 | 归还图书 |
请求参数
格式:application/x-www-form-urlencoded
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| recordId | number | 必须 | 借阅记录ID |
请求示例
recordId=1
响应示例
json
{ "code": 200, "message": "还书成功", "data": null }4.3 查询借阅记录
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/borrow/list |
| 请求方式 | GET |
| 接口描述 | 查询所有借阅记录 |
请求参数
无
响应数据
| 参数名 | 类型 | 备注 |
|---|---|---|
| id | number | 记录ID |
| bookId | number | 图书ID |
| readerId | number | 读者ID |
| bookName | string | 图书名称 |
| readerName | string | 读者姓名 |
| borrowDate | string | 借阅日期 |
| dueDate | string | 应还日期 |
| returnDate | string | 归还日期 |
| status | string | 状态:borrowed/returned/overdue |
响应示例
json
{ "code": 200, "message": "success", "data": [ { "id": 1, "bookId": 1, "readerId": 1, "bookName": "Java编程思想", "readerName": "张三", "borrowDate": "2026-06-24 14:19:58", "dueDate": "2026-07-01 14:19:58", "returnDate": null, "status": "borrowed" } ] }4.4 查询未归还记录
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /api/borrow/unreturned |
| 请求方式 | GET |
| 接口描述 | 查询所有未归还的借阅记录 |
响应示例
json
{ "code": 200, "message": "success", "data": [ { "id": 1, "bookName": "Java编程思想", "readerName": "张三", "borrowDate": "2026-06-24 14:19:58", "dueDate": "2026-07-01 14:19:58", "status": "borrowed" } ] }5. 读者端接口(前台)
5.1 读者登录
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /front/loginCheck |
| 请求方式 | POST |
| 接口描述 | 读者登录验证 |
请求参数
格式:application/x-www-form-urlencoded
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| username | string | 必须 | 读者账号 |
| password | string | 必须 | 读者密码 |
请求示例
username=zhangsan&password=123456
响应示例
成功:redirect:/front/index
失败:redirect:/front/login
5.2 读者注册
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /front/register |
| 请求方式 | POST |
| 接口描述 | 读者注册 |
请求参数
格式:application/x-www-form-urlencoded
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| name | string | 必须 | 姓名 |
| username | string | 必须 | 登录账号 |
| password | string | 必须 | 密码 |
| idCard | string | 必须 | 身份证号 |
| phone | string | 非必须 | 电话 |
请求示例
name=王五&username=wangwu&password=123456&idCard=110101199003031234
响应示例
成功:redirect:/front/login
失败:redirect:/front/register(带错误信息)
5.3 读者借书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /front/borrow |
| 请求方式 | POST |
| 接口描述 | 读者自助借书 |
请求参数
格式:application/x-www-form-urlencoded
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| bookId | number | 必须 | 图书ID |
响应示例
json
{ "code": 200, "message": "借书成功", "data": null }5.4 读者还书
基本信息
| 项目 | 内容 |
|---|---|
| 请求路径 | /front/return |
| 请求方式 | POST |
| 接口描述 | 读者自助还书 |
请求参数
格式:application/x-www-form-urlencoded
| 参数名 | 类型 | 是否必须 | 备注 |
|---|---|---|---|
| recordId | number | 必须 | 借阅记录ID |
响应示例
json
{ "code": 200, "message": "还书成功", "data": null }二,数据库表
CREATE TABLE admin ( id INT IDENTITY(1,1) PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, created_at DATETIME DEFAULT GETDATE() ); GO CREATE TABLE book ( id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(100) NOT NULL, author VARCHAR(50) NOT NULL, publisher VARCHAR(100), isbn VARCHAR(20), category VARCHAR(50), location VARCHAR(50), stock INT DEFAULT 0, created_at DATETIME DEFAULT GETDATE() ); GO CREATE TABLE reader ( id INT IDENTITY(1,1) PRIMARY KEY, username VARCHAR(50) NULL UNIQUE, name VARCHAR(50) NOT NULL, phone VARCHAR(20), email VARCHAR(100), id_card VARCHAR(18) UNIQUE, password VARCHAR(100) NULL, enabled BIT DEFAULT 1, created_at DATETIME DEFAULT GETDATE() ); GO CREATE TABLE borrow_record ( id INT IDENTITY(1,1) PRIMARY KEY, book_id INT NOT NULL, reader_id INT NOT NULL, borrow_date DATETIME DEFAULT GETDATE(), due_date DATETIME, return_date DATETIME, status VARCHAR(20) DEFAULT 'borrowed', fine DECIMAL(10,2) DEFAULT 0, FOREIGN KEY (book_id) REFERENCES book(id), FOREIGN KEY (reader_id) REFERENCES reader(id) ); GO 测试数据 管理员 INSERT INTO admin (username, password) VALUES ('admin', '123456'); GO 图书 INSERT INTO book (name, author, publisher, category, stock) VALUES ('Java编程思想', 'Bruce Eckel', '机械工业出版社', '编程', 10), ('Spring Boot实战', 'Craig Walls', '人民邮电出版社', '编程', 8), ('深入理解Java虚拟机', '周志明', '机械工业出版社', '编程', 5); GO 读者 INSERT INTO reader (username, name, phone, id_card, password, enabled) VALUES ('zhangsan', '张三', '13800001111', '110101199001011234', '123456', 1), ('lisi', '李四', '13800002222', '110101199002021234', '123456', 1); GO 借阅记录 INSERT INTO borrow_record (book_id, reader_id, due_date) VALUES (1, 1, DATEADD(day, 7, GETDATE())); GO