基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

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

🍅 作者主页:Java李杨勇  

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

🍅 欢迎点赞 👍 收藏 ⭐留言 📝   

🍅文末获取源码联系🍅

 临近期末,或毕业、你还在为网页程序设计、结课作业,老师的作业要求感到头大?毕业设计无从下手?网页功能要求的总数量太多?没有合适的题材或系统做?等等一系列问题。在这里、你想要解决的问题,在专栏👇🏻👇🏻👇🏻👇🏻

java项目精品实战案例分享

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

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

视频演示 :

【大学生学科竞赛项目管理系统---基于Springboot+Mybatis+layui】.mp4

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】​ 

研究背景:

     随着信息技术和网络的迅速发展,在当今世界,电脑正在迅速的普及,人们的生活方式导致了网络主要的时代,几乎每个行业信息化水平越来越高,社会和经济发展是主要的电力网络,随着我国教育的重要性增加,学校里的学生人数增加,学生校园生活越来越精彩,学术,团队竞争,也越来越丰富,在竞争的过程中,应用程序和对过去的论文提交报名不仅是一种资源浪费,而办公效率较低,如果事件较多,员工的内容被掠夺,收费肯定会增加很多难度。

因此,实现大学生竞赛的信息化管理,不仅可以提高竞赛项目的管理效率,还可以给用户带来很多方便。大学生竞赛申报管理系统是一个以项目申报和项目报名人数统计为核心功能的系统。它查询参加竞赛的学生人数是否与项目能容纳的最大学生人数相冲突,在项目管理中起着重要的作用。因此,大学生竞赛应用管理系统可以为师生提供充足的信息和快捷的查询手段,方便项目经理增减办考场的布局,避免竞争能力冲突等问题的发生。

因为以往大多数比赛的项目管理都是最简单的人工管理,由班长牵头通知,班长在班内沟通通知,以及同学申请参加活动,信息再由班长收集,最后由学校领导对所有参赛学生名单进行分类和统计,导致项目竞赛管理工作量大,实时了解使用情况,工作效率低。因此,设计大学生竞赛申报管理系统具有十分重要的现实意义。

系统功能设计

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

(2)用户信息模块

(3)菜单模块

(4)角色模块

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

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

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

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

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

(10)项目结题统计模块

(11)通知公告模块

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

主要数据表设计:

用户表:

CREATE TABLE `NewTable` (
`user_id`  bigint(20) NOT NULL AUTO_INCREMENT ,
`username`  varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名' ,
`password`  varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码' ,
`salt`  varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '盐' ,
`email`  varchar(100) 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:正常' ,
`dept_id`  bigint(20) NULL DEFAULT NULL COMMENT '部门ID' ,
`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) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单名称' ,
`url`  varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单URL' ,
`perms`  varchar(500) CHARACTER 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) CHARACTER 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) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`zsdw`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`type`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`principal`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`phone`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`email`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 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) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`undertaeker`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`apply_time`  datetime NULL DEFAULT NULL ,
`remark`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`audit_stu`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=31
ROW_FORMAT=COMPACT
;

个人赛:

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`name`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`college`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`class_name`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`grade`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`major`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`email`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`phone`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`title`  varchar(255) CHARACTER 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 DEFAULT NULL ,
`rate`  double NULL DEFAULT NULL ,
`train`  double NULL DEFAULT NULL ,
`guidance`  double NULL DEFAULT NULL ,
`haocai`  double NULL DEFAULT NULL ,
`bonus`  double NULL DEFAULT NULL ,
`other`  double NULL DEFAULT NULL ,
`total`  double NULL DEFAULT NULL ,
`name`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=10
ROW_FORMAT=COMPACT
;

主要功能截图:

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

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

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

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

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

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

角色管理:通过给用户绑定角色、角色控制菜单灵活、显示菜单权限功能。用户可以新建多个角色

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

菜单消息管理:

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

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

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

业务模块功能;

立项申请功能:

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

立项审核功能:

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

活动经费预算申请 :

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

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

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

项目结题管理信息:

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

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

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

项目结题统计:

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

代码结构:idea、eclipse直接导入就可运行、

基于Springboot+mybatis+lyaui实现学科竞赛管理系统【详细设计--附完整源码】

主要源码实现:

用户权限过滤:


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

        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");

        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);

        return shiroFilter;
    }

登录模块验证:

/**
	 * 登录
	 */
	@ResponseBody
	@RequestMapping(value = "/sys/login", method = RequestMethod.POST)
	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();
	}

统一异常处理:

/**
 * .
 *
 *
 *
 *
 */

package io.renren.common.exception;

import io.renren.common.utils.R;
import org.apache.shiro.authz.AuthorizationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 异常处理器
 *
 * @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(DuplicateKeyException.class)
	public R handleDuplicateKeyException(DuplicateKeyException e){
		logger.error(e.getMessage(), e);
		return R.error("数据库中已存在该记录");
	}

	@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();
	}
}

分页查询 

/**
 * .
 *
 *
 *
 *
 */

package io.renren.common.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;
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;

        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));
        }

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

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

        //排序字段
        //防止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套》

相关文章

暂无评论

暂无评论...