Nama : Rafly Al Fahrezi
NRP : 5025241131
Kelas : PBO B
Sistem Vending Snack Machine adalah aplikasi yang mensimulasikan mesin penjual otomatis untuk makanan dan minuman ringan. Melalui sistem ini, pengguna dapat melihat daftar produk, memilih snack atau minuman, melakukan pembayaran, dan mendapatkan produk secara otomatis, layaknya mesin vending yang sering kita jumpai di tempat umum.
Selain itu, sistem juga memiliki mode administrator untuk melakukan refill stok dan melihat log transaksi yang tersimpan selama mesin berjalan.
Code Program
Bisa Diakses melalui link Berikut : https://github.com/rafly-alpha/ets-pbo-vendingsnackmachine
Video Penjelasan Project
Bisa diakses melalui link youtube berikut : https://youtu.be/Z1dChYpOTT4
Fitur Utama
- Menampilkan Menu Produk
Produk terdiri dari snack dan minuman lengkap dengan nama, harga, stok, dan status ketersediaan. Tampilan menu ditampilkan dalam format tabel agar lebih rapi dan mudah dibaca. - Pembelian Produk
Pengguna memilih produk berdasarkan nomor urut, lalu sistem akan menampilkan harga dan meminta pengguna memasukkan uang. Jika uang kurang, sistem akan meminta tambahan hingga mencukupi. Jika uang lebih, sistem otomatis memberikan kembalian. - Mode Administrator
Admin dapat melihat log transaksi dan melakukan refill stok produk yang habis. - Pencatatan Transaksi
Setiap transaksi yang berhasil akan dicatat ke dalam daftar log dengan waktu dan rincian pembayaran.
Rancangan Kelas

Program ini dibangun dengan pendekatan Object-Oriented Programming (OOP) menggunakan bahasa Java. Setiap class memiliki tanggung jawab tersendiri agar sistem mesin penjual otomatis dapat bekerja dengan baik. Berikut penjelasan singkat masing-masing class yang digunakan:
1. Class Product
Class Product berfungsi untuk menyimpan informasi detail setiap produk yang tersedia dalam mesin. Atribut yang disimpan mencakup:
- id → nomor unik untuk mengenali produk.
- name → nama produk seperti “Chips Kentang” atau “Teh Botol”.
- price → harga jual produk.
- stock → jumlah stok produk yang masih tersedia di mesin.
- type → kategori produk, misalnya “SNACK” atau “DRINK”.
Method penting dalam class ini meliputi:
reduceStock()→ mengurangi stok produk saat terjadi pembelian.refill(int amount)→ menambah stok produk saat dilakukan pengisian ulang.
2. Class Transaction
Class Transaction digunakan untuk mencatat setiap transaksi pembelian yang dilakukan pengguna. Informasi yang dicatat meliputi:
- productName → nama produk yang dibeli.
- totalPaid → jumlah uang yang dibayarkan oleh pengguna.
- change → jumlah kembalian yang diterima pengguna.
- dateTime → waktu transaksi menggunakan
LocalDateTime.
Method getFormatted() berfungsi untuk menampilkan detail transaksi dalam format waktu dan nominal yang rapi, misalnya: [15-10-2025 18:45:12] Chips Kentang | Bayar: Rp15000 | Kembalian: Rp0.
3. Class Payment
Class Payment menangani seluruh logika pembayaran dalam transaksi. Class ini memastikan bahwa uang yang dimasukkan pengguna cukup untuk membeli produk, sekaligus menghitung sisa atau kembalian. Atribut yang disimpan:
- total → total harga produk yang harus dibayar.
- inserted → total uang yang sudah dimasukkan pengguna.
Method utama:
insertMoney(double amount)→ menambahkan jumlah uang yang dimasukkan pengguna.isEnough()→ memeriksa apakah uang yang dimasukkan sudah cukup.getChange()→ menghitung jumlah kembalian yang harus diberikan.getRemaining()→ menampilkan kekurangan jika pembayaran belum mencukupi.
4. Class VendingSnackMachine
Class VendingSnackMachine merupakan inti dari keseluruhan sistem. Class ini mengatur alur interaksi antara pengguna, produk, dan pembayaran secara interaktif. Atribut utama yang digunakan:
- ArrayList<Product> products → daftar semua produk yang tersedia di mesin.
- ArrayList<Transaction> transactions → catatan seluruh transaksi yang telah terjadi.
- Scanner sc → digunakan untuk menerima input dari pengguna.
Method penting dalam class ini antara lain:
initProducts()→ menginisialisasi daftar produk beserta stok awalnya.showProducts()→ menampilkan daftar produk secara terformat.handlePurchase(int id)→ menangani proses pembelian produk berdasarkan ID.showAdminMenu()→ menampilkan mode administrator dengan opsi melihat log transaksi atau melakukan refill stok.delay(int ms)→ memberi jeda simulasi agar tampilan lebih realistis seperti mesin otomatis sungguhan.
Keempat class tersebut bekerja secara terpadu membentuk sistem penjualan otomatis sederhana: Product menyimpan data produk, Payment mengelola transaksi uang, Transaction mencatat hasil pembelian, dan VendingSnackMachine menjadi pengatur utama seluruh proses interaktifnya. Pendekatan ini membuat program lebih modular, mudah dipelihara, dan mudah dikembangkan di masa mendatang.
Struktur Program
Berikut adalah struktur file Java yang digunakan dalam proyek:
VendingSnackMachine/
├── Product.java
├── Payment.java
├── Transaction.java
└── VendingSnackMachine.java
Alur Sistem (Flow)
- Mesin aktif dan menampilkan daftar produk.
- Pengguna memilih produk berdasarkan nomor.
- Sistem menampilkan harga dan meminta pembayaran.
- Jika uang cukup, sistem mengeluarkan produk dan mencatat transaksi.
- Jika stok habis, sistem menampilkan peringatan untuk admin melakukan refill.
Simulasi Program
Simulasi Pembelian :
============================================================
SELAMAT DATANG DI SNACK MACHINE
DAFTAR MENU
============================================================
No. Nama Produk Harga Stok Status Tipe
------------------------------------------------------------
1 Chips Kentang Rp 15000 5 Tersedia SNACK
2 Coklat Bar Rp 12000 3 Tersedia SNACK
3 Biskuit Rp 8000 7 Tersedia SNACK
4 Kacang Almond Rp 20000 4 Tersedia SNACK
5 Air Mineral Rp 5000 10 Tersedia DRINK
6 Jus Jeruk Rp 15000 6 Tersedia DRINK
7 Kopi Kaleng Rp 18000 5 Tersedia DRINK
8 Teh Botol Rp 12000 8 Tersedia DRINK
============================================================
=== PILIHAN ===
• Ketik nomor produk untuk membeli
• Ketik 'admin' untuk mode administrator
• Ketik 'keluar' untuk meninggalkan mesin
Pilihan Anda: 2
Anda memilih: Coklat Bar
Harga: Rp12000.0
Masukkan uang: Rp 15000
Pembayaran diterima!
Kembalian Anda: Rp3000.0
Mengeluarkan produk...
Coklat Bar siap diambil!
Terimakasih atas pembelian anda :)
Simulasi Admin Lihat Log Transaksi:
============================================================
SELAMAT DATANG DI SNACK MACHINE
DAFTAR MENU
============================================================
No. Nama Produk Harga Stok Status Tipe
------------------------------------------------------------
1 Chips Kentang Rp 15000 5 Tersedia SNACK
2 Coklat Bar Rp 12000 2 Tersedia SNACK
3 Biskuit Rp 8000 7 Tersedia SNACK
4 Kacang Almond Rp 20000 4 Tersedia SNACK
5 Air Mineral Rp 5000 10 Tersedia DRINK
6 Jus Jeruk Rp 15000 6 Tersedia DRINK
7 Kopi Kaleng Rp 18000 5 Tersedia DRINK
8 Teh Botol Rp 12000 8 Tersedia DRINK
============================================================
=== PILIHAN ===
• Ketik nomor produk untuk membeli
• Ketik 'admin' untuk mode administrator
• Ketik 'keluar' untuk meninggalkan mesin
Pilihan Anda: admin
=== MODE ADMINISTRATOR ===
1. Lihat Log Transaksi
2. Refill Stok Produk
3. Kembali ke Menu Utama
Pilih: 1
=== LOG TRANSAKSI ===
[15-10-2025 20:17:51] Coklat Bar | Bayar: Rp15000.0 | Kembalian: Rp3000.0
Simulasi Admin Refill Produk :
=== PILIHAN ===
• Ketik nomor produk untuk membeli
• Ketik 'admin' untuk mode administrator
• Ketik 'keluar' untuk meninggalkan mesin
Pilihan Anda: admin
=== MODE ADMINISTRATOR ===
1. Lihat Log Transaksi
2. Refill Stok Produk
3. Kembali ke Menu Utama
Pilih: 2
=== REFILL STOK ===
============================================================
SELAMAT DATANG DI SNACK MACHINE
DAFTAR MENU
============================================================
No. Nama Produk Harga Stok Status Tipe
------------------------------------------------------------
1 Chips Kentang Rp 15000 5 Tersedia SNACK
2 Coklat Bar Rp 12000 2 Tersedia SNACK
3 Biskuit Rp 8000 7 Tersedia SNACK
4 Kacang Almond Rp 20000 4 Tersedia SNACK
5 Air Mineral Rp 5000 10 Tersedia DRINK
6 Jus Jeruk Rp 15000 6 Tersedia DRINK
7 Kopi Kaleng Rp 18000 5 Tersedia DRINK
8 Teh Botol Rp 12000 8 Tersedia DRINK
============================================================
Masukkan nomor produk yang ingin di-refill: 8
Tambahkan stok sebanyak: 3
Stok Teh Botol berhasil ditambah menjadi 11.
Kesimpulan
Aplikasi Vending Snack Machine ini berhasil mensimulasikan sistem mesin penjual otomatis dengan konsep Object-Oriented Programming. Pengguna dapat membeli produk, membayar dengan nominal dinamis, menerima kembalian, serta sistem mencatat transaksi yang terjadi.
Dengan adanya mode administrator, stok produk dapat diatur kapan saja, sehingga sistem ini cukup lengkap sebagai representasi sederhana dari mesin vending otomatis pada dunia nyata.