基于java+springboot+vue的学科竞赛管理

项目介绍

随着国家教育体制的改革,全国各地举办的竞赛活动数目也是逐年增加,面对如此大的数目的竞赛信息,传统竞赛管理方式已经无法满足需求,为了提高效率,竞赛管理系统应运而生。

本学科竞赛管理系统以实际运用为开发背景,基于Spring Boot框架、Vue框架,运用了Java语言和MYSQL数据库进行开发设计,充分保证系统的安全性和稳定性。本系统界面良好,操作简单方便,通过系统概述、系统分析、系统设计、数据库设计、系统测试这几个部分,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结,实现了学科竞赛管理的重要功能。

本学科竞赛管理系统运行效果稳定,操作方便、快捷,界面友好,是一个功能全面、实用性好、安全性高,并具有良好的可扩展性、可维护性的学科竞赛管理平台。

在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SpringBoot
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net

系统实现

5.1学生功能模块的实现
学生进入本系统可查看系统信息,系统主界面展示如图5-1所示。
在这里插入图片描述

图5-1系统主界面图

5.1.1 学生注册界面
没有账号的学生用户可进行注册操作,学生注册界面展示如图5-2所示。
在这里插入图片描述

图5-2 学生注册界面图

5.1.2 学生登录界面
学生在登录时需输入正确的登录用户名和密码,系统会以登录用户名、密码为参数进行登录信息的验证,信息正确则登录成功,反之登录失败,学生登录界面展示如图5-2所示。
在这里插入图片描述

图5-3 学生登录界面图

5.1.3 赛项详情界面
学生可选择赛项查看详情信息,登录后可进行报名操作,赛项详情界面展示如图5-4所示,报名界面展示如图5-5所示。
在这里插入图片描述

图5-4 赛项详情界面图
在这里插入图片描述

图5-5 报名界面图

5.1.4 个人中心界面
学生可对个人信息进行修改,个人中心界面展示如图5-6所示。
在这里插入图片描述

图5-6 个人中心界面图

5.2管理员功能模块的实现
5.2.1 管理员登录界面
管理员要想进入后台进行管理操作,必须登录系统后台,管理员登录界面展示如图5-7所示。
在这里插入图片描述

图5-7 管理员登录界面图

5.2.2 学生管理界面
管理在学生管理界面可查看所有学生信息,并可对其进行修改和删除操作,同时也可添加学生信息,学生管理界面展示如图5-8所示。
在这里插入图片描述

图5-8 学生管理界面图

5.2.3 教师管理界面
管理员可增删改查教师信息,教师管理界面展示如图5-9所示。
在这里插入图片描述

图5-9 教师管理界面图

5.2.4 赛项信息管理界面
管理员可增删改查赛项信息,赛项信息管理界面如图5-10所示。
在这里插入图片描述

图5-10 赛项信息管理界面图

5.2.5 赛项报名管理界面
管理员可查看所有赛项报名信息,并可对其进行审核、修改和删除操作,赛项报名管理界面展示如图5-11所示。
在这里插入图片描述

图5-11 赛项报名管理界面图

5.2.6 奖项统计管理界面
管理员可增删改查奖项统计信息,奖项统计管理界面展示如图5-12所示。
在这里插入图片描述

图5-12 奖项统计管理界面图

核心代码

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.SaixiangbaomingEntity;
import com.entity.view.SaixiangbaomingView;

import com.service.SaixiangbaomingService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 赛项报名
 * 后端接口
 * @author 
 * @email 
 * @date 
 */
@RestController
@RequestMapping("/saixiangbaoming")
public class SaixiangbaomingController {
    @Autowired
    private SaixiangbaomingService saixiangbaomingService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,SaixiangbaomingEntity saixiangbaoming,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("xuesheng")) {
			saixiangbaoming.setXuehao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<SaixiangbaomingEntity> ew = new EntityWrapper<SaixiangbaomingEntity>();
		PageUtils page = saixiangbaomingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, saixiangbaoming), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,SaixiangbaomingEntity saixiangbaoming, HttpServletRequest request){
        EntityWrapper<SaixiangbaomingEntity> ew = new EntityWrapper<SaixiangbaomingEntity>();
		PageUtils page = saixiangbaomingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, saixiangbaoming), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( SaixiangbaomingEntity saixiangbaoming){
       	EntityWrapper<SaixiangbaomingEntity> ew = new EntityWrapper<SaixiangbaomingEntity>();
      	ew.allEq(MPUtil.allEQMapPre( saixiangbaoming, "saixiangbaoming")); 
        return R.ok().put("data", saixiangbaomingService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(SaixiangbaomingEntity saixiangbaoming){
        EntityWrapper< SaixiangbaomingEntity> ew = new EntityWrapper< SaixiangbaomingEntity>();
 		ew.allEq(MPUtil.allEQMapPre( saixiangbaoming, "saixiangbaoming")); 
		SaixiangbaomingView saixiangbaomingView =  saixiangbaomingService.selectView(ew);
		return R.ok("查询赛项报名成功").put("data", saixiangbaomingView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        SaixiangbaomingEntity saixiangbaoming = saixiangbaomingService.selectById(id);
        return R.ok().put("data", saixiangbaoming);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        SaixiangbaomingEntity saixiangbaoming = saixiangbaomingService.selectById(id);
        return R.ok().put("data", saixiangbaoming);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody SaixiangbaomingEntity saixiangbaoming, HttpServletRequest request){
    	saixiangbaoming.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(saixiangbaoming);
        saixiangbaomingService.insert(saixiangbaoming);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody SaixiangbaomingEntity saixiangbaoming, HttpServletRequest request){
    	saixiangbaoming.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(saixiangbaoming);
        saixiangbaomingService.insert(saixiangbaoming);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody SaixiangbaomingEntity saixiangbaoming, HttpServletRequest request){
        //ValidatorUtils.validateEntity(saixiangbaoming);
        saixiangbaomingService.updateById(saixiangbaoming);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        saixiangbaomingService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<SaixiangbaomingEntity> wrapper = new EntityWrapper<SaixiangbaomingEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("xuesheng")) {
			wrapper.eq("xuehao", (String)request.getSession().getAttribute("username"));
		}

		int count = saixiangbaomingService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

论文参考

在这里插入图片描述

目 录
摘 要 I
ABSTRACT II
1绪 论 1
1.1研究背景 1
1.2设计原则 1
1.3论文的组织结构 2
2 相关技术简介 3
2.1Java技术 3
2.2B/S结构 3
2.3MYSQL数据库 4
2.4Spring Boot框架 4
2.5Vue框架 5
3 系统分析 6
3.1可行性分析 6
3.1.1技术可行性 6
3.1.2操作可行性 6
3.1.3经济可行性 6
3.1.4法律可行性 6
3.2系统性能分析 7
3.3系统功能分析 7
3.4系统流程分析 8
3.4.1注册流程 8
3.4.2登录流程 9
3.4.3添加信息流程 10
4 系统设计 11
4.1系统概要设计 11
4.2系统结构设计 11
4.3 系统顺序图 12
4.4数据库设计 14
4.4.1 数据库实体(E-R图) 14
4.4.2 数据库表设计 16
5 系统的实现 19
5.1学生功能模块的实现 19
5.1.1 学生注册界面 19
5.1.2 学生登录界面 20
5.1.3 赛项详情界面 21
5.1.4 个人中心界面 21
5.2管理员功能模块的实现 22
5.2.1 管理员登录界面 22
5.2.2 学生管理界面 23
5.2.3 教师管理界面 23
5.2.4 赛项信息管理界面 24
5.2.5 赛项报名管理界面 24
5.2.6 奖项统计管理界面 25
6 系统测试 26
6.1测试定义 26
6.2测试方式 26
6.3测试方案计划 27
6.4测试分析 28
7 总 结 29
参考文献 30
致 谢 31

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_3306428634

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值