Online education system|Online teaching system|Online teaching platform system based on Springboot+Vue+Nodejs

Author Homepage: Programming Compass

About the author: High-quality creator in the Java field, CSDN blog expert, CSDN content partner, invited author of Nuggets, Alibaba Cloud blog expert, 51CTO invited author, many years of architect design experience, resident lecturer of Tencent classroom

Main content: Java project, Python project, front-end project, artificial intelligence and big data, graduation design, resume template, learning materials, interview question bank, technical mutual assistance

Favorites, likes, don't get lost, it's good to follow the author

Get the source code at the end of the article 

Foreword:

As a display of the final results after several years of study in the university, the graduation project occupies a large weight and is also a very important milestone! However, many people do not want to be in this major, or they have other desires. A large number of people enter the army of public examinations and postgraduate entrance examinations to prepare for the battle. As a result, there is very little time to prepare for the final design and thesis. In recent years, it can be said that tutors have higher and higher requirements for graduation projects, many of which are beyond the general difficulty of enterprise development, making most students daunted and hesitant to move forward! This column provides a display of BS works developed for customers to provide you with a reference idea, or if necessary, we can also provide you with a series of more services, such as related project development, LW document writing, project explanation, remote debugging, etc. Available for you to choose!

Item number: BS-GX-060

Table of contents

1. Environmental introduction

2. Project introduction

2.1 Development Background

2.2 Demand Analysis

        2.3 Function introduction

Three, system display

Fourth, the core code display

5. Display of related works


1. Environmental introduction

Locale: Java: jdk1.8

Database: Mysql: mysql5.7

Application server: Tomcat: tomcat8.5.31

Development tools: IDEA or eclipse

Background development: springiboot+mybatis

Front-end development: vue+elementUI

2. Project introduction

2.1 Development Background

With the rapid development of computer application technology, computer application technology has gradually penetrated into the field of education, which has brought us changes in educational concepts, education models, and teaching methods, especially in the special period of the epidemic. There is no chance for face-to-face communication between students, so teachers cannot answer students’ problems in time, and teachers face different students every year, many questions are repetitive, and the questions raised by students in the previous class are huge. May appear on the next class of students. However, the information on the network is mixed and too much to solve students' problems in a targeted manner. This project establishes the knowledge base of the "Computer Network" course to record the problems and solutions in the teacher's perennial teaching process in the system. Problem keywords are searched for solutions. In this way, teachers do not need to answer students' repeated questions year after year, which greatly reduces the workload of teachers, and students can also obtain solutions to problems anytime and anywhere, which improves students' enthusiasm for learning.

The "Computer Network" course teaching system is developed using the springboot framework and the Vue framework. The springboot framework is simple, simplifies configuration, reduces the development cycle, and allows more time for optimization. At the same time, springboot provides maven minimalist configuration and visual correlation Monitoring functions, such as performance monitoring, application health, etc.; on the front-end Vue framework, the use of Vue makes the website more simple and beautiful, the performance is greatly improved, and the website runs more smoothly.

2.2 Demand Analysis

According to the market research and user visits, and the sorting and analysis, it is known that there are three types of users of the <<Computer Network>> course teaching website designed and implemented this time, one is student users, the other is teacher users, and the other is platform An administrator account provided for managing basic system information. These three types of users have different roles and operational function permissions, which are shown below in the form of a use case diagram.

The use case diagram of the student user is shown in Figure 1 below.

 

Student user use case description: After registering and logging in, student users can mainly browse announcement information online, browse their own course information, chapter information, online learning courses, view news information, blog articles, and manage their own personal information in the personal center and collection information, and at the same time, you can publish blogs in the personal background management office, manage your own questions and teacher's answer information, etc.

The operation use case diagram of the teacher user is shown in Figure 2 below.

Teacher user use case diagram description: Teachers log in to the <<Computer Network>> course teaching website, and their main responsibility is to manage their own course information, including course management, chapter management, question management, answer management, and course resource management wait.

The use case diagram of the administrator user is shown in Figure 3 below.

 

Administrator User Use Case Diagram Description: The administrator logs in to the <<Computer Network>> course teaching website. The main operation functions include user management, administrator management, course management, course chapter management, course resource management, blog article management, and news information management. , carousel map management, etc.

2.3 Function introduction

 After a full demand analysis and architecture design of the entire <<Computer Network>> course teaching website, the functional goals to be achieved by the <<Computer Network>> course teaching website developed and designed are finally determined, as shown in the following figure 5.

For the functions to be realized in this topic, the corresponding introduction is given below.

Functional description for student users:

(1) Registration and login: If you enter the front end of the <<Computer Network>> course teaching website as a tourist, you can mainly browse information, and other online learning, online question and answer modules are not authorized to operate. Only by registering as a member user and logging in to the platform according to the account specified at the time of registration, can the platform be authorized to perform relevant operations.

(2) Course browsing: Click on the course link to enter the online course details display page, and you can bookmark and comment on the course.

(3) Online learning: Users can view chapter content information on the course chapter details page, watch learning course videos online, and download course-related resource files.

(4) News browsing: The platform can release some news or system announcements as needed for users to browse and understand.

(5) Blog browsing: Users can publish blog information such as learning notes online for others to browse.

(6) Personal center: In the personal center, the management of basic personal information and the management of personal collection information are mainly completed.

(7) Online question and answer: users can ask questions online in the course, and the teacher who belongs to the course will answer after seeing it, and the user can see the content of the answer given by the teacher.

Functional description for teacher users:

   (1) Personal Center: Manage personal information and login passwords.

   (2) Course management: Teachers can publish and manage their own course information.

   (3) Chapter management: Each course can add several chapters, and add course resources and corresponding explanation videos to the chapters.

   (4) Course resource management: Teachers can manage and operate uploaded course resource information.

   (5) Question management: You can mainly view the questions raised by the front-end users on the courses they publish, and answer the questions. The users can check the answers on the front-end.

   (6) Answer management: You can modify and delete information on the answers you answered.

The operation functions of the background administrator are described as follows:

    (1) User management: It mainly realizes the management and operation of the student information, teacher information and platform administrators registered on the <<Computer Network>> course teaching website.

(2) Article classification management: It mainly completes the management operation of the system blog classification information, which is convenient for users to view blog information by classification.

    (3) Course management: The management can manage the course information released by all teachers.

   (3) Chapter management: The administrator can manage the course chapter information released by all teachers. Each course can add several chapters, and add course resources and corresponding explanation videos to the chapters.

   (4) Course resource management: administrators can manage and operate course resource information uploaded by all teachers.

   (5) Question management: Mainly you can check all front-end users’ questions about the course and answer them. Users can check the answers on the front-end.

   (6) Answer management: It is possible to modify and delete information on the answers answered by all teachers.

   (7) Carousel image management: manage the carousel images displayed on the front end.

   (8) News management: administrators can publish relevant news and announcement information for front-end users to view.

 

Three, system display

User login

 user registration

 Course Browse

 Course Details

news browsing

 

Curriculum Resources

 

 Personal center background management

Administrator background management

User Management

 

Blog category management

 

blog management

 course management

 Carousel management

 news management

Course Chapter Management

 

 Curriculum Resource Management

Q&A management

 

Fourth, the core code display

package com.controller;

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

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

import com.entity.KechengziyuanEntity;
import com.entity.view.KechengziyuanView;

import com.service.KechengziyuanService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
import com.service.StoreupService;
import com.entity.StoreupEntity;

/**
 * 课程资源
 * 后端接口
 * @author 
 * @email 
 * @date 2022-07-23 18:58:54
 */
@RestController
@RequestMapping("/kechengziyuan")
public class KechengziyuanController {
    @Autowired
    private KechengziyuanService kechengziyuanService;

    @Autowired
    private StoreupService storeupService;

    


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

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

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(KechengziyuanEntity kechengziyuan){
        EntityWrapper< KechengziyuanEntity> ew = new EntityWrapper< KechengziyuanEntity>();
 		ew.allEq(MPUtil.allEQMapPre( kechengziyuan, "kechengziyuan")); 
		KechengziyuanView kechengziyuanView =  kechengziyuanService.selectView(ew);
		return R.ok("查询课程资源成功").put("data", kechengziyuanView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        KechengziyuanEntity kechengziyuan = kechengziyuanService.selectById(id);
        return R.ok().put("data", kechengziyuan);
    }

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



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

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

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

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

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







}
package com.controller;

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

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

import com.entity.NewsEntity;
import com.entity.view.NewsView;

import com.service.NewsService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;

/**
 * 高校资讯
 * 后端接口
 * @author 
 * @email 
 * @date 2022-07-23 18:58:54
 */
@RestController
@RequestMapping("/news")
public class NewsController {
    @Autowired
    private NewsService newsService;


    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,NewsEntity news,
		HttpServletRequest request){
        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
		PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));

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

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(NewsEntity news){
        EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
 		ew.allEq(MPUtil.allEQMapPre( news, "news")); 
		NewsView newsView =  newsService.selectView(ew);
		return R.ok("查询高校资讯成功").put("data", newsView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        NewsEntity news = newsService.selectById(id);
        return R.ok().put("data", news);
    }

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



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

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

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


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







}

5. Display of related works

Various graduation design works based on Java development, Python development, PHP development, C# development and other related languages

Front-end graduation design works developed and designed based on Nodejs, Vue and other front-end technologies

Related works based on WeChat applet and Android APP application development

Development and application of embedded IoT based on 51 single-chip microcomputer

AI intelligent application based on various algorithms

Various data management and recommendation systems based on big data

Cutting-edge technology, one-stop service, considerate after-sales to solve your worries

 

 

Guess you like

Origin blog.csdn.net/whirlwind526/article/details/131371131
Recommended