Untitled
unknown
plain_text
a year ago
10 kB
15
Indexable
#include <iostream> #include <string> #include <vector> #include <queue> #include <stack> #include <algorithm> #include <cstdlib> // Untuk fungsi rand() using namespace std; // Struktur data untuk kamar struct Kamar { int nomor; bool tersedia; string tipe; double harga; }; // Struktur data untuk pelanggan struct Pelanggan { string nama; int nomorKamar; }; // Deklarasi kelas untuk mengelola data kamar class Hotel { private: // Gunakan array satu dimensi untuk menyimpan data kamar Kamar* kamar; int jumlahKamar; // Gunakan linked list untuk menyimpan data pelanggan struct Node { Pelanggan data; Node* next; }; Node* headPelanggan; // Gunakan stack untuk menyimpan data antrian check-in stack<Pelanggan> antrianCheckin; // Gunakan queue untuk menyimpan data antrian check-out queue<Pelanggan> antrianCheckout; // Fungsi untuk inisialisasi kamar void inisialisasiKamar() { // Inisialisasi array kamar dengan data dummy for (int i = 0; i < jumlahKamar; i++) { kamar[i].nomor = i + 1; kamar[i].tersedia = true; kamar[i].tipe = "Standar"; kamar[i].harga = 500000; // Harga dummy } } public: // Konstruktor Hotel(int jumlahKamar) { this->jumlahKamar = jumlahKamar; kamar = new Kamar[jumlahKamar]; inisialisasiKamar(); headPelanggan = nullptr; } // Destruktor ~Hotel() { delete[] kamar; // Hapus linked list pelanggan Node* current = headPelanggan; while (current != nullptr) { Node* next = current->next; delete current; current = next; } } // Fungsi untuk menampilkan daftar kamar void tampilkanDaftarKamar() { cout << "----------------------------" << endl; cout << "Daftar Kamar" << endl; cout << "----------------------------" << endl; for (int i = 0; i < jumlahKamar; i++) { cout << "Kamar " << kamar[i].nomor << ": "; if (kamar[i].tersedia) { cout << "Tersedia"; } else { cout << "Tidak Tersedia"; } cout << " (Tipe: " << kamar[i].tipe << ", Harga: " << kamar[i].harga << ")" << endl; } } // Fungsi untuk melakukan pemesanan kamar void pesanKamar(const string& namaPelanggan) { // Cari kamar yang tersedia int nomorKamar = -1; for (int i = 0; i < jumlahKamar; i++) { if (kamar[i].tersedia) { nomorKamar = i; break; } } if (nomorKamar != -1) { // Jika kamar tersedia, lakukan pemesanan kamar[nomorKamar].tersedia = false; Pelanggan pelanggan = {namaPelanggan, nomorKamar + 1}; antrianCheckin.push(pelanggan); // Masukkan ke stack antrian check-in cout << "Kamar " << nomorKamar + 1 << " berhasil dipesan untuk " << namaPelanggan << endl; } else { // Jika tidak ada kamar yang tersedia, masukkan ke antrian tunggu cout << "Maaf, semua kamar sedang penuh. Anda akan dimasukkan ke antrian tunggu." << endl; Pelanggan pelanggan = {namaPelanggan, -1}; antrianCheckin.push(pelanggan); // Masukkan ke stack antrian check-in } } // Fungsi untuk melakukan check-in void checkIn() { if (!antrianCheckin.empty()) { Pelanggan pelanggan = antrianCheckin.top(); antrianCheckin.pop(); // Keluarkan dari stack // Cari kamar yang sesuai int nomorKamar = pelanggan.nomorKamar; if (nomorKamar != -1) { // Jika nomorKamar valid, masukkan ke linked list pelanggan Node* newNode = new Node; newNode->data = pelanggan; newNode->next = headPelanggan; headPelanggan = newNode; cout << "Selamat datang, " << pelanggan.nama << ". Kamar Anda adalah " << nomorKamar << endl; } else { // Jika nomorKamar tidak valid (antrian tunggu), beri tahu pelanggan cout << "Maaf, " << pelanggan.nama << ", kamar masih belum tersedia. Silakan tunggu." << endl; antrianCheckin.push(pelanggan); // Masukkan kembali ke stack } } else { cout << "Tidak ada pelanggan yang sedang menunggu check-in." << endl; } } // Fungsi untuk melakukan check-out void checkOut(const string& namaPelanggan) { Node* current = headPelanggan; Node* previous = nullptr; // Cari data pelanggan dalam linked list while (current != nullptr) { if (current->data.nama == namaPelanggan) { // Jika ditemukan, hapus dari linked list if (previous == nullptr) { headPelanggan = current->next; } else { previous->next = current->next; } int nomorKamar = current->data.nomorKamar; kamar[nomorKamar - 1].tersedia = true; // Set kamar sebagai tersedia antrianCheckout.push(current->data); // Masukkan ke queue antrian check-out delete current; cout << "Terima kasih, " << namaPelanggan << ". Kamar " << nomorKamar << " telah dikosongkan." << endl; return; } previous = current; current = current->next; } if (current == nullptr) { cout << "Pelanggan dengan nama " << namaPelanggan << " tidak ditemukan." << endl; } } // Fungsi untuk menampilkan daftar pelanggan yang sedang menginap void tampilkanDaftarPelanggan() { cout << "----------------------------" << endl; cout << "Daftar Pelanggan" << endl; cout << "----------------------------" << endl; Node* current = headPelanggan; if (current == nullptr) { cout << "Tidak ada pelanggan yang sedang menginap." << endl; } else { while (current != nullptr) { cout << "Nama: " << current->data.nama << ", Kamar: " << current->data.nomorKamar << endl; current = current->next; } } } // Fungsi untuk menampilkan antrian check-in void tampilkanAntrianCheckin() { cout << "----------------------------" << endl; cout << "Antrian Check-in" << endl; cout << "----------------------------" << endl; if (antrianCheckin.empty()) { cout << "Tidak ada pelanggan yang sedang menunggu check-in." << endl; } else { stack<Pelanggan> temp = antrianCheckin; while (!temp.empty()) { Pelanggan pelanggan = temp.top(); temp.pop(); cout << "Nama: " << pelanggan.nama << ", Kamar: " << pelanggan.nomorKamar << endl; } } } // Fungsi untuk menampilkan antrian check-out void tampilkanAntrianCheckout() { cout << "----------------------------" << endl; cout << "Antrian Check-out" << endl; cout << "----------------------------" << endl; if (antrianCheckout.empty()) { cout << "Tidak ada pelanggan yang sedang menunggu check-out." << endl; } else { queue<Pelanggan> temp = antrianCheckout; while (!temp.empty()) { Pelanggan pelanggan = temp.front(); temp.pop(); cout << "Nama: " << pelanggan.nama << ", Kamar: " << pelanggan.nomorKamar << endl; } } } }; int main() { // Inisialisasi hotel dengan jumlah kamar tertentu int jumlahKamar = 10; Hotel hotel(jumlahKamar); // Menu utama int pilihan; do { cout << "\n===== Sistem Pemesanan Kamar Hotel =====" << endl; cout << "1. Tampilkan Daftar Kamar" << endl; cout << "2. Pesan Kamar" << endl; cout << "3. Check-in" << endl; cout << "4. Check-out" << endl; cout << "5. Tampilkan Daftar Pelanggan" << endl; cout << "6. Tampilkan Antrian Check-in" << endl; cout << "7. Tampilkan Antrian Check-out" << endl; cout << "0. Keluar" << endl; cout << "Masukkan pilihan: "; cin >> pilihan; switch (pilihan) { case 1: hotel.tampilkanDaftarKamar(); break; case 2: { string namaPelanggan; cout << "Masukkan nama pelanggan: "; cin.ignore(); // Clear buffer getline(cin, namaPelanggan); hotel.pesanKamar(namaPelanggan); break; } case 3: hotel.checkIn(); break; case 4: { string namaPelanggan; cout << "Masukkan nama pelanggan: "; cin.ignore(); // Clear buffer getline(cin, namaPelanggan); hotel.checkOut(namaPelanggan); break; } case 5: hotel.tampilkanDaftarPelanggan(); break; case 6: hotel.tampilkanAntrianCheckin(); break; case 7: hotel.tampilkanAntrianCheckout(); break; case 0: cout << "Terima kasih!" << endl; break; default: cout << "Pilihan tidak valid. Silakan coba lagi." << endl; } } while (pilihan != 0); return 0; }
Editor is loading...
Leave a Comment