Kamis, 27 Oktober 2016

Pemrograman Java : Clock Display



                Assalamu’alaikum.
                Pada topik kali ini, saya akan membahas suatu masalah Pemrograman Java yaitu Clock Display. Yang mana permasalahannya adalah, kita akan membuat sebuah program yang dapat menampilkan waktu dengan nilai tampilan jam pada interval 0 – 23, sedangkan nilai tampilan menit pada interval 0 – 59.
                Dalam pembuatan program ini sendiri, inti dari programnya hanya membutuhkan 2 class saja, yang nanti akan kita sebut ClockDisplay, yang mana class ini untuk menampilkan waktunya, sedangkan ada satu class lagi yang akan kita sebut NumberDisplay, yang mana class ini untuk memproses input dari user dan output ke ClockDisplay. Sebenarnya jika digabung dalam satu buah class yang sama itu boleh-boleh saja, hanya saja dengan memisahkan inti program menjadi 2 class yang berbeda diharapkan dapat mempermudah pemahaman seorang newbie Java Programmer (seperti saya), dan supaya dalam peng-edit-an program dapat dilakukan dengan mudah tanpa perlu mengganti banyak source code. Jadi, langsung saja ini dia source code dari inti programnya.

public class ClockDisplay
{
    private NumberDisplay hours;
    private NumberDisplay minutes;
    private String DisplayString;   // Simulates the actual display
   
    /**
     * Constructor for ClockDisplay objects. This constructor
     * creates a new clock set at 00:00
     */
    public ClockDisplay(){
        hours = new NumberDisplay(24);
        minutes = new NumberDisplay(60);
        UpdateDisplay();
    }
   
    /**
     * Constructor for ClockDisplay objects. This constructor
     * creates a new clock set at the time specified by the
     * parameters.
     */
    public ClockDisplay(int hour, int minute){
        hours = new NumberDisplay(24);
        minutes = new NumberDisplay(60);
        SetTime(hour, minute);
    }
   
    /**
     * This method should get called once every minute - it
     * makes the clock display go one minute forward
     */
    public void TimeTick(){
        minutes.increment();
        if(minutes.GetValue() == 0){
            // It just rolled over!
            hours.increment();
        }
        UpdateDisplay();
    }
   
    /**
     * Set the time of the display to the specified hour and minute
     */
    public void SetTime(int hour, int minute){
        hours.SetValue(hour);
        minutes.SetValue(minute);
        UpdateDisplay();
    }
   
    /**
     * Return the current time of this display in the format
     * HH:MM
     */
    public String GetTime(){
        return DisplayString;
    }
   
    /**
     * Update the internal string that represents the display
     */
    private void UpdateDisplay(){
        DisplayString = hours.GetDisplayValue() + ":" + minutes.GetDisplayValue();
    }
}

                Kemudian untuk source code pada class NumberDisplay nya ada dibawah ini.

public class NumberDisplay
{
    private int limit;
    private int value;
   
    /**
     * Constructor for objects of class NumberDisplay
     */
    public NumberDisplay(int RollOverLimit){
        limit = RollOverLimit;
        value = 0;
    }
   
    /**
     * Return the current value
     */
    public int GetValue(){
        return value;
    }
   
    /**
     * Set the value of the display to the new specified
     * value. If the new value is less than zero or over the limit,
     * do nothing
     */
    public void SetValue(int ReplacementValue){
        if((ReplacementValue >= 0) && (ReplacementValue < limit)){
            value = ReplacementValue;
        }
    }
   
    /**
     * Return the display value (that is, the current value
     * as two digit String. If the value is less than ten,
     * it will be padded with a leading zero)
     */
    public String GetDisplayValue(){
        if(value < 10){
            return "0" + value;
        }
        else{
            return "" + value;
        }
    }
   
    /**
     * Increment the display value by one, rolling over to zero if
     * the limit is reached.
     */
    public void increment(){
        value = (value + 1) % limit;
    }
}

                Dengan cukup 2 class itu saja, kita sudah mendapatkan program penunjuk jam kita sendiri. Hanya saja dalam melihat proses inputnya dapat dibilang lebih memakan waktu jika digunakan dalam banyak test-case.

 
 
Untuk gambar dibawah, abaikan dulu class Test_ClockDisplay karena nanti akan saya bahas lebih lanjut.

 
Dan akan terlihat tampilan jam yang dimasukkan dalam object clockDis1.
Tapi seperti yang saya jelaskan sebelumnya, jika digunakan untuk Test Case dalam jumlah yang lebih banyak, akan sangat memakan waktu. Sehingga dalam pengecekan output, perlu dilakukan secara instant dan efektif, sehingga tidak perlu memanggil fungsi GetTime() dalam ClockDisplay dengan manual. Cukup dipanggil dalam console pun juga sebenarnya tidak masalah. Maka dari itu, saya mendefinisikan sebuah class baru yang berikutnya akan saya beri nama Test_ClockDisplay

Isi dari Test_ClockDisplay adalah sebagai berikut.

public class Test_ClockDisplay
{
    public Test_ClockDisplay(){
    }
   
    public void test_clock(int hour, int minute){
        ClockDisplay clock = new ClockDisplay();
       
        clock.SetTime(hour, minute);
        System.out.println(clock.GetTime());
    }
}

Dimana jika ingin menggunakan program ini, cukup memanggil lewat constructor Test_ClockDisplay(), dan dengan memasukkan nilai jam dan menit, dan Foila! akan langsung muncul tampilan jam dan menit dalam console tanpa perlu memanggil fungsi GetTime() secara manual.


Selanjutnya, nama instance yang akan saya berikan adalah Test1, sehingga akan muncul objek merah pada bagian kiri bawah BlueJ di sebelah clockDis1


 

Langsung akan secara otomatis muncul tampilan console BlueJ menunjukkan jam dan menit yang dimasukkan.
Jika ada saran atau kritik untuk bahasan ini, silahkan isi di kolom komentar. Terima kasih.. :D
Wassalamu'alaikum.

Kamis, 20 Oktober 2016

Java Programming : Ticket Machine Program



                Assalamu’alaikum.
                Pembahasan program kali ini sedikit berbeda dari sebelumnya, karena program ini ditujukan sebagai pengumpulan tugas untuk mata kuliah Pemrograman Berorientasi Objek. Jadi disini langsung saja saya bagi source code nya. Dan untuk penjelasan programnya akan saya jelaskan lebih detail nanti.

import java.util.Scanner;

public class TicketMachine
{
   private int price;
   private int balance;
   private int total;
   private int refund;
   private int tickets;
  
   public TicketMachine(int TicketCost){
       price = TicketCost;
       balance = 0;
       total = 0;
       refund = 0;
       tickets = 0;
   }
  
   public int getPrice(){
       return price;
   }
  
   public void insertMoney(int amount){
       if(amount > 0){
           balance += amount;
       }
       else{
           System.out.println("Tolong masukkan uang untuk dibayar");
       }
   }
  
   public void printTicket(){
       if(balance > 0){
           if(balance >= price){
               tickets = purchaseTickets();
              
               int i = 1;
              
               while(i <= tickets){
                   System.out.println("------------------");
                   System.out.println("-Tiket Kereta Api-");
                   System.out.println("Ticket " + i);
                   System.out.println("Price " + price + " rupiah");
                   System.out.println("------------------");
                  
                   i++;
               }
              
               total += balance;
              
               refund = refundBalance();
              
               if(refund == 0){
                   System.out.println("Tidak ada perubahan");
               }
               else{
                   System.out.println("Jumlah uang kembalian adalah " + refund + " rupiah");
               }
              
               balance = 0;
           }
           else{
               System.out.println("Uang yang dimasukkan kurang");
               System.out.println("Masukkan uang sebanyak " + (price - balance) + " rupiah");
           }
       }
       else{
           System.out.println("Tolong masukkan jumlah uang yang bernilai positif");
       }
   }
  
   public int refundBalance(){
       int TakeFund;
      
       TakeFund = balance - price * tickets;
      
       balance = 0;
      
       return TakeFund;
   }
  
   public int purchaseTickets(){
       int numberOfTickets;
      
       numberOfTickets = balance / price;
      
       return numberOfTickets;
   }
}

                Dari source code diatas, hal yang tidak umum dilihat adalah tidak adanya fungsi main yang menjadi fungsi utama dalam pengeksekusian program Java sederhana. Dengan kata lain, program diatas dieksekusi dalam bentuk pengeksekusian fungsi secara sendiri-sendiri. Dengan contoh output sebagai berikut.

 
 
 
 
Lalu klik kanan pada objek merah bertuliskan TicketMa2: TicketMachine, lalu klik void printTicket(), maka akan muncul hasil dari pembelian tiket yang sudah dilakukan.

Jika ada yang kurang jelas dari program saya, silahkan tanyakan di kolom komentar. Terima kasih. Wassalamu'alaikum. :D