博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1500+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍 翰文编程CSDN博客
文末下方有源码获取地址 翰文编程-CSDN博客
4.1系统的总体功能设计
系统的总体功能设计,是需求分析的下一个阶段,是系统实现的上一个阶段,它是系统详细功能设计的一个大方向,也就是说系统的各类子功能模块的设计,都是以总体功能设计为目标而进行的。通过对系统进行需求分析可知,可以大致了解系统具体所需要的相关功能。本系统主要的功能需求包括用户信息管理、仓库信息管理、材料信息管理等模块。本系统的总体功能设计图如图4-1所示。
图4-1系统总体功能设计图
4.2数据库设计
4.2.1概念设计
本系统使用轻量级的MySQL数据库,对系统相关的数据信息进行管理和维护[12]。数据库设计阶段主要可以被分为两个阶段,分别为概念设计和逻辑设计阶段。在整个的数据库设计的过程中,两个阶段起到作用是不同的,概念设计阶段是实现基础,逻辑设计阶段最终目标。概念设计阶段主要通过使用实体-联系图(E-R图)的方式,将现实世界中用户的相关需求抽象化为虚拟世界中的概念模型。本人通过设计E-R图,详细的对系统中的实体以及实体之间的联系进行了表达。各实体信息的E-R图如图4-2、图4-3、图4-4、图4-5、图4-6、图4-7所示,系统总体E-R图如图4-8所示。
图4-2管理员信息E-R图
图4-3用户信息E-R图

图4-4字典信息E-R图
图4-5仓库信息E-R图
图4-6材料信息E-R图
图4-7公告信息E-R图
图4-8系统总体E-R图
4.2.2逻辑设计
逻辑设计阶段主要的工作是将概念设计中的E-R图,转换成方便系统进行存储和管理的二维表格形式[13]。这一阶段也可以被称为数据库的详细设计,其直接关系到系统功能模块的正常运行、数据信息的正常更新等。在设计过程中,需要充分考虑数据库的规范性和合理性,使得能够满足系统的功能和性能需求。本系统相关的数据表格设计内容如下所示。
表4-1管理员信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
username |
String |
用户名 |
是 |
3 |
password |
String |
密码 |
是 |
4 |
role |
String |
角色 |
是 |
5 |
addtime |
Date |
新增时间 |
是 |
表4-2用户信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
username |
String |
账户 |
是 |
3 |
password |
String |
密码 |
是 |
4 |
yonghu_uuid_number |
String |
用户编号 |
是 |
5 |
yonghu_name |
String |
用户姓名 |
是 |
6 |
yonghu_phone |
String |
用户手机号 |
是 |
7 |
yonghu_id_number |
String |
用户身份证号 |
是 |
8 |
yonghu_photo |
String |
用户头像 |
是 |
9 |
age |
Integer |
年龄 |
是 |
10 |
sex_types |
Integer |
性别 |
是 |
11 |
xueli_types |
Integer |
学历 |
是 |
12 |
yonghu_xuexiao |
String |
毕业学校 |
是 |
13 |
yonghu_email |
String |
电子邮箱 |
是 |
14 |
create_time |
Date |
创建时间 |
是 |
表4-3字典信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
dic_code |
String |
字段 |
是 |
3 |
dic_name |
String |
字段名 |
是 |
4 |
code_index |
Integer |
编码 |
是 |
5 |
index_name |
String |
编码名字 |
是 |
6 |
super_id |
Integer |
父字段id |
是 |
7 |
beizhu |
String |
备注 |
是 |
8 |
create_time |
Date |
创建时间 |
是 |
表4-4仓库信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
yonghu_id |
Integer |
用户 |
是 |
3 |
cangku_uuid_number |
String |
仓库编号 |
是 |
4 |
cangku_name |
String |
仓库名称 |
是 |
5 |
cangku_photo |
String |
仓库照片 |
是 |
6 |
cangku_types |
Integer |
仓库类型 |
是 |
7 |
cangku_mianji |
BigDecimal |
仓库面积 |
是 |
8 |
cangku_content |
String |
仓库介绍 |
是 |
9 |
cangku_delete |
Integer |
逻辑删除 |
是 |
10 |
insert_time |
Date |
添加时间 |
是 |
11 |
create_time |
Date |
创建时间 |
是 |
表4-5材料信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
yonghu_id |
Integer |
用户 |
是 |
3 |
cangku_id |
Integer |
仓库 |
是 |
4 |
cailiao_uuid_number |
String |
材料编号 |
是 |
5 |
cailiao_name |
String |
材料名称 |
是 |
6 |
cailiao_photo |
String |
材料照片 |
是 |
7 |
cailiao_types |
Integer |
材料类型 |
是 |
8 |
cailiao_number |
Integer |
材料数量 |
是 |
9 |
cailiao_content |
String |
材料介绍 |
是 |
10 |
cailiao_delete |
Integer |
逻辑删除 |
是 |
11 |
insert_time |
Date |
添加时间 |
是 |
12 |
update_time |
Date |
最后更新时间 |
是 |
13 |
create_time |
Date |
创建时间 |
是 |
表4-6公告信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
id |
Int |
编号 |
否 |
2 |
gonggao_name |
String |
公告名称 |
是 |
3 |
gonggao_photo |
String |
公告图片 |
是 |
4 |
gonggao_types |
Integer |
公告类型 |
是 |
5 |
insert_time |
Date |
公告发布时间 |
是 |
6 |
gonggao_content |
String |
公告详情 |
是 |
7 |
create_time |
Date |
创建时间 |
是 |
5系统实现
5.1个人中心
通过设计的个人中心管理功能模块,管理用户可以对相关的个人信息进行管理,比如管理用户可以更新个人账号的密码信息,修改个人账号的用户名信息等,修改密码界面设计如图5-1所示,个人信息界面设计如图5-2所示。
图5-1修改密码界面
图5-2个人信息界面
5.2仓库管理
通过设计的仓库管理功能模块,管理用户可以对相关的仓库信息进行管理,比如管理用户可以查看仓库名称信息,删除已经失效的仓库信息记录等操作,仓库管理界面设计如图5-3所示。
图5-3仓库管理界面
5.3材料管理
通过设计的材料管理功能模块,管理用户可以对相关的材料信息进行管理,比如管理用户可以查看材料名称信息,删除已经失效的材料信息记录等操作,材料管理界面设计如图5-4所示。
图5-4材料管理界面
5.4基础数据管理
通过设计的基础数据管理功能模块,管理用户可以对相关的材料类型、仓库类型、公告类型、学历信息进行管理,比如管理用户可以查看材料类型、仓库类型、公告类型、学历的详情信息,删除失效的材料类型、仓库类型、公告类型、学历信息记录等,材料类型管理界面设计如图5-5所示,仓库类型管理界面设计如图5-6所示,公告类型管理界面设计如图5-7所示,学历管理界面设计如图5-8所示。
图5-5材料类型管理界面
图5-6仓库类型管理界面
图5-7公告类型管理界面
图5-8学历管理界面
5.5公告管理
通过设计的公告管理功能模块,管理用户可以对相关的公告信息进行管理,比如管理用户可以查看公告发布时间信息,删除已经失效的公告信息记录等操作,公告管理界面设计如图5-9所示。
图5-9公告管理界面
主要代码
/**
* 后端列表
*/
@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 = gonggaoService.queryPage(params);
//字典表数据转换
List<GonggaoView> list =(List<GonggaoView>)page.getList();
for(GonggaoView 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);
GonggaoEntity gonggao = gonggaoService.selectById(id);
if(gonggao !=null){
//entity转view
GonggaoView view = new GonggaoView();
BeanUtils.copyProperties( gonggao , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody GonggaoEntity gonggao, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,gonggao:{}",this.getClass().getName(),gonggao.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<GonggaoEntity> queryWrapper = new EntityWrapper<GonggaoEntity>()
.eq("gonggao_name", gonggao.getGonggaoName())
.eq("gonggao_types", gonggao.getGonggaoTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
GonggaoEntity gonggaoEntity = gonggaoService.selectOne(queryWrapper);
if(gonggaoEntity==null){
gonggao.setInsertTime(new Date());
gonggao.setCreateTime(new Date());
gonggaoService.insert(gonggao);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody GonggaoEntity gonggao, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,gonggao:{}",this.getClass().getName(),gonggao.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<GonggaoEntity> queryWrapper = new EntityWrapper<GonggaoEntity>()
.notIn("id",gonggao.getId())
.andNew()
.eq("gonggao_name", gonggao.getGonggaoName())
.eq("gonggao_types", gonggao.getGonggaoTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
GonggaoEntity gonggaoEntity = gonggaoService.selectOne(queryWrapper);
if("".equals(gonggao.getGonggaoPhoto()) || "null".equals(gonggao.getGonggaoPhoto())){
gonggao.setGonggaoPhoto(null);
}
if(gonggaoEntity==null){
gonggaoService.updateById(gonggao);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
gonggaoService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save( String fileName, HttpServletRequest request){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
List<GonggaoEntity> gonggaoList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
GonggaoEntity gonggaoEntity = new GonggaoEntity();
// gonggaoEntity.setGonggaoName(data.get(0)); //公告名称 要改的
// gonggaoEntity.setGonggaoPhoto("");//详情和图片
// gonggaoEntity.setGonggaoTypes(Integer.valueOf(data.get(0))); //公告类型 要改的
// gonggaoEntity.setInsertTime(date);//时间
// gonggaoEntity.setGonggaoContent("");//详情和图片
// gonggaoEntity.setCreateTime(date);//时间
gonggaoList.add(gonggaoEntity);
//把要查询是否重复的字段放入map中
}
//查询是否重复
gonggaoService.insertBatch(gonggaoList);
return R.ok();
}
}
}
}catch (Exception e){
e.printStackTrace();
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
5.6用户管理
通过设计的用户管理功能模块,管理用户可以管理相关的用户信息资料,比如进行查看用户姓名,修改用户联系方式,删除已经注销的用户信息记录等操作,用户管理界面设计如图5-10所示。
图5-10用户管理界面
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者