initial commit
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
# 🏥 Sistem Informasi Rumah Sakit Jaya Abadi (OOP Implementation)
|
||||
|
||||
Program CLI interaktif berbasis Python yang mengimplementasikan konsep dasar **Object-Oriented Programming (OOP)** untuk pengelolaan alur operasional rumah sakit, mulai dari pendaftaran pasien, penjadwalan janji temu, pemeriksaan dokter, tindakan keperawatan, hingga pencatatan rekam medis.
|
||||
|
||||
---
|
||||
|
||||
## 📌 Penerapan Konsep OOP
|
||||
|
||||
### 1. Pewarisan (Inheritance)
|
||||
* **Superclass**: `Employee`
|
||||
* Menyimpan atribut umum pegawai (`employee_id`, `name`, `age`, `position`, `status`, `birth_date`, `hourly_salary`) dan method dasar (`total_salary()`, `display_info()`, `info_company()`).
|
||||
* **Subclass**:
|
||||
1. `Receptionist`: Menangani registrasi pasien dan pengaturan jadwal temu dengan dokter.
|
||||
2. `Doctor`: Melakukan diagnosis, memberikan resep obat, dan mengatur jadwal praktek.
|
||||
3. `Nurse`: Melakukan pemeriksaan awal fisik, pemberian obat sesuai resep, dan pembaruan rekam medis.
|
||||
|
||||
---
|
||||
|
||||
### 2. Enkapsulasi (Encapsulation)
|
||||
Semua atribut internal pada class `Pasien`, `Employee`, dan `Doctor` dijadikan **private** (menggunakan prefix `__`) untuk melindungi integritas data. Akses data dikontrol menggunakan dekorator `@property` (Getter) dan `@<property>.setter` (Setter):
|
||||
* Validasi nilai numerik (seperti umur dan gaji tidak boleh negatif).
|
||||
* Menjaga keamanan data sensitif rekam medis pasien.
|
||||
|
||||
---
|
||||
|
||||
### 3. Polimorfisme & Method Overriding
|
||||
Method dari Superclass di-override oleh Subclass sesuai kebutuhan spesifik:
|
||||
* **`total_salary()` pada `Doctor`**: Meng-override perhitungan gaji dasar `Employee` dengan menambahkan tunjangan spesialis medis (`__tunjangan_spesialis`).
|
||||
* **`display_info()` pada Seluruh Subclass**: Menyesuaikan tampilan informasi sesuai peran dan spesialisasi masing-masing entitas pegawai (`Receptionist`, `Doctor`, `Nurse`).
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Diagram Kelas (Class Diagram)
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Pasien {
|
||||
-str __nama
|
||||
-str __id_pasien
|
||||
-str __birth_date
|
||||
-str __alamat
|
||||
-str __telp
|
||||
-str __keluhan
|
||||
-bool __bpjs
|
||||
-int __no_antrian
|
||||
-str __dokter
|
||||
-str __diagnosis
|
||||
-str __resep
|
||||
-str __obat
|
||||
-str __dosis
|
||||
-str __catatan
|
||||
-str __status
|
||||
+get_info()
|
||||
+get_rekam_medis()
|
||||
}
|
||||
|
||||
class Employee {
|
||||
+str company$
|
||||
+int total_employee$
|
||||
+int working_hours
|
||||
-str __employee_id
|
||||
-str __name
|
||||
-int __age
|
||||
-str __position
|
||||
-str __status
|
||||
-str __birth_date
|
||||
-int __hourly_salary
|
||||
+total_salary() int
|
||||
+display_info()
|
||||
+info_company()$
|
||||
}
|
||||
|
||||
class Receptionist {
|
||||
+int antrian_counter$
|
||||
+display_info()
|
||||
+register_patient(pasien)
|
||||
+manage_appointment(pasien, dokter, waktu)
|
||||
}
|
||||
|
||||
class Doctor {
|
||||
-int __tunjangan_spesialis
|
||||
+total_salary() int
|
||||
+display_info()
|
||||
+diagnose_patient(pasien, diagnosis, resep)
|
||||
+set_schedule(hari, jam_mulai, jam_selesai)
|
||||
}
|
||||
|
||||
class Nurse {
|
||||
+display_info()
|
||||
+examine_patient(pasien)
|
||||
+give_medicine(pasien, obat, dosis)
|
||||
+update_medical_record(pasien, catatan)
|
||||
}
|
||||
|
||||
Employee <|-- Receptionist : Mewarisi
|
||||
Employee <|-- Doctor : Mewarisi
|
||||
Employee <|-- Nurse : Mewarisi
|
||||
Receptionist ..> Pasien : Mendaftarkan
|
||||
Doctor ..> Pasien : Mendiagnosis
|
||||
Nurse ..> Pasien : Merawat
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Fitur dan Alur Sistem
|
||||
|
||||
1. **Menu Pasien**:
|
||||
* Registrasi data diri pasien baru.
|
||||
* Melihat daftar semua pasien.
|
||||
* Melihat detail informasi profil pasien.
|
||||
* Memeriksa riwayat rekam medis lengkap.
|
||||
2. **Menu Receptionist**:
|
||||
* Melihat info & data receptionist.
|
||||
* Mendaftarkan pasien & menerbitkan nomor antrean.
|
||||
* Menjadwalkan janji temu pasien dengan dokter spesialis.
|
||||
3. **Menu Dokter**:
|
||||
* Melihat info & jadwal dokter.
|
||||
* Melakukan pemeriksaan, penetapan diagnosis, dan peresepan obat.
|
||||
* Menetapkan jadwal praktek klinik dokter.
|
||||
4. **Menu Perawat**:
|
||||
* Melihat info tenaga perawat.
|
||||
* Melakukan pemeriksaan awal (vital sign/kondisi fisik).
|
||||
* Memberikan obat kepada pasien sesuai resep dokter.
|
||||
* Memperbarui catatan akhir pada rekam medis pasien.
|
||||
5. **Info Perusahaan**:
|
||||
* Menampilkan informasi umum instansi rumah sakit dan total pegawai aktif.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Cara Menjalankan Program
|
||||
|
||||
Pastikan Python 3 telah terpasang di sistem Anda.
|
||||
|
||||
1. Buka terminal pada folder proyek:
|
||||
```bash
|
||||
cd /home/matthewflrnt/study-archived/semester-3/oop-task/oop-rumahsakit
|
||||
```
|
||||
2. Jalankan script utama:
|
||||
```bash
|
||||
python3 main.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Ringkasan Jawaban Tugas OOP
|
||||
|
||||
1. **Pewarisan Superclass & Subclass**:
|
||||
* **Superclass**: `Employee`
|
||||
* **Subclass**: `Receptionist`, `Doctor`, `Nurse`
|
||||
2. **Atribut dan Method Spesifik**:
|
||||
* Diturunkan dari Superclass: `employee_id`, `name`, `age`, `position`, `status`, `birth_date`, `hourly_salary`, method `total_salary()`, dan `display_info()`.
|
||||
* Khusus Subclass:
|
||||
* `Receptionist`: `register_patient()`, `manage_appointment()`
|
||||
* `Doctor`: `__tunjangan_spesialis`, `diagnose_patient()`, `set_schedule()`
|
||||
* `Nurse`: `examine_patient()`, `give_medicine()`, `update_medical_record()`
|
||||
3. **Penerapan Method Overriding**:
|
||||
* `Doctor.total_salary()` meng-override perhitungan gaji dasar untuk menambahkan tunjangan spesialis.
|
||||
* `Receptionist.display_info()`, `Doctor.display_info()`, dan `Nurse.display_info()` meng-override method cetak info untuk menampilkan detail peran masing-masing.
|
||||
4. **Enkapsulasi**:
|
||||
* Semua variabel instance private (`__attribute`) dengan getter dan setter menggunakan properti `@property`.
|
||||
Reference in New Issue
Block a user