博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1500+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍 翰文编程CSDN博客 翰文编程-CSDN博客
文末下方有源码获取地址
4.2 功能模块设计
对管理员具体功能的设计结果将以图4.1所示的管理员功能结构图来进行体现。管理员对于在线视频网站操作的功能包括上传视频,管理视频,查看视频留言,回复视频留言,管理视频收藏信息,管理公告,管理用户和轮播图信息等。
图4.1 管理员功能结构图
对用户具体功能的设计结果将以图4.2所示的用户功能结构图来进行体现。用户对于在线视频网站操作的功能包括在线观看视频,收藏喜欢的视频,发布关于视频的留言,查看已发布的视频留言的管理员回复信息,查看公告,查看网站介绍等。
图4.2 用户功能结构图
4.3 数据库设计
用户通过系统的功能操作来进行数据交互,包括数据的添加,数据的更新,数据的删除,数据的查询等基本功能操作,表面上虽然是操作系统界面提供的功能,但是实际上系统的这些数据是在数据库当中进行访问与操作的。目前市场上可供选择的存储数据的数据库有很多,除了简单版的Access之外,还有SQL Server,DB2,Informix,MySQL等关系型数据库可供选择,由于关系型数据库具有固定的表结构,以及对数据一致性要求比较强,所以相比没有固定表结构以及具有灵活的数据格式的非关系型数据库而言,在程序配套数据库的选择中,关系型数据库的使用率更高。本系统选择MySQL来存放数据,其相关理论以及技术在经过了很长时间的发展之后,变得非常成熟,各大网络平台都公开分享其开发源码,而且其对计算机的配置要求很低,不需要过多内存进行安装,很符合本系统对于数据库的选择要求。
4.3.1 数据库E-R图
本节需要对系统中存放在数据库中的数据进行充分分析,对数据的实体,实体特征,联系等进行确定,然后通过概念模型的表示方法即E-R图进行表达,在E-R图绘制工具中,选择椭圆,菱形框,矩形等形状表达实体属性,实体间联系,实体这些信息,使用实线段将这些形状进行连接即可。初步完成E-R图之后,需要进行检查,及时进行有误数据的更改,删除实体间存在的冗余联系,删除E-R图中冗余的数据,最终要展示一个内容准确的E-R图。
(1)管理员包括的属性有用户名,新增时间等。其属性图如下。
图4.4 管理员实体属性图
(2)视频包括的属性有视频照片,热度,视频名称等。其属性图如下。
图4.5 视频实体属性图
(3)视频留言包括的属性有留言内容,回复内容等。其属性图如下。
图4.6 视频留言实体属性图
(4)用户包括的属性有用户姓名,用户头像,用户手机号,性别等。其属性图如下。
图4.7 用户实体属性图
(5)设计的各实体间关系E-R图如下。
图4.8 实体间关系E-R图
4.3.2 数据库表结构
在指定的数据库里面对数据表进行创建命名,然后设计各个数据表的存储结构,需要对该数据库的操作非常熟悉,并且还需要学习并掌握一定的数据表设计方面的知识,比如数据命名,作为系统的开发人员,为了避免程序运行产生乱码现象以及为了确保系统的正常运行,在对数据表进行命名时,一般都是采用英文名称,同时在对数据表的字段进行编辑时,也是采用英文的方式进行,为了方便今后对数据表的设计内容进行更改或查看,对一些比较重要的字段都会进行中文备注,或者是使用中文进行字段描述。设计期间,也需要对各个字段选择合适的数据类型以及设置匹配的取值范围,当一张数据表设计完成之后,还要对该表的主键进行标注,就是为了确保该数据表的唯一性与独立性。
表4.1 公告信息表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
gonggao_name |
公告名称 |
varchar(200) |
是 |
gonggao_photo |
公告图片 |
varchar(200) |
是 |
gonggao_types |
公告类型 |
int(11) |
否 |
insert_time |
公告发布时间 |
timestamp |
是 |
gonggao_content |
公告详情 |
text |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4.2 视频表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
shipin_name |
视频名称 |
varchar(200) |
是 |
shipin_photo |
视频照片 |
varchar(200) |
是 |
shipin_video |
视频 |
varchar(200) |
是 |
shipin_types |
视频类型 |
int(11) |
是 |
shipin_clicknum |
热度 |
int(11) |
是 |
zan_number |
赞 |
int(11) |
是 |
cai_number |
踩 |
int(11) |
是 |
shipin_content |
视频介绍 |
text |
是 |
shangxia_types |
是否上架 |
int(11) |
是 |
shipin_delete |
逻辑删除 |
int(11) |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4.3 视频收藏表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
shipin_id |
视频 |
int(11) |
是 |
yonghu_id |
用户 |
int(11) |
是 |
shipin_collection_types |
类型 |
int(11) |
是 |
insert_time |
收藏时间 |
timestamp |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4.4 视频留言表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
shipin_id |
视频 |
int(11) |
是 |
yonghu_id |
用户 |
int(11) |
是 |
shipin_liuyan_text |
留言内容 |
text |
是 |
insert_time |
留言时间 |
timestamp |
是 |
reply_text |
回复内容 |
text |
是 |
update_time |
回复时间 |
timestamp |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4.5 管理员表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
bigint(20) |
否 |
username |
用户名 |
varchar(100) |
否 |
password |
密码 |
varchar(100) |
否 |
role |
角色 |
varchar(100) |
是 |
addtime |
新增时间 |
timestamp |
否 |
表4.6 用户表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
username |
账户 |
varchar(200) |
是 |
password |
密码 |
varchar(200) |
是 |
yonghu_name |
用户姓名 |
varchar(200) |
是 |
yonghu_phone |
用户手机号 |
varchar(200) |
是 |
yonghu_id_number |
用户身份证号 |
varchar(200) |
是 |
yonghu_photo |
用户头像 |
varchar(200) |
是 |
sex_types |
性别 |
int(11) |
是 |
yonghu_email |
电子邮箱 |
varchar(200) |
是 |
create_time |
创建时间 |
timestamp |
是 |
5 系统实现
下面主要是通过功能实现界面截图的形式,并且运用文字来描述功能实现界面的内容。
5.1 管理员功能实现
5.1.1 视频管理
该功能主要用于实现对视频基本信息的管理,视频管理界面的运行效果见图5.1。在此界面,管理员下架不受欢迎的视频,删除需要删除的视频信息,可以添加视频信息,视频信息包括视频照片,热度,视频名称等信息。
图5.1 视频管理界面
主要代码
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
params.put("shipinDeleteStart",1);params.put("shipinDeleteEnd",1);
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = shipinService.queryPage(params);
//字典表数据转换
List<ShipinView> list =(List<ShipinView>)page.getList();
for(ShipinView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ShipinEntity shipin = shipinService.selectById(id);
if(shipin !=null){
//entity转view
ShipinView view = new ShipinView();
BeanUtils.copyProperties( shipin , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ShipinEntity shipin, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,shipin:{}",this.getClass().getName(),shipin.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<ShipinEntity> queryWrapper = new EntityWrapper<ShipinEntity>()
.eq("shipin_name", shipin.getShipinName())
.eq("shipin_video", shipin.getShipinVideo())
.eq("shipin_types", shipin.getShipinTypes())
.eq("shipin_clicknum", shipin.getShipinClicknum())
.eq("zan_number", shipin.getZanNumber())
.eq("cai_number", shipin.getCaiNumber())
.eq("shangxia_types", shipin.getShangxiaTypes())
.eq("shipin_delete", shipin.getShipinDelete())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ShipinEntity shipinEntity = shipinService.selectOne(queryWrapper);
if(shipinEntity==null){
shipin.setShipinClicknum(1);
shipin.setShangxiaTypes(1);
shipin.setShipinDelete(1);
shipin.setCreateTime(new Date());
shipinService.insert(shipin);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody ShipinEntity shipin, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,shipin:{}",this.getClass().getName(),shipin.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<ShipinEntity> queryWrapper = new EntityWrapper<ShipinEntity>()
.notIn("id",shipin.getId())
.andNew()
.eq("shipin_name", shipin.getShipinName())
.eq("shipin_video", shipin.getShipinVideo())
.eq("shipin_types", shipin.getShipinTypes())
.eq("shipin_clicknum", shipin.getShipinClicknum())
.eq("zan_number", shipin.getZanNumber())
.eq("cai_number", shipin.getCaiNumber())
.eq("shangxia_types", shipin.getShangxiaTypes())
.eq("shipin_delete", shipin.getShipinDelete())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ShipinEntity shipinEntity = shipinService.selectOne(queryWrapper);
if("".equals(shipin.getShipinPhoto()) || "null".equals(shipin.getShipinPhoto())){
shipin.setShipinPhoto(null);
}
if("".equals(shipin.getShipinVideo()) || "null".equals(shipin.getShipinVideo())){
shipin.setShipinVideo(null);
}
if(shipinEntity==null){
shipinService.updateById(shipin);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
5.1.2 视频留言管理
该功能主要用于实现对视频留言基本信息的管理,视频留言管理界面的运行效果见图5.2。在此界面,管理员对用户发布的关于视频方面的留言进行查看之后,管理员再发布视频留言回复信息。
图5.2 视频留言管理界面
5.1.3 用户管理
该功能主要用于实现对用户信息的管理,用户管理界面的运行效果见图5.3。在此界面,管理员负责添加用户手机号,用户头像等用户信息,对指定用户的账号重置密码,删除需要删除的用户等。
图5.3 用户管理界面
5.1.4 公告信息管理
该功能主要用于实现对公告基本信息的管理,公告信息管理界面的运行效果见图5.4。在此界面,管理员对公告增删改查管理。
图5.4 公告信息管理界面
5.1.5 单页数据管理
该功能主要用于实现对单页数据的管理。单页数据管理界面的运行效果见图5.5。在此界面,管理员对网站介绍,联系我们等信息进行管理。
图5.5 单页数据管理界面
5.2 用户功能实现
5.2.1 视频信息
视频信息界面的运行效果见图5.6。在此界面,用户收藏喜欢的视频,对视频的相关介绍进行查看,包括热度,视频类型等信息,用户在视频观看区域可以播放视频,暂停播放视频,以及快进查看视频等,在视频信息界面的下方留言区域,用户也能发布关于视频的留言。
图5.6 视频信息界面
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者