Membangun Program Rental Mobil dengan C++

Pendahuluan: Mengapa C++ untuk Aplikasi Rental?

Pengembangan sistem manajemen rental, termasuk rental mobil, seringkali membutuhkan kinerja tinggi dan kontrol memori yang baik. C++ menawarkan fondasi yang kuat untuk membangun aplikasi yang efisien dan skalabel. Meskipun bahasa tingkat tinggi seperti Python atau Java populer untuk antarmuka web, inti logika bisnis (seperti perhitungan durasi sewa, manajemen inventaris mobil, dan validasi data) dapat diimplementasikan dengan cepat dan aman menggunakan C++.

Sebuah program rental mobil dasar memerlukan beberapa entitas utama: Mobil (dengan atribut seperti plat nomor, merek, model, status ketersediaan), Pelanggan, dan Transaksi Sewa. Dalam C++, kita akan menggunakan konsep Pemrograman Berorientasi Objek (OOP) seperti kelas dan objek untuk merepresentasikan entitas-entitas ini secara modular.

CAR Rental Representasi visual sederhana dari sistem rental mobil.

Struktur Kelas Dasar dalam C++

Implementasi OOP dimulai dengan mendefinisikan struktur data. Kita akan menggunakan kelas `Mobil` untuk menyimpan detail setiap kendaraan. Penggunaan enkapsulasi (private members) sangat penting untuk menjaga integritas data.

Contoh Kelas Mobil

#include <iostream>
#include <string>

class Mobil {
private:
    std::string platNomor;
    std::string merek;
    bool tersedia;
    double tarifHarian;

public:
    Mobil(std::string plat, std::string mrek, double tarif) 
        : platNomor(plat), merek(mrek), tersedia(true), tarifHarian(tarif) {}

    // Getter
    std::string getPlatNomor() const { return platNomor; }
    bool isTersedia() const { return tersedia; }
    double getTarif() const { return tarifHarian; }

    // Metode Aksi
    void tandaiDisewa() {
        if (tersedia) {
            tersedia = false;
            std::cout << "Mobil " << merek << " (" << platNomor << ") berhasil disewa.\n";
        } else {
            std::cout << "Mobil sedang tidak tersedia.\n";
        }
    }

    void kembalikan() {
        tersedia = true;
        std::cout << "Mobil " << merek << " telah dikembalikan.\n";
    }
};

Dalam contoh di atas, kita mendefinisikan sebuah konstruktor dan beberapa metode publik untuk berinteraksi dengan data internal mobil. Status `tersedia` sangat krusial dalam sistem rental.

Logika Perhitungan Biaya Sewa

Bagian paling penting dari program rental adalah perhitungan biaya. Biaya sewa biasanya dihitung berdasarkan durasi (dalam hari) dikalikan tarif harian. Untuk membuat sistem ini lebih realistis, kita bisa menambahkan kelas `Transaksi` yang merekam waktu mulai dan waktu selesai.

Karena C++ standar (tanpa pustaka tambahan seperti Boost Date_Time) perhitungan tanggal bisa menjadi kompleks, untuk implementasi dasar, kita seringkali meminta input jumlah hari sewa secara manual.

Contoh Fungsi Perhitungan

double hitungBiaya(int hariSewa, double tarif) {
    if (hariSewa <= 0) return 0.0;
    
    double total = hariSewa * tarif;
    
    // Contoh penerapan diskon sederhana
    if (hariSewa >= 7) {
        total = total * 0.90; // Diskon 10% untuk sewa seminggu
        std::cout << "(Diskon 10% diterapkan)\n";
    }
    return total;
}

Penggunaan fungsi terpisah seperti `hitungBiaya` memastikan bahwa logika perhitungan terisolasi, membuatnya mudah diuji dan dimodifikasi tanpa mengganggu struktur kelas utama.

Manajemen Inventaris dan Antarmuka Konsol

Untuk mengelola banyak mobil, kita biasanya menggunakan `std::vector<Mobil>`. Ini memungkinkan kita untuk menyimpan koleksi objek mobil dan melakukan iterasi atau pencarian berdasarkan plat nomor atau ketersediaan. Karena kita fokus pada program dasar C++, antarmuka pengguna (UI) seringkali berupa antarmuka baris perintah (CLI).

Dalam loop utama program, pengguna akan disajikan pilihan: Lihat Daftar Mobil, Sewa Mobil, Kembalikan Mobil, atau Keluar. Setiap pilihan akan memicu pemanggilan metode yang sesuai pada objek yang relevan dalam vektor inventaris. Kecepatan eksekusi C++ memastikan bahwa pencarian dalam inventaris besar tetap responsif, bahkan saat dijalankan dari lingkungan konsol yang ringan.