제가 개발한 프로그램은 병원 내 인사 관리를 용이하게 하기위한 목적으로 설계되었습니다.
환자, 의사, 간호사의 정보를 관리하고 기록하는 기능을 제공합니다.
아래 이미지는 환자, 의사, 간호사 엔터티 간의 관계를 나타낸 다이어그램입니다.
파이썬 코드:
import MySQLdb
import time
class Database:
def __init__(self):
self.db = None
self.cursor = None
def connect(self):
self.db = MySQLdb.connect('localhost', 'root', '1234', 'hs')
self.cursor = self.db.cursor()
def disconnect(self):
self.cursor.close()
self.db.close()
class Patient:
def __init__(self, db):
self.db = db
def add_patient(self):
patient_id = input("환자의 ID를 입력하세요: ")
name = input("환자의 성과 이름을 입력하세요: ")
speciality_id = int(input("환자의 전문 분야 ID를 입력하세요: "))
dob = int(input("환자의 생년월일 6자리를 입력하세요: "))
doctor_id = int(input("환자의 담당 의사 ID를 입력하세요: "))
nurse_id = int(input("환자의 담당 간호사 ID를 입력하세요: "))
self.db.cursor.execute("SELECT D_SpecialityID FROM Doctor WHERE DoctorID = %s", (doctor_id,))
doctor_speciality = self.db.cursor.fetchone()
self.db.cursor.execute("SELECT N_SpecialityID FROM Nurse WHERE NurseID = %s", (nurse_id,))
nurse_speciality = self.db.cursor.fetchone()
if speciality_id == doctor_speciality[0] and speciality_id == nurse_speciality[0]:
self.db.cursor.execute(
"INSERT INTO Patient (PatientID, Name, SpecialityID, dob, DoctorID, NurseID ) VALUES (%s, %s, %s, %s, %s, %s)",
(patient_id, name, speciality_id, dob, doctor_id, nurse_id))
self.db.db.commit()
print("환자 정보가 성공적으로 추가되었습니다.")
else:
print("환자와 의사 및 간호사의 전문 분야와 일치하지 않습니다.")
def view_patient_list(self):
self.db.cursor.execute("SELECT * FROM Patient")
patients = self.db.cursor.fetchall()
print("환자 목록(환자 ID, 이름, 과 코드,생년월일, 의사ID, 간호사ID):")
for patient in patients:
print(patient)
def delete_patient(self):
patient_id = input("삭제할 환자의 ID를 입력하세요: ")
self.db.cursor.execute("SELECT * FROM Patient WHERE patientID = %s", (patient_id,))
result = self.db.cursor.fetchone()
if result:
confirm = input(f"삭제할 환자 ID가 {patient_id}이 맞나요? (y/n): ")
if confirm.lower() == 'y':
self.db.cursor.execute("DELETE FROM Patient WHERE patientID = %s", (patient_id,))
self.db.db.commit()
print("환자 정보가 삭제되었습니다.")
else:
print("삭제를 취소하였습니다.")
else:
print("해당 ID의 환자가 존재하지 않습니다.")
class Doctor:
def __init__(self, db):
self.db = db
def add_doctor(self):
doctor_id = int(input("의사 ID를 입력하세요: "))
name = input("의사의 성과 이름을 입력하세요: ")
speciality_id = input("전문 분야 ID를 입력하세요: ")
self.db.cursor.execute("INSERT INTO Doctor (DoctorID, Name, D_SpecialityID) VALUES (%s, %s, %s)",
(doctor_id, name, speciality_id))
self.db.db.commit()
print("의사 정보가 성공적으로 추가되었습니다.")
def view_doctor_list(self):
self.db.cursor.execute("SELECT * FROM Doctor")
doctors = self.db.cursor.fetchall()
print("의사 목록(의사ID, 이름, 분야):")
for doctor in doctors:
print(doctor)
def delete_doctor(self):
doctor_id = input("삭제할 의사의 ID를 입력하세요: ")
self.db.cursor.execute("SELECT * FROM Doctor WHERE doctorID = %s", (doctor_id,))
result = self.db.cursor.fetchone()
if result:
confirm = input(f"삭제할 의사 ID가 {doctor_id}이 맞나요? (y/n): ")
if confirm.lower() == 'y':
self.db.cursor.execute("DELETE FROM Doctor WHERE doctorID = %s", (doctor_id,))
self.db.db.commit()
print("의사 정보가 삭제되었습니다.")
else:
print("삭제를 취소하였습니다.")
else:
print("해당 ID의 의사가 존재하지 않습니다.")
# 의사가 담당한 환자 정보 조회
def view_patients_doctor(self):
doctor_id = input("의사의 ID를 입력하세요: ")
self.db.cursor.execute("SELECT * FROM Patient WHERE doctorID = %s", (doctor_id,))
result = self.db.cursor.fetchall()
if result:
print(f"의사 ID {doctor_id} 담당 환자 정보:")
for patient in result:
print(patient)
else:
print(f"의사 ID {doctor_id} 담당 환자가 존재하지 않습니다.")
class Nurse:
def __init__(self, db):
self.db = db
def add_nurse(self):
nurse_id = int(input("간호사 ID를 입력하세요: "))
name = input("간호사의 성과 이름을 입력하세요: ")
speciality_id = input("담당 병동을 입력하세요: ")
self.db.cursor.execute("INSERT INTO Nurse (nurseID, Name, N_SpecialityID) VALUES (%s, %s, %s)",
(nurse_id, name, speciality_id))
self.db.db.commit()
print("간호사 정보가 성공적으로 추가되었습니다.")
def view_nurse_list(self):
self.db.cursor.execute("SELECT * FROM Nurse")
nurses = self.db.cursor.fetchall()
print("간호사 목록(간호사ID, 이름, 분야):")
for nurse in nurses:
print(nurse)
def delete_nurse(self):
nurse_id = input("삭제할 간호사의 ID를 입력하세요: ")
self.db.cursor.execute("SELECT * FROM Nurse WHERE nurseId = %s", (nurse_id,))
result = self.db.cursor.fetchone()
if result:
confirm = input(f"삭제할 간호사 ID가 {nurse_id}이 맞나요? (y/n): ")
if confirm.lower() == 'y':
self.db.cursor.execute("DELETE FROM Nurse WHERE nurseId = %s", (nurse_id,))
self.db.db.commit()
print("간호사 정보가 삭제되었습니다.")
else:
print("삭제를 취소하였습니다.")
else:
print("해당 ID의 간호사가 존재하지 않습니다.")
class Hsmain:
def __init__(self):
self.db = Database()
self.patient = Patient(self.db)
self.doctor = Doctor(self.db)
self.nurse = Nurse(self.db)
def main(self):
print('병원 인사 관리 시스템')
while True:
menu = "1. 환자\n" \
"2. 의사\n" \
"3. 간호사\n" \
"4. 종료\n" \
"원하는 작업을 선택하세요: "
option = input(menu)
if option == '1':
self.patient_menu()
elif option == '2':
self.doctor_menu()
elif option == '3':
self.nurse_menu()
elif option == '4':
print("병원 인사 관리 프로그램 종료.")
time.sleep(.6)
print("."),
time.sleep(.6)
print(".")
break
else:
print("잘못된 옵션을 선택하셨습니다.")
def patient_menu(self):
patient_menu = "1. 환자 정보 추가\n" \
"2. 환자 목록 조회\n" \
"3. 환자 정보 삭제\n" \
"4. 이전 메뉴로 돌아가기\n" \
"원하는 작업을 선택하세요: "
while True:
patient_option = input(patient_menu)
if patient_option == '1':
self.patient.add_patient()
elif patient_option == '2':
self.patient.view_patient_list()
elif patient_option == '3':
self.patient.delete_patient()
elif patient_option == '4':
break
else:
print("잘못된 옵션을 선택하셨습니다.")
def doctor_menu(self):
doctor_menu = "1. 의사 정보 추가\n" \
"2. 의사 목록 조회\n" \
"3. 의사 정보 삭제\n" \
"4. 의사가 담당한 환자 조회\n" \
"5. 이전 메뉴로 돌아가기\n" \
"원하는 작업을 선택하세요: "
while True:
doctor_option = input(doctor_menu)
if doctor_option == '1':
self.doctor.add_doctor()
elif doctor_option == '2':
self.doctor.view_doctor_list()
elif doctor_option == '3':
self.doctor.delete_doctor()
elif doctor_option == '4':
self.doctor.view_patients_doctor()
elif doctor_option == '5':
break
else:
print("잘못된 옵션을 선택하셨습니다.")
def nurse_menu(self):
nurse_menu = "1. 간호사 정보 추가\n" \
"2. 간호사 목록 조회\n" \
"3. 간호사 정보 삭제\n" \
"4. 이전 메뉴로 돌아가기\n" \
"원하는 작업을 선택하세요: "
while True:
nurse_option = input(nurse_menu)
if nurse_option == '1':
self.nurse.add_nurse()
elif nurse_option == '2':
self.nurse.view_nurse_list()
elif nurse_option == '3':
self.nurse.delete_nurse()
elif nurse_option == '4':
break
else:
print("잘못된 옵션을 선택하셨습니다.")
if __name__ == "__main__":
hs = Hsmain()
hs.db.connect()
hs.main()
hs.db.disconnect()
SQL코드:
show databases;
create database hs;
use hs;
CREATE TABLE Speciality (
SpecialityID INT PRIMARY KEY,
Name VARCHAR(255)
);
CREATE TABLE Doctor (
DoctorID INT PRIMARY KEY,
Name VARCHAR(255),
D_SpecialityID INT,
FOREIGN KEY (D_SpecialityID) REFERENCES Speciality(SpecialityID)
);
CREATE TABLE Nurse (
NurseID INT PRIMARY KEY,
Name VARCHAR(255),
N_SpecialityID INT,
FOREIGN KEY (N_SpecialityID) REFERENCES Speciality(SpecialityID)
);
CREATE TABLE Patient (
PatientID INT PRIMARY KEY,
Name VARCHAR(255),
SpecialityID INT,
dob INT,
DoctorID INT,
NurseID INT,
FOREIGN KEY (DoctorID) REFERENCES Doctor(DoctorID),
FOREIGN KEY (NurseID) REFERENCES Nurse(NurseID),
FOREIGN KEY (SpecialityID) REFERENCES Speciality(SpecialityID)
);
#Speciality 테이블에 데이터
INSERT INTO Speciality (SpecialityID, Name)
VALUES
(1, 'GS'),
(2, 'OS'),
(3, 'PS'),
(4, 'EM');
#Doctor 테이블에 데이터
INSERT INTO Doctor (DoctorID, Name, D_SpecialityID)
VALUES
(101, '이메론', 1),
(102, '오렌지', 2),
(103, '짜장면', 3),
(104, '정Johnson', 4);
#Nurse 테이블에 데이터
INSERT INTO Nurse (NurseID, Name, N_SpecialityID)
VALUES
(501, '수간호', 4),
(502, '김나나', 2),
(503, '오무리', 3),
(504, '나나', 1);
#Patient 테이블에 데이터
INSERT INTO Patient (PatientID, Name, SpecialityID, dob, DoctorID, NurseID)
VALUES
('1001', '김사과', 1 ,840512, 101, 504),
('1002', '알리오', 2,941201, 102, 502),
('1003', '피막치', 3,781012, 103, 503);
위의 의사, 간호사, 환자는 예시 데이터입니다
결과:
환자 옵션:
1-3 옵션 실행 결과 및 환자 정보 삭제 부분에서 y를 누를 경우 결과:
병원 인사 관리 시스템
1. 환자
2. 의사
3. 간호사
4. 종료
원하는 작업을 선택하세요: 1
1. 환자 정보 추가
2. 환자 목록 조회
3. 환자 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 1
환자의 ID를 입력하세요: 1010
환자의 성과 이름을 입력하세요: 곽정우
환자의 생년월일 6자리를 입력하세요: 990318
환자의 담당 의사 ID를 입력하세요: 101
환자의 담당 간호사 ID를 입력하세요: 503
환자 정보가 성공적으로 추가되었습니다.
1. 환자 정보 추가
2. 환자 목록 조회
3. 환자 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 2
환자 목록(환자 ID, 이름, 생년월일, 의사ID, 간호사ID):
(1001, '김사과', 840512, 102, 503)
(1002, '알리오', 941201, 102, 501)
(1003, '피막치', 781012, 103, 502)
(1005, '벚꽃', 850202, 101, 503)
(1010, '곽정우', 990318, 101, 503)
1. 환자 정보 추가
2. 환자 목록 조회
3. 환자 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 3
삭제할 환자의 ID를 입력하세요: 1010
삭제할 환자 ID가 1010이 맞나요? (y/n): y
환자 정보가 삭제되었습니다.
1. 환자 정보 추가
2. 환자 목록 조회
3. 환자 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 2
환자 목록(환자 ID, 이름, 생년월일, 의사ID, 간호사ID):
(1001, '김사과', 840512, 102, 503)
(1002, '알리오', 941201, 102, 501)
(1003, '피막치', 781012, 103, 502)
(1005, '벚꽃', 850202, 101, 503)
1. 환자 정보 추가
2. 환자 목록 조회
3. 환자 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 4
1. 환자
2. 의사
3. 간호사
4. 종료
원하는 작업을 선택하세요: 4
병원 인사 관리 프로그램 종료.
.
.
종료 코드 0(으)로 완료된 프로세스
환자와 의사 및 간호사의 전문 분야가 모두 동일 할 경우 데이터베이스 등록
환자와 의사 및 간호사의 전문 분야가 다를 경우 등록 오류 발생(다른 병동일 경우를 가정)
병원 인사 관리 시스템
1. 환자
2. 의사
3. 간호사
4. 종료
원하는 작업을 선택하세요: 1
1. 환자 정보 추가
2. 환자 목록 조회
3. 환자 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 1
환자의 ID를 입력하세요: 1010
환자의 성과 이름을 입력하세요: 곽정우
환자의 전문 분야 ID를 입력하세요: 1
환자의 생년월일 6자리를 입력하세요: 1234556
환자의 담당 의사 ID를 입력하세요: 101
환자의 담당 간호사 ID를 입력하세요: 504
환자 정보가 성공적으로 추가되었습니다.
1. 환자 정보 추가
2. 환자 목록 조회
3. 환자 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 1
환자의 ID를 입력하세요: 1020
환자의 성과 이름을 입력하세요: 곽정
환자의 전문 분야 ID를 입력하세요: 1
환자의 생년월일 6자리를 입력하세요: 123456
환자의 담당 의사 ID를 입력하세요: 101
환자의 담당 간호사 ID를 입력하세요: 501
환자와 의사 및 간호사의 전문 분야와 일치하지 않습니다.
의사 옵션:
1-3번 옵션은 환자 및 간호사 옵션과 동일 및 의사 전용 옵션 4번 실행 결과:
병원 인사 관리 시스템
1. 환자
2. 의사
3. 간호사
4. 종료
원하는 작업을 선택하세요: 2
1. 의사 정보 추가
2. 의사 목록 조회
3. 의사 정보 삭제
4. 의사가 담당한 환자 조회
5. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 4
의사의 ID를 입력하세요: 102
의사 ID 102 담당 환자 정보:
(1001, '김사과', 840512, 102, 503)
(1002, '알리오', 941201, 102, 501)
1. 의사 정보 추가
2. 의사 목록 조회
3. 의사 정보 삭제
4. 의사가 담당한 환자 조회
5. 이전 메뉴로 돌아가기
간호사 옵션:
1-3 옵션 실행 결과 및 간호사 정보 삭제 부분에서 n을 누를 경우 결과:
병원 인사 관리 시스템
1. 환자
2. 의사
3. 간호사
4. 종료
원하는 작업을 선택하세요: 3
1. 간호사 정보 추가
2. 간호사 목록 조회
3. 간호사 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 1
간호사 ID를 입력하세요: 505
간호사의 성과 이름을 입력하세요: 코리아
담당 병동을 입력하세요: 성형
간호사 정보가 성공적으로 추가되었습니다.
1. 간호사 정보 추가
2. 간호사 목록 조회
3. 간호사 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 3
삭제할 간호사의 ID를 입력하세요: 505
삭제할 간호사 ID가 505이 맞나요? (y/n): n
삭제를 취소하였습니다.
1. 간호사 정보 추가
2. 간호사 목록 조회
3. 간호사 정보 삭제
4. 이전 메뉴로 돌아가기
원하는 작업을 선택하세요: 2
간호사 목록(간호사ID, 이름, 분야):
(501, '수간호', '성형')
(502, '김나나', '내과')
(503, '오무리', '심장')
(505, '코리아', '성형')
1. 간호사 정보 추가
2. 간호사 목록 조회
3. 간호사 정보 삭제
4. 이전 메뉴로 돌아가기
'파이썬' 카테고리의 다른 글
37. 크롤링과 스크레이핑 (0) | 2024.05.20 |
---|---|
27. 재귀 호출 (0) | 2024.03.29 |
26. 과제-DB(sql)를 이용한 단어장 만들기 (0) | 2024.03.28 |
25. 영단어 만들기(기능 추가) 과제 (1) | 2024.03.23 |
24. 디렉토리 관리 프로그램 & 과제 (0) | 2024.03.22 |