# dcpx **Repository Path**: GhostLeeLee/dcpx ## Basic Information - **Project Name**: dcpx - **Description**: 单词拼写辅助练习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-05 - **Last Updated**: 2025-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README # 🎓 CET-4 英语单词智能训练系统 ## 📖 项目简介 这是一个基于 Python + Tkinter 开发的专业英语单词学习系统,专为CET-4考试准备而设计。系统采用科学的学习方法,结合智能算法,为用户提供个性化的单词学习体验。 ## ✨ 核心功能 ### 🔐 用户管理系统 - **安全注册登录**:bcrypt 密码加密,保障账户安全 - **密码重置功能**:忘记密码可通过系统重置 - **多用户支持**:每个用户独立的学习记录和进度 ### 📚 智能学习模式 #### 1. 单词选择题模式 - 根据中文释义选择正确的英文单词 - 智能生成干扰选项,提高辨识能力 - 大小写不敏感,自动去除首尾空格 - 实时显示学习进度和单词状态 #### 2. 拼写填空模式 - 根据中文释义拼写英文单词 - **字母级别反馈**:正确字母显示绿色,错误字母显示红色 - **智能提示系统**:提供首字母和长度提示,支持更多提示 - **多次尝试机制**:每个单词最多尝试3次 - **视觉反馈**:输入框绿色闪烁表示正确 - **跳过功能**:可跳过困难单词继续学习 #### 3. 单词闯关打卡 四阶段递进式学习: - **阶段1**:单词学习(三列展示50个单词和释义) - **阶段2**:选择题测试(累计答对5题进入下一阶段) - **阶段3**:提示拼写(显示首字母和长度提示) - **阶段4**:无提示拼写(纯拼写挑战) - **容错机制**:累计答错5题可选择重新学习 ### 🧠 智能学习系统 #### 单词状态管理 - **熟练度追踪**:每个单词的掌握程度实时更新 - **错误计数**:记录每个单词的错误次数 - **复习优先级**:基于错误频率动态调整学习优先级 - **自动标记**:连续正确3次自动标记为"已掌握" #### 自适应学习算法 - **动态选词**:优先选择高错误率单词进行练习 - **权重计算**:错误次数越多,出现概率越高 - **智能复习**:基于遗忘曲线安排复习计划 - **个性化推荐**:根据学习状态推荐合适的练习内容 ### 📊 智能错题本系统 #### 分类管理 - **按错误频率分类**:高错误率(3次以上)、中等错误率(2次)、低错误率(1次) - **优先级标识**:红色(高)、橙色(中)、灰色(低) - **可视化展示**:清晰的错题分布和统计信息 #### 专项功能 - **重点复习模式**:针对高优先级错题的专项训练 - **拼写重点复习**:专门的拼写练习模式 - **进度跟踪**:实时显示复习进度和正确率 ### 📈 学习状态分析 #### 综合统计 - **基本学习统计**:总学习单词数、掌握率、错题数量 - **分题型分析**:选择题vs拼写题表现对比 - **最近表现**:最近7天的学习数据和趋势 - **学习建议**:基于表现给出个性化建议 #### 学习评估 - **掌握率计算**:科学的掌握程度评估 - **表现等级**:优秀(80%+)、良好(60%+)、需加强(<60%) - **题型偏好分析**:识别用户的强项和弱项 ### 🎯 增强用户体验 #### 界面特性 - **全屏显示**:沉浸式学习体验 - **自适应布局**:支持不同屏幕分辨率的自动缩放 - **现代化UI**:美观的界面设计和颜色搭配 - **中文界面**:完全本土化的用户界面 #### 交互体验 - **键盘快捷键**:Enter键快速提交答案 - **即时反馈**:答题后立即显示结果和反馈 - **进度显示**:实时显示练习进度和学习状态 - **智能提示**:贴心的学习指导和提示信息 - **错误容忍**:友好的错误处理和重试机制 ## 🚀 技术特性 ### 技术栈 - **Python 3.x**:主要开发语言 - **Tkinter**:GUI界面框架 - **bcrypt**:密码加密 - **JSON**:数据存储格式 ### 数据管理 - **本地存储**:所有数据保存在本地,保护隐私 - **文件结构**: ``` training_data/ ├── training_data_<用户名>.json # 用户训练记录 └── word_status_<用户名>.json # 单词学习状态 users.json # 用户账户信息 ``` ### 性能优化 - **内存高效**:优化的数据结构和算法 - **响应迅速**:快速的界面切换和数据加载 - **稳定可靠**:完整的错误处理机制 - **字体优化**:自适应字体大小和样式系统 ## 🧮 核心算法说明 ### 1. 自适应学习算法 ```python def get_adaptive_word_list(username, all_words, limit=50): """根据学习状态动态选择单词列表""" ``` **算法原理**: - **权重分配**:复习单词70%,新单词30%的动态比例 - **优先级排序**:基于错误频率和复习优先级进行排序 - **个性化推荐**:根据用户学习状态智能选择练习内容 **核心逻辑**: 1. 分析用户历史学习数据,分类单词状态 2. 计算每个单词的复习优先级权重 3. 动态调整练习内容比例,确保学习效果 ### 2. 单词掌握度评估算法 ```python def update_word_status(username, word, is_correct): """智能更新单词掌握状态""" ``` **算法特性**: - **多维度评估**:正确次数、错误次数、时间间隔综合评估 - **动态阈值**:连续正确3次标记为"已掌握" - **优先级计算**:`priority = min(5.0, 1.0 + error_count * 0.5)` **状态机制**: ``` 未学习 → 学习中 → 已掌握 ↓ ↓ ↓ 错误反馈 动态调整 降低频率 ``` ### 3. 智能复习优先级算法 ```python def get_review_words(username, limit=50): """基于遗忘曲线的复习算法""" ``` **算法核心**: - **错误权重**:错误次数越多,复习优先级越高 - **时间衰减**:结合最后学习时间进行优先级调整 - **分层管理**:高(3+错误)、中(2错误)、低(1错误)三级分类 ### 4. 屏幕自适应算法 ```python class ScreenMetrics: def __init__(self): self.scale = min(self.scale_w, self.scale_h) ``` **技术实现**: - **基准分辨率**:以1920×1080为设计基准 - **比例计算**:`scale = min(width_ratio, height_ratio)` - **元素缩放**:所有UI元素按比例自动调整 **适配策略**: - 保持界面比例不变形 - 确保在不同分辨率下的一致体验 - 动态字体大小调整 ### 5. 字母级拼写反馈算法 ```python def show_letter_feedback(user_input, correct_word): """逐字母比较并提供视觉反馈""" ``` **比较逻辑**: - **逐位比较**:对用户输入和正确答案进行字符级对比 - **颜色编码**:正确字母绿色(#67C23A),错误字母红色(#F56C6C) - **长度处理**:自动处理输入长度与目标长度不匹配的情况 **视觉反馈**: ``` 用户输入: "helo" 正确答案: "hello" 反馈显示: [h绿][e绿][l绿][o红][_红] ``` ### 6. 密码安全算法 ```python import bcrypt hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()) ``` **安全特性**: - **Bcrypt加密**:使用工业级密码散列算法 - **盐值随机**:每个密码使用独特的盐值 - **防彩虹表**:有效防止彩虹表攻击 ### 7. 数据持久化机制 **文件结构设计**: ```json { "word": "example", "correct_count": 3, "error_count": 1, "mastered": true, "last_attempt": "2024-01-01T12:00:00", "review_priority": 0.1 } ``` **存储策略**: - **分用户存储**:每个用户独立的数据文件 - **增量更新**:只更新变化的数据,提高性能 - **数据完整性**:JSON格式确保数据结构完整性 ### 8. 闯关进度算法 **阶段递进逻辑**: ```python # 累计机制:每阶段需答对5题才能进入下一阶段 if correct_count >= 5: advance_to_next_phase() ``` **容错机制**: ```python # 容错设计:答错5题提供重新学习机会 if wrong_count >= 5: offer_restudy_option() ``` ## 🛠️ 最新修复和优化 ### v2.2 (当前版本) - ✅ **优化打包配置**:exe文件输出到项目根目录,确保数据文件访问正常 - ✅ **修复函数命名冲突**:解决show_completion_summary重复定义问题 - ✅ **改进程序退出**:优化tkinter退出处理,避免主题相关错误 - ✅ **增强打包脚本**:支持清理构建、自动测试等功能 - ✅ **完善用户体验**:exe文件可直接运行,无需移动到特定目录 ### v2.1 (稳定版本) - ✅ **移除训练记录查看功能**:简化界面,专注核心学习功能 - ✅ **修复字体系统**:解决get_font函数参数错误,支持粗体样式 - ✅ **优化错题本显示**:修复数据渲染问题,确保正常显示 - ✅ **改进闯关模式**:增强拼写反馈和提示系统 - ✅ **界面稳定性**:修复ttk组件相关的错误 - ✅ **用户体验优化**:改进按钮响应和界面切换 ### v2.0 (智能化版本) - ✅ 新增智能单词状态管理系统 - ✅ 实现自适应学习算法 - ✅ 增强错题本功能(分类、专项练习) - ✅ 添加学习数据分析 - ✅ 优化拼写反馈(字母级别标注) - ✅ 实现动态复习策略 ### v1.0 (基础版本) - ✅ 基本的选择题和拼写题功能 - ✅ 用户注册登录系统 - ✅ 基础的训练记录功能 - ✅ 简单的错题本功能 ## 📦 打包成EXE使用说明 ### 一键打包(推荐方式) #### 方法1:使用批处理文件(Windows) ```bash 双击运行 "打包.bat" ``` - ✅ 自动检查Python环境 - ✅ 使用清华镜像安装依赖 - ✅ 执行完整打包流程 #### 方法2:基础Python脚本 ```bash python build_exe.py ``` #### 方法3:高级Python脚本(推荐) ```bash python build_exe_advanced.py ``` **高级脚本特性:** - 🚀 **多种镜像源选择**:清华、阿里云、中科大、豆瓣、官方源 - 📦 **两种打包模式**:单文件(.exe)和目录模式 - 🔧 **自动检测**:图标文件和数据文件自动包含 - 🧪 **自动测试**:打包完成后可选择测试运行 - 🎯 **输出优化**:exe文件直接生成在项目根目录 ### 镜像源配置 #### 可用镜像源 1. **清华大学镜像**(推荐)- `https://pypi.tuna.tsinghua.edu.cn/simple/` 2. **阿里云镜像** - `https://mirrors.aliyun.com/pypi/simple/` 3. **中科大镜像** - `https://pypi.mirrors.ustc.edu.cn/simple/` 4. **豆瓣镜像** - `https://pypi.douban.com/simple/` 5. **官方源** - `https://pypi.org/simple/` #### 手动配置镜像 ```bash # 临时使用镜像 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 永久配置pip镜像 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/ pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn ``` ### 手动打包流程 #### 1. 安装PyInstaller ```bash pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/ ``` #### 2. 安装项目依赖 ```bash pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ ``` #### 3. 执行打包命令 ```bash # 单文件模式 pyinstaller --onefile --windowed --name="英语单词训练系统" --add-data="cet-4_json;cet-4_json" --distpath=. main.py # 目录模式 pyinstaller --onedir --windowed --name="英语单词训练系统" --add-data="cet-4_json;cet-4_json" --distpath=. main.py ``` ### 打包模式对比 #### 单文件模式 (--onefile) ✅ **优点:** - 只生成一个exe文件,分发方便 - 用户只需双击exe即可运行 - 不需要其他附加文件 ❌ **缺点:** - 首次启动较慢(需要解压内部文件) - 文件大小较大(50-100MB) #### 目录模式 (--onedir) ✅ **优点:** - 启动速度快,无需解压 - 便于调试和查看依赖 - 可以手动替换数据文件 ❌ **缺点:** - 生成多个文件和文件夹 - 分发时需要压缩整个目录 ### 打包参数详解 | 参数 | 说明 | 推荐使用 | |------|------|----------| | `--onefile` | 打包成单个exe文件 | ✅ 分发方便 | | `--onedir` | 打包成包含依赖的文件夹 | ✅ 调试方便 | | `--windowed` | 隐藏控制台窗口 | ✅ GUI程序必选 | | `--name` | 设置exe文件名 | ✅ 自定义名称 | | `--add-data` | 包含数据文件夹 | ✅ 包含词汇数据 | | `--hidden-import` | 添加隐藏导入模块 | ✅ 修复导入问题 | | `--distpath=.` | 输出到当前目录 | ✅ 避免文件路径问题 | | `--clean` | 清理临时文件 | ✅ 保持环境整洁 | ### 打包结果结构 #### 单文件模式输出 ``` 项目根目录/ ├── 英语单词训练系统.exe # 📁 主程序文件 (约50-100MB) ├── cet-4_json/ # 📂 词汇数据文件夹 ├── training_data/ # 📂 用户数据文件夹(自动生成) └── users.json # 📄 用户账户文件(自动生成) ``` #### 目录模式输出 ``` 项目根目录/ ├── 英语单词训练系统/ # 📂 程序目录 │ ├── 英语单词训练系统.exe # 📁 主程序 │ ├── _internal/ # 📂 依赖文件 │ └── cet-4_json/ # 📂 词汇数据 ├── training_data/ # 📂 用户数据文件夹 └── users.json # 📄 用户账户文件 ``` ### 性能优化建议 #### 1. 减小文件大小 ```bash # 使用虚拟环境(推荐) python -m venv venv venv\Scripts\activate pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 只打包必要的模块(高级用法) pyinstaller --onefile --exclude-module tkinter.test main.py ``` #### 2. 网络优化配置 ```bash # 网络不稳定时增加超时 pip install --timeout 1000 -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 使用代理(如需要) pip install --proxy http://user:password@proxyserver:port package_name ``` ### 分发部署说明 #### 最终分发包结构 ``` 英语单词训练系统_v2.2/ ├── 英语单词训练系统.exe # 主程序(必需) ├── cet-4_json/ # 词汇数据(必需) ├── 使用说明.txt # 用户说明(可选) └── README.md # 完整说明(可选) ``` #### 重要注意事项 1. **🎯 exe文件位置**:exe文件现在直接生成在项目根目录,确保能正常访问数据文件 2. **💾 数据文件**:词汇数据已内置在exe中,但同目录的cet-4_json文件夹优先级更高 3. **⚡ 首次运行**:单文件模式首次启动需要5-10秒解压时间 4. **📊 用户数据**:training_data文件夹和users.json将自动在exe同目录生成 5. **🔒 无需Python**:打包后的exe文件包含所有依赖,用户无需安装Python环境 ### 常见问题排查 #### 问题1:下载速度慢或失败 ```bash # 解决方案:切换镜像源 python build_exe_advanced.py # 选择不同镜像源尝试 ``` #### 问题2:打包失败 - 模块导入错误 ```bash # 解决方案:添加隐藏导入 --hidden-import=matplotlib.backends.backend_tkagg --hidden-import=PIL._tkinter_finder ``` #### 问题3:exe文件无法运行 ```bash # 检查方案: 1. 确保exe文件和cet-4_json在同一目录 2. 检查杀毒软件是否拦截 3. 尝试以管理员身份运行 4. 查看Windows事件查看器中的错误日志 ``` #### 问题4:数据文件找不到 ```bash # 解决方案:确认文件结构 英语单词训练系统.exe cet-4_json/ ├── CET4_1.json ├── CET4_2.json └── ... ``` #### 问题5:打包文件过大 ```bash # 优化方案: 1. 使用 --onedir 模式替代 --onefile 2. 在虚拟环境中打包,减少不必要的依赖 3. 排除测试模块:--exclude-module tkinter.test ``` ### 高级配置选项 #### 创建spec文件(高级用户) ```bash # 生成spec文件 pyinstaller --onefile main.py # 编辑main.spec文件后重新打包 pyinstaller main.spec ``` #### 添加图标和版本信息 ```bash # 添加图标(需要icon.ico文件) --icon=icon.ico # 在spec文件中添加版本信息 version='1.0.0', description='CET-4英语单词训练系统' ``` ### 🎯 一键使用流程(推荐) 对于普通用户,建议按以下步骤操作: 1. **📥 下载项目**:获取完整项目文件 2. **🚀 一键打包**:双击运行`打包.bat`或执行`python build_exe_advanced.py` 3. **⚙️ 选择配置**:选择镜像源(推荐清华)和打包模式(推荐单文件) 4. **⏳ 等待完成**:首次打包约需5-15分钟(取决于网络速度) 5. **✅ 测试运行**:打包完成后测试exe文件是否正常运行 6. **📦 分发部署**:将exe文件和必要数据文件打包分发 ### 打包特性总结 - ✅ **智能输出**:exe文件直接生成在项目根目录,避免路径问题 - ✅ **数据安全**:用户数据自动保存在exe文件同目录 - ✅ **一键操作**:提供批处理文件和Python脚本,操作简单 - ✅ **多镜像源**:支持5种不同镜像源,确保下载成功 - ✅ **自动测试**:打包完成后可选择测试运行 - ✅ **清理机制**:自动清理临时文件和构建缓存 - ✅ **错误处理**:完善的错误提示和解决方案 ## 📋 安装和使用 ### 系统要求 - Python 3.6+ - Windows/macOS/Linux ### 安装步骤 2. **安装依赖** ```bash pip install -r requirements.txt ``` 依赖包括: - matplotlib>=3.5.0 - bcrypt>=3.2.0 - tkinter (Python标准库,无需单独安装) 3. **运行程序** ```bash python main.py ``` ### 使用说明 1. **首次使用** - 点击"注册"创建新账户 - 输入用户名、密码确认注册 - 使用注册的账户登录 2. **开始学习** - 选择"单词选择题"进行基础选择题练习 - 选择"拼写填空"进行拼写训练 - 选择"单词闯关打卡"进行系统性四阶段学习 3. **错题复习** - 进入"智能错题本"查看分类错题 - 使用"开始重点复习"功能进行针对性训练 - 查看错误频率和优先级分析 4. **学习分析** - 查看"学习状态"获取详细学习分析 - 了解基本统计和最近表现 - 获取个性化学习建议 ## 🔧 自定义配置 ### 学习参数调整 - 修改 `main.py` 中的相关参数: - 每次练习的单词数量(默认50个) - 掌握标准(连续正确次数,默认3次) - 高频错题阈值(默认3次错误) - 拼写尝试次数(默认3次) ### 界面定制 - 调整字体大小和颜色配置 - 修改界面布局和按钮样式 - 自定义屏幕自适应参数 ## 📞 技术支持 如遇到问题: 1. 确保Python版本为3.6+ 2. 检查依赖包是否正确安装 3. 确认cet-4_json文件夹包含单词数据 4. 查看终端输出的错误信息