sistem-parkir

#include <iostream>
#include <string>

using namespace std;

const int MAX_KENDARAAN = 100;         // Maksimal kendaraan yang bisa ditampung
const double MOTORCYCLE_RATE = 2000.0; // Biaya parkir per jam untuk sepeda motor
const double CAR_RATE = 5000.0;        // Biaya parkir per jam untuk mobil

struct Waktu {
    int jam;
    int menit;
};

struct Kendaraan {
    string plat;
    string jenis;
    Waktu jamMasuk;
    Waktu jamKeluar;
};

Kendaraan kendaraanList[MAX_KENDARAAN];
int jumlahKendaraan = 0;

void tambahKendaraan() {
    if (jumlahKendaraan >= MAX_KENDARAAN) {
        cout << "Kapasitas parkir penuh!" << endl;
        return;
    }

    Kendaraan k;
    cout << "Masukkan plat kendaraan: ";
    cin.ignore();
    getline(cin, k.plat);
    cout << "Masukkan jenis kendaraan (motor/mobil): ";
    cin >> k.jenis;
    cout << "Masukkan jam masuk (jam menit): ";
    cin >> k.jamMasuk.jam >> k.jamMasuk.menit;
    cout << "Masukkan jam keluar (jam menit): ";
    cin >> k.jamKeluar.jam >> k.jamKeluar.menit;

    kendaraanList[jumlahKendaraan++] = k;
    cout << "Kendaraan berhasil ditambahkan!" << endl;
}

double hitungLamaParkir(Waktu masuk, Waktu keluar) {
    int totalMenitMasuk = masuk.jam * 60 + masuk.menit;
    int totalMenitKeluar = keluar.jam * 60 + keluar.menit;
    int lamaMenit = totalMenitKeluar - totalMenitMasuk;
    return lamaMenit / 60.0; // Mengembalikan lama parkir dalam jam
}

void hitungBiaya() {
    string plat;
    cout << "Masukkan plat kendaraan yang akan dihitung biayanya: ";
    cin.ignore();
    getline(cin, plat);

    for (int i = 0; i < jumlahKendaraan; ++i) {
        if (kendaraanList[i].plat == plat) {
            double lamaParkir = hitungLamaParkir(kendaraanList[i].jamMasuk, kendaraanList[i].jamKeluar);
            double biaya = 0.0;

            if (kendaraanList[i].jenis == "motor") {
                biaya = lamaParkir * MOTORCYCLE_RATE;
            } else if (kendaraanList[i].jenis == "mobil") {
                biaya = lamaParkir * CAR_RATE;
            } else {
                cout << "Jenis kendaraan tidak valid!" << endl;
                return;
            }

            cout << "Biaya parkir untuk kendaraan dengan plat " << plat << " adalah: " << biaya << " rupiah." << endl;
            return;
        }
    }
    cout << "Kendaraan dengan plat " << plat << " tidak ditemukan!" << endl;
}

void kendaraanKeluar() {
    string plat;
    cout << "Masukkan plat kendaraan yang akan keluar: ";
    cin.ignore();
    getline(cin, plat);

    for (int i = 0; i < jumlahKendaraan; ++i) {
        if (kendaraanList[i].plat == plat) {
            // Menggeser semua elemen setelah kendaraan yang keluar
            for (int j = i; j < jumlahKendaraan - 1; ++j) {
                kendaraanList[j] = kendaraanList[j + 1];
            }
            --jumlahKendaraan;
            cout << "Kendaraan dengan plat " << plat << " telah keluar dan dihapus dari daftar." << endl;
            return;
        }
    }
    cout << "Kendaraan dengan plat " << plat << " tidak ditemukan!" << endl;
}

void tampilkanKendaraan() {
    cout << "Daftar kendaraan yang parkir:" << endl;
    for (int i = 0; i < jumlahKendaraan; ++i) {
        cout << "Plat: " << kendaraanList[i].plat << ", Jenis: " << kendaraanList[i].jenis
             << ", Jam Masuk: " << kendaraanList[i].jamMasuk.jam << ":" << (kendaraanList[i].jamMasuk.menit < 10 ? "0" : "") << kendaraanList[i].jamMasuk.menit
             << ", Jam Keluar: " << kendaraanList[i].jamKeluar.jam << ":" << (kendaraanList[i].jamKeluar.menit < 10 ? "0" : "") << kendaraanList[i].jamKeluar.menit << endl;
    }
}

void menu() {
    int pilihan;
    do {
        cout << "\nMenu Sistem Parkir" << endl;
        cout << "1. Tambah Kendaraan" << endl;
        cout << "2. Hitung Biaya Parkir" << endl;
        cout << "3. Kendaraan Keluar" << endl;
        cout << "4. Tampilkan Kendaraan" << endl;
        cout << "5. Keluar" << endl;
        cout << "Pilih menu: ";
        cin >> pilihan;

        switch (pilihan) {
            case 1:
                tambahKendaraan();
                break;
            case 2:
                hitungBiaya();
                break;
            case 3:
                kendaraanKeluar();
                break;
            case 4:
                tampilkanKendaraan();
                break;
            case 5:
                cout << "Terima kasih telah menggunakan sistem parkir." << endl;
                break;
            default:
                cout << "Pilihan tidak valid!" << endl;
        }
    } while (pilihan != 5);
}

int main() {
    menu();
    return 0;
}

Berikut adalah contoh cara menjalankan program, termasuk input dan output yang diharapkan:

Contoh Penggunaan Program

Menjalankan Program

Saat Anda menjalankan program, Anda akan melihat menu utama seperti berikut:

Menu Sistem Parkir
1. Tambah Kendaraan
2. Hitung Biaya Parkir
3. Kendaraan Keluar
4. Tampilkan Kendaraan
5. Keluar
Pilih menu: 

Contoh Menambahkan Kendaraan

Misalkan Anda memilih opsi 1 untuk menambah kendaraan:

Pilih menu: 1
Masukkan plat kendaraan: B 1234 ABC
Masukkan jenis kendaraan (motor/mobil): mobil
Masukkan jam masuk (jam menit): 10 30
Masukkan jam keluar (jam menit): 12 45
Kendaraan berhasil ditambahkan!

Contoh Menghitung Biaya Parkir

Kemudian, Anda memilih opsi 2 untuk menghitung biaya parkir:

Pilih menu: 2
Masukkan plat kendaraan yang akan dihitung biayanya: B 1234 ABC
Biaya parkir untuk kendaraan dengan plat B 1234 ABC adalah: 11000 rupiah.

Contoh Kendaraan Keluar

Jika Anda ingin mengeluarkan kendaraan, pilih opsi 3:

Pilih menu: 3
Masukkan plat kendaraan yang akan keluar: B 1234 ABC
Kendaraan dengan plat B 1234 ABC telah keluar dan dihapus dari daftar.

Contoh Menampilkan Daftar Kendaraan

Untuk menampilkan daftar kendaraan yang sedang parkir, pilih opsi 4:

Pilih menu: 4
Daftar kendaraan yang parkir:

(daftar kendaraan akan kosong jika semua kendaraan telah keluar)

Keluar dari Program

Untuk keluar dari program, pilih opsi 5:

Pilih menu: 5
Terima kasih telah menggunakan sistem parkir.

Penjelasan Contoh Perhitungan Biaya Parkir

  1. Menambah Kendaraan
  • Plat kendaraan: B 1234 ABC
  • Jenis kendaraan: mobil
  • Jam masuk: 10:30
  • Jam keluar: 12:45
  1. Menghitung Lama Parkir
  • Jam masuk: 10:30 = 10 * 60 + 30 = 630 menit
  • Jam keluar: 12:45 = 12 * 60 + 45 = 765 menit
  • Lama parkir: 765 – 630 = 135 menit = 135 / 60 = 2.25 jam
  1. Menghitung Biaya Parkir
  • Tarif parkir mobil: Rp 5000 per jam
  • Lama parkir: 2.25 jam
  • Biaya parkir: 2.25 * 5000 = Rp 11,250

Catatan: Program ini membulatkan biaya parkir ke bawah jika hasil kali durasi parkir dengan tarif tidak menghasilkan angka bulat. Anda dapat menyesuaikan logika sesuai kebutuhan.

Dengan contoh input dan output di atas, Anda bisa melihat bagaimana program berfungsi dalam skenario nyata.

Penjelasan Per Baris

Berikut adalah penjelasan untuk setiap bagian dari kode program sistem parkir:

#include <iostream>
#include <string>

using namespace std;
  • #include <iostream>: Mengimpor library standar C++ untuk input dan output.
  • #include <string>: Mengimpor library untuk menggunakan tipe data string.
  • using namespace std;: Memungkinkan penggunaan elemen dari namespace std tanpa perlu menambahkan prefix std::.
const int MAX_KENDARAAN = 100;         // Maksimal kendaraan yang bisa ditampung
const double MOTORCYCLE_RATE = 2000.0; // Biaya parkir per jam untuk sepeda motor
const double CAR_RATE = 5000.0;        // Biaya parkir per jam untuk mobil
  • Mendefinisikan konstanta untuk batas maksimum kendaraan yang bisa ditampung serta tarif parkir untuk sepeda motor dan mobil.
struct Waktu {
    int jam;
    int menit;
};
  • Mendefinisikan struktur Waktu untuk menyimpan data waktu berupa jam dan menit.
struct Kendaraan {
    string plat;
    string jenis;
    Waktu jamMasuk;
    Waktu jamKeluar;
};
  • Mendefinisikan struktur Kendaraan untuk menyimpan data kendaraan termasuk plat, jenis, jam masuk, dan jam keluar.
Kendaraan kendaraanList[MAX_KENDARAAN];
int jumlahKendaraan = 0;
  • Mendefinisikan array statis kendaraanList dengan kapasitas MAX_KENDARAAN untuk menyimpan data kendaraan.
  • Mendefinisikan variabel jumlahKendaraan untuk melacak jumlah kendaraan yang saat ini parkir.
void tambahKendaraan() {
    if (jumlahKendaraan >= MAX_KENDARAAN) {
        cout << "Kapasitas parkir penuh!" << endl;
        return;
    }
  • Fungsi tambahKendaraan untuk menambah kendaraan baru. Mengecek apakah kapasitas parkir sudah penuh.
    Kendaraan k;
    cout << "Masukkan plat kendaraan: ";
    cin.ignore();
    getline(cin, k.plat);
    cout << "Masukkan jenis kendaraan (motor/mobil): ";
    cin >> k.jenis;
    cout << "Masukkan jam masuk (jam menit): ";
    cin >> k.jamMasuk.jam >> k.jamMasuk.menit;
    cout << "Masukkan jam keluar (jam menit): ";
    cin >> k.jamKeluar.jam >> k.jamKeluar.menit;
  • Mengumpulkan data kendaraan dari input pengguna. cin.ignore() digunakan untuk mengabaikan karakter newline dari input sebelumnya agar getline dapat bekerja dengan benar.
    kendaraanList[jumlahKendaraan++] = k;
    cout << "Kendaraan berhasil ditambahkan!" << endl;
}
  • Menambahkan kendaraan ke dalam kendaraanList dan menambah jumlahKendaraan setelah data kendaraan berhasil dimasukkan.
double hitungLamaParkir(Waktu masuk, Waktu keluar) {
    int totalMenitMasuk = masuk.jam * 60 + masuk.menit;
    int totalMenitKeluar = keluar.jam * 60 + keluar.menit;
    int lamaMenit = totalMenitKeluar - totalMenitMasuk;
    return lamaMenit / 60.0; // Mengembalikan lama parkir dalam jam
}
  • Fungsi hitungLamaParkir untuk menghitung durasi parkir dalam jam dengan mengubah waktu masuk dan keluar menjadi menit dan menghitung selisihnya.
void hitungBiaya() {
    string plat;
    cout << "Masukkan plat kendaraan yang akan dihitung biayanya: ";
    cin.ignore();
    getline(cin, plat);
  • Fungsi hitungBiaya untuk menghitung biaya parkir kendaraan berdasarkan plat nomor yang dimasukkan pengguna.
    for (int i = 0; i < jumlahKendaraan; ++i) {
        if (kendaraanList[i].plat == plat) {
            double lamaParkir = hitungLamaParkir(kendaraanList[i].jamMasuk, kendaraanList[i].jamKeluar);
            double biaya = 0.0;

            if (kendaraanList[i].jenis == "motor") {
                biaya = lamaParkir * MOTORCYCLE_RATE;
            } else if (kendaraanList[i].jenis == "mobil") {
                biaya = lamaParkir * CAR_RATE;
            } else {
                cout << "Jenis kendaraan tidak valid!" << endl;
                return;
            }
  • Mencari kendaraan dengan plat yang cocok, menghitung lama parkir, dan menentukan biaya parkir berdasarkan jenis kendaraan.
            cout << "Biaya parkir untuk kendaraan dengan plat " << plat << " adalah: " << biaya << " rupiah." << endl;
            return;
        }
    }
    cout << "Kendaraan dengan plat " << plat << " tidak ditemukan!" << endl;
}
  • Menampilkan biaya parkir atau pesan jika kendaraan tidak ditemukan.
void kendaraanKeluar() {
    string plat;
    cout << "Masukkan plat kendaraan yang akan keluar: ";
    cin.ignore();
    getline(cin, plat);
  • Fungsi kendaraanKeluar untuk menghapus kendaraan dari daftar parkir berdasarkan plat nomor.
    for (int i = 0; i < jumlahKendaraan; ++i) {
        if (kendaraanList[i].plat == plat) {
            for (int j = i; j < jumlahKendaraan - 1; ++j) {
                kendaraanList[j] = kendaraanList[j + 1];
            }
            --jumlahKendaraan;
            cout << "Kendaraan dengan plat " << plat << " telah keluar dan dihapus dari daftar." << endl;
            return;
        }
    }
    cout << "Kendaraan dengan plat " << plat << " tidak ditemukan!" << endl;
}
  • Menggeser elemen array untuk menghapus kendaraan dan mengurangi jumlahKendaraan.
void tampilkanKendaraan() {
    cout << "Daftar kendaraan yang parkir:" << endl;
    for (int i = 0; i < jumlahKendaraan; ++i) {
        cout << "Plat: " << kendaraanList[i].plat << ", Jenis: " << kendaraanList[i].jenis
             << ", Jam Masuk: " << kendaraanList[i].jamMasuk.jam << ":" << (kendaraanList[i].jamMasuk.menit < 10 ? "0" : "") << kendaraanList[i].jamMasuk.menit
             << ", Jam Keluar: " << kendaraanList[i].jamKeluar.jam << ":" << (kendaraanList[i].jamKeluar.menit < 10 ? "0" : "") << kendaraanList[i].jamKeluar.menit << endl;
    }
}
  • Fungsi tampilkanKendaraan untuk menampilkan daftar kendaraan yang sedang parkir.
void menu() {
    int pilihan;
    do {
        cout << "\nMenu Sistem Parkir" << endl;
        cout << "1. Tambah Kendaraan" << endl;
        cout << "2. Hitung Biaya Parkir" << endl;
        cout << "3. Kendaraan Keluar" << endl;
        cout << "4. Tampilkan Kendaraan" << endl;
        cout << "5. Keluar" << endl;
        cout << "Pilih menu: ";
        cin >> pilihan;
  • Fungsi menu untuk menampilkan menu utama dan menerima input pilihan pengguna.
        switch (pilihan) {
            case 1:
                tambahKendaraan();
                break;
            case 2:
                hitungBiaya();
                break;
            case 3:
                kendaraanKeluar();
                break;
            case 4:
                tampilkanKendaraan();
                break;
            case 5:
                cout << "Terima kasih telah menggunakan sistem parkir." << endl;
                break;
            default:
                cout << "Pilihan tidak valid!" << endl;
        }
    } while (pilihan != 5);
}
  • Menangani setiap pilihan menu dengan memanggil fungsi yang sesuai.
int main() {
    menu();
    return 0;
}
  • Fungsi main untuk menjalankan fungsi menu dan memulai program.

Dengan penjelasan ini, setiap bagian kode seharusnya lebih jelas dalam hal fungsionalitas dan cara kerjanya.