# 小酷在线学习平台 **Repository Path**: mwq0420/xiaocool-learning ## Basic Information - **Project Name**: 小酷在线学习平台 - **Description**: 小酷在线学习平台是由springcloud-alibaba作为后端框架,vue3作为管理端,uniapp作为客户端的在线学习平台,可以由管理端(教师端)添加课程章节,客户端学习使用。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-03-28 - **Last Updated**: 2025-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 小酷在线学习平台 #### 介绍 小酷在线学习平台是由springcloud-alibaba作为后端框架,vue3作为管理端,uniapp作为客户端的在线学习平台,可以由管理端(教师端)添加课程章节,客户端学习使用。 #### 软件架构 软件架构说明 1. cloud-demo 为项目后端 2. teacher 为项目教师管理端 3. app05 为项目学生用户端 #### 项目架构 前端:vue+element、uniapp+cool-uni 后端:springcloud-alibaba、Redis、sentinel、nacos、open-feign  ### 开发环境 #### 开发工具  #### 开发环境 Mysql8.0、jdk1.8、vue3.0、Redis、Sentinel 1.8.1、Nacos ### 系统分析 #### 分析功能需求分析 系统采用BS架构,用户可以在任何设备上使用浏览器访问应用程序,提供了更广泛的可访问性和兼容性,教师可以访问教师端对班级、课程、章节等进行统一管理,学生可以访问学生端进行购买课程学习,参加线下实践等,具体功能能求如下表所示: | 教师端 | | ------------------------------ | | 班级管理 | | 创建班级 | | 查看班级学生名单 | | 班级添加学生 | | 班级删除学生 | | 查看学生学习进度 | | 班级删除课程 | | 班级添加课程 | | 查看班级需学课程 | | 课程管理 | | 创建课程 | | 查看课程基本信息 | | 删除本课程 | | 对课程的基本信息重新编辑 | | 章节管理: | | 创建章节 | | 查看章节基本信息 | | 删除章节 | | 对章节的名称、视频地址重新编辑 | | 实践管理: | | 创建线下实践 | | 取消线下实践 | | 查看线下实践基本信息 | | 资讯管理 | | 创建资讯 | | 查看资讯内容 | | 删除资讯 | | 对资讯内容重新编辑 | | 学生端 | | ---------------------- | | 班级查看 | | 查看所属班级 | | 查看班级课程 | | 课程互动 | | 分享课程 | | 章节评论 | | 课程评论 | | 取消报名线下实践 | | 查看我报名的线下实践 | | 报名线下实践 | | 查看线下实践 | | 点赞课程 | | 收藏课程 | | 进行选课 | | 浏览可选课程 | | 课程加入购物车 | | 购买课程 | | 查看学习进度 | | 观看课程 | | 记录学习进度 | | 下次学习时恢复学习进度 | | 查看资讯 | | 浏览资讯 | | 发表资讯评论 | | 进行问答 | | 提出问题 | | 回答问题 | | 采纳问题 | ### 数据流图 顶层数据流图:  加工完后的0层数据流图:  #### 项目数据流分析 本项目的小程序用户端数据主要包括学生、课程、订单数据。用户在小程序客户端界面发生的交互动作是业务的数据来源根据用户行为和购物系统的架构设计分析业务系统的数据流处理主要包括客户端与本地缓存、客户端与系统服务器、客户端与微信服务器三部分  如上图统业务数据流图所示,用户可以通过微信小程序网上购物系统客户端携带个人信息请求课程、订单等信息。小程序客户端接收用户的行为请求在控制层进行相应的业务逻辑处理并将处理结果以页面展示的方式返回给用户,如果用户请求的数据涉及到数据库的查询和更新,客户端会将用户需求的请求参数通过模型层与服务器通信在服务器部分进行数据的校验和处理。如果用户的请求合法,则会在数据库中进行相应的响应操作服务器处理完毕后会将结果返回给客户端。在系统设计中由于用户数据量较小与用户相关的数据存放在小程序本地缓存中可以为用户提供更快速的数据反馈效果用户行为如签到以及获取用户信息等。 ### 数据字典 ### 用户信息表 · **描述**: 存储用户的基本信息。 · **字段**: o 用户ID: 用户的唯一标识符 o 用户名: 用户的名称 o 密码: 用户的登录密码 o 电子邮件: 用户的电子邮箱地址 o 注册时间: 用户的注册日期和时间 ### 学生信息表 · **描述**: 存储学生的详细信息。 · **字段**: o 学生ID: 学生的唯一标识符 o 学生名: 学生的名称 o 年龄: 学生的年龄 o 性别: 学生的性别 o 注册时间: 学生的注册日期和时间 o 积分: 学生的学习积分 o 班级: 学生所在的班级 ### 教师信息表 · **描述**: 存储教师的详细信息。 · **字段**: o 教师ID: 教师的唯一标识符 o 教师名: 教师的名称 o 科目: 教师所教授的科目 o 联系方式: 教师的联系方式 ### 课程信息表 · **描述**: 存储课程的详细信息。 · **字段**: o 课程ID: 课程的唯一标识符 o 课程名: 课程的名称 o 课程描述: 课程的详细描述 o 教师ID: 教授该课程的教师ID o 创建时间: 课程创建的日期和时间 ### 学生课程信息表 · **描述**: 存储学生与课程的关联信息。 · **字段**: o 学生ID: 学生的唯一标识符 o 课程ID: 课程的唯一标识符 o 购买日期: 学生购买课程的日期 o 学习进度: 学生在该课程中的学习进度 ### 学生积分信息表 · **描述**: 存储学生的积分记录。 · **字段**: o 学生ID: 学生的唯一标识符 o 积分变动: 积分的变动情况 o 积分来源: 积分的来源 o 变动时间: 积分变动的时间 ### 问题反馈表 · **描述**: 存储用户的问题反馈信息。 · **字段**: o 问题ID: 问题的唯一标识符 o 用户ID: 提出问题的用户ID o 问题描述: 问题的详细描述 o 提出时间: 提出问题的时间 o 反馈状态: 问题的处理状态 ### 咨询问答表 · **描述**: 存储学生与教师之间的咨询问答记录。 · **字段**: o 问答ID: 问答记录的唯一标识符 o 学生ID: 提出问题的学生ID o 教师ID: 回答问题的教师ID o 问题描述: 学生提出的问题描述 o 回答内容: 教师的回答内容 o 问答时间: 咨询问答的时间 ### 购物车表 · **描述**: 存储学生的购物车信息。 · **字段**: o 购物车ID: 购物车的唯一标识符 o 学生ID: 学生的唯一标识符 o 课程ID: 课程的唯一标识符 o 加入时间: 课程加入购物车的时间 ### 签到信息表 · **描述**: 存储学生的签到记录。 · **字段**: o 签到ID: 签到记录的唯一标识符 o 学生ID: 学生的唯一标识符 o 签到时间: 学生签到的日期和时间 o 积分奖励: 签到所获得的积分奖励 ### 课程章节信息表 · **描述**: 存储课程的章节信息。 · **字段**: o 章节ID: 章节的唯一标识符 o 课程ID: 所属课程的唯一标识符 o 章节名称: 章节的名称 o 章节描述: 章节的详细描述 o 创建时间: 章节创建的日期和时间 ### 课程观看记录表 · **描述**: 存储学生观看课程视频的记录。 · **字段**: o 观看记录ID: 观看记录的唯一标识符 o 学生ID: 学生的唯一标识符 o 章节ID: 章节的唯一标识符 o 观看时间: 观看视频的时间 o 观看进度: 学生在该视频中的观看进度 ### **系统总体设计与实现** ### 系统总体结构设计 根据分析学生学习课程的基本需求,对比分析手机APP和PC网站上的主要功能模块,在功能方面,移动端比原生APP更单一;设计方面,网页端比原生APP更简洁;在使用场景方面,网页端应比原生APP更明确。本在线学习平台学生端的主要定位是为学生提供上课培训的便利,基于移动网页端的主要定位,平台应为用户提供更加主题明确的课程信息,尽量减少与课程无关的不必要的功能模块,为用户提供用完即走、方便快捷、随时观看的使用体验[5]。根据以上分析,本小程序的购买课程业务逻辑模块分为用户登录、课程、问答/咨询、个人信息管理功能模块;而教师端则采用PC网页端的方式,方便操作,便于管理学生,课程,订单等,提高了工作效率,降低了人力资源成本[6]。教师端采用PC展示效果优越:电脑端网站可以充分利用大屏幕的优势,展示更丰富的视觉效果,为用户带来更好的浏览体验。总体的系统功能模块如下图所示  ### 局部ER图设计 本系统主要有用户表、课程表、章节表、订单表、班级表、学生表、课程字典表、课程进度表、课程互动表、课程评价表、章节评价表、学习进度表、问答表、咨询表、线下实践表和学习进度表等实体。以下是各个实体的 E-R 图: 学生表拥有学生编号、学生姓名、学生学号、学生学习时长的基本属性,下图为学生表实体类ER图:  班级表拥有班级编号、班级名、班主任id、班级人数、是否删除、班主任姓名的基本属性,下图为班级表实体类ER图: 图4-2-2 班级表实体类ER图 用户表拥有用户编号、用户名、密码、头像、角色、姓名的基本属性,下图为用户表实体类ER图:  课程表拥有课程编号、课程名、是否删除、课程简介、课程总时长、课程价格、是否收费、课程目录、课程简介、课程视频、课程海报、课程主讲人、课程评分数的基本属性,下图为课程表实体类ER图:  课程类别字典表拥有编号、课程类别、父类别编号的基本属性,下图为课程评价表实体类ER图:  课程互动表拥有编号、课程编号、学生编号、是否点赞、是否购买、是否收藏的基本属性,下图为课程互动表实体类ER图:  课程评价表拥有编号、课程编号、课程评价、学生编号的基本属性,下图为课程评价表实体类ER图: 课程章节表拥有章节编号、课程编号、章节名称、章节地址、章节排序序号、章节时长的基本属性,下图为章节表ER图:  课程评价表拥有编号、课程编号、章节编号、章节评价、学生编号的基本属性,下图为章节评价表实体类ER图: 学习进度表拥有编号、学生编号、班级编号、章节编号、记录更新的时间、最近一次看到的时间的基本属性,下图为学习进度表实体类ER图: 话题/问题表拥有问题编号、发布的时间、内容、是否被采纳、是否为问题、回复问题的id、发布者编号的基本属性,下图为话题/问题表实体类ER图: 线下实践表拥有实践编号、实践名称、实践实践、实践地点、课程编号、教师编号、是否删除的基本属性,下图为咨询表实体类ER图: 咨询表拥有咨询编号、咨询内容、咨询类型、发布日期、用户编号、教师编号、点赞数的基本属性,下图为咨询表实体类ER图: 咨询评论表拥有评论编号、咨询编号、评论内容、咨询时间、咨询编号的基本属性,下图为咨询评论表实体类ER图: 订单表拥有订单编号、课程编号、学生编号、是否购买的基本属性,下图为订单表实体类ER图:  ### 4.2.2 数据库表设计 以下是为各个实体设计和创建在数据库中的数据表信息表格: ##### 用户表-user | 字段名 | 描述 | 类型 | 长度 | 约束 | 说明 | | --------- | ------ | ---- | ---- | ----------------- | ---- | | id | id | N | 20 | 自增长,PRIMARYKEY | | | user_name | 登录名 | C | 20 | NOTNULL | | | password | 密码 | C | 50 | NOTNULL | | | truename | 姓名 | C | | | | | actor | 角色 | C | | | | ##### 学生表-student | 字段名 | 描述 | 类型 | 长度 | 约束 | 说明 | | -------------- | ------------ | ---- | ---- | ------------------ | ------------------ | | stu_id | 学生id | C | 20 | NOTNULL,PRIMARYKEY | 从统一认证平台获取 | | stu_name | 学生姓名 | C | 20 | NOTNULL | | | stu_study_time | 学生学习时长 | N | 50 | NOTNULL | | | stu_score | 学生积分 | N | 10 | NOTNULL | | ##### 班级表-class-逻辑删除 | 字段名 | 描述 | 类型 | 长度 | 约束 | 说明 | | ----------------- | -------- | ------ | ---- | ------------------ | ------------------ | | class_id | 班级id | BigInt | 20 | NOTNULL,PRIMARYKEY | 雪花ID | | class_name | 班级名称 | C | 20 | NOTNULL | | | tea_id | 教师id | C | 20 | NOTNULL,FK | 对应用户表 | | class_student_num | 班级人数 | N | 8 | NOTNULL | | | deleted | 是否删除 | N | | | 默认值:0已删除:1 | ##### 课程表-cours-逻辑删除 | 字段名 | 描述 | 类型 | 长度 | 约束 | 说明 | | ---------------- | ---------- | ------ | ---- | ------------------ | ------------------ | | cou_id | 课程ID | BigInt | 20 | NOTNULL,PRIMARYKEY | 雪花ID | | cou_name | 课程名称 | C | 20 | NOTNULL | | | cou_introduction | 课程介绍 | C | 500 | NOTNULL | | | cou_type | 课程类别 | N | 2 | NOTNULL | 大类 | | cou_chile_type | 课程类别 | N | 2 | | 子类 | | cou_price | 课程价格 | N | 20 | NOTNULL | | | cou_cata_num | 课程章节数 | N | 10 | NOTNULL | | | tea_id | 课程作者 | C | 10 | NOTNULL,FOREGINKEY | 对应用户表的ID | | cou_coll_num | 课程收藏数 | N | 20 | NOTNULL | | | cou_reco_num | 课程推荐数 | N | 20 | NOTNULL | 被分享数 | | deleted | 是否删除 | N | | | 默认值:0已删除:1 | ##### 章节表-chapter | 字段名 | 描述 | 类型 | 长度 | 约束 | 说明 | | --------- | ------------ | ------ | ---- | ------------------ | -------- | | cha_id | 章节id | BigInt | 20 | NOTNULL,PRIMARYKEY | 雪花ID | | cha_index | 章节排序序号 | N | 10 | NOTNULL | | | cha_title | 章节名称 | C | 20 | NOTNULL | | | course_id | 课程id | BigInt | 20 | NOTNULL,FOREGINKEY | | | cha_url | 章节地址 | C | 100 | NOTNULL | | | cha_time | 章节时长 | N | 50 | NOTNULL | 秒为单位 | ##### 课程互动关系表- course_interaction | 字段名 | 描述 | 类型 | 长度 | 约束 | 说明 | | --------- | -------- | ------ | ---- | ------------------ | ------------------ | | id | id | N | | PK | 自增 | | cou_id | 课程id | BigInt | 20 | NOTNULL,FOREGINKEY | | | stu_id | 学生id | N | 10 | NOTNULL,FOREGINKEY | | | collect | 是否收藏 | N | 2 | NOTNULL | 0为未收藏1为已收藏 | | have | 是否购买 | N | 2 | NOTNULL | 0为未购买1为已购买 | | recommend | 是否点赞 | N | 2 | NOTNULL | 0为未点赞1为已点赞 | ##### 课程评价表- course_interaction | 字段名 | 描述 | 类型 | 长度 | 约束 | 说明 | | ------------ | -------- | ------ | ---- | ------------------ | -------- | | id | id | N | | PK | 自增 | | cou_id | 课程id | BigInt | 20 | NOTNULL,FOREGINKEY | | | stu_id | 学生id | N | 10 | NOTNULL,FOREGINKEY | | | cou_appraise | 课程评价 | C | 500 | | 课程评价 | ##### 进度表- learning_progress-【将根据章节级联删除】 | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ----------- | ------------------ | -------- | -------- | ------------------ | ---------------------- | | id | id | N | | PK | 自增 | | stu_id | 学生id | N | 10 | NOTNULL,FOREGINKEY | | | cou_id | 课程id | BigInt | 20 | NOTNULL,FOREGINKEY | | | class_id | 班级id | BigInt | 20 | NOTNULL,FOREGINKEY | | | cha_id | 章节id | BigInt | 20 | NOTNULL,FOREGINKEY | | | time | 最新章节看到的时间 | N | 20 | NOTNULL | 以秒钟为单位的学习时长 | | update_time | 记录更新的时间 | ts | 20 | NOTNULL | 时间戳 | ##### 章节评价表- course_chapter_appraise-【将根据章节级联删除】 | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ------------ | ---------------- | -------- | -------- | ------------------ | -------- | | id | id | N | | PK | 自增 | | cou_id | 课程id | BigInt | 20 | NOTNULL,FOREGINKEY | | | cha_id | 章节id | BigInt | 20 | NOTNULL,FOREGINKEY | 章节ID | | stu_id | 学生id | N | 10 | NOTNULL,FOREGINKEY | | | cha_appraise | 章节评价appraise | C | 500 | | 章节评价 | ##### 话题/问题表- topic_question--【将根据问题级联删除】 | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | -------------- | -------------- | -------- | -------- | ------------------ | ----------------------- | | tq_id | id | BigInt | 20 | NOTNULL,PRIMARYKEY | 雪花ID | | u_id | 发布者id | N | 10 | NOTNULL,FOREGINKEY | 发布问题/回复的作者id | | content | 内容 | C | 10 | NOTNULL | | | creat_time | 发布时间 | ts | 20 | NOTNULL | 时间戳 | | is_question | 是否为问题 | T | 1 | True、false | 问题/回复 | | answered_tq_id | 被回复的问题id | BigInt | 20 | FOREGINKEY | 自关联到本表的tq_id字段 | | is_select | 是否被采纳 | ts | 1 | True/false | 是否被采纳 | ##### 资讯表- information | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ----------- | -------- | -------- | -------- | ------------------ | -------- | | info_id | 资讯id | BigInt | 20 | NOTNULL,PRIMARYKEY | 雪花ID | | info_title | 资讯标题 | C | 100 | NOTNULL | | | info_main | 资讯内容 | C | 10000 | NOTNULL | | | info_author | 资讯作者 | C | 20 | NOTNULL | | | info_data | 发布日期 | ts | 20 | NOTNULL | 时间戳 | | info_like | 点赞数 | N | 20 | | | | tea_id | 教师ID | N | | NOTNULL,FOREGINKEY | | ##### 资讯评论表- comment-【将根据资讯级联删除】 | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ---------- | ----------------------- | -------- | -------- | ------------------- | ---------------- | | c_id | 评论id | BigInt | 20 | NOTNULL,PRIMARYKEY | 雪花ID | | c_content | 评论内容 | C | 500 | NOTNULL | | | c_date | 评论时间 | ts | 20 | NOTNULL | 时间戳 | | info_id | 资讯ID | C | 10 | NOTNULL、FOREGINKEY | | | u_id | 评论者ID | N | 10 | NOTNULL、FOREGINKEY | | | role | 评论者身份(教师/学生) | B | 4 | NOTNULL | 0为教师、1为学生 | ##### 线下实践表- practice-逻辑删除 | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ---------- | -------- | -------- | -------- | ------------------- | ------------------ | | pra_id | 实践id | BigInt | 20 | NOTNULL,PRIMARYKEY | 雪花ID | | pra_name | 实践名称 | C | 100 | NOTNULL | | | pra_time | 实践时间 | ts | 20 | NOTNULL | 时间戳 | | pra_site | 实践地点 | C | 200 | NOTNULL | | | pra_main | 实践内容 | C | 1000 | NOTNULL | | | tea_id | 教师ID | N | 10 | NOTNULL, FOREGINKEY | | | cou_id | 课程id | BigInt | 20 | NOTNULL, FOREGINKEY | | | deleted | 是否删除 | N | | | 默认值:0已删除:1 | ##### 课程-班级关联表-cou_class | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ---------- | -------- | -------- | -------- | ---------- | -------- | | id | id | N | | PK | 自增 | | cou_id | 课程id | BigInt | 20 | NOTNULL,FK | | | class_id | 班级id | BigInt | 20 | NOTNULL,FK | | | join_date | 加入时间 | ts | | | 时间戳 | ##### 学生-班级关联表-stu_class | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ---------- | -------- | -------- | -------- | ---------- | -------- | | id | id | N | | PK | 自增 | | stu_id | 学生id | N | 20 | NOTNULL,FK | | | class_id | 班级id | BigInt | 20 | NOTNULL,FK | | | join_date | 加入时间 | ts | | | 时间戳 | ##### 学生-课程关联表(适用于自选课程)-stu_cou | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ----------- | -------- | -------- | -------- | ---------- | -------- | | id | id | N | | PK | 自增 | | stu_id | 学生id | N | 20 | NOTNULL,FK | | | cou_id | 课程id | BigInt | 20 | NOTNULL,FK | | | select_time | 选课时间 | ts | 30 | NOTNULL | 时间戳 | ##### 学生-课程学习进度(适用于自选课程)-stu-cou-progress-【将根据章节级联删除】 | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ----------- | ---------------- | -------- | -------- | ------------------ | -------- | | id | id | N | | PK | 自增 | | stu_id | 学生id | N | 10 | NOTNULL,FOREGINKEY | | | cou_id | 课程id | BigInt | 20 | NOTNULL,FOREGINKEY | | | cha_id | 章节id | C | 36 | NOTNULL,FOREGINKEY | | | time | 最章节看到的时间 | N | 20 | NOTNULL | | | update_time | 记录更新的时间 | ts | 20 | NOTNULL | 时间戳 | ##### 学生-课程购物车表-stu_cou_cart | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ---------- | -------------- | -------- | -------- | ----------- | -------- | | id | id | N | | PK | 自增 | | stu_id | 学生id | C | 20 | NOTNULL,FK | | | cou_id | 课程id | BigInt | 20 | NOTNULL,FK | | | add_time | 加入购物车时间 | ts | 20 | NOTNULL | 时间戳 | ##### 学生-线下实践关联表-stu_practice | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ---------- | -------- | -------- | -------- | ----------- | -------- | | id | id | N | | PK | 自增 | | stu_id | 学生id | N | 20 | NOTNULL,FK | | | pra_id | 实践id | BigInt | 20 | NOTNULL,FK | | | pra_date | 报名时间 | ts | 20 | NOTNULL | 时间戳 | ##### 课程类别字典表-cours_type | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | --------------- | -------- | -------- | -------- | ----------- | -------- | | id | id | N | | PK | 自增 | | cou_type | 课程类别 | C | 20 | NOTNULL,FK | | | cou_parent_type | 父类别ID | N | | NULL | | ##### 订单情况表-order_form | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ---------------- | ------------ | -------- | -------- | ----------- | -------------------------------------------------- | | id | 订单号 | N | | PK | 自增 | | orderForm_type | 订单类别 | C | 20 | NOTNULL,FK | | | orderForm_date | 购买时间 | ts | | NOTNULL | | | orderForm_p | 订单完成情况 | C | | NOTNULL | 1为完成,0为未完成 | | orderForm_detail | 订单说明 | C | 500 | NULL | 订单说明,默认为无,若OrderForm_p为0,则对订单说明 | ##### 订单详情表-order_detail | **字段名** | **描述** | **类型** | **长度** | **约束** | **说明** | | ------------ | -------- | -------- | -------- | ----------- | -------- | | id | id | N | | PK | 自增 | | OrderForm_id | 订单号 | C | 20 | NOTNULL,FK | | | cou_id | 课程编号 | N | | NULL | | ### 项目流程  图4-3-1 教师端流程图 ```html5