Artikel

Penjelasan Aplikasi Berbasis Teks Untuk Sistem Pembelian Sederhana

Program ini adalah aplikasi berbasis teks untuk sistem pembelian barang di sebuah toko, termasuk pengurutan barang, penghitungan harga, dan pencetakan struk. Saya akan membahas setiap bagian utama dari kode ini.

1. Preprocessor Directives dan Definisi Konstanta

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define MAX_ITEMS 5 // Maksimum item yang diizinkan
#define MAX_LEN 50  // Maksimum panjang string

  • #include digunakan untuk menyertakan file header standar seperti stdio.h (untuk input/output), stdlib.h (untuk fungsi umum), string.h (untuk manipulasi string), dan time.h (untuk fungsi waktu).
  • #define digunakan untuk mendefinisikan konstanta MAX_ITEMS dan MAX_LEN yang digunakan di seluruh program.

2. Fungsi clearScreen

void clearScreen() {
    // Cross-platform clear screen
    #ifdef _WIN32
    system("cls");
    #else
    system("clear");
    #endif
}

Fungsi ini membersihkan layar terminal. Untuk sistem operasi Windows, digunakan cls, sementara di sistem lain seperti Linux atau MacOS, digunakan clear.

3. Struct Definitions

struct Barang {
    char no[3];
    char nama[20];
    int harga;
};

struct Pembelian {
    char no[3];
    int jumlah;
};

  • struct Barang menyimpan informasi tentang barang, termasuk nomor, nama, dan harga.
  • struct Pembelian menyimpan informasi tentang pembelian, termasuk nomor barang dan jumlah yang dibeli.

4. Fungsi intToString

void intToString(int value, char* result) {
sprintf(result, "%d", value);
}

Mengkonversi bilangan bulat (int) ke string menggunakan sprintf.

5. Fungsi tampilkanMenu

void tampilkanMenu(struct Barang items[], int maxItems) {
    clearScreen();
    printf("Selamat datang di Toko Sensa\n");
    printf("Silahkan pilih barang yang Anda inginkan:\n");
    printf("-----------------------------------------\n");
    printf("| No | Barang          | Harga          |\n");
    printf("-----------------------------------------\n");
    int i;
    for (i = 0; i < maxItems; ++i) {
        printf("| %-2s | %-15s | Rp.%-10d |\n", items[i].no, items[i].nama, items[i].harga);
    }
    printf("-----------------------------------------\n");
    printf("\n");
    printf("11. Input Barang\n");
    printf("99. Struk Pembayaran\n");
    printf("55. Reset Pilihan\n");
    printf("00. Keluar\n");
    printf("\n");
    printf("-----------------------------------------\n");
    printf("Inputkan pilihan yang anda inginkan: ");
}


Detail Fungsi

  1. Pemanggilan fungsi clearScreen:
    • Fungsi ini digunakan untuk membersihkan layar. Ini membantu dalam memberikan tampilan yang bersih setiap kali menu ditampilkan.
  2. Menampilkan Header dan Instruksi:
    • Fungsi ini menggunakan printf untuk mencetak pesan selamat datang dan instruksi untuk memilih barang.
  3. Menampilkan Daftar Barang:
    • Program kemudian mencetak header tabel untuk daftar barang yang tersedia (No, Barang, Harga).
    • Loop for digunakan untuk melewati setiap item dalam array items (yang berisi struktur Barang).
    • Untuk setiap barang, nomor, nama, dan harga dicetak dalam format tabel.
  4. Menampilkan Opsi Tambahan:
    • Setelah daftar barang, menu menampilkan opsi tambahan seperti:
      • 11. Input Barang: Untuk menambah barang ke keranjang pembelian.
      • 99. Struk Pembayaran: Untuk mengakhiri pembelian dan mencetak struk pembayaran.
      • 55. Reset Pilihan: Untuk mengosongkan keranjang pembelian dan memulai lagi.
      • 00. Keluar: Untuk keluar dari program.
  5. Meminta Input Pengguna:
    • Di akhir fungsi, program meminta pengguna untuk memasukkan pilihan mereka.

Penjelasan Tambahan untuk siswa

  • Format String dalam printf:
    • %s digunakan untuk string, %d untuk integer.
    • Modifikasi seperti %-2s dan %-15s menetapkan lebar field dan rata kiri untuk output yang terformat rapi.
  • Loop For:
    • Loop ini penting untuk menampilkan setiap item di array items. i < maxItems memastikan bahwa loop berjalan hanya untuk jumlah item yang valid.
  • Kebersihan Layar:
    • Membersihkan layar sebelum menampilkan menu baru sangat penting dalam aplikasi berbasis teks untuk memastikan bahwa output tidak bercampur dengan teks sebelumnya.

Dengan menggunakan fungsi tampilkanMenu, program dapat menyajikan antarmuka yang user-friendly dan terorganisir dengan baik untuk interaksi pengguna.

6. Fungsi swap dan bubbleSort

6.A Fungsi swap

void swap(struct Pembelian *a, struct Pembelian *b) {
    struct Pembelian temp = *a;
    *a = *b;
    *b = temp;
}
  • Tujuan: Menukar dua elemen struct Pembelian.
  • Parameter: Fungsi ini menerima dua pointer ke struct Pembelian, yakni a dan b.
  • Proses:
    • Fungsi ini pertama-tama menyimpan nilai dari a ke dalam variabel sementara temp.
    • Kemudian, isi dari b disalin ke a.
    • Akhirnya, isi dari temp (yang merupakan nilai awal dari a) disalin ke b.
  • Penggunaan: Fungsi ini digunakan dalam proses pengurutan untuk menukar posisi dua elemen jika diperlukan.

6.B Fungsi bubbleSort

void bubbleSort(struct Pembelian arr[], int n) {
    int i, j;
    for (i = 0; i < n-1; i++) {     
        for (j = 0; j < n-i-1; j++) {
            if (arr[j].jumlah < arr[j+1].jumlah) {
                swap(&arr[j], &arr[j+1]);
            }
        }
    }
}
  • Tujuan: Mengurutkan array arr dari struct Pembelian berdasarkan jumlah pembelian dari yang terbesar ke terkecil.
  • Parameter:
    • arr[]: Array yang akan diurutkan.
    • n: Ukuran dari array tersebut.
  • Proses:
    • Fungsi ini menggunakan dua loop bersarang (for). Loop luar berjalan dari awal array hingga elemen kedua terakhir, dan loop dalam berjalan dari awal array hingga elemen yang belum diurutkan.
    • Di dalam loop dalam, fungsi ini membandingkan elemen saat ini (arr[j]) dengan elemen berikutnya (arr[j+1]). Jika elemen saat ini lebih kecil dari elemen berikutnya, mereka ditukar posisinya menggunakan fungsi swap.
    • Proses ini berulang hingga semua elemen diurutkan.
  • Algoritma: Ini adalah implementasi dari algoritma pengurutan Bubble Sort, yang merupakan metode pengurutan sederhana. Algoritma ini bekerja dengan berulang kali melewati array untuk diurutkan, membandingkan dua item sekaligus, dan menukarnya jika urutannya salah.

Penjelasan Tambahan untuk siswa

  • Konsep Bubble Sort:
    • Bubble Sort adalah algoritma pengurutan yang sederhana di mana setiap pasangan elemen berdekatan dibandingkan, dan elemen ditukar jika tidak dalam urutan yang diinginkan. Proses ini diulangi hingga tidak ada lagi tukar yang diperlukan.
  • Penggunaan Pointer:
    • Dalam fungsi swap, pointer digunakan untuk referensi langsung ke posisi memori dari elemen yang ingin ditukar. Ini memungkinkan kita untuk memodifikasi array asli langsung dari dalam fungsi swap.

7. Fungsi main

int main() {
    // Inisialisasi variabel dan struktur data
    ...
    // Loop utama aplikasi
    while (1) {
        // Menampilkan Menu dan menangani input pengguna
        ...
        switch (pilihan) {
            case 11:
                // Logika untuk menambah barang ke keranjang
                ...
                break;
            case 99: 
                // Logika untuk mencetak struk pembayaran
                ...
                break;
            case 55:
                // Logika untuk reset keranjang
                ...
                break;
            case 00:
                // Logika untuk keluar dari program
                ...
                break;
            default:
                // Tangani input yang tidak valid
                ...
        }
    }
    return 0;
}

Detail Fungsi

  1. Inisialisasi Variabel dan Struktur Data:
    • Inisialisasi waktu, variabel untuk struk, barang-barang yang tersedia, keranjang pembelian, dan variabel lain yang digunakan dalam program.
  2. Loop Utama Aplikasi (while (1)):
    • Program menggunakan loop while tak terbatas untuk terus menjalankan aplikasi sampai pengguna memutuskan untuk keluar.
  3. Menampilkan Menu dan Input Pengguna:
    • Memanggil fungsi tampilkanMenu untuk menampilkan opsi kepada pengguna.
    • Menerima input dari pengguna untuk memilih opsi yang diinginkan.
  4. Switch Case untuk Mengelola Opsi:
    • Berdasarkan input pengguna, switch case digunakan untuk menentukan aksi yang sesuai.
      • case 11: Menambah barang ke keranjang.
        • Meminta nomor barang dan jumlah yang akan dibeli.
        • Menambahkan informasi ini ke dalam keranjang pembelian.
      • case 99: Mencetak struk pembayaran.
        • Melakukan pengurutan keranjang menggunakan bubbleSort.
        • Menghitung total harga, diskon, dan total bayar.
        • Mencetak struk pembayaran ke layar.
      • case 55: Mereset keranjang pembelian.
        • Mengosongkan isi keranjang dan mengatur ulang total harga dan diskon.
      • case 00: Keluar dari program.
        • Menghentikan loop dan menutup program.
      • default: Menangani pilihan yang tidak valid.
        • Menampilkan pesan error jika pengguna memasukkan pilihan yang tidak dikenali.
  5. Akhir dari Fungsi main:
    • Fungsi mengembalikan 0, yang menandakan bahwa program berakhir dengan normal.

Penjelasan Tambahan untuk siswa

  • Struktur Kontrol: Penggunaan loop while dan switch case merupakan contoh struktur kontrol dasar dalam pemrograman. Mereka membantu dalam pengelolaan alur program berdasarkan kondisi atau pilihan pengguna.
  • Pengelolaan Data: Program ini mengelola data barang dan pembelian melalui array dari struktur, yang merupakan cara efektif untuk menangani kumpulan data yang terstruktur.
  • Pemisahan Fungsi: Memisahkan logika ke dalam fungsi yang berbeda (seperti tampilkanMenu, bubbleSort, dll.) membantu membuat kode lebih terorganisir dan mudah untuk dipahami atau dimodifikasi.
  • Importansi return 0: Di akhir main, return 0 menandakan bahwa program berakhir dengan sukses. Ini adalah konvensi dalam pemrograman C.

7.A Case ’11’

case 11:
    do {
        printf("\nMasukkan nomor barang: ");
        fgets(noBarang, 3, stdin);
        fflush(stdin); // Membersihkan buffer input
        noBarang[strcspn(noBarang, "\n")] = 0; // Menghapus newline

        printf("Masukkan jumlah: ");
        scanf("%d", &jumlah);
        fflush(stdin); // Membersihkan buffer input

        // Mencari barang dan menambahkannya ke keranjang
        int found = 0;
        int i;
        for (i = 0; i < MAX_ITEMS; i++) {
            if (strcmp(items[i].no, noBarang) == 0) {
                struct Pembelian pembelian;
                strcpy(pembelian.no, noBarang);
                pembelian.jumlah = jumlah;
                keranjang[jumlahItemDiKeranjang++] = pembelian;
                found = 1;
                break;
            }
        }
        if (!found) {
            printf("Nomor barang tidak ditemukan.\n");
        }

        printf("Apakah Anda ingin memasukkan barang lagi? (Y/N): ");
        tambahLagi = getchar();
        fflush(stdin); // Membersihkan buffer input
    } while (tambahLagi == 'Y' || tambahLagi == 'y');
    break;

Detail Langkah-langkah:

  1. Input Nomor Barang:
    • Pengguna diminta untuk memasukkan nomor barang menggunakan fgets. Ini membaca input sebagai string, termasuk baris baru (\n).
    • fflush(stdin) digunakan untuk membersihkan buffer input untuk menghindari masalah bacaan input berikutnya.
    • noBarang[strcspn(noBarang, "\n")] = 0 digunakan untuk menghapus karakter baris baru dari input yang diberikan oleh pengguna.
  2. Input Jumlah Barang:
    • Pengguna diminta untuk memasukkan jumlah barang yang ingin dibeli menggunakan scanf.
    • Lagi-lagi, fflush(stdin) digunakan setelah scanf untuk membersihkan buffer.
  3. Menambahkan Barang ke Keranjang:
    • Loop for digunakan untuk mencari barang dengan nomor yang sesuai dari array items.
    • Jika barang ditemukan (if (strcmp(items[i].no, noBarang) == 0)), maka program:
      • Membuat struktur Pembelian baru.
      • Menyalin nomor barang ke dalam struktur tersebut.
      • Menetapkan jumlah yang dimasukkan pengguna.
      • Menambahkan struktur Pembelian ke array keranjang.
      • Mengatur variabel found menjadi 1 (true) untuk menandakan bahwa barang ditemukan.
    • Jika barang tidak ditemukan, program mencetak pesan yang mengatakan bahwa nomor barang tidak ditemukan.
  4. Pilihan untuk Menambah Barang Lagi:
    • Setelah menambahkan barang, pengguna ditanya apakah ingin menambah barang lain ke keranjang.
    • Input (Y atau N) dibaca menggunakan getchar.
    • fflush(stdin) digunakan setelah getchar untuk membersihkan buffer.
  5. Pengulangan:
    • Semua proses ini diulang selama pengguna memilih untuk terus menambah barang (tambahLagi == 'Y' || tambahLagi == 'y').
  6. Keluar dari Case:
    • Setelah pengguna selesai menambah barang, program keluar dari case 11 dan kembali ke menu utama.

Poin Penting untuk siswa:

  • Penggunaan fgets dan scanf: Cara untuk membaca input string dan numerik di C.
  • Buffer Flushing: Mengapa penting untuk membersihkan buffer input setelah membaca input.
  • Penggunaan Loop for dan if: Untuk mencari data dalam array dan kondisi pengambilan keputusan.
  • Struktur Data: Cara menggunakan struktur (struct) untuk menyimpan dan mengelola data yang terkait.
  • Pengulangan dengan do-while: Memungkinkan pengguna untuk terus melakukan tindakan sampai kondisi tertentu tidak terpenuhi lagi.

7.B Case ’99’

case 99: 
    clearScreen();
    totalHarga = 0; // Mengatur ulang nilai
    totalDiskon = 0; // Mengatur ulang nilai
    totalBayar = 0; // Mengatur ulang nilai
    bubbleSort(keranjang, jumlahItemDiKeranjang);

    printf("Toko SENS\n");
    ...
    for (i = 0; i < jumlahItemDiKeranjang; i++) {
        ...
        // Logika untuk menghitung harga, total, dan diskon
        ...
    }
    totalBayar = totalHarga - totalDiskon;

    printf("==============================================================================\n");
    ...
    printf("Masukkan uang bayar: ");
    scanf("%d", &uangBayar);
    kembalian = uangBayar - totalBayar;
    ...
    getchar(); // Menangkap Enter
    getchar(); // Untuk menangkap Enter kedua kali
    break;

Detail Langkah-langkah:

  1. Pembersihan Layar dan Reset Nilai:
    • Layar dibersihkan dan variabel totalHarga, totalDiskon, dan totalBayar diatur ulang ke nol.
  2. Pengurutan Keranjang (Bubble Sort):
    • bubbleSort dipanggil untuk mengurutkan isi keranjang berdasarkan jumlah pembelian dari yang terbesar ke terkecil.
  3. Mencetak Header Struk:
    • Menampilkan informasi toko dan header struk.
  4. Iterasi dan Perhitungan Item di Keranjang:
    • Loop for digunakan untuk melewati setiap item di keranjang.
    • Untuk setiap item:
      • Harga item dihitung berdasarkan harga satuan dan jumlah pembelian.
      • Diskon dihitung jika jumlah pembelian memenuhi syarat diskon (diskon 15% untuk lebih dari 5 item, 10% untuk lebih dari 3 item).
      • Harga item dan diskon ditambahkan ke total harga dan diskon.
  5. Perhitungan Total Bayar:
    • Total bayar dihitung dengan mengurangkan diskon dari total harga.
  6. Input Uang Bayar dan Kalkulasi Kembalian:
    • Meminta pengguna untuk memasukkan jumlah uang yang dibayarkan.
    • Menghitung kembalian dengan mengurangkan total bayar dari uang yang dibayarkan.
  7. Menampilkan Detail Struk:
    • Menampilkan total harga, diskon, total bayar, uang yang dibayarkan, dan kembalian.
  8. Menunggu Respon Pengguna:
    • Menggunakan getchar() dua kali untuk menangkap karakter Enter dan memberi waktu kepada pengguna untuk melihat struk sebelum kembali ke menu utama.

Poin Penting untuk siswa:

  • Penggunaan Fungsi dan Loop: Demonstrasi bagaimana loop dan fungsi digunakan untuk menghitung dan menampilkan informasi.
  • Pengelolaan Data dan Kalkulasi: Cara mengelola dan melakukan perhitungan pada data dalam struktur.
  • Penggunaan printf untuk Output yang Terformat: Cara mencetak data ke layar dengan format yang rapi dan jelas.
  • Pengendalian Alur Program: Bagaimana case dalam switch digunakan untuk mengendalikan alur program berdasarkan pilihan pengguna.
  • Interaksi Pengguna: Mengambil input dari pengguna dan menggunakan input tersebut dalam perhitungan (uang bayar dan kembalian).

7.C Case ’55’

case 55:
    // Mengosongkan keranjang
    jumlahItemDiKeranjang = 0;
    totalHarga = 0;
    totalDiskon = 0;
    totalBayar = 0;

    printf("Keranjang pembelian telah direset.\n");
    getchar(); // Menangkap Enter
    break;

Detail Langkah-langkah:

  1. Mereset Keranjang Pembelian:
    • jumlahItemDiKeranjang diatur ulang menjadi 0. Ini efektif menghapus semua item dari keranjang karena loop dan operasi lain yang berkaitan dengan isi keranjang akan menggunakan nilai variabel ini untuk menentukan jumlah item di keranjang.
    • totalHarga, totalDiskon, dan totalBayar juga diatur ulang menjadi 0. Ini penting untuk memastikan bahwa perhitungan yang dilakukan di sesi pembelian berikutnya tidak terpengaruh oleh nilai-nilai dari sesi sebelumnya.
  2. Menampilkan Konfirmasi Reset:
    • Program mencetak pesan ke layar untuk memberitahu pengguna bahwa keranjang pembelian telah direset.
  3. Menunggu Respon Pengguna:
    • getchar() digunakan untuk menangkap karakter Enter dari pengguna. Ini memberi waktu kepada pengguna untuk membaca pesan konfirmasi sebelum program kembali ke menu utama.
  4. Keluar dari Case:
    • break digunakan untuk keluar dari case 55 dan kembali ke loop utama dari switch.

Poin Penting untuk siswa:

  • Pengaturan Ulang Variabel: Demonstrasi bagaimana mengatur ulang variabel menjadi keadaan awal mereka, yang berguna dalam konteks seperti reset atau inisialisasi ulang.
  • Interaksi Pengguna: Cara sederhana untuk memberikan umpan balik kepada pengguna dan menunggu respon sebelum melanjutkan.
  • Pengelolaan Data: Pentingnya mengelola data secara efisien dalam sebuah aplikasi, terutama dalam konteks seperti keranjang pembelian di mana isi data dapat berubah-ubah.
  • Penggunaan getchar(): Contoh penggunaan fungsi sederhana untuk menghentikan alur program sementara dan menunggu input pengguna.
  • Pentingnya break dalam switch: Memahami bagaimana break digunakan untuk mencegah eksekusi kode melompat ke case berikutnya dalam sebuah

7.D Case ’00’

case 00:
    printf("Keluar dari program.\n");
    return 0;

Detail Langkah-langkah:

  1. Menampilkan Pesan Keluar:
    • Ketika case 00 dieksekusi, program pertama-tama mencetak pesan "Keluar dari program.". Ini memberikan umpan balik kepada pengguna bahwa pilihan mereka untuk keluar telah diterima dan program sedang dalam proses untuk dihentikan.
  2. Mengakhiri Program:
    • return 0; adalah pernyataan yang mengakhiri fungsi main, dan karenanya, mengakhiri eksekusi program. Dalam konteks bahasa C, return 0 biasanya menandakan bahwa program telah berakhir dengan sukses tanpa error. Nilai yang dikembalikan (dalam hal ini 0) biasanya dikembalikan ke sistem operasi.

Poin Penting untuk siswa:

  • Mengakhiri Program: Cara mengakhiri eksekusi program dengan cara yang terkontrol. Ini penting karena memberikan kesempatan kepada program untuk menyelesaikan atau melepaskan sumber daya sebelum berhenti sepenuhnya.
  • Pesan Feedback: Pentingnya memberikan umpan balik kepada pengguna. Dalam kasus ini, program memberi tahu pengguna bahwa aksi keluar telah dipilih dan sedang dijalankan.
  • return dalam main: Dalam bahasa C, main adalah fungsi khusus dari mana eksekusi program dimulai. Menggunakan return dalam main mengakhiri program dan memberi tahu sistem operasi tentang status keluar program.
  • Nilai Kembalian main: Nilai yang dikembalikan oleh main (dalam hal ini 0) sering digunakan untuk menandakan status keluar program. Kode keluar 0 umumnya menunjukkan bahwa program berakhir tanpa masalah. Kode keluar lainnya bisa digunakan untuk menandakan berbagai jenis kesalahan atau status keluar yang berbeda.
  • Pengendalian Alur Program: Demonstrasi penggunaan switch case sebagai cara untuk mengendalikan alur program berdasarkan input pengguna. return 0; dalam case 00 adalah contoh bagaimana menghentikan alur program sepenuhnya dari dalam blok switch.

Program ini memberikan contoh nyata dari aplikasi berbasis teks untuk sistem pembelian sederhana, memperkenalkan konsep-konsep dasar pemrograman dalam C.

Artikel Terkait :

questionmark, info, help-308636.jpg
Tanya Jawab C Bagian 1
Ade Bratajaya Pradana

Ade Bratajaya Pradana

Saya adalah seorang programmer sekaligus guru yang mengajar di SMK TI Bali Global Badung. Antusias dengan dunia programming dan pendidikan. Senang berbagi ilmu tentang teknologi dan berita terbaru seputar IT. Memiliki visi memajukan IT di Indonesia khususnya di Pulau Bali. .

Leave a Comment

Your email address will not be published. Required fields are marked *