Program Kasir Sederhana dengan C++

Ilustrasi Konsep Program Kasir Rp 50.000 TOTAL BELANJA: Rp 35.000 Bayar

Membuat program kasir sederhana adalah salah satu latihan fundamental yang sangat baik untuk memahami konsep dasar pemrograman dalam C++, seperti penggunaan struktur data (array atau vector), perulangan (looping), kondisional (if/else), serta input/output (I/O) kepada pengguna.

Program ini umumnya berfungsi untuk mencatat barang yang dibeli, menghitung total harga, menerima jumlah pembayaran dari pelanggan, dan mengembalikan kembalian yang seharusnya. Versi sederhana yang akan kita bahas di sini akan menggunakan array statis untuk menyimpan daftar harga barang dan struktur perulangan untuk interaksi pengguna.

Fokus utama dalam pengembangan aplikasi kasir (meskipun sederhana) adalah akurasi perhitungan dan kemudahan antarmuka pengguna, meskipun antarmuka berbasis konsol (CLI) seperti ini seringkali lebih berfokus pada logika inti.

Contoh Kode Program C++ Kasir Sederhana

Kode di bawah ini mengimplementasikan fungsi dasar kasir yang memungkinkan kasir memilih item dari daftar yang sudah ditentukan, menghitung total, dan menampilkan struk sederhana.

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

using namespace std;

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

// Fungsi untuk menampilkan daftar barang
void tampilkanMenu(const vector<Barang>& menu) {
    cout << << "\n====================================\n";
    cout << "         DAFTAR BARANG\n";
    cout << "====================================\n";
    cout << "No. | Nama Barang | Harga (Rp)\n";
    cout << "------------------------------------\n";
    for (size_t i = 0; i < menu.size(); ++i) {
        cout << setw(3) << i + 1 << " | " 
             << left << setw(11) << menu[i].nama << " | " 
             << right << fixed << setprecision(0) << menu[i].harga << endl;
    }
    cout << "====================================\n";
}

int main() {
    // Inisialisasi Data Barang
    vector<Barang> daftarBarang = {
        {"Buku Tulis", 5500.00},
        {"Pulpen Gel", 3000.00},
        {"Pensil 2B", 2500.00},
        {"Penghapus", 1500.00},
        {"Penggaris", 4000.00}
    };

    tampilkanMenu(daftarBarang);

    int pilihan;
    double totalBelanja = 0.0;
    vector<pair<Barang, int>> keranjang; // Menyimpan barang dan kuantitas

    cout << << "\nMasukkan Nomor Barang yang dibeli (0 untuk selesai): ";
    cin >> pilihan;

    while (pilihan != 0) {
        if (pilihan > 0 && (size_t)pilihan <= daftarBarang.size()) {
            int kuantitas;
            cout << << "Masukkan kuantitas untuk " << daftarBarang[pilihan - 1].nama << ": ";
            cin >> kuantitas;

            if (kuantitas > 0) {
                // Tambahkan ke keranjang
                keranjang.push_back({daftarBarang[pilihan - 1], kuantitas});
                totalBelanja += daftarBarang[pilihan - 1].harga * kuantitas;
                cout << << daftarBarang[pilihan - 1].nama << " x" << kuantitas << " ditambahkan.\n";
            } else {
                cout << << "Kuantitas harus lebih dari nol.\n";
            }
        } else {
            cout << << "Pilihan tidak valid. Silakan coba lagi.\n";
        }

        cout << << "\nTotal sementara: Rp " << fixed << setprecision(0) << totalBelanja << endl;
        cout << << "Masukkan Nomor Barang selanjutnya (0 untuk selesai): ";
        cin >> pilihan;
    }

    // Proses Pembayaran
    cout << << "\n--- TRANSAKSI SELESAI ---\n";
    
    if (totalBelanja > 0) {
        double pembayaran;
        cout << << "Total Belanja Akhir: Rp " << fixed << setprecision(0) << totalBelanja << endl;
        
        do {
            cout << << "Masukkan Uang Pembayaran: Rp ";
            cin >> pembayaran;
            if (pembayaran < totalBelanja) {
                cout << << "Uang pembayaran kurang! Mohon masukkan jumlah yang cukup.\n";
            }
        } while (pembayaran < totalBelanja);

        double kembalian = pembayaran - totalBelanja;

        // Output Struk
        cout << << "\n================ STRUK PEMBELIAN ================\n";
        cout << << setw(10) << "Nama" << setw(10) << "Qty" << setw(15) << "Harga Satuan" << setw(15) << "Subtotal\n";
        cout << << "--------------------------------------------------\n";
        
        for (const auto& item : keranjang) {
            double subtotal = item.first.harga * item.second;
            cout << << setw(10) << left << item.first.nama.substr(0, 9)
                 << setw(10) << item.second
                 << setw(15) << fixed << setprecision(0) << item.first.harga
                 << setw(15) << fixed << setprecision(0) << subtotal << "\n";
        }
        
        cout << "--------------------------------------------------\n";
        cout << setw(35) << "TOTAL" << setw(15) << fixed << setprecision(0) << totalBelanja << "\n";
        cout << setw(35) << "BAYAR" << setw(15) << fixed << setprecision(0) << pembayaran << "\n";
        cout << setw(35) << "KEMBALIAN" << setw(15) << fixed << setprecision(0) << kembalian << "\n";
        cout << "==================================================\n";
        cout << "           TERIMA KASIH SUDAH BERBELANJA!\n";
    } else {
        cout << << "Tidak ada item yang dibeli. Transaksi dibatalkan.\n";
    }

    return 0;
}

Penjelasan Logika Program

1. Struktur Data Barang

Kita mendefinisikan sebuah `struct Barang` yang berisi `nama` (string) dan `harga` (double). Untuk menyimpan daftar barang yang tersedia, digunakan `std::vector`. Penggunaan vector lebih fleksibel daripada array statis karena ukurannya bisa bertambah jika di kemudian hari kita ingin menambahkan lebih banyak produk tanpa mengubah definisi kode secara drastis.

2. Input dan Perulangan Transaksi

Program meminta pengguna memasukkan nomor barang yang diinginkan dalam sebuah perulangan `while`. Perulangan ini akan terus berjalan sampai pengguna memasukkan '0', yang menandakan bahwa daftar belanja sudah selesai.

Di dalam loop, program memvalidasi input nomor barang. Jika valid, pengguna diminta memasukkan kuantitas. Total belanja (`totalBelanja`) kemudian diakumulasikan. Kita juga menyimpan detail setiap item yang dibeli beserta kuantitasnya di dalam vector `keranjang` untuk keperluan pembuatan struk.

3. Proses Pembayaran dan Kembalian

Setelah perulangan selesai, program memasuki fase pembayaran. Program akan memastikan bahwa uang yang dibayarkan (`pembayaran`) lebih besar atau sama dengan `totalBelanja`. Jika kurang, program akan meminta input ulang.

Kembalian dihitung dengan sederhana: Kembalian = Pembayaran - Total Belanja. Fungsi `std::fixed` dan `std::setprecision(0)` dari library `` digunakan untuk memastikan output uang ditampilkan tanpa angka desimal, sesuai format umum struk harga barang di Indonesia.

4. Pembuatan Struk

Bagian terakhir adalah pencetakan struk. Di sini, kita menggunakan fungsi `std::setw()` untuk mengatur lebar kolom (`set width`), sehingga output di konsol menjadi rapi dan menyerupai format struk pembelian. Informasi mengenai nama barang, kuantitas, harga satuan, subtotal, total, pembayaran, dan kembalian ditampilkan secara terstruktur.

Penggunaan logika ini memastikan bahwa konsep dasar perhitungan transaksi dapat diaplikasikan dengan mudah menggunakan bahasa C++.