#include <iostream>
#include <string>
#include <iomanip> // Library untuk merapikan tabel (setw)
using namespace std;
// Struct untuk menyimpan data pesanan (Memenuhi syarat Variable Array & Struct)
struct Pesanan {
char kode;
string jenis;
int harga;
int jumlah;
long subtotal;
};
/**
* 1. Function NOT return value TANPA parameter
* Digunakan untuk mencetak garis pembatas
*/
void garis() {
cout << "==================================================" << endl;
}
/**
* 2. Function NOT return value DENGAN parameter
* Digunakan untuk mencetak header dengan nama pembeli
*/
void cetakHeader(string nama) {
garis();
cout << "Gerobak Fried Chicken" << endl;
garis();
// Bisa disesuaikan dengan nama Anda sendiri jika perlu
cout << "Nama Pembeli : " << nama << endl;
}
/**
* 3. Function return value TANPA parameter
* Mengembalikan nilai persentase pajak (10%)
*/
float getPersenPajak() {
return 0.1;
}
/**
* 4. Function return value DENGAN parameter
* Menggunakan SWITCH CASE (Memenuhi syarat SWITCH CASE)
* Menentukan harga berdasarkan kode
*/
int cariHarga(char kode) {
switch(toupper(kode)) {
case 'D': return 12000;
case 'P': return 8500;
case 'S': return 10000;
default: return 0;
}
}
/**
* 5. Function yang memanggil function lain
* Menggunakan struktur IF (Memenuhi syarat IF)
* Memanggil cariHarga() untuk menentukan jenis potongan
*/
string cariJenis(char kode) {
int harga = cariHarga(kode); // <-- Memanggil function lain di sini
if (harga == 12000) return "Dada";
else if (harga == 8500) return "Paha";
else if (harga == 10000) return "Sayap";
else return "Salah Kode";
}
int main() {
// Variabel
string namaPembeli;
int jumlahData;
Pesanan order[50]; // Memenuhi syarat Variable Array
long totalBayar = 0;
// Input Data Utama
cout << "Gerobak Fried Chicken" << endl;
garis();
cout << "Masukan nama pembeli : " << endl;
getline(cin, namaPembeli); // Menggunakan getline agar bisa input nama spasi
cout << "Masukan jumlah beli : " << endl;
cin >> jumlahData;
// 9. Menggunakan LOOPING (Input Data)
for(int i = 0; i < jumlahData; i++) {
cout << "\nData ke: " << (i + 1) << endl;
cout << "Masukan kode [D][P][S]: " << endl;
cin >> order[i].kode;
cout << "Jumlah: " << endl;
cin >> order[i].jumlah;
// Proses Data menggunakan Function
order[i].jenis = cariJenis(order[i].kode);
order[i].harga = cariHarga(order[i].kode);
order[i].subtotal = order[i].harga * order[i].jumlah;
// Akumulasi Total
totalBayar += order[i].subtotal;
}
// Output Tabel
cout << "\n\n";
cetakHeader(namaPembeli);
cout << "| No | Kode | Jenis | Harga | Jml | Total |" << endl;
garis();
// Looping Output
for(int i = 0; i < jumlahData; i++) {
cout << "| " << setiosflags(ios::left) << setw(3) << (i+1)
<< "| " << setw(5) << order[i].kode
<< "| " << setw(11) << order[i].jenis
<< "| " << setw(7) << order[i].harga
<< "| " << setw(4) << order[i].jumlah
<< "| " << setw(7) << order[i].subtotal << "|" << endl;
}
garis();
// Hitung Pajak dan Grand Total
long pajak = totalBayar * getPersenPajak();
long grandTotal = totalBayar + pajak;
cout << "Total Bayar : " << totalBayar << endl;
cout << "Pajak : " << pajak << endl;
cout << "Grand Total : " << grandTotal << endl;
garis();
cout << "Nama : Ananda Rakhma Aulia" << endl;
cout << "Email : anandara7891@gmail.com" << endl;
return 0;
}