错题本智能整理应用


欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

image-20260409194641234

image-20260409194646686

image-20260409194651200

image-20260409194655402

1.1 应用简介

错题本智能整理是一款教育学习类应用,帮助学生高效管理错题、智能分类整理、生成知识点卡片。支持拍照识别、自动分类、相似题推荐、考前复习等功能,让错题成为进步的阶梯。应用以智慧的蓝色为主色调,象征知识的积累与成长。涵盖错题管理、知识点卡片、相似题推荐、复习计划四大模块,帮助学生系统化学习。

1.2 核心功能

功能模块 功能描述 实现方式
错题录入 拍照识别、手动录入 表单管理
智能分类 学科、知识点自动分类 枚举定义
知识点卡片 错题关联知识点 卡片展示
相似题推荐 智能推荐练习题目 算法匹配
复习计划 艾宾浩斯遗忘曲线 定时提醒
统计分析 错题分布、掌握进度 图表展示

1.3 学科类型定义

序号 学科名称 Emoji 描述
1 数学 🔢 代数、几何、统计
2 语文 📖 阅读、写作、古诗文
3 英语 🔤 语法、词汇、阅读
4 物理 力学、电学、光学
5 化学 🧪 有机、无机、实验
6 生物 🧬 细胞、遗传、生态
7 历史 📜 古代、近代、现代
8 地理 🌍 自然、人文、区域

1.4 错题难度定义

序号 难度名称 Emoji 分值范围 描述
1 简单 1-3 基础概念题
2 中等 ⭐⭐ 4-6 综合应用题
3 困难 ⭐⭐⭐ 7-8 拓展提高题
4 极难 ⭐⭐⭐⭐ 9-10 竞赛挑战题

1.5 掌握程度定义

序号 程度名称 Emoji 复习次数 描述
1 未掌握 0 需要重点复习
2 初步理解 📖 1-2 需要巩固练习
3 基本掌握 3-4 偶尔复习即可
4 熟练掌握 5+ 可以减少复习
5 完全掌握 🏆 7+ 已攻克该题型

1.6 错题状态定义

序号 状态名称 Emoji 描述
1 待整理 📝 新录入待分类
2 学习中 📚 正在复习理解
3 已掌握 理解并会做
4 需强化 🔄 需要再次复习

1.7 知识点类型定义

序号 类型名称 Emoji 描述
1 概念理解 💡 基本概念和定义
2 公式应用 📐 公式推导和运用
3 计算技巧 🔢 计算方法和技巧
4 解题思路 🧠 思维方法和策略
5 易错陷阱 ⚠️ 常见错误和陷阱
6 综合应用 🔗 知识综合运用

1.8 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
自定义绘制 CustomPainter -
动画效果 AnimationController -
目标平台 鸿蒙OS / Web API 21+

1.9 项目结构

lib/
└── main_mistake_book.dart
    ├── MistakeBookApp              # 应用入口
    ├── SubjectType                 # 学科类型枚举
    ├── DifficultyLevel             # 难度等级枚举
    ├── MasteryLevel                # 掌握程度枚举
    ├── MistakeStatus               # 错题状态枚举
    ├── KnowledgeType               # 知识点类型枚举
    ├── Mistake                     # 错题模型
    ├── KnowledgePoint              # 知识点模型
    ├── SimilarQuestion             # 相似题模型
    ├── ReviewPlan                  # 复习计划模型
    ├── MistakeBookHomePage         # 主页面(底部导航)
    ├── _buildMistakesPage          # 错题页面
    ├── _buildKnowledgePage         # 知识点页面
    ├── _buildReviewPage            # 复习页面
    ├── _buildStatsPage             # 统计页面
    ├── MistakeCardPainter          # 错题卡片绘制器
    └── ProgressChartPainter        # 进度图表绘制器

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
MistakeBookHomePage

错题页

知识点页

复习页

统计页

错题列表

添加错题

错题详情

知识点卡片

关联错题

相似题推荐

今日复习

复习计划

复习记录

学科分布

掌握进度

复习统计

错题管理器
MistakeManager

知识点管理器
KnowledgeManager

复习调度器
ReviewScheduler

推荐引擎
RecommendEngine

Mistake
错题模型

KnowledgePoint
知识点模型

SimilarQuestion
相似题模型

ReviewPlan
复习计划

2.2 类图设计

has

has

has

has

has

references

contains

MistakeBookApp

+Widget build()

«enumeration»

SubjectType

+String label

+String emoji

+String description

+Color color

+math()

+chinese()

+english()

+physics()

+chemistry()

+biology()

+history()

+geography()

«enumeration»

DifficultyLevel

+String label

+String emoji

+int minValue

+int maxValue

+easy()

+medium()

+hard()

+extreme()

«enumeration»

MasteryLevel

+String label

+String emoji

+int minReviews

+notMastered()

+beginner()

+basic()

+proficient()

+mastered()

«enumeration»

MistakeStatus

+String label

+String emoji

+pending()

+learning()

+mastered()

+needReview()

Mistake

+String id

+String title

+SubjectType subject

+DifficultyLevel difficulty

+MasteryLevel mastery

+MistakeStatus status

+String content

+String correctAnswer

+String analysis

+List<String> knowledgePoints

+DateTime createdAt

+DateTime? lastReviewAt

+DateTime? nextReviewAt

+int reviewCount

KnowledgePoint

+String id

+String name

+SubjectType subject

+KnowledgeType type

+String description

+List<String> relatedMistakes

+int masteryCount

SimilarQuestion

+String id

+String content

+String answer

+String sourceMistakeId

+double similarity

ReviewPlan

+String id

+DateTime reviewDate

+List<String> mistakeIds

+bool isCompleted

+int completedCount

2.3 页面导航流程

错题

知识点

复习

统计

应用启动

错题页

底部导航

错题列表

知识点卡片

复习计划

数据分析

添加错题

查看详情

编辑分析

标记掌握

知识点详情

关联错题

相似题推荐

今日复习

复习错题

是否掌握?

更新状态

继续复习

学科分布

掌握进度

复习趋势

2.4 错题录入流程

推荐引擎 知识库 分类器 录入页 用户 推荐引擎 知识库 分类器 录入页 用户 拍照/手动输入 提交错题内容 识别学科和知识点 返回分类结果 请求相似题 返回推荐列表 返回完整信息 显示确认页面 确认保存 更新知识点关联 保存成功

三、核心模块设计

3.1 数据模型设计

3.1.1 学科类型枚举 (SubjectType)
enum SubjectType {
  math('数学', '🔢', '代数、几何、统计', Color(0xFF2196F3)),
  chinese('语文', '📖', '阅读、写作、古诗文', Color(0xFFE91E63)),
  english('英语', '🔤', '语法、词汇、阅读', Color(0xFF9C27B0)),
  physics('物理', '⚡', '力学、电学、光学', Color(0xFFFF9800)),
  chemistry('化学', '🧪', '有机、无机、实验', Color(0xFF4CAF50)),
  biology('生物', '🧬', '细胞、遗传、生态', Color(0xFF00BCD4)),
  history('历史', '📜', '古代、近代、现代', Color(0xFF795548)),
  geography('地理', '🌍', '自然、人文、区域', Color(0xFF607D8B));

  final String label;
  final String emoji;
  final String description;
  final Color color;
}
3.1.2 难度等级枚举 (DifficultyLevel)
enum DifficultyLevel {
  easy('简单', '⭐', 1, 3),
  medium('中等', '⭐⭐', 4, 6),
  hard('困难', '⭐⭐⭐', 7, 8),
  extreme('极难', '⭐⭐⭐⭐', 9, 10);

  final String label;
  final String emoji;
  final int minValue;
  final int maxValue;
}
3.1.3 错题模型 (Mistake)
class Mistake {
  final String id;              // 错题ID
  final String title;           // 错题标题
  final SubjectType subject;    // 所属学科
  final DifficultyLevel difficulty; // 难度等级
  MasteryLevel mastery;         // 掌握程度
  MistakeStatus status;         // 错题状态
  final String content;         // 题目内容
  final String correctAnswer;   // 正确答案
  final String analysis;        // 解题分析
  final List<String> knowledgePoints; // 关联知识点
  final DateTime createdAt;     // 创建时间
  DateTime? lastReviewAt;       // 上次复习时间
  DateTime? nextReviewAt;       // 下次复习时间
  int reviewCount;              // 复习次数
}
3.1.4 知识点模型 (KnowledgePoint)
class KnowledgePoint {
  final String id;              // 知识点ID
  final String name;            // 知识点名称
  final SubjectType subject;    // 所属学科
  final KnowledgeType type;     // 知识点类型
  final String description;     // 详细描述
  final List<String> relatedMistakes; // 关联错题
  int masteryCount;             // 掌握数量
}
3.1.5 学科分布示例
35% 20% 18% 12% 8% 4% 2% 1% 错题学科分布示例 数学 物理 英语 化学 语文 生物 历史 地理

3.2 页面结构设计

3.2.1 主页面布局

MistakeBookHomePage

IndexedStack

错题页

知识点页

复习页

统计页

NavigationBar

错题 Tab

知识点 Tab

复习 Tab

统计 Tab

3.2.2 错题页结构

错题页

SliverAppBar

快速统计

学科筛选

错题列表

添加按钮

总错题数

今日新增

待复习

学科标签

难度筛选

状态筛选

错题卡片

学科图标

题目摘要

难度标签

掌握状态

3.2.3 知识点页结构

知识点页

SliverAppBar

知识点统计

知识点列表

搜索框

总知识点

已掌握

待加强

知识点卡片

知识点名称

关联错题数

掌握进度

相似题入口

3.2.4 复习页结构

复习页

SliverAppBar

今日任务

复习计划

复习历史

待复习数

已完成

开始复习

艾宾浩斯曲线

复习提醒

计划列表

复习记录

掌握趋势

3.3 复习调度算法

1次

2次

3次

4次

5+次

获取错题

是否新错题?

设置首次复习
1天后

获取上次复习时间

加入复习队列

复习次数

2天后复习

4天后复习

7天后复习

15天后复习

30天后复习

生成复习计划

3.4 相似题推荐逻辑

练习

加入错题

选择错题

提取知识点

分析难度等级

搜索题库

找到相似题?

计算相似度

返回空列表

按相似度排序

返回推荐列表

展示相似题

用户选择

开始答题

添加到错题本


四、UI设计规范

4.1 配色方案

应用以智慧的蓝色为主色调,象征知识的积累与成长:

颜色类型 色值 用途
主色 #2196F3 (Blue) 导航、主题元素
辅助色 #64B5F6 错题页面
第三色 #42A5F5 知识点页面
强调色 #1E88E5 复习页面
成功色 #4CAF50 (Green) 已掌握标识
警告色 #FF9800 (Orange) 需复习标识
背景色 #0A0A1A 页面背景
卡片背景 #1A1A2E 错题卡片

4.2 学科配色方案

学科 色值 视觉效果
数学 #2196F3 理性蓝色
语文 #E91E63 文雅粉色
英语 #9C27B0 国际紫色
物理 #FF9800 能量橙色
化学 #4CAF50 实验绿色
生物 #00BCD4 生命青色
历史 #795548 历史棕色
地理 #607D8B 大地灰色

4.3 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
错题标题 16px Bold #FFFFFF
知识点 14px Medium 白色
难度标签 12px Regular 白色
统计数字 28px Bold 白色

4.4 组件规范

4.4.1 错题卡片
┌─────────────────────────────────────┐
│  🔢 二次函数最值问题                 │
│                                     │
│  数学 · 困难⭐⭐⭐                   │
│                                     │
│  已复习3次 · 掌握程度: 基本掌握✅    │
│                                     │
│  知识点: 二次函数、最值问题          │
│                                     │
│  [查看详情] [相似题] [标记掌握]     │
└─────────────────────────────────────┘
4.4.2 知识点卡片
┌─────────────────────────────────────┐
│  💡 二次函数                         │
│                                     │
│  概念理解 · 数学                     │
│                                     │
│  关联错题: 5道                       │
│  掌握进度: ████████░░ 80%           │
│                                     │
│  [查看错题] [相似题练习]             │
└─────────────────────────────────────┘
4.4.3 复习任务卡片
┌─────────────────────────────────────┐
│  📅 今日复习任务                     │
│                                     │
│  待复习: 8道    已完成: 3道          │
│                                     │
│  进度: ████████░░░░░░░░ 38%         │
│                                     │
│  [开始复习]                          │
└─────────────────────────────────────┘
4.4.4 统计图表
┌─────────────────────────────────────┐
│  📊 学科分布                         │
│                                     │
│  数学    ████████████████ 35道      │
│  物理    ██████████ 20道            │
│  英语    █████████ 18道             │
│  化学    ██████ 12道                │
│  其他    █████ 10道                 │
└─────────────────────────────────────┘
4.4.5 难度分布饼图
┌─────────────────────────────────────┐
│  📈 难度分布                         │
│                                     │
│       ┌───────┐                     │
│       │  简单  │ 20%                │
│       │ ████████│                    │
│       │ 中等  │ 45%                 │
│       │ ████████│                    │
│       │ 困难  │ 30%                 │
│       │ ████████│                    │
│       │ 极难  │ 5%                  │
│       └───────┘                     │
└─────────────────────────────────────┘

五、核心功能实现

5.1 错题录入实现

void _addMistake({
  required String title,
  required SubjectType subject,
  required DifficultyLevel difficulty,
  required String content,
  required String correctAnswer,
  required String analysis,
  required List<String> knowledgePoints,
}) {
  final mistake = Mistake(
    id: 'm_${DateTime.now().millisecondsSinceEpoch}',
    title: title,
    subject: subject,
    difficulty: difficulty,
    content: content,
    correctAnswer: correctAnswer,
    analysis: analysis,
    knowledgePoints: knowledgePoints,
    status: MistakeStatus.pending,
    mastery: MasteryLevel.notMastered,
    nextReviewAt: DateTime.now().add(const Duration(days: 1)),
  );

  setState(() {
    _mistakes.insert(0, mistake);
    _updateKnowledgePoints(mistake);
  });
}

5.2 复习调度实现

DateTime _calculateNextReview(Mistake mistake) {
  final baseDate = mistake.lastReviewAt ?? mistake.createdAt;
  
  switch (mistake.reviewCount) {
    case 0:
      return baseDate.add(const Duration(days: 1));
    case 1:
      return baseDate.add(const Duration(days: 2));
    case 2:
      return baseDate.add(const Duration(days: 4));
    case 3:
      return baseDate.add(const Duration(days: 7));
    case 4:
      return baseDate.add(const Duration(days: 15));
    default:
      return baseDate.add(const Duration(days: 30));
  }
}

5.3 掌握程度更新实现

void _updateMastery(Mistake mistake, bool isCorrect) {
  setState(() {
    mistake.reviewCount++;
    mistake.lastReviewAt = DateTime.now();
    mistake.nextReviewAt = _calculateNextReview(mistake);

    if (isCorrect) {
      if (mistake.reviewCount >= 7) {
        mistake.mastery = MasteryLevel.mastered;
        mistake.status = MistakeStatus.mastered;
      } else if (mistake.reviewCount >= 5) {
        mistake.mastery = MasteryLevel.proficient;
      } else if (mistake.reviewCount >= 3) {
        mistake.mastery = MasteryLevel.basic;
      } else {
        mistake.mastery = MasteryLevel.beginner;
      }
    } else {
      mistake.status = MistakeStatus.needReview;
      mistake.reviewCount = (mistake.reviewCount / 2).floor();
    }
  });
}

5.4 相似题推荐实现

List<SimilarQuestion> _getSimilarQuestions(Mistake mistake) {
  return _similarQuestions.where((q) {
    if (q.sourceMistakeId == mistake.id) return true;
    
    final sameSubject = _mistakes.firstWhere(
      (m) => m.id == q.sourceMistakeId,
      orElse: () => mistake,
    ).subject == mistake.subject;
    
    final hasCommonKnowledge = q.relatedKnowledgePoints
        .any((k) => mistake.knowledgePoints.contains(k));
    
    return sameSubject && hasCommonKnowledge;
  }).toList()
    ..sort((a, b) => b.similarity.compareTo(a.similarity));
}

5.5 统计分析实现

Map<SubjectType, int> _getSubjectDistribution() {
  final distribution = <SubjectType, int>{};
  for (final subject in SubjectType.values) {
    distribution[subject] = _mistakes
        .where((m) => m.subject == subject)
        .length;
  }
  return distribution;
}

Map<MasteryLevel, int> _getMasteryDistribution() {
  final distribution = <MasteryLevel, int>{};
  for (final level in MasteryLevel.values) {
    distribution[level] = _mistakes
        .where((m) => m.mastery == level)
        .length;
  }
  return distribution;
}

六、交互设计

6.1 错题录入流程

存储 分类器 录入页 用户 存储 分类器 录入页 用户 点击添加错题 显示录入表单 输入题目信息 请求智能分类 返回建议分类 确认保存 保存错题 保存成功

6.2 复习流程

正确

错误

打开复习页

查看今日任务

开始复习

显示错题

用户答题

更新掌握程度

标记需强化

还有错题?

显示复习结果

生成复习报告

6.3 知识点关联流程

存在

不存在

创建错题

提取知识点

关联已有知识点

创建新知识点

更新统计


七、扩展功能规划

7.1 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 2024-03-24 2024-03-31 基础UI框架 错题管理功能 知识点关联 复习计划功能 相似题推荐 统计分析 OCR识别 AI智能分析 云端同步 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 错题本智能整理应用开发计划

7.2 功能扩展建议

7.2.1 OCR识别

识别功能:

  • 拍照自动识别题目
  • 手写内容识别
  • 公式识别转换
  • 图片裁剪优化
7.2.2 AI智能分析

AI功能:

  • 自动提取知识点
  • 智能生成解析
  • 错题原因分析
  • 学习建议生成
7.2.3 社交学习

社交功能:

  • 错题分享交流
  • 解题讨论区
  • 学习小组
  • 排行榜激励

八、注意事项

8.1 开发注意事项

  1. 数据持久化:错题数据需本地持久化存储

  2. 复习调度:艾宾浩斯曲线算法需准确计算

  3. 知识点关联:错题与知识点需双向关联

  4. 相似度计算:相似题推荐需合理计算相似度

  5. 状态同步:掌握程度与复习次数需同步更新

8.2 常见问题

问题 原因 解决方案
复习计划不准 时间计算错误 检查日期逻辑
知识点丢失 关联未保存 检查双向绑定
相似题不准 匹配条件宽松 优化匹配算法
掌握程度异常 计数器错误 检查更新逻辑
统计数据不对 筛选条件错误 检查统计逻辑

8.3 使用技巧

📚 错题本使用技巧 📚

录入技巧

  • 及时录入:当天错题当天整理
  • 详细分析:写清楚错误原因
  • 标注重点:标记易错点和难点
  • 关联知识:链接相关知识点

复习技巧

  • 按时复习:遵循复习计划
  • 先易后难:从简单错题开始
  • 举一反三:做相似题巩固
  • 定期总结:分析错误规律

提分策略

  • 重点攻克高频错题
  • 建立知识体系框架
  • 总结解题方法和技巧
  • 保持错题本整洁有序

九、运行说明

9.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+
Web浏览器 Chrome 90+

9.2 运行命令

# 查看可用设备
flutter devices

# 运行到Web服务器
flutter run -d web-server -t lib/main_mistake_book.dart --web-port 8150

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_mistake_book.dart

# 代码分析
flutter analyze lib/main_mistake_book.dart

十、总结

错题本智能整理应用通过错题管理、知识点卡片、相似题推荐、复习计划四大模块,为学生提供了一个高效的错题管理平台。应用支持8种学科类型、4种难度等级、5种掌握程度、4种错题状态,帮助学生系统化管理错题,科学复习提升。

核心功能涵盖错题录入与分类、知识点关联与卡片、相似题推荐与练习、复习计划与调度四大模块。学科类型覆盖语数英物化生史地八大学科;难度等级从简单到极难,精准定位题目难度;掌握程度从未掌握到完全掌握,清晰反映学习进度;复习计划采用艾宾浩斯遗忘曲线,科学安排复习时间。

应用采用 Material Design 3 设计规范,以智慧的蓝色为主色调,象征知识的积累与成长。通过本应用,希望能够帮助学生高效管理错题,科学复习提升,让错题成为进步的阶梯。

错题本智能整理——让错题成为进步的阶梯


欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐