基于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.…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...
Qt学习及使用_第1部分_认识Qt---Qt开发基本流程
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...

AWSLambda之设置时区
目标 希望Lambda运行的时区是东八区。 解决 只需要设置lambda的环境变量TZ为东八区时区即可,即Asia/Shanghai。 参考 使用 Lambda 环境变量...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南 在金融行业安全审计中,未启用HTTPS的Web应用被列为高危漏洞。通过正确配置HTTPS,可将中间人攻击风险降低98%——本文将全面解析Spring Boot中HTTPS的实现方案与实战避坑指南。 一、HTTPS 核心原理与…...
NLP常用工具包
✨做一次按NLP项目常见工具的使用拆解 1. tokenizer from torchtext.data.utils import get_tokenizertokenizer get_tokenizer(basic_english) text_sample "Were going on an adventure! The weather is really nice today." tokens tokenizer(text_sample) p…...

Linux 内核内存管理子系统全面解析与体系构建
一、前言: 为什么内存管理是核心知识 内存管理是 Linux 内核最核心也最复杂的子系统之一,其作用包括: 为软件提供独立的虚拟内存空间,实现安全隔离分配/回收物理内存资源,维持系统稳定支持不同类型的内存分配器,最优…...