博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐进主页热门专栏推荐订阅⭐ 订阅收藏起来,防止下次找不到
🔎千套Java / PHP / nod.js / asp.net/ Python等项目实战更新中~
🔎百套小程序APP项目实战更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,帮你完成文档⚠️文末联系方式获取完整资料⚠️
第4章 系统设计
用流程图和图片的方法直观的展示出系统的整体结构和流程的设计思路,并详细阐述出系统功能模块。数据库的构造是使用E-R图画出各个实体之间的关系,并确定各个数据表之间的关系。
4.1 系统功能模块设计
4.1.1 登录模块设计
住院管理系统根据不同的权限可划分为不同的角色,分别是管理员、用户、医生和财务。该系统已存在的用户,在登录系统时需要填写相应的账户信息,登录时应注意输入的账户密码,角色也要在登录时进行选择,登陆成功后会根据不同角色进入相对应的页面。
页面主要包含用户名和密码,都是必填项。如果某项为空并点击登录按钮,会提示请输入为空的项[13]。系统主要分为四个角色进行登录,通过不要通的角色选择输入不同的账号密码,输入正确则登陆成功,如果登录的用户名和角色与数据库内的数据不匹配则报错。
这个模块处理用户的登录请求,请求后会调用特定的方法,通过处理登录信息来实现登录业务。系统会将获取到的请求下发到逻辑层,逻辑层将数据封装成相应对象,然后调用响应层获取结果并将信息返回给页面[14]。
管理员是用户管理模块中权限最高的,管理员可以对用户信息进行操作、可以随意的添加用户信息、可以及时的更新用户信息、也可以直接新增用户和删除用户。
用户功能模块由个人中心、入院登记管理、预交金额管理、每日清单管理、出院手续管理、出院结算管理等功能组成。能对自己的个人信息和密码进行修改,修改前需要先成功登录本系统。
医生功能模块由个人中心、药品信息管理、检查项目管理、检验项目管理、床位信息管理、入院登记管理、每日清单管理、出院手续管理等功能组成。能对自己的个人信息和密码进行修改,修改前需要先成功登录本系统。
财务功能模块由个人中心、入院登记管理、预交金额管理、每日清单管理、出院手续管理、出院结算管理等功能组成。能对自己的个人信息和密码进行修改,修改前需要先成功登录本系统。
4.2 系统总体设计
能够登录本系统的一共有四种角色,分别是管理员、用户、医生和财务。登录系统后,不同的角色可以对系统进行不同的操作,管理员拥有最大的权限。系统总体结构如图4-1所示。
图4-1系统总体结构图
4.3 数据库设计
该系统使用免费开源的MySQL数据库,这是一个功能齐全的关系数据库管理系统。系统使用Navicat管理数据库。系统数据库统一使用UTF-8,避免了中文的乱码问题。MYSQL数据库一直以来都是被广泛应用的存在,它能为系统带来简洁的SQL书写以及良好的存储环境,它对分库分区有很大的帮助以减轻单表数据太多带来的压力。根据系统的实体,分析数据库之间的关系,总结出E-R图如所示:
床位信息实体属性图如下所示:
图4-2床位信息实体属性图
药品信息实体属性图如下所示:
图4-3药品信息实体属性图
检查项目实体属性图如下所示:
图4-4检查项目实体属性图
检验项目实体属性图如下所示:
图4-5检验项目实体属性图
住院的管理中的数据由多个表组成,每个表都有对应的字段,操作该系统时,使用到的功能需要进行数据存储,这时数据将会在表中相应的字段里更新内容,并进行保存。该管理系统中共包含的表具体如下:
表名4-1:每日清单
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shenfenzheng | varchar | 200 | 身份证 | ||
shouji | varchar | 200 | |||
xingbie | varchar | 200 | 性别 | ||
nianling | varchar | 200 | |||
shebaoka | varchar | 200 | |||
zhuyuanbianhao | varchar | 200 | 住院编号 | ||
bingfanghao | varchar | 200 | 病房号 | ||
chuangweihao | varchar | 200 | |||
yishengzhanghao | varchar | 200 | |||
yishengxingming | varchar | 200 | 医生姓名 | ||
zhibanhushi | varchar | 200 | |||
shiyongyaopin | varchar | 200 | |||
yiliaoxiangmu | varchar | 200 | |||
jianchabaogao | varchar | 200 | |||
baogaoriqi | date | ||||
meiriqingdan | varchar | 200 | |||
beizhu | varchar | 200 | |||
caiwuzhanghao | varchar | 200 | |||
caiwuxingming | varchar | 200 |
表名4-2:检验项目
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
xiangmubianhao | varchar | 200 | |||
xiangmumingcheng | varchar | 200 | 项目名称 | ||
xiangmuleixing | varchar | 200 | 项目类型 | ||
xiangmutupian | varchar | 200 | 项目图片 | ||
feiyong | int | 费用 | |||
zhuyishixiang | varchar | 200 | 注意事项 | ||
xiangmuxiangqing | longtext | 4294967295 | 项目详情 |
表名4-3:检查项目
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
xiangmubianhao | varchar | 200 | |||
xiangmumingcheng | varchar | 200 | 项目名称 | ||
xiangmuleixing | varchar | 200 | 项目类型 | ||
xiangmutupian | varchar | 200 | 项目图片 | ||
feiyong | int | 费用 | |||
zhuyishixiang | varchar | 200 | 注意事项 | ||
xiangmuxiangqing | longtext | 4294967295 | 项目详情 |
表名4-4:配置文件
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
name | varchar | 100 | 配置参数名称 | ||
value | varchar | 100 | 配置参数值 |
表名4-5:出院手续
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhuyuanbianhao | varchar | 200 | 住院编号 | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shenfenzheng | varchar | 200 | 身份证 | ||
shouji | varchar | 200 | |||
xingbie | varchar | 200 | 性别 | ||
nianling | varchar | 200 | |||
shebaoka | varchar | 200 | |||
bingfanghao | varchar | 200 | 病房号 | ||
chuangweihao | varchar | 200 | |||
yishengzhanghao | varchar | 200 | |||
yishengxingming | varchar | 200 | 医生姓名 | ||
chuyuanshijian | date | 出院时间 | |||
chuyuanyuanyin | longtext | 4294967295 | 出院原因 | ||
beizhu | varchar | 200 | |||
yizhu | varchar | 200 | |||
chuyuanyaopin | longtext | 4294967295 | |||
fuyongshuoming | longtext | 4294967295 |
表名4-6:用户
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhanghao | varchar | 200 | 账号 | ||
mima | varchar | 200 | 密码 | ||
xingming | varchar | 200 | 姓名 | ||
nianling | int | 年龄 | |||
xingbie | varchar | 200 | 性别 | ||
shouji | varchar | 200 | 手机 | ||
touxiang | varchar | 200 | 头像 | ||
shenfenzheng | varchar | 200 | |||
shebaoka | int |
表名4-7:出院结算
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shouji | varchar | 200 | |||
nianling | varchar | 200 | |||
shenfenzheng | varchar | 200 | |||
shebaoka | varchar | 200 | |||
zhuyuanbianhao | varchar | 200 | 住院编号 | ||
bingfanghao | varchar | 200 | |||
chuangweihao | varchar | 200 | 床位号 | ||
jianchafeiyong | float | 检查费用 | |||
yaopinfeiyong | float | 药品费用 | |||
zhuyuanfeiyong | float | 住院费用 | |||
zongji | int | 总计 | |||
chuyuanriqi | date | 出院日期 | |||
caiwuzhanghao | varchar | 200 | 财务账号 | ||
caiwuxingming | varchar | 200 | 财务姓名 | ||
qingdan | varchar | 200 | |||
ispay | varchar | 200 | 是否支付 | 未支付 |
表名4-8:医生
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yishengzhanghao | varchar | 200 | 医生账号 | ||
mima | varchar | 200 | 密码 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
nianling | int | 年龄 | |||
zhicheng | varchar | 200 | 职称 | ||
xingbie | varchar | 200 | 性别 | ||
lianxidianhua | varchar | 200 | 联系电话 | ||
touxiang | varchar | 200 | 头像 |
表名4-9:预交金额
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shouji | varchar | 200 | |||
nianling | varchar | 200 | |||
shenfenzheng | varchar | 200 | |||
shebaoka | varchar | 200 | |||
zhuyuanbianhao | varchar | 200 | |||
bingfanghao | varchar | 200 | |||
chuangweihao | varchar | 200 | |||
yujiaojine | float | 预交金额 | |||
qingdan | varchar | 200 | |||
jineshuoming | longtext | 4294967295 | 金额说明 | ||
tongzhishijian | datetime | 通知时间 | |||
caiwuzhanghao | varchar | 200 | |||
caiwuxingming | varchar | 200 | |||
ispay | varchar | 200 | 是否支付 | 未支付 |
表名4-10:床位信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
bingfanghao | varchar | 200 | 病房号 | ||
chuangweihao | varchar | 200 | 床位号 | ||
bingfangleixing | varchar | 200 | |||
louceng | varchar | 200 | 楼层 | ||
zhuangtai | varchar | 200 | 状态 | ||
feiyong | float | ||||
dengjiriqi | date | 登记日期 | |||
beizhu | varchar | 200 | 备注 | ||
weizhi | varchar | 200 |
表名4-11:药品信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yaopinbianhao | varchar | 200 | 药品编号 | ||
yaopinmingcheng | varchar | 200 | 药品名称 | ||
leixing | varchar | 200 | 类型 | ||
yaopinleibie | varchar | 200 | 药品类别 | ||
picihao | varchar | 200 | 批次号 | ||
shengchanriqi | date | 生产日期 | |||
youxiaoqizhi | date | 有效期至 | |||
shengchandanwei | varchar | 200 | 生产单位 | ||
shengchandizhi | varchar | 200 | 生产地址 | ||
yaopinjiage | float | ||||
yaopintupian | varchar | 200 | 药品图片 | ||
shiyongshuoming | longtext | 4294967295 | 使用说明 | ||
jinji | longtext | 4294967295 | 禁忌 | ||
yaopinshuoming | longtext | 4294967295 | 药品说明 |
表名4-12:财务
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
caiwuzhanghao | varchar | 200 | 财务账号 | ||
mima | varchar | 200 | 密码 | ||
caiwuxingming | varchar | 200 | 财务姓名 | ||
xingbie | varchar | 200 | 性别 | ||
shouji | varchar | 200 | 手机 | ||
shenfenzheng | varchar | 200 | 身份证 | ||
touxiang | varchar | 200 | 头像 |
表名4-13:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
表名4-14:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表名4-15:入院登记
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhuyuanbianhao | varchar | 200 | 住院编号 | ||
zhanghao | varchar | 200 | 账号 | ||
xingming | varchar | 200 | 姓名 | ||
shenfenzheng | varchar | 200 | 身份证 | ||
shouji | varchar | 200 | |||
xingbie | varchar | 200 | 性别 | ||
nianling | varchar | 200 | |||
shebaoka | varchar | 200 | |||
hesuandengji | varchar | 200 | |||
bingfanghao | varchar | 200 | 病房号 | ||
chuangweihao | varchar | 200 | |||
yishengzhanghao | varchar | 200 | |||
yishengxingming | varchar | 200 | 医生姓名 | ||
ruyuanshijian | date | 入院时间 | |||
shiyongyaopin | longtext | 4294967295 | |||
jianchaxiangmu | longtext | 4294967295 | |||
jianyanxiangmu | longtext | 4294967295 | |||
beizhu | varchar | 200 |
4.4 本章小结
对系统的结构和流程设计完成后使其有一个框架,再对主要功能模块进行设计,并对功能描述、输入项、输出项和实现方法进行了详细描述。绘制出系统的E-R图,可以更直观地表达实体之间的关系。通过表字段之间的关系对数据库进行设计。系统的详细设计完成后,为下一章的操作做了很好的铺垫。
第5章 系统实现
在住院管理系统的生命周期中,经过了系统分析、系统设计等阶段之后,便开始了系统实施阶段。系统的实现主要对管理员、用户、医生和财务功能的实现,通过实现的过程对代码和逻辑进行相应的修改和完善。该模块也是直接面对使用者的,不仅功能要齐全,而且要做到页面美观。
5.1系统登录注册实现
系统登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图5-1所示。
图5-1 系统登录界面
系统注册:在系统注册页面输入用户注册信息进行注册操作,系统注册页面如图5-2所示:
图5-2系统注册页面
5.2管理员模块实现
管理员进入主页面,主要功能包括对首页、个人中心、用户管理、医生管理、财务管理、药品信息管理、检查项目管理、检验项目管理、床位信息管理、入院登记管理、预交金额管理、每日清单管理、出院手续管理、出院结算管理等进行操作。管理员主页面如图5-3所示:
图5-3 管理员主界面
管理员点击用户管理。进入用户页面输入账号、姓名、社保卡可以查询,新增或删除用户详细信息,并进行查看详情,修改或删除操作。如图5-4所示:
图5-4用户管理界面
管理员点击医生管理。进入医生页面输入医生账号、医生姓名和选择职称可以查询,新增或删除医生详细信息,并进行查看详情,修改或删除操作。如图5-5所示:
图5-5医生管理界面
管理员点击财务管理。进入财务页面输入财务账号和财务姓名可以查询,新增或删除财务详细信息,并进行查看详情,修改或删除操作。如图5-6所示:
图5-6财务管理界面
管理员点击药品信息管理。进入药品信息页面输入药品名称、药品类型、批次号和选择类型可以查询,新增或删除药品详细信息,并进行查看详情,修改或删除操作。如图5-7所示:
图5-7药品信息管理界面
JAVA后端代码实现
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 / PHP / nod.js / asp.net/ Python等项目实战更新中~
🔎百套小程序APP项目实战更新中~👇下方有我的微信名片👇