面向高中化学教师的本地桌面工具:管理化学方程式题库、随机组卷、手动选题、预览卷面、调整格式,并自动生成题目卷 + 答案卷两份 PDF 供教师打印。
完全离线运行:不访问互联网、不使用 CDN、不依赖任何在线服务;所有数据保存在本地 data 目录。
上图为「生成作业」页:左侧设置出题范围与题型,中间为卷面预览,支持即时调整。
- 管理化学方程式题库(六种表达式版本:化学 / 离子 / 电离 / 水解 / 电极 / 热化学);
- 随机出题、手动选题、临时录入、混合组卷;
- 五种题型:B 给反应物写产物、C 文字描述写方程式、D 部分空格补全、E 配平题、H 开放题;
- 题目在化学方程式、离子方程式等版本之间一键切换;
- 卷面所见即所得预览、格式调整(纸张/边距/分栏/字体/行距/横线/页眉页脚/分页);
- 导出题目卷 PDF 与答案卷 PDF(使用 Electron
webContents.printToPDF),也支持导出 HTML 与可被 Word 打开的 HTML; - 历史作业保存与重新打开、出题设置模板与卷面格式模板、出题次数统计;
- 学习项目:作业生成归属项目,项目各有出题范围/出题标记/轮数进度/历史作业,自动避免前几轮重复出题;
- 题库 JSON 导入(校验 + 重复检测 + 错误报告)、导出、备份与恢复、回收站;
- 设置中心:界面字体大小实时缩放(60%–160%)、主题色切换、新作业默认卷面格式、导出与统计偏好。
需要 Node.js ≥ 18。首次使用先安装依赖(仅开发与打包时需要网络,运行期完全离线):
npm install
npm start # 启动应用若 Electron 二进制下载缓慢,可使用镜像:
npm install --registry=https://registry.npmmirror.com --electron_mirror=https://npmmirror.com/mirrors/electron/npm run dist # 打包为安装程序(NSIS),输出在 build/ 目录
npm run pack # 仅打包免安装目录(build/win-unpacked)打包后程序优先在exe 同级的 data 目录读写数据(便携式);若该位置不可写,则回退到用户数据目录。免安装版直接把 win-unpacked 文件夹拷到任意位置即可使用。
本仓库内置一份从人教版六册教材逐课提取、机器校验配平与守恒、跨册合并去重的高中化学方程式题库,位于 data/library.json。
| 指标 | 数量 |
|---|---|
| 反应条目 | 392 |
| 表达式版本(条目 × 写法) | 531 |
| 覆盖教材 | 6 册(人教版) |
| 覆盖章节 / 节 | 29 章 / 82 节 |
| 册别 | 关联条目数 |
|---|---|
| 选择性必修 1 化学反应原理 | 178 |
| 必修第一册 | 171 |
| 九年级上册 | 119 |
| 必修第二册 | 119 |
| 选择性必修 3 有机化学基础 | 108 |
| 九年级下册 | 66 |
| 选择性必修 2 物质结构与性质 | 6 |
一条反应常跨多册出现,故各册之和大于条目总数。
同一反应可有多种写法,出题时可按版本策略切换(化学 / 离子 / 热化学 / 电极 / 电离 / 水解):
| 版本类型 | 条目-版本数 | 说明 |
|---|---|---|
化学方程式 chemical |
304 | 基础写法,每条反应必备 |
离子方程式 ionic |
125 | 由强电解质拆分规则自动派生 |
热化学方程式 thermochemical |
40 | 含焓变与物质状态标注 |
电极反应式 electrode |
33 | 原电池 / 电解池半反应 |
电离方程式 ionization |
21 | 弱电解质电离 |
水解离子方程式 hydrolysis |
8 | 盐类水解 |
氧化还原反应 187 · 离子反应 93 · 复分解反应 65 · 化合反应 46 · 热化学反应 40 · 置换反应 40 · 可逆反应 34 · 分解反应 33 · 燃烧反应 25 · 电极反应 22 · 电离 21 · 加成反应 18 · 水解反应 17 · 取代反应 11 · 缩聚反应 11 · 中和反应 10 · 加聚反应 10 · 酯化反应 9 · 消去反应 4
盐 178 · 单质 166 · 氧化物 148 · 有机物 118 · 酸 93 · 碱 70 · 氢化物 67 · 过氧化物 6 · 酸式盐 2
有机化学 112 · 物质及其变化 97 · 金属及其化合物 77 · 非金属及其化合物 70 · 水溶液中的离子平衡 59 · 化学与生活 52 · 化学实验 44 · 化学反应与能量 42 · 电化学 35 · 化学平衡 29
- 难度:中等 197 · 简单 121 · 较难 74(每条附
difficultyReason,说明判定依据,如物质种数、系数复杂度) - 标签:
高频(84,跨 2 册及以上自动标记)·基础必会(51)·易错(28) - 每条另含:名称、文字描述、教材定位(版本/册/章/节/上下文)、物质分类、反应类型、知识模块、备注、来源、出题次数统计
题库以 JSON 明文入库,便于版本对比与人工校正。程序内可:
- 按册 / 章 / 节 / 分类 / 标签 / 难度 / 星标 / 必出 / 出题次数多维筛选;
- 一键在化学式与离子式等版本间切换出题;
- 通过「数据管理」导入自有 JSON 题库(校验 + 重复检测 + 错误报告),导入格式见第 8 节。
注意:本仓库分发的是源码与题库数据,不含可运行程序;请按第 2、3 节自行构建。
- 源代码:采用 MIT 许可,详见 LICENSE(MIT 覆盖范围为本仓库源代码,不含下述题库数据)。
- 题库数据:
data/library.json中的化学方程式,系依据人民教育出版社出版的六册化学教材内容整理、机器校验配平与守恒后生成;原始教材内容的权利归人民教育出版社所有。 - 本仓库将题库随软件一并提供,仅供教学与学习用途。若需用于商业分发,请自行确认并取得相应授权。
- 表达式写法遵循教材通行约定,个别反应的条件与状态标注可能与不同版本教材存在差异,使用前建议按所用教材核对。
源码托管在 GitHub 公开仓库 https://github.com/xmmmymm/chemistry-equation-printer。
日常提交(凭据已由 Windows 凭据管理器保存,无需重复登录):
git add -A
git commit -m "说明本次改动"
git push仓库内容边界(由 .gitignore 控制):
- 入库:源码、教材 Markdown、提取管线产物、题库主数据
data/library.json与data/classifications.json; - 不入库:
node_modules/、build/、backups/、data/下的学习项目/设置/回收站等本机用户数据。
因此该仓库是源码与题库的版本备份,不含可运行程序;换机后需 npm install 重新构建,打包产物请从本地 build/ 获取。
打开程序 → 数据管理:导入示例题库(或自己的 JSON 题库)
→ 生成作业:设置范围/题数/题型/难度/版本策略 → 随机生成
→ 当前作业:调整题目(拖拽排序/换题型/换版本/锁定/临时录入)
→ 预览卷面(题目卷/答案卷切换)→ ⚙ 卷面格式调整
→ 导出 PDF(自动生成题目卷 + 答案卷两份,自动命名)
→ 保存作业(累计出题次数)
- 顶部搜索框支持名称/描述/化学式/条件/标签/备注模糊搜索;左侧支持教材、分类、标签、难度、星标、必出、启用状态、版本类型、出题次数等筛选,筛选选项已按当前学习项目范围收敛(项目外的分类标签不展示,残留越界勾选自动清理);
- 每条支持编辑、详情、启用/禁用、创建副本、复制、加入当前作业、删除(进回收站,可恢复/彻底删除/清空需二次确认);
- 创建副本:在题库内复制该条目(“(副本)”追加到末尾、出题次数清零,点击后自动跳页并高亮);复制:把主版本方程式文本复制到系统剪贴板(Unicode 下标美化,等号与可逆号保持原样,条件夹在双符号之间,如
2H₂ =点燃= 2H₂O、N₂ + 3H₂ ⇌高温⇌ 2NH₃,可直接粘贴进 Word/课件); - 批量操作:勾选后批量启用/禁用/删除/加入当前作业,也可按当前筛选结果批量启停;
- 导出图片:勾选条目后点击「导出图片」,面板可调产出形式(合成一张图 / 每条一张图)、版本范围(主版本 / 全部 / 指定类型)、内容要素(编号 / 反应名称 / 类型标签 / 难度 / 教材版本)、排版(中文字体,默认微软雅黑 / 西文字体,默认 Times New Roman——英文、数字与符号用西文字体,中文回退中文字体、文字字号 / 方程式字号 12–28pt / 文字位置 左·中·右 / 方程式位置 左·中·右 / 文字-方程式间距 / 图片内边距 / 图片高度:自适应或设定统一画布高度(pt)+ 垂直对齐 上·中·下——设定高度可让「每条一张图」各图等高、内容按对齐方式摆放,内容超出自动增高不裁切)、列数、清晰度(1x/2x/3x)、格式(PNG/JPEG)、文件名前缀与保存方式,选项自动记忆;图片宽度自动贴合内容(内容占据图片主体,不再使用固定宽度画布留白);右侧大幅实时预览:适宽/整页/100%/±按钮与 Ctrl+滚轮缩放,「每条一张图」模式可用 ◀▶ 与下拉逐张切换预览(含导出文件名标签与「第 x / N 张」指示),排版参数调整即时联动当前预览图,预览下方显示内容尺寸与导出像素尺寸;预览区底色与图片区分、图片边界有淡色虚线描边(仅预览显示,导出图片不含任何边框);默认保存位置可在「设置 → 导出与统计」配置;
- 列表行排版统一:名称+主方程式两行、版本标签上限 3 个(超出显示 +N)、操作按钮固定 4 列两行网格,所有行高一致。
在编辑器输入框直接输入一行方程式,点击“解析”即可结构化:
2Na + 2H2O = 2NaOH + H2↑
Ca(OH)2 + CO2 = CaCO3↓ + H2O
N2 + 3H2 ⇌ 2NH3
Na+ + OH- = NaOH (加号两侧留空格,与离子电荷区分)
CaCO3 + 2H+ = Ca^2+ + H2O + CO2↑
Zn = Zn^2+ + 2 e-
- 离子电荷写法:单价离子
Na+、OH-;多价离子用^n写法:Ca^2+、SO4^2-(Ca2+这种写法中尾随数字会被当作下标); - 也支持 Unicode 上下标粘贴(
H₂O、SO₄²⁻自动归一化); - 条件通过预设按钮选择(点燃/加热△/高温/催化剂/通电/光照/浓硫酸/常温/自定义),显示在等号或可逆号上方;
- 点击物质卡片可编辑系数、化学式、状态 (s/l/g/aq)、气体 ↑、沉淀 ↓(符号只能标在生成物,一个生成物不能同时有 ↑ 和 ↓);
- 保存时执行学科校验(原子守恒/电荷守恒/电极电子/ΔH/正整数系数),未配平不允许保存;复杂情况可“标记为待核对”强制保存。
所有作业的生成都归属于某一学习项目,让教师出题时不再人工检查题目是否在前几轮重复出过:
- 项目模型:项目私有拥有——出题范围、「方程式+题型」出题标记、学习进度(轮数)、历史作业、上次出题设置;题库、模板、系统设置全局共享。在「设置 → 学习项目」(第一个面板)中新建/切换/改名/改范围/删除项目;创建成功即自动切换;
- 默认项目锁定:id='default'(全部题库),不可删除、范围不可改、可改名。旧数据首次启动自动懒迁移:现有历史作业归入默认项目,项目内计数从 0 开始;
- 轮数(学习进度):
范围内·启用条目·可出「方程式+题型」对 的出题计数的最小值,自动现算不落盘。范围修改/条目增删/手动改标记后轮数自动重算; - 出题规则:学习进度为 x 轮时只出
计数 ≤ x的对(即不再出现计数 ≥ x+1 的对);槽内优先计数最低的对(同计数随机)——新扩进范围的条目(计数 0)会被优先补上; - 计数单位:
versionDupKey(反应物/生成物化学式集合)+ '#' + 题型。同一反应跨条目/跨版本合并计数;化学式版与离子式版因物种不同分开计;只有「反应+题型」都相同才算重复; - 题目不足分流:因轮数限制导致不足(放开限制则够)→ 专属弹窗(允许补充已达标方程式 / 减少题数到可出数 / 返回修改 / 取消);真不足 → 沿用原有七选项弹窗。手动选题/必出题不受轮数限制(教师明确指定=意图明确),生成后 notices 提示「已达本轮上限,仍按指定加入」;
- 计数时机(按题去重):保存历史或导出时对该作业每题计数一次(以题号 itemId 去重——同一题保存/再导出不重复计;作业追加新题再保存时新题会计数)。全局出题次数统计行为不变;
- 排除按钮(当前作业题目卡片右上角):点击后立即把该「方程式+题型」计数 +1 并持久化(即使作业最终不保存也计)、从卷中移除该题,并从未达标题中随机补 1 题(优先补当前卷中尚未出现过的题型;无候选时提示卷少一题);
- 题库行展开:每行 ▶/▼ 展开显示该条目各版本 B/C/D/E/H 的项目内计数,不可出的题型置灰注明原因(C 需文字描述 / H 需开放题干),可手动「已出 +1 / −1」(下限 0,直接调整当前项目计数)。同一反应的多个条目/版本共享标记(按反应计);
- 题库列表项目化:列表硬过滤为当前项目范围;「出题(本轮)」列 = 该条目各可出对计数的最小值(全局出题次数保留在「详情」弹窗);批量栏右对齐显示
当前项目 · 学习进度 x 轮(落后 N 对)(落后 = 计数恰为当前轮数的对数); - 切换项目:内存中存在未保存作业时弹窗三选(保存并切换 / 放弃并切换 / 取消);切换后题库列表、历史作业、出题标记、进度即时切换。历史作业按当前项目过滤(旧文件归入默认项目),列表标题显示当前项目名。
- 范围/排除:同一维度内多选为“或”;册别分组细化——章/节只细化“含该章/节的册别”,未被细化的册整册生效(例:勾「九上+九下+必修一+第一章+第一节」= 九上/九下整册 ∪ 必修一·第一章·第一节,范围扩大只会增加可用条目);页顶提示条显示当前学习项目的出题范围(项目范围作前置过滤,细化筛选在其上叠加);范围选择器仅显示当前项目范围内实际存在的分类标签(项目外的标签不展示,历史残留的越界勾选自动清理);
- 可出题数徽标:页顶提示条显示
可出 N 题(M 条方程式)——按项目范围、细化筛选、排除范围与版本策略共同计算;比题库管理条目数少时,最常见原因是版本策略过滤(如「只出化学方程式」会滤掉仅有离子/电离版本的条目,离子反应章节尤其明显),悬停徽标有说明; - 手动选题列表与题库管理同口径:按「项目范围 + 出题范围」显示全部条目(不再按版本策略隐藏);因已禁用 / 排除范围命中 / 当前版本策略下无可用版本不可出的条目灰显并注明原因、不可勾选;标题实时显示
已手动选择 x / 总题数 y · 可出 z 条; - 题目不足弹窗:先给出诊断(项目范围内条数 vs 当前设置可出数与原因),再给有效选项——减少题数到可出数(带项目范围与轮数逐级试算真实可生成数)、切换版本策略为「所有可用版本均可」(整章只有离子/电离版本时的对症选项)、清除细化筛选与排除范围、允许重复出题、放宽题型/难度(均即时提示改了什么);「允许重复出题」已修复为真实生效(未用候选优先,用尽后随机复用,不会同题连刷整卷);
- 上次出题设置按学习项目记忆(每个项目各有自己的上次设置);
- 优先级:总题数 > 题型数量 > 难度比例;题型之和小于总题数时自动补足,难度比例无法完全满足时尽量接近并提示;
- C 类题需要条目有“文字描述”,H 类题需要“开放题干”,否则该条目不参与该题型;
- 版本策略:chemicalOnly(默认)/ ionicOnly / preferChemical / preferIonic / allAvailable / custom。
- 每题支持:拖拽排序、上移/下移、删除、随机替换、切换题型、切换表达式版本(条目没有的版本按钮禁用)、D 类空格策略、编辑题干、单题横线与“本题后分页”;
- 换一批:保留锁定题,替换其余;
- 临时录入:出题过程中随时录入新方程式加入本次作业,保存/导出时询问是否保存到题库(全部/部分/不保存)。
- 默认 A4 纵向、四边 2cm、宋体+Times New Roman、标题黑体加粗(16pt)、正文小四(12pt)、单倍行距、题间距 6pt、单栏;
- 支持 A3/B5/16K/自定义纸张、横纵方向、1–3 栏、每页固定题数、页眉(默认空白)、页脚页码(1 / 第 1 页 / 第 1 页 共 3 页);
- PDF 默认无背景色,文件自动命名:
YYYY-MM-DD_HH-mm[_标题]_题目.pdf/_答案.pdf,默认保存到data/exports(可在「设置」中修改); - 出题次数:仅“保存作业”或“导出文件”时累计(同卷出现多次按次数累计,同时统计条目总数与各版本次数);仅预览不计数。
-
学习项目(第一个面板):项目列表(当前项目高亮,含轮数/落后对/范围摘要)+ 新建(名称 + 「使用全部题库」勾选 + 范围选择器)/切换/改名/改范围(默认项目禁用)/删除(默认项目禁用,二次确认并注明将删除的历史作业数);
-
界面显示(字体大小):60%–160% 整页等比缩放,滑块/预设(小/标准/大/特大)实时生效并自动保存;快捷键 Ctrl+= / Ctrl+- / Ctrl+0,Ctrl+滚轮缩放界面(卷面预览区内 Ctrl+滚轮仍为卷面缩放);缩放只影响操作界面,导出与打印的卷面字号不受影响;
-
主题色:米白纸(默认)/ 暖阳黄 / 青瓷绿 / 暮山蓝,点击即时切换;
-
默认卷面格式:新作业的初始纸张/边距/字体(中文字体与西文字体均为下拉选择,中文:微软雅黑/宋体/黑体/楷体/仿宋,西文:Times New Roman/Arial/Cambria/Georgia/Calibri)/标题字号(黑体加粗)/正文字号/行距,可“从当前作业读取”;已保存的历史作业不受影响;
-
导出与统计:导出目录、图片导出目录(「导出图片」的默认保存位置)、导出时同时生成答案卷、出题次数累计开关(自「数据管理」迁入);
-
数据目录:查看与一键打开;关于:版本、题库统计、恢复全部默认设置。
data/
├── library.json # 题库(含出题次数、最近出题时间)
├── classifications.json # 分类体系(教材/物质类别/反应类型/知识模块/标签)
├── settings.json # 应用设置(界面缩放、主题、默认卷面格式、导出目录、统计开关、当前学习项目)
├── trash.json # 回收站
├── projects.json # 学习项目清单 [{ id, name, scope, createdAt, updatedAt }]
├── projects/ # 各学习项目运行数据:<pid>.json(counts 出题标记 / countedItems 按题去重 / lastGenSettings)
├── history/ # 历史作业(每份一个 JSON,含题目快照与 projectId 归属)
├── templates/ # 出题设置模板 / 卷面格式模板
├── backups/ # 一键备份(含 projects.json 与 projects/;恢复前自动再留存一份当前数据)
├── exports/ # 导出的 PDF / HTML / Word 文件
└── reports/ # 导入错误报告(JSON + Markdown)
写入采用“临时文件 + 替换”策略防止数据损坏。不要手工编辑这些文件;需要迁移时整个 data 目录一起拷贝即可。
标准结构:
{
"version": 1,
"entries": [ { ...LibraryEntry... } ]
}| 字段 | 必填 | 说明 |
|---|---|---|
name |
✓ | 反应名称,如“钠与水反应” |
difficulty |
✓ | 难度,只能是 简单 / 中等 / 较难 |
versions |
✓ | 表达式版本数组,至少 1 个 |
description |
文字描述(C 类题必需) | |
openPrompt |
开放题干(H 类题必需) | |
starred / mustInclude / enabled |
布尔,默认 false/false/true | |
textbooks |
[{version, book, chapter, section}] |
|
substanceCategories / reactionTypes / knowledgeModules / tags |
字符串数组 | |
difficultyReason / remark / source |
备注性文本 |
| 字段 | 说明 |
|---|---|
type |
chemical / ionic / ionization / hydrolysis / electrode / thermochemical |
reversible |
是否可逆(⇌) |
reactants / products |
物质数组:{ formula, coefficient, state?, gas?, precipitate? } |
conditions |
[{ code, text }],code 可为 ignite/heat/highTemperature/catalyst/electric/light/concH2SO4/roomTemperature/custom |
extras |
热化学:{ deltaH: "-571.6 kJ/mol" };电极:{ electrode: "负极" } |
示例(完整示例见 examples/sample-library.json):
{
"name": "钠与水反应",
"description": "金属钠与水反应生成氢氧化钠和氢气",
"difficulty": "中等",
"versions": [{
"type": "chemical",
"reversible": false,
"conditions": [{ "code": "roomTemperature", "text": "常温" }],
"reactants": [
{ "formula": "Na", "coefficient": 2 },
{ "formula": "H2O", "coefficient": 2 }
],
"products": [
{ "formula": "NaOH", "coefficient": 2 },
{ "formula": "H2", "coefficient": 1, "gas": true }
],
"extras": {}
}]
}- 化学式内数字为下标,系数写在
coefficient(正整数,禁止分数;热化学请整体扩大为整数并同步调整 ΔH); - 离子电荷:
Na+、Cl-、SO4^2-、Ca^2+、电子e-; - 气体
gas: true(↑)、沉淀precipitate: true(↓),只能标在生成物; - 状态
state:s/l/g/aq; - 光照条件写“光照”,不要写 hr / hv / hν(导入时系统会警告并自动改正);
- 暂不支持有机物(CO、CO₂、碳酸、碳酸盐、碳酸氢盐等常见无机含碳物质除外,醋酸等含碳弱酸会给出警告但允许教师确认后保存)。
选择文件 → 结构校验 → 学科校验(原子守恒/电荷守恒/电极电子/ΔH/系数正整数/化学式可解析/有机警告)→ 重复检测 → 预览确认 → 导入。
重复检测规则:忽略系数、反应物/生成物顺序、条件、气体沉淀符号;比较反应物与生成物集合;反应方向相反不算重复;不同类型版本不视为重复。发现重复时可选择:跳过 / 仍然导入 / 覆盖 / 新增为副本。
每次导入(无论成败)都会在 data/reports/ 生成 import_report_YYYY-MM-DD_HH-mm.json 与同名 .md 两份报告,包含:源文件、导入时间、总条数、成功/失败/重复/警告数、逐条错误详情与原始数据、修改建议。可直接把 Markdown 报告发给 AI 协助修改源文件。
难度只能取 简单 / 中等 / 较难,由导入文件提供,系统不自动计算(教师可在系统中修改)。
- 简单:必修初期常见反应;物质 2–3 种;系数多为 1、2;无条件或单一简单条件;强酸强碱中和、简单沉淀、一步完全电离等。例:
2H2 + O2 =点燃= 2H2O、HCl = H+ + Cl- - 中等:物质 3–4 种;系数出现 3、4;有气体/沉淀符号;涉及弱电解质、拆分判断、可逆号。例:
2Na + 2H2O = 2NaOH + H2↑、CaCO3 + 2H+ = Ca2+ + H2O + CO2↑ - 较难:物质 ≥4 种;系数大或配平复杂;多条件;明显氧化还原或复杂原子团;可逆、分步电离、双水解、新型电池电极、盖斯定律综合。例:
3Cu + 8HNO3(稀) = 3Cu(NO3)2 + 2NO↑ + 4H2O
Q:导出的 PDF 有背景色吗? 没有。PDF 默认无背景色,纸张为白色、文字黑色,适合直接打印。
Q:化学式里的数字会变成下标吗? 会。化学式内的数字渲染为下标,系数正常大小;离子电荷渲染为上标(如 SO₄²⁻)。
Q:为什么某个条目出不了 C 类/H 类题? C 类需要条目有“文字描述”,H 类需要“开放题干”。在题库编辑器中补充对应字段即可。
Q:方程式没配平能保存吗? 不能。系统会指出具体不守恒的元素;确属系统无法判断的复杂情况,可在确认弹窗中选择“标记为待核对并保存”。
Q:出题次数什么时候增加? 全局出题次数:仅在保存历史作业或导出 PDF/HTML/Word 时累计;仅预览不计数。同一反应在同一卷出现两次计 2 次;条目总数与各版本次数分别统计。 学习项目计数(「方程式+题型」粒度):同样在保存/导出时累计,但按题去重——同一题(题号 itemId)保存/再导出不重复计,作业追加新题再保存时新题会计数;点「排除」立即计数并持久化。
Q:题库里的「创建副本」和「复制」按钮有什么区别? 「创建副本」在题库内复制该条目(生成“(副本)”追加到题库末尾,出题次数清零),点击后自动跳到副本所在页并高亮;「复制」把主版本方程式文本复制到系统剪贴板(Unicode 下标美化格式,可直接粘贴到 Word/课件)。
Q:删除的条目还能找回吗? 可以。删除进入回收站(数据管理页),可恢复或彻底删除;被历史作业引用的条目删除后,历史作业仍保留快照。
Q:换电脑怎么迁移?
整个项目(含 data 目录)拷贝即可;安装版把 exe 旁边生成的 data 目录一并拷贝。
Q:CSV 能再导入吗? 不能。CSV 仅用于 Excel 查看与简单编辑,反向导入请使用 JSON。
├── main.js # Electron 主进程(文件读写、IPC、printToPDF、备份、学习项目数据)
├── preload.js # 上下文桥
├── src/
│ ├── index.html # 界面入口
│ ├── styles/ # 样式(默认米白纸主题,可在「设置」中切换暖阳黄/青瓷绿/暮山蓝)
│ ├── libs/ # 化学解析/校验、常量、组卷引擎(含学习项目轮数过滤)、导入校验、卷面渲染
│ └── js/ # 各界面模块(app.js 项目状态、scope-picker.js 范围选择器组件、settings.js 设置视图等)
├── examples/ # 示例题库 sample-library.json
├── scripts/ # 单元测试与冒烟测试
├── data/ # 运行时数据(见第 7 节)
└── build/ # 打包输出
npm test # 化学解析/校验/组卷/导入/学习项目引擎 单元测试(238 项)
SMOKE=1 npm start # 端到端冒烟:导入示例库→组卷→生成两份 PDF→统计累加