#include <iostream>
#include <string.h>
using namespace std;
// Nama : Dhafin Shabir Alfatih
// NIM : 3420230036
// Struct
struct Menu{
string kode;
string jenis;
int harga;
};
struct Transaksi {
string kode;
string jenis;
int harga;
int jumlah;
int total;
};
// Variabel Array type struct
Menu menu[] = {
{"D", "Dada", 12000},
{"P", "Paha", 8500},
{"S", "Sayap", 10000},
};
Transaksi transaksi[100];
int totalTransaksi = 0;
// Untuk menghitung jumlah elemen pada array menu
const int menuSize = sizeof(menu) / sizeof(menu[0]);
// Func not return value dengan parameter
void garis(int panjang) {
int i;
// Looping for
for(i = 0; i <= panjang; i++) {
printf("=");
}
cout << endl;
}
// Func not return value tanpa parameter
void author() {
cout << "Nama : Dhafin Shabir" << endl;
cout << "Email : dhafinshabir610@gmail.com" << endl;
}
void judul() {
garis(51);
cout << "\tGerobak Fried Chicken\n";
}
void daftarMenu() {
garis(51);
cout << "| Kode\t| Jenis\t| Harga\t|\n";
garis(51);
for (int i = 0; i < menuSize; i++) {
cout << "| " << menu[i].kode << "\t| " << menu[i].jenis
<< "\t| " << menu[i].harga << "\t|\n";
}
garis(51);
}
void ketentuan() {
printf("KETENTUAN SOAL\n");
printf("Harus Terdapat Function Return Value Dengan Parameter\n");
printf("Harus Terdapat Function Return Value Tanpa Parameter\n");
printf("Harus Terdapat Function NOT Return Value Dengan Parameter\n");
printf("Harus Terdapat Function NOT Return Value Tanpa Parameter\n");
printf("Harus Terdapat Function Yang Memanggil Function Lain\n");
printf("Harus Terdapat Variabel Bertipe Array\n");
printf("Harus Terdapat Struktur IF\n");
printf("Harus Terdapat Struktur Switch Case\n");
printf("Harus Menggunakan Looping\n");
garis(51);
}
void cetakTransaksi() {
garis(51);
printf("| %s | %s | %-10s | %-6s | %s | %-s |\n",
"No", "Kode", "Jenis", "Harga", "Jumlah", "Total");
garis(51);
int totalBayar = 0; // Variabel untuk menghitung total bayar
for (int i = 0; i < totalTransaksi; i++) {
printf("| %-2d | %-4s | %-10s | %-6d | %-6d | %-5d |\n", i + 1,
transaksi[i].kode.c_str(), transaksi[i].jenis.c_str(),
transaksi[i].harga, transaksi[i].jumlah, transaksi[i].total);
// Tambahkan total transaksi ke totalBayar
totalBayar += transaksi[i].total;
}
// Hitung pajak 10%
int pajak = totalBayar * 0.1;
// Hitung total keseluruhan
int grandTotal = totalBayar + pajak;
garis(51);
printf("Total Bayar : %d \n", totalBayar);
printf("Pajak (10%) : %d \n", pajak);
printf("Grand Total : %d \n", grandTotal);
garis(51);
}
// Func return value dengan parameter (menggunakan looping dan IF)
int cariHarga(string kode) {
for (int i = 0; i < menuSize; i++) {
if (menu[i].kode == kode) {
return menu[i].harga;
}
}
return 0; // Jika kode tidak ditemukan
}
// Func return value dengan parameter (menggunakan switch)
string cariJenis(string kode) {
switch (kode[0]) {
case 'D':
return "Dada";
case 'P':
return "Paha";
case 'S':
return "Sayap";
default:
return "Kode Salah";
}
}
// Function Rekursif
void inputKodeBarang(int jumlahBeli, int i = 0) {
if (i >= jumlahBeli) return;
string kodeBarang, kodeBarangAsli;
int jumlahBarang;
cout << "\nData ke-" << (i + 1);
cout << "\nMasukan kode [D][P][S]: <input>";
cin >> kodeBarang;
kodeBarangAsli = kodeBarang; // Simpan kode asli untuk output
kodeBarang[0] = toupper(kodeBarang[0]);
cout << "\nJumlah beli : <input>\n";
cin >> jumlahBarang;
// Simpan data ke array transaksi
transaksi[i].kode = kodeBarangAsli;
transaksi[i].jenis = cariJenis(kodeBarang);
transaksi[i].harga = cariHarga(kodeBarang);
transaksi[i].jumlah = jumlahBarang;
transaksi[i].total = transaksi[i].harga * jumlahBarang;
totalTransaksi++; // Tambah jumlah transaksi
// Rekursif panggil input untuk data berikutnya
inputKodeBarang(jumlahBeli, i + 1);
}
// Func return value tanpa parameter
int main() {
judul();
daftarMenu();
ketentuan();
string namaPembeli;
int jumlahBeli;
cout << "Masukan nama pembeli: <input>" << endl;
cin >> namaPembeli;
cout << "Masukan jumlah beli: <input>" << endl;
cin >> jumlahBeli;
inputKodeBarang(jumlahBeli);
judul();
cetakTransaksi();
author();
return 0;
}