You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Pair/doc/README.md

24 KiB

小初高数学学习软件 - 完整项目文档

目录(所使用的代码规范地址在末尾)

📱 前端部分

🔧 后端部分

📋 部署与问题


前端部分

前端项目概述

本前端基于 Electron提供从注册→密码设置→年级选择→输入题数→答题页→评分页的完整界面流程。已内置测试功能,无需后端即可验证所有基础功能。

前端功能特性

  • 用户注册与邮箱验证码
  • 密码设置与修改
  • 用户头像上传
  • 用户名修改
  • 年级选择(小学/初中/高中)
  • 数学题目生成与答题
  • 成绩统计与显示
  • 桌面应用打包

前端技术栈

  • 框架: Electron
  • 前端: HTML5 + CSS3 + JavaScript (ES6+)
  • 样式: 原生CSS符合Google CSS规范
  • 代码规范: Google JavaScript/CSS/HTML规范

前端项目结构

src/frontend/
├─ api/
│   ├─ httpApi.js          # HTTP接口层
│   └─ mockApi.js          # 模拟数据接口
├─ dist/                   # 打包输出目录
├─ electron-main.js        # Electron主进程
├─ preload.js             # 预加载脚本
├─ index.html             # 主页面
├─ renderer.js            # 前端逻辑
├─ styles.css             # 样式文件
├─ package.json           # 项目配置
└─ package-lock.json      # 依赖锁定

前端快速开始

1. 环境要求

  • Node.js 18+
  • npm 或 yarn

2. 安装依赖

cd src/frontend
npm install

3. 开发模式运行

npm run dev

4. 打包发布

npm run build

产物位于 dist/ 目录,默认生成 NSIS 安装包。

前端功能验证流程

测试模式

当前为测试模式TEST_MODE = true),可以:

  • 模拟邮箱验证码发送(界面直接显示验证码)
  • 模拟用户注册和密码设置
  • 自动生成小初高数学题目
  • 完整的答题和评分流程

1. 注册验证

  • 输入用户名(必填,需唯一)
  • 输入邮箱(如 test@example.com
  • 点击"获取验证码":界面会显示验证码(如 123456
  • 输入显示的验证码,点击"注册"

2. 密码设置验证

  • 设置密码6-10位含大小写字母和数字Test123
  • 确认两次输入一致
  • 点击"确认设置"

3. 用户信息管理

  • 注册完成后,右上角显示"头像+用户名+修改按钮"
  • 点击头像可选择本地图片更换
  • 点击"修改用户名"可更改用户名(需唯一)
  • 点击"修改密码"可更改密码

4. 答题功能验证

  • 选择年级(小学/初中/高中)
  • 输入题目数量10-30
  • 点击"生成试卷"
  • 逐题作答,查看最终分数

前端后端对接指南

1. 切换到真实后端

编辑 api/httpApi.js

const BASE_URL = 'http://127.0.0.1:8080'; // 你的后端地址
const TEST_MODE = false; // 关闭测试模式

2. 后端接口要求

你的后端需要实现以下接口(返回 JSON 格式):

发送验证码

  • 接口POST /api/send-code
  • 请求体{ "email": "user@example.com", "username": "用户名" }
  • 返回{ "ok": true, "message": "验证码已发送" }

用户注册

  • 接口POST /api/register
  • 请求体{ "email": "user@example.com", "username": "用户名", "code": "123456" }
  • 返回{ "ok": true, "message": "注册成功" }

设置密码

  • 接口POST /api/set-password
  • 请求体{ "email": "user@example.com", "password": "密码" }
  • 返回{ "ok": true, "message": "密码设置成功" }

修改密码

  • 接口POST /api/change-password
  • 请求体{ "email": "user@example.com", "oldPassword": "原密码", "newPassword": "新密码" }
  • 返回{ "ok": true, "message": "密码修改成功" }

修改用户名

  • 接口POST /api/change-username
  • 请求体{ "email": "user@example.com", "username": "新用户名" }
  • 返回{ "ok": true, "message": "用户名修改成功" }

获取题目

  • 接口GET /api/questions?grade=小学&count=10
  • 返回{ "ok": true, "data": [题目数组], "message": "题目生成成功" }

3. 题目数据格式

{
  "ok": true,
  "data": [
    {
      "id": "小学-1",
      "stem": "计算2 + 3",
      "options": [
        { "key": "A", "text": "5" },
        { "key": "B", "text": "6" },
        { "key": "C", "text": "4" },
        { "key": "D", "text": "7" }
      ],
      "answer": "A"
    }
  ]
}

前端核心模块说明

1. 主进程模块 (electron-main.js)

功能概述

Electron主进程模块负责创建和管理应用程序窗口处理系统级事件管理应用程序生命周期。

核心功能

  • 窗口管理: 创建和管理应用窗口
  • 菜单配置: 应用程序菜单设置
  • 安全配置: 安全策略和权限控制
  • 生命周期管理: 应用程序启动和关闭

窗口配置

const mainWindow = new BrowserWindow({
  width: 1200,
  height: 800,
  webPreferences: {
    nodeIntegration: false,
    contextIsolation: true,
    preload: path.join(__dirname, 'preload.js')
  }
});

2. 渲染进程模块 (renderer.js)

功能概述

渲染进程模块是前端逻辑的核心负责处理用户界面交互、数据管理、API调用等功能。

核心功能

  • 界面管理: 页面切换和状态管理
  • 用户交互: 表单处理、事件监听
  • 数据管理: 本地数据存储和同步
  • API调用: 与后端服务通信

主要功能模块

// 用户认证模块
class AuthManager {
  // 用户登录
  async login(account, password)
  
  // 用户注册
  async register(userData)
  
  // 密码设置
  async setPassword(password)
}

// 题目管理模块
class QuestionManager {
  // 获取题目
  async getQuestions(grade, count)
  
  // 提交答案
  async submitAnswer(questionId, answer)
  
  // 获取成绩
  async getScore()
}

// 用户信息管理模块
class UserManager {
  // 修改用户名
  async changeUsername(newUsername)
  
  // 修改密码
  async changePassword(oldPassword, newPassword)
  
  // 上传头像
  async uploadAvatar(file)
}

界面状态管理

  • 页面切换: 登录页、注册页、答题页等
  • 状态同步: 用户信息、答题进度
  • 错误处理: 网络错误、验证错误等

3. 预加载脚本 (preload.js)

功能概述

预加载脚本负责在渲染进程中安全地暴露Node.js API确保应用程序的安全性。

预加载安全特性

  • API暴露: 安全地暴露必要的Node.js API
  • 权限控制: 限制渲染进程的权限
  • 数据验证: 输入数据验证和清理

暴露的API

contextBridge.exposeInMainWorld('electronAPI', {
  // 文件操作
  selectFile: () => ipcRenderer.invoke('select-file'),
  
  // 窗口操作
  minimizeWindow: () => ipcRenderer.invoke('minimize-window'),
  closeWindow: () => ipcRenderer.invoke('close-window')
});

4. API接口层 (api/)

HTTP接口模块 (httpApi.js)

负责与后端服务通信处理HTTP请求和响应。

核心功能

  • 请求封装: 统一的HTTP请求处理
  • 错误处理: 网络错误和业务错误处理
  • 数据转换: 请求和响应数据格式转换
  • 缓存管理: 请求缓存和优化

接口方法

class HttpAPI {
  // 发送验证码
  async sendCode(email, username)
  
  // 用户注册
  async register(userData)
  
  // 设置密码
  async setPassword(email, password)
  
  // 获取题目
  async getQuestions(grade, count)
  
  // 用户信息管理
  async changeUsername(email, username)
  async changePassword(email, oldPassword, newPassword)
}

模拟接口模块 (mockApi.js)

提供测试模式下的模拟数据,支持离线开发和测试。

模拟功能

  • 验证码模拟: 界面显示验证码
  • 用户数据模拟: 本地用户数据管理
  • 题目生成模拟: 本地题目生成
  • 成绩计算模拟: 本地成绩计算

5. 样式系统 (styles.css)

设计系统

  • 颜色系统: 统一的颜色变量和主题
  • 字体系统: 字体大小、行高、字重规范
  • 间距系统: 统一的间距和布局规范
  • 组件样式: 可复用的组件样式

CSS变量系统

:root {
  --bg: #0e1116;
  --border: #202734;
  --danger: #ef4444;
  --muted: #9aa4b2;
  --panel: #151a21;
  --primary: #3b82f6;
  --primary-2: #2563eb;
  --success: #22c55e;
  --text: #e8edf3;
}

响应式设计

  • 移动端适配: 响应式布局设计
  • 窗口适配: 不同窗口尺寸适配
  • 主题支持: 深色主题设计

6. 用户界面组件

页面组件

  • 登录页面: 用户认证界面
  • 注册页面: 用户注册界面
  • 设置密码页面: 密码设置界面
  • 年级选择页面: 年级选择界面
  • 答题页面: 题目答题界面
  • 成绩页面: 成绩显示界面

交互组件

  • 表单组件: 输入框、按钮、选择器
  • 模态框组件: 确认对话框、提示框
  • 导航组件: 页面导航和状态指示
  • 反馈组件: 成功提示、错误提示

用户体验

  • 加载状态: 加载动画和状态提示
  • 错误处理: 友好的错误提示
  • 操作反馈: 操作成功和失败反馈
  • 数据验证: 实时表单验证

前端代码规范

  • 所有JavaScript文件符合Google JavaScript规范
  • CSS文件符合Google CSS规范
  • HTML文件符合Google HTML规范
  • 使用2空格缩进
  • 属性按字母顺序排列
  • 统一的命名规范
  • 完整的注释说明

后端部分

后端项目概述

基于 Node.js 的后端服务,提供用户管理、邮箱验证、题目生成等核心功能。支持多邮箱服务商,具备完整的用户生命周期管理。

后端功能特性

  • 用户注册与邮箱验证码发送
  • 密码加密存储SHA256
  • 用户信息管理(用户名、密码修改)
  • 数学题目智能生成
  • 多邮箱服务商支持
  • 数据持久化存储

后端技术栈

  • 运行环境: Node.js
  • 框架: 原生 Node.js + Express
  • 数据存储: JSON文件
  • 邮箱服务: Nodemailer
  • 加密: crypto (SHA256)
  • 代码规范: Google JavaScript规范

后端项目结构

src/backend/
  ├─ data/
  │   └─ users.json            # 用户数据文件
  ├─ utils/

│   ├─ user-manager.js       # 用户管理模块
│   ├─ multi-email-service.js # 多邮箱服务
│   └─ question-generator.js # 题目生成器
├─ email-config.js           # 邮箱配置
├─ server.js                 # 主服务器文件
├─ package.json              # 项目配置
└─ package-lock.json         # 依赖锁定

后端环境配置

1. 环境变量

src/backend 目录下创建 .env 文件:

PORT=8080
NODE_ENV=development
SMTP_QQ_USER=your_qq@example.com
SMTP_QQ_PASS=your_smtp_password
SMTP_163_USER=your_163@example.com
SMTP_163_PASS=your_smtp_password
MAIL_FROM_NAME=数学学习软件
DATA_PATH=./data/users.json

2. 邮箱服务配置

支持多个邮箱服务商:

  • QQ邮箱
  • 163邮箱
  • 其他SMTP服务还没有配置暂时只有这两个邮箱

后端快速开始

1. 安装依赖


cd src/backend
npm install

2. 启动服务

npm start

3. 验证服务

服务启动后会在终端显示:Server listening on http://localhost:8080

API 接口文档

基础信息

  • 基础URL: http://localhost:8080
  • 数据格式: JSON
  • 请求方法: GET/POST

1. 发送验证码

  • URL: POST /api/send-code
  • 请求体:

{
  "email": "user@example.com",
  "username": "用户名"
}
  • 响应:

{
  "ok": true,
  "message": "验证码已发送"
}

2. 用户注册

  • URL: POST /api/register
  • 请求体:

{
  "email": "user@example.com",
  "username": "用户名",
  "code": "123456"
}
  • 响应:

{
  "ok": true,
  "message": "注册成功"
}

3. 设置密码

  • URL: POST /api/set-password
  • 请求体:

{
  "email": "user@example.com",
  "password": "新密码"
}
  • 响应:

{
  "ok": true,
  "message": "密码已设置"
}

4. 修改密码

  • URL: POST /api/change-password
  • 请求体:

{
  "email": "user@example.com",
  "oldPassword": "旧密码",
  "newPassword": "新密码"
}
  • 响应:

{
  "ok": true,
  "message": "密码修改成功"
}

5. 修改用户名

  • URL: POST /api/change-username
  • 请求体:

{
  "email": "user@example.com",
  "username": "新用户名"
}
  • 响应:

{
  "ok": true,
  "message": "用户名修改成功"
}

6. 获取题目

  • URL: GET /api/questions?grade=小学&count=10
  • 参数:
    • grade: 年级(小学/初中/高中)
    • count: 题目数量10-30
  • 响应:
{
  "ok": true,
  "data": [
    {
      "id": "小学-1",
      "stem": "计算2 + 3",

      "options": [
        { "key": "A", "text": "5" },
        { "key": "B", "text": "6" },
        { "key": "C", "text": "4" },
        { "key": "D", "text": "7" }
      ],
      "answer": "A"
    }
  ],
  "message": "题目生成成功"
}

后端核心模块说明

1. 用户管理模块 (user-manager.js)

功能概述

用户管理模块是整个后端系统的核心,负责处理所有用户相关的操作,包括注册、登录、密码管理、用户信息修改等。

主要功能

  • 用户注册: 支持邮箱和用户名唯一性验证
  • 密码管理: SHA256加密存储支持密码设置和修改
  • 用户信息管理: 用户名修改、用户删除
  • 数据持久化: JSON文件存储支持数据备份和恢复

核心方法

// 用户注册
createUser(email, username)

// 密码设置
setPassword(email, password)

// 密码验证
verifyPassword(email, password)

// 密码修改
changePassword(email, oldPassword, newPassword)

// 用户名修改
changeUsername(email, newUsername)

// 用户删除
deleteUser(email)

用户管理安全特性

  • 密码加密: 使用SHA256哈希算法加密存储
  • 数据验证: 严格的输入验证和格式检查
  • 唯一性检查: 邮箱和用户名的唯一性保证
  • 错误处理: 完善的异常处理和错误信息返回

数据存储格式

{
  "email": "user@example.com",
  "username": "用户名",
  "password": "sha256加密后的密码",
  "registeredAt": "2025-01-01T00:00:00.000Z",
  "updatedAt": "2025-01-01T00:00:00.000Z"
}

2. 邮箱服务模块 (multi-email-service.js)

功能概述

邮箱服务模块负责处理所有邮件发送功能,支持多个邮箱服务商,提供验证码发送、邮件模板管理等功能。

支持的服务商

  • QQ邮箱: 支持SMTP协议需要授权码
  • 163邮箱: 支持SMTP协议需要授权码
  • 其他SMTP服务: 可扩展支持更多邮箱服务商

核心功能

  • 多服务商支持: 自动选择可用的邮箱服务商
  • 验证码发送: 6位数字验证码生成和发送
  • 邮件模板: 统一的邮件格式和样式
  • 错误处理: 服务商切换和错误重试机制

配置示例

// 邮箱服务配置
const emailServices = {
  qq: {
    host: 'smtp.qq.com',
    port: 587,
    secure: false,
    auth: {
      user: process.env.SMTP_QQ_USER,
      pass: process.env.SMTP_QQ_PASS
    }
  },
  netease: {
    host: 'smtp.163.com',
    port: 587,
    secure: false,
    auth: {
      user: process.env.SMTP_163_USER,
      pass: process.env.SMTP_163_PASS
    }
  }
}

邮件模板

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>验证码</title>
</head>
<body>
    <h2>数学学习软件验证码</h2>
    <p>您的验证码是:<strong>{code}</strong></p>
    <p>验证码有效期为5分钟请及时使用。</p>
</body>
</html>

3. 题目生成模块 (question-generator.js)

功能概述

题目生成模块是系统的智能核心,能够根据年级和数量要求自动生成数学题目,支持小学、初中、高中三个年级的题目类型。

生成逻辑(与个人项目逻辑类似)

  • 小学题目: 基础四则运算、简单应用题
  • 初中题目: 代数运算、几何计算、函数基础
  • 高中题目: 复杂函数、三角函数、立体几何

题目类型

  1. 四则运算题

    • 基础加减乘除
    • 带括号的复合运算
    • 小数和分数运算
  2. 应用题

    • 生活场景问题
    • 逻辑推理题
    • 图形计算题
  3. 几何题

    • 面积和周长计算
    • 角度计算
    • 立体几何

核心算法

// 题目生成主流程
generateQuestions(grade, count) {
  // 1. 根据年级选择题目类型
  // 2. 生成题目内容
  // 3. 计算正确答案
  // 4. 生成干扰选项
  // 5. 验证题目质量
  // 6. 返回题目数组
}

// 小学题目生成
generatePrimaryQuestion() {
  // 基础四则运算
  // 简单应用题
  // 图形计算
}

// 初中题目生成
generateMiddleSchoolQuestion() {
  // 代数运算
  // 几何计算
  // 函数基础
}

// 高中题目生成
generateHighSchoolQuestion() {
  // 复杂函数
  // 三角函数
  // 立体几何
}

题目质量控制

  • 难度梯度: 根据年级调整题目难度
  • 答案验证: 确保答案正确性
  • 选项设计: 合理的干扰选项
  • 重复检查: 避免重复题目

题目数据结构

{
  "id": "小学-1",
  "stem": "计算2 + 3",
  "options": [
    { "key": "A", "text": "5" },
    { "key": "B", "text": "6" },
    { "key": "C", "text": "4" },
    { "key": "D", "text": "7" }
  ],
  "answer": "A",
  "difficulty": "简单",
  "type": "四则运算"
}

智能特性

  • 自适应难度: 根据年级自动调整
  • 题目去重: 避免重复题目
  • 答案验证: 多重验证确保正确性
  • 格式统一: 标准化的题目格式

4. 服务器主模块 (server.js)

功能概述

服务器主模块是整个后端系统的入口负责处理HTTP请求、路由分发、中间件配置等核心功能。

核心功能

  • HTTP服务器: 基于Express框架的Web服务器
  • 路由管理: RESTful API路由设计
  • 中间件配置: 跨域、解析、错误处理等
  • 端口监听: 可配置的端口监听

API路由设计

// 用户相关路由
app.post('/api/send-code', sendCodeHandler);
app.post('/api/register', registerHandler);
app.post('/api/set-password', setPasswordHandler);
app.post('/api/change-password', changePasswordHandler);
app.post('/api/change-username', changeUsernameHandler);

// 题目相关路由
app.get('/api/questions', getQuestionsHandler);

错误处理

  • 统一错误格式: 标准化的错误响应
  • 日志记录: 详细的错误日志
  • 异常捕获: 全局异常处理机制

安全配置

  • CORS设置: 跨域请求处理
  • 请求验证: 输入数据验证
  • 错误信息: 安全的错误信息返回

5. 邮箱配置模块 (email-config.js)

功能概述

邮箱配置模块负责管理所有邮箱相关的配置,包括服务商配置、模板配置、发送参数等。

配置管理

  • 环境变量: 从.env文件读取配置
  • 服务商配置: 多邮箱服务商支持
  • 模板管理: 邮件模板配置
  • 参数验证: 配置参数验证

配置结构

const emailConfig = {
  services: {
    qq: { /* QQ邮箱配置 */ },
    netease: { /* 163邮箱配置 */ }
  },
  templates: {
    verification: { /* 验证码模板 */ }
  },
  settings: {
    timeout: 30000,
    retryCount: 3
  }
}

6. 数据管理

数据存储

  • 文件存储: JSON文件存储用户数据
  • 数据备份: 自动备份机制
  • 数据恢复: 数据恢复功能
  • 数据验证: 数据完整性检查

数据安全

  • 加密存储: 敏感数据加密
  • 访问控制: 数据访问权限控制
  • 备份策略: 定期数据备份
  • 恢复机制: 数据恢复流程

性能优化

  • 缓存机制: 数据缓存策略
  • 异步处理: 异步数据操作
  • 内存管理: 内存使用优化
  • 并发控制: 并发请求处理

数据存储

  • 用户数据: src/backend/data/users.json
  • 数据格式: JSON数组
  • 加密方式: SHA256

安全特性

  • 密码SHA256加密存储
  • 邮箱验证码验证
  • 用户名唯一性检查
  • 输入数据验证

部署与问题

完整部署指南

开发环境部署

1. 后端部署

# 进入后端目录
cd src/backend

# 安装依赖
npm install

# 配置环境变量(创建.env文件
# 启动服务
npm start

2. 前端部署

# 进入前端目录
cd src/frontend

# 安装依赖
npm install

# 开发模式运行
npm run dev

# 或打包发布
npm run build

生产环境部署

1. 后端部署

  • 配置生产环境变量
  • 设置邮箱服务商
  • 配置数据备份
  • 使用PM2等进程管理工具

2. 前端部署

  • 打包为桌面应用
  • 生成安装包
  • 分发安装程序

常见问题解决

npm 安装问题

1. 清理环境

# 清理npm缓存
npm cache clean --force  


# 删除node_modules和package-lock.json
Remove-Item -Recurse -Force node_modules -ErrorAction SilentlyContinue  
Remove-Item -Force package-lock.json -ErrorAction SilentlyContinue  

2. 配置镜像源

# 设置国内镜像源
npm config set registry https://registry.npmmirror.com  


# 设置Electron镜像
$env:ELECTRON_MIRROR = "https://npmmirror.com/mirrors/electron/"  

3. 优化网络配置(并非必需,网络良好的话不进行该配置也能正常安装)

# 设置下载超时时间
npm config set fetch-timeout 300000

# 设置重试机制
npm config set fetch-retry-mintimeout 20000
npm config set fetch-retry-maxtimeout 120000

4. 重新安装

npm install

邮箱服务问题

  • 检查邮箱服务商SMTP设置
  • 确认邮箱密码(使用授权码)
  • 检查网络连接
  • 验证邮箱服务商限制

端口冲突问题

  • 修改环境变量中的PORT设置
  • 检查端口占用情况
  • 重启服务

数据文件问题

  • 检查data目录权限
  • 确认文件路径配置
  • 备份重要数据

项目特色

代码质量

  • 完全符合Google代码规范
  • 统一的代码风格
  • 完整的错误处理
  • 详细的注释说明

用户体验

  • 直观的界面设计
  • 流畅的操作体验
  • 完善的错误提示
  • 响应式布局

技术架构

  • 前后端分离
  • 模块化设计
  • 可扩展架构
  • 安全可靠

项目状态: 生产就绪
最后更新: 2025年10月12日

参考规范: Google JavaScript Style Guide | Google HTML/CSS Style Guide