基于java+ssm+vue的小码创客教育教学资源库

项目介绍

随着信息技术在管理上越来越深入而广泛的应用,作为学校以及一些培训机构,都在用信息化战术来部署线上学习以及线上考试,可以与线下的考试有机的结合在一起,实现基于SSM的小码创客教育教学资源库的设计与实现在技术上已成熟。本文介绍了基于SSM的小码创客教育教学资源库的设计与实现的开发全过程。通过分析企业对于基于SSM的小码创客教育教学资源库的设计与实现的需求,创建了一个计算机管理基于SSM的小码创客教育教学资源库的设计与实现的方案。文章介绍了基于SSM的小码创客教育教学资源库的设计与实现的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。

本基于SSM的小码创客教育教学资源库的设计与实现有管理员,校长,教师,学员四个角色。管理员可以管理校长,教师,学员等基本信息,校长角色除了校长管理之外,其他管理员可以操作的校长角色都可以操作。教师可以发布论坛,课件,视频,作业,学员可以查看和下载所有发布的信息,还可以上传作业。因而具有一定的实用性。

本站是一个B/S模式系统,采用Java的SSM框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SSM的小码创客教育教学资源库的设计与实现管理工作系统化、规范化。

在这里插入图片描述

开发环境

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

系统实现

5.1 管理员模块的实现
5.1.1 学员管理
基于SSM的小码创客教育教学资源库的设计与实现的系统管理员可以管理员学员信息,可以对学员信息添加修改删除操作。具体界面的展示如下图所示。
在这里插入图片描述

图5.1 学员信息管理界面

5.1.2 校长管理
系统管理员可以对校长信息进行添加,修改,删除操作。具体界面如下所示。
在这里插入图片描述

图5.2 校长管理界面

5.1.3 教师管理
系统管理员可以对教师信息进行添加修改,删除操作。具体界面如下图所示。
在这里插入图片描述

图5.3 教师管理界面

5.2 校长模块的实现
5.2.1 课表管理
校长可以对课表信息进行添加,修改删除操作。界面如下图所示:
在这里插入图片描述

图5.4 课表信息管理界面

5.2.2 课程管理
校长可以对课程信息进行添加修改删除操作。界面如下图所示:
在这里插入图片描述

图5.5 课程管理界面

5.3 教师模块的实现
5.3.1 课件管理
教师可以对课件信息进行添加,修改删除操作。界面如下图所示:
在这里插入图片描述

图5.6 课件管理界面

5.3.2 视频管理
教师可以对视频进行添加修改删除操作。界面如下图所示:

在这里插入图片描述

图5.7 视频管理界面

5.3.3 作业管理
教师可以对作业进行添加,修改删除操作。界面如下图所示:
在这里插入图片描述

图5.8 作业管理界面

5.4 学员模块的实现
5.4.1 课件
学员登录后,在页面可以查看课件,可以下载课件。界面如下图所示:

在这里插入图片描述

图5.9 课件界面

5.4.2 视频
学员可以在首页视频模块查看视频。界面如下图所示:
在这里插入图片描述

图5.10 视频界面

5.4.3 论坛
学员登录后可以在论坛模块添加论坛和回复论坛信息。界面如下图所示:
在这里插入图片描述

图5.11 论坛界面

5.4.4 回答
学员登录后可以在作业管理里面的回答进行作业回答操作。界面如下图所示:
在这里插入图片描述

图5.12 回答界面

核心代码

package com.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ClazzEntity;
import com.entity.KebiaoEntity;
import com.entity.KechengEntity;
import com.entity.YonghuEntity;
import com.entity.view.KebiaoView;
import com.service.*;
import com.utils.PageUtils;
import com.utils.PoiUtil;
import com.utils.R;
import com.utils.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.net.URL;
import java.util.*;

/**
 * 课表
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/kebiao")
public class KebiaoController {
    private static final Logger logger = LoggerFactory.getLogger(KebiaoController.class);

    @Autowired
    private KebiaoService kebiaoService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private ClazzService clazzService;

    @Autowired
    private YonghuService yonghuService;

    @Autowired
    private KechengService kechengService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("学生".equals(role)){
//            params.put("yonghuId",request.getSession().getAttribute("userId"));
            YonghuEntity yonghuEntity = yonghuService.selectById(String.valueOf(request.getSession().getAttribute("userId")));
            params.put("clazzId",yonghuEntity.getClazzId());

        }
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = kebiaoService.queryPage(params);


        List<KebiaoView> list =(List<KebiaoView>)page.getList();
        if(list != null && list.size() > 0){
            HashSet<String> kechengIdSet = new HashSet<>();
            for(KebiaoView c:list){
                String kecheng = c.getKecheng();
                if(StringUtils.isNotEmpty(kecheng)){
                    kechengIdSet.addAll(Arrays.asList(kecheng.split(",")));
                }
            }

            List<KechengEntity> kechengEntities = kechengService.selectBatchIds(kechengIdSet);
            Map<String, KechengEntity> kechengMap = new HashMap<>();
            for(KechengEntity k:kechengEntities){
                kechengMap.put(String.valueOf(k.getId()),k);
            }
            if(!kechengMap.isEmpty()){
//                StringBuffer yiString = new StringBuffer();
                for(KebiaoView c:list){
                    String kecheng = c.getKecheng();
                    if(StringUtils.isNotEmpty(kecheng)){
                        String[] xingqi = kecheng.split(",");
                        c.setYi(kechengMap.get(xingqi[0]).getKechengName()+","+kechengMap.get(xingqi[0]).getTempLaoshiName());
                        c.setEr(kechengMap.get(xingqi[1]).getKechengName()+","+kechengMap.get(xingqi[1]).getTempLaoshiName());
                        c.setSan(kechengMap.get(xingqi[2]).getKechengName()+","+kechengMap.get(xingqi[2]).getTempLaoshiName());
                        c.setSi(kechengMap.get(xingqi[3]).getKechengName()+","+kechengMap.get(xingqi[3]).getTempLaoshiName());
                        c.setWu(kechengMap.get(xingqi[4]).getKechengName()+","+kechengMap.get(xingqi[4]).getTempLaoshiName());
                    }
                }
            }

        }
        //字典表数据转换
        for(KebiaoView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }


        // kecheng1  xingqi2
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        KebiaoEntity kebiao = kebiaoService.selectById(id);
        if(kebiao !=null){
            //entity转view
            KebiaoView view = new KebiaoView();
            BeanUtils.copyProperties( kebiao , view );//把实体数据重构到view中

                //级联表
                ClazzEntity clazz = clazzService.selectById(kebiao.getClazzId());
                if(clazz != null){
                    BeanUtils.copyProperties( clazz , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setClazzId(clazz.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("ve")
    public R save(@RequestBody KebiaoEntity kebiao, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,kebiao:{}",this.getClass().getName(),kebiao.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");

        Wrapper<KebiaoEntity> queryWrapper = new EntityWrapper<KebiaoEntity>()
            .eq("sections_types", kebiao.getSectionsTypes())
            .eq("clazz_id", kebiao.getClazzId())
            .eq("xueqi_types", kebiao.getXueqiTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        KebiaoEntity kebiaoEntity = kebiaoService.selectOne(queryWrapper);
        if(kebiaoEntity==null){
            kebiao.setCreateTime(new Date());
            kebiaoService.insert(kebiao);
            return R.ok();
        }else {
            return R.error(511,"该班级的该学期的该节数的已经存在");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody KebiaoEntity kebiao, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,kebiao:{}",this.getClass().getName(),kebiao.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(StringUtil.isEmpty(role))
//            return R.error(511,"权限为空");
        //根据字段查询是否有相同数据
        Wrapper<KebiaoEntity> queryWrapper = new EntityWrapper<KebiaoEntity>()
            .notIn("id",kebiao.getId())
            .andNew()
            .eq("sections_types", kebiao.getSectionsTypes())
            .eq("clazz_id", kebiao.getClazzId())
            .eq("xueqi_types", kebiao.getXueqiTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        KebiaoEntity kebiaoEntity = kebiaoService.selectOne(queryWrapper);
        if(kebiaoEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      kebiao.set
            //  }
            kebiaoService.updateById(kebiao);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"该班级的该学期的该节数的已经存在");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        kebiaoService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }

    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save(String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<KebiaoEntity> kebiaoList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            KebiaoEntity kebiaoEntity = new KebiaoEntity();
//                            kebiaoEntity.setSectionsTypes(Integer.valueOf(data.get(0)));   //节数 要改的
//                            kebiaoEntity.setClazzId(Integer.valueOf(data.get(0)));   //班级 要改的
//                            kebiaoEntity.setXueqiTypes(Integer.valueOf(data.get(0)));   //学期 要改的
//                            kebiaoEntity.setKecheng(data.get(0));                    //课程 要改的
//                            kebiaoEntity.setPaixuNumber(Integer.valueOf(data.get(0)));   //排序字段 要改的
//                            kebiaoEntity.setCreateTime(date);//时间
                            kebiaoList.add(kebiaoEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        kebiaoService.insertBatch(kebiaoList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }






}

论文参考

在这里插入图片描述

目录
1系统概述 1
1.1 研究背景 1
1.2研究目的 1
1.3系统设计思想 1
2相关技术 3
2.1 MYSQL数据库 3
2.2 B/S结构 3
2.3 SSM框架简介 4
2.4 VUE简介 6
3系统分析 6
3.1可行性分析 6
3.1.1技术可行性 6
3.1.2经济可行性 7
3.1.3操作可行性 7
3.2系统性能分析 7
3.2.1 系统安全性 7
3.2.2 数据完整性 7
3.3系统界面分析 7
3.4系统流程和逻辑 9
4系统概要设计 10
4.1概述 10
4.2系统结构 11
4.3.数据库设计 11
4.3.1数据库实体 11
4.3.2数据库设计表 16
5系统详细实现 20
5.1 管理员模块的实现 20
5.1.1 学员管理 20
5.1.2 校长管理 21
5.1.3 教师管理 21
5.2 校长模块的实现 22
5.2.1 课表管理 22
5.2.2 课程管理 23
5.3 教师模块的实现 23
5.3.1 课件管理 23
5.3.2 视频管理 24
5.3.3 作业管理 25
5.4 学员模块的实现 25
5.4.1 课件 25
5.4.2 视频 26
5.4.3 论坛 27
5.4.4 回答 27
6系统测试 28
6.1概念和意义 28
6.2特性 28
6.3重要性 29
6.4测试方法 29
6.5 功能测试 30
6.6可用性测试 30
6.7性能测试 30
6.8测试分析 31
6.9测试结果分析 31
结论 31
致谢语 32
参考文献 32

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

q_2781179521

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

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

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

打赏作者

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

抵扣说明:

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

余额充值