ETS - PBO B

Nama : Aditya Rizki Muhammad
NRP : 5025221272
Kelas : PBO B

1. Fitur yang terdapat pada mesin
  • Menampilkan informasi produk

  • Laporan penjualan

  • Memproses pembelian produk

  • Notifikasi status pembelian


2. Gambarkan rancangan kelas dan rancangan obyek vending  Snack Machine

berikut merupakan rancangan kelas dan rancangan obyek vending machine


Pada vending machine terdapat atribut produk dan transaksi. Ada juga method yang digunakan dalam vending machine. Untuk objek dari VendingMachine sendiri seperti berikut.

objek tersebut dibuat dari class VendingMachine. Berikut implementasi kodenya. 

class VendingMachine { // Attributes (sesuai class diagram) private List<Product> products; private List<Transaction> transactions; private PaymentProcessor paymentProcessor; // Constructor public VendingMachine() { this.products = new ArrayList<>(); this.transactions = new ArrayList<>(); this.paymentProcessor = new PaymentProcessor(100000); // Inisialisasi produk products.add(new Product("P001", "Chitato", 10000)); products.add(new Product("P002", "Oreo", 8000)); products.add(new Product("P003", "Coca Cola", 7000)); } // Method: displayProducts() public void displayProducts() { System.out.println("=== DAFTAR PRODUK ==="); for (int i = 0; i < products.size(); i++) { Product p = products.get(i); System.out.println((i+1) + ". " + p.getName() + " - Rp " + p.getPrice()); } } // Method: selectProduct(id) public void selectProduct(int id) { if (id >= 0 && id < products.size()) { Product p = products.get(id); System.out.println("Produk dipilih: " + p.getName()); } else { System.out.println("Produk tidak ditemukan!"); } } // Method: purchaseProduct(...) public void purchaseProduct(int productId, double payment) { Product p = products.get(productId); if (payment >= p.getPrice()) { double change = payment - p.getPrice(); System.out.println("Pembelian berhasil!"); System.out.println("Kembalian: Rp " + change); // Simpan transaksi transactions.add(new Transaction(p.getName(), p.getPrice())); } else { System.out.println("Pembayaran kurang!"); } } // Method: refillStock(...) public void refillStock(String productName, int amount) { System.out.println("Refill " + amount + " unit untuk " + productName); } // Method: generateReport() public void generateReport() { System.out.println("\n=== LAPORAN ==="); System.out.println("Total Transaksi: " + transactions.size()); System.out.println("Saldo Mesin: Rp " + paymentProcessor.getMachineCash()); System.out.println("\nRiwayat:"); for (Transaction t : transactions) { System.out.println("- " + t.getInfo()); } } }
3. Buatkan output simulasi vending snack machine

pada simulasi vending machine yang memiliki flow 
  • Mesin aktif → menampilkan menu pilihan produk.
  • Pengguna memilih jenis produk
  • Mesin menampilkan total harga.
  • Pengguna melakukan pembayaran.
  • Mesin memverifikasi pembayaran → jika cukup → mengeluarkan produk
  • Transaksi disimpan ke log.
  • Jika stok habis → admin diingatkan untuk refill.

maka berikut merupakan contoh output nya

=== DEMO VENDING MACHINE ===

=== DAFTAR PRODUK ===

1. Chitato - Rp 10000.0

2. Oreo - Rp 8000.0

3. Coca Cola - Rp 7000.0

Produk dipilih: Chitato

Pembelian berhasil!

Kembalian: Rp 10000.0

Pembelian berhasil!

Kembalian: Rp 2000.0

Refill 10 unit untuk Chitato

=== LAPORAN ===

Total Transaksi: 2

Saldo Mesin: Rp 100000.0

Riwayat:

- Transaksi: Chitato - Rp 10000.0

- Transaksi: Oreo - Rp 8000.0

4. Implementasikan dalam bentuk aplikasi simulasi vending snack machine 

terdapat dua file yaitu main.java dan utils.java untuk implementasi vendin machine ini.

main.java


// ============================================
//    MAIN CLASS: Demo Pembuatan Objek
// ============================================
public class Main {
    public static void main(String[] args) {
        System.out.println("=== DEMO VENDING MACHINE ===\n");
       
        // PEMBUATAN OBJEK dari class VendingMachine
        VendingMachine mesin1 = new VendingMachine();
       
        // Memanggil method-method dari objek
        mesin1.displayProducts();
       
        System.out.println();
        mesin1.selectProduct(0);  // Pilih Chitato
       
        System.out.println();
        mesin1.purchaseProduct(0, 20000);  // Beli dengan Rp 20.000
       
        System.out.println();
        mesin1.purchaseProduct(1, 10000);  // Beli Oreo dengan Rp 10.000
       
        System.out.println();
        mesin1.refillStock("Chitato", 10);
       
        mesin1.generateReport();
       
        System.out.println("\n==============================");
        System.out.println("MEMBUAT OBJEK KEDUA:");
        System.out.println("==============================\n");
       
        // Bisa membuat objek lain (mesin berbeda)
        VendingMachine mesin2 = new VendingMachine();
        mesin2.displayProducts();
        System.out.println("\nMesin 2 aktif!");
    }
}

utils.java

import java.util.*;

// Class sederhana untuk Product
class Product {
    private String name;
    private double price;
   
    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }
   
    public String getName() { return name; }
    public double getPrice() { return price; }
}

// Class sederhana untuk Transaction
class Transaction {
    private String productName;
    private double amount;
   
    public Transaction(String productName, double amount) {
        this.productName = productName;
        this.amount = amount;
    }
   
    public String getInfo() {
        return "Transaksi: " + productName + " - Rp " + amount;
    }
}

// Class sederhana untuk PaymentProcessor
class PaymentProcessor {
    private double machineCash;
   
    public PaymentProcessor(double initialCash) {
        this.machineCash = initialCash;
    }
   
    public double getMachineCash() { return machineCash; }
}

// ============================================
//    MAIN CLASS: VendingMachine
// ============================================
class VendingMachine {
    // Attributes (sesuai class diagram)
    private List<Product> products;
    private List<Transaction> transactions;
    private PaymentProcessor paymentProcessor;
   
    // Constructor
    public VendingMachine() {
        this.products = new ArrayList<>();
        this.transactions = new ArrayList<>();
        this.paymentProcessor = new PaymentProcessor(100000);
       
        // Inisialisasi produk
        products.add(new Product("Chitato", 10000));
        products.add(new Product("Oreo", 8000));
        products.add(new Product("Coca Cola", 7000));
    }
   
    // Method: displayProducts()
    public void displayProducts() {
        System.out.println("=== DAFTAR PRODUK ===");
        for (int i = 0; i < products.size(); i++) {
            Product p = products.get(i);
            System.out.println((i+1) + ". " + p.getName() + " - Rp " + p.getPrice());
        }
    }
   
    // Method: selectProduct(id)
    public void selectProduct(int id) {
        if (id >= 0 && id < products.size()) {
            Product p = products.get(id);
            System.out.println("Produk dipilih: " + p.getName());
        } else {
            System.out.println("Produk tidak ditemukan!");
        }
    }
   
    // Method: purchaseProduct(...)
    public void purchaseProduct(int productId, double payment) {
        Product p = products.get(productId);
       
        if (payment >= p.getPrice()) {
            double change = payment - p.getPrice();
            System.out.println("Pembelian berhasil!");
            System.out.println("Kembalian: Rp " + change);
           
            // Simpan transaksi
            transactions.add(new Transaction(p.getName(), p.getPrice()));
        } else {
            System.out.println("Pembayaran kurang!");
        }
    }
   
    // Method: refillStock(...)
    public void refillStock(String productName, int amount) {
        System.out.println("Refill " + amount + " unit untuk " + productName);
    }
   
    // Method: generateReport()
    public void generateReport() {
        System.out.println("\n=== LAPORAN ===");
        System.out.println("Total Transaksi: " + transactions.size());
        System.out.println("Saldo Mesin: Rp " + paymentProcessor.getMachineCash());
       
        System.out.println("\nRiwayat:");
        for (Transaction t : transactions) {
            System.out.println("- " + t.getInfo());
        }
    }
}

Link Demo : demo vending machine