Quick actions

cmd+k|ctrl+k

Navigation

Languages

Algoritma Dan Struktur Data Tugas 14.1

Snippet info

Language

Cpp

Visibility

public

Author

fadhlanr

Created

2026-01-10T06:00:26.599234Z

Updated

2026-01-10T06:20:18.076678Z

#include <iostream>
#include <string.h>
using namespace std;

// 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  : M Fadhlan Robbi" << endl;
    cout << "Email : [email protected]" << 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\t\t\t:" << (i + 1);

    cout << "\nMasukan kode [D][P][S]\t:<input>";
    cin >> kodeBarang;
    kodeBarangAsli = kodeBarang; // Simpan kode asli untuk output
    kodeBarang[0] = toupper(kodeBarang[0]);
    
    cout << "\nJumlah beli\t\t:<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 << "\nMasukan nama pembeli: <input>" << endl;
    cin >> namaPembeli;
    cout << "\nMasukan jumlah beli: <input>" << endl;
    cin >> jumlahBeli;
    
    inputKodeBarang(jumlahBeli);
    judul();
    
    cetakTransaksi();
    author();
    
    return 0;
}
INFO