在线课堂|基于Springboot+Vue实现在线学习平台
本项目基于Springboot+Vue开发实现了一个大学生在线课程学习平台。平台用户有三类:学生、教师、管理员。学生注册登录后可以查看相关课堂,在线播放课程视频进行学习,并可以购买课程,完成课程交易,对课程进行评价,添加学习记录进行记录,在线咨询留言等。教师账户由管理员分配,登录后可以添加课程,添加课程对应的学习视频,查询课程评价并进行回复,查看学生的学习记录,回复学生咨询信息等。管理员主要对平台
作者主页:编程千纸鹤
作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、Python项目开发、大学数据和AI项目开发、单片机项目设计、面试技术整理、最新技术分享
收藏点赞不迷路 关注作者有好处
文末获得源码
项目编号:BS-GX-068
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:Springboot+Vue
二,项目简介
本项目基于Springboot+Vue开发实现了一个大学生在线课程学习平台。平台用户有三类:学生、教师、管理员。学生注册登录后可以查看相关课堂,在线播放课程视频进行学习,并可以购买课程,完成课程交易,对课程进行评价,添加学习记录进行记录,在线咨询留言等。教师账户由管理员分配,登录后可以添加课程,添加课程对应的学习视频,查询课程评价并进行回复,查看学生的学习记录,回复学生咨询信息等。管理员主要对平台的所有信息进行相应的管理,包含学生管理、教师管理、课程管理、分类管理、视频管理、咨询管理、学习记录管理、轮播图管理、友情链接管理等,并包含了课程销售的图形报表统计,采用Echart来进行实现。具体见下面功能实现展示。
三,系统展示
系统首页
学生注册
用户登录
课程购买与收藏
课程评价
在线学习
在线咨询
个人中心
教师登录系统
课程信息管理
添加课程视频
课程购买记录
课程学习查询
个人资料修改
管理员登录
课程信息管理
课程购买统计
系统管理
四,核心代码展示
package com.spring.controller;
import com.jntoo.db.*;
import com.jntoo.db.utils.*;
import com.spring.dao.*;
import com.spring.entity.*;
import com.spring.service.*;
import com.spring.util.*;
import com.spring.util.Info;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import tk.mybatis.mapper.entity.Example;
/**
* 教师 */
@Controller
public class JiaoshiController extends BaseController {
@Autowired
private JiaoshiMapper dao;
@Autowired
private JiaoshiService service;
/**
* 后台列表页
*
*/
@RequestMapping("/jiaoshi_list")
public String list() {
// 检测是否有登录,没登录则跳转到登录页面
if (!checkLogin()) {
return showError("尚未登录", "./login.do");
}
String order = Request.get("order", "id"); // 获取前台提交的URL参数 order 如果没有则设置为id
String sort = Request.get("sort", "desc"); // 获取前台提交的URL参数 sort 如果没有则设置为desc
int pagesize = Request.getInt("pagesize", 12); // 获取前台一页多少行数据
Example example = new Example(Jiaoshi.class); // 创建一个扩展搜索类
Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类
String where = " 1=1 "; // 创建初始条件为:1=1
where += getWhere(); // 从方法中获取url 上的参数,并写成 sql条件语句
criteria.andCondition(where); // 将条件写进上面的扩展条件类中
if (sort.equals("desc")) { // 判断前台提交的sort 参数是否等于 desc倒序 是则使用倒序,否则使用正序
example.orderBy(order).desc(); // 把sql 语句设置成倒序
} else {
example.orderBy(order).asc(); // 把 sql 设置成正序
}
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 获取前台提交的URL参数 page 如果没有则设置为1
page = Math.max(1, page); // 取两个数的最大值,防止page 小于1
List<Jiaoshi> list = service.selectPageExample(example, page, pagesize); // 获取当前页的行数
// 将列表写给界面使用
assign("totalCount", request.getAttribute("totalCount"));
assign("list", list);
assign("orderby", order); // 把当前排序结果写进前台
assign("sort", sort); // 把当前排序结果写进前台
return json(); // 将数据写给前端
}
public String getWhere() {
_var = new LinkedHashMap(); // 重置数据
String where = " ";
// 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句
if (!Request.get("gonghao").equals("")) {
where += " AND gonghao LIKE '%" + Request.get("gonghao") + "%' ";
}
return where;
}
@RequestMapping("/jiaoshi_add")
public String add() {
_var = new LinkedHashMap(); // 重置数据
return json(); // 将数据写给前端
}
@RequestMapping("/jiaoshi_updt")
public String updt() {
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
// 获取行数据,并赋值给前台jsp页面
Jiaoshi mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 0);
return json(); // 将数据写给前端
}
@RequestMapping("/jiaoshi_updtself")
public String updtself() {
_var = new LinkedHashMap(); // 重置数据
// 更新个人资料
int id = (int) request.getSession().getAttribute("id");
Jiaoshi mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 1);
return json(); // 将数据写给前端
}
/**
* 添加内容
* @return
*/
@RequestMapping("/jiaoshiinsert")
public String insert() {
_var = new LinkedHashMap(); // 重置数据
String tmp = "";
Jiaoshi post = new Jiaoshi(); // 创建实体类
// 设置前台提交上来的数据到实体类中
post.setGonghao(Request.get("gonghao"));
post.setMima(Request.get("mima"));
post.setXingming(Request.get("xingming"));
post.setXingbie(Request.get("xingbie"));
post.setLianxidianhua(Request.get("lianxidianhua"));
post.setYouxiang(Request.get("youxiang"));
post.setTouxiang(Request.get("touxiang"));
service.insert(post); // 插入数据
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
return showSuccess("保存成功", Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
}
/**
* 更新内容
* @return
*/
@RequestMapping("/jiaoshiupdate")
public String update() {
_var = new LinkedHashMap(); // 重置数据
// 创建实体类
Jiaoshi post = new Jiaoshi();
// 将前台表单数据填充到实体类
if (!Request.get("gonghao").equals("")) post.setGonghao(Request.get("gonghao"));
if (!Request.get("mima").equals("")) post.setMima(Request.get("mima"));
if (!Request.get("xingming").equals("")) post.setXingming(Request.get("xingming"));
if (!Request.get("xingbie").equals("")) post.setXingbie(Request.get("xingbie"));
if (!Request.get("lianxidianhua").equals("")) post.setLianxidianhua(Request.get("lianxidianhua"));
if (!Request.get("youxiang").equals("")) post.setYouxiang(Request.get("youxiang"));
if (!Request.get("touxiang").equals("")) post.setTouxiang(Request.get("touxiang"));
post.setId(Request.getInt("id"));
service.update(post); // 更新数据
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
if (Request.getInt("updtself") == 1) {
return showSuccess("保存成功", "jiaoshi_updtself.do");
}
return showSuccess("保存成功", Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
}
/**
* 后台详情
*/
@RequestMapping("/jiaoshi_detail")
public String detail() {
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
Jiaoshi map = service.find(id); // 根据前台url 参数中的id获取行数据
assign("map", map); // 把数据写到前台
return json(); // 将数据写给前端
}
/**
* 删除
*/
@RequestMapping("/jiaoshi_delete")
public String delete() {
_var = new LinkedHashMap(); // 重置数据
if (!checkLogin()) {
return showError("尚未登录");
}
int id = Request.getInt("id"); // 根据id 删除某行数据
Map map = Query.make("jiaoshi").find(id);
service.delete(id); // 根据id 删除某行数据
return showSuccess("删除成功", request.getHeader("referer")); //弹出删除成功,并跳回上一页
}
}
package com.spring.controller;
import com.jntoo.db.*;
import com.jntoo.db.utils.*;
import com.spring.dao.*;
import com.spring.entity.*;
import com.spring.service.*;
import com.spring.util.*;
import com.spring.util.Info;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import tk.mybatis.mapper.entity.Example;
/**
* 留言板 */
@Controller
public class LiuyanbanController extends BaseController {
@Autowired
private LiuyanbanMapper dao;
@Autowired
private LiuyanbanService service;
/**
* 后台列表页
*
*/
@RequestMapping("/liuyanban_list")
public String list() {
// 检测是否有登录,没登录则跳转到登录页面
if (!checkLogin()) {
return showError("尚未登录", "./login.do");
}
String order = Request.get("order", "id"); // 获取前台提交的URL参数 order 如果没有则设置为id
String sort = Request.get("sort", "desc"); // 获取前台提交的URL参数 sort 如果没有则设置为desc
int pagesize = Request.getInt("pagesize", 12); // 获取前台一页多少行数据
Example example = new Example(Liuyanban.class); // 创建一个扩展搜索类
Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类
String where = " 1=1 "; // 创建初始条件为:1=1
where += getWhere(); // 从方法中获取url 上的参数,并写成 sql条件语句
criteria.andCondition(where); // 将条件写进上面的扩展条件类中
if (sort.equals("desc")) { // 判断前台提交的sort 参数是否等于 desc倒序 是则使用倒序,否则使用正序
example.orderBy(order).desc(); // 把sql 语句设置成倒序
} else {
example.orderBy(order).asc(); // 把 sql 设置成正序
}
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 获取前台提交的URL参数 page 如果没有则设置为1
page = Math.max(1, page); // 取两个数的最大值,防止page 小于1
List<Liuyanban> list = service.selectPageExample(example, page, pagesize); // 获取当前页的行数
// 将列表写给界面使用
assign("totalCount", request.getAttribute("totalCount"));
assign("list", list);
assign("orderby", order); // 把当前排序结果写进前台
assign("sort", sort); // 把当前排序结果写进前台
return json(); // 将数据写给前端
}
public String getWhere() {
_var = new LinkedHashMap(); // 重置数据
String where = " ";
// 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句
return where;
}
/**
* 留言人列表
*/
@RequestMapping("/liuyanban_list_liuyanren")
public String listliuyanren() {
// 检测是否有登录,没登录则跳转到登录页面
if (!checkLogin()) {
return showError("尚未登录", "./login.do");
}
String order = Request.get("order", "id"); // 获取前台提交的URL参数 order 如果没有则设置为id
String sort = Request.get("sort", "desc"); // 获取前台提交的URL参数 sort 如果没有则设置为desc
int pagesize = Request.getInt("pagesize", 12); // 获取前台一页多少行数据
Example example = new Example(Liuyanban.class); // 创建一个扩展搜索类
Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类
// 初始化一个条件,条件为:留言人=当前登录用户
String where = " liuyanren='" + request.getSession().getAttribute("username") + "' ";
where += getWhere();
criteria.andCondition(where); // 将条件写入
if (sort.equals("desc")) { // 注释同list
example.orderBy(order).desc(); // 注释同list
} else {
example.orderBy(order).asc(); // 注释同list
}
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 注释同list
page = Math.max(1, page); // 注释同list
List<Liuyanban> list = service.selectPageExample(example, page, pagesize);
assign("totalCount", request.getAttribute("totalCount"));
assign("list", list);
assign("orderby", order);
assign("sort", sort);
return json(); // 将数据写给前端
}
@RequestMapping("/liuyanban_add")
public String add() {
_var = new LinkedHashMap(); // 重置数据
return json(); // 将数据写给前端
}
@RequestMapping("/liuyanban_updt")
public String updt() {
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
// 获取行数据,并赋值给前台jsp页面
Liuyanban mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 0);
return json(); // 将数据写给前端
}
/**
* 添加内容
* @return
*/
@RequestMapping("/liuyanbaninsert")
public String insert() {
_var = new LinkedHashMap(); // 重置数据
String tmp = "";
Liuyanban post = new Liuyanban(); // 创建实体类
// 设置前台提交上来的数据到实体类中
post.setXingming(Request.get("xingming"));
post.setLianxidianhua(Request.get("lianxidianhua"));
post.setLiuyanneirong(Request.get("liuyanneirong"));
post.setLiuyanren(Request.get("liuyanren"));
post.setZhuangtai(Request.get("zhuangtai"));
post.setHuifuneirong(Request.get("huifuneirong"));
service.insert(post); // 插入数据
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
return showSuccess("保存成功", Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
}
/**
* 更新内容
* @return
*/
@RequestMapping("/liuyanbanupdate")
public String update() {
_var = new LinkedHashMap(); // 重置数据
// 创建实体类
Liuyanban post = new Liuyanban();
// 将前台表单数据填充到实体类
if (!Request.get("xingming").equals("")) post.setXingming(Request.get("xingming"));
if (!Request.get("lianxidianhua").equals("")) post.setLianxidianhua(Request.get("lianxidianhua"));
if (!Request.get("liuyanneirong").equals("")) post.setLiuyanneirong(Request.get("liuyanneirong"));
if (!Request.get("liuyanren").equals("")) post.setLiuyanren(Request.get("liuyanren"));
if (!Request.get("zhuangtai").equals("")) post.setZhuangtai(Request.get("zhuangtai"));
if (!Request.get("huifuneirong").equals("")) post.setHuifuneirong(Request.get("huifuneirong"));
post.setId(Request.getInt("id"));
service.update(post); // 更新数据
int charuid = post.getId().intValue();
Query.execute("update liuyanban set zhuangtai='已回复' where id='" + charuid + "'");
if (isAjax()) {
return jsonResult(post);
}
return showSuccess("保存成功", Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
}
/**
* 删除
*/
@RequestMapping("/liuyanban_delete")
public String delete() {
_var = new LinkedHashMap(); // 重置数据
if (!checkLogin()) {
return showError("尚未登录");
}
int id = Request.getInt("id"); // 根据id 删除某行数据
Map map = Query.make("liuyanban").find(id);
service.delete(id); // 根据id 删除某行数据
return showSuccess("删除成功", request.getHeader("referer")); //弹出删除成功,并跳回上一页
}
}
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统
更多推荐
所有评论(0)