/ustc-epc-bot

**科学技术大学EPC课程自动预约/优化脚本

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

**科学技术大学EPC系统自动抢课脚本

System Compiler License

版本 v2.1 更新日志(2020_03_30):

  • 支持自动选课, 根据课表优化算法自动优化课表.
  • 支持课程时间课程类型的自定义筛选.
  • 支持邮件提醒, 课表更新时系统自动通知.
  • 支持 Windows 10 系统的桌面提醒, 课表更新时系统自动通知.
  • 提供图形化操作界面.
  • 实现原理从 Selenium 方式转为 Requests 方式, 并采用多线程, 效率提升.

目录

安装及使用

针对普通用户

  • 步骤1: 在 Releases 页面下载最新版本.
  • 步骤2: 解压并双击运行 epc_bot.exe 文件.
  • 步骤3: 在设置面板中输入自己的学号, 密码, 邮箱地址及邮箱密码, 勾选允许预约的课程类型及时段, 并点击 Start 按钮. 相关设置会保存在本地的 config.json 文件中, 此后每次打开都会自动填充上一次的设置.
  • 步骤4: 当有新的课程被预约, 系统将自动发送通知.

针对 Python 程序员

  • 步骤1: 将项目克隆至本地.
    git clone https://github.com/Arsennnic/ustc-epc-bot.git
  • 步骤2: 安装相关依赖包.
    cd ustc-epc-bot/
    pip install -r requirements.txt
  • 步骤3: 运行 main.py 文件.
    python main.py

课表优化算法

  • 通过脚本抓取已选课程 Booked 与可选课程 Bookable 的数据.
  • 取 Booked 与 Bookable 的并集 All, 并对其排序:
    • 上课时间: 先→后;
    • 课程学时: 大→小;
    • 是否已经预约: 是→否.
  • 遍历排序后的 All 中的所有数据:
    • 若课程单元或课程时间与 Optimal 中已有的数据重复, 跳过;
    • 否则, 将该课程添加到 Optimal 中, 直至 Optimal 中课程学时总和达到上限
  • 计算课程安排最优解:
    • 求 Optimal 与 Booked 的交集记为 Reserved, 对应课程将不作变动;
    • 求 Booked 与 Reserved 的差集记为 Canceling, 对应课程将被取消;
    • 求 Optimal 与 Bookable 的交集记为 Booking, 对应课程将被预约.
  • 根据最优解取消/预约相应课程.

开发及测试人员

       

参考文献