基于SpringBoot+vue的无偿献血后台管理系统
基于SpringBoot+vue的无偿献血后台管理系统
✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取项目下载方式🍅
一、项目背景介绍:
第一:完善献血者管理,建立一个真正的“献血者信息管理系统”,既能为献血者提供便利的服务,又能为采供血机构和卫生行政部门提供一个献血招募决策依据。
第二:我国感染艾滋病、丙肝、乙肝等患者不断增多,其中输血感染已成为一个主要感染途径,如何从源头上堵住携带或感染艾滋病病毒、各种肝炎病毒者进行献血,确保用血者的安全已经变得刻不容缓。
第三:该系统运用计算机网络技术的发展,带来了新的设计思想、管理思想和系统实行的方式,它使血液管理系统能主动实现这些变化,确保采供血业务的正常开展。
本课题依此为出发点,以建立一个网站为基础,在基础上实现给医疗行业提供一个平台,无偿献血者管理服务系统就是为各地中心血站、卫生行政主管部门提供一个决策依据,帮助中心血站和卫生主管部门掌握献血者的情况[1],稳定和壮大无偿献血者队伍,保证有充足的血源,建立全面、快速、有效的血液预警机制。献血者信息系统建立能保障患者充足、安全输血,满足各医疗单位的需求和为献血者提供血液化验结果方面的查询等而搭建深层次的献血者人性化服务和管理平台,实现新形势、新阶段献血者服务管理工作方式的转变,为当前献血招募和管理的重要工作提供了坚实的基础。
二、项目技术简介:
- JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
- Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。 - Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
- SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
- Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
- Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
- Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。
三、系统功能模块介绍:
四、数据库设计:
1:‘管理员表’(admin)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
user_name | varchar | NULL | 用户名 |
pass_word | varchar | NULL | 密码 |
nick_name | varchar | NULL | 昵称 |
head_img | varchar | NULL | 头像 |
2:‘审核表’(audit)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
user_id | bigint | NULL | 用户ID |
organ_id | bigint | NULL | 器官ID |
remark | varchar | NULL | 备注 |
status | int | NULL | 申请状态[0:审核中,1:审核通过,2审核不通过,3:撤销申请] |
create_time | datetime | NULL | 创建时间 |
3:‘逝者信息表’(dead_info)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
user_id | bigint | NULL | 用户ID |
create_time | datetime | NULL | 创建时间 |
end_age | int | NULL | 享年岁数 |
info | varchar | NULL | 逝世原因 |
address | varchar | NULL | 家庭住址 |
home_name | varchar | NULL | 家庭联系人 |
home_tel | varchar | NULL | 家庭电话 |
4:‘器官类型表’(organ)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
organ_name | varchar | NULL | 器官名称 |
attention | text | NULL | 捐赠注意事项 |
5:‘用户表’(users)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
user_name | varchar | NULL | 用户名 |
pass_word | varchar | NULL | 密码 |
tel | varchar | NULL | 联系方式 |
header_img | varchar | NULL | 基本照片 |
name | varchar | NULL | 真实姓名 |
sex | int | NULL | 性别[0:未知,1:男,2:女] |
age | int | NULL | 年龄 |
create_time | datetime | NULL | 创建时间 |
五、功能模块:
-
管理员登录:当管理员在浏览器上输入项目访问地址进入时,会优先显示系统的登录页面,进入登录界面之后,管理员输入刚好的账号密码进行登录,当管理员选择退出时,可以直接关闭浏览器,也可通过管理员管理选择退出登录操作。
-
管理员信息页面:当系统管理员登录后,可以查看所有管理员列表,会对应显示每个管理员的基本信息
-
用户基本信息管理:当有新的献血者前来献血是,管理员需要在此页面登记献血者的基本信息情况,以便后面统计每一位献血者的总献血量。
-
献血者体检信息:每一位献血者在献血之前都需要进行身体检查,献血中心的护士人员都是为他们做免费的血液检查,以确保每一份鲜血都是健康可用的
-
体检结果管理:界面记录每一位献血者的体检结果信息,如果体检合格,医护人员才会为改用户进行血液抽取工作
-
献血记录:该界面用来记录每一位献血者总的献血次数和总的献血量,当献血量达到一定的标准,系统将会把改用户记录到表彰档案中。
-
稀有血型管理:该界面记录着每一位献血者的血液稀有程度,以便为每一位血液需求者提供精确的血型
六、代码示例:
管理员登录
@PostMapping("/login")public ReturnMsg login(String userName,String password){QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.lambda().eq(User::getUserName,userName);User one = userService.getOne(wrapper);if(ObjectUtil.isNotEmpty(one)){// 密码比较String dbPwd = one.getPassword();if(myCipherUtil.encry(password).equals(dbPwd)){return ReturnMsg.ok("用户登录成功").put("data",one);}}return ReturnMsg.error("用户名或密码错误");}
管理员信息页面
/*** 查询单个** @param user* @return*/@PostMapping("/findOne")public ReturnMsg findOne(@RequestBody User user) {return ReturnMsg.ok().put("item", baseService.getOne(new QueryWrapper<>(user)));}
用户基本信息管理
/*** 根据id删除信息** @param id* @return*/@GetMapping("/removeById")public ReturnMsg removeById(String id) {if (StrUtil.isNotEmpty(id)) {return baseService.removeById(id)? ReturnMsg.ok().put("msg", "信息删除成功"): ReturnMsg.error().put("msg", "信息删除失败");}return ReturnMsg.error().put("msg", "传入的信息有误,请联系管理员");}/*** 批量删除** @param ids 类型 List 集合* @return JsonReturn*/@GetMapping("/removeByIds")public ReturnMsg delete(List<String> ids) {return baseService.removeByIds(ids)? ReturnMsg.ok().put("msg", "信息删除成功"): ReturnMsg.error().put("msg", "信息删除失败");}
献血者体检信息
/*** 保存修改公用 POST请求方式* @param blood 修改或保存的对象* @return JsonReturn*/@PostMapping("/saveOrUpdate")public ReturnMsg saveOrUpdate(@RequestBody Blood blood) {QueryWrapper<Inspect> wrapper = new QueryWrapper<>();wrapper.lambda().eq(Inspect::getInspectName,blood.getBloodName());wrapper.lambda().eq(Inspect::getInspectResult,"合格");List<Inspect> list = inspectService.list(wrapper);if(list.size() > 0){Inspect inspect = list.get(0);blood.setBlood(inspect.getInspectBlood());return baseService.saveOrUpdate(blood)? ReturnMsg.ok().put("msg" , "提交信息成功"): ReturnMsg.error().put("msg" , "信息提交失败");}else{return ReturnMsg.error().put("msg" , "献血成员未在个人信息中找到或体检不合格");}}
体检结果管理
@Overridepublic void insertFill(MetaObject metaObject) {log.info("start insert fill ....");this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {log.info("start update fill ....");this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}
献血记录
/*** 查询所有* @param* @return*/@GetMapping("/findAll")public ReturnMsg findAll(){PageDto pageDto = new PageDto();List<Blood> list = baseService.list(null);pageDto.setList(list);pageDto.setTotalNum(list.size());return ReturnMsg.ok().put("items",pageDto);}
稀有血型管理
@Overridepublic PageDto getListPage(Map<String, Object> params) {List<RareDto> resultList = new ArrayList<>();QueryWrapper<Rare> wrapper =new QueryWrapper();Object rareName = params.get("rareName");if(ObjectUtil.isNotEmpty(rareName)){wrapper.lambda().like(Rare::getRareName,rareName);}Object rareBlood = params.get("rareBlood");if(ObjectUtil.isNotEmpty(rareBlood)){wrapper.lambda().like(Rare::getRareBlood,rareBlood);}List<Rare> list = baseMapper.selectList(wrapper);List<String> donateNameList = new ArrayList<>();for (Rare rare : list) {donateNameList.add(rare.getRareName());}if(donateNameList.size()<=0){return MyPageUtil.toPage(resultList,params);}Map<String,Donate> donateMap = donateService.listByDonateNames(donateNameList);for (Rare rare : list) {RareDto rareDto = new RareDto();rareDto.setRareId(rare.getId());rareDto.setRareName(rare.getRareName());rareDto.setRareBlood(rare.getRareBlood());rareDto.setCreateTime(rare.getCreateTime());rareDto.setUpdateTime(rare.getUpdateTime());Donate donate = donateMap.get(rare.getRareName());rareDto.setRareAddress(donate.getDonateAddress());rareDto.setRareId(donate.getDonateId());rareDto.setRarePhone(donate.getDonatePhone());resultList.add(rareDto);}return MyPageUtil.toPage(resultList,params);}
七、论文参考:
论文参考···
八、项目总结:
这次设计开始是根据需求做一个大致的系统业务流程图,通过参考全国血液中心等平台的业务模式,再结合系统本身计划服务的市场范围,设计出属于自己的,适用于各大医院无偿献血者信息管理平台的业务模式。再是根据系统的业务流程设计数据库,总共设计了七张表用来存放连接系统所有的数据。
数据库设计完善之后再进行页面的设计搭建,用h5+css+js基本技术搭配Element-UI+Vue等前端框架对界面进行样式统一以及数据双向绑定渲染。基础界面搭建好之后,采用SSM+SpringBoot+Mybatis-plus搭建后端的低层框架,运用ajax实现前后端的交互。在整个系统基本完善之后,进行一次完整的业务流程测试,测试系统的功能、业务bug及设计缺陷,过程中对发现的bug或者缺陷即时进行修改。系统从登陆开始到献血者个人信息的保存、查看等功能都能够顺利实现,最终一个初始版本的,服务于医院的无偿献血者信息管理平台就完成了。
程序设计需要态度严谨、逻辑思维敏捷、良好的编程习惯和系统设计实力。通过这次做项目,也学习到许多宝贵的经验。例如,如何更好的去设计实现系统的业务逻辑、完善界面、设计数据库,写代码也变得更严谨,对一些框架搭建和方法的使用也更加熟练。
九、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻
链接点击直达:下载链接
相关文章:

基于SpringBoot+vue的无偿献血后台管理系统
基于SpringBootvue的无偿献血后台管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背…...

详解js在事件中,如何传递复杂数据类型(数组,对象,函数)
文章目录 前言一、何谓预编译,变量提升?二、复杂数据类型的传递 1.数组2.对象3.函数总结前言 在JavaScript这门编程语言学习中,如何传参,什么是变量提升,js代码预编译等等。要想成为一名优秀的js高手,这些内…...

高并发架构 第一章大型网站数据演化——核心解释与说明。大型网站技术架构——核心原理与案例分析
大型网站架构烟花发展历程1.1.1初始阶段的网站构架1.1.2应用服务和数据服务分离1.1.3使用缓存改善网络性能1.1.4使用应用服务器集群改善网站的并发处理能力1.1.5数据库读写分离1.1.6使用反向代理和cdn加速网站相应1.1.1初始阶段的网站构架 大型网站都是由小型网站一步步发展而…...
VPP接口INPUT节点运行数据
在设置virtio接口接收/发送队列函数的最后,更新接口的运行数据。 void virtio_vring_set_rx_queues (vlib_main_t *vm, virtio_if_t *vif) { ...vnet_hw_if_update_runtime_data (vnm, vif->hw_if_index); } void virtio_vring_set_tx_queues (vlib_main_t *vm,…...

RabbitMQ学习(九):延迟队列
一、延迟队列概念延时队列中,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望 在指定时间到了以后或之前取出和处理。简单来说,延时队列就是用来存放需要在指定时间内被处理的 元素的队列。其实延迟…...

TCP并发服务器(多进程与多线程)
欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 TCP并发服务器(多进程与多线程)1. 多进程并发服务器(1)…...
第1章 Memcached 教程
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。 Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素…...

【2022.12.9】Lammps+Python 在计算g6(r)时遇到的问题
目录写在前面绘制g6( r )执行步骤【updated】如何检查图像的正确性:不是编程问题,而是数学问题的一个小bug废稿2则:写在前面 全部log: 【2022.11.16】LammpsPythonMATLAB在绘制维诺图时遇到的问题 绘制g6( r )执行步骤【updated…...

MySQL使用C语言连接
文章目录MySQL使用C语言连接引入库下载库文件在项目中使用库使用库连接数据库下发SQL请求获取查询结果MySQL使用C语言连接 引入库 要使用C语言连接MySQL,需要使用MySQL官网提供的库。 下载库文件 下载库文件 首先,进入MySQL官网,选择DEVEL…...

JavaScript随手笔记---比较两个数组差异
💌 所属专栏:【JavaScript随手笔记】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…...

【C++修炼之路】21.红黑树封装map和set
每一个不曾起舞的日子都是对生命的辜负 红黑树封装map和set前言一.改良红黑树的数据域结构1.1 改良后的结点1.2 改良后的类二. 封装的set和map2.1 set.h2.2 map.h三. 迭代器3.1 迭代器封装3.2 const迭代器四.完整代码实现4.1 RBTree.h4.2 set.h4.3 map.h4.4 Test.cpp前言 上一节…...
下载ojdbc14.jar的10.2.0.1.0版本的包
一、首先要有ojdbc14.jar包 没有的可以去下载一个,我的是从这里下载的ojdbc14.jar下载_ojdbc14.jar最新版下载[驱动包软件]-下载之家, 就是无奈关注了一个公众号,有的就不用下了。 二、找到maven的本地仓库的地址 我的地址在这里D:\apach…...

关于欧拉角你需要知道几个点
基础理解,参照:https://www.cnblogs.com/Estranged-Tech/p/16903025.html 欧拉角、万向节死锁(锁死)理解 一、欧拉角理解 举例讲解 欧拉角用三次独立的绕确定的轴旋转角度来表示姿态。如下图所示 经过三次旋转,旋…...

git ssh配置
ssh配置 执行以下命令进行配置 git config --global user.name “这里换上你的用户名” git config --global user.email “这里换上你的邮箱” 执行以下命令生成秘钥: ssh-keygen -t rsa -C “这里换上你的邮箱” 执行命令后需要进行3次或4次确认。直接全部回车就…...

Linux进程概念(三)
环境变量与进程地址空间环境变量什么是环境变量常见环境变量环境变量相关命令环境变量的全局属性PWDmain函数的三个参数进程地址空间什么是进程地址空间进程地址空间,页表,内存的关系为什么存在进程地址空间环境变量 什么是环境变量 我们所有写的程序都…...

新手福利——x64逆向基础
一、x64程序的内存和通用寄存器 随着游戏行业的发展,x32位的程序已经很难满足一些新兴游戏的需求了,因为32位内存的最大值为0xFFFFFFFF,这个值看似足够,但是当游戏对资源需求非常大,那么真正可以分配的内存就显得捉襟…...
虚幻c++中的细节之枚举类型(enum)
文章目录前言一、原生c的枚举类型关键字classint8 - 枚举的基础类型(underlying type)二、枚举类型的灵活运用位运算枚举循环遍历三、虚幻风格的枚举类型UENUMUMETATEnumAsByte总结前言 虚幻引擎中的代码部分实现了一套反射机制,为c代码带了…...
判断某个字符串在另一个字符串中的个数
/** * 用于判断字符串中字符的个数 * * param str1 原字符串 * param str2 需要判断的字符 * return 返回有几个 */ private int getCount(String str1, String str2) { //获取两个字符串的长度 int oneLength str1.length(); int toLength str2.length(); //定义两个整数&am…...

测试人员如何运用好OKR
在软件测试工作中是不是还不知道OKR是什么?又或者每次都很害怕写OKR?或者总觉得很迷茫,不知道目标是什么? OKR 与 KPI 的区别 去年公司从KPI换OKR之后,我也有一段抓瞎的过程,然后自己找了两本书看,一本是《OKR工作法》…...

CentOS7 Hive2.3.9 安装部署(mysql 8.0)
一、CentOS7安装MySQL数据库 查询载mariadb rpm -qa | grep mariadb卸载mariadb rpm -e --nodeps [查询出来的内容]安装wget为下载mysql准备 yum -y install wget在tools目录下执行以下命令,下载MySQL的repo源: wget -P /tools/ https://dev.mysql.…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...