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.
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;
}
Kita mendefinisikan sebuah `struct Barang` yang berisi `nama` (string) dan `harga` (double). Untuk menyimpan daftar barang yang tersedia, digunakan `std::vector
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.
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 `
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++.