/HbnuEdusystem

模拟湖北师范大学正方教务系统 Simulation of Educational Administration system of Hubei normal University

Primary LanguageJavaScript

项目名称:模拟教务系统(web)

开发人员


项目开发:Xiang JinhuChen WeiFu Tongyong

项目指导:Li Xipeng

需求概述


这个项目实现了湖北师范大学正方教务系统的一套API: 包括模拟登陆,个人信息查询,课表获取,成绩查询,成绩邮箱/微信推送等等。随着API的不断完善与扩充,可以很方便为本校学生作为后台服务。 用户只需输入个人学号密码即可获取个人成绩与课程信息,并且在系统首页能够以折线图的形式来展示学生个人的平均绩点走向,同时能够将个人成绩以微信推送和邮件发送的方式提供给用户,大大增加了本校学生查询个人成绩相关信息的便利性。

项目运行环境及技术相关


语言:python2.7

运行环境:ubuntu16.04

Web 应用框架:Flask1.0.2

数据库:MySQL 8.0.12 for Linux on x86_64

ORM框架:flask-sqlalchemy2.3.2

数据库迁移:flask-migrate2.2.1, flask-script2.0.6

爬虫相关:requests2.19.1, BeautifulSoup4.6.3

前端UI:amazeui, pyecharts, bootstrap3.3.7

矢量图标:Iconfont, Glyphicon Halflings

字体:youziku

邮件发送:smtplib

项目功能描述


  • 学生用户各学期的平均成绩点折线图直观展示

通过shutil将爬虫爬取存入数据库的平均绩点绘制成折线图展示

  • 支持学生用户进行各学期的成绩信息查询,并且将合格,不合格以不同颜色区分开来

通过教务系统个人信息页面,抓取,个人信息,并持久化保存到数据库中,在前端界面做以展示。

  • 支持学生用户进行各学期的课程信息查询

通过教务系统课表信息页面,抓取,课程信息,并持久化保存到数据库中,在前端界面做以展示。

  • 支持将学生的成绩信息通过填写的邮箱进行推送

根据smtp协议实现成绩邮箱推送。

  • 支持将学生的成绩信息通过移动端微信扫描二维码实现微信推送

通过爬虫实现微信登陆以及向文件传输助手发送成绩

API


sipder.py

getEnPassword():对输入的密码进行加密

spiderLogin():爬虫登陆湖北师范大学教务系统

getScore():爬取成绩

addScoreDB():解析成绩数据并存入数据库

timeTable():爬取课程表

addTimetableDB():解析课程数据存入数据库

matplot.py

chart():绘制平均绩点折线图

exts.py

exts():计算平均绩点、学分数据

sub_query():获取对应学年学期的成绩对象

draw():统计成绩的学年学期,每学期的平均绩点

getTimeTable():保存对应学期的课程数据,用于数据渲染

sendemail.py

sendemail():将解析好的内容发送到指定邮箱

parsermail():拼接成绩表,用于邮箱推送

wechatInfo():拼接成绩文本,用于微信推送

注意事项


通过本命令安装有关依赖库: pip install -r requirements.txt

使用前需要修改的内容:

  • config.py中的数据库信息
  • sendmail.py中发件人信息

使用前数据库需支持中文:sql>set character_set_server=utf8; sql>set character_set_database=utf8;

使用flask-script配合flask-migrate进行版本库迁移,第一次使用时在命令行中使用python manage.py db init进行初始化,建立数据库迁移相关的文件和文件夹,之后每次需要迁移依次使用python manage.py db migratepython manage.py db upgrade即可

可能会出现bootstrap框架失效的情况,使用时看情况自行调整

项目启动:python view.py

项目数据库设计


数据库ER图

项目目录


|-- README.md
|-- __init__.py
|-- config.py
|-- crypto_rsa
|   |-- RSAJS.py
|   |-- __init__.py
|   |-- base64.py
|   `-- safeInput.py
|-- exts.py
|-- manage.py
|-- matplot.py
|-- migrations
|-- models.py
|-- requirements.txt
|-- sendemail.py
|-- spider.py
|-- static
|   |-- css
|   |   |-- admin.css
|   |   |-- amazeui.min.css
|   |   `-- app.css
|   |-- fonts
|   |   |-- FontAwesome.otf
|   |   |-- fontawesome-webfont.eot
|   |   |-- fontawesome-webfont.ttf
|   |   |-- fontawesome-webfont.woff
|   |   `-- fontawesome-webfont.woff2
|   |-- images
|   |   |-- app-icon72x72@2x.png
|   |   |-- favicon.png
|   |   `-- logo.png
|   `-- js
|       |-- amazeui.min.js
|       |-- app.js
|       |-- echarts.min.js
|       |-- iscroll.js
|       `-- jquery.min.js
|-- templates
|   |-- QRlogin.html
|   |-- base.html
|   |-- index.html
|   |-- login.html
|   |-- score.html
|   |-- sendchat.html
|   |-- sendemail.html
|   |-- student.html
|   `-- timetable.html
`-- view.py

更新链接


github

运行效果部分展示


登陆 主页 成绩 课程 邮箱推送 微信推送