班级事务管理系统设计与实现

news2024/11/24 5:01:13

班级事务管理系统
后端采用Spring Boot开发。

cloud分支版本正在开发中,后端采用Spring Cloud进行改造。

系统架构

项目采用B/S架构,前后端通讯采用RESTful API,数据格式使用Json,认证Token格式采用JWT。

身份认证使用Spring Security Oauth2。

前端:Vue.js

后端:Spring Cloud

数据库:MySQL

缓存:Redis

文件存储:FastDFS

ORM:MyBatis-Plus

具体技术栈如下:

后端使用的技术栈

  1. Spring Cloud
  2. Spring Security
  3. FastDFS
  4. MySql
  5. Redis
  6. Spring Cache
  7. MyBatis-Plus

前端使用的技术栈

  1. Vue.js
  2. axios
  3. ElementUI
  4. vue-router
  5. vuex
  6. tui-editor

各个模块简要介绍

模块名描述
tclass-common公共模块,存放一些通用的配置和类如:oauth资源服务器的配置,FastDFS文件服务等
tclass-configSpring Cloud配置中心,统一微服务的配置管理
tclass-gatewaySpring Cloud网关,负责将对应请求转发到对应的微服务模块
tclass-oauthSpring Cloud认证中心,负责权限统一的认证,提供登录接口以及发放JWT类型的Token
tclass-registrySpring Cloud注册中心,负责微服务的统一治理。
tclass-notice微服务通知模块,负责通知内容的CRUD
tclass-user微服务用户模块,负责用户的CRUD
tclass-work微服务作业模块,负责作业文件的持久化和作业内容的CRUD

项目中使用Spring Cloud相关组件介绍

技术栈描述
Spring Cloud Config微服务配置的统一管理,实时更新,存储的位置可以为Git仓库、SVN仓库、本地文件等
Spring Cloud OAuth2Spring Cloud 体系对OAuth2协议的实现,可以用来做多个微服务的统一认证 (验证身份合法性)授权(验证权限)
Spring Cloud Eureka负责服务的注册于发现,Eureka体系包括:服务注册中心、服务提供者、服务消费者。
Spring Cloud Ribbon负责服务间调用的负载均衡
Spring Cloud Feign简化微服务之间相互调用,只需要一个接口的注解,就可以实现服务之间的HTTP调用
Spring Cloud Hystrix微服务熔断器,当服务不可用时,防止请求服务的积压,导致系统过载

部署

由于系统使用Spring Cloud架构,部署时一般配合Nginx将请求转发到网关模块。部署时需修改对应注册中心和配置中心的地址。

服务启动顺序如下:

  1. tclass-config
  2. tclass-registry
  3. tclass-oauth
  4. tclass-gateway
  5. 其他业务模块

表字段属性

部门属性(Department)

属性类型说明约束
idint部门唯一标识非空,主键
namevarchar部门名称非空

文件扩展名属性(Extension)

属性类型说明约束
idint扩展名唯一标识非空,主键
namevarchar扩展名名称非空

民族属性(Nation)

属性类型说明约束
idint民族唯一标识非空,主键
namevarchar民族名称非空

政治面貌属性(Politicsstatus)

属性类型说明约束
idint政治面貌唯一标识非空,主键
namevarchar政治面貌名称非空

班级职务属性(Position)

属性类型说明约束
idint职务唯一标识非空,主键
namevarchar职务名称非空

权限属性(Role)

属性类型说明约束
idint权限唯一标识非空,主键
namevarchar权限英文名称非空
zh_namevarchar权限中文名称非空

通知属性(Notice)

属性类型说明约束
idint扩展名唯一标识非空,主键
s_idint通知发起人id非空
edit_s_idint通知编辑人id
deletedtinyint逻辑删除
titlevarchar通知标题非空
contenttext通知内容非空
create_timedatetime创建时间非空
update_timedatetime更新时间非空

学生用户属性(Student)

属性类型说明约束
idint学生用户唯一标识非空,主键
namevarchar学生用户名称非空
role_idint学生权限标识非空
passwordvarchar用户密码非空
gendervarchar用户性别非空
nation_idint民族标识非空
native_placevarchar用户籍贯非空
politic_idint政治面貌标识
emailvarchar用户邮箱
phonevarchar用户手机
addressvarchar用户家庭住址
pos_idint班级职务标识
create_timedatetime创建时间
update_timedatetime更新时间
login_timedatetime最近登录时间
avatar_urlvarchar头像链接
deletedtinyint逻辑删除

上传文件属性(Upload)

属性类型说明约束
s_idint文件所有者id非空
w_idint作业id非空
file_typevarchar文件类型非空
file_namevarchar文件名非空
file_pathvarchar文件保存路径非空
sizebigint文件大小非空
create_timedatetime创建时间
update_timedatetime更新时间

作业属性(Work)

属性类型说明约束
idint扩展名唯一标识非空,主键
s_idint作业发起人id非空
edit_s_idint作业编辑人id
deletedtinyint逻辑删除
namevarchar作业名称非空
extension_idint文件扩展名标识非空
file_name_format_enumint文件名命名枚举非空
last_timedatetime最晚提交时间非空
create_timedatetime创建时间非空
update_timedatetime更新时间非空

接口

统一响应格式:

Content-Type: application/json

状态码:

400 请求参数错误

401 用户未登陆

403 用户权限不足

404 请求资源不存在

405 不支持该请求方法

500 服务器内部出错

503 服务不可用

Json格式规范:

{
 "code":"业务错误码",
 "msg":"描述",
 "data":"结果集",
 "timeStamp":"时间戳"
}

公共接口

登录

请求方法 POST

请求路径 /oauth/login

参数说明
username用户名
password密码
code验证码
grant_typeOauth2认证类型

响应状态(登录成功)

{
    "code": 200,
    "data": {
        "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjQ5NDkxOTAsInVzZXJfbmFtZSI6IjE3MjQxMTE0MDAiLCJhdXRob3JpdGllcyI6WyJST0xFX2FkbWluIl0sImp0aSI6IjQ1MmQ2Y2VkLWJjZWItNDkzOC05NzIyLTk2NzAxOTkzYzIzOCIsImNsaWVudF9pZCI6IndlYmFwcCIsInNjb3BlIjpbInNlcnZlciJdfQ.CW5PB4zZfx7aAUl9I4U6M2KLZGql_AKMjh1V9U9IafY",
        "token_type": "bearer",
        "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiIxNzI0MTExNDAwIiwic2NvcGUiOlsic2VydmVyIl0sImF0aSI6IjQ1MmQ2Y2VkLWJjZWItNDkzOC05NzIyLTk2NzAxOTkzYzIzOCIsImV4cCI6MTYyNDk0NzY5MCwiYXV0aG9yaXRpZXMiOlsiUk9MRV9hZG1pbiJdLCJqdGkiOiI4MDMxZjEyMS0xOGEwLTRjMjktYTMzZS03NzU5NzBjNDc5NTMiLCJjbGllbnRfaWQiOiJ3ZWJhcHAifQ.9VsKTXvtj9tpLROYNVMzvNnN7gCGd7lSAiCHm1xEYM0",
        "expires_in": 1798,
        "scope": "server",
        "jti": "452d6ced-bceb-4938-9722-96701993c238"
    },
    "msg": "登录成功",
    "timeStamp": 1624947390207
}

获取验证码

请求方法 GET

请求路径 /oauth/verifyCode.jpg

响应状态:返回验证码文件流

普通用户接口

更新用户信息

请求方法 PUT

请求路径 /user/

请求体

{
    "address": "海南省海口市美兰区",
    "departmentIdList": [9, 8],
    "email": "chenjing@qq.com",
    "gender": "女",
    "id": 1724111401,
    "name": "陈静",
    "nationId": 44,
    "nativePlace": "广东省,广州市,天河区",
    "phone": "18795556693",
    "politicId": 11,
}

响应状态(请求成功)

{
	"code":200,
	"data":true,
	"msg":"执行成功"
}

获取民族列表

请求方法 GET

请求路径 /user/nations

响应状态(请求成功)

{
	"code": 200,
	"data": [{
		"id": 1,
		"name": "汉族"
	}, {
		"id": 2,
		"name": "蒙古族"
	}, {
		"id": 3,
		"name": "回族"
	}...],
	"msg": "执行成功"
}

获取部门列表

请求方法 GET

请求路径 /user/departments

响应状态(请求成功)

{
	"code": 200,
	"data": [{
		"id": 1,
		"name": "组织部"
	}, {
		"id": 2,
		"name": "实践部"
	}, {
		"id": 3,
		"name": "外联部"
	}...],
	"msg": "执行成功"
}

获取政治面貌列表

请求方法 GET

请求路径 /user/political

响应状态(请求成功)

{
	"code": 200,
	"data": [{
		"id": 1,
		"name": "中共党员"
	}, {
		"id": 2,
		"name": "中共预备党员"
	}, {
		"id": 3,
		"name": "共青团员"
	}...],
	"msg": "执行成功"
}

获取班级职位列表

请求方法 GET

请求路径 /user/political

响应状态(请求成功)

{
	"code": 200,
	"data": [{
		"id": 1,
		"name": "班长"
	}, {
		"id": 2,
		"name": "纪委"
	}, {
		"id": 3,
		"name": "学习委员"
	}...],
	"msg": "执行成功"
}

获取权限列表

请求方法 GET

请求路径 /user/roles

响应状态(请求成功)

{
	"code": 200,
	"data": [{
		"id": 1,
		"name": "ROLE_admin",
		"zhName": "管理员"
	}, {
		"id": 2,
		"name": "ROLE_student",
		"zhName": "普通用户"
	}],
	"msg": "执行成功"
}

上传用户头像

请求方法 POST

请求路径 /user/avatar

参数说明
file头像文件

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

获取用户头像

请求方法 GET

请求路径 /user/avatar/{photoPath}

参数说明
photoPath头像图片路径

响应状态:返回头像文件流

获取作业列表

请求方法 GET

请求路径 /work/

参数说明
current当前页数
size页大小
createTime作业创建时间

响应状态(请求成功)

{
	"code": 200,
	"data": {
		"records": [{
			"id": 3,
			"editSId": null,
			"editorName": null,
			"deleted": false,
			"name": "医保凭证",
			"fileNameFormatEnum": 2,
			"createTime": "2020-12-19 12:58:38",
			"updateTime": "2020-12-19 12:58:38",
			"lastTime": "2020-12-31 00:00:00",
			"remarks": "请同学们将医保凭证上传到此处",
			"extensionId": 11,
			"extensionName": ".jpeg",
			"uploadFileCount": 0,
			"sid": 1724111400,
			"sname": "王涛"
		}],
		"total": 3,
		"size": 6,
		"current": 1,
		"orders": [],
		"optimizeCountSql": true,
		"hitCount": false,
		"searchCount": true,
		"pages": 1
	},
	"msg": "执行成功"
}

获取作业信息

请求方法 GET

请求路径 /work/{id}

参数说明
id作业id

响应状态(请求成功)

{
	"code": 200,
	"data": {
		"id": 3,
		"editSId": null,
		"editorName": null,
		"deleted": false,
		"name": "医保凭证",
		"fileNameFormatEnum": 2,
		"createTime": "2020-12-19 12:58:38",
		"updateTime": "2020-12-19 12:58:38",
		"lastTime": "2020-12-31 00:00:00",
		"remarks": "请同学们将医保凭证上传到此处",
		"extensionId": 11,
		"extensionName": ".jpeg",
		"uploadFileCount": 1,
		"sid": 1724111400,
		"sname": "王涛"
	},
	"msg": "执行成功"
}

获取扩展名列表

请求方法 GET

请求路径 /work/extensions

响应状态(请求成功)

{
	"code": 200,
	"data": [{
		"id": 1,
		"name": "无"
	}, {
		"id": 3,
		"name": ".html"
	}...],
	"msg": "执行成功"
}

上传学生作业

请求方法 POST

请求路径 /work/{wId}

参数说明
wId作业id
file上传的文件
sId学生用户id

响应状态(请求成功)

{
    "code":200,
    ,"data":true,
    "msg":"上传成功!"
}

查询是否已上传作业

请求方法 GET

请求路径 /work/isUpload

参数说明
wId作业id
sId学生用户id

响应状态(请求成功)

{
	"code": 200,
	"data": {	//若已上传,返回文件信息,否则返回null
		"fileType": "application/octet-stream",
		"fileName": "1724111400_王涛_Java作业.java",
		"size": 1170,
		"createTime": "2020-12-22 20:36:39",
		"updateTime": "2020-12-22 20:36:39",
		"sname": "王涛",
		"sid": 1724111400,
		"wid": 2
	},
	"msg": "执行成功"
}

删除已上传的文件

请求方法 DELETE

请求路径 /work/deleteFile

参数说明
wId作业id
sId学生用户id
filename文件名

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

获取通知列表

请求方法 GET

请求路径 /notice/

参数说明
current当前页
size页大小
title通知标题
createTime创建时间

响应状态(请求成功)

{
	"code": 200,
	"data": {
		"records": [{
			"id": 3,
			"editSId": null,
			"editorName": null,
			"deleted": false,
			"name": "医保凭证",
			"fileNameFormatEnum": 2,
			"createTime": "2020-12-19 12:58:38",
			"updateTime": "2020-12-19 12:58:38",
			"lastTime": "2020-12-31 00:00:00",
			"remarks": "请同学们将医保凭证上传到此处",
			"extensionId": 11,
			"extensionName": ".jpeg",
			"uploadFileCount": 1,
			"sname": "王涛",
			"sid": 1724111400
		}...],
		"total": 2,
		"size": 6,
		"current": 1,
		"orders": [],
		"optimizeCountSql": true,
		"hitCount": false,
		"searchCount": true,
		"pages": 1
	},
	"msg": "执行成功"
}

获取通知

请求方法 GET

请求路径 /notice/{id}

参数说明
id通知id

响应状态(请求成功)

{
	"code": 200,
	"data": {
		"id": 33,
		"editSId": 1724111400,
		"editSName": "王涛",
		"deleted": false,
		"title": "关于英语四六级通知",
		"content": "# 英语四六级通知\n1. 报考资格\n    本次补报考生应满足唯一条件:已参加2020年9月延考且当次英语四级(CET4)笔试成绩大于等于425分的考生。\n2. 报名方式及时间\n    1. 本次补报科目仅为英语六级(CET6)笔试,其他科目不予补报。\n    2. 本次补报时间为11月9日9:00-11日17:00,过时不再予以补报。\n    3. 符合补报资格的考生,请自行登录报名系统http://cet-bm.neea.edu.cn完成CET6笔试补报及缴费。",
		"createTime": "2020-12-19 12:49:30",
		"updateTime": "2020-12-19 12:51:27",
		"sname": "王涛",
		"sid": 1724111400
	},
	"msg": "执行成功"
}

获取当前最新通知

请求方法 GET

请求路径 /notice/current

响应状态(请求成功)

{
	"code": 200,
	"data": {
		"id": 33,
		"editSId": 1724111400,
		"editSName": "王涛",
		"deleted": false,
		"title": "关于英语四六级通知",
		"content": "# 英语四六级通知\n1. 报考资格\n    本次补报考生应满足唯一条件:已参加2020年9月延考且当次英语四级(CET4)笔试成绩大于等于425分的考生。\n2. 报名方式及时间\n    1. 本次补报科目仅为英语六级(CET6)笔试,其他科目不予补报。\n    2. 本次补报时间为11月9日9:00-11日17:00,过时不再予以补报。\n    3. 符合补报资格的考生,请自行登录报名系统http://cet-bm.neea.edu.cn完成CET6笔试补报及缴费。",
		"createTime": "2020-12-19 12:49:30",
		"updateTime": "2020-12-19 12:51:27",
		"sname": "王涛",
		"sid": 1724111400
	},
	"msg": "执行成功"
}

管理员接口

分页查询学生数据

请求方法 GET

请求路径 /user/admin/

参数说明
current当前页
size页大小
name学生用户名字
nationId民族标识
nativePlace籍贯
politicId政治面貌
posId班级职务
gender性别

响应状态(请求成功)

{
	"code": 200,
	"data": {
		"records": [{
			"id": 1724111400,
			"roleId": 1,
			"name": "王涛",
			"password": "e10adc3949ba59abbe56e057f20f883e",
			"gender": "男",
			"nationId": 53,
			"nativePlace": "广东省,广州市,天河区",
			"politicId": 1,
			"email": "wang@qq.com",
			"phone": "15644442252",
			"address": "陕西西安新城区",
			"avatarUrl": "/student/avatar/1724111400.jpg",
			"posId": 1,
			"createTime": "2020-07-23 16:32:47",
			"updateTime": "2020-12-22 20:29:53",
			"loginTime": "2020-12-22 20:29:53",
			"deleted": false,
			"role": {
				"id": 1,
				"name": "ROLE_admin",
				"zhName": "管理员"
			},
			"nation": {
				"id": 53,
				"name": "赫哲族"
			},
			"politicsstatus": {
				"id": 1,
				"name": "中共党员"
			},
			"position": {
				"id": 1,
				"name": "班长"
			},
			"departmentIdList": [4, 2, 7, 8, 9]
		}, {
			"id": 1724111401,
			"roleId": 2,
			"name": "陈静",
			"password": "e10adc3949ba59abbe56e057f20f883e",
			"gender": "女",
			"nationId": 44,
			"nativePlace": "广东省,广州市,天河区",
			"politicId": 11,
			"email": "chenjing@qq.com",
			"phone": "18795556693",
			"address": "海南省海口市美兰区",
			"avatarUrl": "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png",
			"posId": 11,
			"createTime": "2020-07-23 16:38:45",
			"updateTime": "2020-12-14 22:41:13",
			"loginTime": "2020-12-14 22:11:45",
			"deleted": false,
			"role": {
				"id": 2,
				"name": "ROLE_student",
				"zhName": "普通用户"
			},
			"nation": {
				"id": 44,
				"name": "俄罗斯族"
			},
			"politicsstatus": {
				"id": 11,
				"name": "台盟盟员"
			},
			"position": {
				"id": 11,
				"name": "无"
			},
			"departmentIdList": [9, 8]
		}...],
		"total": 42,
		"size": 10,
		"current": 1,
		"orders": [],
		"optimizeCountSql": true,
		"hitCount": false,
		"searchCount": true,
		"pages": 5
	},
	"msg": "执行成功"
}

修改用户数据

请求方法 PUT

请求路径 /user/admin/

请求体

{
	"id": 1724111400,
	"name": "王涛",
	"gender": "女",
	"nationId": 53,
	"politicId": 1,
	"email": "wang@qq.com",
	"phone": "15644442252",
	"address": "陕西西安新城区",
	"nativePlace": "广东省,广州市,天河区",
	"posId": 1,
	"roleId": 1,
	"departmentIdList": [4, 2, 7, 8, 9]
}

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

批量删除用户数据

请求方法 DELETE

请求路径 /user/admin/

参数说明
idList用户的id列表

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

批量导出学生数据

请求方法 GET

请求路径 /user/admin/export

参数说明
idList用户的id列表

响应状态:返回excel文件流

批量导入学生数据

请求方法 POST

请求路径 /user/admin/import

参数说明
file导入的excel文件

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"已成功导入n条数据!"
}

获取导入模板

请求方法 GET

请求路径 /user/admin/template

响应状态:返回excel文件流

获取作业数据

请求方法 GET

请求路径 /work/admin/{id}

参数说明
id作业id

响应状态(请求成功)

{
	"code": 200,
	"data": {
		"id": 3,
		"editSId": null,
		"editorName": null,
		"deleted": false,
		"name": "医保凭证",
		"fileNameFormatEnum": 2,
		"createTime": "2020-12-19 12:58:38",
		"updateTime": "2020-12-19 12:58:38",
		"lastTime": "2020-12-31 00:00:00",
		"remarks": "请同学们将医保凭证上传到此处",
		"extensionId": 11,
		"extensionName": ".jpeg",
		"uploadFileCount": 1,
		"sname": "王涛",
		"sid": 1724111400
	},
	"msg": "执行成功"
}

发布作业

请求方法 POST

请求路径 /work/admin/

请求体

{
	"sid": 1724111400,
	"fileNameFormatEnum": 4,//文件命名枚举
	"extensionId": 3,//扩展名标识
	"name": "test",
	"lastTime": "2020-12-24 00:00:00",
	"remarks": "添加数据",
}

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

更新作业数据

请求方法 PUT

请求路径 /work/admin/

请求体

{
	"id": 4,
	"fileNameFormatEnum": 4,
	"extensionId": 3,
	"name": "修改test",
	"lastTime": "2020-12-24 00:00:00",
	"remarks": "添加数据",
	"editSId": 1724111400
}

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

批量删除作业数据

请求方法 DELETE

请求路径 /work/admin/

参数说明
idList作业的id列表

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

下载作业文件

请求方法 GET

请求路径 /work/admin/download

参数说明
wId作业id
fileName文件名

响应状态:返回请求对应的文件流

打包下载作业文件

请求方法 GET

请求路径 /work/admin/download/{wId}

参数说明
wId作业id
fileName文件名

响应状态:返回打包zip文件流

分页获取上传文件信息列表

请求方法 GET

请求路径 /work/admin/upload/{wId}

参数说明
wId作业id
current当前页
size页大小

响应状态(请求成功)

{
	"code": 200,
	"data": {
		"records": [{
			"fileType": "image/jpeg",
			"fileName": "1724111400_王涛_医保凭证.jpeg",
			"size": 5430113,
			"createTime": "2020-12-20 16:23:32",
			"updateTime": "2020-12-20 16:23:32",
			"sname": "王涛",
			"sid": 1724111400,
			"wid": 3
		}...],
		"total": 1,
		"size": 12,
		"current": 1,
		"orders": [],
		"optimizeCountSql": true,
		"hitCount": false,
		"searchCount": true,
		"pages": 1
	},
	"msg": "执行成功"
}

批量删除已提交的作业文件

请求方法 DELETE

请求路径 /work/admin/upload

参数说明
wId作业id
deleteSIdList需要删除文件对应的用户id列表
deleteFileNameList需要删除的文件名列表

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"删除成功!"
}

添加文件扩展名

请求方法 POST

请求路径 /work/admin/extensions

参数说明
name扩展名

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

删除文件扩展名

请求方法 DELETE

请求路径 /work/admin/extensions

参数说明
eId扩展名id

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

发布通知

请求方法 POST

请求路径 /notice/admin/

参数说明
sId发布者id
title通知标题
content通知内容

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

编辑通知

请求方法 PUT

请求路径 /notice/admin/

参数说明
id通知id
editSId编辑者的用户id
sId发布者的用户id
title通知标题
content通知内容

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

批量删除通知

请求方法 DELETE

请求路径 /notice/admin/

参数说明
idList通知的id列表

响应状态(请求成功)

{
    "code":200,
    "data":true,
    "msg":"执行成功"
}

项目效果图

登录界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P3ii2nNW-1691279976612)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/login.jpg)]

项目首页

管理员导航栏

普通用户导航栏

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42HBjEja-1691279976613)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/menu_user.jpg)]

用户管理

用户数据导入导出

用户批量管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YIKnNQnk-1691279976613)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/data_batch.jpg)]

用户高级搜索

编辑个人资料

编辑用户资料

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9tDguO8L-1691279976614)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/user_edit.jpg)]

查看作业

查看提交的文件

提交作业

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qktMJWi4-1691279976615)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/work_upload.jpg)]

作业管理

发布作业

编辑作业

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J9jzTQmj-1691279976615)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/work_edit.jpg)]

编辑扩展名列表

查看用户提交的作业文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1m22kve-1691279976616)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/work_uoload.jpg)]

查看通知

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hJbQcuyq-1691279976616)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/notice_index.jpg)]

查看通知详情

通知管理

编辑通知

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iVK0NIjj-1691279976617)(https://github.com/Teoan/TClass/raw/cloud-dev/doc/notice_edit.jpg)]

发布通知

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第五章 Opencv图像处理框架实战 5-8直方图与傅里叶变化

1、直方图定义 import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() 直方图 cv2.calcHist(images,channels,mask…

【音视频、chatGpt】h5页面最小化后,再激活后视频停住问题的解决

目录 现象 观察 解决 现象 页面有时候要切换,要最小化;短时间或者几个小时内切换回来,视频可以正常续上;而放置较长时间,几个小时或者一晚上,切换回来后,视频可能卡死 观察 切换页面&#x…

如何给Linux开启swap虚拟内存

查看系统内存资源 free -h 创建swap分区 dd if/dev/zero of/swapfile bs1024 count4194304dev/zero:是Linux的一种特殊字符设备(输入设备),可以用来创建一个指定长度用于初始化的空文件,如临时交换文件,该设备无穷尽地提供0&…

工程监测仪器振弦传感器信号转换器应用于隧洞监测

工程监测仪器振弦传感器信号转换器应用于隧洞监测 隧洞建设是重大工程项目,监测隧洞结构和环境的变化对确保隧洞安全和运行管理至关重要。工程监测仪器是实现隧洞监测的关键设备,其中振弦传感器和信号转换器是非常重要的组成部分。 振弦传感器是一种专门…

AI自动驾驶

AI自动驾驶 一、自动驾驶的原理二、自动驾驶的分类三、自动驾驶的挑战四、自动驾驶的前景五、关键技术六、自动驾驶的安全问题七、AI数据与自动驾驶八、自动驾驶的AI算法总结 自动驾驶技术是近年来备受关注的热门话题。它代表了人工智能和机器学习在汽车行业的重要应用。本文将…

SAP Range 表

Range表装的一些个复杂的可以选择的值。有时候单选的值不够用的,用Range表。 数据结构就是Select option一样的。当你在选择屏幕定义一个selection-option的时候,系统自动定义个range表。那我们自己想定义个来用用咋搞? Range表有四列&…

在rviz中实时显示车辆轨迹

在工作空间中创建包 cd ~/catkin_ws/src catkin_create_pkg trajectory_display_example roscpp nav_msgs sensor_msgs在src文件夹下创建一个C源文件 #include <ros/ros.h> #include <nav_msgs/Odometry.h> #include <nav_msgs/Path.h> #include <senso…

roi感兴趣区域像素值统计,求roi感兴趣区域内像素值的最小值、最大值、均值、标准差(标准方差)

文章目录 1、求roi感兴趣区域内像素值的最小值、最大值minMaxLoc() 函数原型&#xff1a;&#xff08;1&#xff09;原型一&#xff1a;&#xff08;2&#xff09;原型二&#xff1a;&#xff08;3&#xff09;另外与 minMaxLoc()函数原型一&#xff0c;用法相同的函数 minMaxI…

mac ssh连接另一台window虚拟机vm

vmware配置端口映射 编辑(E) > 虚拟网络编辑器(N)... > NAT设置(S)... window防火墙&#xff0c;入站规则添加5555端口 控制面板 > 系统和安全 > Windows 防火墙>高级设置>入站规则>新建规则... tips windows查看端口命令&#xff1a;netstat -ano | f…

html实现商品图片放大镜,html图片放大镜预览

效果 实现 复制粘贴&#xff0c;修改图片路径即可使用 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>商品图片放大镜</title></head><style>body {margin: 0;padding: 0;}#app {padding: 10px;posit…

基于Java+SpringBoot+Vue的网吧管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

CEC2013(MATLAB):遗传算法(Genetic Algorithm,GA)求解CEC2013的28个函数

一、遗传算法GA 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任…

国际货币汇率 API 数据接口

国际货币汇率 API 数据接口 支持多种货币对&#xff0c;每日精准汇率&#xff0c;多币种支持。 1. 产品功能 支持多种货币汇率查询&#xff1b;支持部分加密货币汇率查询&#xff1b;数据为每日更新汇率数据&#xff1b;可一次查询源货币代码对应所有目标货币汇率&#xff1b…

无涯教程-Perl - getppid函数

描述 该函数返回父进程的进程ID。 语法 以下是此函数的简单语法- getppid返回值 该函数返回父进程的进程ID。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl$ppidgetppid();print "Parent Process ID $ppid\n";执行上述代码后,将产生以下输出- Paren…

多模态模型评价

论文1 【Evaluating Object Hallucination in Large Vision-Language Models】 这篇文章主要是评价视觉-语言模型中出现“幻觉”的评价。论文中是这样定义幻觉的 we find that LVLMs suffer from the hallucination problem, i.e., they tend to generate objects that are in…

哪个类包含clone方法?是Cloneable还是Object?

在Java中&#xff0c;clone方法是定义在Object类中的。所有的Java类都继承自Object类&#xff0c;因此每个Java对象都继承了clone方法。然而&#xff0c;要成功地使用clone方法&#xff0c;需要满足一些条件&#xff0c;其中之一是被克隆的类必须实现Cloneable接口。 虽然clone…

途乐证券-光伏、储能板块拉升 德业股份、固德威等大幅走高

光伏、储能等新能源板块10日盘中震荡上扬&#xff0c;截至发稿&#xff0c;德业股份涨近8%&#xff0c;锦浪科技、固德威、阿特斯等涨逾6%&#xff0c;禾迈股份、昱能科技涨近4%。 消息面上&#xff0c;据中关村储能产业技术联盟计算&#xff0c;2021年至2023年上半年&#xff…

无涯教程-Perl - glob函数

描述 此函数返回与EXPR匹配的文件的列表,这些文件将由标准Bourne shell进行扩展。如果EXPR未指定路径,请使用当前目录。如果省略EXPR,则使用$_的值。 从Perl 5.6开始,扩展是在内部完成的,而不是使用外部脚本。扩展遵循csh(以及任何派生形式,包括tcsh和bash)的扩展方式,其翻译…

【雕爷学编程】Arduino动手做(08)---湿敏电阻传感器模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

示波器带宽和采样率

示波器带宽概念定义&#xff1a; 在示波器的输入端加相同幅值的正弦波&#xff0c;幅度衰减至-3dB&#xff08;70.7%&#xff09;时的频率点就是示波器的带宽。 如果我们用100MHz带宽的示波器测量&#xff1a;幅值为1V &#xff0c;频率为100MHz 的正弦波时&#xff0c;实际得到…