项目描述
临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基于springboot的教学在线作业管理系统设计与实现。
功能需求
本教学在线作业管理系统通过分析和确定系统的角色和功能划分,按照业务合理区分为不同的菜单功能模块。从用户角度出发,对每个功能的需求实现点进行人性化详细的构思。对每个功能的细节点进行分析设计整合完成整个教学在线作业管理系统的设计。主要分为学生、教师、管理员三个用户角色,具体功能如下图所受。
部分效果图
部分代码
/**
* 批量导入用户
* @param file
* @return
*/
@RequestMapping("upload")
@ResponseBody
public ResponseBean uploadUser(MultipartFile file){
if(file==null||file.isEmpty()){
return ResultUtil.error("请上传文件!");
}
String originalFilename = file.getOriginalFilename();
String extendName = "."+ FileUtils.getExtension(file);
logger.debug("file.getResource:"+file.getResource());
String saveFileName= UUID.randomUUID().toString().replaceAll("-","")+extendName;
File saveFile=new File(baseFilePath+File.separator+saveFileName);
if(!saveFile.getParentFile().exists()){
saveFile.getParentFile().mkdirs();
}
try {
//保存文件到最终路径
file.transferTo(saveFile);
XSSFWorkbook workbook=new XSSFWorkbook(new FileInputStream(saveFile));
XSSFSheet sheet = workbook.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
if(rows<2){
return ResultUtil.error("上传文件为空!");
}
for(int i=1;i<rows;i++){
XSSFRow row = sheet.getRow(i);
String name = ToolsUtils.getValFromCell(row.getCell(0));//用户名称
String code = ToolsUtils.getValFromCell(row.getCell(1));//登录账号
String mobile = ToolsUtils.getValFromCell(row.getCell(2));//手机号
String password = ToolsUtils.getValFromCell(row.getCell(3));//密码
if(StringUtils.isEmpty(password)){
password=code;
}
String email = ToolsUtils.getValFromCell(row.getCell(4));//邮箱
String sex = ToolsUtils.getValFromCell(row.getCell(5)).equals("男")?"1":"2";//性别
String type = ToolsUtils.getValFromCell(row.getCell(6)).equals("学生")?"2":"3";//角色
if(!RegexUtil.checkEmail(email)||!RegexUtil.checkMobile(mobile)){
logger.debug("邮箱{}或手机号{}不合法,本条不插入",email,mobile);
continue;
}
QueryWrapper<SysUser> queryWrapper=new QueryWrapper();
queryWrapper.eq("code",code).or().eq("mobile",mobile);
List<SysUser> list = userService.list(queryWrapper);
if(!ToolsUtils.isEmpty(list)){
logger.debug("当前账号或手机号已经存在,即将跳过!");
continue;
}
SysUser user=new SysUser();
user.setCode(code);
user.setName(name);
user.setMobile(mobile);
user.setEmail(email);
user.setPassword(MD5Util.md5(password,md5Key));
user.setSex(sex);
user.setType(Integer.parseInt(type));
userService.save(user);
}
return ResultUtil.success("导入成功!");
} catch (IOException e) {
logger.error(e.getMessage(),e);
}
return ResultUtil.error();
}
/**
* 用户添加
* @param user
* @return
*/
@RequestMapping("add")
@ResponseBody
public ResponseBean addUser(SysUser user, MultipartFile file){
logger.debug("addSysUser:"+user);
if(user==null){
return ResultUtil.error(CommonEnum.BAD_PARAM);
}
String mobile = user.getMobile();
if(!StringUtils.isEmpty(mobile)&&!RegexUtil.checkMobile(mobile)){
logger.error("手机号为空!");
return ResultUtil.error("手机号不合法!");
}
SysClass sysClass = classService.getById(user.getClassId());
user.setClassName(sysClass.getName());
List<SysUser> list = userService.getUserByUserName(user);
if (list != null && list.size() > 0){
logger.error("手机号或者账号已存在!");
return ResultUtil.error("该登录手机号或者账号已存在请重新输入!");
}
String password= StringUtils.isEmpty(user.getPassword())?"123456":user.getPassword();
//对密码进行MD5盐值加密,数据库保存密码的密文
//MD5Util.md5(password,md5Key md5key就是盐值
user.setPassword(MD5Util.md5(password,md5Key));
boolean add = userService.save(user);
logger.debug("用户添加结果:"+user);
//保存文件并更新saveName到user.field1
if (file!=null&&!file.isEmpty()) {
SysFile sysFile=new SysFile();
sysFile.setObjectId(user.getId());
sysFile.setCategoryCode(ComCodeEnum.category_code_user);
SysFile saveFile=fileService.saveOrUpdateFile(sysFile,file);
if(saveFile!=null&&!StringUtils.isEmpty(saveFile.getSaveName())){
user.setField1(saveFile.getSaveName());
}
userService.updateById(user);
}
return ResultUtil.success();
}
/**
* 跳转到用户修改页面
* @param id
* @param model
* @return
*/
@RequestMapping("/editPage/{id}")
public String editPage(@PathVariable Long id, Model model) {
model.addAttribute("user", userService.getById(id));
return prefix+"/edit";
}
/**
* 修改用户密码
* @param id
* @param password
* @param oldpwd
* @return
*/
@RequestMapping("updatePWd")
@ResponseBody
public ResponseBean updatePWd(Long id,String password,String oldpwd,HttpSession session){
SysUser user = userService.getById(id);
String userPassword = user.getPassword();
if(!MD5Util.md5Verify(oldpwd,md5Key,userPassword)){
return ResultUtil.error("原始密码不正确!");
}
user.setPassword(MD5Util.md5(password,md5Key));
user.setUpdateTime(LocalDateTime.now());
userService.updateById(user);
session.setAttribute("user",user);
return ResultUtil.successData(user);
}
/**
* 初始化用户密码
* @param id
* @return
*/
@RequestMapping("initPwd")
@ResponseBody
public ResponseBean initPwd(Long id){
if(id==null||id<1){
return ResultUtil.error(CommonEnum.BAD_REQUEST);
}
SysUser sysUser = userService.getById(id);
if(sysUser!=null){
sysUser.setPassword(MD5Util.md5("123456",md5Key));
sysUser.setUpdateTime(LocalDateTime.now());
userService.updateById(sysUser);
return ResultUtil.success();
}
return ResultUtil.error(CommonEnum.NO_USER_EXIST);
}
/**
* 用户修改
* @param user
* @return
*/
@RequestMapping("/edit")
@ResponseBody
public ResponseBean updateById(MultipartFile file, SysUser user,HttpSession session) {
if (user == null) {
return ResultUtil.error(CommonEnum.BAD_PARAM);
}
String mobile = user.getMobile();
if(!StringUtils.isEmpty(mobile)&&!RegexUtil.checkMobile(mobile)){
return ResultUtil.error("手机号不合法!");
}
if(user.getClassId()!=null){
SysClass sysClass = classService.getById(user.getClassId());
user.setClassName(sysClass.getName());
}
//处理密码
String password = user.getPassword();
if(!StringUtils.isEmpty(password)){
user.setPassword(MD5Util.md5(password,md5Key));
}else{
user.setPassword(null);
}
if (file!=null&&!file.isEmpty()) {
SysFile sysFile=new SysFile();
sysFile.setObjectId(user.getId());
sysFile.setCategoryCode(ComCodeEnum.category_code_user);
SysFile saveFile=fileService.saveOrUpdateFile(sysFile,file);
if(saveFile!=null&&!StringUtils.isEmpty(saveFile.getSaveName())){
user.setField1(saveFile.getSaveName());
}
}
user.setUpdateTime(LocalDateTime.now());
boolean i = userService.updateById(user);
return ResultUtil.success() ;
}
/**
* 跳转用户列表页面
* @return
*/
@RequestMapping("/listPage")
public String userListPage() {
return prefix+"/list";
}
/**
* 分页列表查询
* @param queryParam 查询参数
* params[beginTime]: 2020-10-16 -map参数
* params[endTime]: 2020-10-16 -map参数
* @return
*/
@RequestMapping("/list")
@ResponseBody
public ResponseBean getList(PageDTO pageDTO, SysUser queryParam , HttpSession session) {
logger.debug("查询用户列表参数:"+queryParam+",pageDTO:"+pageDTO);
QueryWrapper<SysUser> queryWrapper=new QueryWrapper<>();
Integer type = ToolsUtils.getLoginUser(session).getType();//用户角色
queryWrapper.eq(queryParam.getClassId()!=null,"class_id",queryParam.getClassId());
queryWrapper.like(!StringUtils.isEmpty(queryParam.getName()),"name",queryParam.getName());
queryWrapper.like(!StringUtils.isEmpty(queryParam.getMobile()),"mobile",queryParam.getMobile());
queryWrapper.like(!StringUtils.isEmpty(queryParam.getType()),"type",queryParam.getType());
queryWrapper.ne("code","admin");//用户管理里面超级管理员admin除外
queryWrapper.orderBy(true,pageDTO.getIsAsc().equals("asc"), ToolsUtils.camelToUnderline(pageDTO.getOrderByColumn()));
IPage<SysUser> indexPage = new Page<>(pageDTO.getPageNum(),pageDTO.getPageSize());
IPage<SysUser> listPage = userService.page(indexPage, queryWrapper);
logger.debug("获取的用户列表:"+listPage);
//获取分页信息
Map pageInfo = ToolsUtils.wrapperPageInfo(listPage);
return ResultUtil.successData(pageInfo);
}
/**
* 用户删除
* @param idList
* @return
*/
@RequestMapping("delete")
@ResponseBody
public ResponseBean delete(@RequestParam("idList") List<Long> idList){
if(idList==null||idList.isEmpty()){
return ResultUtil.error("ID不合法!");
}
idList.forEach(e->userService.removeById(e));
return ResultUtil.success();
}
/**
* 启用/禁用用户
* @param id
* @param state
* @return
*/
@RequestMapping("updateState")
@ResponseBody
public ResponseBean updateState(Long id,Integer state){
SysUser user = userService.getById(id);
user.setState(state);
user.setUpdateTime(LocalDateTime.now());
userService.updateById(user);
return ResultUtil.successData(user);
}
/**
* 后台用户登录
* @param user
* @param session
* @param verifyCode
* @return
*/
@RequestMapping("/checkLogin")
@ResponseBody
public ResponseBean checkLogin(SysUser user, HttpSession session, @RequestParam String verifyCode) {
//首先验证验证码是否存在
String trueVerifyCode = (String) session.getAttribute("verifyCode");
if (trueVerifyCode == null) {
return ResultUtil.error(CommonEnum.REFRESH_VERIFYCODE);
}
//判断验证码是否输入正确(验证码忽略大小写)
if (!trueVerifyCode.equalsIgnoreCase(verifyCode)) {
return ResultUtil.error(CommonEnum.ERROR_VERIFYCODE);
}
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.eq("code",user.getCode());
List<SysUser> list = userService.list(queryWrapper);
//判断是否存在当前用户
if (ToolsUtils.isEmpty(list)) {
return new ResponseBean(false, CommonEnum.NO_USER_EXIST);
}
SysUser sysUser = list.get(0);
if(sysUser.getType()==2){
return ResultUtil.error("学生不可以登录管理后台!");
}
if(sysUser.getState()!=1){
return ResultUtil.error("用户已经被禁用,请联系管理员!");
}
//判断密码是否正确
if (!MD5Util.md5Verify(user.getPassword(), this.md5Key, sysUser.getPassword())) {
return new ResponseBean(false, CommonEnum.INVALID_PASSWORD);
}
//通过所有验证
session.setAttribute("user", sysUser);
session.setAttribute("type", sysUser.getType());
return ResultUtil.success( "登录成功!");
}
/**
* 后台用户登录
* @param user
* @param session
* @param verifyCode
* @return
*/
@RequestMapping("/teacherLogin")
@ResponseBody
public ResponseBean teacherLogin(SysUser user, HttpSession session, @RequestParam String verifyCode) {
//首先验证验证码是否存在
String trueVerifyCode = (String) session.getAttribute("verifyCode");
if (trueVerifyCode == null) {
return ResultUtil.error(CommonEnum.REFRESH_VERIFYCODE);
}
//判断验证码是否输入正确(验证码忽略大小写)
if (!trueVerifyCode.equalsIgnoreCase(verifyCode)) {
return ResultUtil.error(CommonEnum.ERROR_VERIFYCODE);
}
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.eq("code",user.getCode());
List<SysUser> list = userService.list(queryWrapper);
//判断是否存在当前用户
if (ToolsUtils.isEmpty(list)) {
return new ResponseBean(false, CommonEnum.NO_USER_EXIST);
}
SysUser sysUser = list.get(0);
if(sysUser.getType()==2){
return ResultUtil.error("学生不可以登录教师管理后台!");
}
if(sysUser.getType()==1){
return ResultUtil.error("管理员不可以登录教师管理后台!");
}
if(sysUser.getState()!=1){
return ResultUtil.error("用户已经被禁用,请联系管理员!");
}
//判断密码是否正确
if (!MD5Util.md5Verify(user.getPassword(), this.md5Key, sysUser.getPassword())) {
return new ResponseBean(false, CommonEnum.INVALID_PASSWORD);
}
//通过所有验证
session.setAttribute("user", sysUser);
session.setAttribute("type", sysUser.getType());
return ResultUtil.success( "登录成功!");
}
安装部署需求
eclipse运行启动
系统部署
系统开发后,在生产环境配置项目运行环境,具体步骤如下:
安装linux或者windows10操作系统;
安装JDK1.8并配置环境变量;
安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
在IDEA中一键运行;
本项目用到的技术和框架
1.开发语言:Java
2.开发模式:B/S
3.数据库:MySQL5.7
4.框架:Springboot+Mybaits+HTML
本项目中的关键点
此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。
环境工具
开发工具 Eclipse/IDEA
语言 JDK1.8 、Java
硬件:笔记本电脑;
软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
其它软件:截图工具、常用浏览器;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。