Transparent. Auditable. Yours.
粘贴 JSON,一键出分 · 本地计算 · 不联网 · 不传数据
📊 GPA Calculator for SEUer(可审计的绩点计算器)
一个用于从教务系统接口返回的 JSON 数据中 自动计算 Official GPA 与 Core Major GPA 的工具
支持: • 多页面 JSON 拼接 • 等级制 → 数值映射 • 学分加权 • 专业核心课程筛选 • US-style 4.0 GPA 转换
⸻
✨ 功能特性(Features) • ✅ 从教务系统接口返回的 JSON 直接解析 • ✅ 支持一个 txt 中包含多个 JSON 响应 • ✅ 严格学分加权平均 • ✅ 区分两种口径 • Official GPA(必修 + 限选) • Core Major GPA(专业核心课程子集) • ✅ 可配置的 Core 课程关键词 • ✅ 显式排除水课(黑名单机制) • ✅ 等级制课程自动映射为数值 • ✅ 输出清晰、可审计的课程明细 • ✅ 支持 100 分制 & US 4.0 制 • ✅ Web 图形界面(粘贴 JSON → 一键出分) • ✅ 自定义 Core 课程关键词 & 排除列表 • ✅ 日间/夜间双主题
🚀 快速开始(Web 版)
- 下载
GPA计算器.exe(见 Releases) - 双击运行,浏览器自动打开
- 粘贴成绩 JSON → 点击「开始计算」
- 结果即时显示,支持 4.0 / 4.8 两种绩点制
或者从源码运行:
pip install flask
cd webapp
python app.py⸻
🧠 设计理念(Design Philosophy)
GPA ≠ 能力,但 GPA 的“计算口径”必须可解释。
本工具遵循以下原则: 1. 透明性: 所有参与计算的课程必须先完整列出。 2. 可复现性: 任意人使用相同数据,必须得到相同结果。 3. 口径分离: • Official GPA:反映制度口径 • Core GPA:反映学术/工程能力 4. 策略层可配置,算数层不动: 改课程归类 ≠ 改计算公式。
⸻
🔌 数据来源:如何从教务系统获取 JSON
1️⃣ 登录教务系统 • 使用浏览器(推荐 Chrome / Edge) • 登录学校信息门户 / 教务系统 • 进入 成绩查询页面
⸻
2️⃣ 打开浏览器开发者工具 • Windows / Linux:F12 • macOS:⌘ + Option + I • 切换到 Network(网络) 面板
⸻
3️⃣ 触发成绩查询请求 • 点击“查询成绩 / 翻页” • 在 Network 面板中找到: • 类型为 XHR / Fetch • URL 通常以 .do / .json 结尾 • 响应内容为 JSON
⸻
4️⃣ 获取返回的 JSON 数据 • 点击该请求 • 打开 Response(响应) • 确认返回内容是标准 JSON,例如:
{ "datas": { "xscjcx": { "rows": [ { "XSKCM": "信号与系统", "ZCJ": "95", "XF": "4", "KCXZDM_DISPLAY": "必修" } ] } } }
⸻
5️⃣ 多页面情况(非常重要)
教务系统通常分页返回成绩: • 第 1 页 → 返回一个 JSON • 第 2 页 → 返回另一个 JSON • …
👉 做法: • 将每一页返回的完整 JSON • 原样复制 • 直接粘贴到同一个 scores.txt 文件中
{ JSON page 1 } { JSON page 2 } { JSON page 3 }
程序会自动识别并解析。
⸻
📄 输入文件格式说明(scores.txt)
✅ 正确格式 • UTF-8 编码 • 一个 txt 文件 • 内含 1 个或多个完整 JSON 对象 • JSON 之间可直接相邻
示例:
{ "datas": { "xscjcx": { "rows": [ ... ] } } } { "datas": { "xscjcx": { "rows": [ ... ] } } }
⸻
❌ 错误格式 • JSON 被截断 • 删除了外层 { } • JSON 中混入非 JSON 文本 • Excel / Word 格式
⸻
📄 如何制作正确的「成绩.txt」输入文件
本程序不会、也不具备任何形式的自动登录、爬取或接口请求功能。 所有成绩数据必须由用户自行、手动、通过合法方式从浏览器中获取,并整理为指定格式的文本文件。
请严格按照以下步骤操作。
⸻
一、前提条件 • 使用 Chrome / Edge / Firefox 等现代浏览器 • 拥有本人账号的合法成绩查询权限 • 仅用于个人成绩分析
⸻
二、获取成绩 JSON 的正确方式(人工、被动)
1️⃣ 登录成绩查询网页 1. 打开学校的信息门户 / 教务系统 2. 使用 本人账号 登录 3. 进入 成绩查询页面
⸻
2️⃣ 打开浏览器开发者工具(F12) • Windows / Linux:按 F12 • macOS:按 ⌘ + Option + I
切换到 Network(网络) 面板。
⸻
3️⃣ 刷新或翻页以触发成绩请求
在 Network 面板中: • 点击“查询成绩 / 下一页 / 翻页” • 观察出现的网络请求
你会看到若干以 .do 结尾的请求,例如:
xscjcx.do
⸻
4️⃣ 定位正确的成绩请求
在 Network 列表中: 1. 点击名称类似 xscjcx.do 的请求 2. 右侧切换到 Response(响应) 选项卡 3. 确认响应内容为 JSON 格式,并且包含类似结构:
{ "datas": { "xscjcx": { "pageSize": 10, "pageNumber": 1, "totalSize": ..., "rows": [ { ... 单门课程数据 ... }, { ... } ] } } }
⸻
三、复制 JSON 内容(非常重要)
✅ 正确做法 1. 在 Response 面板中 2. 完整选中所有 JSON 文本 3. 右键 → 复制(或 Ctrl + C)
请确保复制的是: • 从第一个 { 开始 • 到最后一个 } 结束 • 中间不缺行、不截断
⸻
❌ 错误做法(不要这样) • ❌ 只复制 "rows" 数组内部 • ❌ 只复制部分字段 • ❌ 复制格式化后的截图文字 • ❌ 复制 Headers / Preview 内容
⸻
四、多页成绩的处理方式(关键)
成绩通常是分页返回的,例如: • 第 1 页 → 一个 xscjcx.do 响应 • 第 2 页 → 另一个 xscjcx.do 响应 • …
✅ 正确处理方式
对每一页,重复以下操作: 1. 点击该页对应的 xscjcx.do 2. 复制 完整 JSON 响应 3. 依次粘贴到同一个 txt 文件中
⸻
📌 示例(正确的 txt 内容结构)
{ 第 1 页完整 JSON } { 第 2 页完整 JSON } { 第 3 页完整 JSON }
说明: • 不需要逗号 • 不需要数组包裹 • 不需要任何分隔符 • 程序会自动解析多个 JSON 对象
⸻
五、创建并命名 txt 文件(严格要求)
1️⃣ 文件名
必须命名为:
成绩.txt
⸻
2️⃣ 文件位置
请将 成绩.txt 放在: • 与 main.py 同一目录 • 或 exe 所在目录(如果使用 exe 版本)
⸻
3️⃣ 编码格式 • 推荐:UTF-8 • 使用系统记事本 / VS Code / Notepad++ 均可
⸻
六、合法性与责任说明(再次强调) • 本程序 不会访问任何网站 • 本程序 不会请求任何接口 • 本程序 不会保存、上传或共享任何数据 • 所有数据均由用户自行、合法获取 • 所有计算均在本地完成
请仅对本人账号下的成绩数据进行分析。
⸻
七、常见问题(FAQ)
Q1:可以只复制一页吗?
可以,但只会计算该页中的课程。
⸻
Q2:JSON 里显示 "查询失败" 能用吗?
不能。 请确认 "rows" 中确实包含课程数据。
⸻
Q3:能否直接复制浏览器保存的 .do 文件?
不可以。 请复制 Response 面板中的 JSON 文本内容。
⸻
Q4:为什么一定要叫「成绩.txt」?
这是为了: • 简化使用流程 • 避免命令行参数错误 • 保证 exe / 脚本行为一致
⸻
八、总结一句话
你不需要“下载文件”, 只需要把浏览器已经展示给你的 JSON, 原样复制到一个名为「成绩.txt」的文本文件中。
🧮 计算规则说明
1️⃣ Official GPA(制度口径)
纳入课程: • 课程性质为: • 必修 • 限选
成绩: • 使用 ZCJ(总评成绩)
权重: • 使用 XF(学分)
公式:
GPA_{official} = \frac{\sum (成绩 × 学分)}{\sum 学分}
⸻
2️⃣ Core Major GPA(专业核心口径)
课程来源: • Official GPA 课程集合的 子集
筛选规则: • 课程名包含指定关键词(可配置) • 且不在显式排除列表中
默认关键词示例:
电路, 信号, 通信, 电子, 数字, 模拟, 电磁, 概率, 随机, 线性代数, 数学分析, 复变, 计组, 计算机组织, 操作系统, Linux, 无线, 网络
⸻
3️⃣ 等级制成绩映射
等级 数值 优 95 良 85 中 75 及格 65 不及格 55
⸻
4️⃣ US 4.0 GPA 转换(常见标准)
百分制 GPA ≥93 4.0 90–92 3.7 87–89 3.3 83–86 3.0 80–82 2.7 … …
⸻
📤 输出说明
程序运行后将输出: 1. 所有参与 Official 计算的课程明细 2. Official GPA(100 制) 3. Core Major 课程明细 4. Core Major GPA(100 制) 5. Core Major GPA(4.0 制)
👉 每一个数值都可追溯到具体课程。
⸻
🔧 自定义与扩展
你可以轻松做到: • ✏️ 修改 Core 课程关键词 • 🚫 增加 / 删除排除课程 • 🎯 针对不同导师 / 方向定义不同 Core • 📊 导出 CSV / Excel • 🧠 增加时间演化分析(按学期)
License:MIT License

