# attend_project **Repository Path**: wzvtcsoftware_software/attend_project ## Basic Information - **Project Name**: attend_project - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 33 - **Created**: 2026-05-13 - **Last Updated**: 2026-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 考勤系统数据库验收工具(attendance-checker) > 课程:**数据库分析与设计** · 授课教师:**** > 这是配合课程的自动化数据库验收工具:你在 MySQL 中按教学进度搭建好 `attendance_db`,运行本项目的测试就能知道做对了没有。 --- ## 这是什么?为什么要做? **双重价值**: 1. **当作验收工具用**:跑一次测试,自动判定你的视图、存储过程、约束、索引等是否达标 2. **当作大作业范例看**:本项目本身就是一个标准的 Spring Boot + MyBatis 项目。Entity / Mapper / Test 三层结构清清楚楚——你之后做"学生选课系统"大作业时,照着这个项目结构来就行 --- ## 环境要求 | 工具 | 版本 | 备注 | |------|------|------| | JDK | **1.8** | 机房环境,更高版本(11/17)也能跑但不需要 | | Maven | 3.6+ | 机房已装 | | MySQL | 8.0+ | 你的 `attendance_db` 数据库必须正在运行 | --- ## 快速开始(4 步) ### 1. 克隆项目到本地 ```bash git clone <仓库地址> cd attendance-checker ``` ### 2. 修改数据库密码 打开 `src/main/resources/application.yml`,把 `password` 改成你本机 MySQL 的 root 密码: ```yaml spring: datasource: password: 你的密码 # ← 改这里 ``` ### 3. 确认 attendance_db 已经搭好 按教师下发的 SQL 脚本顺序执行: ```text 第7次课-建库脚本.sql ← 建库 + 5张表 + 32学生 + 208考勤 第8次课-批量造数据脚本.sql ← 补班级/教师/课程 + 500学生 + 5万考勤 + 3索引 第9次课-视图与存储过程示例.sql ← 3个视图 + 3个存储过程 ``` ### 4. 跑测试 ```bash # 第9次课的全部 17 个测试 mvn test -Dtest="com.example.attendance.class09.*" # 或单独跑某一组 mvn test -Dtest="com.example.attendance.class09.ViewExistenceTest" ``` ### 5. 看测试报告 * 绿色 **PASSED**:达标 * 红色 **FAILED**:未达标,根据测试名(`@DisplayName` 用中文写了)定位问题 --- ## 测试清单(第9次课 共 17 个) ### `class09/ViewExistenceTest`(视图存在性,4 个) | 编号 | 测试名 | |------|--------| | T-V1 | 视图 v_class_attendance 已创建 | | T-V2 | 视图 v_absence_warning 已创建 | | T-V3 | 视图 v_course_stats 已创建 | | T-V8 | v_class_attendance 类型是 VIEW(不是 BASE TABLE) | ### `class09/ViewFunctionTest`(视图功能,4 个) | 编号 | 测试名 | |------|--------| | T-V4 | v_class_attendance 返回班级名和出勤率(0~100) | | T-V5 | v_absence_warning 做了缺勤次数过滤(每行 ≥ 1) | | T-V6 | v_absence_warning 包含学生姓名列 | | T-V7 | v_course_stats 包含课程名和统计数值列 | ### `class09/ProcedureExistenceTest`(存储过程存在性,3 个) | 编号 | 测试名 | |------|--------| | T-P1 | 存储过程 sp_add_attendance 已创建 | | T-P2 | 存储过程 sp_class_report 已创建 | | T-P3 | sp_add_attendance 至少有 4 个 IN 参数 | ### `class09/ProcedureFunctionTest`(存储过程功能,6 个) | 编号 | 测试名 | |------|--------| | T-P4 | 合法参数调用 sp_add_attendance,attendance 表新增 1 行 | | T-P5 | 不存在的 student_id 被拦截 | | T-P6 | 不存在的 course_id 被拦截 | | T-P7 | sp_class_report 可正常执行 | | T-X1 | 数据库中视图总数 ≥ 3 | | T-X2 | 数据库中存储过程总数 ≥ 2 | --- ## 常见问题 **Q: `Communications link failure` / 连接不上数据库?** A: 检查 MySQL 是否启动 (`mysql -uroot -p` 能进吗?),`application.yml` 里的 password 是否正确。 **Q: 视图测试全部失败?** A: 你还没在 MySQL 中创建视图。执行教师下发的 `第9次课-视图与存储过程示例.sql`。 **Q: 找不到存储过程 sp_class_report?** A: 教师脚本里的存储过程名叫 **`sp_class_report`**(不是 `sp_batch_report`),参数是 `(class_id, start, end)` 不是 `(class_id, month)`。如果你建错了名字,DROP 掉重建。 **Q: "应包含 xxx 列" 测试失败?** A: 你创建视图时的列别名跟示例脚本不一致。回去对照 `第9次课-视图与存储过程示例.sql` 修改 `AS 别名` 部分。 **Q: T-P4 报 UNIQUE 约束冲突?** A: 你的 `attendance` 表已经有 UNIQUE(student_id, course_id, attend_date) 约束,且测试用的日期已被占用。这是好事,说明约束生效了,但测试代码用的是 "未来 1 年" 的日期,理论上不会冲突——除非你跑过很多次。可以清掉测试残留:`DELETE FROM attendance WHERE attend_date >= CURDATE() + INTERVAL 300 DAY;` --- ## 项目结构(看完再做大作业) ``` attendance-checker/ ├── pom.xml ← Maven 项目配置 ├── README.md ← 你正在看的这份 ├── docs/ ← 设计文档(教师维护) │ ├── src/main/java/com/example/attendance/ │ ├── AttendanceApplication.java ← Spring Boot 启动类 │ ├── entity/ ← 5 张表对应的 POJO │ │ ├── ClassInfo.java (class 表) │ │ ├── Teacher.java (teacher 表) │ │ ├── Student.java (student 表) │ │ ├── Course.java (course 表) │ │ └── Attendance.java (attendance 表) │ └── mapper/ ← 数据访问层(接口) │ ├── StudentMapper.java │ ├── AttendanceMapper.java │ ├── CourseMapper.java │ ├── ViewMapper.java ← 视图查询 │ ├── ProcedureMapper.java ← 存储过程调用 │ └── SchemaCheckMapper.java ← 元数据查询 │ ├── src/main/resources/ │ ├── application.yml ← 数据库连接(你改密码的地方) │ └── mapper/ ← Mapper XML(写 SQL 的地方) │ └── *.xml │ └── src/test/java/com/example/attendance/ └── class09/ ← 第9次课的测试 ├── ViewExistenceTest.java ├── ViewFunctionTest.java ├── ProcedureExistenceTest.java └── ProcedureFunctionTest.java ``` **做大作业时怎么用这个项目当模板?** 1. 复制整个项目结构,把"考勤系统"换成"选课系统" 2. `entity/` 里写你的实体:Student / Course / Section / Enrollment ... 3. `mapper/` 里写数据访问:选课、退课、查余量 ... 4. `test/` 里写测试:选课成功、人数超限被拒、并发选课不重复 ... --- ## 致谢 本项目是"数据库分析与设计"课程的配套教学工具。 课程的 13 次课走过了从 SELECT 复习 → ER 建模 → 范式 → DDL/约束 → 索引 → 视图/存储过程 → 触发器 的完整链条,本项目从第9次课开始陪你一起跑完后半程。