基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

2年前 (2022) 程序员胖胖胖虎阿
295 0 0

🍅 作者主页:Java李杨勇 

🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌  简历模板、学习资料、面试题库【关注我,都给你】

🍅文末获取源码联系🍅

 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里,你想解决的问题,在这专栏👇🏻👇🏻👇🏻👇🏻

java项目精品实战案例分享

web前端期末大作业网页实战

 都能满足你的需求。原始Jsp、SSM、SpringBoot、以及HTML+CSS+JS页面设计, web大学生网页设计作业源码等等都可以参考得到解决。话不多说直接拿一个学科竞赛项目来举例

 视频演示 :

java精品毕设【大学生学科竞赛项目管理系统---基于Springboot+Mybatis+layui】--附完整源码+论文

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】  

论文设计参考:

一、 绪论 7

1.1 研究背景 7

1.2研究目标 7

1.3项目的可行性研究设计 8

二、 需求分析 8

2.1系统功能概述 8

2.2系统运行环境 8

2.3功能需求描述 9

三、 系统设计 9

3.1开发与设计的总体思想 9

3.2系统模块总体架构构图 9

3.3模块设计 10

3.4系统流程描述 10

3. 5项目源码架构 11

四、 系统实现 12

4.1 程序主要类 12

4.1.1用户实体类 13

4.1.2菜单类 14

4.1.3角色类 15

4.1.4项目申请类 16

4.1.4项目经费类 17

4.1.5项目公告类 17

4.2 主要框架和技术介绍 17

4.2.1 spring 18

4.2.2 SpringBoot简介 18

4.2.2 mybatis 18

4.2.2 jQuery 19

4.2.2 element UI 19

4.3系统功能主要实现模块截图 19

4.3.1登陆页面 19

4.3.2 主页面 21

4.3.4部分关键源码展示: 28

4.4数据库主要表设计 31

4.4.0数据库表ER图 32

4.4.1用户表设计 32

4.4.2角色表设计 32

4.4.3菜单表设计 33

4.4.4竞赛公告表设计 33

4.4.5竞赛项目表设计 33

4.4.6竞赛项目报名表设计 34

4.4.7竞赛项目经费表设计 34

4.4.8个人赛报名表设计 34

4.4.8团队赛报名表设计 35

4.4.6数据库sql文件 35

五.系统开发总结心得与体会 75

六、参考献文 76

系统功能设计

(1)登录:输入账号密码和验证码登录;

(2)用户信息模块

(3)菜单模块

(4)角色模块

(5)项目竞赛活动申请模块

(6)项目竞赛经费申请模块

(7)项目竞赛活动管理审批模块

(8)项目个人赛报名模块

(9)项目团队赛报名模块

(10)项目结题统计模块

(11)通知公告模块

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

主要功能截图: 

用户登录:输入帐号密码和验证码登录。登录后,根据用户权限显示不同的菜单,灵活控制角色。

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

管理员功能模块:用户管理、竞赛报名信息管理、经费申请信息和x审核信息管理、项目结题信息、管理角色管理、菜单管理、权限管理、、立项申请管理等具体模块管理

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

用户管理:用户列表显示,数据的添加,以及删除修改等。

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

角色管理:将角色与用户绑定,灵活控制角色菜单,显示菜单权限。可以创建多个角色

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

菜单消息管理:

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

系统日志监控:aop切面编程。实现日志记录操作。

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

业务模块功能

立项申请功能

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】​​

立项审核:

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

活动经费、预算申请 

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

立项申请个人赛以及团队赛管理,录入报名相关信息字段

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

项目结题管理信息:

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

项目完成之后、选择项目进行资金使用统计结题。录入金额

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

项目结题统计:

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

数据库表设计: 

用户表:

CREATE TABLE `NewTable` (
`user_id`  bigint(20) NOT NULL AUTO_INCREMENT ,
`username`  varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名' ,
`salt`  varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '盐' ,
`email`  varchar(1
`password`  varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码' ,
00) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱' ,
`mobile`  varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号' ,
`status`  tinyint(4) NULL DEFAULT NULL COMMENT '状态  0:禁用   1:正常' ,
`create_time`  datetime NULL DEFAULT NULL COMMENT '创建时间' ,
PRIMARY KEY (`user_id`),
UNIQUE INDEX `username` (`username`) USING BTREE 
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
COMMENT='系统用户'
AUTO_INCREMENT=3
ROW_FORMAT=COMPACT

菜单表:

CREATE TABLE `NewTable` (
`menu_id`  bigint(20) NOT NULL AUTO_INCREMENT ,
`parent_id`  bigint(20) NULL DEFAULT NULL COMMENT '父菜单ID,一级菜单为0' ,
`name`  varchar(50) SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单名称' ,
`url`  varchar(200) SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单URL' ,
`perms`  varchar(500) SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '授权(多个用逗号分隔,如:user:list,user:create)' ,
`type`  int(11) NULL DEFAULT NULL COMMENT '类型   0:目录   1:菜单   2:按钮' ,
`icon`  varchar(50) SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标' ,
`order_num`  int(11) NULL DEFAULT NULL COMMENT '排序' ,
PRIMARY KEY (`menu_id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
COMMENT='菜单管理'
AUTO_INCREMENT=69
ROW_FORMAT=COMPACT
;

立项申请:

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`name`  varchar(255) SET utf8 COLLATE NULL NULL ,
`zsdw`  varchar(255) SET utf8 COLLATE  NULL ,
`type`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL NULL ,
`principal`  varchar(255) SET utf8 COLLATE NULL DEFAULT NULL ,
`phone`  varchar(255) SET utf8 COLLATE NULL NULL ,
`start_time`  datetime NULL DEFAULT NULL ,
`ent_time`  datetime NULL DEFAULT NULL ,
`majozhuban`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`sponsor`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL NULL ,
`undertaeker`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL NULL ,
`remark`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL NULL ,
`audit_stu`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=COMPACT
;

个人赛:

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`name`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`college`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`class_name`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`grade`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`major`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`email`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`phone`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`title`  varchar(255) SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=12
ROW_FORMAT=COMPACT
;

经费申请:

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`zhuche`  double NULL NULL ,
`rate`  double NULL NULL ,
`train`  double NULL NULL ,
`guidance`  double NULL NULL ,
`haocai`  double NULL NULL ,
`bonus`  double NULL NULL ,
`other`  double NULL ,
`total`  double NULL NULL ,
`name`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=10
ROW_FORMAT=COMPACT
;

主要代码实现:

用户权限过滤:


    @Bean("shiroFilter")
    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
        shiroFilter.setSecurityManager(securityManager);
        shiroFilter.setLoginUrl("/login.html");
        shiroFilter.setUnauthorizedUrl("/");

        filterMap.put("/statics/**", "anon");
        filterMap.put("/login.html", "anon");
        filterMap.put("/sys/login", "anon");
        filterMap.put("/favicon.ico", "anon");
        filterMap.put("/captcha.jpg", "anon");
        filterMap.put("/**", "authc");
        shiroFilter.setFilterChainDefinitionMap(filterMap);

        Map<String, String> filterMap = new LinkedHashMap<>();
        filterMap.put("/swagger/**", "anon");
        filterMap.put("/v2/api-docs", "anon");
        filterMap.put("/swagger-ui.html", "anon");
        filterMap.put("/webjars/**", "anon");
        filterMap.put("/swagger-resources/**", "anon");

       

        return shiroFilter;
    }

登录模块验证:

/**
	 * 登录
	 */
	@ResponseBody
	@RequestMapping(value = "/sys/login")
	public R login(String username, String password, String captcha) {
		String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
		if(!captcha.equalsIgnoreCase(kaptcha)){
			return R.error("验证码不正确。。。。。。");
		}
		
		try{
			Subject subject = ShiroUtils.getSubject();
			UsernamePasswordToken token = new UsernamePasswordToken(username, password);//md5+Jiayan
			subject.login(token);
		}catch (UnknownAccountException e) {
			return R.error(e.getMessage());
		}catch (IncorrectCredentialsException e) {
			return R.error("账号或密码不正确。。。。");
		}catch (LockedAccountException e) {
			return R.error("账号已被锁定,请联系管理。。。员");
		}catch (AuthenticationException e) {
			return R.error("账户验证失败。。。。");
		}
	    
		return R.ok();
	}

统一异常处理:



/**
 * 异常处理器
 *
 * @author Mark sunlightcs@gmail.com
 */
@RestControllerAdvice
public class RRExceptionHandler {
	private Logger logger = LoggerFactory.getLogger(getClass());

	/**
	 * 处理自定义异常
	 */
	@ExceptionHandler(RRException.class)
	public R handleRRException(RRException e){
		R r = new R();
		r.put("code", e.getCode());
		r.put("msg", e.getMessage());

		return r;
	}

	

	@ExceptionHandler(AuthorizationException.class)
	public R handleAuthorizationException(AuthorizationException e){
		logger.error(e.getMessage(), e);
		return R.error("没有权限,请联系管理员授权");
	}

	@ExceptionHandler(Exception.class)
	public R handleException(Exception e){
		logger.error(e.getMessage(), e);
		return R.error();
	}

@ExceptionHandler(DuplicateKeyException.class)
	public R handleDuplicateKeyException(DuplicateKeyException e){
		logger.error(e.getMessage(), e);
		return R.error("数据库中已存在该记录");
	}
}

分页查询 



package io.renren.common.utils;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.renren.common.xss.SQLFilter;
import org.apache.commons.lang.StringUtils;

import java.util.Map;

/**
 * 查询参数
 *
 * @author Mark sunlightcs@gmail.com
 */
public class Query<T> {

    public IPage<T> getPage(Map<String, Object> params) {
        return this.getPage(params, null, false);
    }

    public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
        //分页参数
        long curPage = 1;
        long limit = 10;

 //分页对象
        Page<T> page = new Page<>(curPage, limit);

        //分页参数
        params.put(Constant.PAGE, page);

        if(params.get(Constant.PAGE) != null){
            curPage = Long.parseLong((String)params.get(Constant.PAGE));
        }
        if(params.get(Constant.LIMIT) != null){
            limit = Long.parseLong((String)params.get(Constant.LIMIT));
        }

       

        //排序字段
        //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)
        String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));
        String order = (String)params.get(Constant.ORDER);

        //前端字段排序
        if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){
            if(Constant.ASC.equalsIgnoreCase(order)) {
                return  page.addOrder(OrderItem.asc(orderField));
            }else {
                return page.addOrder(OrderItem.desc(orderField));
            }
        }

        //没有排序字段,则不排序
        if(StringUtils.isBlank(defaultOrderField)){
            return page;
        }

        //默认排序
        if(isAsc) {
            page.addOrder(OrderItem.asc(defaultOrderField));
        }else {
            page.addOrder(OrderItem.desc(defaultOrderField));
        }

        return page;
    }
}

好了,今天就到这儿吧,我是小奥、下期见~~

 获取完整源码:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系👇🏻👇🏻👇🏻

打卡 文章 更新 70/  100天

 精彩专栏推荐:

Java毕设项目精品实战案例《100套》

HTML5大作业实战案例《100套》

web前端网页实战《100套》

相关文章

暂无评论

暂无评论...