Auction System
Aplikasi Pelelangan (Auction System) adalah program yang didesain untuk melakukan proses pelelangan sebuah barang menggunakan sistem tawar menawar yang nantinya penawar dengan harga tawar tertinggi yang akan mendapat barang tersebut. Mekanisme sistemnya sendiri, pertama kita memasukkan dulu barang (lot) apa yang akan dilelang. Setelah itu barang akan diberi label penomoran yang akan memudahkan kita dalam menawar. Barulah penawar akan mulai memberi harga tawar sampai tidak ada yang menawar lagi. Lalu, penawar dengan harga tertinggilah yang berhak memperoleh barang lelang itu.
Dalam prakteknya, program ini membutuhkan beberapa class:
1. Class Auction, sebagai class utama dari program lelang.
2. Class Lot, sebagai class untuk mendaftarkan dan menyimpan detail barang yang akan dilelang.
3. Class Bid, sebagai class untuk menampung harga tawar oleh penawar barang.
4. Class Person, sebagai class untuk menyimpan data penawar yang ikut serta dalam pelelangan.
Berikut adalah diagram class yang telah dibuat dalam BlueJ
Source code
1.Auction.java
import java.util.ArrayList;
/**
* Aplikasi pelelangan sederhana.
*
* @author Yeremia Dhyan Limantara
* @version 25 Oktober 2020
*/
public class Auction
{
// List barang yang akan dilelang
private ArrayList<Lot> lots;
// Nomor barang yang akan dilelang
private int nextLotNumber;
// Mengadakan pelelangan baru
public Auction()
{
lots = new ArrayList<Lot>();
nextLotNumber = 1;
}
// Masukkan barang yang akan dilelang
public void enterLot(String description)
{
lots.add(new Lot(nextLotNumber, description));
nextLotNumber++;
}
// Menampilkan barang yang akan dilelang
public void showLots()
{
for (Lot lot: lots)
{
System.out.println(lot.toString());
}
}
/**
* Membuat penawaran
* @param lotNumber = nomor barang yang akan dilelang
* @param bidder = nama penawar
* @param value = harga yang ditawarkan
*/
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());
}
}
}
/**
* Return barang yang sudah diberi nomor
* Return NULL jika barang dengan nomor tersebut tidak ada
* @param lotNumber = nomor barang yang di-return
*/
public Lot getLot(int lotNumber)
{
if ((lotNumber >= 1) && (lotNumber < nextLotNumber))
{
// Nomor harus valid
Lot selectedLot = lots.get(lotNumber - 1);
// Cek apakah barang benar
if (selectedLot.getNumber() != lotNumber)
{
System.out.println("Error internal: Nomor barang " + selectedLot.getNumber() + " was returned instead of " + lotNumber);
// Tidak me-return barang invalid
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)");
}
else
{
Bid highestBid = lot.getHighestBid();
System.out.println(" terjual kepada " + highestBid.getBidder().getName() + " seharga " + highestBid.getValue());
}
}
}
}
2.Bid.java/**
* Class untuk pemodelan penawaran lelang (proses serta jumlah penawarannya).
*
* @author Yeremia Dhyan Limantara
* @version 25 Oktober 2020
*/
public class Bid
{
// Penawar
private final Person bidder;
// Harga yang ditawarkan. Menggunakan tipe data long untuk antisipasi bilangan besar.
private final long value;
/**
* Membuat penawaran
* @param bidder = penawar
* @param value = harga yang ditawarkan
*/
public Bid(Person bidder, long value)
{
this.bidder = bidder;
this.value = value;
}
/**
* @return Penawar
*/
public Person getBidder()
{
return bidder;
}
/**
* @return Harga yang ditawarkan
*/
public long getValue()
{
return value;
}
}
3. Lot.java/**
* Class untuk pemodelan barang pelelangan.
*
* @author Yeremia Dhyan Limantara
* @version 25 Oktober 2020
*/
public class Lot
{
// Nomor "unik" barang untuk identifikasi
private final int number;
// Deskripsi barang
private String description;
// Penawaran tertinggi sementara
private Bid highestBid;
/**
* Mengatur nomor dan deskripsi barang
* @param number = nomor barang
* @param description = deskripsi barang
*/
public Lot(int number, String description)
{
this.number = number;
this.description = description;
this.highestBid = null;
}
/**
* Percobaan penawaran barang
* Penawaran dianggap berhasil apabila harga yang ditawarkan lebih tinggi dari penawaran lain
* @param bid = penawaran baru
* @return true jika berhasil, false jika gagal
*/
public boolean bidFor(Bid bid)
{
if (highestBid == null) {
// Belum ada penawaran
highestBid = bid;
return true;
}
else if (bid.getValue() > highestBid.getValue())
{
// Penawaran lebih tinggi dari penawaran sebelumnya
highestBid = bid;
return true;
}
else
{
// Penawaran lebih rendah dari penawaran sebelumnya
return false;
}
}
/**
* @return Detail barang lelang
*/
public String toString()
{
String details = number + ": " + description;
if (highestBid != null)
{
details += " Bid: " + highestBid.getValue();
}
else
{
details += " (No bid)";
}
return details;
}
/**
* @return Nomor barang
*/
public int getNumber()
{
return number;
}
/**
* @return Deskripsi barang
*/
public String getDescription()
{
return description;
}
/**
* @return Penawaran tertinggi. Bernilai null jika belum ada tawaran.
*/
public Bid getHighestBid()
{
return highestBid;
}
}
4. Person.java/**
* Class untuk detail penawar yang ikut pelelangan.
*
* @author Yeremia Dhyan Limantara
* @version 25 Oktober 2020
*/
public class Person
{
// Nama penawar
private final String name;
/**
* Menambahkan "person" baru sesuai data penawar
* @param name = nama penawar
*/
public Person(String name)
{
this.name = name;
}
/**
* @return Nama penawar
*/
public String getName()
{
return name;
}
}
Cara Menggunakan Program
Berikut langkah-langkah penggunaan program pelelangan:
Pertama, compile terlebih dahulu class Auction.java. Kemudian, klik kanan dan pilih new Auction(). Untuk penamaannya, sebagai contoh saya menggunakan auction1. Akan muncul diagram objek berwarna merah seperti pada gambar.
Lalu, klik kanan diagram objek auction1 dan pilih method enterLot() untuk memasukkan barang yang akan dilelang. Jangan lupa untuk menggunakan tanda petik dua karena input barang berupa String.
Lalu, klik kanan diagram objek auction1 dan pilih method enterLot() untuk memasukkan barang yang akan dilelang. Jangan lupa untuk menggunakan tanda petik dua karena input barang berupa String.
Untuk memunculkan list barang apa saja yang akan dilelang dan apakah barang tersebut sudah ditawar atau belum, dapat menggunakan method showLots() pada auction1.
Karena belum ada penawar yang ikut serta pelelangan, maka kita perlu menambahkan data para penawar tersebut. Menggunakan class Person.java, klik kanan dan pilih new Person(String name). Setelah itu masukkan nama penawar, sebagai penanda, saya menggunakan person1. Akan muncul kembali diagram objek berwarna merah.Lalu, lakukan penawaran barang dengan method makeABid() pada auction1. Perlu diingat bahwa input yang dimasukkan (sesuai urutan) adalah nomor barang lelang, penanda nama penawar barang lelang, dan harga yang ditawar oleh penawar.
Bisa dicek kembali menggunakan method showLots() dan terlihat bahwa barang nomor 1 telah ditawar beserta harga tawarnya.
Terakhir, untuk menutup pelelangan bisa menggunakan method close() pada auction1. Maka akan muncul hasil akhir dari pelelangan barang tersebut, apakah terjual atau tidak, beserta data penawar barang dengan harga tertinggi.
Komentar
Posting Komentar