Dosen :
Adi Wahyu P, S.Si.,M.Kom.
Penulis :
Yanuar Hadi (4518210022)
Lisma Sonarita (4518210022)
Alif Daffa A. (4518210022)
FAKULTAS TEKNIK
JURUSAN INFORMATIKA
2019-2020
1. Penjelasan Tentang Aplikasi yang dibuat
Aplikasi yang dibuat oleh penulis merupakan aplikasi ATM atau Automated Teller
Machine, aplikasi ini memiliki 4 buah fitur yaitu Transfer, Tarik Tunai, Setor Tunai, dan Cek
Saldo. Di aplikasi ini juga menggunakan pin sebagai kode untuk sebuah akun dapat
mengaksesnya. Aplikasi ATM ini menggunakan JavaFX yang biasa dan tidak menggunakan
Scene Builder sehingga Class Controller dan File FXML yang ada tidak memiliki isi.
A. Class
Class yang digunakan pada aplikasi ini terdapat Interface ATM dan Class Akun. Class
ATM ini digunakan sebagai interface untuk penghubung bagi Class Akun, untuk Class
Akun digunakan sebagai isi dari berbagai transaksi yang adal di aplikasi ini. Pada Class
Akun terdapat Variabel-variabel yang berkaitan dengan akun dan Method-method dari
transaksi pada Aplikasi ini. Lain dengan Class Akun, pada Interface ATM terdapat
beberapa Variabel dan Method-method yang berfungsi untuk memanggil method-
method transaksi tersebut.
B. Relasi
Untuk Relasi dari Class-Class ini, penulis menggunakan Relasi berupa
Association/Asosiasi dengan Hubungan antara Class ATM dengan Class Akun yang
berupa one to many.
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
Stage window;
Scene scene1, scene2, scene3, scene4 ,scene5,scene6;
@Override
public void start(Stage primaryStage){
window = primaryStage;
window.resizableProperty().setValue(false);
//PIN
PasswordField pin = new PasswordField();
pin.setMaxHeight(27);
pin.setMaxWidth(212);
pin.setLayoutX(189);
pin.setLayoutY(140);
pin.setAlignment(Pos.CENTER);
pin.setPromptText("Masukkan PIN");
Text txt5 = new Text("PT. INI (persero), Tbk. terdaftar dan diawasi oleh Otoritas Jasa Keuangan
(OJK).");
txt5.setLayoutX(10);
txt5.setLayoutY(290);
txt5.setFont(Font.font("Times New Roman", 12));
txt5.setFill(Color.YELLOW);
//Tombol Masuk
Button btn1 = new Button("Enter");
btn1.setLayoutX(240);
btn1.setLayoutY(200);
btn1.setOnAction(e ->
{
if(pin.getText().isEmpty()){
Alert.display("Peringatan","Pin Yang Anda Masukkan Tidak Ada");
}
else if(pin.getText().equals(this.mike.noPin)) {
window.setScene(scene2);
}
else if(pin.getText().equals(this.jps.noPin)){
window.setScene(scene2);
}
else{
Alert.display("Peringatan","Pin Yang Anda Masukkan Tidak Ada");
}
});
//Halaman Login
Pane tampilan1 = new Pane();
tampilan1.getChildren().addAll(txt4,txt1,txt3,txt2,pin,btn1,txt5,txt6);
tampilan1.styleProperty().set("-fx-background-color: #0000FF");
scene1 = new Scene(tampilan1,529,305);
//Menampilkan Selamat Datang
Text welcome = new Text("PILIH TRANSAKSI YANG ANDA INGINKAN" );
welcome.setLayoutX(30);
welcome.setLayoutY(54);
welcome.setFont(Font.font("Times New Roman", 24));
welcome.setFill(Color.YELLOW);
//Panah Ajaib
Text panah1 = new Text("<--- TRANSFER");
panah1.setFont(Font.font("Times New Roman", 16));
panah1.setLayoutX(130);
panah1.setLayoutY(100);
panah1.setFill(Color.YELLOW);
Text panah2 = new Text("<--- TARIK TUNAI");
panah2.setFont(Font.font("Times New Roman", 16));
panah2.setLayoutX(130);
panah2.setLayoutY(160);
panah2.setFill(Color.YELLOW);
Text panah6 = new Text("<--- KEMBALI");
panah6.setFont(Font.font("Times New Roman", 16));
panah6.setLayoutX(130);
panah6.setLayoutY(220);
panah6.setFill(Color.YELLOW);
//Tombol Ke CekSaldo
Button btn3 = new Button();
btn3.setPrefWidth(100);
btn3.setLayoutX(410);
btn3.setLayoutY(140);
btn3.setOnAction(e->
{
if (pin.getText().equals(mike.noPin)){
Alert.display("Cek Saldo","Nama : "+this.mike.nama + "\n" + "Nomer Rekening :
"+this.mike.noRekening + "\n" + "Saldo : "+ this.mike.saldoan());
}
else if(pin.getText().equals(jps.noPin)){
Alert.display("Cek Saldo","Nama : "+this.jps.nama + "\n" + "Nomer Rekening :
"+this.jps.noRekening + "\n" + "Saldo : "+ this.jps.saldoan());
}
});
//Tombol ke Transfer
Button btn4 = new Button();
btn4.setPrefWidth(100);
btn4.setLayoutX(20);
btn4.setLayoutY(80);
btn4.setOnAction(e-> window.setScene(scene4));
//Halaman Menu
Pane tampilan2 = new Pane();
tampilan2.getChildren().addAll(welcome,btn3,btn4,btn5,btn6,btn2,panah1,panah2,panah3,panah4,pana
h6);
tampilan2.styleProperty().set("-fx-background-color: #0000FF");
scene2 = new Scene(tampilan2,529,305);
//Cek Saldo
TextArea show = new TextArea();
show.setEditable(false);
show.setMaxWidth(200);
show.setMaxHeight(75);
show.setText("Nama : "+this.mike.nama + "\n" + "Nomer Rekening : "+this.mike.noRekening +
"\n" + "Saldo : "+ this.mike.saldoan());
//Transfer
TextField trsfd = new TextField();
trsfd.setLayoutX(195);
trsfd.setLayoutY(110);
TextField nrk = new TextField();
nrk.setLayoutX(195);
nrk.setLayoutY(60);
Button btntrs = new Button("ENTER");
btntrs.setLayoutX(245);
btntrs.setLayoutY(150);
nrk.setMaxWidth(150);
trsfd.setMaxWidth(150);
Text tr1 = new Text("ATM TRANSFER");
tr1.setLayoutX(180);
tr1.setLayoutY(30);
tr1.setFont(Font.font("Times New Roman", 24));
tr1.setFill(Color.YELLOW);
Text tr2 = new Text("<--- KEMBALI");
tr2.setFont(Font.font("Times New Roman", 16));
tr2.setLayoutX(130);
tr2.setLayoutY(220);
tr2.setFill(Color.YELLOW);
Text tr = new Text("Jumlah Yang Ingin Ditransfer Rp.");
tr.setFont(Font.font("Times New Roman", 14));
tr.setFill(Color.YELLOW);
tr.setLayoutX(3);
tr.setLayoutY(130);
Text nr = new Text("No Rekening ");
nr.setFont(Font.font("Times New Roman", 14));
nr.setFill(Color.YELLOW);
nr.setLayoutX(3);
nr.setLayoutY(80);
btntrs.setOnAction( e ->
{
if(trsfd.getText().isEmpty() && nrk.getText().isEmpty()){
Alert.display("Peringatan","Harap Masukkan Uang Yang Ingin Di Transfer dan No Rekening
Tujuan");
}
else if(trsfd.getText().isEmpty()){
Alert.display("Peringatan","Harap Masukkan Uang Yang Ingin Di Transfer");
}
else if(nrk.getText().isEmpty()){
Alert.display("Peringatan","Harap Masukkan No Rekening Tujuan");
}
else {this.mike.transfer(Integer.parseInt(trsfd.getText())); }
if(pin.getText().equals(mike.noPin) && this.mike.trs > this.mike.saldo){
Alert.display("Peringatan", "Saldo Kurang");
}
else {this.mike.transfer(Integer.parseInt(trsfd.getText())); }
if(pin.getText().equals(mike.noPin) && this.mike.trs < this.mike.saldo ){
Alert.display("Transfer Berhasil", "Ke Rekening = " + nrk.getText() + "\n" + "Dengan
Transfer Sebesar Rp." + mike.lhttransfer() +"\n"+"Saldo Anda Sekarang "+ mike.transferan() );
}
else {this.jps.transfer(Integer.parseInt(trsfd.getText())); }
if(pin.getText().equals(jps.noPin) && this.jps.trs > this.jps.saldo){
Alert.display("Peringatan", "Saldo Kurang");
}
else {this.jps.transfer(Integer.parseInt(trsfd.getText())); }
if(pin.getText().equals(jps.noPin) && this.jps.trs < this.jps.saldo ){
Alert.display("Transfer Berhasil", "Ke Rekening = " + nrk.getText() + "\n" + "Dengan
Transfer Sebesar Rp." + jps.lhttransfer() +"\n"+"Saldo Anda Sekarang "+ jps.transferan() );
}
});
//Halaman Transfer
Pane tampilan4 = new Pane();
tampilan4.styleProperty().set("-fx-background-color: #0000FF");
tampilan4.getChildren().addAll(nr,nrk,tr,trsfd,btntrs,btn9,tr1,tr2);
scene4 = new Scene(tampilan4,529,305);
//Tarik Tunai
TextField trkfd = new TextField();
trkfd.setLayoutX(195);
trkfd.setLayoutY(85);
trkfd.setMaxWidth(150);
Button btntrk = new Button("ENTER");
btntrk.setLayoutX(245);
btntrk.setLayoutY(125);
Text trk = new Text("Jumlah Yang Ingin Di Tarik Rp.");
trk.setFont(Font.font("Times New Roman", 14));
trk.setFill(Color.YELLOW);
trk.setLayoutX(5);
trk.setLayoutY(105);
Text trk1 = new Text("ATM PENARIKAN");
trk1.setLayoutX(160);
trk1.setLayoutY(30);
trk1.setFont(Font.font("Times New Roman", 24));
trk1.setFill(Color.YELLOW);
Text trk2 = new Text("<--- KEMBALI");
trk2.setFont(Font.font("Times New Roman", 16));
trk2.setLayoutX(130);
trk2.setLayoutY(220);
trk2.setFill(Color.YELLOW);
btntrk.setOnAction( e ->
{
if(trkfd.getText().isEmpty() ){
Alert.display("Peringatan","Harap Masukkan Uang Yang Ingin Di Tarik");
}
else {this.mike.tarikTunai(Integer.parseInt(trkfd.getText())); }
if(pin.getText().equals(mike.noPin) && this.mike.tarik > this.mike.saldo){
Alert.display("Peringatan", "Saldo Kurang");
}
else {this.mike.tarikTunai(Integer.parseInt(trkfd.getText())); }
if(pin.getText().equals(mike.noPin) && this.mike.tarik < this.mike.saldo ){
Alert.display("Penarikan Berhasil", "\n" + "Penarikan Sebesar Rp." + mike.lhttarikan()
+"\n"+"Saldo Anda Sekarang "+ mike.tarikan() );
}
else {this.jps.tarikTunai(Integer.parseInt(trkfd.getText())); }
if(pin.getText().equals(jps.noPin) && this.jps.tarik > this.jps.saldo){
Alert.display("Peringatan", "Saldo Kurang");
}
else {this.jps.tarikTunai(Integer.parseInt(trkfd.getText())); }
if(pin.getText().equals(jps.noPin) && this.mike.tarik < this.jps.saldo ){
Alert.display("Penarikan Berhasil", "\n" + "Penarikan Sebesar Rp." + jps.lhttarikan()
+"\n"+"Saldo Anda Sekarang "+ jps.tarikan() );
}
});
//Halaman Tarik Tunai
Pane tampilan5 = new Pane();
tampilan5.styleProperty().set("-fx-background-color: #0000FF");
tampilan5.getChildren().addAll(trk,trkfd,btntrk,btn10,trk1,trk2);
scene5 = new Scene(tampilan5,529,305);
//Setor Tunai
TextField strfd = new TextField();
strfd.setLayoutX(195);
strfd.setLayoutY(85);
strfd.setMaxWidth(150);
Button btnstr = new Button("ENTER");
btnstr.setLayoutX(245);
btnstr.setLayoutY(125);
Text str = new Text("Jumlah Yang Ingin Di Setor Rp.");
str.setFont(Font.font("Times New Roman", 14));
str.setFill(Color.YELLOW);
str.setLayoutX(5);
str.setLayoutY(105);
Text str1 = new Text("ATM SETORAN");
str1.setLayoutX(180);
str1.setLayoutY(30);
str1.setFont(Font.font("Times New Roman", 24));
str1.setFill(Color.YELLOW);
Text str2 = new Text("<--- KEMBALI");
str2.setFont(Font.font("Times New Roman", 16));
str2.setLayoutX(130);
str2.setLayoutY(220);
str2.setFill(Color.YELLOW);
btnstr.setOnAction( e ->
{
if(strfd.getText().isEmpty() ){
Alert.display("Peringatan","Harap Masukkan Uang Yang Ingin Di Setor");
}
else {this.mike.setorTunai(Integer.parseInt(strfd.getText()));}
if(pin.getText().equals(mike.noPin)) {
Alert.display("Setoran Berhasil", "\n" + "Setoran Sebesar " + mike.lhtsetoran()+ "\n" + "Saldo
Anda Sekarang " + mike.setoran());
}
else {this.jps.setorTunai(Integer.parseInt(strfd.getText()));}
if(pin.getText().equals(jps.noPin)) {
Alert.display("Setoran Berhasil", "\n" + "Setoran Sebesar " + jps.lhtsetoran() + "\n" + "Saldo
Anda Sekarang " + jps.setoran());
}
});
//Halaman Setor Tunai
Pane tampilan6 = new Pane();
tampilan6.styleProperty().set("-fx-background-color: #0000FF");
tampilan6.getChildren().addAll(str,strfd,btnstr,btn7,str1,str2);
scene6 = new Scene(tampilan6,529,305);
//Menampilkan
window.setScene(scene1);
window.setTitle("INI ATM");
window.show();
}
public static void main(String[] args) {
launch(args);
}
}
b. Akun.java
package sample;
import java.io.Serializable;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public Akun(String noPin, String nama, String noRekening,int saldo,int setorIn,int tarikIn,int trsIn) {
this.nama = nama;
this.noPin = noPin;
this.noRekening = noRekening;
this.saldo = saldo;
this.trs = trsIn;
this.setor = setorIn;
this.tarik = tarikIn;
}
DecimalFormat kursIndo = (DecimalFormat) DecimalFormat.getCurrencyInstance();
DecimalFormatSymbols formatRp = new DecimalFormatSymbols();
@Override
public void setorTunai(int setorIn) {
setor = setorIn;
}
@Override
public void tarikTunai(int tarikIn) {
tarik = tarikIn;
}
@Override
public void transfer(int transferIn) {
trs = transferIn;
}
@Override
public String transferan() {
formatRp.setCurrencySymbol("Rp. ");
formatRp.setMonetaryDecimalSeparator(',');
formatRp.setGroupingSeparator('.');
kursIndo.setDecimalFormatSymbols(formatRp);
this.saldo = this.saldo - trs;
return kursIndo.format(saldo);
}
@Override
public String setoran() {
formatRp.setCurrencySymbol("Rp. ");
formatRp.setMonetaryDecimalSeparator(',');
formatRp.setGroupingSeparator('.');
kursIndo.setDecimalFormatSymbols(formatRp);
this.saldo = this.saldo + setor;
return kursIndo.format(saldo);
}
@Override
public String tarikan() {
formatRp.setCurrencySymbol("Rp. ");
formatRp.setMonetaryDecimalSeparator(',');
formatRp.setGroupingSeparator('.');
kursIndo.setDecimalFormatSymbols(formatRp);
this.saldo = this.saldo - tarik;
return kursIndo.format(saldo);
}
@Override
public Serializable saldoan() {
formatRp.setCurrencySymbol("Rp. ");
formatRp.setMonetaryDecimalSeparator(',');
formatRp.setGroupingSeparator('.');
kursIndo.setDecimalFormatSymbols(formatRp);
return kursIndo.format(saldo);
}
@Override
public String lhttarikan() {
formatRp.setCurrencySymbol("Rp. ");
formatRp.setMonetaryDecimalSeparator(',');
formatRp.setGroupingSeparator('.');
kursIndo.setDecimalFormatSymbols(formatRp);
return kursIndo.format(tarik);
}
@Override
public String lhtsetoran() {
formatRp.setCurrencySymbol("Rp. ");
formatRp.setMonetaryDecimalSeparator(',');
formatRp.setGroupingSeparator('.');
kursIndo.setDecimalFormatSymbols(formatRp);
return kursIndo.format(setor);
}
@Override
public String lhttransfer() {
formatRp.setCurrencySymbol("Rp. ");
formatRp.setMonetaryDecimalSeparator(',');
formatRp.setGroupingSeparator('.');
kursIndo.setDecimalFormatSymbols(formatRp);
return kursIndo.format(trs);
}
}
B. Java Controller
package sample;
Disini untuk Class Controller tidak memiliki isi karena penulis membuat Aplikasi ini
menggunakan JavaFX biasa dan tidak menggunakan Scene Builder.
C. Java FakeMain
package sample;
Class FakeMain ini dibuat untuk keperluan pembuatan file Executable .JAR
D. File FXML
Sample.fxml
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.application.Application?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<GridPane fx:controller="sample.Main"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>
Di file FXML ini hanya tersisi code default untuk sample.fxml saat membuat project.
9. Klik kanan pada file jar, kemudia run ‘file.jar’ dan tunggu beberapa detik