01 — The work

两个应用, 一个只读网站。

电脑上是便携版,手机上装积分管家。它们共用一套 JSON:谁导出、谁导入,数据就到谁那里。网站只负责展示,一个写按钮也没有。

电脑端
Portable v2.0.0
手机端
APK v2.5
网站
Read-only
数据
本机 SQLite
01

Inside · The app

软件本身长这样

下面是用网页还原的积分大屏:左边四个模块,中间 KPI 和排行榜。真实程序里的数字来自本机数据库。

班级信息化平台 v2 — 班级事务 / 积分大屏
班级事务
积分大屏
普通表决
班干选举
存档总览
同学事务
作业助手
纪律助手
学号转盘
计时器
其它
AI 工作台
设置

积分大屏

本周
学生
45
本周记录
128
本周积分
236
本周第一
李四
名次姓名徽章本周净增
01李四勤恒+10
02张三礼+8
03赵六慧+5
04钱七+4
05王五诚−1

示意图:数据为示例,真实界面由 pywebview 套一层本地网页渲染。

02

Spec · Features

能做的事,逐条列

不是功能想象,是程序里真的有的模块。有些是班里用出来的需求,比如作业未完成名单要能一直挂在屏幕角落。

班级事务
普通表决六步走完:方案公示 → 场下问答 → 出席点名 → 讨论陈述 → 投票表决 → 公布存档,出席须达三分之二;班干选举五个步骤、六个职务、逐职务无记名投票,并列最高票会标出来要求补选,不会随便选一个。
同学事务
作业助手按学科点名单,未完成名单能变成屏幕底部的长条悬浮窗,8 秒轮换一科并显示截止倒计时;纪律助手多选学生、选类型与严重程度,上报即存档,10 秒内可撤销;另有学号转盘、计时器、分组抽签、小组 PK。
AI 工作台
接的是 DeepSeek。它不会瞎编:回答前先查本机的作业、纪律、存档、积分;也能读 Word / PDF / PPTX / XLSX 然后生成 PPTX、DOCX、XLSX。生成的文件只写到 data/output,不动原文件。
数据
全部存在本机 SQLite,不联网也能跑。导入、删除、清空前各自动备份一次;统一密码之外还有二级密码用于重置;设置页能看到备份列表。
手机端
按科目记加分扣分,可设每周上限与学期累计上限;记错可撤销上一笔;支持完整导出与从备份恢复;一键导出积分大屏 JSON。
技术栈
Python 3.14pywebviewSQLiteKotlinCloudflare WorkersD1 电脑端双击即开、免安装;手机端是单 APK。
03

Format · One JSON

三端之间只有一种文件

一份 JSON 快照:学生名单 + 积分流水。导入是整体覆盖,所以导入前程序会先备份。字段名做了容错,几种写法都认得。

// 积分数据.json —— 导出即用,导入即读
{
  "exportedAt": "2026-11-14T09:00:00",
  "students": [
    { "id": "2025001", "number": "2025001", "name": "张三" }
  ],
  "records": [
    { "studentId": "2025001", "score": 5,
      "date": "2026-11-14 08:30:00", "reason": "作业优秀" }
  ]
}
本周按本地时间周一起算,负分照算
同分按学生标识字符串升序,不按录入顺序
名单外不进榜,页面会提示忽略了多少条
日期支持空格 / T / 斜杠分隔,ISO 也认
去大屏导出 →
Android
积分管家
JSON ↗
Portable
班级信息化平台
JSON ↗
Cloud · read only
在线大屏
04

Realtime · Discipline

一条纪律记录的三秒钟

应用的业务逻辑一行没改。只是在「上报成功」之后,多打了一个 HTTP 请求。

01
电脑端点上报
纪律助手选人、选类型、写备注,点「上报并存档」。本地先落库,随后异步推一条同步请求。
02
网站三秒后可见
请求落到 Cloudflare Worker,按记录号去重后写入 D1。大屏每 5 秒轮询,撤销也会同步。
03
教师手机收到
Worker 顺手调一次 ntfy 推送。老师在手机上订阅一个主题名就行,不用装你们的程序。