Program kasir adalah salah satu aplikasi dasar yang sangat berguna untuk belajar logika pemrograman, terutama dalam mengelola input/output, array/struktur data, dan perhitungan matematis sederhana. Menggunakan C++ untuk membuat program kasir memungkinkan kita memahami bagaimana komputer memproses transaksi secara efisien.
Proyek kasir ini akan kita buat berbasis konsol (Command Line Interface/CLI) agar fokus pada logika dasarnya. Kita akan mencakup fitur dasar seperti menampilkan menu barang, input kuantitas, menghitung total, dan menampilkan struk.
Langkah 1: Menyiapkan Struktur Data Barang
Dalam program kasir, kita perlu menyimpan informasi barang seperti nama, harga, dan kode unik. Untuk kesederhanaan, kita bisa menggunakan struct atau kelas di C++ untuk merepresentasikan setiap item, dan menggunakan std::vector untuk menampung daftar barang.
Struktur Barang dan Inisialisasi Data
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
struct Item {
int kode;
string nama;
double harga;
};
// Inisialisasi daftar barang
vector<Item> daftarBarang = {
{101, "Kopi Premium", 15000.00},
{102, "Roti Cokelat", 8500.00},
{103, "Air Mineral 600ml", 3000.00},
{104, "Sandwich Keju", 18000.00}
};
Langkah 2: Membuat Fungsi Tampilkan Menu
Pengguna perlu melihat barang apa saja yang tersedia sebelum bertransaksi. Fungsi ini akan mengiterasi seluruh elemen dalam vektor barang dan mencetaknya dengan format yang rapi menggunakan std::setw dan std::fixed untuk format harga.
void tampilkanMenu() {
cout << "\n======================================\n";
cout << std::left << std::setw(10) << "KODE"
<< std::setw(20) << "NAMA BARANG"
<< std::setw(10) << "HARGA" << endl;
cout << "--------------------------------------\n";
for (const auto& item : daftarBarang) {
cout << std::left << std::setw(10) << item.kode
<< std::setw(20) << item.nama
<< "Rp " << std::fixed << std::setprecision(2) << item.harga << endl;
}
cout << "======================================\n";
}
Langkah 3: Proses Transaksi dan Perhitungan
Inti dari program kasir adalah kemampuan menerima input kode barang dan kuantitas, lalu mengakumulasi total belanja. Kita memerlukan struktur data tambahan untuk menampung barang yang dibeli dalam satu sesi transaksi.
Struktur Transaksi
struct DetailTransaksi {
Item item;
int kuantitas;
};
Dalam loop utama (fungsi main), kita akan terus meminta input kode barang. Setelah kode dimasukkan, kita cari di daftarBarang. Jika ditemukan, kita minta kuantitas, dan tambahkan ke DetailTransaksi.
Langkah 4: Menampilkan Struk Belanja
Setelah pengguna selesai memasukkan semua item (biasanya dengan memasukkan kode keluar, misalnya kode 0), program harus menghitung total keseluruhan dan menampilkan struk yang rapi, termasuk PPN jika diperlukan (untuk contoh ini kita abaikan PPN untuk kesederhanaan).
Contoh Perhitungan Total
double hitungTotal(const vector<DetailTransaksi>& dp) {
double total = 0.0;
for (const auto& dt : dp) {
total += (dt.item.harga * dt.kuantitas);
}
return total;
}
void cetakStruk(const vector<DetailTransaksi>& dp, double total) {
cout << "\n\n******* STRUK PEMBELIAN ********\n";
cout << std::left << std::setw(25) << "ITEM" << "QTY x HARGA = SUBTOTAL\n";
cout << "--------------------------------\n";
for (const auto& dt : dp) {
double subtotal = dt.item.harga * dt.kuantitas;
cout << std::left << std::setw(25) << dt.item.nama
<< dt.kuantitas << " x "
<< dt.item.harga << " = "
<< std::fixed << std::setprecision(2) << subtotal << endl;
}
cout << "--------------------------------\n";
cout << std::right << std::setw(15) << "TOTAL BELANJA: Rp " << total << endl;
cout << "********************************\n";
// Logika Uang Tunai dan Kembalian
double bayar;
cout << "Masukkan uang bayar: Rp ";
cin >> bayar;
if (bayar >= total) {
cout << std::right << std::setw(15) << "KEMBALIAN: Rp "
<< (bayar - total) << endl;
} else {
cout << "Pembayaran kurang!\n";
}
}
Integrasi dalam Fungsi Main
Menggabungkan semua fungsi di atas dalam loop utama akan menghasilkan program kasir fungsional. Pastikan untuk selalu validasi input pengguna, terutama saat meminta kode barang dan kuantitas, untuk menghindari *crash* pada program Anda.
Dengan menguasai struktur dasar ini, Anda bisa mulai mengembangkan program kasir C++ ini menjadi lebih kompleks, misalnya menambahkan fitur diskon, pencatatan stok barang, atau bahkan mengintegrasikannya dengan file I/O untuk menyimpan riwayat transaksi secara permanen.