微信小程序|Springboot+Node+Vue实现学科竞赛管理系统

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 微信小程序|Springboot+Node+Vue实现学科竞赛管理系统

项目编号:BS-GX-042

一,项目简介

本项目主要实现一下为学校各学科举办的竞赛进行信息化管理,通过springboot来实现后台管理系统的开发,通过Node+Vue+ElementUI实现前端页面的开发和交互,并提供了小程序端供参赛者使用查看相关的比赛信息。系统的整个业务流程十分完整,功能也比较完整,适合做毕业设计使用。

系统共涉及四个角色的使用人员:学校管理员、院系管理员、老师、学生

系统采用前后端分离开发模式开发设计,并使用三层架构和MVC设计模式。

学校管理员登陆系统:

  1. 查看公告
  2. 管理竞赛:发布竞赛,审核各院系的竞赛申请,查看参赛项目等
  3. 项目管理:主要查看各院系上报的参赛项目信息
  4. 竞赛申请管理:主要管理各院系自己添加的竞赛申请,进行审批查看等
  5. 公告管理:发布和管理学校公告信息
  6. 通知管理:查看和阅读各种系统通知信息
  7. 信息统计:以图形报表方式来展示各处参赛信息

院系管理员登陆系统:

  1. 查看公告
  2. 项目管理:管理本院各老师申报的项目并进行审批
  3. 作品管理:对各参栋队伍上传的作品进行打分
  4. 竞赛列表:查看学校发布的各种竞赛信息并进和申报
  5. 信息管理
  6. 信息统计

老师登陆系统:

  1. 个人中心:查看个人参加的比赛并管理个人信息
  2. 查看公告
  3. 项目管理:查看和申报本院申请的参赛项目,并可以加入各项目团队
  4. 竞赛列表:查看本院申请的比赛,可以带队申请比赛
  5. 我的申请管理:主要查看和审批老师申请的学校项目,学生加入我的项目的申请,我加入的别的老师的项目申请审核状态
  6. 信息管理

学生登陆系统:

  1. 查看公告
  2. 项目列表:查看学院发布的各种比赛项目,可以申请加入团队
  3. 作品管理:上传和管理自己的作品
  4. 竞赛列表:查看各类竞赛信息
  5. 我的申请管理:主要是查看学生申请的项目加入审批情况
  6. 信息管理

微信小程序端:

  1. 查看所有竞赛信息
  2. 查看院系的项目、我参与的项目、我的竞赛申请审批情况
  3. 个人中心:查看个人的参栋总数、积分情况、参赛历史情况等

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat+Nodejs

开发工具:IDEA、VSCODE、微信小程序

开发技术:

 后台开发:springboot

 前端开发:Nodejs+vue+ElementUI+微信小程序

三,系统展示

后台管理人员登陆

管理员登陆

查看系统公告

竞赛管理

项目查看

竞赛申请与审报审核结果

公告管理

通知管理

信息统计

各院系管理员登陆系统

个人中心

项目管理

作品管理

竞赛列表

学院端申请管理

信息统计

学生登陆系统

个人中心

项目列表

作品管理

竞赛列表

我的申请管理

信息通知管理

老师登陆系统

个人中心

项目管理

竞赛列表:

我的申请管理

学生申请

老师申请

学生登陆小程序端

个人中心

四,核心代码展示

package com.sang.subjectcompetition.controller;
import com.sang.subjectcompetition.entity.Comp;
import com.sang.subjectcompetition.entity.Project;
import com.sang.subjectcompetition.entity.Teacher_Project;
import com.sang.subjectcompetition.entity.resultInfo.CompResult;
import com.sang.subjectcompetition.service.CompService;
import com.sang.subjectcompetition.service.ProjectService;
import org.apache.logging.log4j.util.PropertySource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Comparator;
import java.util.List;
@RestController
@RequestMapping("/comp")
public class CompController {
    @Autowired
    private CompService compService;
    @Autowired
    private ProjectService projectService;
    /**
     * 返回全部的竞赛信息
     * @return
     */
    @PostMapping("/getAllComps")
    public List<Comp> selectAllComp(){
        List<Comp> allComps = compService.getAllComps();
        allComps.sort(Comparator.naturalOrder());
        return allComps;
    }
    /**
     * 发布竞赛/更新
     * @param comp
     * @return
     */
    @PostMapping("/addComp")
    public String addComp(Comp comp){
        CompResult compResult = compService.createComp(comp);
        return compResult.getMessage();
    }
    /**
     * 多条件模糊查询
     * @return
     */
    @PostMapping("/moreSearch")
    public List<Comp> moreSearch(Comp comp){
        String compName=comp.getCompName();
        String organizer=comp.getOrganizer();
        Integer level=comp.getLevel();
        String subjectType=comp.getSubjectType();
        String place=comp.getPlace();
        Integer compState=comp.getCompState();
        return compService.getCompsBySelf(compName,organizer,level,subjectType,place,compState);
    }
    /**
     * 根据Id返回竞赛的项目
     */
    @GetMapping("/getProjectLists/{compId}")
    public List<Project> getProjectLists(@PathVariable Integer compId){
        List<Project> projectsBycompId = projectService.getProjectsBycompId(compId);
        return projectService.getProjectsBycompId(compId);
    }
}
package com.sang.subjectcompetition.controller;
import com.sang.subjectcompetition.entity.*;
import com.sang.subjectcompetition.entity.resultInfo.MessageResult;
import com.sang.subjectcompetition.respository.AdminRepository;
import com.sang.subjectcompetition.respository.CollegeRepository;
import com.sang.subjectcompetition.respository.StudentRepository;
import com.sang.subjectcompetition.respository.TeacherRepository;
import com.sang.subjectcompetition.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/msg")
public class MessageController {
    @Autowired
    private MessageService messageService;
    @Autowired
    private AdminRepository adminRepository;
    @Autowired
    private StudentRepository studentRepository;
    @Autowired
    private CollegeRepository collegeRepository;
    @Autowired
    private TeacherRepository teacherRepository;
    @GetMapping("/getUnReadListPopup/{receiver}")
    public List<Message> getUnReadListPopup(@PathVariable String receiver ){
        return messageService.findUnReadMessage(receiver);
    }
    @GetMapping("/getUnReadList/{receive}")
    public List<Map<String ,Object>> getUnReadList(@PathVariable String receive){
        List<Map<String ,Object>> result=new ArrayList<>();
        List<Message> unReadMessage = messageService.findUnReadMessage(receive);
        for (Message message : unReadMessage) {
            Map<String ,Object> map=new HashMap<>();
            map.put("id",message.getId());
            map.put("date",message.getMsgDate());
            map.put("title",message.getTitle());
            map.put("content",message.getContent());
            if(message.getSenderRole()==0){
                Student student = studentRepository.findStudentByTargetId(message.getSender());
                map.put("sendUsername",student.getUsername());
                map.put("sendName",student.getNickname());
            }else if(message.getSenderRole()==1){
                Teacher teacher = teacherRepository.findTeacherByTargetId(message.getSender());
                map.put("sendUsername",teacher.getUsername());
                map.put("sendName",teacher.getNickname());
            }else if(message.getSenderRole()==2){
                College college = collegeRepository.findCollegeByTargetId(message.getSender());
                map.put("sendUsername",college.getUsername());
                map.put("sendName",college.getNickname());
            }else{
                Admin admin = adminRepository.findAdminByTargetId(message.getSender());
                map.put("sendUsername",admin.getUsername());
                map.put("sendName",admin.getNickname());
            }
            result.add(map);
        }
        return result;
    }
    @GetMapping("/getReadList/{receive}")
    public List<Map<String ,Object>> getReadList(@PathVariable String receive){
        List<Map<String ,Object>> result=new ArrayList<>();
        List<Message> readMessage = messageService.findReadMessage(receive);
        for (Message message : readMessage) {
            Map<String ,Object> map=new HashMap<>();
            map.put("id",message.getId());
            map.put("date",message.getMsgDate());
            map.put("title",message.getTitle());
            map.put("content",message.getContent());
            if(message.getSenderRole()==0){
                Student student = studentRepository.findStudentByTargetId(message.getSender());
                map.put("sendUsername",student.getUsername());
                map.put("sendName",student.getNickname());
            }else if(message.getSenderRole()==1){
                Teacher teacher = teacherRepository.findTeacherByTargetId(message.getSender());
                map.put("sendUsername",teacher.getUsername());
                map.put("sendName",teacher.getNickname());
            }else if(message.getSenderRole()==2){
                College college = collegeRepository.findCollegeByTargetId(message.getSender());
                map.put("sendUsername",college.getUsername());
                map.put("sendName",college.getNickname());
            }else{
                Admin admin = adminRepository.findAdminByTargetId(message.getSender());
                map.put("sendUsername",admin.getUsername());
                map.put("sendName",admin.getNickname());
            }
            result.add(map);
        }
        return result;
    }
    @GetMapping("/markMessage/{messageId}")
    public MessageResult markMessage(@PathVariable Integer messageId){
        return messageService.markRead(messageId);
    }
    @GetMapping("/deleteMessage/{messageId}")
    public MessageResult deleteMessage(@PathVariable Integer messageId){
        return messageService.deleteMessage(messageId);
    }
}
package com.sang.subjectcompetition.controller;
import com.sang.subjectcompetition.entity.Project;
import com.sang.subjectcompetition.entity.resultInfo.ProResult;
import com.sang.subjectcompetition.service.ProjectService;
import com.sang.subjectcompetition.service.StudentService;
import com.sang.subjectcompetition.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
/**
 * 项目管理
 */
@RestController
@RequestMapping("/project")
public class ProjectController {
    @Autowired
    private ProjectService projectService;
    @Autowired
    private TeacherService teacherService;
    @Autowired
    private StudentService studentService;
    /**
     * 得到参加项目的老师
     * @param projectId
     * @return
     */
    @GetMapping("/getProjectJoinTeacher/{projectId}")
    public List getProjectJoinTeacher(@PathVariable Integer projectId){
        return projectService.getProjectJoinTeacher(projectId);
    }
    /**
     * 得到参加项目的学生
     * @param projectId
     * @return
     */
    @GetMapping("/getProjectJoinStudent/{projectId}")
    public List getProjectJoinStudent(@PathVariable Integer projectId){
        return projectService.getProjectJoinStudent(projectId);
    }
    /**
     * 根据学院id来得到模糊查询
     * @param project
     * @param collegeId
     * @return
     */
    @PostMapping("/getMoreSearchProjectByCollege")
    public List<Project> getMoreSearchProjectByCollege(Project project,Integer collegeId){
        List<Project> moreSearchProjectByCollege = projectService.getMoreSearchProjectByCollege(collegeId, project);
        moreSearchProjectByCollege.sort(Comparator.naturalOrder());
        return moreSearchProjectByCollege;
    }
    /**
     * 根据学院id来得到模糊查询
     * @param project
     * @param teacherId
     * @return
     */
    @PostMapping("/getMoreSearchProjectByTeacher")
    public List<Project> getMoreSearchProjectByTeacher(Project project,Integer teacherId){
        Integer collegeId=teacherService.getTeacherById(teacherId).getCollege().getId();
        List<Project> projects = projectService.getMoreSearchProjectByCollege(collegeId, project);
        projects.sort(Comparator.naturalOrder());
        return projects;
    }
    /**
     * 根据学院id来得到模糊查询
     * @param project
     * @param studentId
     * @return
     */
    @PostMapping("/getMoreSearchProjectByStudent")
    public List<Project> getMoreSearchProjectByStudent(Project project,Integer studentId){
        Integer collegeId=studentService.getStudentById(studentId).getCollege().getId();
        List<Project> moreSearchProjectByCollege = projectService.getMoreSearchProjectByCollege(collegeId, project);
        moreSearchProjectByCollege.sort(Comparator.naturalOrder());
        return moreSearchProjectByCollege;
    }
    /**
     * 根据学院id来得到模糊查询
     * @param project
     * @return
     */
    @PostMapping("/getMoreSearchAllProjects")
    public List<Project> getMoreSearchAllProjects(Project project){
        List<Project> moreSearchAllProject = projectService.getMoreSearchAllProject(project);
        moreSearchAllProject.sort(Comparator.naturalOrder());
        return moreSearchAllProject;
    }
    /**
     * 得到学生参与的项目集合
     * @param studentId
     * @return
     */
    @GetMapping("/getStudentProjects/{studentId}")
    public List<Project> getStudentProjects(@PathVariable Integer studentId){
        List<Project> studentProjects = projectService.getStudentProjects(studentId);
        studentProjects.sort(Comparator.naturalOrder());
        return studentProjects;
    }
    /**
     * 得到教师领队的项目
     * @param teacherId
     * @return
     */
    @GetMapping("/getTeacherJoinProjects/{teacherId}")
    public List<Project> getTeacherJoinProjects(@PathVariable Integer teacherId){
        List<Project> teacherJoinProjects = projectService.getTeacherJoinProjects(teacherId);
        teacherJoinProjects.sort(Comparator.naturalOrder());
        return teacherJoinProjects;
    }
    /**
     * 解散项目组
     * @param projectId
     * @return
     */
    @GetMapping("/invokeProject/{projectId}")
    public ProResult invokeProject(@PathVariable Integer projectId) {
        return teacherService.invokeProject(projectId);
    }
}

五,项目总结

本项目设计功能丰富,所使用的技术比较符合现在毕业设计的要求,使用springboot开发后台服务接口,使用Node+Vue开发前端操作界面,并使用微信小程序开发小程序端供用户使用。项目比较适合做毕业设计使用。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
7月前
|
小程序 Java 关系型数据库
基于微信小程序的智慧养老服务系统
本系统基于Java、MySQL和Spring Boot技术,构建高效、安全的养老院管理系统,提升信息处理速度与管理规范性,实现数据自动化备份与网络化管理,助力养老机构信息化升级。
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
780 7
|
8月前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
1138 4
基于springboot+vue开发的会议预约管理系统
|
7月前
|
JavaScript 小程序 Java
基于微信小程序的线上博物馆系统
线上博物馆系统利用互联网与数字技术,实现文化遗产的数字化保护与传播,打破时空限制,推动文化传承与教育创新。结合Java、Vue及Uniapp等技术,构建跨平台、高互动的在线展览平台,提升公众文化体验。
|
9月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
520 6
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
|
11月前
|
消息中间件 缓存 小程序
婚恋交友相亲公众号app小程序系统源码「脱单神器」婚恋平台全套代码 - 支持快速二次开发
这是一套基于SpringBoot + Vue3开发的婚恋交友系统,支持微信公众号、Uniapp小程序和APP端。系统包含实名认证、智能匹配、视频相亲、会员体系等功能,适用于婚恋社交平台和相亲交友应用。后端采用SpringBoot 3.x与MyBatis-Plus,前端使用Vue3与Uniapp,支持快速部署和二次开发。适合技术团队或有经验的个人创业者使用。
796 8
|
11月前
|
监控 数据可视化 JavaScript
springboot + vue的MES系统生产计划管理源码
MES系统(制造执行系统)的生产计划管理功能是其核心模块之一,涵盖生产计划制定与优化、调度排程、进度监控反馈、资源管理调配及可视化报告五大方面。系统基于SpringBoot + Vue-Element-Plus-Admin技术栈开发,支持多端应用(App、小程序、H5、后台)。通过实时数据采集与分析,MES助力企业优化生产流程,适用于现代化智能制造场景。
583 1
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
873 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
10月前
|
小程序 Java 关系型数据库
圈子系统公众号app小程序系统源码圈子系统带即时通讯 多级圈子系统源码 兴趣小组系统开源 私密圈子系统代码 会员制社区系统
本圈子系统解决方案提供即时通讯、多级圈子、兴趣小组、私密社区及会员制管理功能。支持开源与商业方案,推荐ThinkSNS+、EasyClub及OpenFire等系统,并提供前后端技术选型建议,助力快速搭建社交平台。
571 0

热门文章

最新文章