#include <iostream>
#include <string>
#include <cctype>
#include <limits>
using namespace std;
// Fungsi untuk menampilkan judul
void judul() {
cout << "=============================================================================" << endl;
cout << "PROGRAM PEMESANAN KERETA " << endl;
cout << "=============================================================================" << endl;
cout << "| Kelas | AG(Argo Bromo) | AL(Argo Lawu) | PH(Argo Wilis) |" <<endl;
cout << "| 1-Executive | 500.000 | 475.000 | 450.000 |" <<endl;
cout << "| 2-Bisnis | 480.000 | 455.000 | 430.000 |" <<endl;
cout << "| 3-Ekonomi | 460.000 | 435.000 | 410.000 |" <<endl;
cout << "|============================================================================" <<endl;
}
void penutup() {
cout << "=============================================================================" <<endl;
cout << "Nama : Nagita Elsa Saputri" <<endl;
cout << "Email : nagitaelsa39@gmail.com" <<endl;
}
// Fungsi untuk mengecek dan mengembalikan harga tiket
double cekHarga(string kodeKereta, int kodeKelas) {
double harga = 0;
kodeKereta = toupper(kodeKereta[0]); // Mengubah ke huruf besar
if (kodeKelas < 1 || kodeKelas > 3) return -1; // Kode kelas salah
if (kodeKereta == "A") { // Argo Bromo
switch (kodeKelas) {
case 1: harga = 500000; break;
case 2: harga = 480000; break;
case 3: harga = 460000; break;
}
} else if (kodeKereta == "L") { // Argo Lawu
switch (kodeKelas) {
case 1: harga = 475000; break;
case 2: harga = 455000; break;
case 3: harga = 435000; break;
}
} else if (kodeKereta == "P") { // Argo Wilis
switch (kodeKelas) {
case 1: harga = 450000; break;
case 2: harga = 438000; break;
case 3: harga = 418000; break;
}
} else {
return -1; // Kode kereta salah
}
return harga;
}
// Fungsi untuk menghitung diskon
double cekDiskon(double subtotal) {
if (subtotal > 1000000) return subtotal * 0.10; // Diskon 10%
if (subtotal > 500000) return subtotal * 0.05; // Diskon 5%
return 0; // Tidak ada diskon
}
int main() {
judul();
string namaPemesan, kodeKereta;
int kodeKelas, jumlahTiket;
double hargaTiket, subtotal, diskon, total;
cout << "Nama Pemesan: ";
getline(cin >> ws, namaPemesan); // Menggunakan getline untuk menangani spasi pada nama
cout << "Masukan Kode Kereta [AG/AL/PH]: ";
cin >> kodeKereta;
cout << "Masukan Kode Kelas [1/2/3]: ";
cin >> kodeKelas;
// Validasi input untuk jumlah tiket (harus bilangan bulat positif)
while (!(cin >> jumlahTiket) || jumlahTiket <=0) {
cout << "Input salah. Masukkan jumlah tiket (bilangan bulat positif): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
hargaTiket = cekHarga(kodeKereta, kodeKelas);
if (hargaTiket == -1) {
cout << "Kode Kereta atau Kode Kelas Salah!" << endl;
return 1; // Menunjukkan error
}
subtotal = hargaTiket * jumlahTiket;
diskon = cekDiskon(subtotal);
total = subtotal - diskon;
cout << "\nDATA PEMESANAN KERETA" << endl;
cout << "Nama Pemesan: " << namaPemesan << endl;
cout << "Kode Kereta: " << kodeKereta << endl;
cout << "Kode Kelas: " << kodeKelas << endl;
cout << "Nama Kereta: ";
// Menampilkan nama kereta berdasarkan kode kereta (diperbaiki)
if (kodeKereta == "A" || kodeKereta == "a") cout << "Argo Bromo" << endl;
else if (kodeKereta == "L" || kodeKereta == "l") cout << "Argo Lawu" << endl;
else if (kodeKereta == "P" || kodeKereta == "p") cout << "Argo Wilis" << endl;
cout << "Nama Kelas: ";
// Menampilkan nama kelas berdasarkan kode kelas (diperbaiki)
if (kodeKelas == 1) cout << "Executive" << endl;
else if (kodeKelas == 2) cout << "Bisnis" << endl;
else cout << "Ekonomi" << endl;
cout << "Harga Tiket: " << hargaTiket << endl;
cout << "Jumlah Beli: " << jumlahTiket << endl;
cout << "Subtotal: " << subtotal << endl;
cout << "Diskon: " << diskon << endl;
cout << "Total: " << total << endl;
}