研究背景
随着信息技术的飞速发展,医疗行业逐渐进入了数字化管理的时代。传统的医院管理方式通常依赖于手动记录和纸质文件,不仅工作量巨大,而且容易导致数据的丢失或错误,无法及时、准确地反映病人的健康状况和医院的运营效率。在这种背景下,基于现代信息技术的医院管理系统应运而生,极大地提高了医院的管理效率和医疗服务质量。
Python 作为一种功能强大、易于学习和使用的编程语言,在开发医疗管理系统中有着显著的优势。Flask 作为 Python 中轻量级的 Web 框架,具有灵活、简洁、易于扩展的特性,适合开发各种中小型的 Web 应用程序。基于 Flask 的医院管理系统可以帮助医生轻松管理病人的信息,并提供有效的数据可视化功能,辅助医疗决策。
本项目的目标是开发一个基于 Python Flask 的医院管理系统,使医生能够对病人的信息进行增删改查操作。这些操作包括添加新的病人记录、修改现有病人的信息、删除无效数据等。此外,系统还将集成数据可视化功能,通过图表和分析工具,帮助医生和医院管理者快速了解病人的健康状况、常见疾病的分布、医院资源的使用情况等。这种可视化分析不仅能提升医生的工作效率,还可以为医院的管理决策提供有力的支持。
通过这样一个系统,医院可以实现病人信息的数字化管理,减少人工错误,提升医院管理的智能化水平。而医生也能通过系统获取实时的数据分析结果,提升医疗服务的精准度和效率。这不仅能够降低医院的运营成本,还能有效改善病人的就医体验。
项目功能介绍
本项目是一款基于 Python Flask 的医院管理系统,旨在为医院的医生和管理员提供高效、简洁的患者数据管理、药品信息管理、数据可视化展示及账户权限控制等功能。通过这些功能,医生能够更加便捷地管理病人的健康信息,医院能够高效地使用资源,提升整体运营效率。以下是对项目各个功能模块的详细介绍:
1. 患者管理与筛选
患者管理是系统的核心功能之一,旨在为医生提供便捷的病人数据增删改查操作。医生可以通过系统对患者的基本信息(如姓名、性别、年龄等)以及其就诊、检查和化验信息进行全面的管理。系统支持医生根据患者姓名、性别、年龄、诊断信息等条件筛选出特定患者。此外,系统还为医生提供了药品和医生筛选功能。通过输入医生姓名,医生可以快速找到相关的患者信息,确保医生能够高效地获取所需的病人资料;同时,医生还可以通过药品名称筛选相关患者,进一步提升了患者数据管理的灵活性和效率。
2. 数据可视化
数据可视化功能旨在帮助医生更直观地了解患者信息和医院运营情况。系统支持对所有患者数据进行图表化展示,并提供按条件筛选后患者数据的可视化分析。例如,医生可以在患者信息筛选页面,通过点击"查看患者数据统计"按钮,跳转到可视化展示页面,系统会展示经过筛选后的患者数据图表。在这种情况下,系统还会提供"返回患者信息概览"的快捷按钮,使医生能够快速返回之前的筛选页面,提升操作便利性。
另一方面,医生还可以直接通过侧边栏打开可视化展示页面,默认显示全体患者的信息可视化图表。在这种情形下,不会出现返回按钮,保持界面的简洁性和易操作性。系统提供了性别、年龄以及来诊月份的统计图表展示,医生可以通过这些图表快速了解医院内不同性别、年龄段患者的分布情况,帮助做出更科学的决策。
3. 用户交互的友好性优化
为提升用户体验,系统在多个方面进行了优化。首先,在涉及日期和时间的输入框中,系统采用了datepicker
和datetimepicker
控件,确保日期和时间的选择更加方便直观。同时,在用户操作中,如果发生了可预见的错误(如数据输入不完整),系统会通过flash
消息对用户进行及时提示,避免因操作不当导致的工作中断。
此外,根据用户的身份和登录状态,系统会智能调整显示内容。管理员和普通医生账户登录后,系统界面显示的内容会有所不同,确保不同级别用户看到的功能符合其权限。例如,普通医生账户无法看到仅管理员可以使用的功能,进一步提升了系统的用户体验。部分界面采用了基于 Bootstrap 的Modal
模态框,实现了浮窗效果,使得用户界面的美感和交互体验更为突出。
4. 药品信息管理
为了更好地贴合医院的实际处方系统,系统在 MIMIC 数据库之外设置了一个专门用于记录药品信息的drug
表。药品信息管理模块允许医院管理者和医生对医院药品的库存、使用情况进行管理。在医生开具处方时,系统会自动从药品数据库中对应药品的库存数量减1,确保药品使用情况得到准确记录。如果医生修改了处方,药品的库存数量也会随之调整。这一模块有效提升了医院的药品管理水平,减少了药品浪费和库存不足的情况。
5. 医生账户管理与权限控制
系统设置了专门的user
表,用于管理医生账户,并区分管理员和普通医生账户两种类型。根据用户的身份,系统实现了前后端的权限控制。前端通过读取session
中的账户信息,使用jinja2
模板引擎进行不同的界面渲染。例如,非管理员账户在前端看不到仅供管理员使用的功能。而在后端,系统在每次访问需要管理员权限的路由时,都会检测账户信息,如不满足权限要求,则会强制跳转至首页,确保用户无法通过直接输入 URL 访问到不属于其权限范围的功能。
为提高安全性,系统对医生账户的密码进行了 MD5 加密存储,避免明文密码保存,确保用户信息的安全性。通过这一系列的账户管理和权限控制措施,系统为医院提供了一个更加安全、可靠的操作环境。
账户控制逻辑如下:
本项目中数据库中数据表关系E-R图如下:
技术栈:Python、MySQL、jQuery、Bootstrap、Flask、HTML、JavaScript、CSS等
项目结构
-static #存放CSS、JavaScript、img文件等前端素材
-css
-font
-img
-js
-templates #存放各个模板页面
-app.py #主程序
-mimic.py #class定义
-config.py #存放数据库配置信息
功能界面
登录页面
页面描述:用于登录时使用
对应后端接口:`Login()`
功能描述:用于在用户登录时在前端显示,引导用户在前端输入用户账户信息,核对密码并完成登陆。以浮窗形式展现在首页上。在登录信息输入后,根据用户信息的正确性,引导用户返回首页并提示登陆成功或登陆失败信息。
首页
页面描述:用于登录前的首页
对应后端接口:`Index()`
功能描述:用于在用户登录前在前端显示,引导用户登录系统,同时提供较为优美的UI设计,提高交互性。
界面说明:如下图所示,界面主体为多张图片组成的轮播图Banner,可左右拖动轮播图图片,提高界面美观性,优化了用户交互体验。同时在右上角和轮播图上提供用户登录选项,点击相应选项即可跳转至登录页面;在右上角点击注册按钮即可跳转至注册页面。在用户登录后,右上角的注册于登录按钮改变为个人中心按钮和退出按钮,分别用于指向医生后台首页和退出医生的个人登陆。图片上的"现在登录"也变为"个人中心"字样。
注册页面
页面描述:用于注册时使用
对应后端接口:`Register()`
功能描述:用于在用户注册时在前端显示,引导用户在前端输入用户账户信息并注册。以浮窗形式展现在首页上。在登录信息输入后,根据用户信息的正确性,引导用户返回首页并提示注册是否成功。注册界面输入用户生日的部分引入了datepicker插件。
医生个人主页
页面描述:用于医生登陆后进入个人中心时显示,主要展示医生可进行的操作和基本的患者信息。
对应后端接口:`Home()`
功能描述:用于医生登陆后进入个人中心时显示,主要展示医生可进行的操作和基本的患者信息。在个人中心前端设计中,主要的工作在于设计出一个基本的页面模板以确定登陆后个人中心各个界面的前端整体风格,而在其它页面中只需要对页面模板的复用,这将能更好地维护前端页面风格的统一性。此外还需要注意根据登录用户是否为管理员账户,对侧边栏中的功能按键进行不同的渲染,以实现不同用户显示不同前端页面,这是实现用户权限控制的策略中的一部分。在页面左侧侧边栏分别显示了登陆后可进行的若干操作,界面右上角显示登陆的医生姓名,并设置有退出按钮,此外还有当前系统时间(注意:根据之前实验时的假定,今年为2170年)。
在页面主体部分首先显示了数据库中患者总人数、今天仍然在医院的患者人数、系统中医生账户数、系统中药品种类数。下方有近日在诊患者数目统计的可视化示意图和当前医院内仍就诊中的患者信息简表(**当前仍处于就诊状态的患者定义为:入院时间小于服务器时间且出院时间大于服务器时间的患者,考虑到数据库中时间数据并非真实数据,因此此处不考虑患者是否死亡,也即即便是患者已经死亡,只要当前系统时间仍然小于患者出院时间,就认为患者仍处于就诊状态。此处服务器时间为真实时间向后推后150年得到**),如图所示,将鼠标拖动到可视化示意图上方,将详细展示当天在院患者总数。
**管理员和普通医生登陆后,左侧侧边栏功能模块存在细微差别,具体在于非管理员账户只能查看药品信息而不能修改,非管理员账户不能查看及修改其他医生账户的信息。**登陆后的界面右上角,显示用户姓名的位置可以唤起下拉菜单,界面左侧侧边栏同样设计了下拉菜单,详见图所示,这样的设计提高了交互性和美观度。
医生个人信息查询
页面描述:用于医生登陆后进入个人中心时查询个人基本信息时显示
对应后端接口:`SearchUserInfo()`
功能描述:用于医生登陆后查询个人信息时使用
医生账户密码修改
页面描述:用于医生登陆后进入个人中心时修改密码
对应后端接口:`ChangeUserPassword ()`
功能描述:用于医生登陆后修改个人密码信息时使用,如忘记密码,则需要管理员后台修改,而不能在此处修改
医生个人信息修改
页面描述:用于医生登陆后进入个人中心时修改个人基本信息时显示
对应后端接口:`ModifyUser ()`
功能描述:用于医生登陆后修改个人信息时使用,只能修改部分信息,如需修改其他信息,需要管理员后台修改。日期修改部分引入`datepicker`组件,优化交互体验。
药品信息添加
页面描述:用于管理员登陆后添加药品信息时使用
对应后端接口:`AddDrug()`
功能描述:用于管理员登陆后添加药品信息时使用,普通医生无法使用此功能,一方面,普通医生的后台将无法看到此模块,另一方面,如果普通医生输入了对应的路由,也会被识别到是非管理员账户而被强制退出此模块。
医生信息添加
页面描述:用于管理员登陆后添加医生信息时使用
对应后端接口:`AddUser()`
功能描述:用于管理员登陆后添加医生信息时使用,普通医生无法使用此功能,一方面,普通医生的后台将无法看到此模块,另一方面,如果普通医生输入了对应的路由,也会被识别到是非管理员账户而被强制退出此模块。日期输入部分引入datepicker组件,优化交互体验。
医生信息查看
页面描述:用于管理员登陆后查看医生信息时使用
对应后端接口:`SearchUser()`
功能描述:用于管理员登陆后查看医生信息时使用,普通医生无法使用此功能,一方面,普通医生的后台将无法看到此模块,另一方面,如果普通医生输入了对应的路由,也会被识别到是非管理员账户而被强制退出此模块。
在界面的搜索框中输入医生姓名后回车,即可模糊查找含有该姓名的医生,每页显示五个医生信息,分页是在后台实现的,也即后台每次传5个医生信息给前端,前端根据后端数据进行渲染,此处依靠了paginate对象实现。
管理员修改用户信息
页面描述:用于管理员登陆后修改医生信息时使用
对应后端接口:`ModifyUserByAdmin()`
功能描述:用于管理员登陆后修改医生信息时使用,普通医生无法使用此功能,一方面,普通医生的后台将无法看到此模块,另一方面,如果普通医生输入了对应的路由,也会被识别到是非管理员账户而被强制退出此模块。此处可修改医生关键信息,这些信息不能由医生本人直接修改,只能由管理员修改。其中日期修改部分引入了datepicker模块,优化交互体验.
药品信息查询
页面描述:用于管理员与普通医生查询药品信息时展示
对应后端接口:`SearchDrug()`
功能描述:用于查询药品信息时使用,普通医生与管理员登陆后界面显示不同,这样的权限控制是基于读取session中的账户信息并判断是否为管理员账户后,再由jinja2模板引擎分别进行不同方式的渲染实现的,可以看到,与管理员相比,普通医生不能进行药品信息添加和删除。
药品信息修改
页面描述:用于管理员修改药品信息时展示
对应后端接口:`ModifyDrug()`
功能描述:用于管理员登陆后修改药品信息时使用,普通医生无法使用此功能,一方面,普通医生的后台将无法看到此模块,另一方面,如果普通医生输入了对应的路由,也会被识别到是非管理员账户而被强制退出此模块。此处可修改药品名称、类型、库存量等。
患者信息查询
页面描述:用于医生/管理员查询患者信息时展示
对应后端接口:`SearchPatient()`
功能描述:用于医生查询患者信息,支持患者信息按条件筛选。点击"查看患者数据统计"按钮,跳转到被筛选后的患者数据统计界面。
患者信息新增
页面描述:用于医生/管理员新增患者信息时展示
对应后端接口:`AddPatient ()`
功能描述:用于医生新增患者信息。
患者处方信息查看
页面描述:用于医生/管理员查看患者处方信息时展示
对应后端接口:`SearchPatientPrescription()`
功能描述:用于医生查询患者处方信息,每页显示15条处方信息,点击"新增处方信息"按钮触发浮窗,浮窗中时间选择部分更换为了datepicker组件的输入框,提高了用户友好性。
患者就诊信息展示
页面描述:用于医生/管理员查询患者就诊信息时展示
对应后端接口:`SearchPatientAdmissions()`
功能描述:用于医生查询患者就诊信息,点击"编辑患者信息"及"新增就诊记录",则会弹出对应弹窗,可在对应弹窗内输入相应信息并提交,这两个弹窗分别调用了后端的ModifyPatient()和AddPatientAdmissions()接口。时间输入引入了datetimepicker控件,患者入院时间和出院时间初始值为服务器当前时间。(当前UTC时间推后150年得到)
患者化验项目信息修改
页面描述:用于医生/管理员修改患者检查项目信息时展示
对应后端接口:`ModifyPatientLabevents()`
功能描述:供医生及管理员账户修改患者病历中的化验项目信息
患者化验信息查看
页面描述:用于医生/管理员查看患者化验信息时展示
对应后端接口:`SearchPatientLabevents()`
功能描述:用于医生查询患者检查信息,每页显示15条检查信息,点击"新增检查项目"按钮触发浮窗,浮窗中时间选择部分更换为了datepicker组件的输入框,提高了用户友好性。
患者处方信息修改
页面描述:用于医生/管理员修改患者处方信息时展示
对应后端接口:`ModifyPatientPrescription()`
功能描述:本页面供医生及管理员账户修改患者病历中的处方信息,直接修改所需修改的项目即可。药物名称须与数据库中名称对应。在药品名称正确的情况下系统会根据drug数据库自动补全部分药品信息。
患者数据统计可视化
页面描述:用于医生/管理员查询患者数据可视化界面时展示
对应后端接口:`Visuallize()`
功能描述:用于医生查询患者可视化信息,当直接在导航栏打开时,默认显示全体患者信息的可视化图,在患者信息搜索页面经过筛选后点击"查看患者数据统计"按钮,亦可跳转至此页面,此时显示被筛选部分的患者信息可视化图。
患者就诊信息修改
页面描述:用于医生/管理员修改患者就诊信息时展示
对应后端接口:`ModifyPatientAdmission()`
功能描述:本页面供医生及管理员账户修改患者病历中的就诊信息,直接修改所需修改的项目即可。
患者检查项目信息修改
页面描述:用于医生/管理员修改患者检查项目信息时展示
对应后端接口:`ModifyPatientDatatimeevent()`
功能描述:供医生及管理员账户修改患者病历中的检查项目信息
患者检查信息查看
页面描述:用于医生/管理员查看患者检查信息时展示
对应后端接口:`SearchPatienDatatimeevent ()`
功能描述:用于医生查询患者检查信息,每页显示15条检查信息,点击"新增检查项目"按钮触发浮窗,浮窗中时间选择部分更换为了datepicker组件的输入框,提高了用户友好性。
有需要的话可以关注联系我!