第一次冲刺报告:图书管理系统最小可用系统(MVP)

第一次冲刺报告:图书管理系统最小可用系统(MVP)

1. 冲刺目标与范围

用户故事实现(优先级排序)

优先级

用户故事

完成状态

P0

学生-搜索并借阅图书

P1

管理员-登记借还书

 

 

 

P2

管理员-添加新书

冲刺目标:在两周内完成核心借阅流程的最小可用系统,包括:

  • 学生端图书搜索与借阅功能
  • 管理员端借还书登记功能
  • 基础认证系统

2. 系统架构设计

架构图

3. 最小可用系统实现

 

3.1前端页面设计

login.html

 

 

 

 

 home.html

 3.2后端的设计

AuthController.java

 

  1. 登录页面展示与访问控制

  • 处理对/auth/login路径的GET请求

  • 负责渲染登录页面视图

  • 提供错误提示功能:当用户登录失败时,会返回包含错误信息的页面

  • 通过Model对象向视图传递错误提示信息

  1. 用户认证处理

  • 接收用户提交的登录表单数据(POST请求)

  • 通过UserRepository查询数据库验证用户凭证

  • 执行双重验证:检查用户名是否存在以及密码是否匹配

  • 认证成功后建立用户会话(将用户对象存入HttpSession)

  • 认证失败时重定向到登录页并携带错误参数

  1. 会话管理

  • 提供安全的登出功能

  • 通过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表示未还)
posted @ 2025-06-07 10:52  孙韶涵  阅读(46)  评论(0)    收藏  举报