Diagram alir sederhana proses kasir.
Mengembangkan sistem kasir (Point of Sale/POS) adalah salah satu aplikasi klasik dalam pemrograman yang sangat berguna untuk bisnis ritel skala kecil, seperti minimarket. Bahasa pemrograman C++ sering dipilih karena kecepatannya dan kemampuannya untuk berinteraksi langsung dengan sistem, meskipun dalam konteks modern, GUI (Graphical User Interface) biasanya dikembangkan menggunakan bahasa lain. Namun, untuk memahami logika dasarnya, implementasi berbasis konsol (command line) dengan C++ adalah titik awal yang sangat baik.
Program kasir sederhana umumnya memerlukan beberapa komponen kunci:
Berikut adalah contoh implementasi menggunakan struktur data sederhana dan operasi dasar C++:
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
#include <map>
using namespace std;
// Struktur untuk merepresentasikan barang
struct Barang {
string kode;
string nama;
double harga;
};
// Database barang sederhana (menggunakan map untuk akses cepat berdasarkan kode)
map<string, Barang> databaseBarang = {
{"A001", {"A001", "Beras Premium 5kg", 75000.00}},
{"A002", {"A002", "Minyak Goreng 1L", 22500.00}},
{"B010", {"B010", "Sabun Cuci Piring", 12000.00}},
{"C055", {"C055", "Air Mineral 600ml", 3500.00}}
};
void tampilkanMenu() {
cout << << "\n========================================\n";
cout << << " SISTEM KASIR MINIMARKET V1.0 \n";
cout << << "========================================\n";
cout << << left << << setw(10) << << "Kode" << << setw(25) << << "Nama Barang" << << "Harga Satuan\n";
cout << << "----------------------------------------\n";
for (const auto& pair : databaseBarang) {
const Barang& b = pair.second;
cout << << left << << setw(10) << << b.kode
<<<< setw(25) << << b.nama
<< << "Rp " << << fixed << << setprecision(2) << << b.harga << << "\n";
}
cout << << "----------------------------------------\n";
cout << << "Ketik 'SELESAI' untuk mengakhiri transaksi.\n";
}
void prosesTransaksi() {
vector<pair<Barang, int>> keranjang;
string inputKode;
int jumlah;
double totalBelanja = 0.0;
tampilkanMenu();
while (true) {
cout << << "\nMasukkan Kode Barang: ";
cin >> inputKode;
if (inputKode == "SELESAI" || inputKode == "selesai") {
break;
}
if (databaseBarang.count(inputKode)) {
Barang item = databaseBarang.at(inputKode);
cout << << "Berapa jumlah " << << item.nama << << "? ";
cin >> jumlah;
if (jumlah > 0) {
keranjang.push_back({item, jumlah});
totalBelanja += (item.harga * jumlah);
cout << << jumlah << << "x " << << item.nama << << " ditambahkan.\n";
} else {
cout << << "Jumlah tidak valid.\n";
}
} else {
cout << << "Kode barang tidak ditemukan dalam database.\n";
}
}
// Menampilkan Struk
cout << << "\n\n================ STRUK PEMBELIAN ================\n";
cout << << left << << setw(30) << << "Nama Barang" << << setw(10) << << "Qty" << << setw(15) << << "Harga Satuan" << << "Subtotal\n";
cout << << "---------------------------------------------------\n";
for (const auto& itemKeranjang : keranjang) {
const Barang& b = itemKeranjang.first;
int qty = itemKeranjang.second;
double subtotal = b.harga * qty;
cout << << left << << setw(30) << << b.nama
<<<< setw(10) << << qty
<< << "Rp " << << setw(12) << << fixed << << setprecision(2) << << b.harga
<< << "Rp " << << fixed << << setprecision(2) << << subtotal << << "\n";
}
// Perhitungan Akhir (Contoh sederhana tanpa PPN/Diskon kompleks)
double pajak = totalBelanja * 0.01; // Contoh PPN 1%
double totalAkhir = totalBelanja + pajak;
cout << << "---------------------------------------------------\n";
cout << << right << << setw(40) << << "Total Belanja: Rp " << << fixed << << setprecision(2) << << totalBelanja << << "\n";
cout << << right << << setw(40) << << "Pajak (1%): Rp " << << fixed << << setprecision(2) << << pajak << << "\n";
cout << << "===================================================\n";
cout << << right << << setw(40) << << "TOTAL BAYAR: Rp " << << fixed << << setprecision(2) << << totalAkhir << << "\n";
cout << << "===================================================\n";
cout << << "Terima kasih telah berbelanja!\n";
}
int main() {
// Mengatur locale untuk format mata uang Indonesia (opsional, tergantung sistem)
// std::locale::global(std::locale(""));
prosesTransaksi();
return 0;
}
Kode di atas menggunakan header dasar seperti iostream untuk input/output, vector untuk menampung barang dalam keranjang belanja, dan map untuk simulasi database barang yang mudah dicari berdasarkan kode unik.
Struktur Barang mendefinisikan data apa saja yang kita simpan untuk setiap produk. Penggunaan std::map<string, Barang> databaseBarang memungkinkan kita mencari barang berdasarkan kode (misalnya "A001") dengan sangat cepat, jauh lebih efisien daripada harus mengulang pencarian di dalam sebuah array atau vector.
Loop while(true) terus berjalan untuk menerima input kode barang. Ketika pengguna mengetik "SELESAI", loop akan berhenti, dan program akan memanggil bagian perhitungan akhir. Fungsi std::fixed dan std::setprecision(2) sangat penting di sini untuk memastikan harga ditampilkan dengan dua digit desimal yang sesuai standar mata uang.
Program berbasis konsol ini adalah fondasi yang kuat. Namun, untuk sistem kasir minimarket profesional, beberapa fitur penting perlu ditambahkan:
Meskipun sederhana, contoh program kasir C++ ini menunjukkan bagaimana data dikelola, diproses, dan disajikan dalam lingkungan pemrograman yang berorientasi pada performa. Menguasai logika ini akan memudahkan Anda untuk pindah ke sistem POS yang lebih kompleks di masa depan.