第一次冲刺报告:图书管理系统最小可用系统(MVP)
第一次冲刺报告:图书管理系统最小可用系统(MVP)
1. 冲刺目标与范围
用户故事实现(优先级排序)
|
优先级 |
用户故事 |
完成状态 |
|
P0 |
学生-搜索并借阅图书 |
√ |
|
P1 |
管理员-登记借还书 |
√ |
|
|
|
|
|
P2 |
管理员-添加新书 |
√ |
冲刺目标:在两周内完成核心借阅流程的最小可用系统,包括:
- 学生端图书搜索与借阅功能
- 管理员端借还书登记功能
- 基础认证系统
2. 系统架构设计
架构图

3. 最小可用系统实现

3.1前端页面设计
login.html

home.html

3.2后端的设计
AuthController.java


-
登录页面展示与访问控制
-
处理对/auth/login路径的GET请求
-
负责渲染登录页面视图
-
提供错误提示功能:当用户登录失败时,会返回包含错误信息的页面
-
通过Model对象向视图传递错误提示信息
-
用户认证处理
-
接收用户提交的登录表单数据(POST请求)
-
通过UserRepository查询数据库验证用户凭证
-
执行双重验证:检查用户名是否存在以及密码是否匹配
-
认证成功后建立用户会话(将用户对象存入HttpSession)
-
认证失败时重定向到登录页并携带错误参数
-
会话管理
-
提供安全的登出功能
-
通过session.invalidate()方法彻底销毁会话
-
确保用户登出后会话信息完全清除
-
防止会话固定等安全问题
该模块的设计遵循了基本的Web安全原则:
-
使用会话机制跟踪用户登录状态
-
采用重定向而非直接渲染来防止表单重复提交
-
通过参数传递而非session存储错误信息,避免安全风险
-
提供完整的登录-会话管理-登出生命周期管理
整体实现简洁高效,为系统提供了可靠的身份认证基础,可以方便地与其他模块集成,同时也为后续扩展(如权限控制、记住我等功能)保留了接口。
BookController.java



这段代码是一个图书管理系统的核心部分,主要实现三个功能:
第一个是图书展示功能。当用户访问图书列表页面时,系统会先检查用户是否登录。如果没有登录就会被转到登录页面。登录成功后,用户可以看到所有图书列表,还能通过搜索框查找特定图书,搜索时会同时匹配书名和作者名。系统还会根据用户角色决定是否显示管理员专属功能。
第二个是图书添加功能。这个只有管理员才能使用。管理员填写新书信息提交后,系统会自动将新书状态设为"未借出",然后保存到数据库。这个功能做了严格的权限检查,普通用户无法使用。
第三个是借阅状态切换功能。用户可以点击按钮来借书或还书,每次点击都会改变当前图书的借阅状态。比如原本是"可借"状态的书点击后就会变成"已借出",再次点击又变回"可借"。这个功能也需要用户登录后才能使用。
整个系统有完善的权限控制,每一步操作都会检查用户登录状态,管理员功能有额外权限验证,确保系统安全性。搜索功能设计得很友好,不区分字母大小写,方便用户查找图书。
4. 数据库设计
| 字段 | 类型/约束 | 说明 | |
|---|---|---|---|
| users | id | BIGINT PRIMARY KEY AUTO_INCREMENT | 用户ID |
| username | VARCHAR(50) UNIQUE NOT NULL | 用户名(唯一) | |
| password | VARCHAR(100) NOT NULL | 加密密码 | |
| role | ENUM('ADMIN','USER') DEFAULT USER | 用户角色 | |
| created_at | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | 创建时间 | |
| books | id | BIGINT PRIMARY KEY AUTO_INCREMENT | 图书ID |
| title | VARCHAR(100) NOT NULL | 书名 | |
| author | VARCHAR(50) NOT NULL | 作者 | |
| isbn | VARCHAR(20) UNIQUE | ISBN号(唯一) | |
| status | ENUM('AVAILABLE','BORROWED') DEFAULT 'AVAILABLE' | 借阅状态 | |
| created_at | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | 上架时间 | |
| updated_at | TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 | |
| borrow_records | id | BIGINT PRIMARY KEY AUTO_INCREMENT | 借阅记录ID |
| book_id | BIGINT NOT NULL | 关联books.id | |
| user_id | BIGINT NOT NL | 关联users.id | |
| borrow_time | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | 借出时间 | |
| return_time | TIMESTAMP NULL | 归还时间(NULL表示未还) |
浙公网安备 33010602011771号