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
Posting Komentar