Project C++: Aplikasi Pendataan Pasien Klinik dengan File Handling

Project C++: Aplikasi Pendataan Pasien Klinik dengan File Handling

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

  1. Code::BlocksΒ (IDE untuk C++)
  2. Compiler MinGWΒ (sudah include di Code::Blocks)
  3. 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)

cpp
#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)

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)

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

  1. Buka Code::BlocksΒ β†’ Create new project (Console application)
  2. Tambahkan 3 fileΒ (main.cpp,Β pasien.h,Β pasien.cpp)
  3. Build and RunΒ (F9)


Kesimpulan

Dengan revisi ini, aplikasi sekarang memiliki:

βœ” Fungsi CRUD yang lengkap
βœ” Penyimpanan data persisten
βœ” Antarmuka yang lebih baik

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *