个性化实验设计生成器 - Java Web开发课程应用案例
🔬 个性化实验设计生成器
基于 AI 的差异化教学与防抄袭解决方案
📚 课程:Java Web 开发 | 👨🏫 樊光瑞
传统实验教学的痛点
🚨 最大问题:学生抄袭现象严重
在传统的 Java Web 实验教学中,由于所有学生做相同的实验题目,抄袭现象难以避免且难以发现。
- 直接复制粘贴:学生之间互相复制代码,甚至连变量名、注释都一模一样
- 网上搜索答案:实验题目固定,网上很容易找到现成的解答
- GitHub 公开项目:往届学生的代码公开在 GitHub,本届学生直接 Fork
- 难以检测:传统的代码查重工具容易被绕过(改变量名、调整顺序等)
- 学习效果差:抄袭的学生没有真正理解知识点,考试时露馅
📉 其他痛点
- 一刀切的难度:同一个实验题目,基础好的学生觉得太简单,基础差的学生觉得太难
- 缺乏个性化:无法根据学生的学习进度和能力调整实验内容
- 反馈不及时:教师手工批改实验报告,往往要等一周以上才能得到反馈
- 题目更新难:教师每学期要设计新题目防止抄袭,工作量大
AI 个性化实验设计方案
🎯 核心思路
- 一人一题:使用 AI 为每个学生生成不同的实验题目,考察相同知识点但场景不同
- 难度分层:根据学生的历史成绩和学习能力,自动调整实验难度
- 自动生成手册:AI 自动生成详细的实验指导手册,包括需求说明、测试用例、评分标准
- 动态题库:题目无限生成,每学期、每个班级都不重复
- 从源头杜绝抄袭:每个学生的题目不同,抄袭失去意义
🛠️ 技术实现
学生能力评估
根据学生的历史作业成绩、测验分数、知识点掌握情况,使用简单的分类算法将学生分为三个层次。
Python 数据分析知识点映射
明确本次实验要考察的知识点(如 Servlet、Session、MVC 等),确保不同题目覆盖相同的知识点。
课程大纲AI 生成题目
使用 GPT-4/Claude 根据学生层次和知识点要求,生成个性化的实验题目和业务场景。
GPT-4 Claude生成实验手册
AI 自动生成包含需求说明、功能列表、测试用例、评分标准的完整实验手册(PDF/Markdown)。
Markdown PDF分发与追踪
通过教学平台将个性化实验分发给学生,记录每个学生的题目和完成情况。
数据库自动评估
结合测试用例和 AI 代码审查,自动评估学生提交的代码,生成反馈报告。
JUnit Cursor AI基于能力的分层实验设计
根据学生的编程基础和学习能力,将实验分为三个难度层次。相同的知识点,不同的业务场景和实现难度。
适合编程基础较弱的学生
特点:业务逻辑简单,提供更多代码框架和提示
- 功能需求清晰、单一
- 提供部分代码框架
- 详细的分步指导
- 测试用例较少,覆盖核心功能
目标:确保学生能够完成实验,掌握基本知识点
适合编程基础中等的学生
特点:业务逻辑适中,需要学生自主设计
- 功能需求明确但有多个模块
- 仅提供接口定义,不提供实现
- 需要考虑边界条件和异常处理
- 测试用例覆盖主要功能和边界情况
目标:培养独立分析和设计能力
适合编程基础较强的学生
特点:业务逻辑复杂,需要优化和创新
- 功能需求多样,有性能要求
- 需要自主设计架构和数据库
- 考察代码优化和最佳实践
- 测试用例包含性能测试和压力测试
目标:挑战高水平学生,培养工程思维
AI 自动生成实验手册
使用 GPT-4/Claude,为每个学生自动生成一份完整的实验指导手册,包括项目背景、功能需求、技术要求、测试用例、评分标准等。
📋 实验手册标准结构
1. 项目背景
描述一个真实的业务场景,让学生理解为什么要做这个系统
2. 功能需求
列出系统必须实现的功能模块,分为必做和选做
3. 技术要求
明确必须使用的技术栈和知识点
4. 数据库设计
提供数据表结构参考(基础层提供完整 SQL,进阶层只提示字段)
5. 测试用例
提供自动化测试代码,学生可以自测
6. 评分标准
明确告知如何评分,让学生知道哪些是重点
🤖 AI 生成提示词模板
你是一位经验丰富的 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 为一位进阶层学生生成的完整实验手册(部分内容)。
# 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: 准备学生信息
student_id,name,level,previous_score 2021001,张三,基础层,68 2021002,李四,进阶层,82 2021003,王五,挑战层,95 2021004,赵六,基础层,71 ...
📝 Step 2: 使用 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(可选)
#!/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 生成的题目质量?
人工抽查
教师抽查 10-20% 的生成结果,确保题目合理、难度适当、知识点覆盖完整
模板约束
使用严格的提示词模板,规定必须包含的内容和格式,减少生成质量波动
多次生成
对于质量不理想的结果,重新生成或微调提示词,直到满意为止
学生反馈
收集学生对题目的反馈,不断优化生成策略
🔄 迭代优化
- 第一次使用时,建议提前 1-2 周生成,留出调整时间
- 保存所有生成的题目,建立题库,后续可以复用和微调
- 每学期更换业务场景池,确保往届学生无法提供答案
- 对于挑战层学生,可以让他们提出想做的项目,AI 辅助完善需求