Membuat sistem penjualan atau inventaris sederhana menggunakan bahasa pemrograman C++ adalah salah satu proyek dasar yang sangat baik untuk memahami konsep pemrograman berorientasi objek (OOP), pengelolaan data (seperti array atau struktur), serta logika bisnis sederhana. Program ini berfungsi sebagai fondasi sebelum beralih ke database yang lebih kompleks.
Dalam konteks ini, kita akan fokus pada implementasi berbasis konsol yang mencakup fitur dasar seperti menambah barang, menampilkan daftar stok, dan melakukan simulasi penjualan.
Meskipun C++ sering dikaitkan dengan performa tinggi dan pengembangan sistem operasi, ia juga ideal untuk proyek awal karena memaksa pengembang untuk memahami alokasi memori dan struktur data secara eksplisit. Untuk sistem penjualan skala kecil, C++ memberikan kecepatan eksekusi yang sangat baik.
Langkah pertama adalah mendefinisikan "barang" itu sendiri. Kita akan menggunakan struct di C++ untuk mengelompokkan data yang saling terkait, seperti nama produk, kode unik, harga jual, dan jumlah stok.
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
// Struktur untuk merepresentasikan satu jenis barang
struct Barang {
int kode;
string nama;
double harga;
int stok;
};
Program penjualan memerlukan beberapa fungsi inti: inisialisasi data awal, menampilkan menu, menambahkan barang baru, menampilkan seluruh inventaris, dan memproses transaksi penjualan.
Kita akan menggunakan std::vector<Barang> untuk menampung semua data barang yang ada di toko. Fungsi tampilan akan memandu pengguna.
void tampilkanMenu() {
cout << "\n====================================\n";
cout << " SISTEM PENJUALAN SEDERHANA (C++) \n";
cout << "====================================\n";
cout << "1. Tambah Barang Baru\n";
cout << "2. Lihat Inventaris\n";
cout << "3. Proses Penjualan\n";
cout << "4. Keluar\n";
cout << "Pilih Opsi: ";
}
Fungsi ini akan meminta input dari pengguna dan menambahkan objek Barang baru ke dalam vektor.
void tambahBarang(vector<Barang>& inventaris) {
Barang item_baru;
cout << "\n--- Tambah Barang ---\n";
cout << "Masukkan Kode Barang: ";
cin >> item_baru.kode;
// Membersihkan buffer input sebelum membaca string
cin.ignore();
cout << "Masukkan Nama Barang: ";
getline(cin, item_baru.nama);
cout << "Masukkan Harga Jual: ";
cin >> item_baru.harga;
cout << "Masukkan Stok Awal: ";
cin >> item_baru.stok;
inventaris.push_back(item_baru);
cout << "\n[SUKSES] Barang " << item_baru.nama << " berhasil ditambahkan.\n";
}
Untuk membuat tampilan rapi di konsol, kita memanfaatkan manipulasi output C++ seperti std::setw dari library <iomanip>.
void lihatInventaris(const vector<Barang>& inventaris) {
if (inventaris.empty()) {
cout << "\nInventaris masih kosong.\n";
return;
}
cout << "\n--- DAFTAR INVENTARIS ---\n";
cout << left << setw(5) << "KODE"
<< setw(20) << "NAMA"
<< setw(10) << "HARGA"
<< setw(5) << "STOK" << endl;
cout << string(45, '-') << endl;
cout << fixed << setprecision(2); // Atur presisi untuk harga
for (const auto& item : inventaris) {
cout << left << setw(5) << item.kode
<< setw(20) << item.nama
<< setw(10) << item.harga
<< setw(5) << item.stok << endl;
}
}
Bagian terpenting adalah memproses transaksi. Program harus mencari barang berdasarkan kode, memastikan stok mencukupi, mengurangi stok, dan menghitung total biaya.
void prosesPenjualan(vector<Barang>& inventaris) {
int kode_cari, jumlah_beli;
cout << "\n--- Proses Penjualan ---\n";
cout << "Masukkan Kode Barang yang dibeli: ";
cin >> kode_cari;
cout << "Masukkan Jumlah Beli: ";
cin >> jumlah_beli;
bool ditemukan = false;
for (auto& item : inventaris) {
if (item.kode == kode_cari) {
ditemukan = true;
if (item.stok >= jumlah_beli) {
double total = item.harga * jumlah_beli;
item.stok -= jumlah_beli;
cout << "\nTransaksi Berhasil!\n";
cout << "Item: " << item.nama << ", Jumlah: " << jumlah_beli << endl;
cout << fixed << setprecision(2);
cout << "Total Pembayaran: Rp " << total << endl;
} else {
cout << "\n[GAGAL] Stok tidak mencukupi. Sisa stok: " << item.stok << endl;
}
break;
}
}
if (!ditemukan) {
cout << "\n[ERROR] Barang dengan kode " << kode_cari << " tidak ditemukan.\n";
}
}
Ini adalah titik masuk utama di mana loop program berjalan terus menerus sampai pengguna memilih opsi keluar.
int main() {
// Inisialisasi data awal (opsional, untuk testing cepat)
vector<Barang> toko = {
{101, "Buku Tulis A4", 5500.00, 50},
{102, "Pulpen Gel Hitam", 3500.00, 100}
};
int pilihan;
do {
tampilkanMenu();
if (!(cin >> pilihan)) {
// Handle input non-integer
cout << "\nInput tidak valid. Keluar.\n";
break;
}
switch (pilihan) {
case 1:
tambahBarang(toko);
break;
case 2:
lihatInventaris(toko);
break;
case 3:
prosesPenjualan(toko);
break;
case 4:
cout << "\nTerima kasih telah menggunakan sistem. Sampai jumpa!\n";
break;
default:
cout << "\nPilihan tidak dikenali. Silakan coba lagi.\n";
}
} while (pilihan != 4);
return 0;
}
Contoh program penjualan barang C++ ini menunjukkan bagaimana struktur data dasar (struct dan vector) dapat dikombinasikan dengan logika kontrol alur (switch dan do-while) untuk membuat aplikasi fungsional. Meskipun sederhana dan berbasis memori sementara (data hilang saat program ditutup), ini adalah langkah fundamental yang sangat penting dalam pengembangan perangkat lunak.
Untuk pengembangan lebih lanjut, Anda dapat mengintegrasikan file I/O (membaca/menulis ke file TXT atau CSV) agar data stok tersimpan secara permanen, atau bahkan pindah ke database seperti SQLite untuk skalabilitas yang lebih baik.