鱼书在线教育平台

580 阅读12分钟

好久没更新博客了,最近一个月都在忙学校的课程设计,那就在这里记录一下吧!

背景

数据库系统概述课程设计,本小组设计了一个在线教育网站--”鱼书在线“,为了尽可能的完善该网站的功能,我们对市面上的大部分在线教育网站进行了调查研究,同时我们也分成前期和后期对该网站进行了需求分析调查。

定义

鱼书在线:鱼书意为学生可以向鱼儿那般在知识的海洋中悠然自得。这是一个为各类学生提供在线视频,学生可以通过在线的方式来学习相关课程。

相关配置

  • web框架:Django
  • 后台管理系统:xadmin
  • 操作系统:win10
  • 数据库:mysql

需求分析

系统功能需求:

1.1.1 提供用户注册登录功能。

1.1.2 后台上传数据功能(学习视频、学习资料等)。

1.1.3 前端页面展示相关课程、授课机构、授课讲师。

1.1.4 前端可以查看相关课程详情信息。

后期系统需求分析

2.1 系统功能需求:

2.1.1 登录注册功能完善: 为了防止一个人注册多个用户账号,我们选择采用“一机一号”的形式进行注册;

2.1.2 首页需求分析: 首页顶部显示用户昵称,提供进入“个人中心”“退出登陆”接口;

Title部分显示网站logo及全局搜索功能;

主体分为四部分:

  1. 轮播图:可以理解为广告位,即管理员可在后台将相关广告图片、图片点击跳转链接添加,前端就会时时更新,并循环播放;
  2. 公开课:在数据库中选取六个课程将其信息以卡片的形式进行展现;
  3. 授课机构:在数据库中选取十五个授课将其信息以卡片的形式进行展现;
  4. 页脚:显示logo、平台联系电话等;

公开课页需求分析:

  1. 用户可以通过顶端的tab切换至公开课页面;
  2. 提供全局搜索框;
  3. 公开课页面以列表卡片的形式展示课程信息(课程封面图、课程名称、课程时长、学习人数等);
  4. 右侧显示热门课程推荐(课程封面图、课程名称、课程难度等);
  5. 所有课程信息展示卡片点击可跳转到相关课程详情页;
  6. 课程列表可通过后台数据量进行分页;
  7. 课程列表信息可以进行不同类比的排序(热门程度、学习人数等);
  8. 页脚:显示logo、平台联系电话等;

授课教师页面需求分析:

  1. 用户可以通过顶端的tab切换至授课教师页面;
  2. 提供全局搜索框;
  3. 授课教师页面以列表卡片的形式展示讲师信息(头像、姓名、工作年限、工作职位、就职公司、年龄、教学特点等);
  4. 点击某行还可以跳转至该教师详情详情页;
  5. 右侧显示讲师排行榜(头像、姓名、工作年限等);
  6. 教师列表可通过后台数据量进行分页;
  7. 教师列表信息可以进行不同类比的排序(人气等);
  8. 页脚:显示logo、平台联系电话等;

授课机构页面需求分析:

  1. 用户可以通过顶端的tab切换至授课机构页面;
  2. 提供全局搜索框;
  3. 授课机构页面以列表卡片的形式展示机构信息(图标、名称、课程数、学习人数、机构地址、经典课程等);
  4. 提供课程机构多条件筛选;
  5. 点击某行还可以跳转至该机构详情页;
  6. 右侧显示机构排名;
  7. 提供咨询提交输入框;
  8. 机构列表可通过后台数据量进行分页;
  9. 页脚:显示logo、平台联系电话等;

课程详情页面需求分析:

  1. 用户可以通过点击某课程卡片切换至课程详情页面;
  2. 展示课程相关信息(课程图片、课程名称、课程简介、课程时长、课程章节数量、课程类别、学习这门课程的用户,还有收藏、开始学习入口。)
  3. 显示课程出自于哪个机构,标签显示该机构的相关信息:机构图标、该用户是否收藏这个机构、机构拥有课程数量、机构拥有教师数量、机构所在地、机构是否认证。
  4. 提供全局搜索框;
  5. 显示相关课程推荐:通过课程标签在数据库中搜索相关课程.
  6. 课程详情,通过富文本的形式,将后台编辑好的页面直接展示。
  7. 页脚:显示logo、平台联系电话等;

开始学习页面需求分析:

  1. 当用户在课程详情页面点击开始学习后进入,并在后台的数据表中将该课程的学习人数加1;
  2. 页面上部分显示课程标题、课程难度、课程学习时长、课程学习人数;
  3. 右侧显示资料下载,将课程后台上传的资源文件进行展示,并提供下载链接,点击即可下载资料;
  4. 讲师提示:显示该课程的讲师头像、名字、工作职位、还有课程须知、老师告诉你能学到什么;
  5. 章节信息栏:显示课程公告、课程章节信息、每个章节名称以及每一小节的时长,用户点击每个小节可以跳到相关视频页面。
  6. 课程评论栏:用户可以在该页面提供相关评论,下方会实时更新用户评论,显示会显示用户头像、用户昵称、评论内容、评论时间。

讲师详情页需求分析:

  1. 教师详情页除了显示该教师基本信息,还显示该教师在平台的全部课程,显示该用户是否收藏该教师;
  2. 显示该教师所在的授课机构、用户是否收藏机构
  3. 显示教师排行榜。

个人中心页面需求分析:

  1. 展示个人信息
  2. 提供修改头像功能
  3. 提供修改个人信息功能
  4. 提供修改密码功能
  5. 展示该用户收藏课程
  6. 展示用户消息;

数据库设计

数据库ER图

1. 用户相关

Djando创建userprofile

# 昵称 最长为50 可空
nick_name = models.CharField(max_length=50, verbose_name="昵称", default="")
# 生日 允许为空
birthday = models.DateField(verbose_name="生日", null=True, blank=True)
# 性别 必填
gender = models.CharField(verbose_name="性别", choices=GENDER_CHOICES, max_length=6)
# 地址 必填,如果一开始没有填,就设置为空 default=""
address = models.CharField(max_length=100, verbose_name="地址", default="")
# 手机号 不可为空,不能相同 unique=True
mobile = models.CharField(max_length=11, verbose_name="手机号")
# 头像
image = models.ImageField(verbose_name="用户头像", upload_to="head_image/%Y%m", default="default.jpg")

2.课程相关

课程表

# 外键
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, verbose_name="讲师")
course_org = models.ForeignKey(CourseOrg, null=True, blank=True, on_delete=models.CASCADE, verbose_name="课程机构")
name = models.CharField(verbose_name="课程名", max_length=50)
desc = models.CharField(verbose_name="课程描述", max_length=300)
learn_times = models.IntegerField(default=0, verbose_name="学习时长(分钟数)")
degree = models.CharField(verbose_name="难度", choices=(("cj", "初级"), ("zj", "中级"), ("gj", "高级")), max_length=2)
students = models.IntegerField(default=0, verbose_name='学习人数')
fav_nums = models.IntegerField(default=0, verbose_name='收藏人数')
click_nums = models.IntegerField(default=0, verbose_name="点击数")
notice = models.CharField(verbose_name="课程公告", max_length=300, default="")
category = models.CharField(default=u"后端开发", max_length=20, verbose_name="课程类别")
tag = models.CharField(default="", verbose_name="课程标签", max_length=10)
youneed_know = models.CharField(default="", max_length=300, verbose_name="课程须知")
teacher_tell = models.CharField(default="", max_length=300, verbose_name="老师告诉你")

is_classics = models.BooleanField(default=False, verbose_name="是否是经典课程")
# 富文本编辑器
detail = UEditorField(verbose_name="课程详情", width=600, height=300, imagePath="courses/ueditor/images/",
                      filePath="courses/ueditor/files/", default="")
is_banner = models.BooleanField(default=False, verbose_name="是否广告位")
image = models.ImageField(upload_to="courses/%Y/%m", verbose_name="封面图", max_length=100)

课程标签表

课程章节信息表

课程视频表

课程资源表

3.教育机构相关

课程机构表

name = models.CharField(max_length=50, verbose_name="机构名称")
desc = UEditorField(verbose_name="机构描述", width=600, height=300, imagePath="courses/ueditor/images/",
                      filePath="courses/ueditor/files/", default="")
tag = models.CharField(default="全国知名", max_length=10, verbose_name="机构标签")
category = models.CharField(default="pxjg", verbose_name="机构类别", max_length=4,
                            choices=(("pxjg", "培训机构"), ("gr", "个人"), ("gx", "高校")))
click_nums = models.IntegerField(default=0, verbose_name="点击数")
fav_nums = models.IntegerField(default=0, verbose_name="收藏数")
image = models.ImageField(upload_to="org/%Y/%m", verbose_name="logo", max_length=100)
address = models.CharField(max_length=150, verbose_name="机构地址")
students = models.IntegerField(default=0, verbose_name="学习人数")
course_nums = models.IntegerField(default=0, verbose_name="课程数")

is_auth = models.BooleanField(default=False, verbose_name="是否认证")
is_gold = models.BooleanField(default=False, verbose_name="是否金牌")

# 设置外键来方便后台添加城市
city = models.ForeignKey(City, on_delete=models.CASCADE, verbose_name="所在城市")

机构教师表

user = models.OneToOneField(UserProfile, on_delete=models.SET_NULL, null=True, blank=True,verbose_name="用户")
org = models.ForeignKey(CourseOrg, on_delete=models.CASCADE, verbose_name="所属机构")
name = models.CharField(max_length=50, verbose_name="教师名")
work_years = models.IntegerField(default=0, verbose_name="工作年限")
work_company = models.CharField(max_length=50, verbose_name="就职公司")
work_position = models.CharField(max_length=50, verbose_name="公司职位")
points = models.CharField(max_length=50, verbose_name="教学特点")
click_nums = models.IntegerField(default=0, verbose_name="点击数")
fav_nums = models.IntegerField(default=0, verbose_name="收藏数")
age = models.IntegerField(default=18, verbose_name="年龄")
image = models.ImageField(upload_to="teacher/%Y/%m", verbose_name="头像", max_length=100)

机构城市表

4.用户操作相关

用户收藏表

用户咨询表

课程评论表

# 外键
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name="用户")
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name="课程")
comments = models.CharField(max_length=200, verbose_name="评论内容")

用户消息表

用户课程表

轮播图

title = models.CharField(max_length=100, verbose_name="标题")
image = models.ImageField(upload_to="banner/%Y/%m", max_length=200, verbose_name="轮播图")
url = models.URLField(max_length=200, verbose_name="访问地址")
index = models.IntegerField(default=0, verbose_name="顺序")

功能模块

登录注册页面

注册

注册页面采用一号一用户模式,即一个手机号只能注册一个用户,注册时通过第三方平台云片网图片验证码进行注册,并在注册后自动跳转至登录界面

登录

登录页面提供两种登录模式:账号登录:即使用账号密码登录;动态登录:即使用手机号发送动态验证码加图片验证码进行登录。不登录不能访问个人中心相关页面

首页

首页:提供tab菜单切换,可切换至首页公开课授课教师授课机构页面,提供全局关键字搜索可搜索课程、公开课、授课教师;首页还提供课程跳转、授课机构跳转、个人中心跳转等。

轮播图

轮播图:可以理解为广告位,即管理员可在后台将相关广告图片、图片点击跳转链接添加,前端就会时时更新,并循环播放。

显示课程

课程显示栏:左侧为图片点击链接,可以跳转至所有课程,右侧有一个课程轮播图,在后台可以将相关课程设置于这个广告位上,其他的就在非广告位课程中选出六个课程并将其展示

显示课程机构

课程机构显示:左侧为图片点击链接,可以跳转至所有授课机构,右侧授课机构分三行显示,每行5个机构,在鼠标移动至相关课程时,会显示相关课程标签

公开课页面

公开课页面:点击tab栏的公开课可以跳转,在公开课页面有左右两栏:左侧所有课程,可按最新最热门参与人数进行排序,右侧是热门课程推荐

课程列表

课程列表页:每个课程以卡片的形式展示,显示课程封面、课程名称、课程时长、课程学习人数、课程机构、收藏人数;点击课程卡片即可跳转至相关课程详情页面,同时课程列表页还具有分页功能。

热门课程推荐

热门课程推荐:显示课程封面、课程名称、课程难度;课程推荐后台按点击数将其排序,前端只选择其中3门

课程排序

最热门按照点击数排序、参与人数按照课程学习人数排序

课程详情页

课程详情页分为4部分:

中间为课程基本信息:课程图片、课程名称、课程简介、课程时长、课程章节数量、课程类别、学习这门课程的用户,还有收藏、开始学习入口。

右侧第一部分显示课程出自于哪个机构,标签显示该机构的相关信息:机构图标、该用户是否收藏这个机构、机构拥有课程数量、机构拥有教师数量、机构所在地、机构是否认证。

右侧第二部分显示相关课程推荐:通过课程标签在数据库中搜索相关课程.

最后一部分:课程详情,通过富文本的形式,将后台编辑好的页面直接展示。

开始学习页面

当用户在课程详情页面点击开始学习后进入,并在后台的数据表中将该课程的学习人数加1;

页面上部分显示课程标题、课程难度、课程学习时长、课程学习人数;

右侧:资料下载,将课程后台上传的资源文件进行展示,并提供下载链接,点击即可下载资料;

讲师提示:显示该课程的讲师头像、名字、工作职位、还有课程须知、老师告诉你能学到什么;

右下角一栏:该课程的同学还学过什么课程

章节信息栏:显示课程公告、课程章节信息、每个章节名称以及每一小节的时长,用户点击每个小节可以跳到相关视频页面。

课程评论栏:用户可以在该页面提供相关评论,下方会实时更新用户评论,显示会显示用户头像、用户昵称、评论内容、评论时间。

授课教师页面

左侧以列表的形式显示教师信息,右侧显示教师排行榜

授课教师列表

教师列表页显示所有信息,可分页;

每一行显示一位教师,展示其头像、姓名、工作年限、工作职位、就职公司、年龄、教学特点等

点击该行还可以跳转至该教师详情详情页

教师详情页

教师详情页除了显示该教师基本信息,还显示该教师在平台的全部课程,显示该用户是否收藏该教师

右侧显示该教师所在的授课机构、用户是否收藏机构

下侧显示教师排行榜。

教师排行榜(按点击数取前三)

授课机构页面

用户可以根据机构类别所在地区进行赛选

用户可以向平台咨询相关课程

用户可以查看课程机构排名

授课机构列表

根据类别筛选

按学习人数排序

按课程数量排序

我要学习-咨询窗口

授课机构排名

个人中心

个人资料页面

修改头像

修改密码

我的课程

我的收藏

课程机构

显示相关课程机构信息,提供删除功能

授课教师

显示相关教师信息,提供删除功能

公开课程

显示相关课程信息,提供删除功能

我的消息

后台管理系统

左侧为各个表的选项栏

修改用户

增加、修改课程信息

结语

这只是简单的记录,后期有时间会更新具体实现相关的文章,尽请期待!