Kamis, 01 Juni 2017

Final Project - Flappy Bird Menggunakan BlueJ

Pada kesempatan kali ini, saya akan mencoba untuk berbagi ilmu yang sebelumnya telah saya dapatkan di kelas PBO. Salah satunya adalah mencoba untuk membuat program tiruan dari Flappy Bird. Langsung saja ke source code :


  • Class Renderer
import java.awt.Graphics;

import javax.swing.JPanel;

public class Renderer extends JPanel
{

    private static final long serialVersionUID = 1L;

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        FlappyBird.flappyBird.repaint(g);
    }
    
}


  • Class FlappyBird

Sabtu, 13 Mei 2017

OOP Dalam Mesin ATM

Pada kesempatan kali ini, saya akan membagikan ilmu mengenai cara membuat Mesin ATM sederhana menggunakan Java, dengan panduan dari buku “Java How To Program” karya Paul Deitel dan Harvey Deitel.

Untuk class diagram dengan attr dan operations, bisa digambarkan sebagai berikut.




Langsung ke bagian source code:


  • Class ATM
public class ATM
{
    private boolean userAuthenticated;
    private int currentAccountNumber;
    private Screen screen;
    private Keypad keypad;
    private CashDispenser cashDispenser;
    private DepositSlot depositSlot;
    private BankDatabase bankDatabase;
   
    private static final int BALANCE_INQUIRY = 1;
    private static final int WITHDRAWAL = 2;
    private static final int DEPOSIT = 3;
    private static final int EXIT = 4;
   
    public ATM()
    {
        userAuthenticated = false;
        currentAccountNumber = 0;
        screen = new Screen();
        keypad = new Keypad();
        cashDispenser = new CashDispenser();
        depositSlot = new DepositSlot();
        bankDatabase = new BankDatabase();
       
    }
   
    public void run()
    {
        while ( true )
        {
            while ( !userAuthenticated )
            {
                screen.displayMessageLine( "\nWelcome!" );
                authenticateUser();
            }
           
            performTransactions();
            userAuthenticated = false;
            currentAccountNumber = 0;
            screen.displayMessageLine( "\nThank you! Goodbye!" );
        }
    }
   
    private void authenticateUser()
    {
        screen.displayMessage( "\nPlease enter your account number: " );
        int accountNumber = keypad.getInput();
        screen.displayMessage( "\nEnter your PIN: " );
        int pin = keypad.getInput();
       
        userAuthenticated =
           bankDatabase.authenticateUser( accountNumber, pin );
       
        if ( userAuthenticated )
        {
            currentAccountNumber = accountNumber;
        }
        else
        {
            screen.displayMessageLine("Invalid account number or PIN. Please try again." );
        }
    }
   
    private void performTransactions()
    {
        Transaction currentTransaction = null;
        boolean userExited = false;
       
        while ( !userExited )
        {
            int mainMenuSelection = displayMainMenu();
           
            switch ( mainMenuSelection )
            {
                case BALANCE_INQUIRY:
                case WITHDRAWAL:
                case DEPOSIT:
                     currentTransaction = createTransaction( mainMenuSelection );
               
                     currentTransaction.execute();
                     break;
                case EXIT:
                    screen.displayMessageLine( "\nExiting the system..." );
                    userExited = true;
                    break;
                default:
                    screen.displayMessageLine("\nYou did not enter a valid selection. Try again." );
                    break;
            }
        }
    }
   
    private int displayMainMenu()
    {
        screen.displayMessageLine( "\nMain menu:" );
        screen.displayMessageLine( "1 - View my balance" );
        screen.displayMessageLine( "2 - Withdraw cash" );
        screen.displayMessageLine( "3 - Deposit funds" );
        screen.displayMessageLine( "4 - Exit\n" );
        screen.displayMessage( "Enter a choice: " );
        return keypad.getInput();
    }
   
    private Transaction createTransaction( int type )
    {
        Transaction temp = null;
       
        switch ( type )
        {
            case BALANCE_INQUIRY:
                temp = new BalanceInquiry( currentAccountNumber, screen, bankDatabase );
                break;
            case WITHDRAWAL:
                temp = new Withdrawal( currentAccountNumber, screen, bankDatabase, keypad, cashDispenser );
                break;
            case DEPOSIT:
                temp = new Deposit( currentAccountNumber, screen, bankDatabase, keypad, depositSlot );
                break;
        }
       
        return temp;
    }
}
  • Class Screen
public class Screen
{
    public void displayMessage( String message )
    {
        System.out.print( message );
    }
   
    public void displayMessageLine( String message )
    {
        System.out.println( message );
    }
   
    public void displayDollarAmount( double amount )
    {
        System.out.printf( "$%,.2f", amount );
    }
   
}

Senin, 10 April 2017

Perintah Java (Scanner dan Library)

  • Scanner
Scanner merupakan perintah untuk membuat objek atau menginisialisasi object yang diinginkan pengguna atau yang diinputkan pengguna.
  public class Account   
  {   
   private double Balance;   
   public Account(double initialBalance)   
   {   
    if(initialBalance>0.0)   
     Balance=initialBalance;   
   }   
   public void credit(double amount)   
   {   
    Balance=Balance+amount;   
   }   
   public double getBalance()   
   {   
    return Balance;   
   }   
  }   

  import java.util.Scanner;   
  public class AccountTest   
  {   
   public static void main(String[] args)   
   {   
    Account account1=new Account(50.00);   
    Account account2=new Account(-7.53);   
    System.out.printf("account1 balance: $%.2f\n", account1.getBalance());   
    System.out.printf("account2 balance: $%.2f\n\n", account2.getBalance());   
    Scanner input=new Scanner(System.in);   
    double depositAmount;   
    System.out.print("Enter deposit amount for account1: ");   
    depositAmount=input.nextDouble();   
    System.out.printf("\nadding %.2f to account1 balance\n\n",   
     depositAmount );   
    account1.credit(depositAmount);   
    System.out.printf("Enter deposit amount for account2: ");   
    depositAmount=input.nextDouble();   
    System.out.printf("\nadding %.2f to account2 balance\n\n",   
     depositAmount);   
    account2.credit(depositAmount);   
    System.out.printf("account1 balance: $%.2f\n",   
     account1.getBalance());   
    System.out.printf("account2 balance: $%.2f\n",   
     account2.getBalance());   
   }   
  }   

  • Library
Library adalah sekumpulan package atau koleksi kelas yang telah disediakan oleh Java. Untuk menggunakan Library dalam java kita menggunakan syntax import. Syntax import digunakan untuk mengimport/memasukan method-method dari class/library yang lain, sehingga method tersebut dapat digunakan pada class yang memanggilnya. Fungsi ini harus diletakan pada baris awal program.

Senin, 03 April 2017

PBO-Evaluasi Tengah Semester 2017

Bank merupakan  tempat berkumpulnya masyarakat untuk menyimpan atau pun mengambil uang. Sebelum melakukan transaksi biasanya nasabah diminta mengambil nomor antrian di mesin pencetak antrian.

Mesin pencetak antrian bank adalah system yang berfungsi untuk mengelola nomor urut antrian nasabah bank. Mesin ini mempunyai fungsi, mempermudah teller dan customer service, atau layanan lain pada bank tersebut, memanggil nasabah dan melayani sesuai dengan keperluan nasabah, pada masing-masing layanan.


Untuk rancangannya, kira-kira akan seperti:

Antrian
-    TL : int
-  CS : int
- getTanggal : String
+ PrintTel
+ PrintCus















AntriNih(Main)
+ Main












Senin, 20 Maret 2017

Program Untuk Menghitung Luas dan Keliling Bangun Datar 2 Dimensi

Halo, pada kesempatan kali ini saya ingin berbagi mengenai cara meghitung luas dan keliling bangun datar 2 dimensi.

  • Layang-layang
import java.util.Scanner;
public class layanglayang{
    public static void main (String [] args)
    {
        Scanner nilai = new Scanner (System.in);
        double keliling, luas;
        System.out.println("Menghitung Luas Layang-Layang");
        {
            int d1, d2;
            System.out.println("Diagonal 1 = ");
            d1 = nilai.nextInt();
            System.out.println("Diagonal 2 = ");
            d2 = nilai.nextInt();
            luas = d1*d2/2;
            System.out.println("Luas layang-layang = "+luas);
        }
        System.out.println("\nMenghitung Keliling Layang-Layang");
        {
            int sisiA, sisiB;
            System.out.println("Sisi A = ");
            sisiA = nilai.nextInt();
            System.out.println("Sisi B = ");
            sisiB = nilai.nextInt();
            keliling = 2*sisiA + 2*sisiB;
            System.out.println("Keliling layang-layang = "+keliling);
        }
    }
}

  • Bujung Sangkar

Senin, 06 Maret 2017

Classes and Object: A Deeper Look II

8.7. Date Class Declaration


/**
 * Date
 * Ivan Fadhila
 * PBO
 */
public class Date
{
    private int month;
    private int day;
    private int year;
    
    private static final int[] daysPerMonth =
        {0,31,28,31,30,31,30,31,31,30,31,30,31};
        
   public Date(int theMonth, int theDay, int theYear)
   {
       month = checkMonth( theMonth ); 
       year = theYear;
       day = checkDay (theDay);
      
       System.out.printf(
        "Date object constructor for date %s\n", this);
   }
   
   private int CheckMonth(int testMonth)
   {
       if (testMonth > 0 && testMonth <=12)
        return testMonth;
       else
        throw new IllegalArgumentException ("month must be 1-12");
   }
   
   private int checkDay(int testDay)
   {
       if (testDay > 0 && testDay <= daysPerMonth [month])
        return testDay;
        
       if(month == 2 && testDay == 29 && (year % 400 == 0 ||
        (year % 4 == 0 && year % 100 != 0 )))
        return testDay;
        
       throw new IllegalArgumentException(
        "day out-of-range for the specified month and year");
   }
   
   public String toString()
   {
       return String.format("%d/%d/%d", month, day, year);
   }
}

Rabu, 01 Maret 2017

Studi Kasus Ticket Machine

Ticket Machine adalah sebuah mesin seperti ATM, yang berfungsi melayani penjualan tiket kereta api dari satu tujuan ke tujuan yang lain. Di dalam Ticket Machine ada sebuah program atau perangkat lunak yang mengatur harga tiket di tiap tujuan, mengatur kembalian uang, dan juga mencetak receipt sebagai bukti pembelian tiket.

Untuk menunjang pembelajaran, berikut saya lampirkan kode program dari Ticket Machine:

1. Class TicketMachine

/**
 * TicketMachine
 * Ivan Fadhila
 * PBO
 */
public class TicketMachine
{
    // The price of a ticket from this machine.
   private int price;
    //The amount of money entered by a customer so far.
   private int balance;
    // The total amount of money collected by this machine.
   private int total;
   
   public TicketMachine (int ticketCost)
   {
       price=ticketCost;
       balance=0;
       total=0;
   }
   
   public int getPrice()
   {
       return price;
   }
   
   public int getBalance()
   {
       return balance;
   }
   
   public void insertMoney(int amount)
   {
       balance=balance+amount;
   }
   
   public void printTicket()
   {
        // Simulate the printing of a ticket.
       System.out.println("##################");  
       System.out.println("# The BlueJ Line");  
       System.out.println("# Ticket");  
       System.out.println("# " + price + " cents.");  
       System.out.println("##################");  
       System.out.println();
       
        // Update the total collected with the balance.
       total=total+balance;
        // Clear the balance.
       balance=0;
   }
}