ETS PBO
Muhammad Izzuddin Al Islami
05111740000035
PBO B
Pertanyaan :
- Perhatikan video di atas, tuliskan skenario fungsionalitas aplikasi berdasarkan tayangan tersebut
- Definisikan Class dan gambarkan Diagram Class untuk membangun aplikasi tersebut.
- Implementasikan rancangan Class dengan menggunakan bahasa pemrograman Java.
- Buat video demo yang menjelaskan pembuatan aplikasi tersebut beserta dengan hasil eksekusinya.
----------------------------------------------------------------------------------------------------------------------------
Jawaban:
- Skenario fungsionalitas mesin ATM pada video diatas adalah:
- Untuk dapat menggunakan mesin ATM, pengguna harus melakukan autentikasi dengan cara memasukkan PIN.
- Pengguna dapat memilih menu-menu transaksi pada mesin ATM.
- Pengguna dapat melakukan setor tunai ke dalam mesin ATM.
- Dekomposisi Kelas yang dibutuhkan:
- Class ATM (Kelas utama program, memiliki fungsi menjalankan kelas MachineInterface)
- Class MachineInterface (Kelas yang menghandle input pengguna, memproses transaksi dan menampilkan user interface)
- Class Account (berisi deskripsi tentang akun pegguna bank, seperti nomor rekening, saldo dan pin) Diagram Kelas:
Implementasi
- ATM.java
- MachineInterface.java
- Account.java
- Video
import java.util.ArrayList;
/**
* Kelas utama program, memiliki fungsi menjalankan kelas MachineInterface
*
* @author Izzud
* @version 24/11/2020
*/
public class ATM {
public static void main(String args[]){
// mockup db accounts
ArrayList<Account> accountList = new ArrayList<Account>();
accountList.add(new Account("Agus", 100400007, 123456));
accountList.add(new Account("Budi", 100400008, 666666));
accountList.add(new Account("Chandra", 100400009, 555666));
accountList.add(new Account("Dedi", 100400010, 123098));
accountList.add(new Account("Elang", 100400011, 140450));
MachineInterface machine = new MachineInterface(accountList);
machine.serve();
}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
/**
* (Kelas yang menghandle input pengguna,
* memproses transaksi dan menampilkan user interface
*
* @author Izzud
* @version 24/11/2020
*/
public class MachineInterface {
private Account activeUser;
private ArrayList<Account> accountList;
/**
* Constructor
*/
public MachineInterface(ArrayList<Account> accountList){
this.accountList = accountList;
activeUser = null;
}
public void serve(){
// clear screen
System.out.print('\u000C');
System.out.flush();
//print welcome screen
System.out.println("=========================================================\n");
System.out.println("\t\tSELAMAT DATANG DI ATM BCA \n");
System.out.println("=========================================================\n");
System.out.println(" TEKAN TOMBOL ENTER UNTUK MEMULAI TRANSAKSI");
Scanner scanner = new Scanner(System.in);
try {
System.in.read();
}
catch(Exception e){}
//login
boolean auth = false;
while(!auth){
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\tSILAHKAN MEMASUKKAN KODE PIN ANDA");
int pin = scanner.nextInt();
auth = login(pin);
if(!auth) {
System.out.println("\nKODE PIN ANDA SALAH!");
System.out.println("TEKAN TOMBOL ENTER UNTUK MEMULAI KEMBALI");
try {
System.in.read();
}
catch(Exception e){}
}
}
//print menu
boolean active = true;
while(active){
System.out.print('\u000C');
System.out.flush();
System.out.println("\t\tSILAHKAN MEMILIH TRANSAKSI");
System.out.println("\t UNTUK MEMBATALKAN TRANSAKSI TEKAN 0");
System.out.println("\n1. SETORAN TUNAI");
System.out.println("2. PENARIKAN TUNAI/TRANSAKSI LAINNYA (GANGGUAN)");
int choice = scanner.nextInt();
switch(choice){
case 0:
active = false;
break;
case 1:
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\t\tSILAHKAN MEMASUKKAN NOMINAL \n\t\t\tUANG ANDA.");
int amount = scanner.nextInt();
try {
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\t\tUANG ANDA SEDANG DIPROSES");
Thread.sleep(3000);
} catch (InterruptedException e) {}
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\t JUMLAH NOMINAL UANG: Rp. " + amount + ",00");
System.out.println("\n1. SETOR");
System.out.println("2. BATAL");
int key = scanner.nextInt();
if (key == 1){
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\t JUMLAH NOMINAL UANG: Rp. " + amount + ",00");
System.out.println("\n\nSETORAN KE:");
System.out.println("1. REKENING ANDA");
System.out.println("2. REKENING LAIN");
int ch = scanner.nextInt();
if(ch == 1) setorTunai(amount);
else {
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\tSILAHKAN MEMASUKKAN NOMOR REKENING TUJUAN.");
int norek = scanner.nextInt();
}
try {
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\t\tTRANSAKSI ANDA SEDANG DIPROSES");
Thread.sleep(3000);
} catch (InterruptedException e) {}
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\t\tTRANSAKSI ANDA TELAH SELESAI");
System.out.println("\tAPAKAH ANDA INGIN MELAKUKAN TRANSAKSI LAIN?");
System.out.println("\n1. YA");
System.out.println("2. TIDAK");
ch = scanner.nextInt();
if (ch == 2) active = false;
}
break;
case 2:
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n MAAF, UNTUK SAAT INI PENARIKAN TUNAI BELUM TERSEDIA.");
System.out.println("\n\tTEKAN TOMBOL ENTER UNTUK MEMULAI KEMBALI");
try {
System.in.read();
}
catch(Exception e){}
break;
default:
System.out.println("\n\n MAAF, PILIHAN ANDA TIDAK TERSEDIA.");
System.out.println("\n\tTEKAN TOMBOL ENTER UNTUK MEMULAI KEMBALI");
try {
System.in.read();
}
catch(Exception e){}
}
System.out.print('\u000C');
System.out.flush();
System.out.println("\n\n\t\tSILAHKAN AMBIL KARTU ATM ANDA");
}
}
public void setorTunai(int amount){
int newBalance = activeUser.getSaldo() + amount;
activeUser.setSaldo(newBalance);
}
public boolean login(int pin){
Iterator<Account> itr = accountList.iterator();
while(itr.hasNext()) {
Account element = itr.next();
if (element.auth(pin)) {
activeUser = element;
return true;
}
}
return false;
}
}
/**
* Kelas berisi deskripsi tentang akun pegguna bank,
* seperti nomor rekening, saldo dan pin
*
* @author Izzud
* @version 24/11/2020
*/
public class Account {
private String nama;
private int pin;
private int saldo;
private int norek;
public Account(String nama, int norek, int pin){
this.nama = nama;
this.norek = norek;
this.pin = pin;
this.saldo = 0;
}
/**
* Fungsi untuk mendapatkan saldo pengguna
* @return saldo
*/
public int getSaldo(){
return saldo;
}
/**
* Fungsi untuk mngeset saldo terbaru
* @param newBalance nominal saldo terbaru
*/
public void setSaldo(int newBalance){
saldo = newBalance;
}
/**
* Fungsi login
* @return true jika pin sama, false jika tidak
*/
public Boolean auth(int pin){
return (this.pin == pin);
}
}
Comments
Post a Comment