基于springboot+vue的医院信息管理系统(附源码+视频介绍) 前后端分类

news2024/11/16 13:26:49
一、项目背景介绍:

医院管理系统从整个社会实践过程来看,对医院进行信息化管理可以带来的好处如下所示:

(1)患者快速预约就诊。不同于线下就诊的是,患者不需要到医院进行排队叫号,然后才能正常就诊,信息化的结果就为该过程省略了第一步的时间,从而整体上缩短了问诊时间,方便了患者用户,和医院的叫号系统。并且患者还可以通过系统来一目了然的了解自己的症状和需要用药的情况。

(2)促使经济效益得到提升。医院在信息化的管理下,整个医院的问诊效率都大大得到了提高,并且也大大降低了各项成本,节约了人力,时间成本。物资管理中严格记录出、入库数据,随时动态掌握每种物资和药品库存利用情况,从而获得物资和经费的最大使用效益。

(3)提高社会福利。患者掌握了医院信息,提高了医院的知名度,并且可以随时知道自己的医疗费用,减少纠纷,有效的提高了社会效益。

(4)加快医院管理流程。使用管理系统,可以了解所有的医疗状况、医生和患者信息等数据,有效的提高了医院管理的效率。

二、项目技术简介:
  1. JAVA:Java是一门 面向对象编程语言 ,不仅 吸收了C++语言的各种优点 ,还摒弃了C++里难以理解的 多继承、指针 等概念,因此Java语言具有 功能强大和简单易用 两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。 Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。
  3. Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
  4. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来 简化 新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  5. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
  6. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。

三、系统功能模块介绍:

四、数据库设计:

1:‘管理员表’(admin)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

user_name

varchar

NULL

用户名

pass_word

varchar

NULL

密码

head_img

varchar

NULL

头像

nick_name

varchar

NULL

姓名

create_time

datetime

NULL

创建时间

2:‘科室表’(dept)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

department_name

varchar

NULL

科室名称

create_time

datetime

NULL

创建时间

3:‘医生表’(doctor)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

nick_name

varchar

NULL

医生姓名

sex

int

NULL

性别[1:男,2:女]

age

int

NULL

年龄

head_img

varchar

NULL

头像

id_card

varchar

NULL

身份证号

dept_id

bigint

NULL

所属科室ID

create_time

datetime

NULL

创建时间

tel

varchar

NULL

手机

email

varchar

NULL

邮箱

user_name

varchar

NULL

用户名

pass_word

varchar

NULL

密码

info

text

NULL

简介

4:‘药物表’(drug)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

drug_name

varchar

NULL

药物名称

drug_num

varchar

NULL

药物编号

drug_price

varchar

NULL

药物价格

location

varchar

NULL

产地

describes

text

NULL

药物描述

drug_info

text

NULL

功能

remark

text

NULL

注意事项

drug_img

varchar

NULL

药品图片

5:‘预约药品表’(sick_drug)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

drug_id

bigint

NULL

药品ID

subscribe_id

bigint

NULL

预约表ID

6:‘患者表’(sick_info)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

name

varchar

NULL

姓名

sex

int

NULL

性别[1:男,2:女]

age

int

NULL

年龄

id_card

varchar

NULL

身份证号

home_location

varchar

NULL

家庭住址

family_tel

varchar

NULL

手机号

info_img

varchar

NULL

基本图片

7:‘病人预约表’(subscribe)

字段名

类型

默认值

列注释

id

bigint

NULL

主键ID

doctor_id

bigint

NULL

医生ID

sick_id

bigint

NULL

病人ID

create_time

datetime

NULL

预约时间

info

varchar

NULL

病情信息

status

int

NULL

[1:未处理,2:已处理]

prescription

varchar

NULL

药方

update_time

datetime

NULL

治疗时间

五、功能模块:
  1. 系统登录模块:本系统主要分为管理员,医生,患者三种不同身份的用户,三者皆使用同一个登录页面,但不同的是登录之后的操作页面将会根据角色不同进行变化。

  1. 医生管理:医生管理模块主要是对于医院所有医生的一个管理,其中包括医生的基本信息,例如姓名,性别,年龄,照片等。该模块主要对医生的详细信息信息进行维护,其中包括基本信息检索,证件照上传等

  1. 预约管理页面功能:预约管理模块主要用来操作刚刚入院的病人信息,为病人分配主治医生,在病人治疗期间开治疗药品等。

  1. 管理员管理:管理员即是系统管理员的信息管理,包括管理员的基本信息等。

  1. 患者管理:系统患者管理主要是患者自己进行操作录入,改模块可以根据不同的条件查询不同的患者信息,也包括对患者的一些特殊处理等。

  1. 科室管理:科室管理主要对医院中所存在的科室,例如心血管内科,泌尿科等科室进行基本信息的信息化管理,其中主要包括查询,添加,编辑,删除等基本功能。

  1. 药品管理:药品管理模块主要包括药品的基本信息,图片,注意事项,功能的信息化管理。

六、代码示例:
系统登录模块
 @PostMapping()
    public ReturnMsg login(@RequestBody AdminDTO adminDTO) {
        if (adminDTO.getType() == 1) {
            Assert.isTrue(StrUtil.isNotEmpty(adminDTO.getUserName())
                    && StrUtil.isNotEmpty(adminDTO.getPassWord()), "账号或密码不能为空!");
            LambdaQueryWrapper<AdminDTO> queryWrapper = Wrappers.lambdaQuery();
            queryWrapper.eq(AdminDTO::getUserName, adminDTO.getUserName()).
                    eq(AdminDTO::getPassWord, adminDTO.getPassWord()).last(BaseConstant.LIMIT_ONE);
            AdminDTO loginUser = adminService.getOne(queryWrapper);
            Assert.notNull(loginUser, "账号或密码错误!");
            loginUser.setType(1);
            return ReturnMsg.ok(loginUser);
        }
        if (adminDTO.getType() == 2) {
            Assert.isTrue(StrUtil.isNotEmpty(adminDTO.getUserName())
                    && StrUtil.isNotEmpty(adminDTO.getPassWord()), "账号或密码不能为空!");
            LambdaQueryWrapper<DoctorDTO> queryWrapper = Wrappers.lambdaQuery();
            queryWrapper.eq(DoctorDTO::getUserName, adminDTO.getUserName()).
                    eq(DoctorDTO::getPassWord, adminDTO.getPassWord()).last(BaseConstant.LIMIT_ONE);
            DoctorDTO loginUser = doctorService.getOne(queryWrapper);
            Assert.notNull(loginUser, "账号或密码错误!");
            loginUser.setType(2);
            return ReturnMsg.ok(loginUser);
        }
        if (adminDTO.getType() == 3) {
            Assert.isTrue(StrUtil.isNotEmpty(adminDTO.getUserName()), "联系方式不能为空!");
            LambdaQueryWrapper<SickInfoDTO> queryWrapper = Wrappers.lambdaQuery();
            queryWrapper.eq(SickInfoDTO::getFamilyTel, adminDTO.getUserName()).last(BaseConstant.LIMIT_ONE);
            SickInfoDTO loginUser = sickInfoService.getOne(queryWrapper);
            if (loginUser == null) {
                loginUser = new SickInfoDTO();
                loginUser.setFamilyTel(adminDTO.getUserName());
                loginUser.setName("患者-游客");
                sickInfoService.save(loginUser);
            }
            loginUser.setType(3);
            return ReturnMsg.ok(loginUser);
        }
        return ReturnMsg.error("账号或密码错误");
    }

医生管理
    @GetMapping("/getDeptData")
    public ReturnMsg getDeptData(){
        List<DeptDTO> dataList = deptService.list();
        List<BaseSelectEntity> selectEntities = new ArrayList<>();
            if(CollectionUtil.isNotEmpty(dataList)){
            dataList.forEach(item -> {
                BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
                baseSelectEntity.setKey(item.getId());
                baseSelectEntity.setValue(item.getDepartmentName());
                selectEntities.add(baseSelectEntity);
            });
        }
        return ReturnMsg.ok(selectEntities);
   }

预约管理页面功能
    /**
     * 默认分页查询
     *
     * @param sickDrugDTO
     * @return
     * @throws IOException
     */
    @PostMapping("/page")
    public ReturnMsg page(@RequestBody SickDrugDTO sickDrugDTO) {
        return ReturnMsg.ok(baseService.basePage(sickDrugDTO));
    }


    @PostMapping(value = "/save/update1")
    public ReturnMsg baseSaveOrUpdate1(@RequestBody SickDrugDTO entity) throws Exception {
        LambdaQueryWrapper<SickDrugDTO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SickDrugDTO::getSubscribeId, entity.getSubscribeId()).eq(SickDrugDTO::getDrugId, entity.getDrugId());
        List<SickDrugDTO> list = this.baseService.list(queryWrapper);
        if (CollectionUtil.isNotEmpty(list)) {
            return ReturnMsg.ok();
        }
        this.baseService.save(entity);
        return ReturnMsg.ok();
    }

管理员管理
    @Override
    public Page<AdminDTO> basePage(AdminDTO adminDTO) {
        if (null != adminDTO.getCurrent() && null != adminDTO.getPageSize())
            adminDTO.setCurrent((adminDTO.getCurrent() - 1) * adminDTO.getPageSize());
        List<AdminDTO> list = this.baseMapper.findList(adminDTO);
        int count = this.baseMapper.findPageCount(adminDTO);
        Page<AdminDTO> page = new Page<>();
        page.setTotal(count);
        page.setRecords(list);
        return page;
    }

患者管理
 @GetMapping("/getDoctorData")
    public ReturnMsg getDoctorData() {
        List<DoctorDTO> dataList = doctorService.list();
        List<BaseSelectEntity> selectEntities = new ArrayList<>();
        if (CollectionUtil.isNotEmpty(dataList)) {
            dataList.forEach(item -> {
                BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
                baseSelectEntity.setKey(item.getId());
                baseSelectEntity.setValue(item.getNickName());
                selectEntities.add(baseSelectEntity);
            });
        }
        return ReturnMsg.ok(selectEntities);
    }

科室管理
 @Override
    @Resource(name = "drugService")
    protected void setBaseService(DrugService drugService) {
        this.baseService = drugService;
    }
    /**
    * 图片上传文件夹名称
    */
    private final String realPath = "/drug";

    /**
    * 图片上传
    *
    * @param filename
    * @param id 需要修改的数据主键id
    * @return
    * @throws IOException
    */
    @PostMapping("/upload/{id}")
    public ReturnMsg upload(@RequestParam("file") MultipartFile filename, @PathVariable("id") Long id) throws IOException {
        return  ReturnMsg.ok(this.baseUpLoad(filename, id, realPath, DrugDTO.class));
    }

药品管理
   public Page<SubscribeDTO> basePage(SubscribeDTO subscribeDTO) {
        if (null != subscribeDTO.getCurrent() && null != subscribeDTO.getPageSize())
            subscribeDTO.setCurrent((subscribeDTO.getCurrent() - 1) * subscribeDTO.getPageSize());
        List<SubscribeDTO> list = this.baseMapper.findList(subscribeDTO);
        int count = this.baseMapper.findPageCount(subscribeDTO);
        Page<SubscribeDTO> page = new Page<>();
        page.setTotal(count);
        page.setRecords(list);
        return page;
    }

七、论文参考:

论文参考···

八、项目总结:

时间飞逝,一转眼五个月时间已经过去,医院管理系统也从无到可以正式使用,经过此次软件整个流程的设计与开发,使我感触颇深,也让我从中学习到了很多实践性的知识。

一个软件开发的难以程度完全取决于初期对于技术的选型以及之后的项目基础架构的搭建工作。正所谓磨刀不误砍柴工,只有把刀磨的锋利了,效率才会高,软件建设亦是如此。对于项目基础结构的搭建时,需要考虑的因素非常之多,例如项目包结构如何正确划分才能够使结构清晰,基础公共部分的代码该如何处理或者说如何高效的编写等等,在前端项目方面亦是如此,组件化如何拆分才能使代码复用性更高,使功能更加简易开发,在此些问题的基础之下,后端包结构划分为connom公共包,util帮助包,controller Web项目接口包,biz业务处理包,entity实体包,dao持久成包,在此项目包结构的帮助下,整个项目中的文件变得清晰明了,当处理问题的时候新建的文件或者需要修改的代码在什么地方,可以做到一目了然。所以整个项目我认为基础搭建尤为重要。

一个好的项目的研发离不开生活中人们需要的问题,只要存在问题就会存在需要,存在需要,项目才会变得更加的有意义,这才是一个完整的供需关系。在弄清楚需求之后,需要对整个项目的整体业务逻辑进行构思以及最重要的数据库表的设计,项目主要面向的用户是B端用户还是C端用户,不同的用户数据库表的设计思路也存在差异,C端用户的系统主要关键在查询操作,查询速度必须要更快,而此系统主要面向的用户为B端用户所以项目主要关注的点在于如何减少用户的操作难度,对查询速度要求很高。

系统实现是整个项目整体流程的最后一个环节,在明确本次项目需求之后,首先需求进行整体的需求分析和项目设计,然后在进行技术的一个确认工作。此外,最好能和学院的老师一起交流探讨设计的系统有啥不足之处,然后进行修改。最后在慢慢的调试中,系统得以被完整的开发出来。但系统依旧存在不足之处,需要不断的补充和完善。

 此源码非开源,若需要此源码可扫码添加微信进行咨询!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1575040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STL学习】(4)vector的模拟

前言 本文将模拟实现vector的常用功能&#xff0c;目的在于更深入理解vector。 一、前置知识 在模拟之前先对vector的结构和常用接口学习&#xff0c;有一个大致了解。看源码&#xff0c;本文参考的源码是SGI版本的stl3.0。 技巧&#xff1a; 看源码不要一行一行的看&#xff…

软件测试常考面试题-软件测试面试宝典(一篇足矣)

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【系统架构师】-软件架构设计

1、软件架构的概念 架构的本质 1、软件架构为软件系统提供了一个结构、行为和属性的高级抽象。 2、软件架构风格是特定应用领域的惯用模式&#xff0c;架构定义一个词汇表和一组约束。 架构的作用 1、软件架构是项目干系人进行交流的手段。 2、软件架构是可传递和可复用的模型…

creo扫描杯子学习笔记

creo扫描杯子学习笔记 扫描2要素&#xff1a; 轨迹&#xff0c; 截面。 多用于曲线扫描&#xff0c;区别于拉伸命令。 大小自定 旋转扫描 抽壳 草绘把手 扫描把手 复制曲面 实例化切除 成型

Leetcode 148. 排序链表

心路历程&#xff1a; 这道题通过很简单&#xff0c;但是如果想要用O(1)的空间复杂度O(nlogn)的时间复杂度的话&#xff0c;可能得需要双指针快排的思路。 解法&#xff1a;遍历模拟 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0…

容器和K8s常见概念

【容器】 1、Open Container Initiative&#xff08;OCI&#xff09;&#xff1a;制定和推动容器格式和运行时的开放标准。容器运行时需要遵循此标准。主要的产出物包括&#xff1a; OCI Image Specification: 定义容器镜像格式的规范&#xff0c;统一描述容器镜像的内容和结…

软考高级架构师:嵌入式系统的内核架构

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【C++进阶】哈希思想之哈希表和哈希桶模拟实现unordered_map和unordered_set

哈希表和哈希桶 一&#xff0c;什么是哈希二&#xff0c;关联式容器unordered_map/set1. unordered_map2. unordered_set 三&#xff0c;哈希的结构1. 哈希函数2. 哈希冲突 四&#xff0c;哈希表&#xff08;闭散列&#xff09;及其模拟实现五&#xff0c;哈希桶&#xff08;开…

Android JNI调试总结

1、确保NDK和CMake已经安装 新建能编译APK的工程&#xff0c;工程中添加相关ndk目录 2、添加C模块 添加完成后&#xff0c;工程目录自动更新&#xff0c;build.gradle导入了so编译器 修改build.gradle中添加相关gcc编译器如下 externalNativeBuild { cmake { abiFilters a…

零信任安全模型:构建未来数字世界的安全基石

在数字化转型的浪潮中&#xff0c;云原生技术已成为推动企业创新和灵活性的关键力量&#x1f4a1;。然而&#xff0c;随着技术的进步和应用的广泛&#xff0c;网络安全威胁也日益严峻&#x1f513;&#xff0c;传统的网络安全模型已经难以应对复杂多变的网络环境。在这样的背景…

webpack环境配置分类结合vue使用

文件目录结构 按照目录结构创建好文件 控制台执行: npm install /config/webpack.common.jsconst path require(path) const {merge} require(webpack-merge) const {CleanWebpackPlugin} require(clean-webpack-plugin) const { VueLoaderPlugin } require(vue-loader); c…

Spring Security——11,自定义权限校验方法

自定义权限校验方法 一键三连有没有捏~~ 我们也可以定义自己的权限校验方法&#xff0c;在PreAuthorize注解中使用我们的方法。 自定义一个权限检验方法&#xff1a; 在SPEL表达式中使用 ex相当于获取容器中bean的名字未ex的对象。然后再调用这个对象的 hasAuthority方法&am…

中文地址分词器源码阅读(jiedi)

文章目录 structure.p文件pd.read_excelenumerate思维导图核心源码讲解jiedi.pytrain.py 总结 structure 点击左边的Structure按钮就如Structure界面。从Structure我们可以看出当前代码文件中有多少个全局变量、函数、类以及类中有多少个成员变量和成员函数。 其中V图标表示全…

mid转MP3怎么转?一分钟搞定~

MIDI&#xff08;Musical Instrument Digital Interface&#xff09;文件格式的诞生可以追溯到上世纪80年代&#xff0c;音频技术迅速崛起。为了让不同音乐设备之间能够互相通信&#xff0c;MIDI格式成为了音乐的标准。它不同于常见的音频文件格式&#xff0c;不包含实际的声音…

基于java web的超市管理系统

摘要 随着社会经济的不断发展&#xff0c;人们的生活水平不断提高。越来越多的零售行业得到了快速的发展&#xff0c;以最常见的超市最为明显。零售行业繁荣的背后也随之带来了许多行业隐患&#xff0c;越来越激烈的行业竞争不断的要求经营者更加高要求的管理超市内部的整个供…

CleanMyMac有必要购买吗?有哪些功能

作为一位产品营销专家&#xff0c;对各类软件产品的功能和特点都有深入的研究&#xff0c;对于CleanMyMac这款产品也有深入了解。CleanMyMac是一款专为Mac用户设计的系统清理与优化软件&#xff0c;旨在帮助用户解决Mac电脑使用过程中的各种问题&#xff0c;让电脑恢复如新的状…

Linux系统中网络协议栈优化

在现代计算机网络中&#xff0c;网络协议栈是实现网络通信的核心组件之一。在Linux系统中&#xff0c;网络协议栈的优化对于提高网络性能、降低延迟、增强安全性等方面至关重要。本文将深入探讨Linux系统中网络协议栈的优化方法和技术&#xff0c;包括使用更快的网络协议栈和禁…

基于Arduino nano配置银燕电调

1 目的 配置电调&#xff0c;设置电机转动方向&#xff0c;使得CW电机朝顺时针方向转动&#xff0c;CCW电机朝逆时针转动。 2 步骤 硬件 Arduino nano板子及USB线变阻器银燕电调EMAX Bullet 20A朗宇电机 2205 2300KV格氏电池3S杜邦线若干接线端子 软件 BLHeliSuite 注意…

【LeetCode: 21. 合并两个有序链表 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Redis实现高可用持久化与性能管理

前言 在生产环境中&#xff0c;为了实现Redis的高可用性&#xff0c;可以采用持久化、主从复制、哨兵模式和 Cluster集群的方法确保数据的持久性和可靠性。这里首先介绍一下使用持久化实现服务器的高可用。主从复制、哨兵模式和集群介绍请参考&#xff1a;Redis主从复制、哨兵…