个性化实验设计生成器 - Java Web开发课程应用案例

← 返回案例总览

🔬 个性化实验设计生成器

基于 AI 的差异化教学与防抄袭解决方案

📚 课程:Java Web 开发 | 👨‍🏫 樊光瑞

⚠️ 传统实验教学的痛点

🚨 最大问题:学生抄袭现象严重

在传统的 Java Web 实验教学中,由于所有学生做相同的实验题目,抄袭现象难以避免且难以发现。

  • 直接复制粘贴:学生之间互相复制代码,甚至连变量名、注释都一模一样
  • 网上搜索答案:实验题目固定,网上很容易找到现成的解答
  • GitHub 公开项目:往届学生的代码公开在 GitHub,本届学生直接 Fork
  • 难以检测:传统的代码查重工具容易被绕过(改变量名、调整顺序等)
  • 学习效果差:抄袭的学生没有真正理解知识点,考试时露馅

📉 其他痛点

  • 一刀切的难度:同一个实验题目,基础好的学生觉得太简单,基础差的学生觉得太难
  • 缺乏个性化:无法根据学生的学习进度和能力调整实验内容
  • 反馈不及时:教师手工批改实验报告,往往要等一周以上才能得到反馈
  • 题目更新难:教师每学期要设计新题目防止抄袭,工作量大
📊
数据触目惊心:在引入 AI 个性化实验之前,通过代码相似度检测,发现约 45% 的学生提交的实验代码存在高度相似(相似度 > 80%),其中约 23% 的代码几乎完全一致。

💡 AI 个性化实验设计方案

🎯 核心思路

  • 一人一题:使用 AI 为每个学生生成不同的实验题目,考察相同知识点但场景不同
  • 难度分层:根据学生的历史成绩和学习能力,自动调整实验难度
  • 自动生成手册:AI 自动生成详细的实验指导手册,包括需求说明、测试用例、评分标准
  • 动态题库:题目无限生成,每学期、每个班级都不重复
  • 从源头杜绝抄袭:每个学生的题目不同,抄袭失去意义

🛠️ 技术实现

1

学生能力评估

根据学生的历史作业成绩、测验分数、知识点掌握情况,使用简单的分类算法将学生分为三个层次。

Python 数据分析
2

知识点映射

明确本次实验要考察的知识点(如 Servlet、Session、MVC 等),确保不同题目覆盖相同的知识点。

课程大纲
3

AI 生成题目

使用 GPT-4/Claude 根据学生层次和知识点要求,生成个性化的实验题目和业务场景。

GPT-4 Claude
4

生成实验手册

AI 自动生成包含需求说明、功能列表、测试用例、评分标准的完整实验手册(PDF/Markdown)。

Markdown PDF
5

分发与追踪

通过教学平台将个性化实验分发给学生,记录每个学生的题目和完成情况。

数据库
6

自动评估

结合测试用例和 AI 代码审查,自动评估学生提交的代码,生成反馈报告。

JUnit Cursor AI

📊 基于能力的分层实验设计

根据学生的编程基础和学习能力,将实验分为三个难度层次。相同的知识点,不同的业务场景和实现难度。

🟢 基础层

适合编程基础较弱的学生

特点:业务逻辑简单,提供更多代码框架和提示

  • 功能需求清晰、单一
  • 提供部分代码框架
  • 详细的分步指导
  • 测试用例较少,覆盖核心功能

目标:确保学生能够完成实验,掌握基本知识点

🔵 进阶层

适合编程基础中等的学生

特点:业务逻辑适中,需要学生自主设计

  • 功能需求明确但有多个模块
  • 仅提供接口定义,不提供实现
  • 需要考虑边界条件和异常处理
  • 测试用例覆盖主要功能和边界情况

目标:培养独立分析和设计能力

🟠 挑战层

适合编程基础较强的学生

特点:业务逻辑复杂,需要优化和创新

  • 功能需求多样,有性能要求
  • 需要自主设计架构和数据库
  • 考察代码优化和最佳实践
  • 测试用例包含性能测试和压力测试

目标:挑战高水平学生,培养工程思维

💡
重要说明:虽然难度不同,但所有层次的实验都考察相同的核心知识点(如 Servlet、Session、JDBC 等),确保教学目标一致,评分公平。差异主要体现在业务复杂度、代码量、优化要求等方面。

📖 AI 自动生成实验手册

使用 GPT-4/Claude,为每个学生自动生成一份完整的实验指导手册,包括项目背景、功能需求、技术要求、测试用例、评分标准等。

📋 实验手册标准结构

📌

1. 项目背景

描述一个真实的业务场景,让学生理解为什么要做这个系统

📌

2. 功能需求

列出系统必须实现的功能模块,分为必做和选做

📌

3. 技术要求

明确必须使用的技术栈和知识点

📌

4. 数据库设计

提供数据表结构参考(基础层提供完整 SQL,进阶层只提示字段)

📌

5. 测试用例

提供自动化测试代码,学生可以自测

📌

6. 评分标准

明确告知如何评分,让学生知道哪些是重点

🤖 AI 生成提示词模板

生成个性化实验题目的提示词 GPT-4 / Claude Prompt
你是一位经验丰富的 Java Web 开发课程教师。请为学生生成一个个性化的实验项目。

【基本信息】
- 学生 ID: 
- 学生层次:   (基础层 / 进阶层 / 挑战层)
- 本次实验序号: 第  次实验

【知识点要求】(必须考察以下所有知识点)
1. Servlet 的使用(doGet/doPost 方法)
2. HTTP 请求与响应处理
3. Session 和 Cookie 管理
4. JDBC 数据库操作(PreparedStatement)
5. MVC 模式应用
6. 异常处理与日志记录

【难度要求】
- 基础层:业务简单,3-4个功能模块,提供代码框架
- 进阶层:业务适中,5-6个功能模块,需自主设计
- 挑战层:业务复杂,7-8个功能模块,需考虑性能优化

【生成要求】
1. 选择一个真实的业务场景(如:在线选课、图书借阅、宿舍报修、失物招领等)
2. 确保与其他学生的题目不同(避免使用常见的电商、博客系统)
3. 业务场景要贴近学生生活,有代入感
4. 生成完整的实验手册,包含:
   - 项目背景(200字左右)
   - 功能需求列表(必做 + 选做)
   - 技术要求说明
   - 数据库表结构设计
   - 参考界面原型(文字描述)
   - 评分标准(100分制)

请以 Markdown 格式输出完整的实验手册。
实际应用:将上述提示词中的 替换为实际值,输入到 GPT-4 或 Claude,即可获得一份完整的个性化实验手册。

🎯 具体案例:三个层次的实验对比

以下展示针对同一知识点(Servlet + Session + JDBC),为三个不同层次的学生生成的实验题目。可以看到,考察的知识点完全相同,但业务场景和难度各异

🟢 基础层案例:简易图书借阅系统

📖 项目背景

学校图书馆需要一个简单的图书借阅管理系统。学生可以浏览图书列表、查看图书详情、借阅和归还图书。管理员可以添加新图书。

✅ 功能需求(必做)

  • 用户登录功能(学生账号)
  • 图书列表展示(分页显示,每页 10 本)
  • 图书详情查看
  • 图书借阅功能(检查是否已借阅)
  • 我的借阅记录

🔧 技术要求

  • 使用 Servlet 处理请求
  • 使用 Session 存储登录状态
  • 使用 JDBC 操作数据库(提供数据库连接工具类)
  • 使用 JSP 展示页面

🗄️ 数据库设计(已提供)

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE,
    password VARCHAR(50)
);

CREATE TABLE books (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100),
    author VARCHAR(50),
    available INT DEFAULT 1
);

CREATE TABLE borrow_records (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    book_id INT,
    borrow_date DATETIME,
    return_date DATETIME
);

📝 评分标准(100分)

  • 功能完整性(40分)- 所有必做功能正常运行
  • 知识点应用(30分)- 正确使用 Servlet、Session、JDBC
  • 代码规范(20分)- 命名规范、注释完整
  • 界面美观(10分)- 基本的 CSS 美化
🔵 进阶层案例:在线选课系统

📖 项目背景

开发一个在线选课系统,学生可以浏览课程、选课、退课,查看已选课程和课程表。系统需要处理选课冲突(时间冲突、人数限制)。

✅ 功能需求

必做功能:

  • 用户登录/注册(学生、教师两种角色)
  • 课程浏览(支持按院系、时间筛选)
  • 在线选课(检查时间冲突、人数上限)
  • 退课功能(检查退课时间限制)
  • 我的课程表(按周显示)
  • 教师发布课程(仅教师可用)

选做功能(加分):

  • 课程评价系统
  • 选课人数实时更新(AJAX)
  • 导出课程表为 PDF

🔧 技术要求

  • 使用 Servlet 实现 MVC 模式(Controller-Service-DAO 三层)
  • 使用 Session 管理用户登录状态和购物车
  • 使用 PreparedStatement 防止 SQL 注入
  • 使用 Filter 实现登录验证和字符编码
  • 使用数据库连接池(推荐 HikariCP)
  • 密码使用 MD5 或 SHA-256 加密存储

🗄️ 数据库设计(需自行设计)

提示:至少需要以下数据表

  • 用户表(users)- 存储学生和教师信息
  • 课程表(courses)- 存储课程基本信息
  • 选课记录表(course_selection)- 存储选课关系
  • 时间表(course_schedule)- 存储课程时间安排

📝 评分标准(100分)

  • 功能完整性(35分)- 所有必做功能正常运行
  • 业务逻辑(25分)- 正确处理选课冲突、权限控制
  • 知识点应用(20分)- MVC 模式、Filter、连接池等
  • 代码质量(15分)- 代码规范、异常处理、注释
  • 界面设计(5分)- 用户体验良好
  • 选做功能(最多+10分)
🟠 挑战层案例:智能实验室预约平台

📖 项目背景

学院有多个实验室,学生和教师可以在线预约实验室使用时间。系统需要智能处理预约冲突、自动提醒、使用记录统计分析等复杂功能。

✅ 功能需求

核心功能:

  • 用户系统(学生、教师、管理员三种角色,权限不同)
  • 实验室管理(增删改查、设备信息、容量管理)
  • 在线预约(可视化时间选择、冲突检测、审批流程)
  • 预约审核(教师审核学生预约)
  • 签到签退(二维码扫码或手动)
  • 使用统计(按实验室、按时间段、按用户统计)
  • 邮件/短信提醒(预约前1小时提醒)
  • 评价系统(使用后评价实验室设备)

🔧 技术要求

  • 完整的 MVC 三层架构,使用设计模式(工厂、单例等)
  • 使用 Listener 实现在线人数统计
  • 使用 AJAX 实现部分页面无刷新交互
  • 使用数据库连接池和事务管理
  • 使用日志框架(Log4j 或 SLF4J)
  • 敏感信息加密存储,防止 SQL 注入和 XSS 攻击
  • 性能优化:缓存常用数据、索引优化

🗄️ 数据库设计(需自行设计)

要求:设计完整的数据库 E-R 图,至少包含 6-8 张表,合理设计外键关系,建立必要的索引。

⚡ 性能要求

  • 支持至少 100 个并发用户
  • 页面响应时间 < 2 秒
  • 数据库查询优化(使用索引、避免 N+1 查询)

📝 评分标准(100分 + 20分加分项)

  • 功能完整性(30分)- 所有核心功能完整实现
  • 架构设计(25分)- MVC 分层清晰、设计模式应用
  • 业务逻辑(20分)- 正确处理复杂业务(冲突、权限、审批)
  • 代码质量(15分)- 规范、可维护性、异常处理
  • 安全性(5分)- SQL 注入防护、XSS 防护、加密
  • 性能优化(5分)- 缓存、索引、并发处理
  • 加分项:创新功能、优秀的用户体验(+20分)

📊 三个层次的对比总结

❌ 传统方式:所有学生相同题目

  • 题目:学生管理系统(每年都一样)
  • 网上答案泛滥
  • 学生互相抄袭
  • 代码高度相似
  • 真实学习效果差

✅ AI 个性化:每个学生不同题目

  • 学生A:图书借阅系统
  • 学生B:在线选课系统
  • 学生C:实验室预约系统
  • 知识点相同,场景各异
  • 抄袭无从下手

📄 完整实验手册生成示例

以下展示使用 AI 为一位进阶层学生生成的完整实验手册(部分内容)。

实验手册示例 - 校园失物招领系统.md AI Generated
# Java Web 实验三:校园失物招领系统

## 一、项目背景

校园内经常有学生丢失物品(如校园卡、钥匙、书籍等)或捡到失物。
目前主要通过班级群、朋友圈等方式发布寻物/招领信息,效率低下。
本项目旨在开发一个校园失物招领平台,方便学生发布失物信息和招领信息,
提高失物找回的成功率。

## 二、功能需求

### 必做功能(90分)

#### 2.1 用户模块
- 用户注册(学号、姓名、手机、密码)
- 用户登录(验证学号和密码)
- 个人信息修改
- 退出登录

#### 2.2 失物发布模块
- 发布失物信息(物品名称、丢失地点、丢失时间、描述、联系方式)
- 上传物品图片(可选)
- 查看自己发布的失物信息
- 修改/删除自己的失物信息
- 标记失物已找回

#### 2.3 招领发布模块
- 发布招领信息(物品名称、捡到地点、捡到时间、描述)
- 查看自己发布的招领信息
- 标记物品已归还

#### 2.4 信息浏览模块
- 浏览所有失物信息(分页显示)
- 浏览所有招领信息(分页显示)
- 按关键词搜索(物品名称、地点)
- 按时间排序

#### 2.5 匹配提示模块
- 当有新的招领信息时,自动匹配相似的失物信息
- 给失物发布者发送提示(页面通知即可)

### 选做功能(加分项,最多+10分)
- 评论功能(在失物/招领下留言)
- 管理员审核(防止虚假信息)
- 数据统计(月度找回率、热门丢失地点等)

## 三、技术要求

### 3.1 必须使用的技术
- Servlet:处理所有 HTTP 请求
- JSP:作为视图层展示页面
- JDBC:数据库操作(必须使用 PreparedStatement)
- Session:保持用户登录状态
- Filter:登录验证、字符编码过滤
- MVC 模式:清晰的三层架构

### 3.2 推荐使用
- 数据库连接池(HikariCP / DBCP)
- 密码加密(MD5 / SHA-256)
- 日志框架(Log4j)
- 前端框架(Bootstrap 美化界面)

## 四、数据库设计

请自行设计数据库表结构,参考以下要点:

### 4.1 用户表(users)
字段建议:id, student_id(学号), name, phone, password(加密存储), 
          created_at, updated_at

### 4.2 失物表(lost_items)
字段建议:id, user_id, item_name, lost_place, lost_time, description, 
          contact, image_url, status(未找回/已找回), created_at

### 4.3 招领表(found_items)
字段建议:id, user_id, item_name, found_place, found_time, description, 
          status(未归还/已归还), created_at

## 五、测试用例

系统将使用以下测试用例验证你的代码:

1. 用户注册测试:正常注册、重复学号注册
2. 用户登录测试:正确密码、错误密码、SQL 注入尝试
3. 失物发布测试:正常发布、字段验证
4. 搜索功能测试:关键词搜索、分页测试
5. Session 测试:未登录访问受限页面应跳转登录
6. 权限测试:只能修改/删除自己发布的信息

## 六、评分标准(100分)

| 评分项 | 分值 | 说明 |
|--------|------|------|
| 功能完整性 | 35分 | 所有必做功能正常运行 |
| 业务逻辑正确性 | 25分 | 匹配算法、权限控制、数据验证 |
| 知识点应用 | 20分 | MVC、Filter、PreparedStatement 等 |
| 代码质量 | 15分 | 命名规范、异常处理、代码复用 |
| 界面友好性 | 5分 | 布局合理、操作便捷 |
| 选做功能 | +10分 | 额外加分项 |

## 七、提交要求

1. 提交完整的源代码(包含 SQL 建表脚本)
2. 提交实验报告(包含功能截图、数据库设计说明、难点分析)
3. 代码能够在 Tomcat 9+ 上正常运行
4. 提供测试账号和数据

## 八、参考资料

- 教材第 5-8 章:Servlet、JSP、Session
- 课件:MVC 模式设计
- 示例项目:图书管理系统(仅供参考架构,不可直接使用)

---
注意:本实验为个性化题目,请独立完成。如发现抄袭,本次实验记 0 分。
---
💡
手册特点:
  • 结构完整,学生一看就懂
  • 明确告知技术要求和知识点
  • 提供评分标准,学生有目标
  • 难度适中,有挑战但不过分
  • 可以直接导出为 PDF 发给学生

🚀 实际操作:如何为一个班级生成个性化实验

📝 Step 1: 准备学生信息

students.csv - 学生名单与能力层次 CSV
student_id,name,level,previous_score
2021001,张三,基础层,68
2021002,李四,进阶层,82
2021003,王五,挑战层,95
2021004,赵六,基础层,71
...

📝 Step 2: 使用 Python 脚本批量生成

generate_experiments.py Python
import csv
import openai  # 或使用 anthropic for Claude
import os

# 配置 API Key
openai.api_key = os.getenv("OPENAI_API_KEY")

# 业务场景池(防止重复)
scenarios = [
    "图书借阅系统", "在线选课系统", "失物招领系统",
    "宿舍报修系统", "实验室预约系统", "社团活动管理",
    "兼职信息平台", "二手交易平台", "教室借用系统",
    "志愿者管理系统", "校园跑腿服务", "问卷调查系统"
]

def generate_experiment(student_id, name, level, scenario):
    """使用 GPT-4 生成个性化实验手册"""
    
    prompt = f"""你是一位经验丰富的 Java Web 开发课程教师。
请为学生生成一个个性化的实验项目。

【基本信息】
- 学生 ID: {student_id}
- 学生姓名: {name}
- 学生层次: {level}
- 业务场景: {scenario}
- 实验编号: 第3次实验

【知识点要求】(必须全部考察)
1. Servlet 的使用
2. Session 和 Cookie 管理
3. JDBC 数据库操作(PreparedStatement)
4. MVC 模式
5. Filter 应用
6. 异常处理

【难度要求】
- 基础层:3-4个功能模块,提供数据库建表 SQL 和部分代码框架
- 进阶层:5-6个功能模块,仅提供数据库表结构提示
- 挑战层:7-8个功能模块,需自行设计数据库和架构

请生成完整的实验手册(Markdown格式),包含:
1. 项目背景(200字)
2. 功能需求(必做+选做)
3. 技术要求
4. 数据库设计指导
5. 测试用例说明
6. 评分标准
7. 提交要求
"""

    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.8  # 提高多样性
    )
    
    return response.choices[0].message.content

# 读取学生名单
with open('students.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    used_scenarios = set()
    
    for i, student in enumerate(reader):
        # 选择一个未使用的场景
        scenario = scenarios[i % len(scenarios)]
        
        # 生成实验手册
        manual = generate_experiment(
            student['student_id'],
            student['name'],
            student['level'],
            scenario
        )
        
        # 保存为 Markdown 文件
        filename = f"实验手册_{student['student_id']}_{student['name']}.md"
        with open(filename, 'w', encoding='utf-8') as out:
            out.write(manual)
        
        print(f"✓ 已生成: {student['name']} - {scenario}")

print("\\n🎉 所有实验手册生成完成!")

📝 Step 3: 转换为 PDF(可选)

convert_to_pdf.sh Bash
#!/bin/bash
# 使用 pandoc 将 Markdown 转换为 PDF

for file in 实验手册_*.md; do
    output="${file%.md}.pdf"
    pandoc "$file" -o "$output" \
           --pdf-engine=xelatex \
           -V mainfont="SimSun" \
           -V fontsize=12pt
    echo "✓ 已转换: $output"
done

echo "\\n🎉 所有 PDF 生成完成!"
⏱️
时间成本:使用 AI 为一个 40 人的班级生成个性化实验手册,大约需要 15-20 分钟(主要是 API 调用时间)。而传统方式人工设计 40 个不同题目,至少需要 几天时间,且质量难以保证。

🎯 质量控制与优化

✅ 如何确保 AI 生成的题目质量?

人工抽查

教师抽查 10-20% 的生成结果,确保题目合理、难度适当、知识点覆盖完整

模板约束

使用严格的提示词模板,规定必须包含的内容和格式,减少生成质量波动

多次生成

对于质量不理想的结果,重新生成或微调提示词,直到满意为止

学生反馈

收集学生对题目的反馈,不断优化生成策略

🔄 迭代优化

📈
经验总结:
  • 第一次使用时,建议提前 1-2 周生成,留出调整时间
  • 保存所有生成的题目,建立题库,后续可以复用和微调
  • 每学期更换业务场景池,确保往届学生无法提供答案
  • 对于挑战层学生,可以让他们提出想做的项目,AI 辅助完善需求