Sistem kasir (Point of Sale/POS) merupakan komponen krusial dalam operasional restoran modern. Membangun sistem kasir sederhana menggunakan bahasa pemrograman C++ adalah latihan yang sangat baik untuk memahami konsep dasar pemrograman seperti input/output, struktur data (array atau struct), dan logika percabangan (if/else atau switch case).
Artikel ini akan menyajikan sebuah contoh program C++ yang mensimulasikan fungsi dasar kasir: menampilkan menu, menerima pesanan, menghitung total harga, dan menampilkan struk pembayaran. Fokus utama adalah kesederhanaan dan kejelasan kode agar mudah dipahami oleh pemula yang sedang mencari contoh program c++ kasir restoran yang praktis.
Visualisasi Sederhana Sistem Kasir
Untuk menyimpan daftar makanan dan harganya, kita bisa menggunakan array dua dimensi (atau lebih baik lagi, struct jika ingin lebih terstruktur). Dalam contoh ini, kita akan menggunakan array statis sederhana untuk kemudahan. Setiap item akan memiliki kode, nama, dan harga.
Struktur utama yang diperlukan mencakup array untuk menyimpan kode dan harga menu, serta variabel untuk mengakumulasi pesanan pelanggan.
Berikut adalah kode lengkap yang mengimplementasikan logika kasir sederhana. Kode ini menggunakan `std::cin` dan `std::cout` untuk interaksi berbasis konsol. Pastikan Anda telah menyertakan pustaka `
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
struct ItemMenu {
int kode;
string nama;
double harga;
};
void tampilkanMenu(const vector<ItemMenu>& menu) {
cout << "\n======================================\n";
cout << " MENU RESTORAN C++\n";
cout << "======================================\n";
cout << "Kode | Nama Makanan | Harga (Rp)\n";
cout << "--------------------------------------\n";
for (const auto& item : menu) {
cout << setw(4) << item.kode << " | "
<< setw(18) << left << item.nama << " | "
<< setw(8) << right << fixed << setprecision(0) << item.harga << endl;
}
cout << "======================================\n";
}
int main() {
// Inisialisasi Menu
vector<ItemMenu> daftarMenu = {
{101, "Nasi Goreng Spesial", 25000},
{102, "Mie Ayam Jamur", 18000},
{103, "Es Teh Manis", 5000},
{104, "Kopi Susu Dingin", 12000}
};
tampilkanMenu(daftarMenu);
int kodePesanan;
int jumlah;
double totalBelanja = 0;
vector<pair<string, double>> strukSementara;
cout << "\nMemulai Transaksi Kasir\n";
while (true) {
cout << "Masukkan Kode Menu (atau 0 untuk selesai): ";
cin >> kodePesanan;
if (kodePesanan == 0) {
break;
}
bool itemDitemukan = false;
for (const auto& item : daftarMenu) {
if (item.kode == kodePesanan) {
itemDitemukan = true;
cout << "Jumlah Pesanan " << item.nama << ": ";
cin >> jumlah;
if (jumlah > 0) {
double subtotal = item.harga * jumlah;
totalBelanja += subtotal;
strukSementara.push_back({item.nama + " x " + to_string(jumlah), subtotal});
cout << item.nama << " (" << jumlah << "x) ditambahkan. Subtotal: Rp" << subtotal << endl;
}
break;
}
}
if (!itemDitemukan) {
cout << "Kode menu tidak valid. Silakan coba lagi.\n";
}
}
// Menampilkan Struk Pembayaran
cout << "\n\n================ STRUK PEMBAYARAN ================\n";
cout << setfill(' ') << left << setw(25) << "Item" << right << setw(15) << "Harga\n";
cout << "--------------------------------------------------\n";
for(const auto& itemStruk : strukSementara) {
cout << setfill(' ') << left << setw(25) << itemStruk.first
<< right << setw(15) << fixed << setprecision(0) << itemStruk.second << endl;
}
cout << "--------------------------------------------------\n";
cout << setfill(' ') << left << setw(25) << "TOTAL TAGIHAN" << right << setw(15) << totalBelanja << endl;
cout << "==================================================\n";
double uangBayar;
cout << "Uang yang dibayarkan: Rp";
cin >> uangBayar;
if (uangBayar < totalBelanja) {
cout << "\nUang Kurang! Transaksi Dibatalkan.\n";
} else {
double kembalian = uangBayar - totalBelanja;
cout << "Kembalian Anda: Rp" << fixed << setprecision(0) << kembalian << endl;
cout << "\n--- Terima Kasih Atas Kunjungan Anda ---\n";
}
return 0;
}
1. Struktur Data (`struct ItemMenu`): Digunakan untuk mengorganisir data menu secara logis, memisahkan kode, nama, dan harga.
2. `tampilkanMenu` Function: Fungsi ini bertanggung jawab untuk mencetak daftar menu ke konsol dengan format yang rapi, memanfaatkan fungsi `setw` dan `setprecision` dari `
3. Loop Transaksi Utama (`while(true)`): Program terus meminta input kode menu dari pengguna sampai pengguna memasukkan kode `0`.
4. Pencarian dan Akumulasi: Setiap kode yang dimasukkan dicocokkan dengan data menu. Jika cocok, jumlah pesanan diminta, subtotal dihitung, dan ditambahkan ke `totalBelanja`. Hasilnya disimpan sementara di `strukSementara`.
5. Output Struk: Setelah transaksi selesai, program mencetak ringkasan pesanan dan total tagihan. Bagian ini juga menghitung dan menampilkan kembalian setelah uang pembayaran dimasukkan.
Contoh program ini adalah dasar. Untuk membuatnya menjadi sistem kasir restoran yang fungsional, beberapa pengembangan diperlukan, seperti: penanganan stok barang (inventory), manajemen diskon atau pajak, penambahan fitur pembatalan item, atau penyimpanan data pesanan secara permanen (misalnya menggunakan file I/O atau database). Namun, sebagai contoh program c++ kasir restoran dasar, implementasi di atas sudah memadai untuk memulai pembelajaran.