PBO - Tugas 3 - Aplikasi Auction
Tugas 3 PBO - AplikasiAuction
Kevin Ashil F
05111740000178
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:
- People (modul yg merepresentasikan penawar)
- Lot (class yg merepresentasikan barang yang ada di pelelangan)
- Bid (class yg merepresentasikan penawaran yang diajukan terhadap barang)
- Auction
Implementasi (Source Code)
Person.java
Lot.java
Bid.java
Auction.java
import java.util.ArrayList; /** * Aplikasi pelelangan sederhana. * * @author Kevin Ashil */ 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()); } } } }
/**
* Class untuk para penawar.
*
* @author Kevin Ashil
*/
public class Person {
private final String name;
/**
* Constructor
* @param name = nama penawar
*/
public Person(String name){
this.name = name;
}
public String getName(){
return name;
}
}
/**
* Class untuk pemodelan barang pelelangan.
*
* @author Kevin Ashil
*/
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;
}
}
/**
* Class untuk pemodelan penawaran lelang.
*
* @author Kevin Ashil
*/
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;
}
}
Demo Aplikasi
- Pertama, kita instansiasi kelas Auction terlebih dahulu menggunakan BlueJ. Klik kanan pada kelas Auction dan pilih menu new Auction
- Untuk menambahkan barang lelang baru, jalankan method enterLot() pada object auction1. Anda akan diminta untuk memasukkan nama barang dalam string
- Untuk melihat semua barang dalam pelelangan, jalankan method showLots() pada object auction1.
- 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.
- Lalu, untuk melakukan penawaran gunakan method makeABid() pada object auction1. Isi dengan nomor barang, nama dari object kelas Person, dan nominal harga tawaran.
- Untuk menutup pelelangan, gunakan method close() pada object auction1. Program akan menampilkan pemenang lelang dari setiap barang