博主介绍:专注于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数据库设计
如果说设计系统的功能很重要,那么设计该系统的数据库将更重要,毕竟系统服务于用户,数据库服务于系统,用户访问系统,操作系统的所有数据都要依赖于数据库,而系统的数据几乎都是保存在数据库中的,所以,一个高质量的程序,必然拥有一个安全,快速响应,稳定可靠的数据库。本系统的MySQL数据库可以通过SQL语言来实现对系统数据的管理,包括在指定表中插入数据,在规定的表中更改数据,以及删除指定表中的部分数据等操作。一般来说,像MySQL这样的关系型数据库,对于结构化查询语言SQL都能很好的进行支持。在编程中,通过合理运用SQL语言便能操作数据库的各种数据,真是非常方便快捷!
4.3.1 数据库概念设计
本节内容主要是使用图形的方式来描述数据库中的实体,每个实体的相应属性,还有实体之间的相互联系,常用的Visio工具即可满足绘制E-R图的需求。E-R图是由矩形,椭圆,菱形等图形元素组成,矩形框中主要写实体的名称,椭圆框中主要是登记该实体的属性,而菱形框中主要是登记实体之间的联系名称,最后使用实心线段把这些图形元素进行连接,即可完成E-R图的绘制。当初步得到一个E-R图时,需要进行检查,使用分析的方式去修改,重构E-R图,以达到消除数据冗余,或者是消除实体间联系冗余的目的。从而保持数据库的完整性,以及降低数据库维护上面的难度。
(1)使用Visio这样的常用的实体属性图绘制工具来绘制用户实体属性图,绘制结果见图4-3。
图4-3 用户实体属性图
(2)使用Visio这样的常用的实体属性图绘制工具来绘制培训实体属性图,绘制结果见图4-4。
图4-4 培训实体属性图
(3)使用Visio这样的常用的实体属性图绘制工具来绘制管理员实体属性图,绘制结果见图4-5。
图4-5 管理员实体属性图
(4)使用Visio这样的常用的实体属性图绘制工具来绘制培训评价实体属性图,绘制结果见图4-6。
图4-6 培训评价实体属性图
(5)绘制的上述实体间存在的联系见图4-7。
图4-7 实体间关系E-R图
4.3.2 数据库物理设计
本系统数据在数据库中都是通过各种二维表进行记录保存的,在数据库中设计这样的二维表也是比较重要的内容,因为它影响着数据的存储效率。在设计二维表也就是关系模型之前,一些有关二维表方面的常用概念需要进行充分了解。
关系:一张具体的数据表即表示关系,关系的名称与数据表的名称保持一致;
元组:数据表中,每行显示的数据即代表元组;
属性:数据表中,每列表示的数据即代表属性;
关键字:数据表中,为了与其他数据表进行区分,则需要在每张表中进行主键的设置;
通过上节内容可以知晓数据库中的各个实体,并通过一定方式把这些实体表示的内容进行数据表的转换,通常来说,每个实体都会对应一张具体的数据表,在本系统指定的数据库中创建命名好的数据库,才可以对数据表进行创建与设计。高校智能培训管理系统数据表设计结果展示如下:
表4-1 用户表
字段 |
注释 |
类型 |
空 |
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) |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4-2 公告信息表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
news_name |
公告名称 |
varchar(200) |
是 |
news_photo |
公告图片 |
varchar(200) |
是 |
news_types |
公告类型 |
int(11) |
否 |
insert_time |
公告发布时间 |
timestamp |
是 |
news_content |
公告详情 |
text |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4-3 培训表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
peixun_uuid_number |
课程名称 |
varchar(200) |
是 |
kecheng_id |
课程 |
int(11) |
是 |
yonghu_id |
用户 |
int(11) |
是 |
peixun_on_time |
培训开始时间 |
timestamp |
是 |
peixun_down_time |
培训结束时间 |
timestamp |
是 |
peixun_types |
培训类型 |
int(11) |
是 |
cultivate_content |
培训内容 |
text |
是 |
peixun_fenshu |
成绩 |
decimal(10,4) |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4-4 培训评价表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
peixun_id |
培训 |
int(11) |
是 |
yonghu_id |
用户 |
int(11) |
是 |
peixun_commentback_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) |
否 |
kecheng_name |
课程名称 |
varchar(200) |
是 |
kecheng_types |
课程类型 |
int(11) |
是 |
kecheng_file |
课程文件 |
varchar(200) |
是 |
kecheng_content |
课程详情 |
text |
是 |
insert_time |
新增时间 |
timestamp |
是 |
create_time |
创建时间 |
timestamp |
是 |
第五章 系统实现
这里主要是对系统设计实现进行描述,通过系统的设计和数据库的设计,通过编码后变成了可以进行操作的界面,让一切想法变成了结果,通过文字和具体程序操作界面的截图之间的配合,可以把功能更直观的描述起来。
5.1管理员功能实现
5.1.1 课程管理
课程信息有课程文件,课程名称等,管理员进入如图5-1所示的课程管理界面之后,管理员点击信息显示栏中最右侧的详情,修改,删除按钮可依次完成课程信息的详情查看,修改,删除。
图5-1 课程管理界面
5.1.2 培训管理
培训信息有培训开始时间,课程名称,培训类型,培训结束时间等,管理员进入如图5-2所示的培训管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成培训信息的修改,删除。
图5-2 培训管理界面
5.1.3 培训评价管理
培训评价信息有评价内容,评价时间等,管理员进入如图5-3所示的培训评价管理界面之后,管理员点击信息显示栏中最右侧的回复,删除按钮可依次完成培训评价信息的回复,删除。
图5-3 培训评价管理界面
5.1.4 用户管理
用户信息有性别,姓名等信息,管理员进入如图5-4所示的用户管理界面之后,管理员点击信息显示栏中最右侧的修改,删除,密码重置按钮可依次完成用户信息的修改,删除,账号密码重置。
图5-4 用户管理界面
主要代码
/**
* 后端列表
*/
@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"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = kechengService.queryPage(params);
//字典表数据转换
List<KechengView> list =(List<KechengView>)page.getList();
for(KechengView 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);
KechengEntity kecheng = kechengService.selectById(id);
if(kecheng !=null){
//entity转view
KechengView view = new KechengView();
BeanUtils.copyProperties( kecheng , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody KechengEntity kecheng, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,kecheng:{}",this.getClass().getName(),kecheng.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<KechengEntity> queryWrapper = new EntityWrapper<KechengEntity>()
.eq("kecheng_name", kecheng.getKechengName())
.eq("kecheng_types", kecheng.getKechengTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
KechengEntity kechengEntity = kechengService.selectOne(queryWrapper);
if(kechengEntity==null){
kecheng.setInsertTime(new Date());
kecheng.setCreateTime(new Date());
kechengService.insert(kecheng);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody KechengEntity kecheng, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,kecheng:{}",this.getClass().getName(),kecheng.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<KechengEntity> queryWrapper = new EntityWrapper<KechengEntity>()
.notIn("id",kecheng.getId())
.andNew()
.eq("kecheng_name", kecheng.getKechengName())
.eq("kecheng_types", kecheng.getKechengTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
KechengEntity kechengEntity = kechengService.selectOne(queryWrapper);
if("".equals(kecheng.getKechengFile()) || "null".equals(kecheng.getKechengFile())){
kecheng.setKechengFile(null);
}
if(kechengEntity==null){
kechengService.updateById(kecheng);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
5.1.5 培训类型管理
培训类型有培训类型名称信息,管理员进入如图5-5所示的培训类型管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成培训类型信息的修改,删除。
图5-5 培训类型管理界面
5.2 用户功能实现
5.2.1 查看课程
用户进入如图5-6所示的查看课程界面之后,用户点击信息显示栏右侧的详情按钮即可查看课程详细内容,对于课程文件,用户能够下载。
图5-6 查看课程界面
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者