Tugas 4 PBO - Aplikasi Ticket Machine

 

Tugas 4 PBO - Aplikasi Ticket Machine

Muhammad Izzuddin Al Islami

05111740000035 


Deskripsi

Sebuah Ticket Machine terdiri dari UI, dan daftar list film yang sedang diputar dalam bioskop. Pelanggan dapat membeli tiket sesuai dengan jumlah saldo, yang sebelumnya dapat di top up/isi ulang. Setelah transaksi pembelian tiket selesai, user dapat mencetak resi untuk ditukarkan menjadi tiket dan mengambil kembalian uang.

Class Diagram


Dekronstruksi Module/Class yang dibutuhkan

Maka, untuk membangun aplikasi sesuai deskripsi diatas kita memerlukan beberapa modul:

  1. MachineInterface (modul sebagai UI menggunakan console BlueJ)
  2. TicketMachine (class yg merepresentasikan logika operasi mesin tiket)
  3. Movie (class ini berisi deskripsi film yang sedang diputar beserta harga tiketnya)

Implementasi (Source Code)

  1. MachineInterface.java

  2.  /**  
      *  
      * @author Muhammad Izzuddin A  
      */  
     import java.util.Scanner;  
     public class MachineInterface {  
       public static void main(String args[]){  
         TicketMachine machine = new TicketMachine();  
         machine.clearScreen();  
         System.out.println("=================================\n");  
         System.out.println(" SELAMAT DATANG DI BIOSKOP MMXXI \n");  
         System.out.println("=================================\n");  
         while (true) {  
           System.out.println("Mulai transaksi? (Y / N)");  
           Scanner scanner = new Scanner(System.in);  
           char ch = scanner.next().charAt(0);  
           if (ch == 'Y' || ch == 'y'){  
             while (true){  
               machine.clearScreen();  
               System.out.println("1. Lihat harga tiket");  
               System.out.println("2. Jumlah saldo");  
               System.out.println("3. Top Up");  
               System.out.println("4. Beli tiket");  
               System.out.println("5. Cetak struk");  
               System.out.println("6. Ambil uang kembalian");  
               System.out.println("7. Keluar\n");  
               System.out.print("Pilih menu: ");  
               int key = scanner.nextInt();  
               switch(key){  
                 case 1:  
                   machine.printMovieList();  
                   System.out.print("\n");  
                   break;  
                 case 2:  
                   System.out.println(String.format("Saldo anda sekarang: Rp. %d,00\n",machine.getChange()));  
                   break;  
                 case 3:  
                   System.out.print("Masukkan nominal uang: ");  
                   int fund = scanner.nextInt();  
                   machine.addFunds(fund);  
                   System.out.println(String.format("Saldo anda yang baru: Rp. %d,00\n",machine.getChange()));  
                   System.out.print("\n");  
                   break;  
                 case 4:  
                   machine.printMovieList();  
                   System.out.println("Pilihan: ");  
                   int id = scanner.nextInt();  
                   System.out.println("Jumlah tiket: ");  
                   int amount = scanner.nextInt();  
                   machine.buyTicket(id, amount);  
                   break;  
                 case 5:  
                   if (machine.getTotal() <= 0){  
                     System.out.println("Maaf, anda belum membeli tiket apapun\n");  
                   } else {  
                     machine.printReceipt();  
                     System.out.println("Tukarkan struk untuk tiket di kasir\n");  
                   }  
                   break;  
                 case 6:  
                   float change = machine.getChange();  
                   if (change <= 0){  
                     System.out.println("Tidak ada uang kembalian.\n");  
                   } else {  
                     System.out.println(String.format("Uang kembalian sebesar Rp.%.2f", change));  
                     System.out.println("Silakan ambil uang kembalian Anda.\n");  
                   }  
                   break;  
                 case 7:  
                   System.out.println("Terima kasih telah menggunakan Automatic Ticket Machine kami!\nSelamat menikmati tayangan film berkualitas dari Bioskop MMXXI.");  
                   System.exit(0);  
                   break;  
                 default:  
                   System.out.println("Pilihan Anda tidak tersedia.");  
                   System.out.println();  
               }  
               System.out.println("Press Enter key to continue...");  
               try {  
                 System.in.read();  
               }   
               catch(Exception e){}   
             }  
           } else if (ch == 'N' || ch == 'n'){  
             System.out.println("Terima kasih telah datang di Bioskop MMXXI.");  
             System.exit(0);  
           } else {  
             System.out.println("Invalid choice.\n");  
           }  
         }  
       }  
     }  
    
  3. TicketMachine.java
  4.  /**  
      * Write a description of class TicketMachine here.  
      *  
      * @author Muhammad Izzuddin A  
      */  
     import java.util.ArrayList;  
     import java.util.Arrays;  
     public class TicketMachine {  
       private ArrayList<Movie> movieList = new ArrayList<Movie>();  
       private int total;  
       private int saldo;  
       private int tickets[];  
       public TicketMachine(){  
         movieList.add(new Movie("Tenet", "12.30 - 15.00", 65000));  
         movieList.add(new Movie("The Prestige", "15.30 - 18.00", 55000));  
         movieList.add(new Movie("Dunkirk", "18.30 - 20.30", 50000));  
         total = 0;  
         saldo = 0;  
         tickets = new int[movieList.size()];  
         Arrays.fill(tickets, 0);  
       }  
       public void printMovieList(){  
         int i = 0;  
         clearScreen();  
         for(i = 0; i < movieList.size(); i++){  
           System.out.println(String.format("%d. %s\t\t\t\t Rp.%d,00\n  %s", i+1, movieList.get(i).getTitle(), movieList.get(i).getPrice(), movieList.get(i).getSchedule()));  
         }  
       }  
       public void addFunds(int amt){  
         saldo += amt;  
       }  
       public void buyTicket(int movieID, int amount){  
         movieID -= 1;  
         if(movieID < 0 || movieID >= movieList.size()){  
           System.out.println(String.format("Maaf, film dengan no %d tidak ada.", movieID+1));  
         } else {  
           int price = amount * movieList.get(movieID).getPrice();  
           if (saldo < (total + price)){  
             System.out.println("Maaf saldo anda tidak mencukupi.\n");  
           } else {  
             tickets[movieID] += amount;  
             total += price;  
             System.out.println(String.format("Transaksi pembelian tiket film %s dengan jumlah %d berhasil dibeli\n",movieList.get(movieID).getTitle(), amount));  
           }  
         }  
       }  
       public int getTotal(){  
         return total;  
       }  
       public int getSaldo(){  
         return saldo;  
       }  
       public int getChange(){  
         return (saldo - total);  
       }  
       public void printReceipt(){  
         System.out.println("------------------------------------\n");  
         System.out.println("      ==RECEIPTS==      \n");  
         for (int i = 0; i < movieList.size(); i++){  
           if (tickets[i] < 1) continue;  
           float totalItem = tickets[i] * movieList.get(i).getPrice();  
           System.out.println(String.format("%d tiket \"%s\"  Rp.%.2f", tickets[i], movieList.get(i).getTitle(), totalItem));  
         }  
         System.out.println(String.format("\nTotal: Rp.%02d\n\n------------------------------------", total));  
       }  
       public static void clearScreen() {   
         System.out.print('\u000C');  
         System.out.flush();   
       }   
     }  
    
  5. Movie.java
  6.  /**  
      * Movie ticket class, berisi deskripsi film yang diputar   
      *  
      * @author Muhammad Izzuddin A  
      * @version (a version number or a date)  
      */  
     public class Movie {  
       private final int price;  
       private String title;  
       private String schedule;  
       /**  
        * Constructor for objects of class Movie  
        */  
       public Movie(String title, String schedule, int price){  
         this.price = price;  
         this.title = title;  
         this.schedule = schedule;  
       }  
       public int getPrice(){  
         return price;  
       }  
       public String getTitle(){  
         return title;  
       }  
       public String getSchedule(){  
         return schedule;  
       }  
     }  
    

Demo Aplikasi

  1. Saat awal pertama kali program berjalan, user akan diminta untuk melakukan input konfirmasi.

  2. Setelah mengkonfirmasi bahwa user ingin melakukan transaksi, akan muncul tampilan berisi menu, user dapat memilih salah satu menu dengan memasukkan input berupa angka urutan menu.

  3. User dapat melihat judul film, jadwal tayang, dan harga tiket pada menu 1.

  4. User dapat melihat saldo milik user. Sebelum melakukan top up, user memiliki saldo Rp. 0

  5. Untuk melakukan top up, user dapat memilih menu 3. Selanjutnya user diminta untuk memasukkan nominal saldo yang akan diisi.

    1. Untuk mengecek apakah operasi berhasil, kita akan memilih menu nomer 2.

  6. Untuk membeli tiket, user dapat memilih menu 4.
    1. User dapat melihat list film dan memilih salah satu dari pilihan

    2. User akan diminta untuk memasukkan jumlah tiket yang akan dibeli untuk film tersebut.
      1. Jika saldo tidak mencukupi maka akan muncul peringatan seperti dibawah ini.

      2. Jika berhasil, akan muncul notice seperti dibawah ini

  7. User dapat mencetak resi dari transaksi dengan memilih menu nomer 5

  8. User dapat mengambil uang kembalian dari transaksi dengan memilih menu nomer 6

  9. Untuk keluar dari aplikasi, user dapat memilih menu 7.

Comments

Popular posts from this blog

ETS PBO

Tugas 6 PBO - Game World of Zuul

Tugas 2 PBO - Aplikasi Traffic Light