博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文末下方有源码获取地址
4.2 系统结构设计
在结构设计过程中,首先对系统进行需求分析,然后进行系统初步设计,将系统功能模块细化,具体分析每一个功能模块具体应该首先哪些功能,最后将各个模块进行整合,实现系统结构的最终设计。本基于Spring Boot的中小型医院网站主要实现了用户功能模块、医师功能模块和管理员功能模块三大部分,系统的功能结构设计如图4-2所示。
图4-2系统结构图
4.3 数据库设计
4.3.1数据库实体(E-R图)
E-R图是一种描述显示数据类型间的关系的数据描述方法,E-R图可以完整地映射出现实模型的关系。E-R图中的三个最为重要的元素就是实体、属性、关系。E-R图即由这三点组成。
实体:E-R图中数据的实体,用矩形表示上面为实体名,下面为实体属性,实体包含主外键等关系。
属性:E-R图中的属性,是指实体的属性,实体由多条属性所构成,属性拥有自己的数据类型,数据大小。属性的优劣决定了E-R图中实体的健全性、完整性。
关系:E-R图中的关系是指实体之间的关系,用菱形来表示实体间的关系,这些菱形关系的联系上有着一对多或多对多的数据联系,这些构成了E-R图的关系,E-R图的关系紧密连接了实体,使实体间的关联性更加的显著、易懂。本基于Spring Boot的中小型医院网站的E-R图如下所示:
4.3.2数据库表设计
本基于Spring Boot的中小型医院网站需要后台数据库,本系统采用MYSQL数据库作为数据存储,下面介绍数据库中的各个表的详细信息。
表4-1 jiaofeiqingdan缴费清单信息表
字段名称 | 字段意义 | 字段类型 | 字段长度 | 是否主键 | 能否为空 |
id | 编号 | bigint | 20 | 是 | 否 |
addtime | 创建时间 | timestamp | 否 | 是 | |
feiyongbianhao | 费用编号 | varchar | 200 | 否 | 是 |
feiyongxiangmu | 费用项目 | longtext | 否 | 是 | |
feiyongjiage | 费用价格 | int | 11 | 否 | 是 |
feiyongxiangqing | 费用详情 | longtext | 否 | 是 | |
jianmianjine | 减免金额 | int | 11 | 否 | 是 |
jianmianyuanyin | 减免原因 | longtext | 否 | 是 | |
`shifujine | 实付金额 | varchar | 200 | 否 | 是 |
zhanghao | 账号 | varchar | 200 | 否 | 是 |
xingming | 姓名 | varchar | 200 | 否 | 是 |
sfsh | 是否审核 | varchar | 200 | 否 | 是 |
`shhf` | 审核回复 | longtext | 否 | 是 | |
`ispay | 是否支付 | varchar | 200 | 否 | 是 |
表4-2 yuyueguahao预约挂号信息表
字段名称 | 字段意义 | 字段类型 | 字段长度 | 是否主键 | 能否为空 |
id | 编号 | bigint | 20 | 是 | 否 |
addtime | 创建时间 | timestamp | 否 | 是 | |
keshibianhao | 科室编号 | varchar | 200 | 否 | 是 |
keshileixing | 科室类型 | varchar | 200 | 否 | 是 |
yishixingming | 医师姓名 | varchar | 200 | 否 | 是 |
`guahaofei | 挂号费 | varchar | 200 | 否 | 是 |
guahaoshijian | 挂号时间 | datetime | 否 | 是 | |
beizhu` | 备注 | longtext | 否 | 是 | |
shouji | 手机 | varchar | 200 | 否 | 是 |
zhanghao | 账号 | varchar | 200 | 否 | 是 |
sfsh | 是否审核 | varchar | 200 | 否 | 是 |
`shhf` | 审核回复 | longtext | 否 | 是 | |
`ispay | 是否支付 | varchar | 200 | 否 | 是 |
表4-3 yishi医师信息表
字段名称 | 字段意义 | 字段类型 | 字段长度 | 是否主键 | 能否为空 |
id | 编号 | bigint | 20 | 是 | 否 |
addtime | 创建时间 | timestamp | 否 | 是 | |
yishigonghao | 医师工号 | varchar | 200 | 否 | 是 |
mima | 密码 | varchar | 200 | 否 | 是 |
`yishixingming` | 医师姓名 | varchar | 200 | 否 | 是 |
`xingbie | 性别 | varchar | 200 | 否 | 是 |
zhicheng` | 职称 | varchar | 200 | 否 | 是 |
shouji | 手机 | varchar | 200 | 否 | 是 |
`youxiang | 邮箱 | varchar | 200 | 否 | 是 |
shenfenzheng | 身份证 | varchar | 200 | 否 | 是 |
tupian | 图片 | varchar | 200 | 否 | 是 |
表4-4 users`管理员信息表
字段名称 | 字段意义 | 字段类型 | 字段长度 | 是否主键 | 能否为空 |
id | 编号 | bigint | 20 | 是 | 否 |
username` | 用户名 | varchar | 100 | 否 | 是 |
password | 密码 | varchar | 100 | 否 | 是 |
role` | 角色 | varchar | 100 | 否 | 是 |
addtime | 新增时间 | timestamp | 否 | 是 |
表4-5 yonghu用户信息表
字段名称 | 字段意义 | 字段类型 | 字段长度 | 是否主键 | 能否为空 |
id | 编号 | bigint | 20 | 是 | 否 |
addtime | 创建时间 | timestamp | 否 | 是 | |
zhanghao | 账号 | varchar | 200 | 否 | 是 |
mima | 密码 | varchar | 200 | 否 | 是 |
xingming | 姓名 | varchar | 200 | 否 | 是 |
xingbie | 性别 | varchar | 200 | 否 | 是 |
shouji` | 手机 | varchar | 200 | 否 | 是 |
youxiang | 邮箱 | varchar | 200 | 否 | 是 |
shenfenzheng | 身份证 | varchar | 200 | 否 | 是 |
字段名称 | 字段意义 | 字段类型 | 字段长度 | 是否主键 | 能否为空 |
id | 编号 | bigint | 20 | 是 | 否 |
addtime | 创建时间 | timestamp | 否 | 是 | |
keshibianhao | 科室编号 | varchar | 200 | 否 | 是 |
keshileixing | 科室类型 | varchar | 200 | 否 | 是 |
yishixingming | 医师姓名 | longtext | 否 | 是 | |
zhicheng | 职称 | varchar | 200 | 否 | 是 |
zhuanyetezhang | 专业特长 | longtext | 否 | 是 | |
guahaofei | 挂号费 | int | 11 | 否 | 是 |
xiangqing | 详情 | longtext | 否 | 是 | |
zhibanbiao | 值班表 | longtext | 否 | 是 | |
tupian | 图片 | varchar | 200 | 否 | 是 |
5 系统实现
5.1 用户功能模块的实现
用户进入本系统可查看系统信息,包括首页、门诊信息、药库信息以及系统公告信息等,系统前台主界面展示如图5-1所示。
图5-1系统前台主界面图
5.1.1用户登录界面
用户要想实现预约挂号功能,必须登录系统,在登录界面输入正确的登录账号和密码点击登录按钮进行登录,系统会对用户输入的登录信息进行验证,信息正确则登录成功,反之登录失败,用户登录界面展示如图5-2所示。
图5-2 用户登录界面图
5.1.2用户注册界面
没有账号的用户可进行注册操作,用户注册界面展示如图5-3所示。
图5-3 用户注册界面图
5.1.3门诊信息详情界面
用户可选择门诊查看详情信息,登录后可进行预约挂号操作,门诊信息详情界面展示如图5-4所示。
图5-4 门诊信息详情界面图
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.MenzhenxinxiEntity;
import com.entity.view.MenzhenxinxiView;
import com.service.MenzhenxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 门诊信息
* 后端接口
* @author
* @email
* @date 2021-04-19 18:06:31
*/
@RestController
@RequestMapping("/menzhenxinxi")
public class MenzhenxinxiController {
@Autowired
private MenzhenxinxiService menzhenxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,MenzhenxinxiEntity menzhenxinxi,
HttpServletRequest request){
EntityWrapper<MenzhenxinxiEntity> ew = new EntityWrapper<MenzhenxinxiEntity>();
PageUtils page = menzhenxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, menzhenxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,MenzhenxinxiEntity menzhenxinxi, HttpServletRequest request){
EntityWrapper<MenzhenxinxiEntity> ew = new EntityWrapper<MenzhenxinxiEntity>();
PageUtils page = menzhenxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, menzhenxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( MenzhenxinxiEntity menzhenxinxi){
EntityWrapper<MenzhenxinxiEntity> ew = new EntityWrapper<MenzhenxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( menzhenxinxi, "menzhenxinxi"));
return R.ok().put("data", menzhenxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(MenzhenxinxiEntity menzhenxinxi){
EntityWrapper< MenzhenxinxiEntity> ew = new EntityWrapper< MenzhenxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( menzhenxinxi, "menzhenxinxi"));
MenzhenxinxiView menzhenxinxiView = menzhenxinxiService.selectView(ew);
return R.ok("查询门诊信息成功").put("data", menzhenxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
MenzhenxinxiEntity menzhenxinxi = menzhenxinxiService.selectById(id);
return R.ok().put("data", menzhenxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
MenzhenxinxiEntity menzhenxinxi = menzhenxinxiService.selectById(id);
return R.ok().put("data", menzhenxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody MenzhenxinxiEntity menzhenxinxi, HttpServletRequest request){
menzhenxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(menzhenxinxi);
menzhenxinxiService.insert(menzhenxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody MenzhenxinxiEntity menzhenxinxi, HttpServletRequest request){
menzhenxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(menzhenxinxi);
menzhenxinxiService.insert(menzhenxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody MenzhenxinxiEntity menzhenxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(menzhenxinxi);
menzhenxinxiService.updateById(menzhenxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
menzhenxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<MenzhenxinxiEntity> wrapper = new EntityWrapper<MenzhenxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = menzhenxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
5.1.4预约挂号界面
用户在预约挂号时需要填写相关数据,预约挂号界面展示如图5-5所示。
图5-5 预约挂号界面图
大家点赞、收藏、关注、评论啦 其他的定制服务 商务合作 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者