博主介绍
:????全网个人号和企业号
粉丝40W+
,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战????
⭐️
热门专栏
推荐订阅
⭐️
订阅收藏起来,防止下次找不到
????
千套JAVA实战项目持续更新中~
????
上百套小程序实战项目持续更新中~
????
上百套Python实战项目持续更新中
有需求的各位可以
先收藏起来
,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要
开题模板
的可以私信留言告诉我
❤️
文末获取源码联系
❤️
⚠️
一定要先收藏
⚠️
第
4
章
系统设计
一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专业。
4.1
设计原则
本系统在设计过程中需要依照一定的设计原则进行,目的就是为了让开发的系统具备高质量,齐全完备的功能,方便简单的操作,如此才可以最大限度的满足使用者的要求。系统设计原则除了基本的易操作原则外,还有安全性原则,准确性原则。
第一个设计原则:易操作原则,针对本系统设计的功能要完备齐全,编码时,设计的各个接口要具备友好性,使用者一旦使用本系统时,要能够轻松上手,操作本系统处理数据时,要具备便利性。此外,也需要设计一些必要提示,引导使用者操作系统。
第二个设计原则:安全性原则,本系统在登录模块要对各个访问者进行身份验证,系统会通过访问者输入的信息进行判断,使用提前编写的安全验证代码进行数据比对,引导匹配成功的访问者进入指定的操作界面。这样可以避免无关性访问者窃取系统的数据。
第三个设计原则:准确性原则,为了保证使用者登记的数据是正确的,需要提前设计数据纠错机制,让使用者可以通过系统的报错提示,仔细检查登记的错误信息,并及时纠正错误,填写规范正确的信息。比如设置密码时,要求密码的长度不能低于6个字符,且数据类型要求不能全部是数字等都能进行规范。
4.2
功能
结构设计
在前面分析的管理员功能的基础上,进行接下来的设计工作,最终展示设计的管理员结构图(见下图)。管理员增删改查辅导员
4.3
数据库设计
开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合,存储在一起的这些数据也是按照一定的组织方式进行的。目前,数据库能够服务于多种应用程序,则是源于它存储方式最佳,具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务,但它与程序之间也可以保持较高的独立性。总而言之,数据库经历了很长一段时间的发展,从最初的不为人知,到现在的人尽皆知,其相关技术也越发成熟,同时也拥有着坚实的理论基础。
(1)下图是论坛实体和其具备的属性。
论坛实体属性图
(2)下图是企业实体和其具备的属性。
企业实体属性图
(3)下图是用户实体和其具备的属性。
用户实体属性图
(4)下图是职位收藏实体和其具备的属性。
职位收藏实体属性图
(5)下图是职位留言实体和其具备的属性。
职位留言实体属性图
(6)下图是公告信息实体和其具备的属性。
公告信息实体属性图
(7)下图是字典表实体和其具备的属性。
字典表实体属性图
(8)下图是职位招聘实体和其具备的属性。
职位招聘实体属性图
(9)下图是辅导员实体和其具备的属性。
辅导员实体属性图
(10)下图是就业推荐实体和其具备的属性。
就业推荐实体属性图
4.3.2 数据库物理设计
本数据库是关系型数据库,因此对二维表的结构设计也比较关键。毕竟二维表格模型就是关系型数据库中的关系模型。而一些常用的关系模型中的概念也需要了解,才可以对关系模型进行设计。下面就简单介绍关系,元组,属性,域,关键字等常用概念的含义。
关系:关系就是数据库中的一张数据表,每张数据表都有命名,也就是每个关系也有名字,那就是数据表名;
元组:元组就是数据表中的一行记录;
属性:属性就是数据表中的字段,也就是数据表中的一列;
域:域就是对数据表中属性的取值进行限定;
关键字:关键字就是数据表中的主键;
在了解了表结构设计的常用概念后,接下来就需要使用前面绘制的E-R模型完成表结构的设计工作,并在数据库中创建数据表,并为各个数据表进行命名。以下就对设计的结果通过表格形式进行展示。
表4.1字典表表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
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.2论坛表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
forum_name
|
String
|
帖子标题
|
是
|
3
|
gongsi_id
|
Integer
|
企业
|
是
|
4
|
yonghu_id
|
Integer
|
用户
|
是
|
5
|
fudaoyuan_id
|
Integer
|
辅导员
|
是
|
6
|
users_id
|
Integer
|
管理员
|
是
|
7
|
forum_content
|
String
|
发布内容
|
是
|
8
|
super_ids
|
Integer
|
父id
|
是
|
9
|
forum_state_types
|
Integer
|
帖子状态
|
是
|
10
|
insert_time
|
Date
|
发帖时间
|
是
|
11
|
update_time
|
Date
|
修改时间
|
是
|
12
|
create_time
|
Date
|
创建时间
|
是
|
表4.3辅导员表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
fudaoyuan_name
|
String
|
辅导员姓名
|
是
|
3
|
fudaoyuan_photo
|
String
|
头像
|
是
|
4
|
fudaoyuan_phone
|
String
|
辅导员手机号
|
是
|
5
|
fudaoyuan_id_number
|
String
|
辅导员身份证号
|
是
|
6
|
fudaoyuan_email
|
String
|
邮箱
|
是
|
7
|
fudaoyuan_delete
|
Integer
|
假删
|
是
|
8
|
create_time
|
Date
|
创建时间
|
是
|
表4.4企业表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
gongsi_name
|
String
|
企业名称
|
是
|
3
|
gongsi_types
|
Integer
|
企业类型
|
是
|
4
|
gongsi_phone
|
String
|
联系方式
|
是
|
5
|
gongsi_email
|
String
|
邮箱
|
是
|
6
|
gongsi_photo
|
String
|
企业封面
|
是
|
7
|
gongsi_content
|
String
|
企业简介
|
是
|
8
|
gongsi_delete
|
Integer
|
逻辑删除
|
是
|
9
|
create_time
|
Date
|
创建时间
|
是
|
表4.5公告信息表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
news_name
|
String
|
公告信息标题
|
是
|
3
|
news_types
|
Integer
|
公告信息类型
|
是
|
4
|
news_photo
|
String
|
公告信息图片
|
是
|
5
|
insert_time
|
Date
|
公告信息时间
|
是
|
6
|
news_content
|
String
|
公告信息详情
|
是
|
7
|
news_delete
|
Integer
|
假删
|
是
|
8
|
create_time
|
Date
|
创建时间
|
是
|
表4.6就业推荐表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
yonghu_id
|
Integer
|
用户
|
是
|
3
|
zhaopin_id
|
Integer
|
招聘
|
是
|
4
|
fudaoyuan_id
|
Integer
|
辅导员
|
是
|
5
|
insert_time
|
Date
|
推荐时间
|
是
|
6
|
create_time
|
Date
|
创建时间
|
是
|
表4.7用户表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
yonghu_name
|
String
|
用户姓名
|
是
|
3
|
yonghu_photo
|
String
|
头像
|
是
|
4
|
yonghu_phone
|
String
|
用户手机号
|
是
|
5
|
yonghu_id_number
|
String
|
用户身份证号
|
是
|
6
|
yonghu_email
|
String
|
邮箱
|
是
|
7
|
yonghu_delete
|
Integer
|
假删
|
是
|
8
|
create_time
|
Date
|
创建时间
|
是
|
表4.8职位招聘表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
gongsi_id
|
Integer
|
企业
|
是
|
3
|
zhaopin_name
|
String
|
招聘信息名称
|
是
|
4
|
zhaopin_photo
|
String
|
招聘信息照片
|
是
|
5
|
zhaopin_daiyu
|
String
|
薪资待遇
|
是
|
6
|
zhaopin_address
|
String
|
上班地点
|
是
|
7
|
lianxiren_name
|
String
|
联系人
|
是
|
8
|
zhaopin_phone
|
String
|
招聘电话
|
是
|
9
|
zan_number
|
Integer
|
赞
|
是
|
10
|
cai_number
|
Integer
|
踩
|
是
|
11
|
zhaopin_types
|
Integer
|
招聘岗位
|
是
|
12
|
leixing_types
|
Integer
|
招聘类型
|
是
|
13
|
zhaopin_renshu_number
|
Integer
|
招聘人数
|
是
|
14
|
shangxia_types
|
Integer
|
是否上架
|
是
|
15
|
zhaopin_content
|
String
|
招聘信息详情
|
是
|
16
|
create_time
|
Date
|
创建时间
|
是
|
表4.9职位收藏表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
zhaopin_id
|
Integer
|
职位
|
是
|
3
|
yonghu_id
|
Integer
|
用户
|
是
|
4
|
zhaopin_collection_types
|
Integer
|
类型
|
是
|
5
|
insert_time
|
Date
|
收藏时间
|
是
|
6
|
create_time
|
Date
|
创建时间
|
是
|
表4.10职位留言表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
zhaopin_id
|
Integer
|
职位
|
是
|
3
|
yonghu_id
|
Integer
|
用户
|
是
|
4
|
zhaopin_liuyan_text
|
String
|
留言内容
|
是
|
5
|
reply_text
|
String
|
回复内容
|
是
|
6
|
insert_time
|
Date
|
留言时间
|
是
|
7
|
update_time
|
Date
|
回复时间
|
是
|
8
|
create_time
|
Date
|
创建时间
|
是
|
表4.11管理员表
序号
|
列名
|
数据类型
|
说明
|
允许空
|
1
|
Id
|
Int
|
id
|
否
|
2
|
username
|
String
|
采购员名
|
是
|
3
|
password
|
String
|
密码
|
是
|
4
|
role
|
String
|
角色
|
是
|
5
|
addtime
|
Date
|
新增时间
|
是
|
5.1学生信息管理
如图5.1显示的就是学生信息管理页面,此页面提供给管理员的功能有:学生信息的查询管理,可以删除学生信息、修改学生信息、新增学生信息,
还进行了对用户名称的模糊查询的条件
图5.1 学生信息管理页面
5.
2 辅导员管理
如图5.2显示的就是辅导员管理页面,此页面提供给管理员的功能有:查看已发布的辅导员数据,修改辅导员,辅导员作废,即可删除,还进行了对辅导员名称的模糊查询 辅导员信息的类型查询等等一些条件。
图5.2 辅导员管理页面
5.
3职位信息管理
如图5.3显示的就是职位信息管理页面,此页面提供给管理员的功能有:根据职位信息进行条件查询,还可以对职位信息进行新增、修改、查询操作等等。
图5.3 职位信息管理页面
代码实现
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
源码获取
大家
点赞、收藏、关注
,让更多需要的同学看到
不同开发语言专栏
推荐订阅
:
????
千套JAVA实战项目持续更新中~
????
上百套小程序实战项目持续更新中~
????
上百套Python实战项目持续更新中
????
下方有我的微信名片
????