Skip to content

Repository files navigation

SEU Radio
GPA Calculator for SEUer

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 版)

  1. 下载 GPA计算器.exe(见 Releases
  2. 双击运行,浏览器自动打开
  3. 粘贴成绩 JSON → 点击「开始计算」
  4. 结果即时显示,支持 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": [ { ... 单门课程数据 ... }, { ... } ] } } }

⚠️ 必须是包含 "rows" 字段的完整 JSON。

三、复制 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

⚠️ 注意事项: • 必须是 这四个汉字 • 区分全角 / 半角 • 不要改名为: • 成绩(1).txt • score.txt • 成绩.json

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

⚠️ 声明 This project does NOT access any school system automatically. All input data must be obtained by the user through legitimate means. The author is not responsible for misuse of the tool.

About

Offline GPA calculator based on user-provided academic records

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages