Kumpulan Kode C

1. Absensi


#include 
#include 

#define MAX_SISWA 5
#define MAX_NAMA 50

// Daftar nama siswa/pegawai
const char* daftar_nama[MAX_SISWA] = {"Ali", "Budi", "Citra", "Dewi", "Eka"};

// Fungsi untuk mencatat absensi
void catat_absensi() {
    char status;
    char absensi[MAX_SISWA][MAX_NAMA];

    printf("Daftar Nama:\n");
    for (int i = 0; i < MAX_SISWA; i++) {
        printf("%d. %s\n", i + 1, daftar_nama[i]);
    }

    for (int i = 0; i < MAX_SISWA; i++) {
        printf("Apakah %s hadir? (y/n): ", daftar_nama[i]);
        scanf(" %c", &status);  // Spasi sebelum %c untuk mengabaikan karakter newline sebelumnya

        if (status == 'y' || status == 'Y') {
            strcpy(absensi[i], "Hadir");
        } else if (status == 'n' || status == 'N') {
            strcpy(absensi[i], "Tidak Hadir");
        } else {
            strcpy(absensi[i], "Status Tidak Valid");
        }
    }

    printf("\nAbsensi Hari Ini:\n");
    for (int i = 0; i < MAX_SISWA; i++) {
        printf("%s: %s\n", daftar_nama[i], absensi[i]);
    }
}

int main() {
    // Menjalankan fungsi untuk mencatat absensi
    catat_absensi();

    return 0;
}

2. Barbershop


#include 
#include 
#include 
#include   // Untuk fungsi sleep

#define MAX_ANTRIAN 10

// Struktur untuk Barbershop
typedef struct {
    char antrian[MAX_ANTRIAN][50]; // Array untuk menyimpan nama pelanggan
    int depan, belakang; // Indeks untuk antrian
    int buka; // Status barbershop
} Barbershop;

// Fungsi untuk menginisialisasi Barbershop
void inisialisasiBarbershop(Barbershop* b) {
    b->depan = -1;
    b->belakang = -1;
    b->buka = 1;
}

// Fungsi untuk membuka Barbershop
void bukaBarbershop() {
    printf("Barbershop sedang buka, silakan masuk!\n");
}

// Fungsi untuk menutup Barbershop
void tutupBarbershop(Barbershop* b) {
    b->buka = 0;
    printf("Barbershop sudah tutup. Terima kasih sudah datang!\n");
}

// Fungsi untuk menambah pelanggan ke dalam antrian
void tambahPelanggan(Barbershop* b, const char* nama) {
    if (b->buka == 1) {
        if (b->belakang < MAX_ANTRIAN - 1) {
            b->belakang++;
            strcpy(b->antrian[b->belakang], nama);
            if (b->depan == -1) {
                b->depan = 0;
            }
            printf("%s telah masuk ke antrian.\n", nama);
        } else {
            printf("Antrian sudah penuh!\n");
        }
    } else {
        printf("Barbershop sudah tutup. Anda tidak bisa mendaftar.\n");
    }
}

// Fungsi untuk memproses pelanggan
void prosesPelanggan(Barbershop* b) {
    if (b->depan != -1) {
        printf("Sedang melayani %s...\n", b->antrian[b->depan]);
        sleep(2);  // Simulasi waktu pemotongan rambut
        printf("%s telah selesai dilayani.\n", b->antrian[b->depan]);

        // Menggeser antrian
        for (int i = 0; i < b->belakang; i++) {
            strcpy(b->antrian[i], b->antrian[i + 1]);
        }
        b->belakang--;
        if (b->belakang == -1) {
            b->depan = -1;  // Jika antrian kosong
        }
    } else {
        printf("Tidak ada pelanggan di antrian.\n");
    }
}

// Fungsi untuk menampilkan antrian
void tampilkanAntrian(Barbershop* b) {
    if (b->depan != -1) {
        printf("Antrian pelanggan:\n");
        for (int i = b->depan; i <= b->belakang; i++) {
            printf("%d. %s\n", i - b->depan + 1, b->antrian[i]);
        }
    } else {
        printf("Tidak ada pelanggan di antrian.\n");
    }
}

int main() {
    Barbershop barbershop;
    inisialisasiBarbershop(&barbershop);
    bukaBarbershop();

    while (1) {
        printf("\n--- Menu ---\n");
        printf("1. Tambah Pelanggan\n");
        printf("2. Proses Pelanggan\n");
        printf("3. Lihat Antrian\n");
        printf("4. Tutup Barbershop\n");
        printf("5. Keluar\n");
        
        int pilihan;
        printf("Pilih menu (1-5): ");
        scanf("%d", &pilihan);
        getchar();  // Membersihkan karakter newline setelah scanf

        if (pilihan == 1) {
            char nama[50];
            printf("Masukkan nama pelanggan: ");
            fgets(nama, sizeof(nama), stdin);
            nama[strcspn(nama, "\n")] = '\0';  // Menghapus karakter newline dari input
            tambahPelanggan(&barbershop, nama);
        }
        else if (pilihan == 2) {
            prosesPelanggan(&barbershop);
        }
        else if (pilihan == 3) {
            tampilkanAntrian(&barbershop);
        }
        else if (pilihan == 4) {
            tutupBarbershop(&barbershop);
            break;
        }
        else if (pilihan == 5) {
            printf("Terima kasih telah menggunakan program ini!\n");
            break;
        }
        else {
            printf("Pilihan tidak valid, coba lagi.\n");
        }
    }

    return 0;
}

3. Bioskop


#include 

void show_films() {
    printf("Daftar Film yang Tersedia:\n");
    printf("1. Film A - Harga: Rp 50000\n");
    printf("2. Film B - Harga: Rp 60000\n");
    printf("3. Film C - Harga: Rp 70000\n");
    printf("4. Film D - Harga: Rp 55000\n");
}

int pilih_film() {
    int pilihan;
    printf("\nPilih film (1-4): ");
    while (1) {
        if (scanf("%d", &pilihan) == 1 && pilihan >= 1 && pilihan <= 4) {
            return pilihan;
        } else {
            printf("Pilihan tidak valid, coba lagi: ");
            while (getchar() != '\n'); // Clear input buffer
        }
    }
}

void beli_tiket() {
    int pilihan, jumlah_tiket, total_harga;
    
    while (1) {
        show_films();
        pilihan = pilih_film();
        
        // Menghitung harga berdasarkan film yang dipilih
        switch (pilihan) {
            case 1:
                total_harga = 50000;
                break;
            case 2:
                total_harga = 60000;
                break;
            case 3:
                total_harga = 70000;
                break;
            case 4:
                total_harga = 55000;
                break;
        }
        
        // Input jumlah tiket
        printf("Masukkan jumlah tiket yang ingin dibeli: ");
        scanf("%d", &jumlah_tiket);
        
        total_harga *= jumlah_tiket; // Menghitung total harga
        
        printf("\nTiket untuk film ");
        switch (pilihan) {
            case 1: printf("Film A "); break;
            case 2: printf("Film B "); break;
            case 3: printf("Film C "); break;
            case 4: printf("Film D "); break;
        }
        printf("(%d tiket) berhasil dipesan.\n", jumlah_tiket);
        printf("Total harga: Rp %d\n", total_harga);
        
        // Tanya apakah ingin membeli tiket lagi
        char lagi;
        printf("\nApakah Anda ingin membeli tiket lagi? (y/t): ");
        while (getchar() != '\n'); // Clear input buffer
        scanf("%c", &lagi);
        
        if (lagi == 't' || lagi == 'T') {
            printf("Terima kasih telah membeli tiket di bioskop kami!\n");
            break;
        }
    }
}

int main() {
    beli_tiket();
    return 0;
}

4. Dealer Kartu (Black Jack Simplified)


#include 
#include 
#include 
#include 

#define DECK_SIZE 52

// Daftar kartu dalam deck (dalam format string)
const char* deck[DECK_SIZE] = {
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", // 13 kartu set pertama
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", // 13 kartu set kedua
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", // 13 kartu set ketiga
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"  // 13 kartu set keempat
};

// Fungsi untuk menghitung nilai kartu
int card_value(const char* card) {
    if (strcmp(card, "J") == 0 || strcmp(card, "Q") == 0 || strcmp(card, "K") == 0) {
        return 10;
    } else if (strcmp(card, "A") == 0) {
        return 11; // Menganggap Ace = 11 untuk kesederhanaan
    } else {
        return atoi(card); // Kartu angka (2-10)
    }
}

// Fungsi untuk membagikan kartu secara acak
const char* deal_card(int* deck_index) {
    int random_index = rand() % DECK_SIZE;
    while (random_index == *deck_index) {
        random_index = rand() % DECK_SIZE; // Pastikan kartu yang sama tidak dibagikan dua kali
    }
    *deck_index = random_index;
    return deck[random_index];
}

// Fungsi untuk menghitung total nilai kartu dalam hand
int calculate_hand(const char* hand[], int hand_size) {
    int total = 0;
    for (int i = 0; i < hand_size; i++) {
        total += card_value(hand[i]);
    }
    return total;
}

void start_game() {
    int deck_index = -1; // Menyimpan indeks kartu yang sudah dibagikan
    srand(time(0)); // Menginisialisasi seed untuk random number generator

    // Kartu untuk pemain dan dealer
    const char* player_hand[10]; // Memungkinkan maksimal 10 kartu
    const char* dealer_hand[10];

    int player_hand_size = 0;
    int dealer_hand_size = 0;

    // Membagikan dua kartu untuk pemain dan dealer
    player_hand[player_hand_size++] = deal_card(&deck_index);
    player_hand[player_hand_size++] = deal_card(&deck_index);

    dealer_hand[dealer_hand_size++] = deal_card(&deck_index);
    dealer_hand[dealer_hand_size++] = deal_card(&deck_index);

    // Menampilkan kartu awal pemain dan dealer (satu kartu dealer tersembunyi)
    printf("Kartu Anda: ");
    for (int i = 0; i < player_hand_size; i++) {
        printf("%s ", player_hand[i]);
    }
    printf("dengan nilai %d\n", calculate_hand(player_hand, player_hand_size));

    printf("Kartu Dealer: %s dan kartu tersembunyi\n", dealer_hand[0]);

    // Giliran pemain
    while (calculate_hand(player_hand, player_hand_size) < 21) {
        char action[10];
        printf("Apakah Anda ingin 'Hit' atau 'Stand'? ");
        scanf("%s", action);

        if (strcmp(action, "hit") == 0) {
            player_hand[player_hand_size++] = deal_card(&deck_index);
            printf("Kartu Anda sekarang: ");
            for (int i = 0; i < player_hand_size; i++) {
                printf("%s ", player_hand[i]);
            }
            printf("dengan nilai %d\n", calculate_hand(player_hand, player_hand_size));
        } else if (strcmp(action, "stand") == 0) {
            break;
        } else {
            printf("Pilihan tidak valid. Pilih 'Hit' atau 'Stand'.\n");
        }
    }

    // Jika pemain melebihi 21
    if (calculate_hand(player_hand, player_hand_size) > 21) {
        printf("Nilai kartu Anda melebihi 21! Anda kalah!\n");
        return;
    }

    // Giliran dealer (dealer akan 'hit' sampai total kartu >= 17)
    printf("Kartu Dealer sekarang: ");
    for (int i = 0; i < dealer_hand_size; i++) {
        printf("%s ", dealer_hand[i]);
    }
    printf("dengan nilai %d\n", calculate_hand(dealer_hand, dealer_hand_size));

    while (calculate_hand(dealer_hand, dealer_hand_size) < 17) {
        printf("Dealer memukul kartu...\n");
        dealer_hand[dealer_hand_size++] = deal_card(&deck_index);
        printf("Kartu Dealer sekarang: ");
        for (int i = 0; i < dealer_hand_size; i++) {
            printf("%s ", dealer_hand[i]);
        }
        printf("dengan nilai %d\n", calculate_hand(dealer_hand, dealer_hand_size));
    }

    // Menentukan pemenang
    int player_total = calculate_hand(player_hand, player_hand_size);
    int dealer_total = calculate_hand(dealer_hand, dealer_hand_size);

    if (dealer_total > 21) {
        printf("Dealer melebihi 21! Anda menang!\n");
    } else if (player_total > dealer_total) {
        printf("Anda menang!\n");
    } else if (player_total < dealer_total) {
        printf("Dealer menang!\n");
    } else {
        printf("Hasil seri!\n");
    }
}

int main() {
    printf("Selamat datang di permainan Dealer Kartu!\n");
    start_game();
    return 0;
}

5. Diler Kendaraaan


#include 
#include 
#include 

#define MAX_VEHICLES 10

// Struktur untuk kendaraan
typedef struct {
    char model[50];
    int price;
    int stock;
} Vehicle;

// Daftar kendaraan yang tersedia
Vehicle vehicles[MAX_VEHICLES];
int vehicle_count = 0;

// Menambahkan kendaraan ke diler
void addVehicle(char *model, int price, int stock) {
    if (vehicle_count < MAX_VEHICLES) {
        strcpy(vehicles[vehicle_count].model, model);
        vehicles[vehicle_count].price = price;
        vehicles[vehicle_count].stock = stock;
        vehicle_count++;
    } else {
        printf("Diler sudah penuh, tidak bisa menambah kendaraan.\n");
    }
}

// Menampilkan semua kendaraan yang tersedia
void displayVehicles() {
    if (vehicle_count == 0) {
        printf("Tidak ada kendaraan di diler.\n");
        return;
    }

    printf("\nKendaraan yang Tersedia di Diler:\n");
    for (int i = 0; i < vehicle_count; i++) {
        printf("%d. Model: %s, Harga: Rp%d, Stok: %d\n", i + 1, vehicles[i].model, vehicles[i].price, vehicles[i].stock);
    }
}

// Memeriksa ketersediaan kendaraan dan melakukan pembelian
void purchaseVehicle() {
    displayVehicles();

    if (vehicle_count == 0) {
        return;
    }

    int choice, quantity;
    printf("\nPilih kendaraan (masukkan nomor): ");
    scanf("%d", &choice);
    
    if (choice < 1 || choice > vehicle_count) {
        printf("Pilihan tidak valid.\n");
        return;
    }

    printf("Berapa banyak yang ingin dibeli? ");
    scanf("%d", &quantity);

    // Memilih kendaraan yang dipilih
    Vehicle *selectedVehicle = &vehicles[choice - 1];

    // Mengecek apakah kendaraan tersedia dalam jumlah yang diminta
    if (selectedVehicle->stock >= quantity) {
        int totalPrice = selectedVehicle->price * quantity;
        printf("\nPembelian Sukses! Total Harga: Rp%d\n", totalPrice);
        selectedVehicle->stock -= quantity;
    } else {
        printf("\nStok tidak cukup.\n");
    }
}

int main() {
    int choice;

    // Menambahkan beberapa kendaraan ke diler
    addVehicle("Mobil Sedan", 300000000, 10);
    addVehicle("Motor Sport", 100000000, 5);
    addVehicle("Mobil SUV", 500000000, 3);

    while (1) {
        // Menampilkan menu
        printf("\n--- Menu Diler Kendaraan ---\n");
        printf("1. Lihat kendaraan yang tersedia\n");
        printf("2. Pembelian kendaraan\n");
        printf("3. Keluar\n");

        printf("\nPilih menu: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                displayVehicles();
                break;
            case 2:
                purchaseVehicle();
                break;
            case 3:
                printf("Terima kasih telah mengunjungi diler kami!\n");
                return 0;
            default:
                printf("Pilihan tidak valid.\n");
        }
    }

    return 0;
}

6. Gaji


#include 

// Fungsi untuk menghitung gaji total
double hitungGaji(double gajiPokok, double tunjangan, double potongan) {
    return gajiPokok + tunjangan - potongan;
}

int main() {
    double gajiPokok, tunjangan, potongan, gajiTotal;

    // Menampilkan judul program
    printf("Program Perhitungan Gaji Karyawan\n");

    // Input data
    printf("Masukkan gaji pokok: Rp ");
    scanf("%lf", &gajiPokok);
    printf("Masukkan tunjangan: Rp ");
    scanf("%lf", &tunjangan);
    printf("Masukkan potongan: Rp ");
    scanf("%lf", &potongan);

    // Menghitung gaji total
    gajiTotal = hitungGaji(gajiPokok, tunjangan, potongan);

    // Menampilkan hasil perhitungan
    printf("\nRingkasan Gaji:\n");
    printf("Gaji Pokok: Rp %.2lf\n", gajiPokok);
    printf("Tunjangan: Rp %.2lf\n", tunjangan);
    printf("Potongan: Rp %.2lf\n", potongan);
    printf("Gaji Total: Rp %.2lf\n", gajiTotal);

    return 0;
}

7. Kafe


#include 
#include 

#define MAX_PESANAN 10

// Struktur untuk menyimpan menu dan harga
typedef struct {
    char nama[50];
    int harga;
} MenuItem;

// Struktur untuk menyimpan pesanan
typedef struct {
    char nama[50];
    int jumlah;
} PesananItem;

// Daftar menu dan harga
MenuItem menu[] = {
    {"Kopi", 15000},
    {"Teh", 10000},
    {"Espresso", 20000},
    {"Cappuccino", 25000},
    {"Kue", 12000}
};

int menuCount = sizeof(menu) / sizeof(menu[0]);
PesananItem pesanan[MAX_PESANAN];
int pesananCount = 0;

// Menampilkan menu
void tampilkanMenu() {
    printf("\n--- Menu Kafe ---\n");
    for (int i = 0; i < menuCount; i++) {
        printf("%d. %s: Rp %d\n", i + 1, menu[i].nama, menu[i].harga);
    }
}

// Menambahkan pesanan
void tambahPesanan() {
    while (1) {
        tampilkanMenu();
        printf("\nMasukkan nomor item yang ingin dipesan (ketik 0 untuk selesai): ");
        int pilihan;
        scanf("%d", &pilihan);
        getchar();  // Membersihkan newline setelah input nomor

        if (pilihan == 0) {
            break;
        }

        if (pilihan >= 1 && pilihan <= menuCount) {
            printf("Berapa banyak %s yang ingin dipesan? ", menu[pilihan - 1].nama);
            int jumlah;
            scanf("%d", &jumlah);

            // Tambahkan pesanan ke dalam daftar pesanan
            if (pesananCount < MAX_PESANAN) {
                int found = 0;
                for (int i = 0; i < pesananCount; i++) {
                    if (strcmp(pesanan[i].nama, menu[pilihan - 1].nama) == 0) {
                        pesanan[i].jumlah += jumlah;
                        found = 1;
                        break;
                    }
                }

                if (!found) {
                    strcpy(pesanan[pesananCount].nama, menu[pilihan - 1].nama);
                    pesanan[pesananCount].jumlah = jumlah;
                    pesananCount++;
                }
                printf("%d %s telah ditambahkan ke pesanan.\n", jumlah, menu[pilihan - 1].nama);
            } else {
                printf("Tidak dapat menambahkan pesanan. Maksimal pesanan tercapai.\n");
            }
        } else {
            printf("Pilihan tidak valid. Silakan coba lagi.\n");
        }
    }
}

// Menghitung total harga pesanan
int hitungTotal() {
    int total = 0;
    for (int i = 0; i < pesananCount; i++) {
        for (int j = 0; j < menuCount; j++) {
            if (strcmp(pesanan[i].nama, menu[j].nama) == 0) {
                total += menu[j].harga * pesanan[i].jumlah;
            }
        }
    }
    return total;
}

// Menampilkan pesanan
void tampilkanPesanan() {
    if (pesananCount == 0) {
        printf("\nTidak ada pesanan.\n");
    } else {
        printf("\n--- Pesanan Anda ---\n");
        for (int i = 0; i < pesananCount; i++) {
            for (int j = 0; j < menuCount; j++) {
                if (strcmp(pesanan[i].nama, menu[j].nama) == 0) {
                    printf("%s x %d = Rp %d\n", pesanan[i].nama, pesanan[i].jumlah, menu[j].harga * pesanan[i].jumlah);
                }
            }
        }
        printf("\nTotal yang harus dibayar: Rp %d\n", hitungTotal());
    }
}

int main() {
    int pilihan;

    while (1) {
        printf("\n--- Selamat Datang di Kafe! ---\n");
        printf("1. Lihat Menu\n");
        printf("2. Tambah Pesanan\n");
        printf("3. Lihat Pesanan dan Total\n");
        printf("4. Keluar\n");

        printf("Pilih menu (1-4): ");
        scanf("%d", &pilihan);
        getchar();  // Membersihkan newline setelah input

        switch (pilihan) {
            case 1:
                tampilkanMenu();
                break;
            case 2:
                tambahPesanan();
                break;
            case 3:
                tampilkanPesanan();
                break;
            case 4:
                printf("Terima kasih telah mengunjungi kafe kami. Sampai jumpa!\n");
                return 0;
            default:
                printf("Pilihan tidak valid. Silakan coba lagi.\n");
                break;
        }
    }

    return 0;
}

8. Kalkulator


#include 

// Fungsi untuk penjumlahan
double tambah(double x, double y) {
    return x + y;
}

// Fungsi untuk pengurangan
double kurang(double x, double y) {
    return x - y;
}

// Fungsi untuk perkalian
double kali(double x, double y) {
    return x * y;
}

// Fungsi untuk pembagian
double bagi(double x, double y) {
    if (y != 0) {
        return x / y;
    } else {
        printf("Tidak bisa membagi dengan nol\n");
        return 0;  // Mengembalikan nilai 0 jika pembagian dengan nol
    }
}

int main() {
    int pilihan;
    double num1, num2;

    // Menampilkan menu operasi
    printf("Pilih operasi:\n");
    printf("1. Tambah\n");
    printf("2. Kurang\n");
    printf("3. Kali\n");
    printf("4. Bagi\n");

    // Meminta input pilihan operasi
    printf("Masukkan pilihan (1/2/3/4): ");
    scanf("%d", &pilihan);

    // Meminta input angka
    printf("Masukkan angka pertama: ");
    scanf("%lf", &num1);
    printf("Masukkan angka kedua: ");
    scanf("%lf", &num2);

    // Melakukan operasi sesuai dengan pilihan pengguna
    switch (pilihan) {
        case 1:
            printf("%.2lf + %.2lf = %.2lf\n", num1, num2, tambah(num1, num2));
            break;
        case 2:
            printf("%.2lf - %.2lf = %.2lf\n", num1, num2, kurang(num1, num2));
            break;
        case 3:
            printf("%.2lf * %.2lf = %.2lf\n", num1, num2, kali(num1, num2));
            break;
        case 4:
            double hasilBagi = bagi(num1, num2);
            if (num2 != 0) {  // Mengecek apakah pembagian berhasil
                printf("%.2lf / %.2lf = %.2lf\n", num1, num2, hasilBagi);
            }
            break;
        default:
            printf("Pilihan tidak valid!\n");
            break;
    }

    return 0;
}

9. Kasir


#include 
#include 

typedef struct {
    char nama[100];
    double harga;
    int jumlah;
    double total;
} Barang;

void tambahBarang(Barang* daftarBarang, int* jumlahBarang, char* nama, double harga, int jumlah) {
    Barang barang;
    strcpy(barang.nama, nama);
    barang.harga = harga;
    barang.jumlah = jumlah;
    barang.total = harga * jumlah;

    daftarBarang[*jumlahBarang] = barang;
    (*jumlahBarang)++;
    printf("%s x%d ditambahkan ke daftar belanja.\n", nama, jumlah);
}

void tampilkanRincian(Barang* daftarBarang, int jumlahBarang, double totalHarga) {
    printf("\n--- Rincian Belanja ---\n");
    for (int i = 0; i < jumlahBarang; i++) {
        printf("%s - Harga: %.2f - Jumlah: %d - Total: %.2f\n", daftarBarang[i].nama, daftarBarang[i].harga, daftarBarang[i].jumlah, daftarBarang[i].total);
    }
    printf("\nTotal Belanja: %.2f\n", totalHarga);
}

void bayar(double totalHarga, double uangDibayar) {
    if (uangDibayar >= totalHarga) {
        double kembalian = uangDibayar - totalHarga;
        printf("\nTotal yang harus dibayar: %.2f\n", totalHarga);
        printf("Uang yang dibayar: %.2f\n", uangDibayar);
        printf("Kembalian: %.2f\n", kembalian);
    } else {
        printf("\nUang yang dibayar kurang dari total belanja. Transaksi dibatalkan.\n");
    }
}

int main() {
    Barang daftarBarang[100];
    int jumlahBarang = 0;
    double totalHarga = 0;
    int pilihan;
    char namaBarang[100];
    double harga;
    int jumlah;
    double uangDibayar;

    while (1) {
        printf("\nMenu Kasir\n");
        printf("1. Tambah barang\n");
        printf("2. Tampilkan rincian belanja\n");
        printf("3. Bayar\n");
        printf("4. Keluar\n");
        printf("Pilih menu (1/2/3/4): ");
        scanf("%d", &pilihan);
        getchar(); // Clear buffer setelah input pilihan

        if (pilihan == 1) {
            printf("Masukkan nama barang: ");
            fgets(namaBarang, sizeof(namaBarang), stdin);
            // Menghapus newline di akhir namaBarang
            namaBarang[strcspn(namaBarang, "\n")] = '\0';

            printf("Masukkan harga barang: ");
            scanf("%lf", &harga);

            printf("Masukkan jumlah barang: ");
            scanf("%d", &jumlah);

            tambahBarang(daftarBarang, &jumlahBarang, namaBarang, harga, jumlah);
            totalHarga += harga * jumlah;
        } else if (pilihan == 2) {
            tampilkanRincian(daftarBarang, jumlahBarang, totalHarga);
        } else if (pilihan == 3) {
            tampilkanRincian(daftarBarang, jumlahBarang, totalHarga);
            printf("Masukkan uang yang dibayar: ");
            scanf("%lf", &uangDibayar);
            bayar(totalHarga, uangDibayar);
        } else if (pilihan == 4) {
            printf("Terima kasih, sampai jumpa!\n");
            break;
        } else {
            printf("Pilihan tidak valid, coba lagi.\n");
        }
    }

    return 0;
}

10. Kereta


#include 
#include 

#define MAX_KERETA 10

// Struktur untuk menyimpan informasi kereta
typedef struct {
    char nama_kereta[50];
    char tujuan[50];
    char waktu_berangkat[10];
    int kapasitas;
    int terisi;
} Kereta;

// Struktur untuk sistem kereta
typedef struct {
    Kereta kereta_list[MAX_KERETA];
    int jumlah_kereta;
} SistemKereta;

// Fungsi untuk menampilkan informasi kereta
void tampilkan_info(Kereta kereta) {
    printf("Nama Kereta: %s\n", kereta.nama_kereta);
    printf("Tujuan: %s\n", kereta.tujuan);
    printf("Waktu Berangkat: %s\n", kereta.waktu_berangkat);
    printf("Kapasitas: %d\n", kereta.kapasitas);
    printf("Terisi: %d/%d\n", kereta.terisi, kereta.kapasitas);
    printf("\n");
}

// Fungsi untuk memesan tiket kereta
void pesan_tiket(Kereta *kereta, int jumlah_tiket) {
    if (kereta->terisi + jumlah_tiket <= kereta->kapasitas) {
        kereta->terisi += jumlah_tiket;
        printf("Berhasil memesan %d tiket untuk %s.\n", jumlah_tiket, kereta->nama_kereta);
    } else {
        printf("Maaf, hanya tersisa %d tiket untuk %s.\n", kereta->kapasitas - kereta->terisi, kereta->nama_kereta);
    }
}

// Fungsi untuk menambahkan kereta ke sistem
void tambah_kereta(SistemKereta *sistem_kereta, Kereta kereta) {
    if (sistem_kereta->jumlah_kereta < MAX_KERETA) {
        sistem_kereta->kereta_list[sistem_kereta->jumlah_kereta] = kereta;
        sistem_kereta->jumlah_kereta++;
    } else {
        printf("Sistem kereta penuh, tidak bisa menambahkan kereta baru.\n");
    }
}

// Fungsi untuk menampilkan jadwal semua kereta
void tampilkan_jadwal(SistemKereta sistem_kereta) {
    printf("Jadwal Kereta:\n");
    for (int i = 0; i < sistem_kereta.jumlah_kereta; i++) {
        tampilkan_info(sistem_kereta.kereta_list[i]);
    }
}

// Fungsi untuk memesan tiket untuk kereta tertentu
void pesan_tiket_kereta(SistemKereta *sistem_kereta, char nama_kereta[], int jumlah_tiket) {
    int ditemukan = 0;
    for (int i = 0; i < sistem_kereta->jumlah_kereta; i++) {
        if (strcmp(sistem_kereta->kereta_list[i].nama_kereta, nama_kereta) == 0) {
            pesan_tiket(&sistem_kereta->kereta_list[i], jumlah_tiket);
            ditemukan = 1;
            break;
        }
    }
    if (!ditemukan) {
        printf("Kereta dengan nama %s tidak ditemukan.\n", nama_kereta);
    }
}

int main() {
    SistemKereta sistem_kereta;
    sistem_kereta.jumlah_kereta = 0;

    // Menambahkan beberapa kereta ke sistem
    Kereta kereta1 = {"Ekspres Jakarta", "Bandung", "10:00", 100, 0};
    Kereta kereta2 = {"Argo Bromo", "Surabaya", "15:00", 150, 0};
    Kereta kereta3 = {"Kelas Ekonomi", "Yogyakarta", "12:00", 200, 0};

    tambah_kereta(&sistem_kereta, kereta1);
    tambah_kereta(&sistem_kereta, kereta2);
    tambah_kereta(&sistem_kereta, kereta3);

    int pilihan;
    char nama_kereta[50];
    int jumlah_tiket;

    while (1) {
        printf("\nMenu:\n");
        printf("1. Tampilkan Jadwal Kereta\n");
        printf("2. Pesan Tiket Kereta\n");
        printf("3. Keluar\n");

        printf("Pilih menu (1/2/3): ");
        scanf("%d", &pilihan);

        if (pilihan == 1) {
            tampilkan_jadwal(sistem_kereta);
        } else if (pilihan == 2) {
            printf("Masukkan nama kereta yang ingin dipesan: ");
            getchar(); // Membersihkan newline dari buffer input
            fgets(nama_kereta, 50, stdin);
            nama_kereta[strcspn(nama_kereta, "\n")] = '\0'; // Menghapus newline di akhir string
            printf("Masukkan jumlah tiket yang ingin dipesan: ");
            scanf("%d", &jumlah_tiket);
            pesan_tiket_kereta(&sistem_kereta, nama_kereta, jumlah_tiket);
        } else if (pilihan == 3) {
            printf("Terima kasih telah menggunakan sistem kereta.\n");
            break;
        } else {
            printf("Pilihan tidak valid. Silakan coba lagi.\n");
        }
    }

    return 0;
}

Mau Lebih Banyak Kode? Lihat Di Github Saya (Kode 11 - 20)

Klik Disini