Implementasi Sederhana Program Penjualan Buah dengan Python

Ilustrasi Keranjang Buah Sederhana

Ilustrasi Sistem Penjualan Buah

Mengembangkan sistem manajemen sederhana untuk penjualan buah adalah salah satu contoh klasik yang bagus untuk memperkenalkan konsep pemrograman berorientasi objek (OOP) dan struktur data di Python. Dalam konteks bisnis kecil, memiliki sistem dasar untuk mencatat stok, harga, dan melakukan transaksi penjualan sangatlah krusial. Program ini akan menggunakan dictionary dan list di Python untuk merepresentasikan data buah.

Tujuan utama dari contoh program ini adalah menyajikan fungsionalitas inti seperti menampilkan daftar buah yang tersedia, menghitung total harga berdasarkan kuantitas yang dibeli, dan memperbarui stok setelah transaksi berhasil dilakukan. Meskipun ini adalah implementasi dasar tanpa antarmuka grafis (GUI) atau basis data eksternal, ia memberikan fondasi yang solid untuk pengembangan lebih lanjut.

Struktur Data Buah

Kita akan mendefinisikan inventaris buah menggunakan sebuah dictionary di Python. Setiap kunci (key) adalah nama buah, dan nilainya adalah dictionary lain yang berisi informasi penting seperti harga per kilogram dan jumlah stok saat ini.


# Inventaris Buah
inventaris_buah = {
    "Apel": {"harga": 15000, "stok": 50},
    "Jeruk": {"harga": 12000, "stok": 45},
    "Mangga": {"harga": 18500, "stok": 30},
    "Pisang": {"harga": 8000, "stok": 100}
}
            

Fungsi Utama Program

Program akan memiliki beberapa fungsi utama:

  1. Menampilkan semua buah dan detailnya.
  2. Memproses pesanan (mengurangi stok dan menghitung total).

Berikut adalah implementasi lengkap yang menggabungkan fungsi-fungsi tersebut dalam sebuah alur yang sederhana:


def tampilkan_inventaris(inventaris):
    """Menampilkan semua buah yang tersedia beserta harga dan stoknya."""
    print("\n--- Daftar Buah Tersedia ---")
    print("{:<10} | {:<10} | {:<5}".format("Buah", "Harga/Kg", "Stok"))
    print("-" * 30)
    for nama, detail in inventaris.items():
        harga_format = f"Rp{detail['harga']:,}".replace(",", ".")
        print("{:<10} | {:<10} | {:<5}".format(
            nama, harga_format, detail['stok']
        ))
    print("-" * 30)

def proses_penjualan(inventaris, nama_buah, jumlah_kg):
    """Memproses penjualan, mengurangi stok, dan menghitung total pembayaran."""
    
    if nama_buah not in inventaris:
        print(f"Error: Buah '{nama_buah}' tidak ditemukan.")
        return None

    detail = inventaris[nama_buah]
    
    if detail['stok'] < jumlah_kg:
        print(f"Maaf, stok {nama_buah} hanya tersisa {detail['stok']} Kg.")
        return None
    
    # Lakukan transaksi
    total_harga = detail['harga'] * jumlah_kg
    
    # Kurangi stok
    inventaris[nama_buah]['stok'] -= jumlah_kg
    
    return total_harga

# --- Simulasi Penggunaan Program ---

# 1. Tampilkan Stok Awal
tampilkan_inventaris(inventaris_buah)

# 2. Simulasi Pembelian 1: Beli 5 Kg Apel
buah_beli = "Apel"
jumlah = 5
total = proses_penjualan(inventaris_buah, buah_beli, jumlah)

if total is not None:
    print(f"\nBERHASIL TRANSAKSI:")
    print(f"Beli {jumlah} Kg {buah_beli}.")
    print(f"Total Pembayaran: Rp{total:,}".replace(",", "."))

# 3. Tampilkan Stok Setelah Transaksi
tampilkan_inventaris(inventaris_buah)

# 4. Simulasi Pembelian 2: Beli Jeruk (Jumlah melebihi stok)
buah_beli_gagal = "Jeruk"
jumlah_gagal = 50 
proses_penjualan(inventaris_buah, buah_beli_gagal, jumlah_gagal)
            

Analisis dan Pengembangan Lanjut

Program di atas menunjukkan bagaimana Python dapat mengelola data inventaris secara dinamis. Keunggulan utama dari pendekatan ini adalah kemudahan dalam modifikasi struktur data (misalnya, menambahkan kategori buah atau fitur diskon) tanpa perlu mengubah logika program secara drastis. Ketika berhadapan dengan volume transaksi yang besar, langkah selanjutnya yang logis adalah memindahkan data inventaris dari dictionary statis di memori ke sistem penyimpanan yang lebih permanen, seperti file CSV atau basis data SQL (misalnya SQLite).

Pengembangan lebih lanjut bisa meliputi implementasi konsep OOP penuh. Misalnya, membuat kelas `Buah` dan kelas `TokoBuah`. Kelas `Buah` akan memiliki atribut seperti nama, harga, dan stok, sementara kelas `TokoBuah` akan mengelola koleksi objek `Buah` tersebut dan menangani metode seperti `tambah_stok()` atau `cetak_laporan_harian()`. Pendekatan OOP akan membuat kode lebih modular, mudah diuji, dan lebih siap untuk ekspansi fungsionalitas di masa depan, seperti integrasi pembayaran atau pelacakan pelanggan.