前言
本文将介绍一个基于 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 | 返回消息 |
功能特点
这个项目是为学生和教师设计的简易的作业的提交和管理平台。
对于教师,有以下功能:
- 注册账户
- 登录账户
- 登出账户
- 发布作业
- 查看已发布的作业列表和详情
- 查看提交的作业内容列表和详情
- 对提交的作业进行批阅,包括评分和评语
对于学生,有以下功能:
- 注册账户
- 登录账户
- 登出账户
- 查看已发布的作业列表和详情
- 提交作业,对已经提交但未批阅的作业可以进行修改
- 查看作业的状态
- 查看作业的评分和评语
系统演示
登录与注册
启动后首先进入首页,你可以进行输入信息并选择角色进行登录。
点击注册按钮可以跳转到注册页面。
老师相关
老师登录后将进入老师的主页。
这里会显示此老师所有发布的作业和提交的数量。点击相应的按钮即可查看提交详情并进行批阅。
进入后将展示这个作业的所有提交,并显示当前状态,点击批阅按钮即可进行批阅。
已经批阅的作业将显示批阅结构,也可以进行多次批阅。
顶部导航栏可以进行发布作业和登出,右边显示当前老师的工号。
点击发布作业将会跳转到作业发布页面,在这里输入作业标题和内容即可发布作业,发布后将跳转到主页。
点击登出按钮将进行询问,询问是否登出,确认后登出,并跳转到登录页面。
学生相关
使用学生帐号进行登录后将跳转到学生主页。
这里展示了所有老师发布的作业和状态。
对于未提交的作业,可以点击相应按钮查看详情并进行提交。
对于已经提交的作业,如果老师还没有进行批阅,可以对提交的作业进行更新。
对于已经批阅的作业,无法进行修改,但是可以查看老师的评分和评语。