线上教学平台

@TOC

springboot0797线上教学平台

JAVA简介

Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java server pages),和XML技术。Java是一种计算机编程语言,具有封装、继承和多态性三个主要特性,广泛应用于网站Web应用程序开发和移动应用程序开发。Java语言和一般编译器以及直译的区别在于,Java首先将源代码转换为字节码,然后将其转换为JVM的可执行文件,JVM可以在各种不同的JVM上运行。因此,实现了它的跨平台特性。虽然这使得Java在早期非常缓慢,但是随着Java的开发,它已经得到了改进。

1.3.4 MySql数据库

Mysql的语言是非结构化的,毕业生 可以在数据上进行工作。因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,其速度、可靠性和适应性而备受关注并得到了普遍的应用。Mysql数据库在编程过程中的作用是很广泛的,为毕业生 进行数据查询带来了方便。Mysql数据库的应用特点:灵活性强,功能强大,语言相对要简洁很多。

数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据库管理主要是数据存储、修改和增加以及数据表的建立。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。

1.4 国内外现状

进入2021年以来,中国线上教学平台系统的竞争正越来越激烈,应该如何减轻用人成本、维护费用,成为各大网站的难题。而使用一个高效、灵活、安全可靠的网上线上教学平台对于减轻用人成本、方便维护、提高效率等都具有十分重要的意义。

从专业的角度来看,线上教学平台相当于一个方便快捷的平台,使用在线服务给予了他们更多的方便,能够不受时间、空间的限制,完成所有的信息,更加方便、有效提高工作效率。

经过数十年的发展和各大网站的努力,线上教学平台系统可以说是比较成熟了,不论是学习资料、交流论坛、试卷列表、留言反馈都比十年前有了更好的改变。它在提高学员的生活水平,顺应时代发展的大势所趋,依靠计算机、互联网技术,整合资源适合发展潮流的正确选择。为线上教学平台系统提供一个方便管理和节约成本的方式,也为学员提供一个高效的线上教学平台,设计一个线上教学平台,是必须也是必然的。

  1. 系统分析

2.1 可行性分析

可行性分析的目的是确定一个系统是否有必要开发、确定系统是否能以最小的代价实现。其工作主要有三个方面,分别是技术、经济和社会三方面的可行性。我会从这三个方面对网上线上教学平台进行详细的分析。

2.1.1技术可行性

该系统主要使用JAVA、MyEclipse和MySQL数据库进行开发,Java易于学习和使用灵活。在校期间也接触过MyEclipes和MySQL数据库的课程,对此有一定的开发经验,因此开发难度不高,所以从技术上来说是可行的。

2.1.2经济可行性

本系统设计所选择的开发工具和服务器都是免费的开源软件,又或者是适合学员使用的免费版本,并不需要支付费用,而且由作者本人单独完成,也不存在团队费用,几乎没有经济成本,具备经济可行性。

2.1.3社会可行性

社会可行性主要包括法律和学员两个方面,下面将从这两方面进行分析。

(1)法律因素

本系统是学习开发所制作的程序,并不用作商业用途,是在根据实际调研的结果结合现有的网上线上教学平台后得出的,而且系统制作的全部过程都是在个人的工作电脑中完成的,使用的都是开源和免费的开发环境、分析软件和数据库,不存在侵权问题。

(2)学员可行性

操作人员或者学员只需要具备一定的windows电脑操作常识,不需要精通计算机技能。此外系统管理人员,只需要在windows常识之上再熟悉下使用Tomcat服务器的操作流程,只要掌握一定的计算机知识即可,在正式上线运营之前,仅需要对操作人员进行简单的熟悉流程培训即可。所以从学员可行性上也是可行的。

2.2总体设计原则

一个系统要在开发和维护的过程中方便使用,必须采取一定的设计原则,其主要设计原则有:

简单性:系统功能简单易懂,只需要掌握基本的计算机操作能力即可使用。

针对性:针对特定的线上教学平台,没有多余的其他功能,使学员可以专心使用。

实用性:能够满足学员方面的需求。

一致性:设计风格、命名规范一致,整个系统的各个功能模块色彩、摆放位置、功能等都是一致的。

先进性:本系统的代码采用读取数据的方式,方便后续开发、拓展。

2.3 系统需求分析

线上教学平台需要满足的需求有以下几个:

(1)实现管理系统信息关系的系统化、规范化和自动化;

(2)减少维护人员的工作量以及实现学员对信息的控制和管理。

(3)方便查询信息及管理信息等;

(4)通过网络操作,改善处理问题的效率,提高操作人员利用率;

(5)考虑到学员多样性特点,要求界面简单,操作简便。

2.4 业务流程分析

2.4.1登录流程

登录模块主要满足管理员以及学员的权限登录,学员登录流程图如图2-1所示。

图2-1 登录流程图

2.4.2注册流程

未有账号的学员可进入注册界面进行注册操作,学员注册流程图如图2-2所示。

图2-2 注册流程图

2.4.3添加信息流程

学员在添加信息时,信息编号自动生成,系统会对添加的信息进行验证,验证通过则添加至数据库,添加信息成功,反之添加失败。添加信息流程如图2-3所示。

图2-3 添加信息流程图

2.4.4删除信息流程

学员可选择要删除的信息进行信息删除操作,在删除信息时系统提示是否确定删除信息,是则删除信息成功,系统数据库将信息进行删除。删除信息流程图如图2-4所示。

图2-4删除信息流程图

  1. 系统设计

3.1 系统概要设计

本线上教学平台适合在互联网上进行操作,只要学员能连网,任何时间、任何地点都可以进行系统的操作使用。系统工作原理图如图3-1所示:

图3-1 系统工作原理图

3.2系统结构设计

整个系统是由多个功能模块组合而成的,要将所有的功能模块都一一列举出来,然后进行逐个的功能设计,使得每一个模块都有相对应的功能设计,然后进行系统整体的设计。

本线上教学平台结构图如图3-2所示。

图3-2 线上教学平台结构图

3.3 数据库设计

数据库可以说是所有软件的根本,如果数据库存在缺陷,那么会导致系统开发的不顺利、维护困难、学员使用不顺畅等一系列问题,严重时将会直接损害学员的利益,同时在开发完成后,数据库缺陷也更加难以解决。所以必须要对数据库设计重点把握,做到认真细致。因此,数据库设计是这个线上教学平台的重点要素。

3.3.1概念结构设计

(1)管理员实体属性图如下图3-3所示

图3-3管理员实体属性图

(2)学习资料信息实体属性如下图3-4所示

图3-4学习资料信息实体属性图

(3)学员信息实体属性如下图3-5所示

图3-5学员信息实体属性图

(4)考试记录信息实体属性如下图3-6所示

图3-6考试记录信息实体属性图

(5)试题信息实体属性如下图3-7所示

图3-7试题信息实体属性图

3.3.2数据库表设计

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

表名:token

功能:token表

字段名称类型长度字段说明主键默认值
idbigint主键主键
useridbigint用户id
usernamevarchar100用户名
tablenamevarchar100表名
rolevarchar100角色
tokenvarchar200密码
addtimetimestamp新增时间CURRENT_TIMESTAMP
expiratedtimetimestamp过期时间CURRENT_TIMESTAMP

表名:xuexiziliao

功能:学习资料

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
ziliaomingchengvarchar200资料名称
ziliaoleixingvarchar200资料类型
tupianvarchar200图片
ziliaowenjianvarchar200资料文件
jiaoxueshipinvarchar200教学视频
ziliaoxiangqingvarchar200资料详情
fabushijianvarchar200发布时间

表名:xueyuan

功能:学员

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
xuehaovarchar200学号
mimavarchar200密码
xingmingvarchar200姓名
xingbievarchar200性别
touxiangvarchar200头像
youxiangvarchar200邮箱
shoujidatetime时间

表名:ziliaoleixing

功能:资料类型

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
ziliaoleixingvarchar200资料类型
  1. 系统实现

4.1管理员功能模块

管理员登录,通过填写注册时输入的用户名、密码、角色进行登录,如图4-1所示。

图4-1管理员登录界面图 ######### 管理员登录进入线上教学平台可以查看首页、个人中心、学员管理、资料类型管理、学习资料管理、交流论坛、我的收藏管理、试卷管理、留言板管理、试题管理、

系统管理、考试管理等信息。

学员管理,在学员管理页面中可以通过填写学号、密码、姓名、性别、头像、邮箱、手机等内容进行详情、修改、删除,如图4-2所示。还可以根据需要对资料类型管理进行详情,修改或删除等详细操作,如图4-3所示。

图4-2学员管理界面图

图4-3资料类型管理界面图 ######### 学习资料管理,在学习资料管理页面中可以查看资料名称、资料类型、图片、资料文件、教学视频、发布时间等信息,并可根据需要对已有学习资料管理进行修改或删除等操作,如图4-4所示。

图4-4学习资料管理界面图 ######### 试卷管理,在试卷管理页面中可以查看试卷名称、考试时长、试卷状态等信息,并可根据需要对已有试卷管理进行修改或删除等详细操作,如图4-5所示。

图4-5试卷管理界面图 ######### 轮播图;该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作,如图4-6所示。

图4-6轮播图管理界面图 ######### 试题管理,在试题管理页面中可以查看试卷、试题名称、分值、答案、类型等内容,并且根据需要对已有试题管理进行详情,修改或删除等详细操作,如图4-7所示。

图4-7试题管理界面图 ######### 考试记录,在考试记录页面中可以查看用户ID、试卷、试题名称、分值、正确答案、考生答案、考生分值等内容,并且根据需要对已有考试记录进行修改或删除等详细操作,如图4-8所示。

图4-8考试记录界面图 ######### 留言板管理,在留言板管理页面中可以查看用户名、留言内容、回复内容等内容,并且根据需要对已有留言板管理进行详情,修改或删除等详细操作,如图4-9所示。

图4-9留言板管理界面图 ######### 学习资料评论,在学习资料评论页面中可以查看评论内容、回复内容等内容,并且根据需要对已有学习资料评论进行详情,修改或删除等详细操作,如图4-10所示。

图4-10学习资料评论界面图

公告信息,在公告信息页面中可以查看标题、简介、图片等内容,并且根据需要对已有公告信息进行详情,修改或删除等详细操作,如图4-11所示。

图4-11公告信息界面图 ######### #########

######### ######### ######### ######### #########

ExamrecordServiceImpl.java
package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;


import com.dao.ExamrecordDao;
import com.entity.ExamrecordEntity;
import com.service.ExamrecordService;
import com.entity.vo.ExamrecordVO;
import com.entity.view.ExamrecordView;

@Service("examrecordService")
public class ExamrecordServiceImpl extends ServiceImpl<ExamrecordDao, ExamrecordEntity> implements ExamrecordService {
	
	@Override
	public PageUtils queryPageGroupBy(Map<String, Object> params, Wrapper<ExamrecordEntity> wrapper) {
		Page<ExamrecordView> page =new Query<ExamrecordView>(params).getPage();
        page.setRecords(baseMapper.selectGroupBy(page,wrapper));
    	PageUtils pageUtil = new PageUtils(page);
    	return pageUtil;
	}
	
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<ExamrecordEntity> page = this.selectPage(
                new Query<ExamrecordEntity>(params).getPage(),
                new EntityWrapper<ExamrecordEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<ExamrecordEntity> wrapper) {
		  Page<ExamrecordView> page =new Query<ExamrecordView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<ExamrecordVO> selectListVO(Wrapper<ExamrecordEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public ExamrecordVO selectVO(Wrapper<ExamrecordEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<ExamrecordView> selectListView(Wrapper<ExamrecordEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public ExamrecordView selectView(Wrapper<ExamrecordEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}

}

ExamquestionServiceImpl.java
package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;


import com.dao.ExamquestionDao;
import com.entity.ExamquestionEntity;
import com.service.ExamquestionService;
import com.entity.vo.ExamquestionVO;
import com.entity.view.ExamquestionView;

@Service("examquestionService")
public class ExamquestionServiceImpl extends ServiceImpl<ExamquestionDao, ExamquestionEntity> implements ExamquestionService {
	
	
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<ExamquestionEntity> page = this.selectPage(
                new Query<ExamquestionEntity>(params).getPage(),
                new EntityWrapper<ExamquestionEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<ExamquestionEntity> wrapper) {
		  Page<ExamquestionView> page =new Query<ExamquestionView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<ExamquestionVO> selectListVO(Wrapper<ExamquestionEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public ExamquestionVO selectVO(Wrapper<ExamquestionEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<ExamquestionView> selectListView(Wrapper<ExamquestionEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public ExamquestionView selectView(Wrapper<ExamquestionEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}

}

InterceptorConfig.java
package com.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import com.interceptor.AuthorizationInterceptor;

@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport{
	
	@Bean
    public AuthorizationInterceptor getAuthorizationInterceptor() {
        return new AuthorizationInterceptor();
    }
	
	@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
        super.addInterceptors(registry);
	}
	
	/**
	 * springboot 2.0配置WebMvcConfigurationSupport之后,会导致默认配置被覆盖,要访问静态资源需要重写addResourceHandlers方法
	 */
	@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/**")
        .addResourceLocations("classpath:/resources/")
        .addResourceLocations("classpath:/static/")
        .addResourceLocations("classpath:/admin/")
        .addResourceLocations("classpath:/front/")
        .addResourceLocations("classpath:/public/");
		super.addResourceHandlers(registry);
    }
}

HomeComment.vue
<template>
  <div class="home-comment">
    <div class="title">用户留言</div>
    <div class="comment-list">
      <div v-for="(item,index) in list"  v-bind:key="index" class="comment-item">
        <div class="user-content">
          <el-image
            class="avator"
            :src="item.avator"
          ></el-image>
          <span class="user">{{item.name}}</span>
        </div>
        <div class="comment">{{item.content}}</div>
        <div class="create-time">{{item.createTime}}</div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      list: [
        {
          name: "MaskLin",
          avator:
            "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
          content:
            "你以为只要长得漂亮就有男生喜欢?你以为只要有了钱漂亮妹子就自己贴上来了?你以为学霸就能找到好工作?我告诉你吧,这些都是真的!",
          createTime: "5月02日 00:00"
        },
        {
          name: "MaskLin",
          avator:
            "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
          content: "作者太帅了",
          createTime: "5月04日 00:00"
        },
        {
          name: "MaskLin",
          avator:
            "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
          content: "作者太帅了",
          createTime: "5月04日 00:00"
        },
        {
          name: "MaskLin",
          avator: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
          content: "作者太帅了",
          createTime: "5月04日 00:00"
        }
      ]
    };
  }
};
</script>
<style lang="scss" scoped>
.home-comment {
  background: #ffffff;
  .title {
    font-size: 18px;
    color: #666;
    font-weight: bold;
    padding: 10px;
    border-bottom: 1px solid #eeeeee;
  }
  .comment-list {
    padding: 10px;
    .comment-item {
      padding: 10px;
      border-bottom: 1px solid #eeeeee;
      .user-content {
        display: flex;
        align-items: center;
        .user {
          font-size: 18px;
          color: #666;
          font-weight: bold;
          line-height: 50px;
          margin-left: 10px;
        }
        .avator {
          width: 50px;
          height: 50px;
          border-radius: 50%;
        }
      }
      .comment {
        margin-top: 10px;
        font-size: 14px;
        color: #888888;
      }
      .create-time {
        margin-top: 15px;
        font-size: 14px;
        color: #888888;
      }
    }
  }
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值