北师大教务助手 开发记录(二)查、选、退课,查考试安排和成绩,批量评教,抢课策略…

分类: 开发笔记

补充选课相关问题

xktype参数在非选课时间一直为2,实际应为3。多亏了开学第一周可以补选课,让我得知了这个问题。同时,我觉得我也可以尝试提前选课了(估计还是不行的……)

选开课计划课程

开课计划首先要选中课程,然后选中课程的子课程,所以要先查看课程详情。

其余步骤与选公选课基本一致。

查询选课结果

选课结果包括选课学分统计,重新搞了一个HTMLParser来处理。

查询考试安排

首先要查询考试轮次并选择,然后查询到考试安排。

查询考试成绩

提供学年、学期查询成绩,或默认查询入学以来全部成绩。

评教

首先要获取评教轮次,然后获取课程列表,再对其中某个课程进行评教。我设计了分值,1-5分别代表选项不好到好。同时打1分则文字评论较差,打2-5分文字评论较好。

抢课策略

特别设计了选课愿望单,可以提前将希望抢的课加入愿望单。

抢课即不断循环:从公选课开始,按照愿望单先后顺序选课;公选课完成后再选计划课程。如果某课程选择失败,将其加入队尾,先跳过去抢下一门(如果是已选择的错误则移出队列)。

抢课间隔时间默认1.2秒,但容易出现网络错误(教务网太脆弱)。其实这里有个插曲,本来我花了一个上午都设计好了多线程抢课程序,结果就因为教务网太脆就全删了。甚至顺序选课都要间隔时间,很无奈。间隔时间自适应的,如果失败一次就自动延长0.2秒。

提高用户交互体验

命令行式交互

UI

对了,我还想移植到Java上,日后实现Android教务助手。毕竟那段JavaScript是有Java对应算法的,直接克服加密问题。另外jsoup貌似是个不错的HTMLParser,Java还有很多HTTP Request库,总之很可行。