课表软件的一些制作记录

课表软件的一些制作记录

2026-05-27 22:00:11
# 课表软件
# 桌面应用
# 开发记录
# UI设计
# 时间管理

这篇杂谈,主要还是分享一些我曾经制作课表软件的一些过程记录与最终效果分享给大家。

话不多说先看看我最后制作完成的结果吧: (图片比较多,不想看的可以快速滑一下)

首先介绍一下首页,样式很简单。右上角刷新 中间是内容 有时间线。大致就是这样子吧

然后设置页面大致是这样子:头像与名称可替换,自动识别学号。然后检验Token凭证。缓存是储存在本地的 清除相当于退出登录这样子。

以下是个性化页面,关于页面,更新日志页面,其实也没什么好介绍的。

还有,我在软件中集成的AI系统,主要是利用已获取的课表数据以及固定的系统提示词组成 还有用户输入。

支持自定义API,还有DS,Gemini。以及提供了免费的硅基流动的模型。

下面就来聊一聊我制作这个软件的个人记录,仅参考。


‍

为什么做这个呢?好吧 只是因为突发奇想 来兴趣了而已

我只懂个大概皮毛 没有深入学习过编程

首先灵感来源:首当其冲的是钉钉中校园微门户右下角的 vConsole

这东西我看了看都是一下都是一些网络数据

打开 network,点开一些后能看见一个 Response 这就是接受到信息产生的数据吧

点开课程表后 再打开 vConsole就能看见一个 GET 关于课程表拉取的

‍

所以我就有个想法

token失效则重新登录一次即可 加一个刷新按钮让用户自己去刷新课表

自己做一个课表软件

还有就是电脑版登录校园内网后在个人里面能看见这些

我并不知道这是什么 询问ai后大致了解 应该用不上

AccessKey:d9d582****87661

AccessSecret:b07d844c33***13f4c1

于是我有了个大胆的想法:

课表请求抓包获得地址:(打码一下)

https://we.zjff.edu.cn/\*\*\*/\*\*\*/\*\*\*Schedule?employeeCode=学号&week=\*\*&academicYear=\*\*\*

employeeCode:学号

week:周数

academicYear:学年

employeeClass:班级

-%E5%AD%A6%E7%94%9F:学生

-%E5%AD%A6%E5%B9%B4%E7%AC%AC%E4%B8%80%E5%AD%A6%E6%9C%9F:学年第一学期

-%E5%AD%A6%E5%B9%B4%E7%AC%AC%E4%BA%8C%E5%AD%A6%E6%9C%9F:学年第二学期

——此处带许多%的为URL编码转换

转换后就是这样子滴:https://we.zjff.edu.cn/\*\*\*/\*\*\*/\*\*\*Schedule?employeeCode=\*\*\*&week=\*\*\*&academicYear=2025-2026学年第一学期&employeeClass=学生

然后我接触到了一些报错信息:

报错1:

<JsonResult>
<code>999</code>
<message>Required request parameter 'employeeCode' for method parameter type String is not present</message><errorDetail/><data/>
</JsonResult>

该请求必须需填写 employeeCode参数,即学号 添加学号后即可拉取

拉取成功1(仅填写学号):

{"code":200,"message":"操作成功","traceId":"ylkjbnee"}

仅返回操作成功 不返回课表信息

经过测试 需获取课表需要填写以下参数:

employeeCode:学号

week:周数

academicYear:学年

employeeClass:班级

共需填写4个参数

其中仅 employeeCode各不相同 week则是自行选择调取的周数 academicYear是学期 学期填写可查看上方 employeeClass 固定填写为学生 即%E5%AD%A6%E7%94%9F

正确返回应该包data例如:

{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "ZJ": 1, //周几 这个参数代表这节课是周一?还是周二
      "XN": "2025-2026", //学年 
      "JSGH": "2019910113", //教师工号?
      "JC": "5-6", //节次 很重要 参考ZJ 5-6代表某周的第五~第六节课
      "XQ": "1", //星期 这个忽略 我们要看ZJ来判断是周几的课!
      "id": "458539614D10BF1CE065000000000001",  
      "WEEK": "15", //周数 这周是第几周
      "JSXM": "XX", //教师姓名
      "KCBH": "05504020", //课程编号
      "KCMC": "工业互联网导论", //课程名称 
      "SKDD": "8#414" //上课地点
    }
  ],
  "traceId": "ylkjbnee"
}

现在有一个问题 我不知道学年或者是周次 这些数据如何获取呢?自己填写吗?

于是回到 vConsole 查看 GET 能发现 Query String Parameters内部有 academicYear week employeeCode employeeClass这些参数

或许可以查询到这些参数?

结果是很可以啊 我找到了参数 这样子就只需要一个 employeeCode参数了也就是学号

我在 getSemesterAllWeek里发现了 currentWeekcurrentAcademicYear参数 还有 firstDay参数 这个 firstDay参数指的是这一周的星期一是哪月哪日

以及我的token参数:

bttWEZ4VUEyTWdlNGVhSVlXcV*****fd2UuempmZi5lZHUuY24.__a9a29***35512_1761286827930TGTGdccore0iuap-apcom-workbe***0bYT

学校后台感觉漏洞啊 这个 employeeCode参数居然没有校验 也就是说 不管 token是我的还是别人的 只要改

employeeCode 参数就可以拉去全校其他人的课表了(当然我可没有随便乱抓 没存本地啊)

接下来就是解决 token问题 别人肯定不可以用我的token登录

要先让他们登录一次 自动获取 token参数以便保持登录状态

来到浏览器开始利用F12中的 Network工具

我抓到了这个:

User

https://pass.zjff.edu.cn/\*\*\*/\*\*/login?user=\*\*\*&md5Password=bf307266d4\*\*\*77e0ee176f63&shaPassword=df6\*\*\*a88461f610f9bdbd671&equipmentType=web&tenantId=sy8c61gj&service=

还有返回的token参数:

http://pass.zjff.edu.cn/\*\*\*/prelogin?token=fd5691351b7983\*\*\*4e97b6fba30299856e2a43&service=https%3A%2F%2Fwe.zjff.edu.cn%2Flogin

接口有加密,接口的加密方式是标准的 MD5 和 SHA1 哈希

发送password后返回一个MD5加密的 以及SHA1加密的 可以看上面的URL 一共是2个Password对吧

然后就是把这俩送到服务器那返回我们一个token

‍

直接搞简单点吧 内置一个学校的登录页面,然后登录后抓取token参数 存到软件里

我不会编程 怎么做apk呢··· AI给我一个建议那就是用HBuilderX利用html+Javasprint来生成apk

好开整!

登录完成后应该自动去拉去当前的课表。这个页面

https://we.zjff.edu.cn/***/***/getSemesterAllWeek 里能获取currentWeekcurrentAcademicYear参数 还有firstDay参数。

登录完成后在we.zjff.edu.cn/***/***/getCurrentUser 里面能找到姓名和学号参数

最难的部分完成了,主要是抓取学校课表的一些尝试

剩下的就是软件编程了主要使用HBX+Gemini生成,最后效果就是开头我们看见的。


‍

其实我还新发现了校外也可以登录校园内网平台,目前想法是记录一下URL,使用ClaudeCode来编程,最后就能实现校外访问内网平台 自动GET tokens和Semester 以此就能够更加完善,离线则为真离线,在线则为正常GET Semester。这个项解决了校园网的必须性,不过懒得做了 嘿嘿。

好了大概就是我的一些制作经历吧,AI虽然能写代码,给建议 可其中的各种学校网址都需要自己去抓取 看逻辑 让AI分析,不然课表数据从何来?对吧

仅参考,关键url都打码了,当然你自己能抓出来也很厉害了。我这边不提供url

评论

(。・ω・。) 登录 后才能评论喵~