在線學習|基于SpringBoot的在線學習系統(tǒng)的設計與實現(xiàn)
項目編號:無
一,環(huán)境介紹
語言環(huán)境:Java:? jdk1.8
數(shù)據庫:Mysql: mysql5.7
應用服務器:Tomcat:? tomcat8.5.31
開發(fā)工具:IDEA或eclipse
二,項目簡介
Online Education系統(tǒng)(簡稱:OE)是一個在線學習系統(tǒng),包含微信公眾號服務和后臺管理系統(tǒng)兩大部分。用戶通過微信授權登錄公眾號,用戶在公眾號上進行查看課程詳情和點播課程在線學習;用戶也可以分享教學視頻和公眾號。在線學習系統(tǒng)支持阿里云視頻點播、微信授權登錄、微信菜單、微信消息與騰訊云文件存儲等一系列功能,為用戶構建了一個全方位的在線學習平臺。[3]
本文采用前后端分離架構思想,在基于其他OE系統(tǒng)實際運營情況下,設計開發(fā)出的一個基于微信公眾號B2C模式下的在線學習平臺。在整個系統(tǒng)的開發(fā)周期中,系統(tǒng)前端采用主流前端框架VUE和Element-UI等,使用Node.js作為JavaScript運行環(huán)境,微信公眾號采用H5頁面顯示;后端采用SpringBoot技術,使用mybatis-plus進行持久層的操作,選用MYSQL數(shù)據庫進行數(shù)據的存儲和Redis內存緩存,并且綜合應用了騰訊云文件存儲和阿里云視頻點播來實現(xiàn)。主要完成以下幾個方面的研究:
1.分析在系統(tǒng)開發(fā)過程中,采用的C/S結構和B/S結構的優(yōu)缺點,提供介紹了一種基于微信公眾號B2C模式下的在線學習課程體系的一種基本的實現(xiàn)和方法。
2.對功能需求詳細分析,并且也對非功能需求以及系統(tǒng)運行環(huán)境進行簡單分析,分析該在線學習系統(tǒng)內各個功能模塊的設計和實現(xiàn)。
3.實現(xiàn)了講師管理、點播課程管理、在線點播課程、公眾號菜單管理、公眾號消息等功能。
隨著二十一世紀的到來,移動互聯(lián)網時代也接踵而至。各種各樣的移動技術,方便著人們的生活,例如車聯(lián)網和自動駕駛,AR/VR技術,智能電網智慧家居等;還有層出不窮的新型移動電話,例如智能手機和電腦。正是這些新興的移動技術,讓二零一九年因為新冠疫情被迫宅家的人們有了新思路。為了滿足人們對學習的最新要求,各式各樣的線上學習系統(tǒng)相繼出現(xiàn)。在線學習的新時代,就此誕生。
在傳統(tǒng)課堂的教學環(huán)境中,受到地點和環(huán)境的限制,各個地方的教育學習資源、課程資源分布不均,容易導致學生獲取的知識不夠廣泛。而在線學習系統(tǒng)是一種新型學習模式,采用互聯(lián)網技術,實現(xiàn)師生分離,使得高質量的教育資源能夠不受時間和地點的限制,通過互聯(lián)網技術不斷傳播,為知識提供了更高效的傳播通道。這種隨時隨地能夠多形式的在線學習系統(tǒng),能夠讓學生了解到更廣泛全面的知識和技術。[5]
在線學習系統(tǒng)是一個基于微信公眾號B2C模式實現(xiàn)的在線學習平臺,系統(tǒng)包含微信公眾號服務和后臺管理系統(tǒng)兩大部分。本系統(tǒng)由角色可分為兩類,微信用戶和管理員角色。
微信用戶通過微信授權登錄,關注該公眾號,就可以在線進行選擇課程、在線播放課程視頻等一系列操作。根據分析顯示,在線學習系統(tǒng)微信用戶需實現(xiàn)的功能有:微信授權登錄,點播課程,查看課程詳情,查詢講師,公眾號分享,公眾號消息等。微信用戶的用例圖如圖3-1所示:

圖3-1 用戶用例圖
管理員通過賬號密碼登錄后臺管理系統(tǒng)后,可以對講師、課程、公眾號菜單等進行管理。根據分析顯示,后臺管理員角色需要實現(xiàn)的功能有:登錄,講師管理,課程分類管理,點播課程管理,公眾號菜單管理,營銷管理等。系統(tǒng)管理員的用例圖如圖3-2所示:

圖3-2 系統(tǒng)管理員用例圖
系統(tǒng)技術架構圖如下圖4-1所示:

圖4-1 系統(tǒng)技術架構圖
數(shù)據庫概念結構的設計目的就是建立在數(shù)據庫需要進行分類處理的邏輯基礎框架之上,設定構造出一個可以同時滿足數(shù)據庫需要功能的各類邏輯實體,以及其之間相互或之間必要的邏輯關聯(lián),作為數(shù)據庫以后應用的基本邏輯結構的設計基礎。這是一開始階段完全可以不必再去考慮你所要的采用一個什么樣類型的數(shù)據庫存儲和管理數(shù)據庫的系統(tǒng)、操作系統(tǒng)種類、機器類型等等問題。[15]這個階段可以使用到的工具很多。用的最多的是E-R圖(Entity-Relation,實體-關系圖),另外還有許多計算機輔助工具(Computer Aided Software Engineering,CASE)可以幫助進行設計。[9]本系統(tǒng)采用了E-R圖的方法進行數(shù)據庫概念結構設計。E-R圖是描述數(shù)據實體關系的一種直觀描述工具。這種圖中有:
(1)實體:用方框表示,方框內為實體的名稱。
(2)實體的各種屬性:用橢圓表示,橢圓內為屬性名稱。使用線段將其和響應的實體連接起來。
(3)實體之間的聯(lián)系:用菱形表示,菱形內為聯(lián)系的名稱。
實體和實體之間的聯(lián)系較多,比較常見的聯(lián)系有l(wèi):1,l:N和M:N這三種。
本系統(tǒng)的E-R圖如下圖4-10所示:

圖4-10 系統(tǒng)E-R圖
三,系統(tǒng)展示
講師管理

?



課程管理


四,核心代碼展示
package com.order.controller;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.model.model.order.OrderInfo;import com.model.vo.order.OrderInfoQueryVo;import com.order.service.OrderInfoService;import com.service.result.R;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.Map;/**
* <p>
* 訂單表 訂單表 前端控制器
* </p>
*
* @author ZYD
* @since 2022-07-16
*/public class OrderInfoController { ? ?
? ?private OrderInfoService orderInfoService; ? ?
? ?
? ?public R listOrder({
? ? ? ?Page<OrderInfo> pageParam = Long page, Long limit, OrderInfoQueryVo orderInfoQueryVo)new Page<>(page,limit);
? ? ? ?Map<String,Object> map = orderInfoService.selectOrderInfoPage(pageParam,orderInfoQueryVo); ? ? ? ?return R.ok(map);
? ?}
}
package com.order.api;import com.model.vo.order.OrderFormVo;import com.order.service.OrderInfoService;import com.service.result.R;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;public class OrderInfoApiController { ? ?
? ?private OrderInfoService orderInfoService; ? ?
? ?
? ?public R submitOrder( { ? ? ? ? OrderFormVo orderFormVo, HttpServletRequest request)//返回訂單id
? ? ? ?Long orderId = orderInfoService.submitOrder(orderFormVo); ? ? ? ?return R.ok(orderId);
? ?}
}
五,項目總結
數(shù)據庫表結構展示如下
在線學習系統(tǒng)數(shù)據庫中各個表格的設計結果如下面的幾個表所示。每個表表示在數(shù)據庫中的一個表。
用戶表:user_info
用戶表用于存儲用戶的基本信息,其主鍵是id。用戶表設計如下表4-1所示:
表4-1 用戶表
字段名
類型
描述
id
bigint
用戶編號
phone
Varchar(20)
手機號
nick_name
Varchar(100)
用戶昵稱
sex
tinyint
性別 0:女 1:男
avatar
varchar(200)
頭像
subscribe
tinyint
0:未訂閱 1:已訂閱
recommend_id
bigint
推薦人用戶id
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
講師表:teacher
講師表用于存儲本系統(tǒng)中講師的各種信息,其主鍵是id。講師表設計如下表4-2所示:
表4-2 講師表
字段名
類型
描述
id
bigint
講師編號
name
varchar(20)
講師姓名
intro
varchar(500)
講師簡介
career
varchar(500)
講師資歷
level
int
頭銜 1高級講師? 2首席講師
avatar
varchar(255)
講師頭像
sort
int
排序
join_date
date
入駐時間
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
課程科目表:subject
課程科目表用來存儲課程所屬的科目的相關信息,其主鍵為id。課程科目表設計如下表4-3所示:
表4-3 課程科目表
字段名
類型
描述
id
bigint
課程科目編號
title
varchar(10)
科目名稱
parent_id
bigint
父ID
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
課程表:course
課程表存儲了所有課程的相關信息,其主鍵為id。課程表設計如下表4-4所示:
表4-4 課程表
字段名
類型
描述
id
bigint
課程編號
teacher_id
bigint
課程講師ID
subject_id
bigint
課程科目ID
title
varchar(50)
課程名稱
price
decimal
課程銷售價格,設置為0則可以免費觀看
lesson_num
int
總課時
duration_sum
int
視頻總時長(秒)
cover
varchar(255)
課程封面圖片路徑
buy_count
bigint
銷售數(shù)量
view_count
bigint
瀏覽數(shù)量
status
tinyint
課程狀態(tài) 0未發(fā)布 1已發(fā)布
publish_time
datetime
課程發(fā)布時間
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
課程章節(jié)表:chapter
課程章節(jié)表在線學習系統(tǒng)中課程的所有章節(jié)的相關信息,其主鍵為id.課程章節(jié)表設計如下表4-5所示:
表4-5 課程章節(jié)表
字段名
類型
描述
id
bigint
章節(jié)編號
course_id
bigint
課程ID
title
varchar(50)
章節(jié)名稱
sort
int
排序
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
課程簡介表:course_description
課程簡介表是用于存儲課程中課程簡介的所有相關信息的,其主鍵為id。課程簡介表設計如下表4-6所示:
表4-6 課程簡介表
字段名
類型
描述
id
bigint
簡介編號
course_id
bigint
課程ID
description
text
課程簡介
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
課程視頻表:video
課程視頻表用于存儲每個課程中不同章節(jié)的視頻的所有相關信息,其主鍵為id.課程視頻表設計如下表4-7所示:
表4-7 課程視頻表
字段名
類型
描述
id
bigint
簡介編號
course_id
bigint
課程ID
chapter_id
bigint
章節(jié)ID
title
varchar(50)
視頻名稱
video_source_id
varchar(100)
云端視頻資源
video_original_name
varchar(100)
原始文件名稱
sort
int
排序
play_count
bigint
播放次數(shù)
is_free
tinyint
是否可以試聽:0收費 1免費
duration
float
視頻時長(秒)
size
bigint
視頻源文件大小(字節(jié))
version
bigint
樂觀鎖
status
tinyint
狀態(tài)
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
視頻來訪者記錄表:video_visitor
視頻來訪者記錄表用于存儲每個視頻訪問該視頻的用戶的相關信息,其主鍵為id。視頻來訪者記錄表計如下表4-8所示:
表4-8 視頻來訪者記錄表
字段名
類型
描述
id
bigint
來訪者記錄編號
course_id
bigint
課程ID
video_id
bigint
視頻id
user_id
bigint
來訪者用戶id
nick_name
varchar(100)
昵稱
join_time
varchar(30)
進入時間
leave_time
varchar(30)
離開時間
duration
bigint
用戶停留的時間(秒)
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
公眾號菜單表:menu
公眾號菜單表用于存儲微信用戶端公眾號頁面的菜單的所有相關信息,其主鍵為id。公眾號菜單表計如下表4-9所示:
表4-9 公眾號菜單表
字段名
類型
描述
id
bigint
菜單編號
name
varchar(50)
菜單名稱
type
varchar(10)
類型
url
varchar(100)
網頁鏈接,用戶點擊菜單可打開鏈接
menu_key
varchar(20)
菜單key值,用于消息接口推送
sort
tinyint
排序
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除
優(yōu)惠券信息表:coupon_info
優(yōu)惠券信息表用于存儲發(fā)放給用戶的優(yōu)惠券的所有信息,其主鍵為id。優(yōu)惠券信息表設計如下表4-10所示:
表4-10 優(yōu)惠券信息表
字段名
類型
描述
id
bigint
優(yōu)惠券編號
coupon_type
tinyint
優(yōu)惠券類型
coupon_name
varchar(100)
優(yōu)惠券名字
amount
decimal(10,2)
金額
condition_amount
decimal(10,2)
使用門檻 0->沒門檻
start_time
date
開始日期
end_time
date
結束日期
range_type
tinyint
適用范圍[1->全場通用]
rule_desc
varchar(200)
規(guī)則描述
publish_count
int
發(fā)行數(shù)量
per_limit
int
每人限領張數(shù)
use_count
int
已使用數(shù)量
receive_count
int
領取數(shù)量
expire_time
datetime
過期時間
publish_status
tinyint(1)
發(fā)布狀態(tài) 0:未發(fā)布 1:已發(fā)布
create_time
timestamp
創(chuàng)建時間
update_time
timestamp
更新時間
is_deleted
tinyint
0:未刪除 1:已刪除