#include <iostream>
#include <string>
#include <cctype> // untuk toupper()
#include <iomanip> // untuk setprecision dan fixed
using namespace std;
// Struct untuk data kamar
struct Kamar {
char kode;
string tipe;
long harga;
};
// Struct untuk data penyewaan
struct Penyewaan {
string nama;
char kodeKamar;
int lamaMenginap;
Kamar kamar;
long totalBiaya;
bool dapatSouvenir;
};
// Deklarasi fungsi
void Garis();
void Judul();
void Ketentuan();
void TTQ();
void InfTarif();
Kamar Cek_TipeKamar(char kode);
long Cek_Harga(char kode);
string Cek_Souvenir(int lamaMenginap);
int main() {
// Data kamar
Kamar kamarA = {'A', "VVIP", 800000};
Kamar kamarB = {'B', "VIP", 700000};
Kamar kamarC = {'C', "EKONOMI", 600000};
// Inisialisasi variabel
Penyewaan data;
const long biayaAdmin = 200000;
// Tampilkan judul dan informasi
Judul();
Ketentuan();
TTQ();
// Input data dalam SATU BARIS
printf("\nNama Penyewa\t\t: \n");
printf("kode kamar(A/B/C)\t: \n");
printf("lama menginap\t\t: \n");
cin >> data.nama >> data.kodeKamar >> data.lamaMenginap;
// Tampilkan tabel tarif setelah input
InfTarif();
// Proses data
// Konversi kode ke uppercase untuk pengecekan
char kodeUpper = toupper(data.kodeKamar);
// Cek tipe kamar dan harga
data.kamar = Cek_TipeKamar(kodeUpper);
// Cek souvenir
data.dapatSouvenir = (data.lamaMenginap > 6);
// Hitung total biaya
data.totalBiaya = (data.kamar.harga * data.lamaMenginap) + biayaAdmin;
// Tampilkan hasil
cout << "\n";
Garis();
cout << "\nNama Penyewa\t\t: " << data.nama;
cout << "\nKode Kamar [A/B/C]\t: " << data.kodeKamar;
cout << "\nLama Menginap\t\t: " << data.lamaMenginap << " hari";
cout << "\nHarga Sewa\t\t: Rp. " << fixed << setprecision(2) << (double)data.kamar.harga;
cout << "\nTipe Kamar\t\t: " << data.kamar.tipe;
cout << "\nSouvenir\t\t: " << Cek_Souvenir(data.lamaMenginap);
cout << "\nAdministrasi\t\t: Rp. " << fixed << setprecision(2) << (double)biayaAdmin;
cout << "\nTotal Biaya\t\t: Rp. " << fixed << setprecision(2) << (double)data.totalBiaya;
cout << "\n";
Garis();
// Informasi developer
cout << "\nNama\t: Rendy Wicaksono";
cout << "\nEmail\t: rendywicaksono12@gmail.com\n";
return 0;
}
void Garis() {
cout << "------------------------------------------";
}
void Judul() {
Garis();
cout << "\nPENGINAPAN ORANG SANTAI\n";
Garis();
}
void Ketentuan() {
cout << "\nList Function\n";
Garis();
cout << "\n1. Function Garis()";
cout << "\n2. Function Judul()";
cout << "\n3. Function Ketentuan()";
cout << "\n4. Function TTQ()";
cout << "\n5. Function InfTarif()";
cout << "\n6. Function Cek_TipeKamar()";
cout << "\n7. Function Cek_Harga()";
cout << "\n8. Function Cek_Souvenir()\n";
Garis();
}
void TTQ() {
cout << "\nHarus bisa handle huruf besar dan kecil.";
cout << "\nHarus menggunakan Struct.\n";
Garis();
cout << "\nJika lama menginap lebih dari 6 hari maka mendapatkan souvenir Tumbler Besi";
cout << "\nBiaya admin 200.000";
cout << "\nTotal Bayar adalah (Harga dikali Lama Menginap) + Biaya Admin\n";
Garis();
}
void InfTarif() {
Garis();
cout << "\n| Kode | Tipe | Harga |\n";
Garis();
cout << "\n| A | VVIP | 800.000 |";
cout << "\n| B | VIP | 700.000 |";
cout << "\n| C | EKONOMI | 600.000 |\n";
}
Kamar Cek_TipeKamar(char kode) {
Kamar kamar;
switch(kode) {
case 'A':
kamar.kode = 'A';
kamar.tipe = "VVIP";
kamar.harga = 800000;
break;
case 'B':
kamar.kode = 'B';
kamar.tipe = "VIP";
kamar.harga = 700000;
break;
case 'C':
kamar.kode = 'C';
kamar.tipe = "EKONOMI";
kamar.harga = 600000;
break;
default:
// Default ke kamar termurah jika kode tidak valid
kamar.kode = 'C';
kamar.tipe = "Hydro";
kamar.harga = 600000;
}
return kamar;
}
long Cek_Harga(char kode) {
Kamar kamar = Cek_TipeKamar(kode);
return kamar.harga;
}
string Cek_Souvenir(int lamaMenginap) {
if (lamaMenginap > 6) {
return "Tumbler Besi";
} else {
return "-";
}
}