# enroll_project **Repository Path**: wzvtcsoftware_software/enroll_project ## Basic Information - **Project Name**: enroll_project - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 92 - **Created**: 2026-06-03 - **Last Updated**: 2026-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 选课系统期末考核—测试项目 > 数据库分析与设计 · 期末考核 · 配套测试工具 > 授课教师:刘笑锋 ## 这是什么 这是一个**自动化测试工具**,用来验证你写的 setup.sql 是否满足试题要求。 你完成 setup.sql 后跑 `mvn test`(或在 IDEA 里右键测试包 Run),看分数。 ## 怎么用 详见**试题任务书**第五节"自测流程"。 简单概括(Windows + IDEA + MySQL): 1. Fork 本项目到你自己的 Gitee 账号 2. 在 IDEA 里 Clone 你的 fork 3. 编辑 `src/main/resources/application.yml`,改 password 4. 完成项目根目录的 `setup.sql`(已给出骨架),在 MySQL 中执行装好数据库 5. 右键 `src/test/java/exam/basic` → Run Tests,看分数 ### 关于数据装载(重要) **你不需要自己导入任何 CSV。** 测试程序会读数据集目录里的 `students.csv` / `courses.csv`, 逐行调用你写的 `sp_add_student` / `sp_add_course` 把主数据灌进库——你只要让这两个过程 把传进来的字段存进你自己设计的表即可(怎么存、是否拆表规范化,随你)。 因此 `setup.sql` 只建结构,普通执行即可,**无需** `LOAD DATA` / `local_infile`: ```bash mysql -uroot -p < setup.sql ``` > ⚠️ **每次重跑测试前,先重新执行一遍 `setup.sql`。** > 测试会真实改库(选课、退课、关班等),其中「关班」是不可逆的。若不重装库就连着跑第二遍, > 上一轮被关掉的课仍是关闭状态,会出现 `CloseClassTest` 之类的**假失败**(例如分数从 60 变 57)。 > 重新 `mysql -uroot -p < setup.sql` 把库恢复干净即可——这是一次干净评测的标准前置(教师阅卷脚本也是每次先重装库再判分)。 数据用哪套,**只看 `application.yml` 里的 `exam.dataset.dir` 一处**: `data/warmup`(小、快,在家调试)/ `data/standard`(正式考核,6000 学生 / 400 课程)。 阅卷时教师会把它指向结构相同、数据不同的「暗集」——所以**别在表里硬编码学号长度、课程总数等**, 否则暗集上会大面积失败。 ## 项目结构 ``` enroll-exam/ ├── pom.xml ← Maven 配置 ├── README.md ← 你正在看的这份 ├── setup.sql ← ⭐ 你要编辑的文件 ├── data/ │ ├── warmup/ ← 热身数据集(在家调试用) │ ├── standard/ ← 正式数据集(学生看得到) │ └── hidden/ ← 暗集(教师阅卷用,学生看不到) ├── src/main/java/exam/Application.java ← 启动类 ├── src/main/resources/application.yml ← 数据库连接(改密码) └── src/test/java/exam/ ├── util/ │ ├── Score.java ← 评分注解 │ ├── ScoreListener.java ← 自动累加得分 │ ├── EnrollClient.java ← SP 调用封装 │ └── DataSet.java ← 数据集装载 └── basic/ ← 阶段一·基础题(在家做,60 分) (exam/advanced 进阶题在课堂阶段由教师发放,本仓库暂不包含) ``` ## 两阶段考核 - **第一阶段·在家(本仓库,60 分)**:完成 `setup.sql` 与 7 个契约对象,跑通 `exam/basic`。 右键 `src/test/java/exam/basic` → Run,看"得分 X / 60"。 - **第二阶段·课堂(40 分)**:考试当天教师发放 `exam/advanced` 进阶测试(并发/性能/关班补选), 现场限时完成,与基础题累加为总分 100。 ## 评分机制 每个测试方法标了 `@Score(n)` 注解。测试结束后屏幕输出"得分 X / Y",`target/score.csv` 写入每项详情。 在家阶段满分 60;加上课堂进阶题满分 100。 ## 任务书在哪 在家阶段任务书是 `docs/选课系统-试题任务书-在家阶段.docx`(或你的考试群里)。所有规则以任务书为准。 课堂阶段任务书考试当天发放。