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).
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
- Struct Barang: Mendefinisikan template data untuk setiap produk yang dijual, berisi nama dan harga.
- Vector Keranjang: Digunakan sebagai wadah dinamis untuk menyimpan semua barang yang dipilih oleh pelanggan selama sesi input berlangsung.
- Fungsi
tampilkanMenu: Bertanggung jawab untuk menampilkan daftar barang yang tersedia secara terstruktur. Penggunaanstd::fixeddanstd::setprecisionmembantu memformat output harga agar terlihat seperti mata uang. - 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. - Perhitungan Total dan Kembalian: Setelah loop selesai, program menghitung total belanja. Kemudian, ia meminta uang pembayaran dan menghitung selisih sebagai uang kembalian. Penggunaan
std::setwdalam 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:
- Manajemen Stok: Mengurangi jumlah stok saat barang dibeli.
- Diskon: Implementasi logika diskon berdasarkan jumlah item atau total belanja.
- Penyimpanan Data: Menggunakan file (seperti CSV atau TXT) untuk menyimpan data menu permanen alih-alih memasukkannya secara manual di kode sumber.
- Penggunaan Class: Mengubah
structmenjadiclassuntuk mengimplementasikan prinsip OOP yang lebih baik.
Meskipun sederhana, kode ini menunjukkan bagaimana C++ dapat digunakan untuk memproses transaksi dasar secara efisien di lingkungan konsol.