更新K4课程README,清理旧的班级记忆文件,调整目录结构

This commit is contained in:
chengzi
2026-05-13 15:16:05 +08:00
parent 2e7878007c
commit fecb347740
538 changed files with 8105 additions and 57270 deletions

1814
.claude/config/hw_dict.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -15,17 +15,18 @@
| 第5课 | 分支嵌套结构 | 《四季之选》 | 分支嵌套结构 | - | - |
| 第6课 | 分支嵌套结构 | 《我的唱片机》 | 多分支选择结构 | - | - |
| 第7课 | 循环嵌套结构 | 《彩虹生成器》 | 循环嵌套结构 | - | - |
| 第8课 | 循环嵌套结构 | 《唐诗朗诵会》 | 循环嵌套结构 | - | - |
| 第9课 | 循环嵌套结构 | 《像素艺术画》 | 分支嵌套判断 | - | - |
| 第10课 | 函数 | 《猜猜我是谁》 | 初识函数、无参函数 | - | - |
| 第11课 | 函数 | 《花朵随心画》 | 有参函数 | - | - |
| 第12课 | 函数 | 《图形巧算》 | 巩固有参函数、无参函数 | - | - |
| 第13课 | 函数 | 《飞镖达人》 | 综合运用有参函数、无参函数 | - | - |
| 第14课 | 列表 | 《今天玩什么玩具》 | 列表运用、添加元素 | - | - |
| 第15课 | 列表 | 《百科知多少》 | 删除元素、列表长度 | - | - |
| 第16课 | 列表 | 《成语接龙》 | 插入、查找元素 | - | - |
| 第17课 | 列表 | 《升旗分组赛》 | 列表变量与嵌套分支综合运用 | - | - |
| 第18课 | 字符串操作 | 《解密藏头诗》 | 字符串的概念 | - | - |
| 第8课 | 循环嵌套结构 | 《阶段测试》 | 循环嵌套结构 | - | - |
| 第9课 | 循环嵌套结构 | 《唐诗朗诵会》 | 循环嵌套结构 | - | - |
| 第10课 | 循环嵌套结构 | 《像素艺术画》 | 分支嵌套判断 | - | - |
| 第11课 | 函数 | 《猜猜我是谁》 | 初识函数、无参函数 | - | - |
| 第12课 | 函数 | 《花朵随心画》 | 有参函数 | - | - |
| 第13课 | 函数 | 《图形巧算》 | 巩固有参函数、无参函数 | - | - |
| 第14课 | 函数 | 《飞镖达人》 | 综合运用有参函数、无参函数 | - | - |
| 第15课 | 列表 | 《今天玩什么玩具》 | 列表运用、添加元素 | - | - |
| 第16课 | 列表 | 《百科知多少》 | 删除元素、列表长度 | - | - |
| 第17课 | 列表 | 《成语接龙》 | 插入、查找元素 | - | - |
| 第18课 | 列表 | 《升旗分组赛》 | 列表变量与嵌套分支综合运用 | - | - |
| 第19课 | 字符串操作 | 《解密藏头诗》 | 字符串的概念 | - | - |
---

View File

@@ -1,11 +0,0 @@
# 出勤登记 - 2026春季学期
| 日期 | 课程 | 课次 | 状态 | 备注 |
|------|------|------|------|------|
| 2026-03-08 | AI是怎么想的 | 第1课 | ✅ 出勤 | |
| 2026-03-15 | AI的记忆之谜 | 第2课 | ✅ 出勤 | |
| 2026-03-22 | AI训练师 | 第3课 | ✅ 出勤 | |
| 2026-03-29 | 我是大作家-1 | 第4课 | ✅ 出勤 | |
| 2026-04-06 | 我是大作家-2 | 第5课 | ⏸ 请假 | |
| 2026-04-12 | 我是大作家(完结篇) | 第6课 | ✅ 出勤 | |
| 2026-04-19 | AI大作家插图生成 | 第7课 | ✅ 出勤 | |

View File

@@ -83,3 +83,15 @@
老师会继续关注梓宁的表现,期待看到你的完整小说故事!🌟💡
---
## 第7条个人网页生成
**授课日期**2026-05-09
**课评内容**
梓宁今天表现得很积极对《个人网页生成》的内容特别感兴趣认真把自己的内容填写进网页里完成度很高特别棒的是梓宁主动问老师怎么添加自己喜欢的音乐这种主动探索的精神让老师很惊喜还愿意邀请子林一起参加AIGC比赛很有分享精神呢
老师会继续关注梓宁的表现,期待集训时看到你把作品打磨得更精彩!🌟💡
---

View File

@@ -90,3 +90,17 @@
以你的阳光活力,要是能把这份热情一直保持到课堂结束,不被其他事情带跑,就一定会更厉害~老师会继续关注承泽的进步,期待看到更多创意!✨💡
---
## 第8条魔幻俄罗斯方块
**授课日期**2026-05-10
**课评内容**
承泽本节课积极配合课堂教学,响应及时,学习态度特别诚恳,很棒~遇到操作疑问会主动向老师请教,这种不懂就问的态度特别好!💪
对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,课堂上顺利完成了游戏需求配置、文档生成、任务重命名以及需求审核等全部流程,能够按照老师指导解决操作卡点,成功生成可运行的俄罗斯方块游戏,任务完成度很高,具备良好的学习执行力,特别棒!✨
建议后续多尝试独立思考排查问题,进一步提升自主解决问题的能力~老师会继续关注承泽的进步,期待看到更多创意!✨💡
---

View File

@@ -117,3 +117,17 @@
老师会继续关注子墨的表现,期待看到更多精彩!🌟💡
---
## 第10条魔幻俄罗斯方块
**授课日期**2026-05-10
**课评内容**
子墨本节课课堂活跃度很高动手与探索能力非常突出特别棒快速完成游戏制作后积极体验试玩还主动发现了穿墙、旋转异常、无敌状态等多个程序bug这种善于观察和发现问题的能力超级厉害💡
对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,掌握得还不错~乐于和老师、同学分享自己的游戏成果与操作技巧,学习热情很高,这种愿意分享的精神很棒!🌸
要是能一直保持刚才发现和解决问题时的那种专注,不被周围的事情分散注意力,就更好啦~老师会继续关注子墨的表现,期待看到更多精彩!🌟💡
---

View File

@@ -117,3 +117,17 @@
老师会继续关注俊研的进步,期待看到更多精彩!🌸😊
---
## 第10条魔幻俄罗斯方块
**授课日期**2026-05-10
**课评内容**
俊研本节课整体表现沉稳认真特别棒课堂纪律良好能够安静跟随老师的教学节奏完成各项操作很少出现闲聊分心的情况这种专注力是学好AIGC的基础🌟
对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,从新建项目、选择智能体,到生成需求文档、参与需求审核,每一步都能按要求规范完成,基础操作掌握得很扎实~老师提醒专注听讲时也能及时调整状态,学习态度踏实可靠,特别棒!💡
希望后续能更主动地表达想法、大胆尝试探索,让学习更有主动性~老师会继续关注俊研的进步,期待看到更多精彩!🌸😊
---

View File

@@ -105,3 +105,17 @@
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
---
## 第9条魔幻俄罗斯方块
**授课日期**2026-05-10
**课评内容**
嘉博本节课表现超棒~是课堂上最积极、效率最高的同学之一,每次老师布置任务都能快速响应、率先完成,无论是作品上传还是游戏测试都做得又快又好,学习态度认真、执行力特别强!💪
对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,掌握得很扎实~课堂上能安静专注地完成各项操作,主动配合老师的教学安排,还积极参与后续的比赛沟通,展现出很强的上进心与规则意识,特别棒!✨
希望你继续保持这份高效与认真在AI编程学习中不断探索做出更完善的作品老师会继续关注嘉博的表现期待看到更多精彩🌟💡
---

View File

@@ -104,3 +104,15 @@
老师会继续关注皓霖的表现,期待看到更多进步!🌟💪
---
## 第9条魔幻俄罗斯方块
**授课日期**2026-05-11
**课评内容**
皓霖本节课学习积极性很高,特别棒~对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,有一定了解~在体验俄罗斯方块时积极发现游戏中的问题并及时和老师沟通,动手实践能力很强!能够跟上老师节奏完成需求重命名、审核任务创建等操作,也愿意配合老师上传作品、参与游戏优化,整体参与度很好~
要是上课的时候能更好地保持专注,减少分心闲聊,把发现的 bug 认真整理优化,学习的严谨性就更好啦~老师会继续关注皓霖的表现,期待看到更多精彩!🌟💡
---

View File

@@ -90,3 +90,15 @@
要是课堂上能再安静专注一点,把更多精力放在作品上,效果一定会更棒~老师会继续关注浩铭的表现,期待看到更多精彩!🌟💡
---
## 第8条魔幻俄罗斯方块
**授课日期**2026-05-11
**课评内容**
浩铭本节课整体表现乖巧配合,很棒~对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,有一定了解~能够跟随老师完成需求审核、文件上传、游戏体验等课堂任务,遇到操作疑问会主动向老师请教,学习态度诚恳~在体验俄罗斯方块时积极参与测试,主动发现游戏操作中的问题,具备基本的问题感知能力~
希望你后续更勇敢地表达自己的思路,主动尝试优化作品,进一步提升独立思考与动手解决问题的能力~老师会继续关注浩铭的表现,期待看到更多精彩!🌟💡
---

View File

@@ -104,3 +104,15 @@
老师会继续关注浩宸的学习状态,期待看到更多进步!🌟💪
---
## 第9条魔幻俄罗斯方块
**授课日期**2026-05-11
**课评内容**
浩宸今天后期表现不错~对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,有一定了解~虽然上课期间偶尔会分心,被老师提醒后有所收敛,后续也按照要求上传了俄罗斯方块的需求文档,能够完成课堂任务,跟上教学进度~四年级的男子汉,敢不敢挑战一下,下节课一开始就全神贯注,把专注力放在学习上,完成任务后再放松?
老师相信你有这个能力,继续加油~老师会继续关注浩宸的学习状态,期待看到更多进步!🌟💪
---

View File

@@ -90,3 +90,15 @@
老师会继续关注浩睿的表现,期待看到更多创意!✨💡
---
## 第8条魔幻俄罗斯方块
**授课日期**2026-05-11
**课评内容**
浩睿今天表现超棒!课堂上积极参与互动,动手积极性很高~对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,有一定了解~主动尝试操作电脑完成俄罗斯方块项目,多次向老师反馈操作进度与遇到的问题,比如生成的俄罗斯方块碰到边界会变颜色,观察特别细致~还认真跟着老师的步骤新建文件夹、处理需求文档,这种主动探索和认真执行的态度特别棒~
继续保持这份积极好学的热情,你会越来越厉害的~老师会继续关注浩睿的表现,期待看到更多创意!✨💡
---

View File

@@ -0,0 +1,103 @@
# 学生画像 — 张玉辰
> 创建日期2026-05-06
> 最后更新2026-05-06
> 班级周日下午1400AI03班
---
## 📋 基本信息
| 项目 | 内容 |
|------|------|
| 姓名 | 张玉辰 |
| 年级 | 待补充 |
| 年龄 | 待补充 |
| 性别 | 待补充 |
| 就读课程 | □ Kitten □ AIGC ✓ AI |
| 入学时间 | 待补充 |
---
## 🎯 用户画像类型
**主要类型**:待评估
**具体表现**
- 待补充
**推荐评语风格**:待确定
---
## 👤 性格特征
**性格关键词**:待补充
**性格描述**
- **性格倾向**:待补充
- **社交表现**:待补充
- **情绪特点**:待补充
---
## 📚 学习状态
**学习阶段**:待评估
**课堂表现**
- **听课状态**:待补充
- **提问情况**:待补充
- **完成任务情况**:待补充
**作业/作品情况**
- 完成质量:待评估
- 提交情况:待评估
- 风格特点:待评估
---
## 💪 能力评估
| 能力维度 | 评分(1-5) | 说明 |
|----------|-----------|------|
| 逻辑思维 | ⭐☆☆☆☆ (待评估) | 待补充 |
| 学习接受 | ⭐☆☆☆☆ (待评估) | 待补充 |
| 作品完成 | ⭐☆☆☆☆ (待评估) | 待补充 |
| 创意表达 | ⭐☆☆☆☆ (待评估) | 待补充 |
| 打字速度 | ⭐☆☆☆☆ (待评估) | 待补充 |
**优势能力**:待补充
**待提升能力**:待补充
---
## 🎨 应对策略
**沟通方式**:待补充
**评语风格选择**:待补充
**激励机制**:待补充
**注意事项**:待补充
---
## 📝 典型评语示例
待补充
---
## 📈 成长记录
### 2026-05-06画像创建
- **初始评估**:新增学生,待后续观察评估
- **评语风格**:待确定
- **关注重点**:待确定
- **能力短板**:待确定
---
*持续更新,见证成长*

View File

@@ -0,0 +1,103 @@
# 学生画像 — 曾乐凯
> 创建日期2026-05-06
> 最后更新2026-05-06
> 班级周日下午1400AI03班
---
## 📋 基本信息
| 项目 | 内容 |
|------|------|
| 姓名 | 曾乐凯 |
| 年级 | 待补充 |
| 年龄 | 待补充 |
| 性别 | 待补充 |
| 就读课程 | □ Kitten □ AIGC ✓ AI |
| 入学时间 | 待补充 |
---
## 🎯 用户画像类型
**主要类型**:待评估
**具体表现**
- 待补充
**推荐评语风格**:待确定
---
## 👤 性格特征
**性格关键词**:待补充
**性格描述**
- **性格倾向**:待补充
- **社交表现**:待补充
- **情绪特点**:待补充
---
## 📚 学习状态
**学习阶段**:待评估
**课堂表现**
- **听课状态**:待补充
- **提问情况**:待补充
- **完成任务情况**:待补充
**作业/作品情况**
- 完成质量:待评估
- 提交情况:待评估
- 风格特点:待评估
---
## 💪 能力评估
| 能力维度 | 评分(1-5) | 说明 |
|----------|-----------|------|
| 逻辑思维 | ⭐☆☆☆☆ (待评估) | 待补充 |
| 学习接受 | ⭐☆☆☆☆ (待评估) | 待补充 |
| 作品完成 | ⭐☆☆☆☆ (待评估) | 待补充 |
| 创意表达 | ⭐☆☆☆☆ (待评估) | 待补充 |
| 打字速度 | ⭐☆☆☆☆ (待评估) | 待补充 |
**优势能力**:待补充
**待提升能力**:待补充
---
## 🎨 应对策略
**沟通方式**:待补充
**评语风格选择**:待补充
**激励机制**:待补充
**注意事项**:待补充
---
## 📝 典型评语示例
待补充
---
## 📈 成长记录
### 2026-05-06画像创建
- **初始评估**:新增学生,待后续观察评估
- **评语风格**:待确定
- **关注重点**:待确定
- **能力短板**:待确定
---
*持续更新,见证成长*

View File

@@ -0,0 +1,16 @@
# 曾乐凯 课评汇总2026春季
**班级**周日下午1400AI03班
**学生**:曾乐凯
---
## 待补充课评
**授课日期**:待补充
**课评内容**
待补充
---
*每次课后添加新的课评*

View File

@@ -88,3 +88,15 @@
老师会继续关注俊宇的表现,期待看到更多惊喜!🎯✨
---
## 第8条魔幻俄罗斯方块
**授课日期**2026-05-11
**课评内容**
俊宇今天表现超棒!课堂上专注度很好~对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,有一定了解~操作电脑时遇到按上键方块一直变化的问题,及时向老师反馈,认真参与需求文档的选择题作答,全程遵守课堂纪律,积极配合老师完成每一步操作,还因为表现好获得了老师的积分奖励,特别厉害~
继续保持这份专注和积极的学习态度,你会越来越出色的~老师会继续关注俊宇的表现,期待看到更多精彩!🌟💡
---

View File

@@ -88,3 +88,15 @@
老师会继续关注楚悦的进步,期待看到更多精彩!🌸😊
---
## 第8条魔幻俄罗斯方块
**授课日期**2026-05-11
**课评内容**
楚悦今天表现很棒!全程跟着老师的教学节奏操作,特别认真~对《魔幻俄罗斯方块(下)》的知识点,特别是增量需求文档、自动化测试、测试覆盖和边界条件,有一定了解~在生成俄罗斯方块程序时,虽然出现了方块显示异常的问题,但没有放弃,耐心听老师讲解修改方法,配合完成需求文档审核与修正,这种遇到困难不放弃的态度特别珍贵~课堂纪律良好,一直保持专注~
继续保持这份认真踏实的学习态度,你会越来越优秀的~老师会继续关注楚悦的进步,期待看到更多精彩!🌸😊
---

View File

@@ -122,3 +122,35 @@
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-10
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
林轩上课偶尔会分心,被老师发现看视频、闲聊,受到批评并被提醒扣金币。虽有纪律问题,但在讲解模拟算法、发牌公式时能跟上思路,在老师引导下参与题目分析,后续也尝试完成编程任务,整体能完成课堂基本要求。希望林轩能够更加自律,上课专注听讲,把精力集中在学习上,理解为什么这么写,不只是抄完就好~
## 【OJ做题数据】
**完成情况**: 1/3 (共5次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 5 | 多次尝试后通过 | — |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过但提交次数较多B/C题未提交建议课后继续完成。
**错误分布**: 答案错误若干次。
加油呀!💪✨
---

View File

@@ -120,3 +120,36 @@
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-10
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
俊宇上课专注度较高,紧跟老师讲解模拟算法、发牌逻辑、机器人移动等知识点,能主动回应老师提问,还在讲解机器人移动题目时积极分享思路,主动配合老师上台讲题,遇到代码报错会及时反馈,认真完成编程练习,全程遵守课堂纪律,积极参与互动。希望俊宇继续保持这种积极的学习态度,在理解为什么这么写的基础上,尝试挑战更有深度的内容。
## 【OJ做题数据】
**完成情况**: 1/3 (共11次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 11 | 耐心调试 | WA×7 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过但提交次数较多B/C题未提交建议课后继续完成。
**错误分布**: 答案错误7次。
加油呀!💪✨
---
claude

View File

@@ -120,3 +120,35 @@
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-10
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
子杰听课专注且反应灵敏是课堂上思路最快的学生之一在老师讲解代码时能快速指出代码错误比如变量初始化错误、循环条件写错等逻辑思维敏锐积极参与课堂互动紧跟老师讲解节奏快速理解模拟算法、加强for循环等知识点还会和同学交流解题思路学习效率高。希望子杰继续保持这种高效的学习状态在理解为什么这么写的基础上把细节处理得更到位。
## 【OJ做题数据】
**完成情况**: 1/3 (共7次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 7 | 耐心调试 | WA×3 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过但提交次数较多B/C题未提交建议课后继续完成。
**错误分布**: 答案错误3次。
加油呀!💪✨
---

View File

@@ -118,3 +118,35 @@
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-10
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
明泓严格遵守课堂纪律,上课不打闹、不闲聊,全程专注听讲模拟发牌、机器人网格移动、代码调试等内容;按老师要求一步步完成操作练习,认真理解每一步逻辑,紧跟课堂节奏;学习状态稳定,态度端正,全程认真跟进,积极配合老师的教学安排,踏实完成练习。希望明泓继续保持这种认真的学习态度,在理解为什么这么写的基础上,尝试挑战更有深度的内容。
## 【OJ做题数据】
**完成情况**: 1/3 (共5次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 5 | 多次尝试后通过 | WA×1 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过但提交次数较多B/C题未提交建议课后继续完成。
**错误分布**: 答案错误1次。
加油呀!💪✨
---

View File

@@ -122,3 +122,35 @@
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-10
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
锦程课堂上较为活跃,会和同学讨论题目、分享代码思路,还主动在群里发送编程答案供同学参考,能跟上老师的编程教学步骤,参与模拟算法、机器人移动等题目练习,偶尔会闲聊,但能及时回到课堂,认真完成编程操作。希望锦程在保持活跃的同时,更加专注听讲,理解为什么这么写,不只是抄完就好~
## 【OJ做题数据】
**完成情况**: 1/3 (共9次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 9 | 耐心调试 | WA×5 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过但提交次数较多B/C题未提交建议课后继续完成。
**错误分布**: 答案错误5次。
加油呀!💪✨
---

View File

@@ -0,0 +1,158 @@
# 家长沟通记录 - 廖梓琪
> 沟通日期2026-05-07
> 沟通对象:廖梓琪爸爸
> 沟通类型:课时查询 + 续课意向确认
---
## 📋 沟通背景
- **起因**五一调休后本周六学校上课需调整本周5月第2周的上课时间
- **涉及课次**CSP03班第9-10课枚举算法
---
## 💬 完整沟通记录
### 5月6日周二
**12:04 老师主动告知**
> 梓琪爸爸,本周周六学校要上课,然后我们的上课时间调整一下:
>
> 时间1本周日10:30-12:30
> 时间2本周日16:00-18:00
>
> 可以选择一个时间发给我,时间都不行的话,和我联系可以调整到其他老师的班级
**16:12 家长回复**
> 这两个时间都不好因为梓琪星期日下午2点就要坐校车回学校看星期六有哪些时间可以上[抱拳]
**17:02 老师回复**
> 周六下午4:30-6:30
**18:06 家长回复**
> 嗯,我再想想吧,现在还剩多少课时
**18:37 老师回复**
> 我问一下前台,梓琪爸爸
**19:58 老师告知课时情况**
> 梓琪只剩下0.5课时了
**21:01 家长明确表态**
> 哦,没课时了,这上课的时间也不怎么样,那先不上了[抱拳]
**21:18 老师回复**
> 好的[抱拳]
### 5月7日周三
**15:13 老师再次确认续课意向**
> 梓琪爸爸,那梓琪下周周六还和俊宇一起来学习嘛[坏笑]
**17:36 家长最终回复**
> 只剩0.5课时,不去了
---
## 🎯 关键信息提取
| 项目 | 内容 |
|------|------|
| **剩余课时** | 0.5课时(已不足一次完整课) |
| **家长态度** | 明确表示暂时不上课,无续课意向 |
| **核心原因** | ① 课时即将耗尽 ② 时间调整不满意 ③ 无明确续课意愿 |
| **学生状态** | 近期进步显著,理解力强,正处于提升关键期 |
---
## 📊 学生当前情况回顾
### 学习状态截至第7课4月18日
- **进步情况**4月后状态在线表现积极理解力很强课堂反应不错
- **最近一次出勤**4月18日第7课字符串处理状态不错
- **请假记录**4月25日第8课字符串小测与复习请假错过了小测
- **待提升**:动手练习积极性、字符串函数记忆、专注力稳定性
- **关键期**:正处于从"跟上节奏"到"熟练掌握"的提升关键期
### 错失与中断风险
- 已错过第8课字符串小测与复习重要的知识点巩固环节
- 即将错过枚举算法C++算法学习的重要基础)
- 学生进步势头良好第7课状态在线但第8课已请假中断一次
- 初二是编程竞赛准备的黄金期,连续中断会影响学习进度和知识连贯性
- 字符串是C++学习的核心内容,错过小测和复习可能导致知识断层
---
## 🔍 沟通分析
### 家长心理分析
1. **对时间调整不满**"这上课的时间也不怎么样" - 明显流露出对调课安排的不满意
2. **课时耗尽为直接原因**"只剩0.5课时,不去了" - 课时不足是明确的终止信号
3. **续课意愿低**:两次沟通都明确表示不上课,没有询问续费或其他安排
### 可能的深层原因
- 对调课安排不满意,产生负面情绪
- 可能对课程效果或性价比有疑虑(未明确表达)
- 初二学业压力大,可能在权衡优先级
- 可能有其他学习安排或经济因素考虑
---
## 📝 后续跟进建议
### 短期(本周内)
1. **❌ 暂时不再主动联系**:家长已明确表态,过度追问可能引起反感
2. **✅ 记录备案**:保存本次沟通记录,标记为"暂停学习"状态
3. **✅ 关注班级群动态**:观察家长是否在群内发言或有其他互动
### 中期1-2周后
1. **⭕ 可在朋友圈分享班级学习动态**:展示其他同学的进步和课程成果(不私聊打扰)
2. **⭕ 如有新班开课或优惠活动**:可在群内统一通知,不单独发消息
### 长期1个月后或期末
1. **⭕ 发送期末总结或阶段性学习建议**:以关心学生成长为出发点,不带销售目的
2. **⭕ 如有合适的比赛或活动**:可礼貌性邀请,保持弱连接
### 沟通原则
**Betty老师传授的挽留策略未使用仅供后续参考**
> 1. **轻松开场**:先开玩笑一样问"只是这周不上了吗?"
> 2. **如果明确表示以后都不来了**
> - 反馈优秀的方面(重点肯定)
> - 温和提待提升的方面(少说点)
> - 把考级和比赛规划说一下,展示学习价值
> - 最后说"坚持了这么久,至少把这个学期坚持完之类的"
**本次沟通原则**
- **尊重选择**:家长已两次明确表态,不强行挽留,避免引起反感
- **保持专业**:即便不续课,也保持良好的专业形象
- **留有余地**:不关闭沟通大门,欢迎随时回来
- **关注成长**:以学生利益为出发点,而非单纯的续课
- **时机选择**:本次未使用挽留策略,因为家长态度已非常明确,避免适得其反
---
## 💡 反思与改进
### 本次沟通中的亮点
1. 主动告知调课信息,提供多个时间选项
2. 及时查询并告知课时情况
3. 尝试再次确认续课意向,尽到提醒责任
### 可改进之处
1. **⏳ 课时预警机制**在学生剩余2-3课时时就应该提前提醒家长而不是只剩0.5课时才告知
2. **⏳ 调课预案准备**:遇到调课时,应提前准备更多时间选项,或提前告知可能的调整
3. **⏳ 续课沟通时机**:应在学生状态最好、进步最明显时自然提及续课,而非课时耗尽时
---
## 📌 学生出勤状态更新
- **本周第9-10课枚举算法**:⏸ 请假/不上课(因课时耗尽)
- **后续状态**:待观察,暂不安排课程
---
*沟通记录已归档,持续关注学生动态*

View File

@@ -0,0 +1,61 @@
# 家长沟通汇总 - 廖梓琪
> 学生:廖梓琪
> 班级橙子周六1400CSP03班
> 统计周期2026春季学期
---
## 📊 沟通统计
| 统计项 | 数量 |
|--------|------|
| **总沟通次数 | 1次 |
| **问题类型分布** | |
| - 课时与续课 | 1次 |
| - 请假补课 | 0次 |
| - 课程咨询 | 0次 |
| - 政策相关 | 0次 |
| - 学习建议 | 0次 |
| - 其他问题 | 0次 |
---
## 📋 沟通记录列表
| 日期 | 问题类型 | 沟通对象 | 核心内容 | 处理结果 | 跟进状态 |
|------|----------|----------|----------|----------|----------|
| 2026-05-07 | 课时与续课 | 爸爸 | 五一调休后时间调整不满意课时仅剩0.5课时,家长表示暂不上课 | 已记录,尊重家长选择 | ⏳ 待观察 |
---
## 🎯 关键问题汇总
### 1. 续课意向 - 2026-05-07
**问题**:课时即将耗尽,调课安排引起家长不满,明确表示暂不上课
**处理**:尊重家长选择,不强行推销,保持弱连接
**后续**:待观察,通过班级群互动,合适时机展示课程价值
**备注**:学生正处于进步关键期,中断可惜
---
## 📈 学生情况说明
廖梓琪同学本学期进步非常明显从3月初的"态度散漫、专注度极低"到4月后"状态在线、表现积极、理解力很强",是本学期进步最大的学生之一。
**当前学习状态**
- ✅ 理解力强,知识点吸收快
- ✅ 小测表现不错,字符串相关知识掌握良好
- ✅ 能跟上课堂节奏,学习积极性明显提升
- ⚠️ 动手练习积极性待提升
- ⚠️ 专注力稳定性待加强
**当前状态:⏸ 暂停学习(课时耗尽)
---
*持续关注,欢迎随时回来!🌟
---
*沟通汇总持续更新中

View File

@@ -160,9 +160,9 @@
- **引导**:督促认真听课,继续保持状态;督促认真完成笔记,把知识点手写整理到笔记本上
### 2026-04-25第8课 字符串小测与复习)
- **进步**小测表现不错字符串数组声明、find()函数、字符数组下标掌握得很好,理解力很强
- **问题**其他字符串函数记忆不够,输入时容易混淆字符数组和字符串数组的用法
- **引导**:督促回家好好复习,认真整理笔记,重点区分字符数组和字符串数组的不同用法,多动手练习
- **状态**⏸ 请假,未上课
- **说明**错过了字符串小测与复习,这是重要的知识点巩固环节
- **后续建议**:如果回来上课,需要安排时间补上字符串小测,重点复习字符串相关知识点
---

View File

@@ -67,4 +67,36 @@
雨禾对本节课的枚举算法掌握得很不错!本节课的难度相较于上节课有所放缓,雨禾学习得也更加从容,能够独立完成所有题目,表现非常好,老师为你感到骄傲!
希望雨禾回去之后继续保持认真的学习态度每天花10-15分钟复习巩固本节课的枚举算法知识点养成及时复习的好习惯减少知识点遗忘。做题的时候可以多检查几遍慢慢养成细心的习惯减少不必要的失误。继续加油你一定会越来越优秀的
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-10
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
雨禾本节课参与度很高,在老师讲解机器人移动方向时,主动回答问题,明确指出向上、向下、向左、向右对应的坐标变化,紧跟逻辑思考;在代码讲解环节能跟上节奏,积极回应老师的提问。课间参与积分兑换、奶茶兑换的讨论,遵守课堂纪律,整体配合度高,还会和老师确认代码输出顺序、坐标规则等细节。
## 【OJ做题数据】
**完成情况**: 1/3 (共7次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 7 | 耐心调试 | CE×2, WA×1 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过B/C题未提交建议课后继续完成。
**错误分布**: CE 2次, WA 1次。
加油呀!💪✨
---

View File

@@ -66,5 +66,36 @@
5. 学会枚举法的代码实现,能够将枚举思想转化为程序代码
俊宇本节课表现很好!本节课的难度较上节课有所放缓,俊宇学习也变得更加自信,能够自己尝试着把这些代码通过自己的理解表达出来,这点进步非常大,老师为你感到高兴!
你的数学基础很好,逻辑思维能力很强,这对学习编程是非常大的优势。希望你继续保持这种积极的学习状态,课后多花点时间动手练习,把理解的思路转化为实际的代码,慢慢提升代码实现能力。只要坚持练习,你的编程能力一定会越来越强的!
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-10
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
俊宇课堂上积极思考编程逻辑在模拟发牌、机器人移动等题目中主动参与规律推导能准确回答老师提出的方向判断、边界判定问题紧跟教学节奏完成代码编写认真倾听讲解并及时调整操作专注度高积极配合课堂互动。希望俊宇继续保持这种积极的学习状态课后记得把B、C题也完成把理解的思路转化为实际的代码慢慢提升代码实现能力。
## 【OJ做题数据】
**完成情况**: 1/3 (共12次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 12 | 耐心调试 | CE×6, UNKNOWN×2 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过但提交次数较多主要是编译错误B/C题未提交建议课后继续完成。
**错误分布**: 编译错误6次其他错误2次。
加油呀!💪✨
---

View File

@@ -66,4 +66,36 @@
铭轩本节课的状态越来越好!能够服从老师的安排,紧跟着老师的节奏完成所有题目,学习积极性很高,老师看到了你的持续进步,非常欣慰!
以你的聪明程度,只要继续保持这种认真的学习状态,课后多花点时间复习巩固本节课的枚举算法知识点,多做练习,一定能把这些知识掌握得很扎实。遇到问题的时候可以多尝试独立调试,慢慢提升自己解决问题的能力,你会越来越优秀的!
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-10
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
铭轩本节课头脑反应很快,思维特别活跃,上课能一直跟着老师的节奏走,老师讲的内容都能跟上,还会主动用模仿、接话的方式参与课堂,气氛带动能力很强,对课堂内容有兴趣、愿意投入。虽然偶尔话比较多、喜欢模仿老师说话,需要稍微提醒课堂纪律,但整体学习态度是积极的,听课专注度不错,愿意跟着互动,是个很有活力、反应机灵的孩子。
## 【OJ做题数据】
**完成情况**: 1/3 (共6次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 6 | 多次尝试后通过 | CE×2 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过B/C题未提交建议课后继续完成。
**错误分布**: CE 2次。
加油呀!💪✨
---

View File

@@ -110,3 +110,35 @@
加油呀!💪✨
---
## 第7条模拟算法
**授课日期**2026-05-11
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
华琛能够跟着老师完成编程学习,参与机器人移动、蜗牛爬井等题目练习,但上课偶尔会注意力不集中、走神发呆;被老师提醒后能迅速回归课堂,继续跟进操作;较少主动发言和提问,能完成基础操作,但专注度需要加强,整体能遵守课堂纪律,不扰乱课堂。
## 【OJ做题数据】
**完成情况**: 1/3 (共9次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 9 | 耐心调试 | CE×3, WA×2 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过B/C题未提交建议课后继续完成。
**错误分布**: CE 3次, WA 2次。
加油呀!💪✨
---

View File

@@ -103,3 +103,35 @@
加油呀!💪✨
---
## 第7条模拟算法
**授课日期**2026-05-11
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
钎宸本节课整体表现比较安静,课堂上很少主动发言、提问,一直坐在后排默默上课,整体行为规矩、不吵闹、不打扰别人,能够正常跟上课堂流程。学习状态比较平稳,没有特别突出的表现,也没有出现违纪情况,整体表现中等,希望后续能更主动一点,多参与互动。
## 【OJ做题数据】
**完成情况**: 1/3 (共8次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 8 | 耐心调试 | CE×2, WA×2 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过B/C题未提交建议课后继续完成。
**错误分布**: CE 2次, WA 2次。
加油呀!💪✨
---

View File

@@ -103,3 +103,35 @@
加油呀!💪✨
---
## 第10条模拟算法
**授课日期**2026-05-11
**课评内容**
家长好,本周学习的内容是《模拟算法》:
1. 掌握模拟算法的特征识别
2. 学会题目要求的模拟实现
3. 掌握过程模拟的基本方法
4. 学会模拟中的边界处理
5. 理解模拟算法与枚举的结合
佳琳学习非常主动,全程紧跟老师写代码,积极参与蜗牛爬井、机器人移动等题目的练习;多次主动找老师检查代码,自己发现并提出括号缺失、变量未定义、坐标判断错误等问题,会主动询问错误原因;对编程逻辑有疑问会立刻提出,敢于表达自己的困惑,学习热情高,但在代码书写细节上容易粗心。
## 【OJ做题数据】
**完成情况**: 1/3 (共14次提交)
| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP03-10A | ✅ 通过 | 14 | 耐心调试 | CE×5, UNKNOWN×1, WA×4 |
| CSP03-10B | ⬜ 未提交 | 0 | 未提交 | — |
| CSP03-10C | ⬜ 未提交 | 0 | 未提交 | — |
**📊 分析**: 完成1题A题通过B/C题未提交建议课后继续完成。
**错误分布**: CE 5次, UNKNOWN 1次, WA 4次。
加油呀!💪✨
---

View File

@@ -177,3 +177,22 @@
继续加油哦!老师很期待看到你下一个有创意的作品!🌟😊
---
## 第10条像素艺术画
**授课日期**2026-05-09
**课评内容**
家长好,本周学习的内容是《像素艺术画》:
1. 复习掌握循环嵌套结构的应用原理
2. 理解分支嵌套结构的条件判断逻辑
3. 通过像素艺术画项目掌握网格坐标的计算方法
4. 学习鼠标交互事件的处理(高亮、点击变色)
5. 培养空间思维能力和逻辑推理能力
晨语上课积极努力、敢于提问,虽然一开始对"设置"和"增加"坐标的区别不太理解,但他主动向老师请教,在反复讲解后快速开窍。他耐心跟着老师一步步搭建代码,认真区分固定坐标与移动坐标的使用场景,遇到问题不放弃,慢慢完善自己的像素画作品,全程坚持跟上课堂节奏,编程逻辑越来越清晰,进步十分明显。
继续加油哦!老师很期待看到你下一个有创意的作品!🌟😊
---

View File

@@ -181,3 +181,22 @@
继续加油哦!老师会继续关注艺嘉的表现,期待看到你更棒的作品!🌟💪
---
## 第10条像素艺术画
**授课日期**2026-05-09
**课评内容**
家长好,本周学习的内容是《像素艺术画》:
1. 复习掌握循环嵌套结构的应用原理
2. 理解分支嵌套结构的条件判断逻辑
3. 通过像素艺术画项目掌握网格坐标的计算方法
4. 学习鼠标交互事件的处理(高亮、点击变色)
5. 培养空间思维能力和逻辑推理能力
艺嘉在本节课思维活跃、反应极快课堂参与度非常高。老师讲解像素画网格绘制时他第一时间发现代码中Y坐标应该增加-80的关键问题快速理解循环嵌套逻辑在鼠标高亮、点击变色环节他能准确判断积木摆放位置动手能力强完成速度快还能主动分享思路多次为同学做出示范全程专注投入学习效果很棒。
继续加油哦!期待看到你更棒的作品!🌟
---

View File

@@ -175,3 +175,22 @@
继续加油哦!相信你会把程序做得更完整!
---
## 第10条像素艺术画
**授课日期**2026-05-09
**课评内容**
家长好,本周学习的内容是《像素艺术画》:
1. 复习掌握循环嵌套结构的应用原理
2. 理解分支嵌套结构的条件判断逻辑
3. 通过像素艺术画项目掌握网格坐标的计算方法
4. 学习鼠标交互事件的处理(高亮、点击变色)
5. 培养空间思维能力和逻辑推理能力
圆振这节课表现很棒他能清晰区分外层循环控制9行、内层循环控制12列准确掌握X、Y坐标用法面对老师提问他能从容回答循环控制逻辑对知识点理解扎实稳固。全程紧跟老师步骤不急躁、不走神一步一步完成编程任务学习态度稳重可靠。
继续加油哦!相信你会把程序做得更完整!
---

View File

@@ -0,0 +1,134 @@
# 学生画像 — 洋洋
> 创建日期2026-05-13
> 最后更新2026-05-13
---
## 📋 基本信息
| 项目 | 内容 |
|------|------|
| 姓名 | 洋洋 |
| 年级 | |
| 年龄 | |
| 性别 | |
| 就读课程 | ☑ AIGC |
| 入学时间 | 2026-04 |
---
## 🎯 用户画像类型
**主要类型**:潜力待挖型
- □ 内向谨慎型
- □ 信心不足型
- □ 新手入门型
- □ 聪明浮躁型
- ☑ 潜力待挖型
- □ 容易满足型
**推荐评语风格**:☑ 鼓励型 □ 激励型
---
## 👤 性格特征
**性格关键词**:【待补充】
**性格描述**
- 性格倾向:【待补充】
- 社交表现:【待补充】
- 情绪特点:【待补充】
---
## 📚 学习状态
**学习阶段**:刚入门
**课堂表现**
- 听课状态:【待补充】
- 提问情况:【待补充】
- 完成任务情况:【待补充】
**作业/作品情况**
- 完成质量:【待补充】
- 提交情况:【待补充】
- 风格特点:【待补充】
---
## 💪 能力评估
| 能力维度 | 评分(1-5) | 说明 |
|----------|-----------|------|
| 逻辑思维 | ⭐⭐⭐☆☆ | |
| 代码能力 | ⭐☆☆☆☆ | 刚接触编程 |
| 创意表达 | ⭐⭐⭐☆☆ | |
| 调试能力 | ⭐☆☆☆☆ | 刚接触编程 |
| 学习专注 | ⭐⭐⭐☆☆ | |
---
## 🎨 应对策略
**沟通方式**
- 温和鼓励,耐心引导
**评语风格选择**
- 主要风格:鼓励型
- 辅助风格:体验课转化型
**激励机制**
- 夸奖创意和进步,展示作品成果
**注意事项**
- 多鼓励,培养兴趣为主
---
## 👨‍👩‍👧 家校沟通信息
**家长类型**
- □ 成就导向型(关注成绩和排名)
- □ 发展导向型(关注能力和成长)
- □ 配合导向型(关注如何配合)
- ☑ 综合型(以上都有)
**家长期望**
- 【待补充】
**家庭学习环境**
- 【待补充】
**家校沟通偏好**
- 【待补充】
**家庭教育配合**
- 【待补充】
---
## 📝 成长记录
### 2026-04-06
- **记录**参加AIGC体验课
- **评语风格**:体验课转化型
- **家长反馈**:【待补充】
---
## 📈 家长期望达成情况
### 已达成
- 对编程产生兴趣
### 需要关注
- 【待补充】
### 长期目标
- 【待补充】
---
*持续更新,见证成长*

View File

@@ -0,0 +1,287 @@
{
"course": "CSP03-09",
"title": "CSP03第9次课",
"date": "2026-05-06",
"class": "橙子周六0830CSP03班",
"students": [
{
"name": "杨林轩",
"problems": {
"CSP03-09A": {
"label": "CSP03-09A",
"attempts": 12,
"solved": true,
"pattern": "耐心调试",
"errors": {
"WA": 6
},
"submit_times": [
"2026-05-01T09:08:24",
"2026-05-01T09:19:42",
"2026-05-01T09:34:27",
"2026-05-01T09:38:18",
"2026-05-01T09:58:06",
"2026-05-01T10:00:19",
"2026-05-01T10:02:49",
"2026-05-01T10:03:57",
"2026-05-01T10:13:34",
"2026-05-01T10:37:23",
"2026-05-01T10:41:03",
"2026-05-01T10:43:08"
]
},
"CSP03-09B": {
"label": "CSP03-09B",
"attempts": 4,
"solved": true,
"pattern": "多次尝试后通过",
"errors": {},
"submit_times": [
"2026-05-01T11:04:50",
"2026-05-01T11:05:22",
"2026-05-01T11:11:33",
"2026-05-01T11:16:01"
]
},
"CSP03-09C": {
"label": "CSP03-09C",
"attempts": 0,
"solved": false,
"pattern": "未提交",
"errors": {},
"submit_times": []
}
},
"total_solved": 2,
"total_attempts": 16,
"total_errors": {
"WA": 6
},
"patterns": [],
"completion": "2/3"
},
{
"name": "欧俊宇",
"problems": {
"CSP03-09A": {
"label": "CSP03-09A",
"attempts": 13,
"solved": true,
"pattern": "耐心调试",
"errors": {
"WA": 2,
"CE": 3
},
"submit_times": [
"2026-05-01T09:07:42",
"2026-05-01T09:10:23",
"2026-05-01T09:11:12",
"2026-05-01T09:14:01",
"2026-05-01T09:15:41",
"2026-05-01T09:16:22",
"2026-05-01T09:34:27",
"2026-05-01T10:04:16",
"2026-05-01T10:08:59",
"2026-05-01T10:15:12",
"2026-05-01T10:38:18",
"2026-05-01T10:41:22",
"2026-05-01T10:48:13"
]
},
"CSP03-09B": {
"label": "CSP03-09B",
"attempts": 8,
"solved": true,
"pattern": "耐心调试",
"errors": {
"WA": 5
},
"submit_times": [
"2026-05-01T11:27:02",
"2026-05-01T11:28:03",
"2026-05-01T11:32:13",
"2026-05-01T11:34:45",
"2026-05-01T11:43:39",
"2026-05-01T11:47:10",
"2026-05-01T11:47:37",
"2026-05-01T11:50:49"
]
},
"CSP03-09C": {
"label": "CSP03-09C",
"attempts": 0,
"solved": false,
"pattern": "未提交",
"errors": {},
"submit_times": []
}
},
"total_solved": 2,
"total_attempts": 21,
"total_errors": {
"WA": 7,
"CE": 3
},
"patterns": [],
"completion": "2/3"
},
{
"name": "汪子杰",
"problems": {
"CSP03-09A": {
"label": "CSP03-09A",
"attempts": 9,
"solved": true,
"pattern": "耐心调试",
"errors": {
"WA": 3
},
"submit_times": [
"2026-05-01T09:09:32",
"2026-05-01T09:13:35",
"2026-05-01T09:14:32",
"2026-05-01T09:17:20",
"2026-05-01T09:22:50",
"2026-05-01T10:07:19",
"2026-05-01T10:13:00",
"2026-05-01T10:14:12",
"2026-05-03T11:10:38"
]
},
"CSP03-09B": {
"label": "CSP03-09B",
"attempts": 3,
"solved": true,
"pattern": "调试改进",
"errors": {
"WA": 1
},
"submit_times": [
"2026-05-03T11:17:06",
"2026-05-03T11:27:43",
"2026-05-03T18:20:11"
]
},
"CSP03-09C": {
"label": "CSP03-09C",
"attempts": 0,
"solved": false,
"pattern": "未提交",
"errors": {},
"submit_times": []
}
},
"total_solved": 2,
"total_attempts": 12,
"total_errors": {
"WA": 4
},
"patterns": [],
"completion": "2/3"
},
{
"name": "谢明泓",
"problems": {
"CSP03-09A": {
"label": "CSP03-09A",
"attempts": 5,
"solved": true,
"pattern": "多次尝试后通过",
"errors": {},
"submit_times": [
"2026-05-05T10:46:21",
"2026-05-05T11:03:53",
"2026-05-05T11:11:09",
"2026-05-05T11:46:32",
"2026-05-05T12:04:05"
]
},
"CSP03-09B": {
"label": "CSP03-09B",
"attempts": 1,
"solved": true,
"pattern": "一气呵成",
"errors": {},
"submit_times": [
"2026-05-05T12:32:20"
]
},
"CSP03-09C": {
"label": "CSP03-09C",
"attempts": 0,
"solved": false,
"pattern": "未提交",
"errors": {},
"submit_times": []
}
},
"total_solved": 2,
"total_attempts": 6,
"total_errors": {},
"patterns": [],
"completion": "2/3"
},
{
"name": "谭锦程",
"problems": {
"CSP03-09A": {
"label": "CSP03-09A",
"attempts": 10,
"solved": true,
"pattern": "耐心调试",
"errors": {
"CE": 3,
"WA": 1
},
"submit_times": [
"2026-05-01T09:08:43",
"2026-05-01T09:19:48",
"2026-05-01T09:29:08",
"2026-05-01T09:29:24",
"2026-05-01T09:29:54",
"2026-05-01T09:31:10",
"2026-05-01T10:06:17",
"2026-05-01T10:08:39",
"2026-05-01T10:13:34",
"2026-05-01T10:29:39"
]
},
"CSP03-09B": {
"label": "CSP03-09B",
"attempts": 4,
"solved": true,
"pattern": "多次尝试后通过",
"errors": {},
"submit_times": [
"2026-05-01T11:01:44",
"2026-05-01T11:06:32",
"2026-05-01T11:07:01",
"2026-05-01T11:09:34"
]
},
"CSP03-09C": {
"label": "CSP03-09C",
"attempts": 2,
"solved": true,
"pattern": "调试改进",
"errors": {
"WA": 1
},
"submit_times": [
"2026-05-05T15:49:03",
"2026-05-05T15:50:32"
]
}
},
"total_solved": 3,
"total_attempts": 16,
"total_errors": {
"CE": 3,
"WA": 2
},
"patterns": [],
"completion": "3/3"
}
],
"generated_at": "2026-05-06T14:56:16.733917"
}

View File

@@ -0,0 +1,74 @@
{
"course": "CSP03-10",
"title": "模拟算法",
"date": "2026-05-10",
"class": "橙子CSP03合并",
"students": [
{
"name": "杨林轩",
"problems": {
"CSP0309A1 银行叫号模拟": {
"label": "CSP0309A1 银行叫号模拟",
"raw_label": "CSP0309A1",
"attempts": 1,
"solved": true,
"pattern": "一气呵成",
"errors": {},
"submit_times": [
"2026-05-10T16:21:24"
]
},
"CSP0309A2 模拟发牌": {
"label": "CSP0309A2 模拟发牌",
"raw_label": "CSP0309A2",
"attempts": 1,
"solved": true,
"pattern": "一气呵成",
"errors": {},
"submit_times": [
"2026-05-10T16:54:17"
]
},
"CSP0309A3 蜗牛爬竿": {
"label": "CSP0309A3 蜗牛爬竿",
"raw_label": "CSP0309A3",
"attempts": 1,
"solved": true,
"pattern": "一气呵成",
"errors": {},
"submit_times": [
"2026-05-10T17:18:13"
]
},
"CSP0309A4 模拟走迷宫": {
"label": "CSP0309A4 模拟走迷宫",
"raw_label": "CSP0309A4",
"attempts": 1,
"solved": true,
"pattern": "一气呵成",
"errors": {},
"submit_times": [
"2026-05-10T18:00:18"
]
},
"CSP0309A5 模拟击鼓传花": {
"label": "CSP0309A5 模拟击鼓传花",
"raw_label": "CSP0309A5",
"attempts": 1,
"solved": true,
"pattern": "一气呵成",
"errors": {},
"submit_times": [
"2026-05-10T18:26:58"
]
}
},
"total_solved": 5,
"total_attempts": 5,
"total_errors": {},
"patterns": [],
"completion": "5/5"
}
],
"generated_at": "2026-05-10T20:54:55.781377"
}

View File

@@ -34,9 +34,9 @@
---
## 📌 温暖鼓励型AI03班专属风格
## 📌 温暖鼓励型AICODE03班专属风格
> **适用对象**AI03班全体学生
> **适用对象**AICODE03班全体学生
> **语气特点**:温暖、亲切、鼓励、具体细节、表情符号
### 风格特征
@@ -147,7 +147,7 @@
3. 建议用"我们可以" - 拉近距离,建立伙伴关系
4. 避免"但是" - 用"同时"、"下一步"等过渡词
**温暖鼓励型AI03班风格**
**温暖鼓励型AICODE03班风格**
1. 描述具体行为 - "一字一字打字"、"和AI聊了一节课"、"大声回答问题"
2. 提及具体知识点 - "角色设置+限制条件+输出格式"、"系统提示词优化"
3. 提及学生感兴趣的项目 - "恐怖故事大王"等

107
.claude/rules/oj_data.md Normal file
View File

@@ -0,0 +1,107 @@
# OJ数据获取规则
> 本文件定义了OJ数据获取和分析的技术规范。
## OJ系统信息
- **平台**: Hydro OJ
- **地址**: https://oj.qonnwolf.com
- **认证方式**: Cookie登录POST `/login``uname` + `password`
- **凭据来源**: `.env` 文件中的 `OJ_USERNAME``OJ_PASSWORD`
## OJ课程结构
```
课程 (course) → 课次 (period) → 作业包 (homework) → 题目 (problem)
```
- 课程ID示例`6975984d71e15346c9e8fdc2`
- 课次ID示例`69aa50c127e54d3ad7ed7ab7`HTML中 `period-card``data-id`
- 作业包ID示例`69ad011c27e54d3ad7ef50d0`homework系统的ID
## ⚠️ 重要规则
1. **OJ课次编号 ≠ 大纲编号**OJ可能跳过或重排课次必须按**标题匹配**
2. **只查A包课堂练习**CSP03班OJ数据**只查询A作业包**不查B/C包
3. **A包包含多道具体题目**每个A包通常包含3~5道具体题目`CSP0309A1 银行叫号模拟``CSP0309A2 模拟发牌`需在OJ板块中按具体题目列出
4. **`hw_dict.json` 可能不准确**如果配置的ID无数据需要从课程页面重新查找
## 数据获取方式
### 方式1: 运行脚本推荐自动获取A包具体题目
```bash
python scripts/update_feedback_with_oj.py \
--course CSP03-<课次编号> \
--title "<课程名称>" \
--class-name "<班级目录名>" \
--date <YYYYMMDD> \
--students "学生1,学生2,学生3"
```
脚本执行流程:
1.`hw_dict.json` 加载A作业包ID自动过滤B/C包
2. 访问 `/homework/{hw_id}` 获取A包中的具体题目列表`银行叫号模拟``模拟发牌`等)
3. 抓取A包提交记录按**具体题目**分析每个学生的完成情况
4. 输出包含具体题目名称的OJ数据Markdown板块
### 方式2: 手动从作业页面获取
```python
import httpx, re
from pathlib import Path
env = {}
for line in Path('.env').read_text(encoding='utf-8').split('\n'):
if '=' in line and not line.startswith('#'):
k, v = line.split('=', 1)
env[k] = v
client = httpx.Client(base_url=env['OJ_BASE_URL'], follow_redirects=True)
client.post('/login', json={"uname": env['OJ_USERNAME'], "password": env['OJ_PASSWORD']})
# 获取A作业包中的具体题目列表
hw_id = "69acffac27e54d3ad7ef5013" # CSP03-10A
r = client.get(f'/homework/{hw_id}')
problems = re.findall(r'href="/p/([^"?]+)\?tid=' + hw_id + r'"[^>]*><b>([^<]+)</b>(?:&nbsp;|\s)*([^<]*)</a>', r.text)
# 返回: [("CSP0309A1", "CSP0309A1", "银行叫号模拟"), ...]
```
## <20><>业ID映射
作业ID存储在 `config/hw_dict.json`,格式为:
```json
{
"CSP05-03": [
{"title": "CSP05-03A", "id": "69ad011b27e54d3ad7ef50ca"},
{"title": "CSP05-03B", "id": "69ad011d27e54d3ad7ef50dd"},
{"title": "CSP05-03C", "id": "69ad012027e54d3ad7ef50f0"}
]
}
```
A/B/C分别对应课堂练习 / 课后作业 / 拓展练习
## 提交记录解析
`/record?tid={homework_id}&page={page}``/record?p={problem_id}&page={page}` 页面解析HTML获取
- 学生ID和姓名
- 题目ID和标题
- 判题状态Accepted→AC, Wrong Answer→WA, 等)
- 提交时间
## 分析指标
对每个学生每题生成:
- **完成状态**: 是否AC
- **提交次数**: 总提交数
- **思考模式**: 一气呵成/调试改进/多次尝试/耐心调试/遇到困难
- **错误分布**: WA/CE/RE/TLE各几次
## 完成率统计规则
- 完成率 = AC的题目数 / 总题目数
- 总题目数以OJ实际为准不固定
- 如果只有1个作业包统计该包内所有题目的完成情况
- 如果有多个作业包,分别统计每类(课堂练习/课后作业/拓展练习)的完成情况

View File

@@ -46,7 +46,13 @@
"Bash(curl *)",
"Bash(python *)",
"Bash(node index.js 2026-04-24 2026-04-26)",
"Bash(node *)"
"Bash(node *)",
"Bash(mv \"E:/cc/2code/ClassFeedback/.claude/memory/class/AI03橙子周六1900/黄浩\" \"E:/cc/2code/ClassFeedback/回收站/\")",
"Bash(mv \"E:/cc/2code/ClassFeedback/.claude/memory/class/AI03橙子周六1900/钟嘉鑫\" \"E:/cc/2code/ClassFeedback/回收站/\")",
"Bash(echo '| 2026-05-04 | 我的个人主页(下) | 第9课 | ✅ 出勤 |')",
"Bash(echo '| 2026-05-11 | 魔幻俄罗斯方块(下) | 第10课 | ✅ 出勤 |')",
"Bash(python3 *)",
"Bash(xargs dirname)"
]
}
}

View File

@@ -1,251 +0,0 @@
---
name: AI03周报生成
description: 根据AI03班级周五下午1700AI03班、周六晚上1900AI03班、周日早上0845AI03班、周日下午1400AI03班的课评反馈自动生成教学周报。提供 /周报、/检查、/优化 命令。
type: skill
---
# AI03 周报生成器
你是 AI03 课程周报助手,专门协助老师根据课评反馈生成教学周报。
## 命令
| 命令 | 别名 | 功能 |
|-----|------|------|
| `/周报` | `/gen`, `/report` | 根据本周课评生成教学周报 |
| `/检查` | `/check`, `/validate` | 检查周报格式是否完整 |
| `/优化` | `/opt`, `/improve` | 优化周报内容质量 |
## AI03 班级信息
| 班级 | 学生名单 |
|------|----------|
| 周五下午1700AI03班 | 李梓宁 |
| 周六晚上1900AI03班 | 陈嘉博、王子墨、谭俊研、黄彦棋、黄浩、李承泽、钟嘉鑫 |
| 周日早上0845AI03班 | 卢皓霖、黄俊博、朱浩铭、杨翊弘 |
| 周日下午1400AI03班 | 余浩宸、贺楚悦、吴浩睿、林俊宇 |
## 工作流程
### /周报 流程
1. 询问所属班级(如未提供)
2. 询问日期范围(如未提供,默认本周)
3. 自动读取该班级所有学生的课评反馈文件
4. 汇总生成教学周报
5. 输出完整周报 + 保存建议
**课评文件路径**`.claude/memory/class/[班级]/[姓名]/feedback/`
### 周报结构
```markdown
# AI 03橙子 教学周报_第X周
## 本周课程概况
- **课程主题**{本周课程主题}
- **知识点**{知识点列表}
- **班级**AI03班共{X}个班级,{Y}名学生)
---
## 各班级表现汇总
### {班级名称}{人数}人)
| 学生姓名 | 表现亮点 | 需要关注 |
|---------|---------|----------|
| {姓名} | {亮点简述} | {如有} |
**整体评价**{班级整体表现}
---
## 学生表现亮点
### 积极参与
- {学生姓名}{具体表现}
### 创意表现
- {学生姓名}{创意亮点}
### 进步明显
- {学生姓名}{进步方面}
---
## 需要关注的学生
| 学生姓名 | 班级 | 关注原因 | 建议措施 |
|---------|------|---------|----------|
| {姓名} | {班级} | {原因} | {措施} |
---
## 本周教学反思
- **课程难度**{评价}
- **学生接受度**{评价}
- **改进方向**{建议}
---
## 下周教学计划
1. {计划内容1}
2. {计划内容2}
3. {计划内容3}
---
*生成时间:{YYYY-MM-DD}*
```
### /检查 流程
1. 接收周报内容
2. 检查是否包含以下必需部分:
- 本周课程概况
- 各班级表现汇总
- 学生表现亮点
- 需要关注的学生
- 本周教学反思
- 下周教学计划
3. 输出检查结果
### /优化 流程
1. 分析现有周报内容
2. 针对以下方面优化:
- 补充具体学生表现案例
- 完善教学反思内容
- 细化下周教学计划
3. 输出优化后的版本
## 课评解析指南
### 解析课评文件获取以下信息:
**基本信息**
- 课程名称
- 日期
- 学生姓名
- 班级
**表现评价**
- 掌握程度(有一定了解/深入理解/很好的掌握)
- 课堂互动(积极/认真听讲/专注/开小差)
- 具体行为(一字一字打字、大声回答、主动探索等)
**亮点识别**
- 创意表现训练特殊AI、主动挑战、有趣提问
- 学习态度(认真、专注、融入快)
- 技能掌握打字速度、Prompt理解
**需关注信号**
- 专注力下降
- 开小差
- 掌握程度待提高
## 输出示例
```markdown
# AI03教学周报_第4周_2026-03-28
## 本周课程概况
- **课程主题**AI是怎么想的
- **知识点**
1. Token和概率预测
2. AI的思考方式
3. 与AI对话技巧
- **班级**AI03班共4个班级16名学生
---
## 各班级表现汇总
### 周五下午1700AI03班1人
| 学生姓名 | 表现亮点 | 需要关注 |
|---------|---------|----------|
| 李梓宁 | 打字速度快,主动探索日本故事 | 无 |
**整体评价**梓宁今天表现很棒对Token和概率预测的知识点有一定了解特别有探索精神
### 周六晚上1900AI03班7人
| 学生姓名 | 表现亮点 | 需要关注 |
|---------|---------|----------|
| 陈嘉博 | ... | ... |
| 王子墨 | ... | ... |
**整体评价**...
---
## 学生表现亮点
### 积极参与
- 李梓宁自己一字一字地和AI聊去了解日本的故事
### 创意表现
- 李梓宁主动用AI问答查自己感兴趣的内容
### 进步明显
- (暂无)
---
## 需要关注的学生
| 学生姓名 | 班级 | 关注原因 | 建议措施 |
|---------|------|---------|----------|
| 暂无 | - | - | - |
---
## 本周教学反思
- **课程难度**适中学生对AI思考方式表现出浓厚兴趣
- **学生接受度**良好大部分学生能主动与AI对话
- **改进方向**:可以增加更多互动环节,让学生更多分享探索成果
---
## 下周教学计划
1. 继续深入AI对话技巧训练
2. 引入更复杂的Prompt优化方法
3. 安排学生分享各自的AI探索成果
---
*生成时间2026-03-28*
```
## 质量检查清单
生成/检查后,确认以下项:
- [ ] 包含所有4个AI03班级
- [ ] 每个学生都有简要评价
- [ ] 提取了具体表现亮点
- [ ] 识别了需要关注的学生
- [ ] 包含教学反思内容
- [ ] 下周计划具体可行
- [ ] 使用 Markdown 格式,标题层级正确
## 使用技巧
**解析课评时**
1. 注意提取学生的具体行为描述
2. 识别课评中的表情符号和语气词,判断学生状态
3. 关注"要是...就更好啦"这类建议性语句
**生成周报时**
1. 用表格汇总学生表现更清晰
2. 亮点部分按类别分类(参与、创意、进步)
3. 教学反思要基于实际课堂情况
4. 下周计划要具体可操作

View File

@@ -1,122 +0,0 @@
# AI 03橙子 第四周周报
## 本周课程概况
- **课程主题**AI大作家
- **知识点**
1. 认识 Trae IDE Builder 模式
2. Markdown 魔法符号(#标题、-列表、**加粗)
3. 三步设计故事(选类型、造主角、选地点)
4. 用AI生成故事开头
- **班级**AI03班共3个班级15名学生
---
## 各班级表现汇总
### 周六晚上1900AI03班7人
| 学生姓名 | 表现亮点 | 需要关注 |
|---------|---------|----------|
| 陈嘉博 | 跟着老师节奏完成三个部分,构思清晰;反英雄角色设计有创意;被选中参加机器人画图比赛 | 打字速度慢 |
| 王子墨 | 见识到AI的强大感知力强玫瑰红狼故事专业有创意 | 纪律较差,不爱打字,开小差 |
| 李承泽 | 勇敢朗读故事获掌声;有军事专业感的故事创作 | 前半段未跟节奏,后调整完成 |
| 黄浩 | 安静探索生成整部鬼故事;金筛法金字塔故事有神秘感 | 表现平稳,需发现优势 |
| 谭俊研 | 安静踏实跟随节奏;"野男人"凶宅故事反差设定有趣 | 打字慢但能耐心完成 |
| 黄彦棋 | 状态明显变好,遥遥领先;月球基地科幻故事有创意 | 保持细心,避免粗心 |
| 钟嘉鑫 | 展示"飞毛腿"活泼可爱;猪猪侠战斗故事紧张感强 | 自律不足,易看视频 |
**整体评价**:大部分学生能跟着老师节奏完成三步设计,部分学生展现出色的故事构思能力。需继续关注王子墨的课堂纪律,以及嘉博打字速度的提升。
---
### 周日早上0845AI03班4人
| 学生姓名 | 表现亮点 | 需要关注 |
|---------|---------|----------|
| 黄俊博 | 专注认真主动用AI生成规则怪谈对知识点掌握好 | 效率可提升 |
| 卢皓霖 | 状态回升,游戏次数下降;愿意调整故事类型 | 专注力和打字速度 |
| 朱浩铭 | 非常积极玩AI很开心巫师故事29条规则设定完整 | 课堂纪律 |
| 杨翊弘 | 请假 | - |
**整体评价**:班级整体表现积极向上。皓霖状态明显回升值得肯定,浩铭的积极性和俊博的主动探索精神都很棒。下周期待全员到齐。
---
### 周日下午1400AI03班4人
| 学生姓名 | 表现亮点 | 需要关注 |
|---------|---------|----------|
| 林俊宇 | 完整记录知识点,耐心细致;五六七武侠故事大纲完整 | 专注力可提升 |
| 余浩宸 | 断断续续坚持完成dreem我的世界能力者故事有游戏融合感 | 专注力,自律 |
| 贺楚悦 | 及时跟上节奏,完成大纲;格蕾丝心理惊悚故事主题深刻 | 继续投入 |
| 吴浩睿 | 一直紧跟步伐,逻辑清晰;小帅恐怖悬疑故事有反转深度 | 保持好学态度 |
**整体评价**:全班都能完成故事大纲,大部分学生明白了"先设计再写作"的流程。楚悦和浩睿表现稳定,浩宸虽有断续但坚持完成很棒。
---
## 学生表现亮点
### 积极参与
- **钟嘉鑫**:一进教室就展示"飞毛腿",活泼开朗带动课堂气氛
- **朱浩铭**整节课充满活力玩AI玩得很开心
- **吴浩睿**:一直紧跟老师步伐,遥遥领先
- **李承泽**:勇敢朗读故事获得同学掌声
### 创意表现
- **陈嘉博**:反英雄杀手角色设计张力十足,"每天杀1人"限制设定有策略性
- **王子墨**:玫瑰红狼金字塔大战,军事+诡异氛围融合有创意
- **朱浩铭**巫师故事29条规则设定完整RPG探索感强
- **林俊宇**:五六七武侠故事四章结构完整,悬疑反转巧妙
### 进步明显
- **卢皓霖**:状态明显回升,游戏次数大幅下降,值得肯定
- **黄彦棋**:状态越来越好,紧跟节奏成为班级标杆
- **余浩宸**:虽然断断续续,但坚持完成小说框架
---
## 需要关注的学生
| 学生姓名 | 班级 | 关注原因 | 建议措施 |
|---------|------|---------|----------|
| 王子墨 | 周六晚上 | 纪律较差,不爱打字,开小差 | 请家长配合提醒,设定打字挑战目标 |
| 余浩宸 | 周日下午 | 专注力不足,容易断断续续 | 设定明确任务目标,完成后可适当放松 |
| 卢皓霖 | 周日早上 | 游戏次数虽有下降但仍有 | 继续正向鼓励,巩固状态回升成果 |
---
## 故事创作特别说明
本周课程重点是**故事世界观设计**,部分学生在角色设定和故事类型上进行了**推翻重来**
- **卢皓霖**:从恐怖诡异故事调整为更适合自己的故事类型
- **林俊宇**:完整构思五六七武侠故事,展现出色的世界观设计能力
- **李承泽**:军事题材故事融入游戏元素,还原度高
**从下周开始**,学生们将正式进入**AI辅助写作阶段**把设计好的故事框架用AI生成完整章节。需要关注学生对AI生成内容的理解和修改能力。
---
## 本周教学反思
- **课程难度**:适中,学生能理解三步设计法并完成故事框架
- **学生接受度**良好大部分学生能跟着节奏完成AI工具使用逐渐熟练
- **改进方向**
1. 对故事类型反复调整的学生,给予更多肯定,鼓励坚持完成
2. 加强课堂纪律管理,尤其是活泼班级
3. 适当增加打字练习环节,提升整体效率
---
## 下周教学计划
1. **AI辅助写作**指导学生用AI把故事框架扩展为完整章节
2. **迭代修改训练**学习如何用Prompt调整AI生成的内容
3. **课堂纪律强化**:对开小差学生设定明确的任务目标和奖励机制
4. **个人展示环节**:安排学生分享自己的故事创意
---
*穹狼科创 · AI 03橙子 · 第四周*

View File

@@ -1,180 +0,0 @@
---
name: 出勤记录
description: 查询和管理学生出勤情况,支持按学生姓名、班级、时间范围查询
---
# 📊 出勤记录查询系统
## 功能说明
本技能用于查询学生出勤情况,生成出勤报表。
## 🎯 核心逻辑
### 出勤记录文件位置
```
.claude/memory/class/[班级]/[学生姓名]/feedback/出勤登记-2026春季.md
```
### 出勤记录状态说明
- **✅ 出勤**:学生正常上课
- **⏸ 请假**:学生请假
- **❌ 未上课**:学生未上课
## 📋 使用方法
### 方式1查询某个学生
```
/出勤记录 陈嘉博
```
输出:陈嘉博本学期的所有出勤记录和出勤率统计
### 方式2查询某个班级
```
/出勤记录 周六晚上1900AI03班
```
输出:该班级所有学生的出勤汇总表
### 方式3查询指定月份
```
/出勤记录 陈嘉博 4月
```
输出该学生4月份的出勤情况
### 方式4查询全部
```
/出勤记录
```
输出:所有班级所有学生的出勤汇总
### 方式5查询班级最近N节课出勤率 ⭐新增
```
/出勤记录 周六晚上1900AI03班 前3节课
```
输出该班级从本周起往回数3节课的出勤情况
- 例如本周是第6课则统计第4、5、6课的出勤情况
```
/出勤记录 周六晚上1900AI03班 前4节课
```
输出该班级从本周起往回数4节课的出勤情况
- 例如本周是第6课则统计第3、4、5、6课的出勤情况
## 📊 输出格式
### 个人出勤记录
```
👤 学生:陈嘉博
🏫 班级周六晚上1900AI03班
📅 学期2026春季
| 日期 | 课程 | 课次 | 状态 | 备注 |
|------|------|------|------|------|
| 2026-04-06 | AI大作家下 | 第5课 | ✅ 出勤 | 已生成课评 |
| 2026-03-30 | AI大作家上 | 第4课 | ❌ 缺勤 | 病假 |
| 2026-03-23 | AI训练师 | 第3课 | ✅ 出勤 | 已生成课评 |
📊 统计:
- 应出勤5次
- 实际出勤4次
- 缺勤1次
- 出勤率80%
```
### 班级汇总表
```
📋 班级周六晚上1900AI03班
📅 学期2026春季
| 学生姓名 | 应出勤 | 实际出勤 | 缺勤 | 出勤率 |
|----------|--------|----------|------|--------|
| 陈嘉博 | 5 | 4 | 1 | 80% |
| 谭俊研 | 5 | 5 | 0 | 100% |
| 李承泽 | 5 | 5 | 0 | 100% |
| 王子墨 | 5 | 4 | 1 | 80% |
📊 班级总出勤率90%
```
### 班级最近N节课出勤率表 ⭐新增
```
📋 班级周六晚上1900AI03班
📊 统计范围最近3节课第4课-第6课
| 学生姓名 | 应出勤 | 实际出勤 | 缺勤 | 出勤率 | 缺勤课次 |
|----------|--------|----------|------|--------|----------|
| 陈嘉博 | 3 | 3 | 0 | 100% | - |
| 谭俊研 | 3 | 2 | 1 | 67% | 第5课 |
| 李承泽 | 3 | 3 | 0 | 100% | - |
| 王子墨 | 3 | 3 | 0 | 100% | - |
| 黄彦棋 | 3 | 1 | 2 | 33% | 第4,6课 |
📊 班级最近3节课平均出勤率75% (12/16人次)
⚠️ 需关注学生:谭俊研、黄彦棋
```
## 🔧 实现步骤
当用户调用 `/出勤记录` 时:
1. **解析参数**
- 读取用户输入的学生姓名、班级、时间范围
- 如果参数包含"前N节课"(如"前3节课"、"前4节课"标记为最近N节课查询模式
- 确定查询范围
2. **定位文件夹**
- 根据班级名称定位到 `.claude/memory/class/[班级]/`
- 如果指定学生,再定位到具体学生文件夹
3. **读取出勤文件**
- 查找每个学生文件夹下的 `出勤登记-2026春季.md`
- 如果文件不存在,显示"暂无出勤记录"
4. **解析表格数据**
- 提取表格中的每一行数据
- 如果有日期筛选条件,筛选指定月份的记录
- **如果是最近N节课查询**
- 先从所有记录中找到最大课次(当前课次)
- 计算查询范围:当前课次-(N-1) 到 当前课次
- 只保留该范围内的记录如当前第6课"前3节课"保留第4、5、6课
- 记录每位学生的缺勤课次
5. **生成报表**
- 统计出勤、缺勤次数
- 计算出勤率
- **最近N节课查询特有统计**
- 计算班级平均出勤率
- 列出需关注学生出勤率低于100%的学生)
- 显示每位学生的具体缺勤课次
- 按格式输出报表
6. **返回结果**
- 显示清晰易读的出勤报表
## 💡 技巧提示
### 快速筛选
- 可以用 "4月"、"3月" 等月份名称快速筛选
- 可以用 "2026-04-06" 这样的具体日期查询单次出勤
- 可以用 "前3节课"、"前4节课" 查询班级前N节课出勤情况
### 最近N节课查询使用场景
- **阶段性检查**了解学生最近3-4节课的出勤趋势
- **重点关注**:找出近期缺勤或出勤率低的学生的具体缺勤课次
- **动态跟踪**:每周更新,掌握最新出勤情况
**示例**
- 本周是第6课`前3节课` 查询的是第4、5、6课
- 本周是第6课`前4节课` 查询的是第3、4、5、6课
### 异常处理
- 如果学生文件夹不存在,提示"该学生不在系统中"
- 如果出勤文件不存在,提示"该学生暂无出勤记录"
- 如果表格格式错误,提示"出勤记录文件格式有误"
### 扩展功能
未来可以添加:
- 导出Excel功能
- 月度出勤对比
- 缺勤原因统计
- 出勤趋势图

View File

@@ -1,73 +0,0 @@
---
name: 出勤记录
description: 查询和管理学生出勤情况,支持按学生姓名、班级、时间范围查询
---
# 出勤记录 Skill
本技能用于查询和管理学生出勤情况。
## 使用方式
```
/出勤记录 [学生姓名] [班级] [时间范围]
```
**参数说明**
- `学生姓名`:可选,指定查询的学生
- `班级`:可选,指定查询的班级
- `时间范围`:可选,支持以下格式:
- 月份:如 "4月"、"2026-04"
- 最近N节课如 "前3节课"、"前4节课"(从本周起往回数)
## 示例
1. 查询某个学生本学期出勤:
```
/出勤记录 陈嘉博
```
2. 查询某个班级本月出勤:
```
/出勤记录 周六晚上1900AI03班
```
3. 查询某个学生指定月份出勤:
```
/出勤记录 陈嘉博 4月
```
4. 查询所有学生本学期出勤:
```
/出勤记录
```
5. 查询某个班级最近3节课出勤率从本周起往回数
```
/出勤记录 周六晚上1900AI03班 前3节课
```
例如本周是第6课则统计第4、5、6课的出勤情况
## 执行逻辑
1. 读取 `.claude/memory/class/` 下所有班级文件夹
2. 根据参数筛选班级和学生
3. 在学生的 `feedback/出勤登记-2026春季.md` 文件中查询出勤记录
4. 统计出勤率、缺勤次数
5. 生成清晰的出勤报表
### 查询前N节课出勤率逻辑从本周起往回数
当用户输入包含"前3节课"、"前4节课"等关键词时:
1. **确定当前课次**从出勤记录中找到最大的课次号如第6课
2. **识别课次范围**提取数字N确定查询范围为当前课次 - (N-1) 到 当前课次
- 例如本周是第6课查询"前3节课" = 第4、5、6课
- 例如本周是第6课查询"前4节课" = 第3、4、5、6课
3. **筛选记录**:只统计课次在范围内的出勤记录
4. **计算出勤率**按学生统计这N节课的出勤率
5. **生成报表**输出班级前N节课出勤汇总表包含
- 每位学生前N节课的出勤次数
- 每位学生的出勤率
- 班级整体前N节课的平均出勤率
- 缺勤学生名单提醒

View File

@@ -1,145 +0,0 @@
# 教学日程查询 Skill 使用说明
## 功能概述
本技能**直接调用公司API获取实时教学排课数据**,支持查询指定日期或时间段的课程安排,自动生成功能完整的互动网页,帮助老师快速查询授课安排,查看学生名单和出勤情况,支持单天查询和任意时间段查询两种模式。
## 环境配置
### 1. 依赖安装
首次使用前需要安装技能依赖:
```bash
cd .claude/skills/教学日程查询
npm install
```
### 2. API配置
确保项目根目录下的 `.env` 文件包含正确的API配置
```env
# 公司API地址
API_BASE_URL=https://api.qonnwolf.com/api/v1
# API认证令牌
AUTHORIZATION=Bearer your_token_here
# 默认查询的老师姓名
EMPLOYEE_NAME=橙子(程城)
```
## 快速开始
### 1. 调用技能
在Claude Code对话中输入支持多种日期格式
```
# 方式1查询单天
/教学日程查询 # 查询当天日程
/教学日程查询 2026-04-28 # 标准格式
/教学日程查询 2026/04/28 # 斜杠格式
/教学日程查询 20260428 # 纯数字格式
/教学日程查询 4月28日 # 中文格式
/教学日程查询 04-28 # 短格式(默认当前年份)
# 方式2查询时间段
/教学日程查询 2026-04-01 2026-04-30 # 查询4月整个月的日程
/教学日程查询 4月24日 4月26日 # 中文格式时间段
/教学日程查询 20260422 20260428 # 纯数字格式时间段
```
### 2. 查看结果
技能执行完成后会返回网页链接,点击链接即可打开互动网页查看详细信息。
## 网页功能说明
### 顶部功能区
- **日期范围显示**:显示当前查询的日期范围和总天数
- **搜索框**:输入日期、班级名称或学生姓名进行全局快速搜索
- **导出按钮**点击导出整个时间段的课表为Excel文件
- **视图切换**:支持「按日期」和「按班级」两种视图模式一键切换
### 统计面板
- 展示查询范围内的总天数、总课程数、总学生人次
- 汇总出勤人次、缺勤人次,直观展示整体出勤情况
### 课表展示区
#### 按日期视图(默认)
- 按日期分组展示,每天的课程独立排列
- 日期头部粘性定位,滚动时始终可见
- 每个日期组显示当日的课程数量、学生人次和出勤统计
- 课程按时间顺序排列,每个课程以卡片形式展示
- 卡片显示:班级名称、授课时间、授课老师、学生人数、出勤统计
- 点击卡片展开查看该班级的详细学生名单
#### 按班级视图
- 按班级分组展示,同一个班级的所有课程集中排列
- 每个班级组显示课程次数和时间范围
- 方便查看同一个班级在整个时间段内的所有上课情况
### 学生名单
- 表格展示学生姓名和出勤状态
- 出勤状态标识:
- ✅ 出勤:正常上课
- ⏸ 请假:已请假
- ❌ 缺勤:未上课
- 支持按出勤状态筛选学生
### 导出功能
导出的Excel文件包含以下信息
- 课程日期
- 班级名称
- 授课时间
- 授课老师
- 教室
- 学生姓名
- 出勤状态
- 备注信息
* 时间段查询会导出所有日期的完整数据,自动按日期排序
## 目录结构
```
教学日程查询/
├── index.js # 主程序文件处理API调用和网页生成
├── package.json # 依赖配置文件
├── skill.md # Claude技能定义文件
├── template.html # 网页模板文件
└── README.md # 使用说明文档
```
## 输出目录
生成的文件保存在:
```
# 单天查询
.claude/output/teaching-schedule/2026-04-28/
├── schedule.html # 互动网页
└── schedule.json # 原始API数据
# 时间段查询
.claude/output/teaching-schedule/2026-04-01_2026-04-30/
├── schedule.html # 互动网页
└── schedule.json # 原始API数据包含多天的完整数据
```
## 常见问题
### Q: API调用失败提示认证失败
A: 请检查项目根目录下 `.env` 文件中的 `AUTHORIZATION` 配置是否正确,令牌是否过期。
### Q: API调用失败提示网络错误
A: 请检查网络连接是否正常是否能够访问公司API地址或者稍后重试。如果问题持续存在请联系技术支持。
### Q: 为什么没有数据?
A: 可能是查询的日期没有排课或者API返回数据为空。可以尝试查询其他日期或者检查 `EMPLOYEE_NAME` 配置是否正确。
### Q: 导出的Excel文件打不开
A: 请确保使用支持.xlsx格式的办公软件打开如Microsoft Excel、WPS等。
### Q: 可以查询其他老师的课表吗?
A: 可以修改 `.env` 文件中的 `EMPLOYEE_NAME` 配置为要查询的老师姓名,支持模糊匹配。
## 更新日志
### v1.1.0 (2026-04-28)
- ✨ 新增时间段查询功能,支持查询任意起止日期范围内的所有日程
- ✨ 新增双视图展示模式:按日期视图、按班级视图,一键切换
- ✨ 升级统计面板,展示总天数、总课程数、总学生人次等汇总信息
- ✨ 搜索功能升级,支持按日期、班级、学生姓名全局搜索
- ✨ 导出功能升级,支持导出整个时间段的完整数据
- ✨ 优化界面设计,日期分组头部支持粘性定位,滚动浏览更方便
- ♻️ 重构数据处理逻辑,支持多天数据的合并和展示
### v1.0.0 (2026-04-28)
- 初始版本发布
- 支持基础的单天日程查询功能
- 支持搜索、筛选、导出Excel功能
- 响应式界面设计

View File

@@ -1,222 +0,0 @@
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const axios = require('axios');
require('dotenv').config({ path: path.join(__dirname, '../../../.env') });
// API配置
const API_BASE_URL = process.env.API_BASE_URL || 'https://api.qonnwolf.com/api/v1';
const AUTHORIZATION = process.env.AUTHORIZATION || '';
const TEACHER_NAME = process.env.EMPLOYEE_NAME || '橙子(程城)';
// 日期处理工具函数
function formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
function parseDate(dateStr) {
// 支持多种日期格式2026-04-24、2026/04/24、20260424、04-24、4月24日等
dateStr = dateStr.replace(/年|月/g, '-').replace(/日/g, '');
// 如果是短日期,默认使用当前年份
if (/^\d{1,2}-\d{1,2}$/.test(dateStr)) {
const currentYear = new Date().getFullYear();
dateStr = `${currentYear}-${dateStr}`;
}
// 处理纯数字格式
if (/^\d{8}$/.test(dateStr)) {
dateStr = `${dateStr.slice(0, 4)}-${dateStr.slice(4, 6)}-${dateStr.slice(6, 8)}`;
}
// 替换斜杠为横杠
dateStr = dateStr.replace(/\//g, '-');
const date = new Date(dateStr);
if (isNaN(date.getTime())) {
throw new Error(`无效的日期格式:${dateStr}请使用YYYY-MM-DD格式`);
}
return date;
}
function getDateRange(startDateStr, endDateStr) {
const startDate = parseDate(startDateStr);
const endDate = endDateStr ? parseDate(endDateStr) : startDate;
if (startDate > endDate) {
throw new Error('开始日期不能晚于结束日期');
}
const dates = [];
const currentDate = new Date(startDate);
while (currentDate <= endDate) {
dates.push(formatDate(currentDate));
currentDate.setDate(currentDate.getDate() + 1);
}
return dates;
}
// 调用API获取单天数据
async function fetchSchedule(date) {
try {
console.log(`正在获取 ${date} 的教学日程数据...`);
const response = await axios.get(`${API_BASE_URL}/reports/teaching-schedule`, {
headers: {
'Authorization': AUTHORIZATION
},
params: {
teaching_date: date,
teacher_name: TEACHER_NAME
}
});
if (response.data.code !== 0) {
throw new Error(`API返回错误${response.data.message}`);
}
const data = response.data.data;
return {
teaching_date: date,
items: data.items.map(item => ({
class_id: item.class_id,
class_name: item.class_name,
start_time: item.teaching_time_period.split('-')[0].trim(),
end_time: item.teaching_time_period.split('-')[1].trim(),
teacher_name: item.teacher_name,
classroom: item.school_name,
students: item.student_names.map(name => {
// 先默认都是出勤,后续可以根据实际出勤数据调整
return {
student_name: name,
attendance_status: '✅ 出勤',
remark: ''
};
})
}))
};
} catch (error) {
console.error(`获取 ${date} 数据失败:`, error.message);
throw error;
}
}
// 批量获取日期范围内的数据
async function fetchScheduleRange(dates) {
const scheduleData = [];
for (const date of dates) {
const data = await fetchSchedule(date);
scheduleData.push(data);
}
return scheduleData;
}
// 生成HTML文件
function generateHTML(scheduleData, startDate, endDate) {
// 读取模板文件
const templatePath = path.join(__dirname, 'template.html');
let template = fs.readFileSync(templatePath, 'utf-8');
// 生成日期范围显示文本
const dateRangeText = startDate === endDate ? startDate : `${startDate}${endDate}`;
const updateTime = formatDate(new Date()) + ' ' + new Date().toTimeString().slice(0, 5);
// 替换模板中的占位符
template = template.replace(/{{dateRange}}/g, dateRangeText);
template = template.replace(/{{updateTime}}/g, updateTime);
template = template.replace(/{{totalDays}}/g, scheduleData.length);
template = template.replace(/const scheduleData = {{scheduleData}};/, `const scheduleData = ${JSON.stringify(scheduleData, null, 2)};`);
// 确保输出目录存在
const outputDir = path.join(__dirname, `../../../output/teaching-schedule/${dateRangeText.replace(/ 至 /g, '_')}`);
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
// 写入HTML文件
const htmlPath = path.join(outputDir, 'schedule.html');
fs.writeFileSync(htmlPath, template, 'utf-8');
// 写入JSON数据文件
const jsonPath = path.join(outputDir, 'schedule.json');
fs.writeFileSync(jsonPath, JSON.stringify(scheduleData, null, 2), 'utf-8');
return {
htmlPath,
jsonPath,
outputDir,
dateRangeText
};
}
// 主函数
async function main() {
try {
// 解析命令行参数
const args = process.argv.slice(2);
let startDateStr, endDateStr;
if (args.length === 0) {
// 默认查询今天
const today = new Date();
startDateStr = formatDate(today);
endDateStr = startDateStr;
} else if (args.length === 1) {
// 查询单天
startDateStr = args[0];
endDateStr = startDateStr;
} else {
// 查询时间段
startDateStr = args[0];
endDateStr = args[1];
}
// 获取日期范围
const dates = getDateRange(startDateStr, endDateStr);
const startDate = dates[0];
const endDate = dates[dates.length - 1];
console.log(`查询日期范围:${startDate}${endDate}`);
console.log(`${dates.length}`);
// 获取数据
const scheduleData = await fetchScheduleRange(dates);
// 统计信息
const totalClasses = scheduleData.reduce((sum, day) => sum + day.items.length, 0);
const totalStudents = scheduleData.reduce((sum, day) => {
return sum + day.items.reduce((daySum, cls) => daySum + cls.students.length, 0);
}, 0);
console.log(`查询完成:共 ${totalClasses} 节课,${totalStudents} 人次`);
// 生成HTML
const result = generateHTML(scheduleData, startDate, endDate);
console.log('');
console.log('✅ 教学日程生成成功!');
console.log('📁 输出目录:', result.outputDir);
console.log('📄 网页文件:', result.htmlPath);
console.log('📊 数据文件:', result.jsonPath);
console.log('');
console.log('直接打开schedule.html文件即可查看教学日程');
} catch (error) {
console.error('❌ 生成失败:', error.message);
process.exit(1);
}
}
// 运行主函数
if (require.main === module) {
main();
}
module.exports = {
fetchSchedule,
fetchScheduleRange,
generateHTML
};

View File

@@ -1,302 +0,0 @@
{
"name": "teaching-schedule-query",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
"node_modules/axios": {
"version": "1.15.2",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.15.2.tgz",
"integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.11",
"form-data": "^4.0.5",
"proxy-from-env": "^2.1.0"
}
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/dotenv": {
"version": "16.6.1",
"resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.6.1.tgz",
"integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
"gopd": "^1.2.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-set-tostringtag": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/follow-redirects": {
"version": "1.16.0",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.16.0.tgz",
"integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/form-data": {
"version": "4.0.5",
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz",
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-tostringtag": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/hasown": {
"version": "2.0.3",
"resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.3.tgz",
"integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/proxy-from-env": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
"integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
"license": "MIT",
"engines": {
"node": ">=10"
}
}
}
}

View File

@@ -1,21 +0,0 @@
The MIT License (MIT)
Copyright (c) 2016 Alex Indigo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,233 +0,0 @@
# asynckit [![NPM Module](https://img.shields.io/npm/v/asynckit.svg?style=flat)](https://www.npmjs.com/package/asynckit)
Minimal async jobs utility library, with streams support.
[![PhantomJS Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=browser&style=flat)](https://travis-ci.org/alexindigo/asynckit)
[![Linux Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=linux:0.12-6.x&style=flat)](https://travis-ci.org/alexindigo/asynckit)
[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/asynckit/v0.4.0.svg?label=windows:0.12-6.x&style=flat)](https://ci.appveyor.com/project/alexindigo/asynckit)
[![Coverage Status](https://img.shields.io/coveralls/alexindigo/asynckit/v0.4.0.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/asynckit?branch=master)
[![Dependency Status](https://img.shields.io/david/alexindigo/asynckit/v0.4.0.svg?style=flat)](https://david-dm.org/alexindigo/asynckit)
[![bitHound Overall Score](https://www.bithound.io/github/alexindigo/asynckit/badges/score.svg)](https://www.bithound.io/github/alexindigo/asynckit)
<!-- [![Readme](https://img.shields.io/badge/readme-tested-brightgreen.svg?style=flat)](https://www.npmjs.com/package/reamde) -->
AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects.
Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method.
It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators.
| compression | size |
| :----------------- | -------: |
| asynckit.js | 12.34 kB |
| asynckit.min.js | 4.11 kB |
| asynckit.min.js.gz | 1.47 kB |
## Install
```sh
$ npm install --save asynckit
```
## Examples
### Parallel Jobs
Runs iterator over provided array in parallel. Stores output in the `result` array,
on the matching positions. In unlikely event of an error from one of the jobs,
will terminate rest of the active jobs (if abort function is provided)
and return error along with salvaged data to the main callback function.
#### Input Array
```javascript
var parallel = require('asynckit').parallel
, assert = require('assert')
;
var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
, expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
, expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
, target = []
;
parallel(source, asyncJob, function(err, result)
{
assert.deepEqual(result, expectedResult);
assert.deepEqual(target, expectedTarget);
});
// async job accepts one element from the array
// and a callback function
function asyncJob(item, cb)
{
// different delays (in ms) per item
var delay = item * 25;
// pretend different jobs take different time to finish
// and not in consequential order
var timeoutId = setTimeout(function() {
target.push(item);
cb(null, item * 2);
}, delay);
// allow to cancel "leftover" jobs upon error
// return function, invoking of which will abort this job
return clearTimeout.bind(null, timeoutId);
}
```
More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js).
#### Input Object
Also it supports named jobs, listed via object.
```javascript
var parallel = require('asynckit/parallel')
, assert = require('assert')
;
var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
, expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
, expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
, expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ]
, target = []
, keys = []
;
parallel(source, asyncJob, function(err, result)
{
assert.deepEqual(result, expectedResult);
assert.deepEqual(target, expectedTarget);
assert.deepEqual(keys, expectedKeys);
});
// supports full value, key, callback (shortcut) interface
function asyncJob(item, key, cb)
{
// different delays (in ms) per item
var delay = item * 25;
// pretend different jobs take different time to finish
// and not in consequential order
var timeoutId = setTimeout(function() {
keys.push(key);
target.push(item);
cb(null, item * 2);
}, delay);
// allow to cancel "leftover" jobs upon error
// return function, invoking of which will abort this job
return clearTimeout.bind(null, timeoutId);
}
```
More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js).
### Serial Jobs
Runs iterator over provided array sequentially. Stores output in the `result` array,
on the matching positions. In unlikely event of an error from one of the jobs,
will not proceed to the rest of the items in the list
and return error along with salvaged data to the main callback function.
#### Input Array
```javascript
var serial = require('asynckit/serial')
, assert = require('assert')
;
var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
, expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
, expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
, target = []
;
serial(source, asyncJob, function(err, result)
{
assert.deepEqual(result, expectedResult);
assert.deepEqual(target, expectedTarget);
});
// extended interface (item, key, callback)
// also supported for arrays
function asyncJob(item, key, cb)
{
target.push(key);
// it will be automatically made async
// even it iterator "returns" in the same event loop
cb(null, item * 2);
}
```
More examples could be found in [test/test-serial-array.js](test/test-serial-array.js).
#### Input Object
Also it supports named jobs, listed via object.
```javascript
var serial = require('asynckit').serial
, assert = require('assert')
;
var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
, expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
, expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
, target = []
;
var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
, expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
, expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
, target = []
;
serial(source, asyncJob, function(err, result)
{
assert.deepEqual(result, expectedResult);
assert.deepEqual(target, expectedTarget);
});
// shortcut interface (item, callback)
// works for object as well as for the arrays
function asyncJob(item, cb)
{
target.push(item);
// it will be automatically made async
// even it iterator "returns" in the same event loop
cb(null, item * 2);
}
```
More examples could be found in [test/test-serial-object.js](test/test-serial-object.js).
_Note: Since _object_ is an _unordered_ collection of properties,
it may produce unexpected results with sequential iterations.
Whenever order of the jobs' execution is important please use `serialOrdered` method._
### Ordered Serial Iterations
TBD
For example [compare-property](compare-property) package.
### Streaming interface
TBD
## Want to Know More?
More examples can be found in [test folder](test/).
Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions.
## License
AsyncKit is licensed under the MIT license.

View File

@@ -1,76 +0,0 @@
/* eslint no-console: "off" */
var asynckit = require('./')
, async = require('async')
, assert = require('assert')
, expected = 0
;
var Benchmark = require('benchmark');
var suite = new Benchmark.Suite;
var source = [];
for (var z = 1; z < 100; z++)
{
source.push(z);
expected += z;
}
suite
// add tests
.add('async.map', function(deferred)
{
var total = 0;
async.map(source,
function(i, cb)
{
setImmediate(function()
{
total += i;
cb(null, total);
});
},
function(err, result)
{
assert.ifError(err);
assert.equal(result[result.length - 1], expected);
deferred.resolve();
});
}, {'defer': true})
.add('asynckit.parallel', function(deferred)
{
var total = 0;
asynckit.parallel(source,
function(i, cb)
{
setImmediate(function()
{
total += i;
cb(null, total);
});
},
function(err, result)
{
assert.ifError(err);
assert.equal(result[result.length - 1], expected);
deferred.resolve();
});
}, {'defer': true})
// add listeners
.on('cycle', function(ev)
{
console.log(String(ev.target));
})
.on('complete', function()
{
console.log('Fastest is ' + this.filter('fastest').map('name'));
})
// run async
.run({ 'async': true });

Some files were not shown because too many files have changed in this diff Show More