草庐IT

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

编程千纸鹤 2024-01-25 原文

作者主页:编程千纸鹤

作者简介: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所示。

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

 

图5-1 注册界面

图5-2 登录界面

 

5.2 课程列表模块实现

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

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

 

图5-4 课程列表界面

5.3 课程详情功能模块实现

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和公式。然而,在今天这个知识爆炸的时代,能用粉笔写出来的知识实在有限,无法实现互联网中音乐、视频、链接等丰富的文字内容。

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

在线学习系统解决了上述所有问题,所以研究并开发一个中学语文学习系统是很有必要的.

有关视频学习|Springboot在线学习系统的更多相关文章

  1. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  7. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  8. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  9. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  10. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

随机推荐