基于springboot+vue的医院信息管理系统

news2024/9/21 4:24:30

基于springboot+vue的医院信息管理系统

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

医院管理系统从整个社会实践过程来看,对医院进行信息化管理可以带来的好处如下所示:
(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)

字段名类型默认值列注释
idbigintNULL主键ID
user_namevarcharNULL用户名
pass_wordvarcharNULL密码
head_imgvarcharNULL头像
nick_namevarcharNULL姓名
create_timedatetimeNULL创建时间

2:‘科室表’(dept)

字段名类型默认值列注释
idbigintNULL主键ID
department_namevarcharNULL科室名称
create_timedatetimeNULL创建时间

3:‘医生表’(doctor)

字段名类型默认值列注释
idbigintNULL主键ID
nick_namevarcharNULL医生姓名
sexintNULL性别[1:男,2:女]
ageintNULL年龄
head_imgvarcharNULL头像
id_cardvarcharNULL身份证号
dept_idbigintNULL所属科室ID
create_timedatetimeNULL创建时间
telvarcharNULL手机
emailvarcharNULL邮箱
user_namevarcharNULL用户名
pass_wordvarcharNULL密码
infotextNULL简介

4:‘药物表’(drug)

字段名类型默认值列注释
idbigintNULL主键ID
drug_namevarcharNULL药物名称
drug_numvarcharNULL药物编号
drug_pricevarcharNULL药物价格
locationvarcharNULL产地
describestextNULL药物描述
drug_infotextNULL功能
remarktextNULL注意事项
drug_imgvarcharNULL药品图片

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

字段名类型默认值列注释
idbigintNULL主键ID
drug_idbigintNULL药品ID
subscribe_idbigintNULL预约表ID

6:‘患者表’(sick_info)

字段名类型默认值列注释
idbigintNULL主键ID
namevarcharNULL姓名
sexintNULL性别[1:男,2:女]
ageintNULL年龄
id_cardvarcharNULL身份证号
home_locationvarcharNULL家庭住址
family_telvarcharNULL手机号
info_imgvarcharNULL基本图片

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

字段名类型默认值列注释
idbigintNULL主键ID
doctor_idbigintNULL医生ID
sick_idbigintNULL病人ID
create_timedatetimeNULL预约时间
infovarcharNULL病情信息
statusintNULL[1:未处理,2:已处理]
prescriptionvarcharNULL药方
update_timedatetimeNULL治疗时间

五、功能模块:

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

    系统登录模块

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

    医生管理

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

    预约管理页面功能

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

    管理员管理

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

 患者管理

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

    科室管理

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

 药品管理

六、代码示例:

系统登录模块
 @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/357985.html

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

相关文章

2、登录界面开发

【任务描述】本任务要求使用线性布局以及TextView、EditText、Button等常见控件完成智慧园区登录界面的开发。1、线性布局&#xff08;LinearLayout&#xff09;1.1、LinearLayout概述线性布局&#xff08;LinearLayout&#xff09;主要以水平或垂直方式来排列界面中的控件。并…

【C++修炼之路】20.手撕红黑树

每一个不曾起舞的日子都是对生命的辜负 红黑树实现:RBTree 前言一.红黑树的概念及性质1.1 红黑树的概念1.2 红黑树的性质二.红黑树的结构2.1 红黑树节点的定义2.2 红黑树类的封装三.红黑树的插入情况1&#xff1a;只变色情况2&#xff1a;变色单旋情况3&#xff1a;双旋插入的代…

Docker入门和安装教程

一、Docker入门简介 Docker 是一个基于GO语言开发的开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱机制&#xff0c;相互之间不会…

关于如何在 Grafana 绘制 Apache Hudi Metrics 仪表盘的教程

文章目录前言下载 Prometheus下载 PushgatewayPrometheus 集成 PushgatewayPushgateway 后台执行Prometheus 后台执行在Prometheus中配置PushgatewayApache Hudi Metrics中开启 Pushgateway 推送Grafana 安装和启动Grafana 新增 Apache Hudi Metrics 仪表盘添加 Prometheus 数据…

批处理删除指定文件或文件夹

声明&#xff1a;1-2节参考了 https://blog.csdn.net/weixin_43960383/article/details/1243673841. DEL1.1 DEL 的命令参数使用 del 命令能指定文件&#xff0c;Del (erase)[Drive:][Path]FileName指删除指定文件。指定要删除的文件或文件集的位置和名称。语法格式如下&#x…

XML学习

文章目录XML什么是XML?XML的作用&#xff1f;XML语法文档声明XML注释元素&#xff08;标签&#xff09;xml属性语法规则5.4、xml解析技术介绍dom4j 解析技术&#xff08;重点&#xff09;dom4j 编程步骤&#xff1a;使用遍历标签 获取所有标签中的内容&#xff08;重点&#x…

第十三届蓝桥杯国赛 C++ C 组 Java A 组 C 组 Python C 组 E 题——斐波那契数组(三语言代码AC)

目录1.斐波那契数组1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路3.Ac_code1.Java2.C3.Python1.斐波那契数组 1.题目描述 如果数组 A(a0,a1,⋯.an−1)A(a_0,a_1,⋯.a_{n-1})A(a0​,a1​,⋯.an−1​)满足以下条件, 就说它是一个斐波那契…

如何在类中定义构造方法?

在一个类中定义的方法如果同时满足以下三个条件&#xff0c;该方法称为构造方法&#xff0c;具体如下&#xff1a;1、方法名与类名相同2、在方法名的前面没有返回值类型的声明3、在方法中不能使用return语句返回一个值接下来通过一个案例来演示如何在类中定义构造方法&#xff…

闪光桐人の实习日记(2023年2月20-27日)

前往闪闪の小窝以获得更好的阅读和评论体验 文章目录2023年2月20日&#xff08;Vue入门&#xff09;概念Vue基础Vue中的MVVMVue的体验Vue的生命周期Vue指令Vue组件VueRouter前后端路由的区别工作原理两种模式比较route跟router的区别路由属性导航守卫Vuex概述5种基本对象基本使…

C语言编程规范 第二部分

2、头文件对于C语言来说&#xff0c;头文件的设计体现了大部分的系统设计。不合理的头文件布局是编译时间过长的根因&#xff0c;不合理的头文件实际上反映了不合理的设计。 1、头文件中适合放置接口的声明&#xff0c;不适合放置实现头文件是模块&#xff08;Module&#xff…

【数据结构】时间复杂度和空间复杂度

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;别人可以拷贝我的模式&#xff0c;但不能拷贝我不断往前的激情 &#x1f6f8;C语言专栏&#xff1a;https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…

苹果手机怎么设置闹钟铃声?更改为歌曲铃声,亲测有效

很不是有很多小伙伴每天早上都被苹果手机刺耳的“雷达”闹钟铃声给吵醒呢&#xff1f;想要更换一个舒缓的闹钟铃声&#xff0c;却发现自己鼓捣半天却无法更换喜欢的歌曲闹钟铃声。苹果手机怎么设置闹钟铃声&#xff1f;下面小编就来分享如何将苹果手机的闹钟铃声设置成歌曲铃声…

【docker】拉取镜像环境报错解决#ERROR: Get https://registry-1.docker.io/v2/

&#x1f341;博主简介   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录问题报错原因解决方法问题 ERROR…

简单的认识 Vue(vue-cli安装、node安装、开发者工具)

Vue1、Vue 与其他框架的对比及特点1.1 Vue.js 是什么1.2 作者1.3 作用1.4 Vue 与其他框架的对比2、安装 Vue 的方法2.1 CDN 引入2.2 脚手架工具2.3 vue 开发者工具安装3、创建第一个实例4、理解 Vue 的 MVVM 模式5、数据双向绑定5.1 感受响应式实验总结1、Vue 与其他框架的对比…

Flutter WebView 如何与 h5 同步登录状态

大家好&#xff0c;我是 17。 Flutter WebView 一共三篇文章 在 Flutter 中使用 webview_flutter 4.0 | js 交互Flutter WebView 性能优化&#xff0c;让 h5 像原生页面一样优秀Flutter WebView 如何与 h5 同步登录状态 本篇是第 3 篇&#xff0c;讲下 Flutter WebView 与 h…

Python|每日一练|动态规划|图算法|散列表|数组|双指针|单选记录:不同路径|求两个给定正整数的最大公约数和最小公倍数|删除有序数组中的重复项

1、不同路径&#xff08;数学&#xff0c;动态规划&#xff09; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”…

【大数据基础】Linux常用命令

参考资料&#xff1a; https://www.runoob.com/w3cnote/linux-common-command-2.html 1、ls命令 就是 list 的缩写&#xff0c;通过 ls 命令不仅可以查看 linux 文件夹包含的文件&#xff0c;而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。 ls -a 列…

LockSupport常用方法源码分析

前言&#xff1a;本文将介绍LockSupport类中的方法和部分源码&#xff0c;以及面试常问到的一个小问题&#xff0c;感兴趣的大佬可以指点下。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们&#x1f609;&#x1f609;。 如果文章有什么需要改进的地方还请大佬不吝赐教&am…

uniapp项目引入vant2遇到报错Uncaught ReferenceError: require is not defined完美解决方案

一、问题描述 我用的是Vue2版本的uniapp项目&#xff0c;以下是Vant官方提供的安装方法&#xff0c;使用npm安装到uniapp项目中。 Vant官网&#xff1a;https://vant-contrib.gitee.io/vant/v2/#/zh-CN/quickstart 安装完成得到以下模块 官方提供的引入单个组件的方案 我需要引…

Vision Transformer(ViT) 2: 应用及代码讲解

文章目录1. 代码讲解1.1 PatchEmbed类1&#xff09;__init__ 函数2) forward 过程1.2 Attention类1&#xff09;__init__ 函数2&#xff09;forward 过程1.3 MLP类1&#xff09;__init__ 函数2&#xff09;forward函数1.4 Block类1&#xff09;__init__ 函数2&#xff09;forwa…