博主介绍:专注于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 数据库设计
毕业生学历证明系统运行中产生的数据需要按照提前设置的存储规则进行保存,设计出一个符合项目的最优数据存储格式,因为它能减少用户的等待时间,还可以对系统的请求在最短时间内进行响应。所以,对数据库设计时,需要对功能需求进行详细的拆分,以及对业务状态的细分,然后设计具体的存储规则,保证数据库能正常运作,缩短数据处理时间,并在一定程度上降低数据冗余,节省存储空间。
4.3.1 数据库概念设计
实体-联系图还有一个名称即E-R图,是Entity Relationship Diagram各英文单词首字母的缩写,它这种概念模型通常用于对现实世界进行描述。同时它还是一种能够直观表达数据中实体,联系,属性的有效手段。绘制E-R图能够选择的工具也有很多,但是Office Visio 这款软件在E-R图的绘制上一般都是作为首选工具,因为它是基于可视化处理,使用它创建E-R图非常简单。使用基本的E-R图构成元素,比如椭圆,菱形,矩形,还有实线段来表达对应的信息,椭圆代表属性,即实体的特征,矩形代表实体,即数据库中的一个具体数据表,菱形代表实体中相互关系,实线段主要是完成椭圆,矩形,菱形的连接。
(1)图4.4即为签约单位这个实体所拥有的属性值。
图4.4 签约单位实体属性图
(2)图4.5即为学历这个实体所拥有的属性值。
图4.5 学历实体属性图
(3)图4.6即为用户这个实体所拥有的属性值。
图4.6 用户实体属性图
- 图4.7即为管理员这个实体所拥有的属性值。
图4.7 管理员实体属性图
- 图4.8即为上面介绍的实体中存在的联系。
图4.8 实体间关系E-R图
4.3.2 数据库物理设计
本小节主要任务即是根据上述内容进行数据存储结构的设计,实体的属性就用来表示字段名称,不同的字段表示的数据类型以及取值都不相同,以及该表各个字段是否能够保持空等进行说明,设计完成一张数据表的结构之后,在保存时同样要命名,尽量选择英文名称进行命名并保存,还不容易导致系统出错。接下来就对设计的表进行简单说明。
表4.1 签约单位表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
yonghu_id |
用户 |
int(11) |
是 |
qianyuedanwei_uuid_number |
签约编号 |
varchar(200) |
是 |
qianyuedanwei_name |
单位名称 |
varchar(200) |
是 |
qianyuedanwei_address |
单位地址 |
varchar(200) |
是 |
qianyuedanwei_bumen_types |
部门 |
int(11) |
是 |
qianyuedanwei_zhiwei_types |
职位 |
int(11) |
是 |
qianyuedanwei_yuexin |
月薪 |
decimal(10,2) |
是 |
qianyuedanwei_file |
合同文件 |
varchar(200) |
是 |
qianyue_time |
签约时间 |
timestamp |
是 |
qianyue_kaishi_time |
合同开始时间 |
timestamp |
是 |
qianyue_jieshu_time |
合同结束时间 |
timestamp |
是 |
qianyuedanwei_content |
签约备注 |
text |
是 |
insert_time |
录入时间 |
timestamp |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4.2 管理员表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
bigint(20) |
否 |
username |
用户名 |
varchar(100) |
否 |
password |
密码 |
varchar(100) |
否 |
role |
角色 |
varchar(100) |
是 |
addtime |
新增时间 |
timestamp |
否 |
表4.3 学历表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
yonghu_id |
用户 |
int(11) |
是 |
zhuanjiedi_id |
转接地 |
int(11) |
是 |
xueli_uuid_number |
学历编号 |
varchar(200) |
是 |
zhengjian_photo |
证件照 |
varchar(200) |
是 |
xueli_name |
姓名 |
varchar(200) |
是 |
xueli_id_number |
身份证号 |
varchar(200) |
是 |
xueli_zhengshu_number |
证书编号 |
varchar(200) |
是 |
xueli_renzhengbianhao_number |
认证编号 |
varchar(200) |
是 |
xuelixingbie_types |
性别 |
int(11) |
是 |
xueli_chushengnianyue |
出生年月 |
varchar(200) |
是 |
xueli_guoji |
国籍 |
varchar(200) |
是 |
xueli_minzu |
民族 |
varchar(200) |
是 |
xuelixingzhi_types |
学历性质 |
int(11) |
是 |
xueli_xuezhi_types |
学制 |
int(11) |
是 |
xueli_xuexixingshi_types |
学习形式 |
int(11) |
是 |
xueli_biyeyuanxiao |
毕业院校 |
varchar(200) |
是 |
xueli_zhuanye_types |
专业 |
int(11) |
是 |
xueli_banji_types |
班级 |
int(11) |
是 |
xueli_ruxiaonianyue |
入校年月 |
varchar(200) |
是 |
xueli_biyenianyue |
毕业年月 |
varchar(200) |
是 |
xueli_chengfen_types |
成分 |
int(11) |
是 |
xueli_lianxifangshi_phone |
联系方式 |
varchar(200) |
是 |
xueli_yesno_types |
审核状态 |
int(11) |
是 |
xueli_yesno_text |
审核意见 |
text |
是 |
xueli_delete |
逻辑删除 |
int(11) |
是 |
insert_time |
录入时间 |
timestamp |
是 |
create_time |
创建时间 |
timestamp |
是 |
表4.4 用户表
字段 |
注释 |
类型 |
空 |
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 |
是 |
表4.5 转接地表
字段 |
注释 |
类型 |
空 |
id (主键) |
主键 |
int(11) |
否 |
zhuanjiedi_uuid_number |
转接地编号 |
varchar(200) |
是 |
zhuanjiedi_name |
转接地名称 |
varchar(200) |
是 |
zhuanjiedi_address |
转接地地址 |
varchar(200) |
是 |
zhuanjiedi_types |
转接地类型 |
int(11) |
是 |
zhuanjiedi_erji_types |
二级类型 |
int(11) |
是 |
zhuanjiedi_content |
转接地详情 |
text |
是 |
shangdian_shouyin_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 即为编码实现的转接地管理界面,管理员在转接地管理界面中新增转接地信息,转接地信息包括转接地地址,转接地类型,转接地名称,转接地编号,录入时间等信息,登记的转接地信息存在登记出错的情况也不用担心,可以使用修改功能及时更正信息,转接地信息失效之后,管理员可以使用删除功能来删除转接地信息。在转接地管理界面,管理员也能使用查询功能来查询转接地信息,查询前,选择转接地编号,转接地名称,转接地类型,二级类型这四种查询方式中的任意一种即可完成对转接地信息的查询。
主要代码
/**
* 后端列表
*/
@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 = zhuanjiediService.queryPage(params);
//字典表数据转换
List<ZhuanjiediView> list =(List<ZhuanjiediView>)page.getList();
for(ZhuanjiediView 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);
ZhuanjiediEntity zhuanjiedi = zhuanjiediService.selectById(id);
if(zhuanjiedi !=null){
//entity转view
ZhuanjiediView view = new ZhuanjiediView();
BeanUtils.copyProperties( zhuanjiedi , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ZhuanjiediEntity zhuanjiedi, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,zhuanjiedi:{}",this.getClass().getName(),zhuanjiedi.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<ZhuanjiediEntity> queryWrapper = new EntityWrapper<ZhuanjiediEntity>()
.eq("zhuanjiedi_uuid_number", zhuanjiedi.getZhuanjiediUuidNumber())
.eq("zhuanjiedi_name", zhuanjiedi.getZhuanjiediName())
.eq("zhuanjiedi_address", zhuanjiedi.getZhuanjiediAddress())
.eq("zhuanjiedi_types", zhuanjiedi.getZhuanjiediTypes())
.eq("zhuanjiedi_erji_types", zhuanjiedi.getZhuanjiediErjiTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ZhuanjiediEntity zhuanjiediEntity = zhuanjiediService.selectOne(queryWrapper);
if(zhuanjiediEntity==null){
zhuanjiedi.setInsertTime(new Date());
zhuanjiedi.setCreateTime(new Date());
zhuanjiediService.insert(zhuanjiedi);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody ZhuanjiediEntity zhuanjiedi, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,zhuanjiedi:{}",this.getClass().getName(),zhuanjiedi.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<ZhuanjiediEntity> queryWrapper = new EntityWrapper<ZhuanjiediEntity>()
.notIn("id",zhuanjiedi.getId())
.andNew()
.eq("zhuanjiedi_uuid_number", zhuanjiedi.getZhuanjiediUuidNumber())
.eq("zhuanjiedi_name", zhuanjiedi.getZhuanjiediName())
.eq("zhuanjiedi_address", zhuanjiedi.getZhuanjiediAddress())
.eq("zhuanjiedi_types", zhuanjiedi.getZhuanjiediTypes())
.eq("zhuanjiedi_erji_types", zhuanjiedi.getZhuanjiediErjiTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ZhuanjiediEntity zhuanjiediEntity = zhuanjiediService.selectOne(queryWrapper);
if(zhuanjiediEntity==null){
zhuanjiediService.updateById(zhuanjiedi);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
图5.4 转接地管理界面
5.1.5 学习形式管理
图5.5 即为编码实现的学习形式管理界面,管理员在学习形式管理界面中新增学习形式信息,学习形式信息包括学习形式编码,学习形式名称信息,管理员可以使用修改功能来实现对登记有误的学习形式信息的更改,使用删除功能来删除需要删除的学习形式信息,同时可以在查询框中编辑学习形式名称来实现对学习形式信息的查询。
图5.5 学习形式管理界面
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者