Sistem Reservasi Tiket dengan C++

Sistem Reservasi Tiket dengan C++

Berikut adalah contoh implementasi sederhana Sistem Reservasi Tiket menggunakan C++. Sistem ini memungkinkan pengguna untuk:

  1. Melihat daftar tiket yang tersedia.
  2. Memesan tiket.
  3. Membatalkan tiket.
  4. Menampilkan daftar reservasi.

Kode Lengkap

#include <iostream>
#include <vector>
#include <string>
using namespace std;

// Struktur untuk menyimpan informasi tiket
struct Tiket {
    int id;
    string tujuan;
    double harga;
    bool tersedia;
};

// Daftar tiket awal
vector<Tiket> daftarTiket = {
    {1, "Jakarta - Bandung", 150000, true},
    {2, "Jakarta - Surabaya", 300000, true},
    {3, "Jakarta - Yogyakarta", 250000, true},
    {4, "Bandung - Bali", 500000, true},
    {5, "Surabaya - Lombok", 450000, true}
};

// Daftar reservasi
vector<Tiket> reservasi;

// Menampilkan daftar tiket
void tampilkanTiket() {
    cout << "\nDaftar Tiket Tersedia:\n";
    cout << "ID\tTujuan\t\t\tHarga\tStatus\n";
    for (const auto& tiket : daftarTiket) {
        cout << tiket.id << "\t" << tiket.tujuan << "\t" << tiket.harga << "\t";
        cout << (tiket.tersedia ? "Tersedia" : "Terpesan") << "\n";
    }
}

// Memesan tiket
void pesanTiket() {
    int id;
    cout << "\nMasukkan ID tiket yang ingin dipesan: ";
    cin >> id;

    for (auto& tiket : daftarTiket) {
        if (tiket.id == id) {
            if (tiket.tersedia) {
                tiket.tersedia = false;
                reservasi.push_back(tiket);
                cout << "Tiket dengan tujuan \"" << tiket.tujuan << "\" berhasil dipesan.\n";
                return;
            } else {
                cout << "Tiket ini sudah terpesan.\n";
                return;
            }
        }
    }
    cout << "ID tiket tidak ditemukan.\n";
}

// Membatalkan tiket
void batalkanTiket() {
    int id;
    cout << "\nMasukkan ID tiket yang ingin dibatalkan: ";
    cin >> id;

    for (auto& tiket : daftarTiket) {
        if (tiket.id == id && !tiket.tersedia) {
            tiket.tersedia = true;

            // Hapus tiket dari daftar reservasi
            for (auto it = reservasi.begin(); it != reservasi.end(); ++it) {
                if (it->id == id) {
                    reservasi.erase(it);
                    break;
                }
            }
            cout << "Tiket dengan tujuan \"" << tiket.tujuan << "\" berhasil dibatalkan.\n";
            return;
        }
    }
    cout << "ID tiket tidak ditemukan atau tiket belum dipesan.\n";
}

// Menampilkan daftar reservasi
void tampilkanReservasi() {
    cout << "\nDaftar Reservasi:\n";
    if (reservasi.empty()) {
        cout << "Tidak ada tiket yang dipesan.\n";
        return;
    }
    cout << "ID\tTujuan\t\t\tHarga\n";
    for (const auto& tiket : reservasi) {
        cout << tiket.id << "\t" << tiket.tujuan << "\t" << tiket.harga << "\n";
    }
}

// Menu utama
void menuUtama() {
    int pilihan;
    do {
        cout << "\n=== Sistem Reservasi Tiket ===\n";
        cout << "1. Lihat Daftar Tiket\n";
        cout << "2. Pesan Tiket\n";
        cout << "3. Batalkan Tiket\n";
        cout << "4. Lihat Reservasi\n";
        cout << "5. Keluar\n";
        cout << "Pilih opsi: ";
        cin >> pilihan;

        switch (pilihan) {
            case 1:
                tampilkanTiket();
                break;
            case 2:
                pesanTiket();
                break;
            case 3:
                batalkanTiket();
                break;
            case 4:
                tampilkanReservasi();
                break;
            case 5:
                cout << "Terima kasih telah menggunakan sistem reservasi tiket!\n";
                break;
            default:
                cout << "Pilihan tidak valid. Coba lagi.\n";
                break;
        }
    } while (pilihan != 5);
}

// Program utama
int main() {
    menuUtama();
    return 0;
}

Penjelasan Kode

  1. Struktur Tiket
    • id: Identifikasi unik untuk setiap tiket.
    • tujuan: Informasi tujuan perjalanan.
    • harga: Harga tiket.
    • tersedia: Status apakah tiket tersedia atau sudah dipesan.
  2. Daftar Tiket dan Reservasi
    • daftarTiket: Berisi daftar tiket yang dapat dipesan.
    • reservasi: Menyimpan daftar tiket yang telah dipesan.
  3. Fungsi-Fungsi Utama
    • tampilkanTiket(): Menampilkan semua tiket beserta statusnya.
    • pesanTiket(): Memesan tiket berdasarkan ID. Jika tiket sudah terpesan, akan menampilkan pesan error.
    • batalkanTiket(): Membatalkan reservasi tiket dan mengembalikan status tiket menjadi tersedia.
    • tampilkanReservasi(): Menampilkan tiket yang telah dipesan oleh pengguna.
  4. Menu Utama
    • Menyediakan antarmuka untuk mengakses semua fitur sistem.

Contoh Output

=== Sistem Reservasi Tiket ===
1. Lihat Daftar Tiket
2. Pesan Tiket
3. Batalkan Tiket
4. Lihat Reservasi
5. Keluar
Pilih opsi: 1

Daftar Tiket Tersedia:
ID      Tujuan                  Harga   Status
1       Jakarta - Bandung       150000  Tersedia
2       Jakarta - Surabaya      300000  Tersedia
3       Jakarta - Yogyakarta    250000  Tersedia
4       Bandung - Bali          500000  Tersedia
5       Surabaya - Lombok       450000  Tersedia

=== Sistem Reservasi Tiket ===
1. Lihat Daftar Tiket
2. Pesan Tiket
3. Batalkan Tiket
4. Lihat Reservasi
5. Keluar
Pilih opsi: 2

Masukkan ID tiket yang ingin dipesan: 3
Tiket dengan tujuan "Jakarta - Yogyakarta" berhasil dipesan.

=== Sistem Reservasi Tiket ===
1. Lihat Daftar Tiket
2. Pesan Tiket
3. Batalkan Tiket
4. Lihat Reservasi
5. Keluar
Pilih opsi: 4

Daftar Reservasi:
ID      Tujuan                  Harga
3       Jakarta - Yogyakarta    250000

Fitur Tambahan

  • Pencarian Tiket: Tambahkan fitur untuk mencari tiket berdasarkan tujuan atau harga tertentu.
  • Penyimpanan Data: Gunakan file (CSV atau JSON) untuk menyimpan data tiket sehingga dapat diakses kembali saat program dijalankan ulang.
  • Validasi Input: Tangani kasus input yang salah seperti memasukkan string alih-alih angka.

Jika Anda ingin pengembangan lebih lanjut, beri tahu saya! 😊

Leave a Reply

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