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)