PBO 3

 muhammad rafi budi purnama

5025221307

PBO 3

Pada tugas pertemuan 3. kita diminta membuat program ticket machine sederhana.

public class TicketMachine {

    private final int price;

    private int balance;

    private int total;

    private int ticketsSold;


    public TicketMachine(int ticketCost) {

        if (ticketCost <= 0) {

            throw new IllegalArgumentException("Ticket price must be positive");

        }

        price = ticketCost;

        balance = 0;

        total = 0;

        ticketsSold = 0;

    }


    public int getPrice() {

        return price;

    }


    public int getBalance() {

        return balance;

    }


    public int getTotal() {

        return total;

    }


    public int getTicketsSold() {

        return ticketsSold;

    }


    public void insertMoney(int amount) {

        if (amount > 0) {

            balance += amount;

            displayBalance("Money Inserted");

        } else {

            System.out.println("Error: Please insert a positive amount. Received: " + amount);

        }

    }


    public boolean printTicket() {

        if (balance >= price) {

            // Print ticket

            System.out.println("╔══════════════════════╗");

            System.out.println("║     THE BLUEJ LINE   ║");

            System.out.println("╠══════════════════════╣");

            System.out.println("║       TICKET         ║");

            System.out.println("║                      ║");

            System.out.println("║    Price: " + String.format("%-6s", price) + "¢     ║");

            System.out.println("║                      ║");

            System.out.println("║  " + java.time.LocalDate.now() + "  ║");

            System.out.println("╚══════════════════════╝");

            System.out.println();


            // Update machine state

            total += price;

            balance -= price;

            ticketsSold++;

            

            displayBalance("Ticket Printed - Remaining Balance");

            return true;

        } else {

            int amountNeeded = price - balance;

            System.out.println("┌──────────────────────┐");

            System.out.println("│   INSUFFICIENT FUNDS │");

            System.out.println("├──────────────────────┤");

            System.out.println("│ Need: " + String.format("%-10s", amountNeeded + "¢") + " │");

            System.out.println("│ Current: " + String.format("%-8s", balance + "¢") + " │");

            System.out.println("└──────────────────────┘");

            return false;

        }

    }


    private void displayBalance(String message) {

        System.out.println("┌────────────────────────────────┐");

        System.out.println("│ " + String.format("%-30s", message) + "│");

        System.out.println("├────────────────────────────────┤");

        

        // Create a visual balance meter

        int bars = Math.min(balance / 10, 20); // Max 20 bars

        String meter = "│ [";

        for (int i = 0; i < 20; i++) {

            if (i < bars) {

                meter += "█";

            } else {

                meter += "░";

            }

        }

        meter += "] │";

        System.out.println(meter);

        

        System.out.println("│                                │");

        System.out.println("│      Balance: " + String.format("%-10s", balance + " cents") + " │");

        System.out.println("│      Ticket:  " + String.format("%-10s", price + " cents") + " │");

        

        if (balance >= price) {

            System.out.println("│                                │");

            System.out.println("│     ✓ READY FOR TICKET ✓      │");

        } else {

            int needed = price - balance;

            System.out.println("│      Needed: " + String.format("%-9s", needed + " cents") + " │");

        }

        System.out.println("└────────────────────────────────┘");

        System.out.println();

    }


    public int refundBalance() {

        int refundAmount = balance;

        if (refundAmount > 0) {

            System.out.println("╔══════════════════════════════╗");

            System.out.println("║         REFUND ISSUED        ║");

            System.out.println("╠══════════════════════════════╣");

            System.out.println("║   Amount: " + String.format("%-15s", refundAmount + "¢") + "║");

            System.out.println("║                              ║");

            System.out.println("║   💰  COLLECT YOUR CASH  💰  ║");

            System.out.println("╚══════════════════════════════╝");

            balance = 0;

        }

        return refundAmount;

    }


    public void resetMachine() {

        System.out.println("▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄");

        System.out.println("█        SYSTEM RESET         █");

        System.out.println("█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█");

        System.out.println("█ Total Collected: " + String.format("%-8s", total + "¢") + " █");

        System.out.println("█ Tickets Sold: " + String.format("%-10s", ticketsSold) + " █");

        System.out.println("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀");

        balance = 0;

        total = 0;

        ticketsSold = 0;

    }


    public void displayStatus() {

        System.out.println("╔════════════════════════════════╗");

        System.out.println("║      TICKET MACHINE STATUS     ║");

        System.out.println("╠════════════════════════════════╣");

        System.out.println("║  Ticket Price: " + String.format("%-11s", price + "¢") + "║");

        System.out.println("║  Current Balance: " + String.format("%-8s", balance + "¢") + "║");

        System.out.println("║  Total Collected: " + String.format("%-7s", total + "¢") + "║");

        System.out.println("║  Tickets Sold: " + String.format("%-11s", ticketsSold) + "║");

        System.out.println("╚════════════════════════════════╝");

    }


    public static void main(String[] args) {

        TicketMachine machine = new TicketMachine(50);


        machine.displayStatus();


        // Test scenarios

        System.out.println("\n--- Test 1: Multiple insertions ---");

        machine.insertMoney(30);

        machine.insertMoney(25);

        machine.printTicket();


        System.out.println("\n--- Test 2: Exact amount ---");

        TicketMachine machine2 = new TicketMachine(75);

        machine2.insertMoney(75);

        machine2.printTicket();


        System.out.println("\n--- Test 3: Refund ---");

        machine.insertMoney(50);

        machine.refundBalance();


        System.out.println("\n--- Final Status ---");

        machine.displayStatus();

    }

}


kode tersebut akan dijalankan di BlueJ dan membuat instance baru seperti gambar berikut




kita bisa melihat objek TicketMA1 dengan method - method yang ada.



gambar diatas merupakan contoh method displayStatus()

Komentar

Postingan populer dari blog ini

TUGAS 2 : Jettpack compose : Hello, World!

Pertemuan 3 PPB (A) - Mengenal Composable Aplikasi Selamat Ulang Tahun

Pertemuan 5 - Aplikasi Kalkulator Sederhana