基于SSM实现学生竞赛管理系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 基于SSM实现学生竞赛管理系统

项目编号:BS-XX-044

前言:


为方便各高校对在校园内举办的各类竞赛进行有效的管理,我设计了这套基于SSM实现的竞赛管理系统。我所设计的这套竞赛管理系统,就是基于这样一个时代背景应运而且,一是可以大大降低各高校对于校内所举办的各项竞赛管理的各项成本;二是可以大大提高各类竞赛信息管理的效率。使用计算机对竞赛进行管理的优点如:检索迅速、查找方便、易修改、存储量大、保密性好、成本低等。因此,建立一个规范、合理、实用、有效的竞赛管理系统对竞赛资料进行集中统一的管理就显得格外重要。目前来看,在政府、工商业、学校、企事业单位等单位中,每年都会举办一些各式各样的竞赛活动,几乎都会应用竞赛管理系统进行信息化管理。通过信息化的手段在竞赛管理中加入计算机软件的应用,本质上其实就是对于竞赛相关信息进行管理。利用管理信息系统对竞赛馆的竞赛进行有效的管理,可以大大提高竞赛管理竞赛管理的效率,提升使用的方便性以及其安全性。


本竞赛管理系统本质上利用了信息管理系统的基本思想,综合应用了基于软件开发JAVA相关技术,并以关系型数据库MYSQL作为数据存储的基本手段,主要实现了竞赛管理员对竞赛活动、竞赛作品、以及参赛用户信息和相关评委信息进行存储和管理,并实现了对相关信息基本的增、删、改、查的基本操作功能,这样就可以很好的提升竞赛相关信息的管理质量,提升系统参与的用户的体验感。

一,项目简介


竞赛管理系统的使用者主要包含三种用户角色,其一是管理员角色,其二是参赛用户角色,其三是竞赛评委角色,评委可以指定教师或外部工程师。这三个角色的具体功能如下:


管理员角色:管理员登录竞赛管理系统后可以进行相应的管理操作,主要包含:学生用户管理、竞赛活动管理、老师管理、工程师管理、个人信息管理、账户密码重置等操作。


参赛用户角色:参赛用户登录竞赛管理系统后可以进行参与相关竞赛、提交和下载个人竞赛作品、个人信息管理等操作。


评委用户角色:竞赛中指定的活动评委,可以登陆系统对担任评委的竞赛活动的作品进行评分操作。


根据上述对系统的功能性需求分析,设计出了竞赛管理系统的功能结构图,如下图3-1所示:

image.png

图3-1 系统功能结构图

系统简单性原则:系统操作界面应尽量简单易行,让非专业的系统使用者能够快速上手,符合用户常用的操作习惯,不要设计过多复杂的操作。

系统针对性原则:通过对高校竞赛管理人员日常参与竞赛管理的基本流程的调查研究,开发并设计了竞赛管理系统,所以本系统面向的主要是竞赛参与的相关人员。另外就是针对竞赛的管理用户使用,让他们能够方便的进行竞赛评分和人员管理操作,并方便的进行相关信息的查询。


系统实用性原则:竞赛系统所具有的功能都是与竞赛活动有关,对竞赛活的管理者和参赛用户都具有一定的帮助性和实用性。


系统一致性原则:竞赛系统页面的设计采用了统一的风格,操作规则也进行了统一,数据显示也大致相同的,对于系统管理者和前端用户的操作均简单易懂。


系统先进性原则:本系统采用了SSM框架,JSP技术、Mysql数据库,这些都是目前企业开发中使用较多的开发技术和数据库服务器,并且使用了B/S架构模式和三层结构设计,这就使竞赛管理系统具有良好的可扩展性和灵活性。

二,环境介绍


语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse后台开发技术:SSM框架

前端开发技术:Bootstrap+Jquery+Ajax

三,系统展示


6.1 管理员后台管理功能模块的展示


6.1.1 作品分类管理模块


作品分类管理主要包含读者信息管理,管理员登录后台进入作品分类管理操作界面,在此模块可以查看分类信息,可以对作品分类信息进行相关管理操作,主要包含作品分类信息添加、作品分类管理修改、作品分类管理删除、作品分类管理查询的管理操作。界面展示如下图6-1所示:

image.png

图6-1 作品分类管理操作实现界面

6.1.2参赛作品管理模块


参赛作品管理模块主要是对参加竞赛的作品管理,系统管理员登录后台系统后,进入参赛作品管理操作界面,可以在此对参赛作品进行相关的管理操作,主要包含对参赛作品的信息查看、修改、删除、评分的相关操作。参赛作品管理操作界面如下图6-2所示:

image.png

图6-2 参赛作品管理操作界面

6.1.3 竞赛管理模块


竞赛管理模块主要包含竞赛活动的相关管理操作,系统管理员登录系统,进入竞赛管理操作界面,主要包含竞赛活动添加、竞赛活动查询、竞赛活动的状态管理操作。添加竞赛活动时可以指定此活动的评委。相关管理操作界面如下图6-3所示:

image.png

图6-3竞赛管理操作界面

6.1.4工程师信息管理模块


工程师信息管理模块主要包含对作为评委的企业工程师信息进行管理,评委可以是教师也可以是企业的工程师。系统管理员登录系统后,可以进入工程师信息管理界面进行相关管理操作,主要包含对工程师的添加、修改、删除和查询的相关管理操作。后台工程师管理模块的相关管理操作界面如下图6-4所示:

image.png

图6-4后台工程师管理操作界面

6.1.5学生信息管理模块


学生信息管理模块主要包含对学生信息进行管理,学生信息在系统登陆界面进行注册,在此后台模块也可以实施添加操作。系统管理员登录系统后,可以进入学生信息管理界面进行相关管理操作,主要包含对学生的添加、修改、删除和查询的相关管理操作。后台学生管理模块的相关管理操作界面如下图6-5所示:

image.png

图6-5学生管理操作界面

6.1.6老师信息管理模块


老师信息管理模块主要包含对老师信息进行管理,老师可以做为活动的指定评委参与参赛作品的评分操作。系统管理员登录系统后,可以进入老师信息管理界面进行相关管理操作,主要包含对老师的添加、修改、删除和查询的相关管理操作。后台老师管理模块的相关管理操作界面如下图6-6所示:

image.png

图6-6老师管理操作界面

6.1.7用户信息重置管理模块


用户信息重置管理模块主要是对相关用户的密码等信息进行重置,以防止用户忘记密码操作。系统管理员登录系统后,可以进入密码重置信息管理界面进行相关管理操作,主要包含对老师、学生、工程等的密码重置操作。后台密码重置管理模块的相关管理操作界面如下图6-7所示:

image.png

6.2学生用户功能模块的展示


6.2.1用户登录功能


用户如果想要进行竞赛参与,首先要登录系统,才可展开相关的竞赛操作。用户登陆界面如下图6-8所示:

image.png

图6-8用户登录操作界面

6.2.3学生参与竞赛功能


学生登陆系统后可以在竞赛功能模块中查看当前竞赛活动的列表,并显示当前用户是否可以参与当前竞赛,规则是一次竞赛一个学生只能参与一次,如果已经参与过,将不能再次参与。参与竞赛时上传自己的参赛作品。操作界面如下图6-10所示:

image.png

图6-10学生用户参与竞赛功能界面

四,核心代码展示


package com.system.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.system.exception.CustomException;
import com.system.po.*;
import com.system.service.*;
import org.apache.commons.io.FileUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("/admin")
public class AdminController {
    @Resource(name = "studentServiceImpl")
    private StudentService studentService;
    @Resource(name = "teacherServiceImpl")
    private TeacherService teacherService;
    //注入院系业务实现类
    @Resource(name = "collegeServiceImpl")
    private CollegeService collegeService;
    @Resource(name = "userloginServiceImpl")
    private UserloginService userloginService;
    @Resource(name = "competitionServiceImpl")
    private CompetitionService competitionService;
    @Resource(name = "productionTypeServiceImpl")
    private ProductionTypeService productionTypeService;
    @Resource(name = "productionServiceImpl")
    private ProductionService productionService;
    @Resource(name = "engineerServiceImpl")
    private EngineerService engineerService;
    //  工程师信息显示
    @RequestMapping("/showEngineer")
    public String showUser(Model model, Integer page) throws Exception {
        List<Engineer> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(engineerService.getCountEngineer());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = engineerService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = engineerService.findByPaging(page);
        }
        model.addAttribute("engineerList", list);
        model.addAttribute("pagingVO", pagingVO);
        return "admin/showEngineer";
    }
    //搜索竞赛信息
    @RequestMapping(value = "selectEngineer", method = {RequestMethod.POST})
    private String selectEngineer(String findByName, Model model) throws Exception {
        List<Engineer> list = engineerService.findByName(findByName);
        model.addAttribute("engineerList", list);
        return "admin/showEngineer";
    }
    /**
     * 添加工程師信息页面显示
     */
    @RequestMapping(value = "/addEngineer", method = {RequestMethod.GET})
    public String addEngineerUI(Model model) throws Exception {
        List<College> list = collegeService.finAll();
        model.addAttribute("collegeList", list);
        return "admin/addEngineer";
    }
    /**
     * 添加工程师信息操作
     */
    @RequestMapping(value = "/addEngineer", method = {RequestMethod.POST})
    public String addEngineer(Engineer engineer, Model model) throws Exception {
        if (engineer.getUserid() == null) {
            model.addAttribute("message", "工号不能为空");
            return "error";
        }
        if (StrUtil.isBlank(engineer.getUsername())) {
            model.addAttribute("message", "姓名不能为空");
            return "error";
        }
        if (StrUtil.isBlank(engineer.getEnterprisename())) {
            model.addAttribute("message", "公司名称不能为空");
            return "error";
        }
        Engineer engineer1 = engineerService.findById(engineer.getUserid());
        if (engineer1 != null) {
            model.addAttribute("message", "工号重复");
            return "error";
        }
        //先根据工号查询登陆数据库中是否有此工号,无此工号才能添加
        Userlogin userLogin = userloginService.findByName(engineer.getUserid().toString());
        if(userLogin!=null){
            model.addAttribute("message", "工号重复");
            return "error";
        }
        Boolean result = engineerService.save(engineer);
        if (!result) {
            model.addAttribute("message", "工程师信息重复");
            return "error";
        }
        //添加成功后,也添加到登录表
        Userlogin userlogin = new Userlogin();
        userlogin.setUsername(String.valueOf(engineer.getUserid()));
        userlogin.setPassword("123");
        userlogin.setRole(3);
        userloginService.save(userlogin);
        //重定向
        return "redirect:/admin/showEngineer";
    }
    // 修改工程师信息页面显示
    @RequestMapping(value = "/editEngineer", method = {RequestMethod.GET})
    public String editEngineerUI(Integer id, Model model) throws Exception {
        if (id == null) {
            return "redirect:/admin/showEngineer";
        }
        Engineer engineer = engineerService.findById(id);
        if (engineer == null) {
            throw new CustomException("未找到该名学生");
        }
//        List<College> list = collegeService.finAll();
//        model.addAttribute("collegeList", list);
        model.addAttribute("engineer", engineer);
        return "admin/editEngineer";
    }
    // 修改工程师信息页面处理
    @RequestMapping(value = "/editEngineer", method = {RequestMethod.POST})
    public String editEngineer(Engineer engineer, Model model) throws Exception {
        if (engineer.getUserid() == null) {
            model.addAttribute("message", "工号不能为空");
            return "error";
        }
        if (StrUtil.isBlank(engineer.getUsername())) {
            model.addAttribute("message", "姓名不能为空");
            return "error";
        }
        if (StrUtil.isBlank(engineer.getEnterprisename())) {
            model.addAttribute("message", "公司名称不能为空");
            return "error";
        }
        engineerService.updataById(engineer.getUserid(), engineer);
        //重定向
        return "redirect:/admin/showEngineer";
    }
    // 删除工程师
    @RequestMapping(value = "/removeEngineer", method = {RequestMethod.GET} )
    private String removeEngineer(Integer id) throws Exception {
        if (id == null) {
            //加入没有带学生id就进来的话就返回学生显示页面
            return "admin/showStudent";
        }
        engineerService.removeById(id);
        userloginService.removeByName(id.toString());
        return "redirect:/admin/showEngineer";
    }
    /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<学生操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
    //  学生信息显示
    @RequestMapping("/showStudent")
    public String showStudent(Model model, Integer page) throws Exception {
        List<StudentCustom> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(studentService.getCountStudent());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = studentService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = studentService.findByPaging(page);
        }
        model.addAttribute("studentList", list);
        model.addAttribute("pagingVO", pagingVO);
        return "admin/showStudent";
    }
    //  添加学生信息页面显示
    @RequestMapping(value = "/addStudent", method = {RequestMethod.GET})
    public String addStudentUI(Model model) throws Exception {
        List<College> list = collegeService.finAll();
        model.addAttribute("collegeList", list);
        return "admin/addStudent";
    }
     // 添加学生信息操作
    @RequestMapping(value = "/addStudent", method = {RequestMethod.POST})
    public String addStudent(StudentCustom studentCustom, Model model) throws Exception {
        if (studentCustom.getUserid() == null) {
            model.addAttribute("message", "学号不能为空!");
            return "error";
        }
        if (StrUtil.isBlank(studentCustom.getUsername())) {
            model.addAttribute("message", "姓名不能为空!");
            return "error";
        }
        //先根据工号查询登陆数据库中是否有此工号,无此工号才能添加
        Userlogin userLogin = userloginService.findByName(studentCustom.getUserid().toString());
        if(userLogin!=null){
            model.addAttribute("message", "学号重复");
            return "error";
        }
        Boolean result = studentService.save(studentCustom);
        if (!result) {
            model.addAttribute("message", "学号重复");
            return "error";
        }
        //添加成功后,也添加到登录表
        Userlogin userlogin = new Userlogin();
        userlogin.setUsername(studentCustom.getUserid().toString());
        userlogin.setPassword("123");
        userlogin.setRole(2);
        userloginService.save(userlogin);
        //重定向
        return "redirect:/admin/showStudent";
    }
    // 修改学生信息页面显示
    @RequestMapping(value = "/editStudent", method = {RequestMethod.GET})
    public String editStudentUI(Integer id, Model model) throws Exception {
        if (id == null) {
            //加入没有带学生id就进来的话就返回学生显示页面
            return "redirect:/admin/showStudent";
        }
        StudentCustom studentCustom = studentService.findById(id);
        if (studentCustom == null) {
            throw new CustomException("未找到该名学生");
        }
        List<College> list = collegeService.finAll();
        model.addAttribute("collegeList", list);
        model.addAttribute("student", studentCustom);
        return "admin/editStudent";
    }
    // 修改学生信息处理
    @RequestMapping(value = "/editStudent", method = {RequestMethod.POST})
    public String editStudent(StudentCustom studentCustom, Model model) throws Exception {
        if (StrUtil.isBlank(studentCustom.getUsername())) {
            model.addAttribute("message", "姓名不能为空!");
            return "error";
        }
        studentService.updataById(studentCustom.getUserid(), studentCustom);
        //重定向
        return "redirect:/admin/showStudent";
    }
    // 删除学生
    @RequestMapping(value = "/removeStudent", method = {RequestMethod.GET} )
    private String removeStudent(Integer id) throws Exception {
        if (id == null) {
            //加入没有带学生id就进来的话就返回学生显示页面
            return "admin/showStudent";
        }
        studentService.removeById(id);
        userloginService.removeByName(id.toString());
        return "redirect:/admin/showStudent";
    }
    // 搜索学生
    @RequestMapping(value = "selectStudent", method = {RequestMethod.POST})
    private String selectStudent(String findByName, Model model) throws Exception {
        List<StudentCustom> list = studentService.findByName(findByName);
        model.addAttribute("studentList", list);
        return "admin/showStudent";
    }
    /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<教师操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
    // 教师页面显示
    @RequestMapping("/showTeacher")
    public String showTeacher(Model model, Integer page) throws Exception {
        List<TeacherCustom> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(teacherService.getCountTeacher());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = teacherService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = teacherService.findByPaging(page);
        }
        model.addAttribute("teacherList", list);
        model.addAttribute("pagingVO", pagingVO);
        return "admin/showTeacher";
    }
    // 添加教师信息
    @RequestMapping(value = "/addTeacher", method = {RequestMethod.GET})
    public String addTeacherUI(Model model) throws Exception {
        List<College> list = collegeService.finAll();
        model.addAttribute("collegeList", list);
        return "admin/addTeacher";
    }
    // 添加教师信息处理
    @RequestMapping(value = "/addTeacher", method = {RequestMethod.POST})
    public String addTeacher(TeacherCustom teacherCustom, Model model) throws Exception {
        if (teacherCustom.getUserid() == null) {
            model.addAttribute("message", "工号不能为空");
            return "error";
        }
        if (StrUtil.isBlank(teacherCustom.getUsername())) {
            model.addAttribute("message", "姓名不能为空");
            return "error";
        }
       //先根据工号查询登陆数据库中是否有此工号,无此工号才能添加
        Userlogin userLogin = userloginService.findByName(teacherCustom.getUserid().toString());
        if(userLogin!=null){
            model.addAttribute("message", "工号重复");
            return "error";
        }
        Boolean result = teacherService.save(teacherCustom);
        if (!result) {
            model.addAttribute("message", "工号重复");
            return "error";
        }
        //添加成功后,也添加到登录表
        Userlogin userlogin = new Userlogin();
        userlogin.setUsername(teacherCustom.getUserid().toString());
        userlogin.setPassword("123");
        userlogin.setRole(1);
        userloginService.save(userlogin);
        //重定向
        return "redirect:/admin/showTeacher";
    }
    // 修改教师信息页面显示
    @RequestMapping(value = "/editTeacher", method = {RequestMethod.GET})
    public String editTeacherUI(Integer id, Model model) throws Exception {
        if (id == null) {
            return "redirect:/admin/showTeacher";
        }
        TeacherCustom teacherCustom = teacherService.findById(id);
        if (teacherCustom == null) {
            throw new CustomException("未找到该名学生");
        }
        List<College> list = collegeService.finAll();
        model.addAttribute("collegeList", list);
        model.addAttribute("teacher", teacherCustom);
        return "admin/editTeacher";
    }
    // 修改教师信息页面处理
    @RequestMapping(value = "/editTeacher", method = {RequestMethod.POST})
    public String editTeacher(TeacherCustom teacherCustom, Model model) throws Exception {
        if (StrUtil.isBlank(teacherCustom.getUsername())) {
            model.addAttribute("message", "姓名不能为空");
            return "error";
        }
        teacherService.updateById(teacherCustom.getUserid(), teacherCustom);
        //重定向
        return "redirect:/admin/showTeacher";
    }
    //删除教师
    @RequestMapping("/removeTeacher")
    public String removeTeacher(Integer id) throws Exception {
        if (id == null) {
            //加入没有带教师id就进来的话就返回教师显示页面
            return "admin/showTeacher";
        }
        teacherService.removeById(id);
        userloginService.removeByName(id.toString());
        return "redirect:/admin/showTeacher";
    }
    //搜索教师
    @RequestMapping(value = "selectTeacher", method = {RequestMethod.POST})
    private String selectTeacher(String findByName, Model model) throws Exception {
        List<TeacherCustom> list = teacherService.findByName(findByName);
        model.addAttribute("teacherList", list);
        return "admin/showTeacher";
    }
    /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<课程操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
    // 竞赛分类信息显示
    @RequestMapping("/showProductionType")
    public String showProductionType(Model model, Integer page) throws Exception {
        List<ProductionType> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(productionTypeService.getCountProductionType());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = productionTypeService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = productionTypeService.findByPaging(page);
        }
        model.addAttribute("productionTypeList", list);
        model.addAttribute("pagingVO", pagingVO);
        return "admin/showProductionType";
    }
    //添加竞赛分类
    @RequestMapping(value = "/addProductionType", method = {RequestMethod.GET})
    public String addProductionTypeUI(Model model) throws Exception {
        return "admin/addProductionType";
    }
    // 添加竞赛分类信息处理
    @RequestMapping(value = "/addProductionType", method = {RequestMethod.POST})
    public String addProductionType(ProductionType productionType, Model model) throws Exception {
        String productiontypename = productionType.getProductiontypename();
        if (StrUtil.isBlank(productiontypename)) {
            model.addAttribute("message", "作品分类名称不能为空");
            return "error";
        }
        List<ProductionType> list = productionTypeService.findByName(productiontypename);
        if (CollectionUtil.isNotEmpty(list)) {
            model.addAttribute("message", "作品分类名称已存在");
            return "error";
        }
        Boolean result = productionTypeService.save(productionType);
        if (!result) {
            model.addAttribute("message", "分类信息重复");
            return "error";
        }
        //重定向
        return "redirect:/admin/showProductionType";
    }
    // 修改竞赛分类信息页面显示
    @RequestMapping(value = "/editProductionType", method = {RequestMethod.GET})
    public String editProductionTypeUI(Integer id, Model model) throws Exception {
        if (id == null) {
            return "redirect:/admin/showProductionType";
        }
        ProductionType productionType = productionTypeService.queryById(id);
        if (productionType == null) {
            throw new CustomException("未找到该竞赛分类");
        }
        model.addAttribute("productionType", productionType);
        return "admin/editProductionType";
    }
    // 修改竞赛分类信息页面处理
    @RequestMapping(value = "/editProductionType", method = {RequestMethod.POST})
    public String editProductionType(ProductionType productionType, Model model) throws Exception {
        String productiontypename = productionType.getProductiontypename();
        if (StrUtil.isBlank(productiontypename)) {
            model.addAttribute("message", "作品分类名称不能为空");
            return "error";
        }
        List<ProductionType> list = productionTypeService.findByName(productiontypename);
        if (CollectionUtil.isNotEmpty(list)) {
            ProductionType productionType1 = list.get(0);
            if (productionType1.getProductiontypeid() != productionType.getProductiontypeid()) {
                model.addAttribute("message", "作品分类名称已存在");
                return "error";
            }
        }
        productionTypeService.update(productionType);
        //重定向
        return "redirect:/admin/showProductionType";
    }
    // 删除竞赛分类信息
    @RequestMapping("/removeProductionType")
    public String removeProductionType(Integer id, Model model) throws Exception {
        if (id == null) {
            //加入没有带教师id就进来的话就返回教师显示页面
            return "/admin/showProductionType";
        }
        List<Competition> competitions = competitionService.queryProductionTypeId(id);
        if (CollectionUtil.isNotEmpty(competitions)) {
            model.addAttribute("message", "无法删除,活动存在使用");
            return "error";
        }
        productionTypeService.delete(id);
        return "redirect:/admin/showProductionType";
    }
    //搜索竞赛分类信息
    @RequestMapping(value = "selectProductionType", method = {RequestMethod.POST})
    private String selectProductionType(String findByName, Model model) throws Exception {
        List<ProductionType> list = productionTypeService.findByName(findByName);
        model.addAttribute("productionTypeList", list);
        return "admin/showProductionType";
    }
    // 竞赛作品信息显示
    @RequestMapping("/showProduction")
    public String showProduction(Model model, Integer page) throws Exception {
        List<Production> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(productionService.getCountProduction());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = productionService.findByPaging(1,"","");
        } else {
            pagingVO.setToPageNo(page);
            list = productionService.findByPaging(page,"","");
        }
        model.addAttribute("productionList", list);
        model.addAttribute("pagingVO", pagingVO);
        return "admin/showProduction";
    }
    //搜索竞赛作品信息
    @RequestMapping(value = "selectProduction", method = {RequestMethod.POST})
    private String selectProduction(String findByName, Model model) throws Exception {
        List<Production> list = productionService.findByName(findByName,null,null);
        model.addAttribute("productionList", list);
        return "admin/showProduction";
    }
    // 修改竞赛作品信息页面显示
    @RequestMapping(value = "/editProduction", method = {RequestMethod.GET})
    public String editProductionUI(Integer id, Model model) throws Exception {
        if (id == null) {
            return "redirect:/admin/showProduction";
        }
        Production production = productionService.queryById(id);
        if (production == null) {
            throw new CustomException("未找到该竞赛作品");
        }
        Integer competitionid = production.getCompetitionid();
        Competition competition = competitionService.queryById(competitionid);
        if (competition == null) {
            model.addAttribute("message", "作品参与的竞赛活动不存在!");
            return "error";
        }
        if (competition.getStatus() != 1) {
            model.addAttribute("message", "竞赛已经进入打分阶段无法进行作品修改!");
            return "error";
        }
        model.addAttribute("production", production);
        return "admin/editProduction";
    }
    // 修改竞赛作品信息页面处理
    @RequestMapping(value = "/editProduction", method = {RequestMethod.POST})
    public String editProduction(@RequestParam("myFile") MultipartFile file, Production production, Model model) throws Exception {
        //获取文件名称
        String fileName = file.getOriginalFilename();
        if (StrUtil.isNotBlank(fileName)) {
            //  以下为创建新存储的文件路径
            String upload = "D:/upload";
            String localPath = upload;
            // 没有D://test/upimage文件夹的话就新疆文件夹
            File upimagesFile = new File(localPath);
            if (!upimagesFile.exists()) {
                upimagesFile.mkdirs();
            }
            String localFilePath = localPath + "/" + fileName;
            //创建图片文件
            File picFile = new File(localFilePath);
            if (!picFile.exists()) {
                picFile.createNewFile();
            }
            //保存文件
            file.transferTo(picFile);
            production.setMaterial(fileName);
        } else {
            Production production1 = productionService.queryById(production.getProductionid());
            if (ObjectUtil.isNotNull(production1)) {
                if (StrUtil.isNotBlank(production1.getMaterial())) {
                    production.setMaterial(production1.getMaterial());
                }
            }
        }
        Integer competitionid = production.getCompetitionid();
        Competition competition = competitionService.queryById(competitionid);
        if (competition == null) {
            model.addAttribute("message", "作品参与的竞赛活动不存在!");
            return "error";
        }
        if (competition.getStatus() != 1) {
            model.addAttribute("message", "竞赛已经进入打分阶段无法进行作品修改!");
            return "error";
        }
        production.setCreatetime(new Date());
        productionService.update(production);
        //重定向
        return "redirect:/admin/showProduction";
    }
    // 删除竞赛作品
    @RequestMapping("/removeProduction")
    public String removeProduction(Integer id, Model model) throws Exception {
        if (id == null) {
            return "showProduction";
        }
        Production production = productionService.queryById(id);
        if (production == null) {
            model.addAttribute("message", "删除的作品不存在");
            return "error";
        }
        productionService.delete(id);
        return "redirect:/admin/showProduction";
    }
    // 去评价
    @RequestMapping(value = "/evaluationProduction", method = {RequestMethod.GET})
    public String evaluationProductionUI(Integer id, Model model) throws Exception {
        if (id == null) {
            return "redirect:/admin/showProduction";
        }
        Production production = productionService.queryById(id);
        if (production == null) {
            throw new CustomException("未找到该竞赛作品");
        }
        Integer competitionid = production.getCompetitionid();
        Competition competition = competitionService.queryById(competitionid);
        if (ObjectUtil.isNull(competition)) {
            model.addAttribute("message", "竞赛活动不存在!");
            return "error";
        }
        if (competition.getStatus() != 2) {
            model.addAttribute("message", "竞赛活动当前状态不可评价!");
            return "error";
        }
        model.addAttribute("production", production);
        return "admin/evaluationProduction";
    }
    // 评价作品
    @RequestMapping(value = "/evaluationProduction", method = {RequestMethod.POST})
    public String evaluationProduction(Production production, Model model) throws Exception {
        if (production.getScore() == null) {
            model.addAttribute("message", "分数不能为空");
            return "error";
        }
        if (StrUtil.isBlank(production.getRemark())) {
            model.addAttribute("message", "评语不能为空");
            return "error";
        }
        String username = (String) SecurityUtils.getSubject().getPrincipal();
        Integer productionid = production.getProductionid();
        Integer score = production.getScore();
        if ( productionid != null && score != null) {
            Production production1 = productionService.queryById(productionid);
            if (ObjectUtil.isNotNull(production1)) {
                production1.setScore(score);
                production1.setRemark(production.getRemark());
                TeacherCustom teacherCustom = teacherService.findById(Integer.valueOf(username));
                if (ObjectUtil.isNotNull(teacherCustom)) {
                    production1.setJuryid(teacherCustom.getUserid());
                    production1.setJuryname(teacherCustom.getUsername());
                }
                productionService.update(production1);
            }
        }
        //重定向
        return "redirect:/admin/showProduction";
    }
    // 竞赛信息显示
    @RequestMapping("/showCompetition")
    public String showCompetition(Model model, Integer page) throws Exception {
        List<Competition> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(competitionService.getCountCompetition());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = competitionService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = competitionService.findByPaging(page);
        }
        model.addAttribute("competitionList", list);
        model.addAttribute("pagingVO", pagingVO);
        return "admin/showCompetition";
    }
    //添加竞赛
    @RequestMapping(value = "/addCompetition", method = {RequestMethod.GET})
    public String addCompetitionUI(Model model) throws Exception {
        List<Integer> roleIds = new ArrayList();
        roleIds.add(1);
        roleIds.add(3);
        List<Userlogin> userList = userloginService.findByRoleId(roleIds);
        List<ProductionType> productionTypeList = productionTypeService.list("1");
        model.addAttribute("userList", userList);
        model.addAttribute("productionTypeList", productionTypeList);
        return "admin/addCompetition";
    }
    // 添加竞赛信息处理
    @RequestMapping(value = "/addCompetition", method = {RequestMethod.POST})
    public String addCompetition(Competition competition, Model model) throws Exception {
        String competitionname = competition.getCompetitionname();
        if (StrUtil.isBlank(competitionname)) {
            model.addAttribute("message", "竞赛名称不能为空!");
            return "error";
        }
        List<Competition> list = competitionService.findByName(competitionname);
        if (CollectionUtil.isNotEmpty(list)) {
            model.addAttribute("message", "竞赛名称已存在!");
            return "error";
        }
        Date endtime = competition.getEndtime();
        if (endtime == null) {
            model.addAttribute("message", "报名截止时间不能为空!");
            return "error";
        }
        Date publishtime = competition.getPublishtime();
        if (publishtime == null) {
            model.addAttribute("message", "成绩公布时间不能为空!");
            return "error";
        }
        String stipulation = competition.getStipulation();
        if (StrUtil.isBlank(stipulation)) {
            model.addAttribute("message", "要求不能为空!");
            return "error";
        }
        String content = competition.getContent();
        if (StrUtil.isBlank(content)) {
            model.addAttribute("message", "内容不能为空!");
            return "error";
        }
        String organizers = competition.getOrganizers();
        if (StrUtil.isBlank(organizers)) {
            model.addAttribute("message", "举办方不能为空!");
            return "error";
        }
        competition.setStarttime(null);
        competition.setStatus(0);
        competition.setOrganizersid(0);
        competitionService.save(competition);
        //重定向
        return "redirect:/admin/showCompetition";
    }
    // 修改竞赛活动信息页面显示
    @RequestMapping(value = "/editCompetition", method = {RequestMethod.GET})
    public String editCompetitionUI(Integer id, Model model) throws Exception {
        List<Integer> roleIds = new ArrayList();
        if (id == null) {
            return "redirect:/admin/showCompetition";
        }
        Competition competition = competitionService.queryById(id);
        roleIds.add(1);
        roleIds.add(3);
        List<Userlogin> userList = userloginService.findByRoleId(roleIds);
        List<ProductionType> productionTypeList = productionTypeService.list();
        if (competition == null) {
            model.addAttribute("message", "竞赛活动不存在!");
            return "error";
        }
        if (competition.getStatus() != 0) {
            model.addAttribute("message", "活动仅在筹备状态才可修改!");
            return "error";
        }
        model.addAttribute("competition", competition);
        model.addAttribute("userList", userList);
        model.addAttribute("productionTypeList", productionTypeList);
        return "admin/editCompetition";
    }
    // 修改竞赛作品信息页面处理
    @RequestMapping(value = "/editCompetition", method = {RequestMethod.POST})
    public String editCompetition(Competition competition, Model model) throws Exception {
        String competitionname = competition.getCompetitionname();
        if (StrUtil.isBlank(competitionname)) {
            model.addAttribute("message", "竞赛名称不能为空!");
            return "error";
        }
        List<Competition> list = competitionService.findByName(competitionname);
        if (CollectionUtil.isNotEmpty(list)) {
            Competition competition1 = list.get(0);
            if (competition1.getCompetitionid() != competition.getCompetitionid()) {
                model.addAttribute("message", "竞赛名称已存在!");
                return "error";
            }
        }
        Date publishtime = competition.getPublishtime();
        if (publishtime == null) {
            model.addAttribute("message", "成绩公布时间不能为空!");
            return "error";
        }
        Date endtime = competition.getEndtime();
        if (endtime == null) {
            model.addAttribute("message", "报名截止时间不能为空!");
            return "error";
        }
        String stipulation = competition.getStipulation();
        if (StrUtil.isBlank(stipulation)) {
            model.addAttribute("message", "要求不能为空!");
            return "error";
        }
        String content = competition.getContent();
        if (StrUtil.isBlank(content)) {
            model.addAttribute("message", "内容不能为空!");
            return "error";
        }
        String organizers = competition.getOrganizers();
        if (StrUtil.isBlank(organizers)) {
            model.addAttribute("message", "举办方不能为空!");
            return "error";
        }
        if (competition.getJuryids() != null) {
            Userlogin userlogin = userloginService.queryById(Integer.valueOf(competition.getJuryids()));
            if (ObjectUtil.isNotNull(userlogin)) {
                competition.setJuryidnames(userlogin.getUsername());
            }
        }
        if (competition.getProductiontypeid() != null) {
            ProductionType productionType = productionTypeService.queryById(Integer.valueOf(competition.getProductiontypeid()));
            if (ObjectUtil.isNotNull(productionType)) {
                competition.setProductiontypename(productionType.getProductiontypename());
            }
        }
        competitionService.update(competition);
        //重定向
        return "redirect:/admin/showCompetition";
    }
    // 手动开启报名
    @RequestMapping(value = "/applyCompetition", method = {RequestMethod.GET})
    public String editCompetition(Integer id, Model model) throws Exception {
        Competition competition = competitionService.queryById(id);
        if (ObjectUtil.isNull(competition)) {
            model.addAttribute("message", "竞赛活动不存在!");
            return "error";
        }
        competition.setStarttime(new Date());
        competition.setStatus(1);
        competitionService.update(competition);
        //重定向
        return "redirect:/admin/showCompetition";
    }
    // 手动报名截止
    @RequestMapping(value = "/deadlineCompetition", method = {RequestMethod.GET})
    public String deadlineCompetition(Integer id, Model model) throws Exception {
        Competition competition = competitionService.queryById(id);
        if (ObjectUtil.isNull(competition)) {
            model.addAttribute("message", "竞赛活动不存在!");
            return "error";
        }
        if (competition.getStatus() != 1) {
            model.addAttribute("message", "当前活动状态异常!");
            return "error";
        }
        competition.setStatus(2);
        competitionService.update(competition);
        //重定向
        return "redirect:/admin/showCompetition";
    }
    // 手动结束活动
    @RequestMapping(value = "/endCompetition", method = {RequestMethod.GET})
    public String endCompetition(Integer id, Model model) throws Exception {
        Competition competition = competitionService.queryById(id);
        if (ObjectUtil.isNull(competition)) {
            model.addAttribute("message", "竞赛活动不存在!");
            return "error";
        }
        if (competition.getStatus() != 2) {
            model.addAttribute("message", "当前活动状态异常!");
            return "error";
        }
        competition.setStatus(3);
        competitionService.update(competition);
        //重定向
        return "redirect:/admin/showCompetition";
    }
    // 删除竞赛活动
    @RequestMapping("/removeCompetition")
    public String removeCompetition(Integer id, Model model) throws Exception {
        if (id == null) {
            return "showCompetition";
        }
        Competition competition = competitionService.queryById(id);
        if (competition == null) {
            model.addAttribute("message", "删除的活动不存在");
            return "error";
        }
        if (competition.getStatus() != 0) {
            model.addAttribute("message", "仅可删除筹办中的活动");
            return "error";
        }
        competitionService.delete(id);
        return "redirect:/admin/showCompetition";
    }
    //搜索竞赛信息
    @RequestMapping(value = "selectCompetition", method = {RequestMethod.POST})
    private String selectCompetition(String findByName, Model model) throws Exception {
        List<Competition> list = competitionService.findByName(findByName);
        model.addAttribute("competitionList", list);
        return "admin/showCompetition";
    }
    //添加课程
    @RequestMapping(value = "/addCourse", method = {RequestMethod.GET})
    public String addCourseUI(Model model) throws Exception {
        List<TeacherCustom> list = teacherService.findAll();
        List<College> collegeList = collegeService.finAll();
        model.addAttribute("collegeList", collegeList);
        model.addAttribute("teacherList", list);
        return "admin/addCourse";
    }
    /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<其他操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
    // 普通用户账号密码重置
    @RequestMapping("/userPasswordRest")
    public String userPasswordRestUI() throws Exception {
        return "admin/userPasswordRest";
    }
    // 普通用户账号密码重置处理
    @RequestMapping(value = "/userPasswordRest", method = {RequestMethod.POST})
    public String userPasswordRest(Userlogin userlogin) throws Exception {
        Userlogin u = userloginService.findByName(userlogin.getUsername());
        if (u != null) {
            if (u.getRole() == 0) {
                throw new CustomException("该账户为管理员账户,没法修改");
            }
            u.setPassword(userlogin.getPassword());
            userloginService.updateByName(userlogin.getUsername(), u);
        } else {
            throw new CustomException("没找到该用户");
        }
        return "admin/userPasswordRest";
    }
    // 本账户密码重置
    @RequestMapping("/passwordRest")
    public String passwordRestUI() throws Exception {
        return "admin/passwordRest";
    }
    @RequestMapping(value="/download",method=RequestMethod.GET) //匹配的是href中的download请求
    public ResponseEntity<byte[]> download(@RequestParam("filename") String filename,
                                           Model model) throws IOException {
        String downloadFilePath="D:\\upload";//从我们的上传文件夹中去取
        File file = new File(downloadFilePath+File.separator+filename);//新建一个文件
        HttpHeaders headers = new HttpHeaders();//http头信息
        String downloadFileName = new String(filename.getBytes("UTF-8"),"iso-8859-1");//设置编码
        headers.setContentDispositionFormData("attachment", downloadFileName);
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
    }
    //==============院系操作==================
    // 院系页面显示
    @RequestMapping("/showCollege")
    public String showCollege(Model model, Integer page) throws Exception {
        List<CollegeCustom> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(collegeService.getCountCollege());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = collegeService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = collegeService.findByPaging(page);
        }
        model.addAttribute("collegeList", list);
        model.addAttribute("pagingVO", pagingVO);
        return "admin/showCollege";
    }
    /**
     * 添加院系信息页面显示
     */
    @RequestMapping(value = "/addCollege", method = {RequestMethod.GET})
    public String addCollegeUI(Model model) throws Exception {
        return "admin/addCollege";
    }
    /**
     * 添加院系信息操作
     */
    @RequestMapping(value = "/addCollege", method = {RequestMethod.POST})
    public String addCollege(College college, Model model) throws Exception {
        if (StrUtil.isBlank(college.getCollegename())) {
            model.addAttribute("message", "院系名不能为空");
            return "error";
        }
        CollegeCustom collegeCustom = new CollegeCustom();
        collegeCustom.setCollegename(college.getCollegename());
        collegeService.save(collegeCustom);
        //重定向
        return "redirect:/admin/showCollege";
    }
    /**
     * 删除院系
     * @param id
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping("/removeCollege")
    public String removeCollege(Integer id, Model model) throws Exception {
        if (id == null) {
            return "showCollege";
        }
        College college = collegeService.findById(id);
        if (college == null) {
            model.addAttribute("message", "删除的院系不存在");
            return "error";
        }
        collegeService.removeById(id);
        return "redirect:/admin/showCollege";
    }
    /**
     *
     * 修改院系信息页面显示
     * @param id
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/editCollege", method = {RequestMethod.GET})
    public String editCollegeUI(Integer id, Model model) throws Exception {
        if (id == null) {
            return "redirect:/admin/showCollege";
        }
        CollegeCustom college = collegeService.findById(id);
        if (college == null) {
            throw new CustomException("未找到该院系");
        }
        model.addAttribute("college", college);
        return "admin/editCollege";
    }
    /**
     *  修改院系信息页面处理
     * @param college
     * @param model
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/editCollege", method = {RequestMethod.POST})
    public String editCollege(College college, Model model) throws Exception {
        if (college.getCollegeid() == null) {
            model.addAttribute("message", "编号不能为空");
            return "error";
        }
        if (StrUtil.isBlank(college.getCollegename())) {
            model.addAttribute("message", "院系名字不能为空");
            return "error";
        }
        CollegeCustom collegeCustom = new CollegeCustom();
        BeanUtils.copyProperties(college, collegeCustom);
        collegeService.updateById(college.getCollegeid(), collegeCustom);
        //重定向
        return "redirect:/admin/showCollege";
    }
    //搜索竞赛信息
    @RequestMapping(value = "selectCollege", method = {RequestMethod.POST})
    private String selectCollege(String findByName, Model model) throws Exception {
        List<CollegeCustom> list = collegeService.findByName(findByName);
        model.addAttribute("collegeList", list);
        return "admin/showCollege";
    }
}

五,项目总结


当今社会,各种竞赛、比赛到处比比皆是,小到幼儿园,大到大学生,学生阶段应该是参与相关竞赛最多的群体。可以通过竞赛去选拔人类中的佼佼者,给一些优秀人更好的发展机会和更多的鼓励。而对竞赛的相关数据和信息管理在以往一直是以传统的手工或纸质方式来进行处理,效率低下而又极易出错。在当今的互联网时代,如何使用IT信息化技术对竞赛的相关活动和数据进行处理,提高工作效率和降低出错率,是我们面临的一个急需解决的问题。


本项目主要基于SSM(Spring+Springmvc+Mybatis)三种开发框架开发而成,页面显示采用的是JSP技术,前端采用是BootStrap框架,数据库选用目前比较流行的关系型数据库 MYSQL数据库。系统设计基于B/S架构,采用了瀑布式的的系统分析与设计方法,实现了一个用于学生竞赛活动管理的相关功能的管理系统,构建了一个方便对学生竞赛活动进行管理的学生竞赛活动管理系统。


本系统具有主要实现对竞赛活动的相关管理功能,包含像学生管理、评委管理(老师和工程师)、竞赛评分、参赛作品信息等功能,本系统便捷性高,易操作,较大程度上减少了管理员操作的繁杂性,也方便了用户们快速地在系统内进行相关业务处理。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
2月前
|
Java 应用服务中间件 数据库连接
ssm项目整合,简单的用户管理系统
文章介绍了一个使用SSM框架(Spring、SpringMVC、MyBatis)构建的简单用户管理系统的整合过程,包括项目搭建、数据库配置、各层代码实现以及视图展示。
ssm项目整合,简单的用户管理系统
|
2月前
|
XML Java 数据库连接
如何搭建SSM框架、图书商城系统
这是一份详尽的《Spring + SpringMVC + Mybatis 整合指南》,作者耗时良久整理出约五万字的内容,现已经全部笔记公开。此文档详细地介绍了如何搭建与整合SSM框架,具体步骤包括创建Maven项目、添加web骨架、配置pom文件以及整合Spring、SpringMVC和Mybatis等。无论是对初学者还是有一定基础的开发者来说,都是很好的学习资源。此外,作者还提供了项目源码的GitHub链接,方便读者实践。虽然当前主流推荐学习SpringBoot,但了解SSM框架仍然是不可或缺的基础。
34 0
|
3月前
|
SQL Java 应用服务中间件
使用SSM搭建图书商城管理系统(完整过程介绍、售后服务哈哈哈)
这篇文章是关于如何使用SSM框架搭建图书商城管理系统的教程,包括完整过程介绍、常见问题解答和售后服务,提供了项目地址、运行环境配置、效果图展示以及运行代码的步骤。
使用SSM搭建图书商城管理系统(完整过程介绍、售后服务哈哈哈)
|
4月前
|
存储 关系型数据库 测试技术
基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍)(2)
基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍)
60 1
|
4月前
|
安全 数据挖掘 测试技术
基于SSM+Vue的家居商城系统(源码+部署说明+演示视频)(2)
基于SSM+Vue的家居商城系统(源码+部署说明+演示视频)
66 0
|
4月前
|
Java 关系型数据库 MySQL
基于SSM+Vue的家居商城系统(源码+部署说明+演示视频)(1)
基于SSM+Vue的家居商城系统(源码+部署说明+演示视频)
61 0
|
4月前
|
Java 关系型数据库 测试技术
基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍)(1)
基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍)
59 0
|
5月前
|
搜索推荐 JavaScript Java
计算机Java项目|基于SSM的个性化商铺系统
计算机Java项目|基于SSM的个性化商铺系统
|
5月前
|
前端开发 JavaScript Java
计算机Java项目|SSM智能仓储系统
计算机Java项目|SSM智能仓储系统