Membangun Sistem Kasir Sederhana dengan C++

Pendahuluan

Program kasir adalah inti dari banyak bisnis ritel. Meskipun sistem modern menggunakan basis data yang kompleks, memahami dasar-dasar pembuatan program kasir menggunakan bahasa pemrograman dasar seperti C++ sangat penting. C++ menawarkan kecepatan dan kontrol yang baik, menjadikannya fondasi yang kuat untuk aplikasi berbasis konsol atau bahkan aplikasi desktop yang lebih besar di masa depan.

Artikel ini akan menyajikan contoh program kasir sederhana C++ yang berfokus pada input daftar barang, perhitungan total harga, dan kembalian uang tunai. Program ini akan berjalan di lingkungan konsol (terminal).

TOTAL: Rp 50.000 POS System

Ilustrasi Sederhana Sistem Kasir

Struktur Program Kasir Sederhana C++

Program ini akan menggunakan struktur dasar seperti struct untuk mendefinisikan produk, vector untuk menampung item yang dibeli, dan loop while untuk mengizinkan pengguna memasukkan beberapa item.

Contoh Kode Lengkap


#include <iostream>
#include <vector>
#include <string>
#include <iomanip>

using namespace std;

// Struktur data untuk merepresentasikan barang
struct Barang {
    string nama;
    double harga;
};

void tampilkanMenu(const vector<Barang>& daftar_barang) {
    cout << "\n--- Daftar Barang Tersedia ---" << endl;
    cout << fixed << setprecision(0); // Untuk format mata uang tanpa desimal
    for (size_t i = 0; i < daftar_barang.size(); ++i) {
        cout << "[" << i + 1 << "] " << daftar_barang[i].nama 
             << " - Rp " << daftar_barang[i].harga << endl;
    }
    cout << "------------------------------" << endl;
}

int main() {
    // Inisialisasi data barang (simulasi database kecil)
    vector<Barang> menu = {
        {"Nasi Goreng Spesial", 25000},
        {"Ayam Bakar Jumbo", 35000},
        {"Es Teh Manis", 5000},
        {"Kopi Susu Dingin", 15000}
    };

    vector<Barang> keranjang;
    double total_belanja = 0.0;
    int pilihan_kode;
    double uang_bayar;
    
    cout << "=========================================" << endl;
    cout << "     SISTEM KASIR SEDERHANA C++" << endl;
    cout << "=========================================" << endl;

    while (true) {
        tampilkanMenu(menu);
        cout << "Masukkan nomor barang (1-" << menu.size() << ") atau 0 untuk selesai: ";
        
        if (!(cin >> pilihan_kode) || pilihan_kode < 0) {
            cout << "Input tidak valid. Silakan coba lagi." << endl;
            cin.clear();
            cin.ignore(10000, '\n');
            continue;
        }

        if (pilihan_kode == 0) {
            break; // Keluar dari loop jika pengguna memilih 0
        }

        if (pilihan_kode > 0 && (size_t)pilihan_kode <= menu.size()) {
            Barang item_terpilih = menu[pilihan_kode - 1];
            keranjang.push_back(item_terpilih);
            total_belanja += item_terpilih.harga;
            cout << "=> " << item_terpilih.nama << " ditambahkan ke keranjang." << endl;
        } else {
            cout << "Pilihan nomor tidak ada dalam menu. Coba lagi." << endl;
        }
    }

    // Proses Pembayaran
    cout << "\n================ STRUK PEMBAYARAN ================" << endl;
    cout << fixed << setprecision(2); // Set presisi untuk output akhir (jika ada desimal)

    if (keranjang.empty()) {
        cout << "Tidak ada item yang dibeli. Transaksi dibatalkan." << endl;
        return 0;
    }

    cout << left << setw(25) << "Item" << right << setw(10) << "Harga" << endl;
    cout << "--------------------------------------" << endl;

    // Tampilkan detail item yang dibeli
    for (const auto& item : keranjang) {
        cout << left << setw(25) << item.nama << right << setw(10) << item.harga << endl;
    }
    cout << "--------------------------------------" << endl;
    
    cout << left << setw(25) << "TOTAL BELANJA" << right << setw(10) << total_belanja << endl;

    // Input Pembayaran
    do {
        cout << "Uang Dibayarkan: Rp ";
        cin >> uang_bayar;
        if (uang_bayar < total_belanja) {
            cout << "Uang tidak mencukupi. Kurang Rp " << total_belanja - uang_bayar << endl;
        }
    } while (uang_bayar < total_belanja);

    double kembalian = uang_bayar - total_belanja;
    cout << left << setw(25) << "Uang Kembalian" << right << setw(10) << kembalian << endl;
    cout << "==================================================" << endl;
    cout << "Terima kasih telah berbelanja!" << endl;

    return 0;
}

Penjelasan Komponen Kode

  1. Struct Barang: Mendefinisikan template data untuk setiap produk yang dijual, berisi nama dan harga.
  2. Vector Keranjang: Digunakan sebagai wadah dinamis untuk menyimpan semua barang yang dipilih oleh pelanggan selama sesi input berlangsung.
  3. Fungsi tampilkanMenu: Bertanggung jawab untuk menampilkan daftar barang yang tersedia secara terstruktur. Penggunaan std::fixed dan std::setprecision membantu memformat output harga agar terlihat seperti mata uang.
  4. Loop Utama (while(true)): Memungkinkan kasir untuk memasukkan item satu per satu hingga pengguna memasukkan kode '0' untuk mengakhiri pemesanan. Penanganan input dasar disertakan untuk mencegah program crash jika pengguna memasukkan teks alih-alih angka.
  5. Perhitungan Total dan Kembalian: Setelah loop selesai, program menghitung total belanja. Kemudian, ia meminta uang pembayaran dan menghitung selisih sebagai uang kembalian. Penggunaan std::setw dalam proses pencetakan struk bertujuan merapikan kolom output di konsol.

Pengembangan Lebih Lanjut

Contoh program kasir sederhana c++ ini adalah dasar yang sangat baik. Untuk menjadikannya sistem yang lebih fungsional, Anda dapat menambahkan fitur seperti:

Meskipun sederhana, kode ini menunjukkan bagaimana C++ dapat digunakan untuk memproses transaksi dasar secara efisien di lingkungan konsol.