Studi Kasus: Manajemen Inventaris Toko Elektronik
1. Analisis Kebutuhan
Problem Statement:
Toko elektronik “Maju Jaya” kesulitan melacak stok barang karena masih menggunakan pencatatan manual. Perlu sistem untuk:
- Melacak stok barang masuk/keluar
- Mencatat transaksi pembelian/pengembalian
- Generate laporan stok minimum
Data yang Harus Disimpan:
- Data Barang (
barang.csv
)- ID_Barang, Nama, Kategori, Harga, Stok, Stok_Minimum
- Data Transaksi (
transaksi.csv
)- ID_Transaksi, Tanggal, ID_Barang, Jenis (Masuk/Keluar), Qty, Supplier/Pelanggan
2. Struktur File CSV
barang.csv
ID_Barang,Nama,Kategori,Harga,Stok,Stok_Minimum EL001,TV LED 32",Televisi,3500000,15,5 EL002,Kulkas 2 Pintu,Alat Rumah Tangga,4500000,8,3 EL003,Blender,Mesin Dapur,250000,20,10
transaksi.csv
ID_Transaksi,Tanggal,ID_Barang,Jenis,Qty,Keterangan TRX001,2023-11-01,EL001,Masuk,10,Supplier A TRX002,2023-11-02,EL002,Keluar,2,Pelanggan B
3. Implementasi Program Python
a. Fungsi Tambah Barang Baru
import csv from datetime import datetime def tambah_barang(): print("\nTAMBAH BARANG BARU") data = [ input("ID Barang: "), input("Nama Barang: "), input("Kategori: "), int(input("Harga: ")), int(input("Stok Awal: ")), int(input("Stok Minimum: ")) ] with open('barang.csv', 'a', newline='') as file: writer = csv.writer(file) writer.writerow(data) print("Data barang berhasil disimpan!")
b. Fungsi Update Stok (Transaksi)
def update_stok(): print("\nPROSES TRANSAKSI") id_barang = input("ID Barang: ") jenis = input("Jenis (Masuk/Keluar): ").capitalize() qty = int(input("Quantity: ")) keterangan = input("Keterangan: ") # 1. Update transaksi.csv trx_data = [ f"TRX{datetime.now().strftime('%Y%m%d%H%M')}", datetime.now().strftime("%Y-%m-%d"), id_barang, jenis, qty, keterangan ] with open('transaksi.csv', 'a', newline='') as file: writer = csv.writer(file) writer.writerow(trx_data) # 2. Update stok di barang.csv with open('barang.csv', 'r') as file: reader = csv.reader(file) rows = list(reader) for row in rows: if row[0] == id_barang: if jenis == "Masuk": row[4] = str(int(row[4]) + qty) # Stok + Qty else: row[4] = str(int(row[4]) - qty) # Stok - Qty with open('barang.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerows(rows) print("Stok berhasil diperbarui!")
c. Fungsi Cek Stok Minimum (Menggunakan Pandas)
import pandas as pd def cek_stok_minimum(): df = pd.read_csv('barang.csv') stok_kritis = df[df['Stok'] < df['Stok_Minimum']] if stok_kritis.empty: print("\nTidak ada stok kritis") else: print("\nDaftar Stok Kritis:") print(stok_kritis[['ID_Barang', 'Nama', 'Stok', 'Stok_Minimum']]) stok_kritis.to_csv('stok_kritis.csv', index=False) print("\nFile 'stok_kritis.csv' telah dibuat!")
4. Contoh Output Program
Menu Utama:
SISTEM INVENTARIS TOKO ELEKTRONIK 1. Tambah Barang Baru 2. Proses Transaksi 3. Cek Stok Kritis 4. Keluar Pilihan: 2 PROSES TRANSAKSI ID Barang: EL002 Jenis (Masuk/Keluar): Keluar Quantity: 1 Keterangan: Pelanggan C Stok berhasil diperbarui!
Isi transaksi.csv
setelah transaksi:
ID_Transaksi,Tanggal,ID_Barang,Jenis,Qty,Keterangan TRX001,2023-11-01,EL001,Masuk,10,Supplier A TRX002,2023-11-02,EL002,Keluar,2,Pelanggan B TRX202311031415,2023-11-03,EL002,Keluar,1,Pelanggan C
Output Stok Kritis:
Daftar Stok Kritis: ID_Barang Nama Stok Stok_Minimum 1 EL002 Kulkas 2 Pintu 5 3
5. Challenge/Tugas Lanjutan
Tugas:
- Buat fungsi untuk melihat riwayat transaksi per barang
- Implementasikan sistem alert via email jika stok kritis
- Buat laporan penjualan bulanan
Contoh Solusi (No.1):
def riwayat_barang(): id_barang = input("Masukkan ID Barang: ") try: df_transaksi = pd.read_csv('transaksi.csv') df_barang = pd.read_csv('barang.csv') riwayat = df_transaksi[df_transaksi['ID_Barang'] == id_barang] nama_barang = df_barang[df_barang['ID_Barang'] == id_barang]['Nama'].values[0] print(f"\nRiwayat Transaksi untuk {nama_barang}:") print(riwayat[['Tanggal', 'Jenis', 'Qty', 'Keterangan']]) # Hitung total masuk/keluar print("\nSummary:") print(f"Total Masuk: {riwayat[riwayat['Jenis']=='Masuk']['Qty'].sum()}") print(f"Total Keluar: {riwayat[riwayat['Jenis']=='Keluar']['Qty'].sum()}") except Exception as e: print(f"Error: {e}")
6. Kesimpulan
Studi kasus ini menunjukkan:
- Penggunaan CSV sebagai database sederhana
- Teknik baca/tulis file CSV dengan Python
- Integrasi library Pandas untuk analisis data
- Manajemen stok dengan sistem real-time
Keunggulan Solusi CSV:
- Mudah diimplementasikan
- Tidak perlu server database
- Kompatibel dengan berbagai tools (Excel, Google Sheets)
Keterbatasan:
- Tidak cocok untuk data sangat besar
- Tidak ada transaksi atomic
- Tidak mendukung multiple user concurrent