Pengembangan sistem informasi sederhana, bahkan dalam skala kecil seperti manajemen stok dan penjualan sepatu, merupakan langkah fundamental dalam memahami logika pemrograman berorientasi objek (OOP) maupun pemrograman prosedural. Bahasa C++ sering dipilih untuk tugas semacam ini karena kecepatan eksekusi dan kontrol memori yang ditawarkannya. Artikel ini akan menyajikan contoh program C++ penjualan sepatu yang fokus pada pencatatan inventaris dan simulasi transaksi sederhana.
Program ini bertujuan untuk:
Dalam C++, kita akan mendefinisikan sebuah struktur (struct) untuk merepresentasikan setiap item sepatu. Ini adalah fondasi data kita.
Berikut adalah implementasi menggunakan pendekatan prosedural dasar yang mudah dipahami oleh pemula:
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
// Struktur untuk merepresentasikan data sepatu
struct Sepatu {
string nama;
int ukuran;
double harga;
int stok;
};
// Fungsi untuk menampilkan semua sepatu
void tampilkanStok(const vector<Sepatu>& inventaris) {
cout << "\n--- INVENTARIS SEPATU ---\n";
cout << left << setw(20) << "Nama"
<< setw(8) << "Ukuran"
<< setw(12) << "Harga"
<< setw(8) << "Stok" << endl;
cout << string(50, '-') << endl;
for (const auto& s : inventaris) {
cout << left << setw(20) << s.nama
<< setw(8) << s.ukuran
<< "Rp " << fixed << setprecision(0) << setw(9) << s.harga
<< setw(8) << s.stok << endl;
}
}
// Fungsi simulasi penjualan
void prosesPenjualan(vector<Sepatu>& inventaris) {
string nama_dicari;
int jumlah_beli;
double total_bayar = 0;
int index_ditemukan = -1;
cout << "\n--- PROSES PENJUALAN ---\n";
cout << "Masukkan nama sepatu yang ingin dibeli: ";
cin.ignore(); // Membersihkan buffer sebelum getline
getline(cin, nama_dicari);
// Mencari sepatu berdasarkan nama
for (size_t i = 0; i < inventaris.size(); ++i) {
if (inventaris[i].nama == nama_dicari) {
index_ditemukan = i;
break;
}
}
if (index_ditemukan == -1) {
cout << "Error: Sepatu tidak ditemukan dalam stok.\n";
return;
}
Sepatu& item = inventaris[index_ditemukan];
cout << "Harga " << item.nama << ": Rp " << item.harga << endl;
cout << "Stok tersedia: " << item.stok << endl;
cout << "Jumlah yang ingin dibeli: ";
cin >> jumlah_beli;
if (jumlah_beli <= 0) {
cout << "Jumlah pembelian tidak valid.\n";
} else if (jumlah_beli > item.stok) {
cout << "Stok tidak mencukupi! Transaksi dibatalkan.\n";
} else {
// Proses transaksi
item.stok -= jumlah_beli;
total_bayar = item.harga * jumlah_beli;
cout << "\n--- STRUK PEMBELIAN ---\n";
cout << "Item: " << item.nama << " x " << jumlah_beli << endl;
cout << "Total yang harus dibayar: Rp " << fixed << setprecision(2) << total_bayar << endl;
cout << "Stok tersisa: " << item.stok << endl;
cout << "Terima kasih telah berbelanja!\n";
}
}
int main() {
// Data awal inventaris
vector<Sepatu> stok_sepatu = {
{"Running Pro X", 42, 850000.00, 15},
{"Sneaker Klasik", 38, 450000.00, 22},
{"Boot Kulit", 40, 1200000.00, 8},
{"Sandal Santai", 37, 150000.00, 30}
};
int pilihan;
do {
cout << "\n========================================\n";
cout << "SISTEM PENJUALAN SEPATU C++ SEDERHANA\n";
cout << "========================================\n";
cout << "1. Lihat Stok Sepatu\n";
cout << "2. Proses Pembelian\n";
cout << "3. Keluar\n";
cout << "Pilih menu (1-3): ";
cin >> pilihan;
switch (pilihan) {
case 1:
tampilkanStok(stok_sepatu);
break;
case 2:
prosesPenjualan(stok_sepatu);
break;
case 3:
cout << "Program selesai.\n";
break;
default:
cout << "Pilihan tidak valid. Silakan coba lagi.\n";
}
} while (pilihan != 3);
return 0;
}
Kode di atas menggunakan beberapa fitur penting C++:
struct Sepatu: Ini mendefinisikan cetak biru (blueprint) untuk setiap entitas produk. Dengan struktur ini, kita mengelompokkan data terkait (nama, harga, stok) menjadi satu unit logis.std::vector<Sepatu>: Vektor digunakan sebagai wadah dinamis untuk menyimpan semua objek Sepatu. Ini memungkinkan sistem kita untuk menangani jumlah produk yang berbeda tanpa harus menentukan ukuran array secara statis di awal.<iomanip>): Penggunaan setw, left, dan setprecision sangat krusial untuk membuat output tabel di konsol terlihat rapi dan profesional, terutama saat menampilkan harga dan rata-rata stok.tampilkanStok dan prosesPenjualan membuat kode lebih terorganisir dan mudah di-debug, mengikuti prinsip dasar pemrograman terstruktur.Meskipun contoh di atas menggunakan struct, sistem penjualan yang lebih kompleks idealnya harus diimplementasikan menggunakan Class (Object-Oriented Programming). Dalam OOP, kita dapat menambahkan metode langsung ke objek sepatu (misalnya, metode kurangiStok(int jumlah)) dan membuat kelas terpisah untuk ManajerInventaris atau Transaksi. Ini akan meningkatkan enkapsulasi dan pemeliharaan kode.
Sebagai kesimpulan, contoh program C++ penjualan sepatu ini memberikan dasar yang kuat. Dengan memahami cara kerja struktur data dan alur kontrol dalam C++, pengembang dapat dengan mudah memperluasnya menjadi aplikasi penjualan yang lebih fungsional, mungkin dengan menambahkan fitur seperti pencarian berdasarkan ukuran atau menyimpan data ke file eksternal (file I/O).