博主介绍:全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到千套JAVA实战项目持续更新中~
上百套小程序实战项目持续更新中~
上百套Python实战项目持续更新中
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系❤️ ⚠️一定要先收藏⚠️
在系统设计过程中,也需要遵循相应的设计原则,这些设计原则可以帮助设计者在短时间内设计出符合设计规范的设计方案。设计原则主要有可靠性,安全性,可定制化,可扩展性,可维护性,可升级性以及客户体验等原则。下面就对这些原则进行简要阐述。
可靠性:一个软件是否可靠决定了其是否被用户使用,设计不可靠的软件,用户很容易就遗弃;
安全性:程序软件承担了信息的保存与管理等事务,安全性不足的软件会导致使用者承担巨大的损失;所以系统安全也是需要考虑进入的;
可定制化:市场环境从来都不是一直固定不变,面对客户群体的改变,以及使用环境的改变,市场需求的改变等因素,程序软件也要易于调整以适应各种变化;
可扩展性:程序软件在运行使用期间,也需要及时引进当下的新技术来进行系统优化,主要就是在系统功能层面,系统性能层面上进行相应的扩展,只有这样才能让系统在实际生活中继续占有市场;
可维护性:程序软件的维护需要一定量的资金,不管是排除现有程序错误,还是变更软件的现有需求,都需要在软件技术上投入一定资金,所以易于维护的软件程序就可以降低技术层面的资金消耗;
可升级性:程序软件的投入使用,会面临用户数量增多的情况,用户对软件的使用率也会提升,所以系统面临这种情况,仍然需要通过升级保持性能的合理,这样才能够适应市场;
客户体验:设计出来的程序软件在界面上不能够太复杂,要遵循界面设计的原理设计出简单,方便操作的功能操作界面,让用户易于接受软件,并乐于使用软件提供的功能。
在系统结构设计上,经综合考虑还是选择比js更加简洁的vue框架,现如今浏览器已经实现了普及,并在技术上逐渐完善和成熟,它在节约软件开发成本的基础上,还能实现原本用专业软件操作才能实现的强大功能。总之,小程序架构是当下全新的,认可度高的系统构造技术。系统结构设计图通过绘制,效果展示如下:
图4-1 系统结构设计图
在管理员功能模块确定下来的基础上,对管理员各个功能进行设计,确定管理员功能的详细模块。绘制的管理员功能结构见下图。
图4.3 管理员功能结构图
与功能结构设计一样,数据库设计也是程序开发不可避免的设计环节,数据库设计最主要的目的就是帮助运行程序存储相应的数据信息。数据库设计包含的内容有数据表结构的设计,也包含了数据库E-R图的设计。
在绘制E-R图之前,先要找出数据库的实体,明确各个实体具有的属性,比如用户信息这个实体,它具备的属性包括了用户的姓名属性,用户的密码属性,用户的创建时间属性等,所以明确了用户这个实体,以及用户实体具备的属性之后,就需要根据这些信息绘制用户实体对应的实体属性图了。绘制软件选用当下认可度高,使用范围广,操作便利的微软旗下的Visio工具。
在进行这部分设计之前,需要明白和掌握数据类型以及各个数据类型的长度范围等知识,因为在一张具体的数据表中,为了方便理解,这里就举个简单的例子。比如用户信息表,这个表格的字段就是用户这个实体具备的属性,这时就需要对字段进行数据类型,以及字段长度的设置,也要设置一个主键来作为用户信息表的唯一标识。这些都是数据库表结构设计需要完成的内容。根据社区医院管理系统的功能设计以及数据库设计要求,展示该系统的数据表结构。
表4.1病例表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
bingli_uuid_number |
String |
病例编号 |
是 |
3 |
bingren_id |
Integer |
病人 |
是 |
4 |
yisheng_id |
Integer |
医生 |
是 |
5 |
jiancha_time |
Date |
检查时间 |
是 |
6 |
bingrenzishu_content |
String |
病人自述 |
是 |
7 |
jianchajieguo_content |
String |
检查结果 |
是 |
8 |
yishengkaifang_content |
String |
医生开方 |
是 |
9 |
yishengjianyi_content |
String |
医生建议 |
是 |
10 |
huafeijine |
BigDecimal |
花费金额 |
是 |
11 |
xiacijiuzhen_time |
Date |
下次就诊时间 |
是 |
12 |
bingli_types |
Integer |
状态 |
是 |
13 |
insert_time |
Date |
录入时间 |
是 |
14 |
create_time |
Date |
创建时间 |
是 |
表4.2病人表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yonghu_id |
Integer |
用户 |
是 |
3 |
kanhuren_name |
String |
看护人姓名 |
是 |
4 |
kanhuren_phone |
String |
看护人联系方式 |
是 |
5 |
bingren_name |
String |
病人姓名 |
是 |
6 |
bingren_phone |
String |
病人手机号 |
是 |
7 |
bingren_id_number |
String |
病人身份证号 |
是 |
8 |
sex_types |
Integer |
性别 |
是 |
9 |
bingren_types |
Integer |
病人类型 |
是 |
10 |
age |
Integer |
年龄 |
是 |
11 |
bingren_photo |
String |
病人照片 |
是 |
12 |
bingren_content |
String |
病人描述 |
是 |
13 |
insert_time |
Date |
来访时间 |
是 |
14 |
create_time |
Date |
创建时间 |
是 |
表4.3字典表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
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.4医院资讯表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
gonggao_name |
String |
医院资讯名称 |
是 |
3 |
gonggao_photo |
String |
医院资讯图片 |
是 |
4 |
gonggao_types |
Integer |
医院资讯类型 |
是 |
5 |
insert_time |
Date |
医院资讯发布时间 |
是 |
6 |
gonggao_content |
String |
医院资讯详情 |
是 |
7 |
create_time |
Date |
创建时间 |
是 |
表4.5药品表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yaopin_name |
String |
药品名称 |
是 |
3 |
yaopin_uuid_number |
String |
药品编号 |
是 |
4 |
yaopin_photo |
String |
药品照片 |
是 |
5 |
shengchanchangjia |
String |
生产厂家 |
是 |
6 |
yaopin_types |
Integer |
药品类型 |
是 |
7 |
yaopin_kucun_number |
Integer |
药品库存 |
是 |
8 |
yaopin_jinjia_money |
BigDecimal |
药品进价 |
是 |
9 |
yaopin_new_money |
BigDecimal |
售价 |
是 |
10 |
yaopin_gongxiao_content |
String |
药品功效 |
是 |
11 |
yaopin_jinji_content |
String |
药品禁忌 |
是 |
12 |
yaopin_zhuyi_content |
String |
注意事项 |
是 |
13 |
yaopin_content |
String |
药品详情 |
是 |
14 |
insert_time |
Date |
录入时间 |
是 |
15 |
create_time |
Date |
创建时间 |
是 |
表4.6药品入库表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yaopin_id |
Integer |
药品 |
是 |
3 |
yaopinruku_uuid_number |
String |
药品入库编号 |
是 |
4 |
yaopinruku_number |
Integer |
入库数量 |
是 |
5 |
caozuo_time |
Date |
入库时间 |
是 |
6 |
yaopinruku_content |
String |
入库备注 |
是 |
7 |
insert_time |
Date |
录入时间 |
是 |
8 |
create_time |
Date |
创建时间 |
是 |
表4.7药品使用表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yaopin_id |
Integer |
药品 |
是 |
3 |
bingren_id |
Integer |
病人 |
是 |
4 |
yisheng_id |
Integer |
医生 |
是 |
5 |
yaopinshiyong_uuid_number |
String |
药品使用编号 |
是 |
6 |
yaopinshiyong_number |
Integer |
使用数量 |
是 |
7 |
caozuo_time |
Date |
使用时间 |
是 |
8 |
yaopinshiyong_content |
String |
使用备注 |
是 |
9 |
insert_time |
Date |
录入时间 |
是 |
10 |
create_time |
Date |
创建时间 |
是 |
表4.8医生表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yisheng_name |
String |
医生姓名 |
是 |
3 |
yisheng_phone |
String |
医生手机号 |
是 |
4 |
yisheng_id_number |
String |
医生身份证号 |
是 |
5 |
yisheng_photo |
String |
医生头像 |
是 |
6 |
zuozhen_shijian |
String |
坐诊时间 |
是 |
7 |
guahaojine |
BigDecimal |
挂号金额 |
是 |
8 |
guahaoshuliang |
Integer |
每天挂号数量 |
是 |
9 |
keshi_types |
Integer |
科室 |
是 |
10 |
zhiwei_types |
Integer |
职位 |
是 |
11 |
yisheng_email |
String |
医生邮箱 |
是 |
12 |
yisheng_content |
String |
医生介绍 |
是 |
13 |
create_time |
Date |
创建时间 |
是 |
表4.9医生咨询表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yonghu_id |
Integer |
提问人 |
是 |
3 |
yisheng_id |
Integer |
回答人 |
是 |
4 |
yisheng_chat_issue_text |
String |
问题 |
是 |
5 |
issue_time |
Date |
问题时间 |
是 |
6 |
yisheng_chat_reply_text |
String |
回复 |
是 |
7 |
reply_time |
Date |
回复时间 |
是 |
8 |
zhuangtai_types |
Integer |
状态 |
是 |
9 |
yisheng_chat_types |
Integer |
数据类型 |
是 |
10 |
insert_time |
Date |
提问时间 |
是 |
11 |
create_time |
Date |
创建时间 |
是 |
表4.10医生挂号表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yisheng_guahao_uuid_number |
String |
挂号编号 |
是 |
3 |
bingren_id |
Integer |
病人 |
是 |
4 |
yisheng_id |
Integer |
医生 |
是 |
5 |
huafeijine |
BigDecimal |
花费金额 |
是 |
6 |
yisheng_guahao_time |
Date |
挂号日期 |
是 |
7 |
yisheng_guahao_types |
Integer |
挂号状态 |
是 |
8 |
insert_time |
Date |
申请挂号时间 |
是 |
9 |
create_time |
Date |
创建时间 |
是 |
表4.11用户表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yonghu_name |
String |
用户姓名 |
是 |
3 |
yonghu_phone |
String |
用户手机号 |
是 |
4 |
yonghu_id_number |
String |
用户身份证号 |
是 |
5 |
yonghu_photo |
String |
用户头像 |
是 |
6 |
yonghu_email |
String |
用户邮箱 |
是 |
7 |
new_money |
BigDecimal |
余额 |
是 |
8 |
create_time |
Date |
创建时间 |
是 |
表4.12管理员表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
username |
String |
学生名 |
是 |
3 |
password |
String |
密码 |
是 |
4 |
role |
String |
角色 |
是 |
5 |
addtime |
Date |
新增时间 |
是 |
系统实现这个章节的内容主要还是展示系统的功能界面设计效果,在实现系统基本功能,比如修改,比如添加,比如删除等管理功能的同时,也显示出系统各个功能的界面实现效果,该部分内容一方面与前面提到的系统分析,系统设计的内容相呼应,另一方面也是一个实际成果的展示。
此页面让管理员管理病例的数据,病例管理页面见下图。此页面主要实现病例的增加、修改、删除、查看的功能。
图5-1 病例管理页面
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().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().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().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 params,UserEntity user){
EntityWrapper ew = new EntityWrapper();
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 ew = new EntityWrapper();
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().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().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实战项目持续更新中
下方有我的微信名片