Project C++: Aplikasi CLI Pendataan Pasien Klinik dengan File Handling
Pengenalan Project
Aplikasi ini merupakan sistem pendataan pasien klinik sederhana dengan fitur:
- Tambah data pasien
- Lihat semua pasien
- Cari pasien berdasarkan ID
- Update data pasien
- Hapus data pasien
- Penyimpanan data dalam file teksΒ (
pasien.txt
)
Tools yang Dibutuhkan
- Code::BlocksΒ (IDE untuk C++)
- Compiler MinGWΒ (sudah include di Code::Blocks)
- Text EditorΒ (opsional)
Struktur Program
π Project/ βββ π main.cpp # Program utama βββ π pasien.h # Header class Pasien βββ π pasien.cpp # Implementasi class Pasien βββ π pasien.txt # File penyimpanan data
Implementasi Kode Lengkap
File Header (pasien.h)
#ifndef PASIEN_H #define PASIEN_H #include <string> #include <vector> class Pasien { public: std::string id; std::string nama; std::string alamat; std::string penyakit; int umur; // Method publik void tambahPasien(); void lihatPasien(); void cariPasien(const std::string& idCari); void updatePasien(const std::string& idUpdate); void hapusPasien(const std::string& idHapus); void simpanKeFile(); void bacaDariFile(); private: std::vector<Pasien> daftarPasien; // Penyimpanan sementara }; #endif
File Implementasi (pasien.cpp)
#include "pasien.h" #include <iostream> #include <fstream> #include <iomanip> #include <algorithm> // Menambahkan data pasien baru void Pasien::tambahPasien() { Pasien p; std::cout << "\n=== TAMBAH PASIEN ==="; std::cout << "\nID Pasien: "; std::cin >> p.id; std::cin.ignore(); std::cout << "Nama: "; getline(std::cin, p.nama); std::cout << "Alamat: "; getline(std::cin, p.alamat); std::cout << "Penyakit: "; getline(std::cin, p.penyakit); std::cout << "Umur: "; std::cin >> p.umur; daftarPasien.push_back(p); simpanKeFile(); std::cout << "\nData berhasil ditambahkan!\n"; } // Menampilkan semua pasien dalam format tabel void Pasien::lihatPasien() { bacaDariFile(); std::cout << "\n=== DAFTAR PASIEN ==="; std::cout << "\n" << std::left << std::setw(10) << "ID" << std::setw(25) << "Nama" << std::setw(10) << "Umur" << std::setw(20) << "Penyakit" << std::setw(30) << "Alamat" << "\n"; for (const auto& p : daftarPasien) { std::cout << std::setw(10) << p.id << std::setw(25) << p.nama << std::setw(10) << p.umur << std::setw(20) << p.penyakit << std::setw(30) << p.alamat << "\n"; } } // Mencari pasien berdasarkan ID void Pasien::cariPasien(const std::string& idCari) { bacaDariFile(); bool ditemukan = false; for (const auto& p : daftarPasien) { if (p.id == idCari) { std::cout << "\n=== HASIL PENCARIAN ==="; std::cout << "\nID: " << p.id << "\nNama: " << p.nama << "\nUmur: " << p.umur << "\nPenyakit: " << p.penyakit << "\nAlamat: " << p.alamat << "\n"; ditemukan = true; break; } } if (!ditemukan) { std::cout << "\nPasien dengan ID '" << idCari << "' tidak ditemukan!\n"; } } // Memperbarui data pasien void Pasien::updatePasien(const std::string& idUpdate) { bacaDariFile(); bool ditemukan = false; for (auto& p : daftarPasien) { if (p.id == idUpdate) { std::cin.ignore(); std::cout << "\nMasukkan data baru:"; std::cout << "\nNama: "; getline(std::cin, p.nama); std::cout << "Alamat: "; getline(std::cin, p.alamat); std::cout << "Penyakit: "; getline(std::cin, p.penyakit); std::cout << "Umur: "; std::cin >> p.umur; simpanKeFile(); std::cout << "\nData berhasil diperbarui!\n"; ditemukan = true; break; } } if (!ditemukan) { std::cout << "\nPasien dengan ID '" << idUpdate << "' tidak ditemukan!\n"; } } // Menghapus data pasien void Pasien::hapusPasien(const std::string& idHapus) { bacaDariFile(); auto it = std::remove_if(daftarPasien.begin(), daftarPasien.end(), [&idHapus](const Pasien& p) { return p.id == idHapus; }); if (it != daftarPasien.end()) { daftarPasien.erase(it, daftarPasien.end()); simpanKeFile(); std::cout << "\nData berhasil dihapus!\n"; } else { std::cout << "\nPasien dengan ID '" << idHapus << "' tidak ditemukan!\n"; } } // Menyimpan data ke file void Pasien::simpanKeFile() { std::ofstream file("pasien.txt"); for (const auto& p : daftarPasien) { file << p.id << "," << p.nama << "," << p.umur << "," << p.penyakit << "," << p.alamat << "\n"; } file.close(); } // Membaca data dari file void Pasien::bacaDariFile() { daftarPasien.clear(); std::ifstream file("pasien.txt"); std::string line; while (getline(file, line)) { Pasien p; size_t pos = 0; int kolom = 0; while ((pos = line.find(',')) != std::string::npos) { std::string token = line.substr(0, pos); switch (kolom) { case 0: p.id = token; break; case 1: p.nama = token; break; case 2: p.umur = std::stoi(token); break; case 3: p.penyakit = token; break; } line.erase(0, pos + 1); kolom++; } p.alamat = line; daftarPasien.push_back(p); } file.close(); }
Program Utama (main.cpp)
#include <iostream> #include "pasien.h" void tampilkanMenu() { std::cout << "\n=== SISTEM PENDATAAN PASIEN ==="; std::cout << "\n1. Tambah Pasien"; std::cout << "\n2. Lihat Semua Pasien"; std::cout << "\n3. Cari Pasien (Berdasarkan ID)"; std::cout << "\n4. Update Data Pasien"; std::cout << "\n5. Hapus Data Pasien"; std::cout << "\n6. Keluar"; std::cout << "\nPilih menu (1-6): "; } int main() { Pasien sistem; int pilihan; std::string id; do { tampilkanMenu(); std::cin >> pilihan; switch (pilihan) { case 1: sistem.tambahPasien(); break; case 2: sistem.lihatPasien(); break; case 3: std::cout << "Masukkan ID Pasien: "; std::cin >> id; sistem.cariPasien(id); break; case 4: std::cout << "Masukkan ID Pasien: "; std::cin >> id; sistem.updatePasien(id); break; case 5: std::cout << "Masukkan ID Pasien: "; std::cin >> id; sistem.hapusPasien(id); break; case 6: std::cout << "Terima kasih!\n"; break; default: std::cout << "Pilihan tidak valid!\n"; } } while (pilihan != 6); return 0; }
Cara Menjalankan
- Buka Code::BlocksΒ β Create new project (Console application)
- Tambahkan 3 fileΒ (
main.cpp
,Βpasien.h
,Βpasien.cpp
) - Build and RunΒ (F9)
Kesimpulan
Dengan revisi ini, aplikasi sekarang memiliki:
β Fungsi CRUD yang lengkap
β Penyimpanan data persisten
β Antarmuka yang lebih baik