图书管理系统全流程实践:从权限设计到自动化回归测试
2026/9/19 16:20:22 网站建设 项目流程

简介:这是一份图书管理系统毕业设计论文文档,主要面向计算机、信息管理类专业的学生及需要撰写系统类毕业论文的读者。文档以图书管理系统的测试报告为主体,完整覆盖课题目标、系统功能需求、设计原则和测试方案,功能部分详细说明了登录用户权限设置、管理员添加、密码修改,以及图书、读者、期刊、数据库管理和查询统计等模块;同时阐述了系统的安全性、可扩展性、可靠性与易用性要求,并给出基于Java和MySQL的多层架构实现思路。整个压缩包只有1个doc文件,容量7.14MB,全文包含封面、成绩评定记录表、毕业设计任务书、目录与详细章节,结构规范清晰。目前已有102人学习下载。对于想完成类似图书管理或信息管理系统毕业设计的同学,这份文档能帮助快速搭建论文框架,并理解需求分析、系统测试与成绩评定的整套流程,是一份可直接参照的写作范本。

1. 一份图书管理系统毕业论文doc里真正值钱的测试资产

朋友发来一份《图书管理系统毕业论文.doc》,封面之后是任务书、需求文档和测试方案,后面跟着几十页测试用例表格,被测系统版本号写着 9.48。这类资源在网盘里很常见,但多数人拿到手就翻有没有源码,忽略了真正值得复用的部分:需求文档为每个功能定义了唯一标识符,测试方案明确写了通过/失败标准和挂起标准,这两样东西恰恰是很多小团队做 Web 系统时最欠缺的。图书管理系统表面是图书、读者、期刊的增删改查,但权限分级、借阅状态切换、库存扣减、逾期统计才是面试和答辩的高频提问点。这篇文章按「需求 → 数据库 → 测试用例 → 自动化回归」的顺序,把这份文档里可执行的思路拆开讲。

2. 图书管理系统需求拆解与角色权限矩阵

2.1 从登录到统计查询的功能树

文档把需求分为登录、基本操作、系统设置、统计查询、帮助五大组。基本操作里的图书管理、读者管理、期刊管理是标准 CRUD,借阅、归还、续借是状态流转,管理员日志用来做操作审计;系统设置里藏着系统初始化、备份数据库、批处理数据,这三项说明系统必须具备数据导入导出能力。统计查询里的借出记录、逾期记录、分类统计、资金统计、数据盘点,本质上就是一组带条件的分组查询。把这张功能树画成流程图,再对照功能模块逐一核对,是理解图书管理系统整体结构的第一步,也能避免测试时漏掉“备份数据库”这类容易被忽略的非功能性需求。

2.2 典型用例与异常分支

拿借阅流程举例,正常路径是管理员检索图书、确认在架、登记读者、扣减库存、生成借阅记录,到期日默认加 30 天。异常分支至少要覆盖:图书库存为 0、读者已借满、读者账号冻结、图书状态为下架。需求文档把借阅、归还、续借分开编号,就是为了让测试团队能针对每个功能点做独立追踪。画用例图时,读者、图书管理员、系统管理员是三个参与者,系统作为边界,这样分层可以避免把不同角色的操作全部堆在同一个用例里。借阅的异常分支里最容易漏掉的是“同一读者重复借同一本书”这类业务约束,应该在用例图里单独画一个扩展分支。

2.3 角色权限矩阵

登录用户的权限设置不能只靠一个布尔值区分“普通用户”和“管理员”,我一般会把角色权限落成一张矩阵表,编码时每个角色对应一个整数 role_level:

角色图书管理读者管理期刊管理借阅/归还系统设置统计查询
读者查询本人信息查询本人发起个人借阅
图书管理员增删改查增删改查增删改查操作部分全量
系统管理员全权全权全权操作全权全量

实际编码时权限判断要放在两个地方:菜单层按 role_level 控制显示,接口层在 Service 入口再校验一次。前端隐藏菜单不能替代后端鉴权,这是需求文档里“用户认证”反复强调的原因。测试时也要按这个矩阵反向验证,比如读者角色直接请求管理员接口,期望结果是 403 而不是 200。

2.4 需求标识符如何驱动测试

原文每个需求带编号,比如需求 3.1.4 是图书管理,3.1.18 是借出记录。这看似学术规范,实际是需求追踪矩阵的雏形。测试用例 ID 可以用 BMS-LOGIN-001 这种格式,在用例里引用需求编号,后面出回归报告时直接按编号筛用例,能说清楚“这个版本改了借阅逻辑,所以需求 3.1.7 关联用例全部重跑”。这套做法不依赖测试管理平台,Excel 表格就能维护,对课程设计和中小团队都值得长期保留。

3. 图书管理系统核心流程的数据库建模与事务控制

3.1 图书、读者、借阅记录的表结构设计

摘要里说系统可以采用 Java + MySQL,原文假设章节则提到 Access 作为目标平台,我按 MySQL 来建模。图书表、读者表、管理员表是基础,期刊表和借阅记录表是关键。建表时要特别注意库存字段和借阅状态字段的类型约定:

CREATE TABLE book ( book_id INT PRIMARY KEY AUTO_INCREMENT, isbn VARCHAR(20) NOT NULL, title VARCHAR(128) NOT NULL, category VARCHAR(50) NOT NULL DEFAULT '未分类', publisher VARCHAR(128), price DECIMAL(10, 2), total_stock INT NOT NULL DEFAULT 1, available_stock INT NOT NULL DEFAULT 1, status TINYINT NOT NULL DEFAULT 1 COMMENT '1在架 0下架', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_isbn (isbn) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE reader ( reader_id INT PRIMARY KEY AUTO_INCREMENT, reader_no VARCHAR(20) NOT NULL UNIQUE, name VARCHAR(64) NOT NULL, phone VARCHAR(20), status TINYINT NOT NULL DEFAULT 1 COMMENT '1正常 2冻结 0注销', max_borrow INT NOT NULL DEFAULT 5, create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE borrow_record ( id INT PRIMARY KEY AUTO_INCREMENT, borrow_no VARCHAR(32) NOT NULL UNIQUE, reader_id INT NOT NULL, book_id INT NOT NULL, borrow_date DATE NOT NULL, due_date DATE NOT NULL, return_date DATE NULL, status VARCHAR(20) NOT NULL DEFAULT 'BORROWED' COMMENT 'BORROWED/RETURNED/RENEWED/OVERDUE', renew_count INT NOT NULL DEFAULT 0, operator_id INT NOT NULL, KEY idx_reader (reader_id), KEY idx_due (status, due_date), CONSTRAINT fk_borrow_book FOREIGN KEY (book_id) REFERENCES book(book_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

表结构里有几个字段需要特意说明:available_stock是可借库存,total_stock是馆藏总量,两个字段不能合并,因为下架、损坏、借出都会改变可借量;borrow_record.status用字符串枚举而不是 0/1 数字,是为了让逾期统计 SQL 直接可读,测试断言时也少一层翻译;renew_count用来控制续借次数,避免读者无限制续借。外键在 MySQL 生产环境里常用逻辑外键,但课程设计用物理外键能体现完整性约束,答辩时更容易被认可。

3.2 借阅与归还事务的边界控制

借阅流程的经典错误是:先查库存大于 0,再更新库存,最后插入借阅记录。两个并发请求同时通过第一步检查,就会出现库存超卖。正确做法是依赖数据库的原子更新,把库存判断直接写进 UPDATE 语句:

START TRANSACTION; UPDATE book SET available_stock = available_stock - 1 WHERE book_id = 1001 AND available_stock > 0; -- 受影响行数为0表示无库存,应直接ROLLBACK INSERT INTO borrow_record ( borrow_no, reader_id, book_id, borrow_date, due_date, status, operator_id ) VALUES ( 'B20250701001', 2001, 1001, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 30 DAY), 'BORROWED', 3001 ); COMMIT;

这段 SQL 的关键在于available_stock > 0条件直接参与更新语句,InnoDB 的行锁会保证同一本书的并发扣减只有一个事务成功。Java 里用int rows = jdbcTemplate.update(sql, ...),rows 为 0 就抛异常回滚事务,不能继续往下执行。归还流程则相反,先更新借阅记录的状态为 RETURNED、写入 return_date,再给 book 表的 available_stock 加 1,两步同样放进一个事务。续借需要先确认记录没有逾期、renew_count 未超过上限,然后一次性更新 due_date 和 renew_count,避免先查后改造成并发读到旧值。

3.3 逾期统计与数据盘点 SQL

统计查询模块有一组固定报表,可以直接用 SQL 验证系统行为是否正确。逾期未还清单和分类统计是两个最常用的查询:

-- 逾期未还:状态为BORROWED且due_date小于当天 SELECT r.reader_no, r.name, b.title, br.due_date, DATEDIFF(CURDATE(), br.due_date) AS overdue_days FROM borrow_record br JOIN reader r ON br.reader_id = r.reader_id JOIN book b ON br.book_id = b.book_id WHERE br.status = 'BORROWED' AND br.due_date < CURDATE() ORDER BY overdue_days DESC; -- 分类统计:按类别汇总馆藏数与可借数 SELECT category, COUNT(*) AS total_title, SUM(total_stock) AS total_copies, SUM(available_stock) AS available_copies FROM book GROUP BY category;

逾期判断的边界要注意:due_date < CURDATE()把到期日当天的记录排除在外,当天到期不算逾期,这符合大多数图书馆规则;如果需要计算滞纳金,DATEDIFF的返回值就是计费天数。数据盘点做的是每本书的账面库存与实际盘点数对比,核心是导出一份book_id, title, total_stock, available_stock, COUNT(borrow_record WHERE status='BORROWED')的对账清单,发现available_stock != total_stock - 在借数的数据就是异常。这类 SQL 应该写进测试用例的验证步骤里,而不是只在开发环境手工跑一遍。

4. 图书管理系统测试方案的用例设计与接口回归

4.1 测试范围、通过标准与挂起标准

文档里的测试方案把范围限定在登录、基本操作、系统设置、统计查询、帮助五个模块,明确不测数据库安装、不做压力测试,多用户只保证 5 个并发用户。这几条“不准备测试的特征”其实比测试项更重要,它划清了测试边界,避免环境搭建耗时失控。通过/失败标准写得很干脆:所有用例全部通过、不允许存在未修复的灾难级缺陷。挂起标准是“超过 50% 用例受阻就挂起测试,直到阻塞性问题修复”。这些标准可以直接复制到真实项目的测试计划里,比只写“保证质量”四个字有用得多。

4.2 登录与权限测试用例设计

登录用例不能只测“正确账号能进、错误密码进不去”,要覆盖账号锁定策略和权限越权。下面是一组可直接执行的用例设计:

用例ID需求编号前置条件操作步骤输入数据预期结果
LOGIN-0013.1.2admin 已创建输入账号密码点击登录admin / 123456跳转主页,无报错
LOGIN-0023.1.2输入未登记账号ghost / 123456提示“用户名或密码错误”
LOGIN-0033.1.2连续输错 4 次第 5 次输入正确密码admin / 123456提示“账号已锁定 30 分钟”
LOGIN-0043.1.12图书管理员登录直接请求系统设置 URLGET /admin/users返回 403,菜单不可见

LOGIN-004 是权限测试里最容易出问题的场景:很多系统只隐藏了菜单,接口层没有拦截。测试同学在浏览器开发者工具里直接敲 URL 就能发现越权漏洞。垂直越权测试是在普通管理员会话里访问系统管理员的接口,水平越权测试是用 A 读者的 token 查 B 读者的借阅记录,这两类用例都应该写进每个版本的回归集合。

4.3 图书借还全流程测试用例

借阅用例要按状态机写:图书有在架、借出、下架三种状态,借阅记录有 BORROWED、OVERDUE、RETURNED、RENEWED 四种状态。借书成功、库存不足、重复归还、归还后库存回补、续借次数超限,五条是必测路径。库存边界用例特别重要,因为并发场景最容易在这里出错:

用例ID前置条件操作步骤输入数据预期结果
BORROW-001图书库存 1 本,在架管理员为读者 A 借出book_id=1001, reader_id=2001借阅记录创建,available_stock=0
BORROW-002图书库存 0 本管理员再为读者 B 借出book_id=1001, reader_id=2002提示“该书暂无可借库存”,无新增借阅记录
BORROW-003同一读者已借 5 本发起第 6 次借阅reader_id=2001提示“超出最大借阅数”
RETURN-001记录状态为 BORROWED归还borrow_no=B20250701001状态变为 RETURNED,available_stock 加 1

手工执行时要把实际结果、缺陷现象、截图附到表格后面,不能只写“通过”两个字。如果发现 BORROW-002 在现有实现下返回了成功,说明库存判断的 SQL 条件写错了,大概率是 UPDATE 语句没带available_stock > 0

4.4 用 pytest 把用例变成可执行回归

文档里给的工作量预估是一个测试循环 139 人时,手工用例跑完一轮要一两天。如果系统有 HTTP 接口,建议把核心流程写成接口自动化脚本,至少覆盖登录、借阅、归还、逾期统计四类场景。下面是一组可运行的 pytest 用例:

# tests/test_bms_api.py import pytest import requests BASE_URL = "http://127.0.0.1:8080/bms" @pytest.fixture() def admin_session(): """管理员登录并保持会话""" session = requests.Session() resp = session.post( f"{BASE_URL}/api/login", json={"username": "admin", "password": "123456"}, ) assert resp.status_code == 200 return session def test_borrow_when_stock_zero(admin_session): """ 库存为0时借阅必须失败: 先查询库存,若available_stock=0则POST /api/borrow 返回400,且borrow_record不新增记录 """ book_id = 1001 resp = admin_session.post( f"{BASE_URL}/api/borrow", json={"book_id": book_id, "reader_id": 2002}, ) assert resp.status_code == 400 assert "暂无可借库存" in resp.json()["message"]

这段脚本把 BORROW-002 的预期结果转成了断言:断言状态码是 400 而不是 200,再断言错误信息包含“暂无可借库存”。跑回归时执行python -m pytest tests/test_bms_api.py -v,结果里每一行测试名和断言结果一目了然。fixture 只做登录,不在里面造数据,否则测试之间互相污染,先跑的用例把库存状态改掉,后面的用例就全红了。

5. 自动化回归、缺陷量化与测试报告的复用技巧

5.1 用需求追踪矩阵代替冗余报告

写测试总结时如果只放用例总数和通过率,信息量是不够的。把需求编号、用例 ID、缺陷 ID 三列对齐,就得到一张需求追踪矩阵:

需求编号模块用例数通过数缺陷数遗留问题
3.1.4图书管理32302批量导入中文编码问题
3.1.7借阅18171并发借阅偶发超卖
3.1.18借出记录990

这张矩阵能直接告诉答辩老师或项目经理:每个需求都有用例覆盖,缺陷集中在哪个模块,最后一个版本修复了什么。比起大段文字描述,表格才是可复用的资产,下次改版只需要更新对应行的用例数和缺陷数。

5.2 缺陷严重级别与退出标准

文档里提到“测试结束时不能有未修复的灾难级错误”,落地时可以给缺陷分四级:灾难级表示系统崩溃或数据丢失,严重级表示主功能不可用,一般级表示功能可用但结果错误,建议级表示 UI 或文案问题。退出标准建议设为:灾难级和严重缺陷全部关闭,一般缺陷修复率达到 95% 以上,遗留缺陷必须有明确的修复版本。这样不会为了凑通过率把明显缺陷留到上线。

5.3 把工作量预估变成测试计划的一部分

原文表 1.2 给出一个循环 139 人时的估算,实际执行时可以按模块拆分,并写进测试计划:

任务耗时(人时)备注
产品安装测试35只测 Windows 2000/XP + Windows 服务器组合
特征测试与缺陷报告16优先覆盖图书借还与权限
缺陷修正验证24每个修复版本重跑关联用例
备份恢复测试24备份到本地和网络路径
GUI 测试16功能键导航手工执行
状态报告与缺陷复查24每天下班前更新缺陷清单

最后补一个很实用的技巧:自动化脚本断言时不要只断言状态码,要断言关键业务字段。比如归还接口返回 200 但 available_stock 没有加 1,测试照样会放行线上事故。借阅场景的最终断言应该查一次数据库:SELECT available_stock FROM book WHERE book_id=1001,确认返回值比借出前少 1,再断言 borrow_record.status 为 BORROWED,两层断言都通过才算真正通过。这样交付出去的测试报告,才不是只给答辩老师看的一堆表格,而是一套可以持续运行的验收基线。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询