视频学习|Springboot在线学习系统

这篇具有很好参考价值的文章主要介绍了视频学习|Springboot在线学习系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者主页:编程千纸鹤

作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师

主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享

收藏点赞不迷路  关注作者有好处

文末获得源码

项目编号:BS-PT-074

前言:

随着信息技术的发展,计算机已被广泛的用于社会的各个领域,成为推动社会发展的技术动力。而在计算机应用中,网络技术的作用十分突出,网络已经发展成为信息技术的核心,主导着信息产品的开发和信息技术市场的进一步的开拓。网络产业已成为社会信息化进程中的一个战略性产业。在网络技术的应用中,网络软件的开发技术尤其是在基础研究领域的开发技术成了重中之重。不断开发适应用户需求、市场需要的新型软件产品,提高工作效率成为网络软件发展的潮流。随着计算机网络技术在各行各业的延伸和发展,网络技术已经逐步拓展到了学生领域,并已经得到了广泛应用。当然,近年来,学生在人们学习和工作中的作用也日益明显,也逐渐成为人们平日学习、工作的研究对象。越来越多的人开始意识到研究学生可以提高人们的工作效率、为做出决策提供依据、还可以解决时间、减少资源的浪费,所以对学生越来越重视。

网上学习能够缩短教室与学生之间的距离,只要条件足够,学生能跨时间学习老师的课程,老师和学生之间能跨空间进行实时的交互,教师能够更及时的了解学生的学习进度与不足,学生能及时反馈自身的学习情况。贫困地区的学生更能接触到更加优质的教育资源,这对培育社会所需的人才有了更充足的来源,让学生得到了向上的机遇。

利用多媒体信息技术,可以将语文教学内容制作成教学课件,然后将文中描述的内容和意境更直观地展现给学生,从而有效地促进学生的形象和思维两方面能力有效的形成和发展。设想一下,在教学的过程中,教师如果利用多媒体的课件在学生面前以视频图像的形式播放文字表达,再加上在这种音与形同时出现的情况下,教师和视频的配合,音与音的配合,使学生更有效地掌握文字中的艺术形象。另一方面,通过合理利用教学课件的声像、动画功能,使学生更容易理解课文,如在向学生讲解优秀文学作品时,运用多媒体技术,结合文章内容制作教学课件,利用教学课件展示文中描述的主要场景,通过教学课件和教师讲解设备的共性,让学生更深刻地体验和理解文学作品。

为了进一步推动学生在网络上的运用,更好地为学习学生的朋友特别是学生老师服务,特用Spring体系制作出中学语文学习系统,以更好地为学生服务。

一,项目简介

本系统主要分为前台和后台管理,其中用户前台主要功能有账号管理功能、课程列表功能、课程详情功能、我的课程功能;后台的主要功能有学生用户管理功能、教师用户管理功能、课程信息管理功能、视频信息管理功能、课件信息管理功能、评论信息管理功能、测试信息管理等。

12个核心功能描述如下:

账号管理功能:用户注册、用户登录。

课程列表功能:课程列表。

课程详情功能:教学视频、课件信息、评论、测试、优秀作文。

我的课程功能:课程学习。

学生用户管理功能:新增学生信息、删除学生信息、编辑学生信息、修改学生密码。

教师用户管理功能:新增教师信息、删除教师信息、编辑教师信息、修改教师密码。

课程信息管理功能:新增课程信息、删除课程信息、编辑课程信息、审核课程信息。

视频信息管理功能:新增视频信息、删除视频信息、编辑视频信息、审核视频信息。

课件信息管理功能:新增课件、删除课件、编辑课件、审核课件。

评论信息管理功能:查看评论、回复评论、删除评论。

测试信息管理功能:新增测试题目、查看学生做题情况、审核测试题目、删除测试题目。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+mybatis

前台开发技术:html+bootstrap

三,系统展示

5.1 账号管理模块实现

用户注册界面如图5-1所示,登录界面如图5-2所示,后台修改密码如图5-3所示。

账号管理包括用户的注册、用户的登录和登出,用户进入系统后,首先进行注册,输入姓名、密码、学号、性别和班级,然后使用学号和密码进行登录,如果用户想要修改密码需联系教师或者管理员进行修改。

视频学习|Springboot在线学习系统

 

图5-1 注册界面

视频学习|Springboot在线学习系统

图5-2 登录界面

 

5.2 课程列表模块实现

主页课程列表界面如图5-4所示。

课程列表功能包括了展示初中三年每个学期的语文课程,用户可以在前台页查看课程。

视频学习|Springboot在线学习系统

 

图5-4 课程列表界面

5.3 课程详情功能模块实现

课程详情学习界面教学视频界面如图5-5所示;课件(教材资料)界面如图5-6、5-7所示;评论界面如图5-8所示;测试界面如图5-9所示。
用户点击开始学习可进入课程详情界面,课程详情功能包括教学视频、课件信息、评论、测试、优秀作文等;

视频学习|Springboot在线学习系统

 

图5-5 教学视频界面

视频学习|Springboot在线学习系统

图5-6 课件界面

 

5.4 我的课程模块实现

我的课程界面如图5-10所示。
用户进入主页点击我的课程进入我的课程界面

视频学习|Springboot在线学习系统

                                  图5-10 我的课程界面

 

5.5 学生用户管理模块实现

学生用户管理界面如图5-11示。
学生用户管理功能包括新增学生信息、编辑学生信息、删除学生信息和修改学生密码等功能

视频学习|Springboot在线学习系统

图5-11 学生用户管理界面

 

5.6 教师用户管理模块实现

教师用户管理界面如图5-12所示。

教师用户管理功能包括新增教师信息、编辑教师信息、删除教师信息和修改教师密码

视频学习|Springboot在线学习系统

图5-12 教师用户管理界面

 

5.7 课程信息管理模块实现

教师后台课程信息管理界面如图5-13所示,管理员后台课程信息管理界面如图5-14所示。

课程信息管理是由教师发布课程和管理员审核课程的一项功能,用户可以浏览到课程信息

视频学习|Springboot在线学习系统

图5-13 教师后台课程信息管理界面

视频学习|Springboot在线学习系统

 

图5-14 管理员后台课程信息管理界面

5.8 视频信息管理模块实现

教师后台视频信息管理界面如图5-15所示,管理员后台视频信息管理界面如图5-16所示。

视频信息管理是由教师发布视频和管理员审核视频的一项功能,用户可以浏览到教学视频信息。

视频学习|Springboot在线学习系统

 

图5-13 教师后台视频信息管理界面

 

四,核心代码展示

package com.onlineeducation.onlineeducation.controller;

import com.onlineeducation.onlineeducation.common.Constants;
import com.onlineeducation.onlineeducation.common.Result;
import com.onlineeducation.onlineeducation.common.ResultGenerator;
import com.onlineeducation.onlineeducation.config.annotation.TokenToAdmin;
import com.onlineeducation.onlineeducation.entity.Admin;
import com.onlineeducation.onlineeducation.entity.Announcement;
import com.onlineeducation.onlineeducation.entity.Student;
import com.onlineeducation.onlineeducation.service.AdminService;
import com.onlineeducation.onlineeducation.utils.PageResult;
import com.onlineeducation.onlineeducation.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

@RestController
public class AdminController {

    @Autowired
    private AdminService adminService;

    @RequestMapping(value = "/admins/login", method = RequestMethod.POST)
    public Result loginAdmin(@RequestBody Admin admin) {
        Result result = ResultGenerator.genFailResult("登录失败");
        if (StringUtils.isEmpty(admin.getAdminName()) || StringUtils.isEmpty(admin.getAdminPassword())) {
            result.setMessage("请填写登录信息!");
            return result;
        }
        Admin loginUser = adminService.login(admin.getAdminName(), admin.getAdminPassword());
        if (loginUser != null) {
            result = ResultGenerator.genSuccessResult(loginUser);
            return result;
        }
        return result;
    }







}
package com.onlineeducation.onlineeducation.controller;


import com.onlineeducation.onlineeducation.common.Constants;
import com.onlineeducation.onlineeducation.common.Result;
import com.onlineeducation.onlineeducation.common.ResultGenerator;
import com.onlineeducation.onlineeducation.config.annotation.TokenToAdmin;
import com.onlineeducation.onlineeducation.entity.Admin;
import com.onlineeducation.onlineeducation.entity.Announcement;
import com.onlineeducation.onlineeducation.entity.Student;
import com.onlineeducation.onlineeducation.entity.Test;
import com.onlineeducation.onlineeducation.service.AnnouncementService;
import com.onlineeducation.onlineeducation.service.TestService;
import com.onlineeducation.onlineeducation.utils.PageResult;
import com.onlineeducation.onlineeducation.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
public class AnnouncementController {

    @Autowired
    private AnnouncementService announcementService;

    @RequestMapping(value = "/announcements/list", method = RequestMethod.GET)
    public Result listAnnouncement(@RequestParam Map<String, Object> params ) {
        if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }
        PageUtil pageUtil = new PageUtil(params);
        //查询列表数据
        PageResult announcementPage = announcementService.getAnnouncementPage(pageUtil);
        return ResultGenerator.genSuccessResult(announcementPage);
    }

    @RequestMapping(value = "/announcements/save", method = RequestMethod.POST)
    public Result saveAnnouncement(@RequestBody Announcement announcement, @TokenToAdmin Admin loginUser) {
        if (loginUser == null) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!");
        }
        //验证参数
        if (StringUtils.isEmpty(announcement.getContent()) || StringUtils.isEmpty(announcement.getTitle())) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }
        //查询数据库 排除同名的可能
        Announcement tempAnnouncement = announcementService.selectByAnnouncementTitle(announcement.getTitle());
        if (tempAnnouncement != null) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "该公告已存在勿重复添加!");
        }
        //向数据库中新增公告
        if (announcementService.saveAnnouncement(announcement,loginUser) > 0) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult("添加失败");
        }
    }

    //数据回显
    @RequestMapping(value = "/announcements/info/{id}", method = RequestMethod.GET)
    public Result info(@PathVariable("id") Long id) {
        Announcement announcement = announcementService.selectByAnnouncementId(id);
        return ResultGenerator.genSuccessResult(announcement);
    }

    @RequestMapping(value = "/announcements/updateAnnouncement", method = RequestMethod.POST)
    public Result updateStudentPassword(@RequestBody Announcement announcement,@TokenToAdmin Admin loginUser) {
        //验证参数
        if (announcement.getId() == null || StringUtils.isEmpty(announcement.getTitle()) || StringUtils.isEmpty(announcement.getContent())) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }
        if (loginUser == null) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!");
        }
        //查询数据库 排除无此公告的问题
        Announcement temp = announcementService.selectByAnnouncementId(announcement.getId());
        if (temp == null) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "无此公告!");
        }
        //修改记录
        if (announcementService.updateAnnouncement(announcement,loginUser) > 0) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult("修改失败");
        }
    }

    @RequestMapping(value = "announcements/delete", method = RequestMethod.DELETE)
    public Result deleteAnnouncement(@RequestBody Integer[] ids) {
        if (ids.length < 1 ) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }
        if (announcementService.deleteAnnouncementBatch(ids) > 0) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult("删除失败");
        }
    }
}
package com.onlineeducation.onlineeducation.controller;


import com.onlineeducation.onlineeducation.common.Constants;
import com.onlineeducation.onlineeducation.common.Result;
import com.onlineeducation.onlineeducation.common.ResultGenerator;
import com.onlineeducation.onlineeducation.config.annotation.TokenToTeacher;
import com.onlineeducation.onlineeducation.entity.*;
import com.onlineeducation.onlineeducation.service.*;
import com.onlineeducation.onlineeducation.utils.PageResult;
import com.onlineeducation.onlineeducation.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Controller
public class CourseController {

    @Autowired
    private CourseService courseService;

    @Autowired
    private VideoService videoService;

    @Autowired
    private CoursewareService coursewareService;

    @Autowired
    private MessageService messageService;

    @Autowired
    private TestService testService;

    @Autowired
    private StudentService studentService;

    @Autowired
    private TeacherService teacherService;


    @GetMapping("/courses/list")
    @ResponseBody
    public Result listCourse(@RequestParam Map<String, Object> params, @TokenToTeacher Teacher loginUser) {
        if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }

        PageUtil pageUtil = new PageUtil(params);
        if(loginUser != null)
        {
            pageUtil.put("teacherID",loginUser.getId());
        }
        //查询列表数据
        PageResult coursePage = courseService.getCoursePage(pageUtil);
        return ResultGenerator.genSuccessResult(coursePage);
    }

    @PostMapping("/courses/save")
    @ResponseBody
    public Result saveCourse(@RequestBody Course course, @TokenToTeacher Teacher loginUser) {
        if(loginUser == null){
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_NOT_LOGIN, "未登录!");
        }
        //验证参数
        if(StringUtils.isEmpty(course.getCourseName()) || StringUtils.isEmpty(course.getDescription())
                || StringUtils.isEmpty(course.getImageURL())){
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR,"参数异常!");
        }
        //向数据库中新增课程
        if(courseService.saveCourse(course,loginUser) > 0){
            return ResultGenerator.genSuccessResult();
        }else {
            return ResultGenerator.genFailResult("添加失败");
        }
    }

    @GetMapping("/courses/info/{id}")
    @ResponseBody
    public Result detail(@PathVariable("id") Integer id) {
        if (id < 1) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }
        Course course = courseService.queryById(id);
        if (course == null) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "暂无数据!");
        } else {
            return ResultGenerator.genSuccessResult(course);
        }
    }

    @PostMapping( "/courses/update")
    @ResponseBody
    public Result updateCourse(@RequestBody Course course) {
        if (course.getId()==null || course.getId() < 1 || StringUtils.isEmpty(course.getImageURL())
                || StringUtils.isEmpty(course.getCourseName()) || StringUtils.isEmpty(course.getDescription())) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }
//        Course tempCourse = courseService.queryById(course.getId());
//        if (tempCourse == null) {
//            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "无此记录!");
//        }
        if (courseService.updateCourse(course) > 0) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult("修改失败");
        }
    }

    @PostMapping("courses/checked")
    @ResponseBody
    public Result checkCourse(@RequestBody Course course) {
        if (StringUtils.isEmpty(course.getIsChecked())) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }
        if (courseService.checkCourse(course) > 0) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult("操作失败");
        }
    }

    @DeleteMapping("courses/delete")
    @ResponseBody
    public Result deleteCourse(@RequestBody Integer[] ids) {
        if (ids.length < 1) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "参数异常!");
        }
        if (courseService.deleteBatch(ids) > 0) {
            return ResultGenerator.genSuccessResult();
        } else {
            return ResultGenerator.genFailResult("删除失败");
        }
    }

    @GetMapping("teacher/courses/getTeacherCourses")
    @ResponseBody
    public Result getTeacherCourses(HttpServletRequest request,@TokenToTeacher Teacher loginTeacher){
        if (loginTeacher == null) {
            return ResultGenerator.genErrorResult(Constants.RESULT_CODE_PARAM_ERROR, "未登录!");
        }
        List<Course> teacherCourses = courseService.getTeacherCourseList(loginTeacher.getId());
        request.setAttribute("teacherCourses",teacherCourses);
        return ResultGenerator.genSuccessResult(teacherCourses);
    }

    @GetMapping("teacher/teacherStudent.html")
    public String getTeacherCoursesInThymeleaf(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if ("token".equals(cookie.getName())) {
                String token = cookie.getValue();
                Teacher loginTeacher = teacherService.getTeacherUserByToken(token);
                Long tid = loginTeacher.getId();
                List<Course> teacherCourses = courseService.getTeacherCourseList(tid);
                request.setAttribute("teacherCourses",teacherCourses);
                break;
            }
        }
        return "teacher/teacherStudent";
    }


//    学生端
    @GetMapping("/index-login.html")
    public String listStudentCourse(HttpServletRequest request) {
        List<Course> courses = courseService.getCourseList();
        request.setAttribute("courses",courses);
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if ("token".equals(cookie.getName())) {
                String token = cookie.getValue();
                Student loginStudent = studentService.getStudentUserByToken(token);
                Long sid = loginStudent.getId();
                request.setAttribute("sid",sid);
                break;
            }else{
                request.setAttribute("sid",null);
            }
        }
        return "index-login";
    }

    @GetMapping("/index.html")
    public String listStudentCourseWithoutLogin(HttpServletRequest request) {
        List<Course> courses = courseService.getCourseList();
        request.setAttribute("courses",courses);

        return "index";
    }


    @GetMapping("/myCourses/{sid}.html")
    public String listMyCourse(@PathVariable("sid")Integer sid,HttpServletRequest request){

        List<Course> myCourses = courseService.getMyCourseList(sid);
        if(myCourses.size() > 0){
            request.setAttribute("myCourses",myCourses);
        }else{
            request.setAttribute("myCourses",null);
        }

        return "myCourse";
    }

    @GetMapping("/courses/detail/{id}.html")
    public String detailCourse(@PathVariable("id")Integer id,HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if ("token".equals(cookie.getName())) {
                String token = cookie.getValue();
                Student loginStudent = studentService.getStudentUserByToken(token);
                if(loginStudent != null){
                    Long sid = loginStudent.getId();
                    request.setAttribute("sid",sid);
                    break;
                }else{
                    break;
                }

            }else{
                request.setAttribute("sid",null);
            }
        }
        Course course = courseService.queryById(id);
        String courseName = course.getCourseName();
        List<Video> courseVideos = videoService.selectVideoByCourseName(courseName);
        List<Courseware> coursewares = coursewareService.selectCoursewareByCourseName(courseName);
        List<String> fileNames = new ArrayList<>();
        for(int i = 0; i < coursewares.size(); i++) {
            fileNames.add(coursewares.get(i).getCoursewareURL());
        }
        for(int j = 0; j < coursewares.size(); j++){
            coursewares.get(j).setExtensions((fileNames.get(j).substring(fileNames.get(j).lastIndexOf("."))));
        }
        List<Test> tests = testService.selectByCourseName(courseName);
        request.setAttribute("course",course);
        if(courseVideos.size() > 0){
            Video firstVideo = courseVideos.get(0);
            request.setAttribute("firstVideo",firstVideo);
            request.setAttribute("courseVideos",courseVideos);
        }else{
            request.setAttribute("firstVideo",null);
            request.setAttribute("courseVideos",null);
        }
        if(coursewares.size() > 0){
            request.setAttribute("coursewares",coursewares);
        }else{
            request.setAttribute("coursewares",null);
        }
        if(tests.size() > 0){
            request.setAttribute("tests",tests);
        }else{
            request.setAttribute("tests",null);
        }

        /**
         * 根据课程id查询该课程下的所有留言
         */
        List<Message> allMessages = messageService.queryByCourseID(id);
        if(allMessages == null || allMessages.size() == 0){
            request.setAttribute("messages",null);
//            return null;
        }else{
            List<Message> messages = new ArrayList<>();
            List<Message> parents = new ArrayList<>();
            for(Message message : allMessages){
                if (message.getParentID() == null){
                    messages.add(message);
                    parents.add(message);
                }else{
                    boolean foundParent = false;
                    for(Message parent : parents){
                        if (message.getParentID() == parent.getId()){
                            if(parent.getChild() == null){
                                parent.setChild(new ArrayList<>());
                            }
                            parent.getChild().add(message);
                            parents.add(message);
                            foundParent = true;
                            break;
                        }
                    }
                    if(!foundParent){
                        throw new RuntimeException("can not find the parent message");
                    }
                }
            }
            request.setAttribute("messages",messages);
        }
        return "detail";
    }

    @GetMapping("/courses/detail/videoPlay/{courseID}/{videoID}.html")
    public String videoPlay(@PathVariable("courseID")Integer courseID,@PathVariable("videoID")Integer videoID,HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if ("token".equals(cookie.getName())) {
                String token = cookie.getValue();
                Student loginStudent = studentService.getStudentUserByToken(token);
                Long sid = loginStudent.getId();
                request.setAttribute("sid",sid);
                break;
            }else{
                request.setAttribute("sid",null);
            }
        }
        Video video = videoService.getVideoById(videoID);
        request.setAttribute("video",video);
        Course course = courseService.queryById(courseID);
        String courseName = course.getCourseName();
        List<Video> courseVideos = videoService.selectVideoByCourseName(courseName);
        List<Courseware> coursewares = coursewareService.selectCoursewareByCourseName(courseName);
        List<String> fileNames = new ArrayList<>();
        for(int i = 0; i < coursewares.size(); i++) {
            fileNames.add(coursewares.get(i).getCoursewareURL());
        }
        for(int j = 0; j < coursewares.size(); j++){
            coursewares.get(j).setExtensions((fileNames.get(j).substring(fileNames.get(j).lastIndexOf("."))));
        }
        List<Test> tests = testService.selectByCourseName(courseName);
        request.setAttribute("course",course);
        if(courseVideos.size() > 0){
            Video firstVideo = courseVideos.get(0);
            request.setAttribute("firstVideo",firstVideo);
            request.setAttribute("courseVideos",courseVideos);
        }else{
            request.setAttribute("firstVideo",null);
            request.setAttribute("courseVideos",null);
        }
        if(coursewares.size() > 0){
            request.setAttribute("coursewares",coursewares);
        }else{
            request.setAttribute("coursewares",null);
        }
        if(tests.size() > 0){
            request.setAttribute("tests",tests);
        }else{
            request.setAttribute("tests",null);
        }

        /**
         * 根据课程id查询该课程下的所有留言
         */
        List<Message> allMessages = messageService.queryByCourseID(courseID);
        if(allMessages == null || allMessages.size() == 0){
            request.setAttribute("messages",null);
//            return null;
        }else{
            List<Message> messages = new ArrayList<>();
            List<Message> parents = new ArrayList<>();
            for(Message message : allMessages){
                if (message.getParentID() == null){
                    messages.add(message);
                    parents.add(message);
                }else{
                    boolean foundParent = false;
                    for(Message parent : parents){
                        if (message.getParentID() == parent.getId()){
                            if(parent.getChild() == null){
                                parent.setChild(new ArrayList<>());
                            }
                            parent.getChild().add(message);
                            parents.add(message);
                            foundParent = true;
                            break;
                        }
                    }
                    if(!foundParent){
                        throw new RuntimeException("can not find the parent message");
                    }
                }
            }
            request.setAttribute("messages",messages);
        }

        return "video";
    }
}

五,项目总结

突然爆发的流行病使大家措手不及。但在中央和国家领导下,新冠已经取得阶段性大胜利。然而,疫情还是存在,传染的风险依然有可能。学习系统已经成为能够确保广大学生顺利完成学业的有效途径。国家颁布的“不停课”指示,将在线学习系统推向了高潮。教育行业的红利已经来到,而且来得这么的突然。为了得到这波红利,迅速得到广大的市场,专注于企业办公的各大厂商已经开始了在线学习平台的搭建。腾讯课堂是一家知识教育公司,开通了在线直播的带有教学的功能。还有小通、云朵课堂等等在线学习平台。教育领域的平台多年来一直在发展,但现在迅速增长。的确,在当下的互联网时代,互联网速度非常快,这也是学习系统最大的技术保障。学习系统蓬勃发展的主要原因是为了解决一些线下学习无法得到解决的问题。

第一条:昂贵的教学成本;大家都知道,全球地价持续上涨,但民众的收入却没有跟上。因此,对于大家来说,当收入的单位价格没有多少调整空间时,支出就会继续增加,导致学习成本的增加。

第二条:内容不容易呈现;线下教学最常见的情况就是很多的学生和一块黑板的教室。教师用粉笔在黑板上画知识的速写、PPT和公式。然而,在今天这个知识爆炸的时代,能用粉笔写出来的知识实在有限,无法实现互联网中音乐、视频、链接等丰富的文字内容。

第三条:时间利用率低;显然,在线下的教育过程中,总会有一些学生因为各种原因不来上课,教师也不会因为一个学生缺席而不上课。这样,未到的学生的学习内容就跟不上了。

在线学习系统解决了上述所有问题,所以研究并开发一个中学语文学习系统是很有必要的.文章来源地址https://www.toymoban.com/news/detail-418248.html

到了这里,关于视频学习|Springboot在线学习系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于java微信小程序在线视频学习系统设计与实现

    开发概要 小程序开发:微信开发者工具(MINA框架) 后台环境:JDK1.8 + Tomcat8 后台开发语言:Java 后台开发框架:springboot 后台模板引擎:Thymeleaf 后台开发工具:Idea2020 数据库:mysql8 数据库管理工具:navicat 其他开发语言:html + css +javascript

    2024年02月11日
    浏览(71)
  • 微信小程序毕业设计作品成品(05)在线教育视频在线学习小程序系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(39)
  • 基于php微信小程序在线教育视频学习系统设计与实现

    开发概要 开发操作系统:windows10 + 4G内存 + 500G 小程序开发:微信开发者工具(MINA框架) 后台环境:IIS +PHP 后台开发语言:PHP 后台开发工具:Dreamweaver +PhpStorm 数据库:mysql8 数据库管理工具:navicat 其他开发语言:html + css +javascript

    2024年02月11日
    浏览(49)
  • 基于Java+SpringBoot+Vue前后端分离网课在线学习观看系统

    博主介绍 : ✌ 全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟  java项目

    2024年02月07日
    浏览(39)
  • 计算机团队毕业设计:JAVA在线教育视频点播学习系统+微信小程序系统设计与实现

    本次选用JAVA进行在线教育视频学习点播系统团队毕业设计开发,包含:WEB网站系统+微信小程序系统。 开发操作系统:windows10 + 8G内存 + 500G WEB开发环境:JDK1.8 + Tomcat8 WEB开发语言:Java WEB开发框架:springboot WEB模板引擎:Thymeleaf WEB常规技术:html + css +javascript WEB开发工具:Id

    2024年02月13日
    浏览(51)
  • 基于微信在线教育视频学习小程序毕业设计作品成品(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(47)
  • 基于微信在线教育视频学习小程序毕业设计作品成品(2)后台管理系统

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(41)
  • 微信小程序毕业设计作品成品(63)微信小程序在线教室视频点播学习系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(41)
  • PHP毕业设计课题选题(14)基于web网页网站PHP在线教室视频点播学习系统设计与实现

     博主介绍 :《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(51)
  • 基于微信小程序在线教育学习视频点播系统设计与实现 毕业设计论文大纲提纲参考

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。 项目配有对应开发文档、

    2024年02月20日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包