SpringBoot高校运动会管理系统 附带详细运行指导视频

文章目录

  • 一、项目演示
  • 二、项目介绍
  • 三、运行截图
  • 四、主要代码
    • 1.报名赛事代码
    • 2.用户登录代码
    • 3.保存成绩代码

一、项目演示

项目演示地址: 视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot框架开发的高校运动会管理系统项目。首先,这是一个响应式的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目在报名赛事功能上采用了ZooKeeper分布式锁进行高并发情况下的功能优化设计,如果不想要Zookeeper,也会免费指导如何去除,不会影响现有功能。最后,这项目功能丰富,具有一个高校运动会管理系统该有的所有功能。

项目功能:该项目分为学生管理员两个角色。学生有登录、管理个人信息、查看运动会信息、查看赛事信息、报名赛事、管理个人报名信息、查看成绩信息、查看公告信息等等功能。管理员有管理所有用户信息、管理所有运动会信息、管理所有赛事信息、管理所有报名信息、管理所有成绩信息、管理所有公告信息等等功能。

应用技术:SpringBoot + MyBatis + Thymeleaf + Bootstrap + MySQL + ZooKeeper

运行环境:IntelliJ IDEA(项目压缩包中自带) + MySQL(项目压缩包中自带) + Maven3.6.3(项目压缩包中自带) + JDK1.8(项目压缩包中自带) + ZooKeeper3.8.4(项目压缩包中自带)

三、运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、主要代码

1.报名赛事代码

 /**
  * 报名赛事
  * @param signDTO
  * @return
  */
 @Override
    public ResponseDTO<Boolean> signContest(SignDTO signDTO, HttpServletRequest request) {
        if(CommonUtil.isEmpty(signDTO.getContestId())) {
            return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
        }
        User user = (User) request.getSession().getAttribute(SessionConstant.SESSION_LOGIN_KEY);
        Contest contest = contestMapper.selectByPrimaryKey(signDTO.getContestId());
        if(contest == null) {
            return ResponseDTO.errorByMsg(CodeMsg.CONTEST_NOT_EXIST);
        }
        if(contest.getSignEndTime().getTime() <= new Date().getTime()) {
            return ResponseDTO.errorByMsg(CodeMsg.SIGN_DATE_OVER);
        }
        if(contest.getNowSignNum() >= contest.getMaxSignNum()) {
            return ResponseDTO.errorByMsg(CodeMsg.SIGN_NUM_ERROR);
        }
        SignExample signExample = new SignExample();
        signExample.createCriteria().andUserIdEqualTo(user.getId()).andContestIdEqualTo(contest.getId());
        List<Sign> signList = signMapper.selectByExample(signExample);
        if(signList.size() > 0) {
            return ResponseDTO.errorByMsg(CodeMsg.SIGN_CONTEST_EXIST);
        }
        Sign sign = CopyUtil.copy(signDTO, Sign.class);
        sign.setId(UuidUtil.getShortUuid());
        sign.setUserId(user.getId());
        sign.setCreateTime(new Date());
        if(signMapper.insertSelective(sign) == 0) {
            throw new RuntimeException(CodeMsg.SIGN_ADD_ERROR.getMsg());
        }
        contest.setNowSignNum(contest.getNowSignNum() + 1);
        if(contestMapper.updateByPrimaryKeySelective(contest) == 0) {
            throw new RuntimeException(CodeMsg.CONTEST_EDIT_ERROR.getMsg());
        }
        return ResponseDTO.successByMsg(true, "报名成功");
    }

2.用户登录代码

  /**
   * 用户登录操作
   * @param userDTO
   * @param request
   * @return
   */
  @Override
    public ResponseDTO<Boolean> login(UserDTO userDTO, HttpServletRequest request) {
        if(userDTO == null) {
            return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
        }
        if(CommonUtil.isEmpty(userDTO.getNo())) {
            return ResponseDTO.errorByMsg(CodeMsg.NO_EMPTY);
        }
        if(CommonUtil.isEmpty(userDTO.getPassword())) {
            return ResponseDTO.errorByMsg(CodeMsg.PASSWORD_EMPTY);
        }
        UserExample userExample = new UserExample();
        userExample.createCriteria()
                .andNoEqualTo(userDTO.getNo())
                .andPasswordEqualTo(userDTO.getPassword())
                .andRoleIdEqualTo(userDTO.getRoleId());
        List<User> userList = userMapper.selectByExample(userExample);
        if(userList.size() == 0) {
            return ResponseDTO.errorByMsg(CodeMsg.NO_PASSWORD_ERROR);
        }
        request.getSession().setAttribute(SessionConstant.SESSION_LOGIN_KEY, userList.get(0));

        return ResponseDTO.successByMsg(true, "登录成功!");
    }

3.保存成绩代码

    /**
     * 保存成绩信息
     * @param resultDTO
     * @return
     */
 	@Override
    public ResponseDTO<Boolean> save(ResultDTO resultDTO) {
        if(resultDTO == null) {
            return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
        }
        // 进行统一表单验证
        CodeMsg validate = ValidateEntityUtil.validate(resultDTO);
        if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
            return ResponseDTO.errorByMsg(validate);
        }
        UserExample userExample = new UserExample();
        userExample.createCriteria().andNoEqualTo(resultDTO.getUserNo());
        List<User> userList = userMapper.selectByExample(userExample);
        if(userList.size() == 0) {
            return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);
        }
        Contest contest = contestMapper.selectByPrimaryKey(resultDTO.getContestId());
        if(contest == null) {
            return ResponseDTO.errorByMsg(CodeMsg.CONTEST_NOT_EXIST);
        }
        User user = userList.get(0);
        // 判断是否有报名
        SignExample signExample = new SignExample();
        signExample.createCriteria().andContestIdEqualTo(contest.getId()).andUserIdEqualTo(user.getId());
        if(signMapper.countByExample(signExample) == 0) {
            return ResponseDTO.errorByMsg(CodeMsg.CONTEST_NOT_SIGN);
        }
        Result result = CopyUtil.copy(resultDTO, Result.class);
        result.setUserId(user.getId());
        if(CommonUtil.isEmpty(result.getId())){
            // 添加操作
            // 判断成绩信息是否存在
            if(isResultExist(result, "")){
                return ResponseDTO.errorByMsg(CodeMsg.RESULT_EXIST);
            }
            result.setId(UuidUtil.getShortUuid());
            if(resultMapper.insertSelective(result) == 0){
                return ResponseDTO.errorByMsg(CodeMsg.RESULT_ADD_ERROR);
            }
        }else {
            // 修改操作
            // 判断成绩信息是否存在
            if(isResultExist(result, result.getId())){
                return ResponseDTO.errorByMsg(CodeMsg.RESULT_EXIST);
            }
            if(resultMapper.updateByPrimaryKeySelective(result) == 0){
                return ResponseDTO.errorByMsg(CodeMsg.RESULT_EDIT_ERROR);
            }
        }
        return ResponseDTO.success(true);
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Readability.js 与 Newspaper提取网页内容和元数据

在当今信息爆炸的时代&#xff0c;网页内容的提取和处理变得尤为重要。无论是从新闻网站、博客还是教程网站中提取内容&#xff0c;都需要一个高效、准确的工具来帮助我们去除无关信息&#xff0c;提取出有价值的正文内容。这不仅能够提高我们的工作效率&#xff0c;还能让我们…

Linux中的UDP编程接口基本使用

UDP编程接口基本使用 本篇介绍 在前面网络基础部分已经介绍了网络的基本工作模式&#xff0c;有了这些理论基础之后&#xff0c;下面先从UDP编程开始从操作部分深入网络 在本篇中&#xff0c;主要考虑下面的内容&#xff1a; 创建并封装服务端&#xff1a;了解创建服务端的…

Yocto + 树莓派摄像头驱动完整指南

—— 从驱动配置、Yocto 构建&#xff0c;到 OpenCV 实战 在树莓派上运行摄像头&#xff0c;在官方的 Raspberry Pi OS 可能很简单&#xff0c;但在 Yocto 项目中&#xff0c;需要手动配置驱动、设备树、软件依赖 才能确保摄像头正常工作。本篇文章从 BSP 驱动配置、Yocto 关键…

【全栈开发】从0开始搭建一个图书管理系统【一】框架搭建

【全栈开发】从0开始搭建一个图书管理系统【一】框架搭建 前言 现在流行降本增笑&#xff0c;也就是不但每个人都要有事干不能闲着&#xff0c;更重要的是每个人都要通过报功的方式做到平日的各项工作异常饱和&#xff0c;实现1.5人的支出干2人的活计。单纯的数据库开发【肤浅…

postgresql源码学习(60)—— VFD的作用及机制

首先VFD是Virtual File Descriptor&#xff0c;即虚拟文件描述符&#xff0c;既然是虚拟的&#xff0c;一定先有物理的。 一、 物理文件描述符&#xff08;File Descriptor, FD&#xff09; 1. 什么是 FD 它是操作系统提供给用户程序访问和操作文件或其他 I/O 资源的抽象接口…

基于STM32的智能家居蓝牙系统(论文+源码)

1总体方案设计 本次基于STM32的智能家居蓝牙系统&#xff0c;其系统总体架构如图2.1所示&#xff0c;采用STM32f103单片机作为控制器&#xff0c;通过DHT11传感器实现温湿度检测&#xff0c;MQ-2烟雾传感器实现烟雾检测&#xff0c;光敏电阻实现光照检测&#xff0c;同时将数据…

python量化交易——金融数据管理最佳实践——使用qteasy管理本地数据源

文章目录 统一定义的金融历史数据表最重要的数据表数据表的定义交易日历表的定义&#xff1a;交易日历表: trade_calendar qteasy是一个功能全面且易用的量化交易策略框架&#xff0c; Github地址在这里。使用它&#xff0c;能轻松地获取历史数据&#xff0c;创建交易策略并完…

如何使用ArcGIS Pro制作横向图例:详细步骤与实践指南

ArcGIS Pro&#xff0c;作为Esri公司推出的新一代地理信息系统&#xff08;GIS&#xff09;平台&#xff0c;以其强大的功能和灵活的操作界面&#xff0c;在地理数据处理、地图制作和空间分析等领域发挥着重要作用。 在地图制作过程中&#xff0c;图例作为地图的重要组成部分&…

C语言(18)------------>函数(1)

本文介绍C语言函数的定义、标准库和库函数、自定义函数、函数中形式参数和实际参数。通过举例子和画图的方式分解每一个知识点&#xff0c;并结合生活案例和已知知识来解释函数知识。从而使得读者对C语言的函数理解更加深入&#xff0c;学习到C语言开发软件的一些实用技巧。 一…

MaxCompute x DataWorks × DeepSeek,实现使用自定义数据集微调DeepSeek-R1蒸馏模型

一、整体概要 基于阿里云云原生大数据计算服务MaxCompute以及大数据开发治理平台DataWorks实现使用自定义数据集微调DeepSeek-R1蒸馏模型主要分为两大部分&#xff0c;一部分是基于人工智能平台PAI的微调训练&#xff0c;第二部分是通过如何构建自有数据集&#xff0c;并进行接…

unity大坐标抖动处理测试

第二幅图就是相机坐标是0 6360094 0的地方看见的模型&#xff0c;可以看见这个球体已经烂了 那么这里可以知道的是坐标太大了导致的&#xff0c;那么把所有物体共同偏移一下&#xff0c;即可得到第一幅图的效果&#xff0c;圆润的sphere又回来了 浮点数的计算是需要位数的&…

Sqli-labs

先搭建靶场 一、环境准备 建议采用虚拟机作为靶场环境的承载平台&#xff0c;以实现更灵活、可定制的配置&#xff0c;提高系统资源的利用效率。这种部署方式不仅能够有效隔离实验环境&#xff0c;降低对真实硬件的依赖&#xff0c;还能够快速搭建和复制实验场景&#xff0c;…

ES、OAS、ERP、电子政务、企业信息化(高软35)

系列文章目录 ES、OAS、ERP、电子政务、企业信息化 文章目录 系列文章目录前言一、专家系统&#xff08;ES&#xff09;二、办公自动化系统&#xff08;OAS&#xff09;三、企业资源规划&#xff08;ERP&#xff09;四、典型信息系统架构模型1.政府信息化和电子政务2.企业信息…

miqiu的分布式锁(四):MySQL悲观锁解析

&#x1f4da;miqiu的分布式锁&#xff08;四&#xff09;&#xff1a;MySQL悲观锁解析 &#x1f31f; 什么是悲观锁&#xff1f; “先下手为强&#xff01;”——这就是悲观锁的核心思想。它默认所有操作都可能发生并发冲突&#xff0c;在操作数据前会先加锁&#xff0c;确保…

openEuler环境下GlusterFS分布式存储集群部署指南

1.环境准备&#xff1a; os&#xff1a;openEuler 22.03 主机名 IP地址 主机用途 Rocky8192.168.121.160客户端 open-Euler1192.168.121.150节点1&#xff0c;提供两块6G硬盘open-Euler4192.168.121.153节点2&#xff0c;提供两块6G硬盘open-Euler5192.168.121.154 …

网络空间安全(6)web应用程序技术

前言 Web应用程序技术是指用于开发和构建基于Web的应用程序的技术和工具&#xff0c;涵盖了前端开发、后端开发、数据库管理、安全性等多个方面的技术。 一、前端开发技术 HTML/CSS/JavaScript&#xff1a;HTML用于构建网页结构&#xff0c;CSS用于进行样式设计&#xff0c;Jav…

unity中找不到AI > Navgation

预制体中的Add Component 选中Agent Type -> Open Agent Setting跳出没有安装包的提示后,点击安装

手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人

手机打电话时如何识别对方按下的DTMF按键的字符 --安卓AI电话机器人 一、前言 前面的篇章中&#xff0c;使用蓝牙电话拦截手机通话的声音&#xff0c;并对数据加工&#xff0c;这个功能出来也有一段时间了。前段时间有试用的用户咨询说&#xff1a;有没有办法在手机上&#xff…

LVGL -------矩阵3

static void event_cb(lv_event_t * e) { lv_obj_t * obj lv_event_get_target(e); uint32_t id lv_btnmatrix_get_selected_btn(obj); bool prev id 0 ? true : false; bool next id 6 ? true : false; if(prev || next) { /Find the checked button/ uint32_t i; for…

新建菜单项的创建之CmpGetValueListFromCache函数分析

第一部分&#xff1a; PCELL_DATA CmpGetValueListFromCache( IN PHHIVE Hive, IN PCACHED_CHILD_LIST ChildList, OUT BOOLEAN *IndexCached, OUT PHCELL_INDEX ValueListToRelease ) 0: kd> dv KeyControlBlock 0xe1…