Tugas Ticket Machine

Nama: Azka Rizqullah Ramadhani

NRP: 5025231148

Kelas: Pemrograman Berbasis Objek (A)


Deskripsi:

Mesin tiket adalah mesin yang digunakan oleh customer ketika akan membeli sebuah tiket. Saya membuat program yang akan membuat replika dari mesin itu. Di program saya terdapat alur seperti ini. 

  1. Customer akan menginput uang (inisialisasi customer).
  2. Customer memilih menu.
  3. Ketika Customer memilih menu keluar maka mesin akan menampilkan saldo yang berada di mesin itu sendiri.
Program ini juga terdiri dari 3 Class yaitu:
  1. Users yaitu representasi dari customer itu sendiri.
  2. TicketMachine yaitu representasi dari ticket machine.
  3. Setting yaitu turunan dari class ticket machine yang mana akan menampilkan alur program yang akan dilakukan oleh si users.
Tampilan Main
Kelas Main berfungsi sebagai titik awal (entry point) dari program. Pada kelas ini, objek Users dan Setting diinisialisasi. Kelas ini menjalankan program dengan logika berikut:

  • Pengguna (Users) memasukkan sejumlah uang ke dalam saldo mereka.
  • Program Setting dijalankan, yang akan mengelola seluruh transaksi dan tampilan menu.
import component.Setting;
import component.Users;

public class Main {
public static void main(String[] args) {
Users customer = new Users();
customer.InsertMoney(150000);
Setting programs = new Setting(15000);

programs.Run(customer);
}
}

Class Users
Kelas Users berfungsi sebagai representasi pengguna yang memiliki sejumlah saldo. Fitur utama dari kelas ini meliputi:
  • InsertMoney(): Menambahkan uang ke saldo pengguna.
  • Pay(): Melakukan pembayaran jika saldo cukup, atau memberikan pesan kesalahan jika saldo tidak mencukupi.
Kelas ini mendukung pengelolaan saldo pengguna dengan memastikan bahwa pembayaran hanya dapat dilakukan jika saldo mencukupi.
package component;

public class Users {
private int money;

public Users() {
this.money = 0;
}

public int getMoney(){
return money;
}

public void InsertMoney(int amount){
if(amount > 0){
this.money += amount;
System.out.println("Inserted Money: " + amount);
}else{
System.out.println("Insert a positive amount of money!");
}
}

public int Pay(int price){
if(price<0){
System.out.println("Price have to be greater than 0!");
return 0;
}else if(price>this.money){
System.out.println("Not Enough Money!");
System.out.printf("Your Money Now: %d\n",this.money);
System.out.printf("Your Money Need: %d\n",price);
return 0;
}else{
this.money -= price;
return 1;
}
}
}
Class TicketMachine
Kelas TicketMachine mengelola penjualan tiket, termasuk harga tiket dan saldo mesin tiket. Kelas ini menyediakan metode untuk menghitung harga total tiket, memproses transaksi, dan membeli tiket.

Atribut
  • private final int ticketPrice: Harga per tiket (tidak dapat diubah setelah diinisialisasi).
  • private int balance: Saldo mesin tiket.
Metode
  • Konstruktor
  • TicketMachine(int ticketPrice): Menginisialisasi harga tiket dan saldo awal mesin tiket.
  • getTicketPrice(): Mengembalikan harga tiket.
  • getBalance(): Mengembalikan saldo mesin tiket.
  • totalPrice(int tickets): Menghitung harga total berdasarkan jumlah tiket. Menampilkan pesan kesalahan jika jumlah tiket negatif.
  • transaction(Users customer, int price): Memproses pembayaran tiket oleh pengguna. Jika pembayaran berhasil, menambahkan jumlah pembayaran ke saldo mesin tiket.
  • buyTicket(Users customer, int tickets): Mengelola pembelian tiket. Menghitung total harga tiket dan memproses transaksi jika harga valid.
package component;

public class TicketMachine {
private final int ticketPrice;
private int balance;

public TicketMachine(int ticketPrice) {
this.ticketPrice = ticketPrice;
this.balance = 0;
}

public int getTicketPrice() {
return ticketPrice;
}

public int getBalance() {
return balance;
}

public int totalPrice(int tickets) {
if (tickets <= 0) {
System.out.println("You can't buy negative tickets.");
return -1;
}

return tickets * this.ticketPrice;
}

public void transaction(Users customer, int price) {
int statusCustomer = customer.Pay(price);
if (statusCustomer == 1) {
this.balance += price;
} else {
System.out.println("Transaction Failed!!");
}
}

public void buyTicket(Users customer, int tickets) {
int totalPrice = this.totalPrice(tickets);
if (totalPrice < 0) return;

this.transaction(customer, totalPrice);
}
}

Class Setting

package component;

import java.util.Scanner;

public class Setting extends TicketMachine{
private boolean running;

public Setting(int ticketMachine) {
super(ticketMachine);
this.running = true;
}

public boolean isRunning() {
return running;
}

public void PrintMenu() {
System.out.println("#################");
System.out.println("Ticket Sale With Price " + this.getTicketPrice());
System.out.println("1.\tBuy");
System.out.println("2.\tGet Balance");
System.out.println("3.\texit");
System.out.println("#################");
System.out.println("Choose an Option:");
}

public void exit() {
this.running = false;
}

public void Run(Users customer){
Scanner scanner = new Scanner(System.in);

while(isRunning()){
PrintMenu();

int choice = scanner.nextInt();

switch(choice) {
case 1:
System.out.println("Enter number of tickets:");
int tickets = scanner.nextInt();
buyTicket(customer, tickets);
break;
case 2:
int balance = customer.getMoney();
System.out.println("Your Balance Is: " + balance);
break;
case 3:
exit();
System.out.println("Exiting the program...");
System.out.println("System balance is " + this.getBalance());
break;
default:
System.out.println("Invalid option, please try again.");
}
}
scanner.close();
}
}
Kelas Setting adalah turunan dari TicketMachine yang mengelola interaksi dengan pengguna melalui menu berbasis teks. Kelas ini memungkinkan pengguna untuk membeli tiket, memeriksa saldo, dan keluar dari program.

Atribut
  • private boolean running: Menandakan status program (apakah masih berjalan atau tidak).
Metode
  • Konstruktor
  • Setting(int ticketMachine): Menginisialisasi objek dengan harga tiket dan menetapkan status program ke running (true).
  • isRunning(): Mengembalikan status running untuk memeriksa apakah program masih berjalan.
  • PrintMenu(): Menampilkan menu utama yang berisi opsi untuk membeli tiket, memeriksa saldo, atau keluar dari program.
  • exit(): Mengatur status running ke false, yang menghentikan eksekusi loop utama dalam metode Run.
  • Run(Users customer): Menangani alur interaksi pengguna:
    • Menampilkan menu.
    • Mengambil input dari pengguna dan melakukan aksi berdasarkan pilihan:
    • Pilihan 1: Meminta jumlah tiket dan memproses pembelian tiket.
    • Pilihan 2: Menampilkan saldo pengguna.
    • Pilihan 3: Menghentikan program dan menampilkan saldo mesin tiket.
    • Menutup Scanner saat program selesai.

Source Code: link

Komentar

Postingan populer dari blog ini

Implementasi Unit Test

Implementasi Support System