前言
本文将介绍一个基于 Springboot + Vue.js + Mybatis + MySQL + RestfulAPI + Docker 的简单作业管理系统。
Git 仓库地址:HomeworkManagementFinal
开源许可证采用 Apache-2.0
这个系统在之前的作业管理系统 HomeworkManagement 的基础上完全重构,并添加了新的功能与科技。
快速上手
使用 docker 快速部署
如果你已经正确安装 docker,可以通过下列命令快速部署:
1 | docker pull registry.cn-beijing.aliyuncs.com/springwinter/17301122-homeworkmanagement:1.0 |
项目启动后访问 http://localhost:8081/ 即可。
自行编译和构建
如果选择自行编译和构建,请使用 git clone 并使用 Maven 进行构建,或者使用提供的 Jar包。
前端请使用 npm 构建,构建结束后将输出放置在 /src/main/resources/static 目录下。
数据库部分使用 hwm.sql 进行导入,并在 /src/main/resources/application.yml 处修改相关配置。
系统与架构
前端
前端代码位于 client 目录。
前端使用 Vue.js 进行编写,使用 POST 方法与后端 RestfulAPI进行交互。
部分组件使用了 element组件库,提高开发效率。
构建部分请参考对应目录下的 README.md。
数据库
数据库部分使用了 MySQL 数据库,数据库转储文件请见 hwm.sql。
数据库一共包含了四张表格:

后端
后端使用 Springboot进行开发,使用 Maven管理依赖和进行构建。
数据库连接部分使用了 Mybatis 进行连接,使用注解编写 SQL 语句。
Controller部分遵循 RestfulAPI风格,所有接口均使用 Json进行数据交互。
由于这里系统包含了登录功能,这里使用 token进行实现。进行登录后,前端会将后端返回的 token 记录在 cookie 中,在之后的任何对后端的接口的访问都会需要前端提供 token进行身份验证,验证失败则请求无效。进行登出的时候会清除 token,每一次登录请求都会重新生成 token。
接口文档如下:
/user 用户控制器
/login 登录
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 学号或者工号 |
| password | String | 密码 |
| teacher | Boolean | 是否是老师 |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| id | String | 学号或者工号 |
| teacher | Boolean | 是否是老师 |
| message | String | 返回消息 |
| token | String | 登录状态Token |
/logout 登出
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 学号或者工号 |
| password | String | 密码 |
| teacher | Boolean | 是否是老师 |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| id | String | 学号或者工号 |
| teacher | Boolean | 是否是老师 |
| message | String | 返回消息 |
| token | String | 登录状态Token |
/register 注册
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 学号或者工号 |
| name | String | 姓名 |
| password | String | 密码 |
| teacher | Boolean | 是否是老师 |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
/student 学生控制器
/homework_list 获取作业列表
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 学号 |
| token | String | 登录状态Token |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
| list | String | 作业列表 |
list 中元素格式如下:
| param | value | 备注 |
|---|---|---|
| homeworkId | Int | 作业ID |
| teacherName | String | 发布老师的名字 |
| title | String | 作业标题 |
| type | Int | 作业类型:1为未提交,2为未批阅,3为已批阅 |
/homework_info 获取作业详情
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 学号 |
| homeworkId | String | 作业ID |
| token | String | 登录状态Token |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
| homeworkId | Int | 作业ID |
| homeworkTitle | String | 作业标题 |
| homeworkContent | String | 作业内容 |
| type | Int | 作业类型:1为未提交,2为未批阅,3为已批阅 |
| submitTitle | String | 提交的作业的标题 |
| submitContent | String | 提交的作业的内容 |
| score | Int | 批阅分数 |
| comment | String | 批阅评语 |
/submit 提交作业
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 学号 |
| homeworkId | String | 作业ID |
| title | String | 作业标题 |
| content | String | 作业内容 |
| token | String | 登录状态Token |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
/teacher 老师控制器
/homework_list 获取作业列表
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 工号 |
| token | String | 登录状态Token |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
| list | String | 作业列表 |
list 中元素格式如下:
| param | value | 备注 |
|---|---|---|
| homeworkId | Int | 作业ID |
| title | String | 作业标题 |
| submitCount | Int | 已经提交的个数 |
/submit_list 获取指定作业的已提交列表
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 工号 |
| homeworkId | String | 作业ID |
| token | String | 登录状态Token |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
| list | String | 提交列表 |
list 中元素格式如下:
| param | value | 备注 |
|---|---|---|
| submitId | Int | 提交ID |
| studentId | Int | 学号 |
| studentName | String | 学生姓名 |
| type | Int | 作业类型:2为未批阅,3为已批阅 |
/submit_info 获取提交详情
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 工号 |
| submitId | String | 提交ID |
| token | String | 登录状态Token |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
| submitId | Int | 提交ID |
| studentId | Int | 学号 |
| type | Int | 作业类型:2为未批阅,3为已批阅 |
| submitTitle | String | 提交的作业的标题 |
| submitContent | String | 提交的作业的内容 |
| score | Int | 批阅分数 |
| comment | String | 批阅评语 |
/review 批阅作业
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 工号 |
| submitId | String | 提交ID |
| score | Int | 批阅分数 |
| comment | String | 批阅评语 |
| token | String | 登录状态Token |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
/add_homework 发布作业
请求:
| param | value | 备注 |
|---|---|---|
| id | Int | 工号 |
| title | String | 作业标题 |
| content | String | 作业内容 |
| token | String | 登录状态Token |
返回:
| param | value | 备注 |
|---|---|---|
| state | Int | 状态码 |
| message | String | 返回消息 |
功能特点
这个项目是为学生和教师设计的简易的作业的提交和管理平台。
对于教师,有以下功能:
- 注册账户
- 登录账户
- 登出账户
- 发布作业
- 查看已发布的作业列表和详情
- 查看提交的作业内容列表和详情
- 对提交的作业进行批阅,包括评分和评语
对于学生,有以下功能:
- 注册账户
- 登录账户
- 登出账户
- 查看已发布的作业列表和详情
- 提交作业,对已经提交但未批阅的作业可以进行修改
- 查看作业的状态
- 查看作业的评分和评语
系统演示
登录与注册
启动后首先进入首页,你可以进行输入信息并选择角色进行登录。

点击注册按钮可以跳转到注册页面。

老师相关
老师登录后将进入老师的主页。

这里会显示此老师所有发布的作业和提交的数量。点击相应的按钮即可查看提交详情并进行批阅。

进入后将展示这个作业的所有提交,并显示当前状态,点击批阅按钮即可进行批阅。

已经批阅的作业将显示批阅结构,也可以进行多次批阅。

顶部导航栏可以进行发布作业和登出,右边显示当前老师的工号。
点击发布作业将会跳转到作业发布页面,在这里输入作业标题和内容即可发布作业,发布后将跳转到主页。

点击登出按钮将进行询问,询问是否登出,确认后登出,并跳转到登录页面。

学生相关
使用学生帐号进行登录后将跳转到学生主页。
这里展示了所有老师发布的作业和状态。

对于未提交的作业,可以点击相应按钮查看详情并进行提交。

对于已经提交的作业,如果老师还没有进行批阅,可以对提交的作业进行更新。

对于已经批阅的作业,无法进行修改,但是可以查看老师的评分和评语。

