Tugas 3 PBO - Aplikasi Auction

 

Tugas 3 PBO - AplikasiAuction

Muhammad Izzuddin Al Islami

05111740000035 


Deskripsi

Sebuah Auction terdiri dari barang yang dilelang, penawar yang ikut pelelangan dan penawaran terhadap barang yang dibuat oleh penawar. Pelelangan barang menggunakan sistem tawar menawar yang nantinya penawar dengan harga tawar tertinggi yang akan mendapat barang tersebut. Hanya ada 1 orang yang melakukan penawaran tertinggi terhadap barang tertentu yang dapat membelinya.

Class Diagram

Dekronstruksi Module/Class yang dibutuhkan

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

  1. People (modul yg merepresentasikan penawar)
  2. Lot (class yg merepresentasikan barang yang ada di pelelangan)
  3. Bid (class yg merepresentasikan penawaran yang diajukan terhadap barang)
  4. Auction

Implementasi (Source Code)

  1. Person.java

  2.  /**  
      * Class untuk para penawar.  
      *  
      * @author Muhammad Izzuddin A  
      */  
     public class Person {  
       private final String name;  
       /**  
        * Constructor  
        * @param name = nama penawar  
        */  
       public Person(String name){  
         this.name = name;  
       }  
       public String getName(){  
         return name;  
       }  
     }  
    
  3. Lot.java

  4.  /**  
      * Class untuk pemodelan barang pelelangan.  
      *  
      * @author Muhammad Izzuddin A  
      */  
     public class Lot {  
       // Nomor barang untuk identifikasi, bersifat immutable  
       private final int number;  
       // Deskripsi barang  
       private String description;  
       // Penawaran tertinggi sementara  
       private Bid highestBid;  
       /**  
        * Constructor  
        * @param number = nomor barang  
        * @param description = deskripsi barang  
        */  
       public Lot(int number, String description){  
         this.number = number;  
         this.description = description;  
         this.highestBid = null;  
       }  
       /**  
        * Fungsi yang menghandle penawaran barang  
        * @param bid = penawaran baru  
        * @return true jika berhasil, false jika gagal  
        */  
       public boolean bidFor(Bid bid){  
         // cek apakah belum ada penawar  
         if (highestBid == null){  
           highestBid = bid;  
           return true;  
         } else if (bid.getValue() > highestBid.getValue()) {  
           // Penawaran terbaru lebih tinggi dari penawaran sebelumnya  
           highestBid = bid;  
           return true;  
         } else {  
           // Penawaran gagal  
           return false;  
         }  
       }  
       /**  
        * Fungsi untuk menampilkan barang beserta highestBid nya  
        */  
       public String toString()  
       {  
         String details = number + ": " + description;  
         if (highestBid != null){  
           details += "\tBid: " + highestBid.getValue();  
         } else {  
           details += "\t(Belum ada penawaran)";  
         }  
         return details;  
       }  
       public int getNumber(){  
         return number;  
       }  
       public String getDescription(){  
         return description;  
       }  
       public Bid getHighestBid(){  
         return highestBid;  
       }  
     }  
    
  5. Bid.java

  6.  /**  
      * Class untuk pemodelan penawaran lelang.  
      *  
      * @author Muhammad Izzuddin A  
      */  
     public class Bid {  
       // penawaran bersifat final (immutable)  
       private final Person bidder;  
       private final long value;  
       public Bid(Person bidder, long value){  
         this.bidder = bidder;  
         this.value = value;  
       }  
       public Person getBidder(){  
         return bidder;  
       }  
       public long getValue(){  
         return value;  
       }  
     }  
    
  7. Auction.java

     import java.util.ArrayList;  
     /**  
      * Aplikasi pelelangan sederhana.  
      *  
      * @author Muhammad Izzuddin  
      */  
     public class Auction  
     {  
       // List barang yang akan dilelang  
       private ArrayList<Lot> lots;  
       // Nomor barang yang akan dilelang  
       private int nextLotNumber;  
       // Constructor  
       public Auction(){  
         lots = new ArrayList<Lot>();  
         nextLotNumber = 1;  
       }  
       // Memasukkan barang  
       public void enterLot(String description){  
         lots.add(new Lot(nextLotNumber, description));  
         nextLotNumber++;  
       }  
       // Menampilkan barang-barang dalam pelelangan  
       public void showLots(){  
         for (Lot lot: lots){  
           System.out.println(lot.toString());  
         }  
       }  
       public void makeABid(int lotNumber, Person bidder, long value){  
         Lot selectedLot = getLot(lotNumber);  
         if (selectedLot != null){  
           Bid bid = new Bid(bidder, value);  
           boolean successful = selectedLot.bidFor(bid);  
           if (successful){  
             System.out.println("Penawaran untuk barang nomor " + lotNumber + " berhasil.");  
           } else {  
             // Memberi tahu tawaran mana yang lebih tinggi  
             Bid highestBid = selectedLot.getHighestBid();  
             System.out.println("Nomor barang: " + lotNumber + " telah menerima tawaran: " + highestBid.getValue());  
           }  
         }  
       }  
       public Lot getLot(int lotNumber){  
         if ((lotNumber >= 1) && (lotNumber < nextLotNumber)){  
           Lot selectedLot = lots.get(lotNumber - 1);  
           // Check if exist  
           if (selectedLot.getNumber() != lotNumber){  
             System.out.println("Error internal: Nomor barang " + selectedLot.getNumber() + " was returned instead of " + lotNumber);  
             selectedLot = null;  
           }  
           return selectedLot;  
         } else {  
           System.out.println("Nomor barang: " + lotNumber + " tidak ada.");  
           return null;  
         }  
       }  
       // Menutup pelelangan dan mencetak hasilnya  
       public void close(){  
         System.out.println("Lelang ditutup.");  
         for (Lot lot: lots){  
           System.out.print(lot.getNumber() + ": " + lot.getDescription());  
           if (lot.getHighestBid() == null){  
             System.out.println("(Tidak ada penawaran untuk barang ini)");  
           } else {  
             Bid highestBid = lot.getHighestBid();  
             System.out.println(" terjual kepada " + highestBid.getBidder().getName() + " seharga " + highestBid.getValue());  
           }  
         }  
       }  
     }  
     

 Demo Aplikasi

  1. Pertama, kita instansiasi kelas Auction terlebih dahulu menggunakan BlueJ. Klik kanan pada kelas Auction dan pilih menu new Auction


  2.  Untuk menambahkan barang lelang baru, jalankan method enterLot() pada object auction1. Anda akan diminta untuk memasukkan nama barang dalam string
  3. Untuk melihat semua barang dalam pelelangan, jalankan method showLots() pada object auction1.
  4. Sebelum dapat melakakukan penawaran, kelas Person perlu dinstansiasi. Klik kanan pada kelas Person dan pilih menu new Auction, anda akan diminta nama dari klien kita dan nama object dari kelas Person yang kita instansiasi.
  5. Lalu, untuk melakukan penawaran gunakan method makeABid() pada object auction1. Isi dengan nomor barang, nama dari object kelas Person, dan nominal harga tawaran.
  6. Untuk menutup pelelangan, gunakan method close() pada object auction1. Program akan menampilkan pemenang lelang dari setiap barang


Comments

Popular posts from this blog

ETS PBO

Tugas 6 PBO - Game World of Zuul

Tugas 2 PBO - Aplikasi Traffic Light