当前位置: 首页 > news >正文

71-Python+MySQL 医院挂号问诊管理系统-1

1.系统介绍

项目概述
本系统是一个命令行版医院挂号问诊管理系统,主要面向医院管理员或挂号员,
用于管理患者挂号、医生排班、就诊记录等核心业务。核心功能模块1.患者管理 (Patients)添加新患者查看所有患者查找患者(按姓名或ID)2.医生管理 (Doctors)添加医生查看所有医生查找医生3.科室管理 (Departments)查看所有科室4.挂号管理 (Registrations)为患者挂号(选择科室、医生)查看所有待就诊挂号处理挂号(标记为已就诊)查看历史就诊记录5.退出系统
系统使用 pymysql 连接数据库,pandas 导出数据,
通过菜单驱动提供交互式操作。系统特点结构化设计:清晰的模块划分(患者、医生、挂号、记录)。数据关联:使用外键确保数据完整性。事务安全:在“处理就诊”等关键操作中使用事务,确保挂号状态和病历同步更新。用户友好:菜单清晰,输入有验证,输出格式化。实用功能:包含挂号、就诊、病历、导出等完整流程。可扩展性:易于添加新功能,如预约、缴费、药品管理等。

2. 数据库准备

-- 创建数据库
CREATE DATABASE IF NOT EXISTS hospital_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE hospital_db;-- 科室表
CREATE TABLE departments (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL UNIQUE,description TEXT
);-- 医生表
CREATE TABLE doctors (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,department_id INT NOT NULL,title VARCHAR(50), -- 职称:主任医师、副主任医师等FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE CASCADE
);-- 患者表
CREATE TABLE patients (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,gender ENUM('男', '女') NOT NULL,age INT NOT NULL,phone VARCHAR(15),address TEXT
);-- 挂号表(核心)
CREATE TABLE registrations (id INT AUTO_INCREMENT PRIMARY KEY,patient_id INT NOT NULL,doctor_id INT NOT NULL,registration_date DATETIME DEFAULT CURRENT_TIMESTAMP,status ENUM('待就诊', '已就诊', '已取消') DEFAULT '待就诊',FOREIGN KEY (patient_id) REFERENCES patients(id) ON DELETE CASCADE,FOREIGN KEY (doctor_id) REFERENCES doctors(id) ON DELETE CASCADE
);-- 就诊记录表
CREATE TABLE medical_records (id INT AUTO_INCREMENT PRIMARY KEY,registration_id INT NOT NULL,diagnosis TEXT, -- 诊断结果prescription TEXT, -- 处方visit_date DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (registration_id) REFERENCES registrations(id) ON DELETE CASCADE
);-- 插入测试数据
INSERT INTO departments (name, description) VALUES
('内科', '负责内科疾病诊疗'),
('外科', '负责外科手术及创伤处理'),
('儿科', '儿童疾病诊疗'),
('妇科', '女性健康与疾病诊疗');INSERT INTO doctors (name, department_id, title) VALUES
('张医生', 1, '主任医师'),
('李医生', 2, '副主任医师'),
('王医生', 3, '主治医师'),
('赵医生', 4, '主治医师');INSERT INTO patients (name, gender, age, phone, address) VALUES
('小明', '男', 8, '13812345678', '北京市朝阳区'),
('小红', '女', 25, '13987654321', '北京市海淀区');-- 初始挂号
INSERT INTO registrations (patient_id, doctor_id, status) VALUES
(1, 3, '待就诊'), -- 小明挂儿科王医生
(2, 4, '待就诊'); -- 小红挂妇科赵医生

3. 开发患者管理模块

# -*- coding: utf-8 -*-
"""
@Project : 01-python-learn
@File    : 12_医院管理系统.py
@IDE     : PyCharm
@Author  : 刘庆东
@Date    : 2025/9/16 14:15
"""# 1.导入模块
import pymysql
import pandas as pd
from datetime import datetimefrom numpy.f2py.crackfortran import charselectorclass HospitalManagementSystem:def __init__(self):#定义构造方法self.connection=self.connect_db()#做为数据库连接的方法"""pymysql.cursors.DictCursor 因为默认返回的是元组类型 通过设置  cursorclass 使返回类型变为字典类型处理大量数据的时候更加的方便"""def connect_db(self):try:conn=pymysql.connect(host="192.168.88.151",user="root",password="hadoop",database="hospital_db",charset="utf8",cursorclass=pymysql.cursors.DictCursor)print("✅ 数据库连接成功了")return connexcept Exception as e:print(f"❌数据库连接失败:{e}")return None# 定义关闭资源的方法def close_connection(self):if self.connection:self.connection.close()#当connection不是空的时候调用方法进行数据库的关闭print("🔌数据库连接已经断开!")def add_patients(self):print("添加患者")name=input("姓名:").strip()if not name:print("❌姓名不能为空!")returngender=input("性别 (男/女):").strip()if gender not in ['男','女']:print("❌性别只能是男女")returntry:age=int(input("年龄:"))if age<0 or age>150:print("❌年龄不合法!")except ValueError:print("年龄必须是数字")returnphone=input("电话 (可选):").strip()address=input("地址 (可选):").strip()#将上面的信息添加到数据库中try:with self.connection.cursor() as cursor:sql="INSERT INTO patients(NAME,gender,age,phone,address) VALUES (%s,%s,%s,%s,%s)"cursor.execute(sql,(name,gender,age,phone,address))#提交事务self.connection.commit()print(f"✅患者 {name} ,添加成功了!")except Exception as e:#回滚 撤销刚才的所有的操作self.connection.rollback()print(f"❌添加失败:{e}")#查询所有的患者def view_all_patients(self):try:with self.connection.cursor() as cursor:cursor.execute("SELECT * FROM patients ORDER BY id ")patients = cursor.fetchall()#提取全部的数据if not patients:print("暂时没有患者")returnprint("患者列表如下:")print("_"*36)for p in patients:print(p)print("_" * 36)except Exception as e:print(f"查询失败了:{e}")# 医生# 科室# 问诊#菜单def show_menu(self):print("="*36)print("       🏥 医院挂号问诊管理系统")print("=" * 36)print("""1.  添加患者2.  查看所有患者3.  查找患者4.  查看所有医生5.  添加医生6.  查看所有科室7.  患者挂号8.  查看待就诊挂号9.  处理就诊10. 查看历史就诊记录11. 导出数据到Excel12. 退出""")print("-"*36)def run(self):if not self.connection:print("❌系统启动失败,数据库连接异常!")return#没有问题while True:self.show_menu()#调用显示菜单的方法choice=input("请选择 (1-12):").strip()actions={'1':self.add_patients,'2':self.view_all_patients,'12':lambda :print("系统退出") or exit()# 你们写  3  4 5 6 7 8 。。}action=actions.get(choice)#根据你的选择进行获取功能if action:action()else:print("无效的选择,请重新输入!")#创建对象 跑程序
if __name__ == '__main__':sytemss=HospitalManagementSystem()try:sytemss.run()except Exception as e:print(f"出问题了:{e}")finally:sytemss.close_connection()

文章转载自:

http://s2SQOR4p.mdmqg.cn
http://qUNVTL76.mdmqg.cn
http://VfRZn9Zf.mdmqg.cn
http://uZCfgklg.mdmqg.cn
http://oIQhqzTr.mdmqg.cn
http://EG5W7XBv.mdmqg.cn
http://FNPkHGH4.mdmqg.cn
http://HGbPRhiQ.mdmqg.cn
http://iOPOxnQ8.mdmqg.cn
http://qoKYb3Ji.mdmqg.cn
http://IiQpBzDd.mdmqg.cn
http://n9Pp1yjo.mdmqg.cn
http://aNfO7Mm0.mdmqg.cn
http://ek9d65MT.mdmqg.cn
http://7e0CaP5b.mdmqg.cn
http://ZzUjnB0f.mdmqg.cn
http://XUBIBPTP.mdmqg.cn
http://jV4Z3uj6.mdmqg.cn
http://yrw6j3MJ.mdmqg.cn
http://J0vRXKdn.mdmqg.cn
http://sAsIPFzq.mdmqg.cn
http://rDFJxhrn.mdmqg.cn
http://zxY4kgsD.mdmqg.cn
http://EI8K9GSK.mdmqg.cn
http://ycACEGvK.mdmqg.cn
http://X2ZQivbs.mdmqg.cn
http://xfxzntO8.mdmqg.cn
http://sStC5BDD.mdmqg.cn
http://2a44Rh7n.mdmqg.cn
http://dXvU3Hvw.mdmqg.cn
http://www.dtcms.com/a/386804.html

相关文章:

  • 图片重命名
  • 同网段通信ARP
  • WWDC25 苹果开发武林圣火令挑战:探索技术前沿,聆听创新故事
  • 深度解析大模型服务性能评测:AI Ping平台助力开发者精准选型MaaS服务
  • Blender 了解与学习
  • AI语音电话语音机器人的优点和缺点分别是什么?
  • 【阿里云PAI平台】 如何在Dify调用阿里云模型在线服务 (EAS)
  • 省钱自学版一次过阿里云ACP!!!
  • 建立了 abc 联合索引,where a = ? and b = ? order by c 能命中索引吗?
  • 携程线下面试总结
  • 【数据工程】9. Web Scraping 与 Web API
  • Vue3 emit和provide
  • linux C 语言开发 (十二) 进程间通讯--消息队列
  • 报考湖北安全员A证需要哪些条件?
  • olap和oltp类业务
  • 14个免费的DEM数据源
  • 单时段机组组合优化的粒子群算法实现(MATLAB)
  • MATLAB实现语音去混响与去噪
  • 启发式搜索--模拟退火算法 matlab
  • 论文阅读:arixv 2025 One Token to Fool LLM-as-a-Judge
  • 【C++入门】C++基础
  • 10 正则表达式
  • 本地文件->RTSP->HLS->网页播放
  • 148.排序链表,23.合并K个升序链表
  • 思特威CMOS sensor rbrow寄存器设置需要注意的事项(二)
  • 物联网精准节能平台:工厂“数字大脑”如何让节能更智能?
  • Java进阶教程,全面剖析Java多线程编程,实现Callable接口实现多线程,笔记05
  • Windows Server Web 服务器安全防护(开放 HTTP端口,限制恶意 IP)
  • 深度学习:从预备知识到未来展望
  • 数据库(五)MySQL的数据备份