Tugas yang diberikan kali ini adalah membuat program menu dengan JOptionPane yang terdiri dari "SIGN UP" -> menu untuk mendaftarkan user dengan data nama, jenis kelamin dan password , "SIGN IN" -> menu untuk login program konversi bilangan yang sudah dibuat dengan memasukkan hanya nama dan password , dan "SIGN OUT" -> menu untuk keluar program .
Pertama saya membuat Java Package baru dengan nama Login Konversi.
Di dalam Login Konversi tersebut saya membuat New Java Class yang pertama yang saya beri nama Sign.java .
Pada Sign.java saya menuliskan coding seperti :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package LoginKonversi;
import java.util.ArrayList;
import javax.swing.JOptionPane;
/**
*
* @author USER
*/
public class Sign {
public ArrayList nameArray = new ArrayList();
public ArrayList genderArray = new ArrayList();
public ArrayList passArray = new ArrayList();
public int countSignIn;
public int nameLength;
public int genderLength;
public int passLength;
public void mainMenu() {
String[] menu = {"Sign Up", "Sign In", "Sign Out"};
int pilihan = JOptionPane.showOptionDialog(null,
"Selamat Datang :) " + "\nMohon Sign Up untuk masuk ke dalam program",
"Main menu",
JOptionPane.YES_NO_OPTION,
JOptionPane.PLAIN_MESSAGE,
null, menu, null);
switch (pilihan) {
case 0:
signUp();
break;
case 1:
signIn();
break;
case 2:
System.exit(0);
break;
default:
JOptionPane.showMessageDialog(null, "Maaf kalau anda mau keluar, anda dapat menekan tombol SIGN OUT");
mainMenu();
break;
}
}
public void signUp() {
Object nameSuit[] = nameArray.toArray();
Object passSuit[] = passArray.toArray();
String nama = inpNama();
int i;
for (i = 0; i < nameArray.size(); i++) {
if (nameSuit[i].equals(nama)) {
JOptionPane.showMessageDialog(null, "Maaf nama pengguna telah terdaftar");
signUp();
}
}
if (i == nameArray.size()) {
nameArray.add(nama);
}
genderArray.add(inpGender());
int a = 0;
while (a < 2) {
String pass = inpPassword();
if (!pass.matches(".{8,}")) {
JOptionPane.showMessageDialog(null, "Maaf maximal 8 karakter");
} else if (pass.matches(".{8,}")) {
passArray.add(pass);
mainMenu();
} else if (a == 2) {
a = 0;
}
}
}
public String inpNama() {
String nama = JOptionPane.showInputDialog("Tolong tuliskan nama anda : ");
try {
if (nama.isEmpty()) {
JOptionPane.showMessageDialog(null, "Maaf nama pengguna kosong");
inpNama();
} else if (!nama.matches("[a-z A-Z]+")) {
JOptionPane.showMessageDialog(null, "Maaf hanya boleh huruf");
inpNama();
}
} catch (NullPointerException npe) {
JOptionPane.showMessageDialog(null, "Maaf, tolong tuliskan nama anda");
inpNama();
}
return nama;
}
public String inpGender() {
String gender = "";
String[] opGender = {"Cewek", "Cowok"};
int pilihan = JOptionPane.showOptionDialog(null,
"Tolong pilih Jenis Kelamin Anda !!",
"Gender",
JOptionPane.YES_NO_OPTION,
JOptionPane.PLAIN_MESSAGE,
null, opGender, null);
switch (pilihan) {
case 0:
gender = "Mr. ";
break;
case 1:
gender = "Mrs. ";
break;
default:
JOptionPane.showMessageDialog(null, "Maaf, anda harus memilih jenis kelamin anda ! ");
inpGender();
break;
}
return gender;
}
public String inpPassword() {
String password = JOptionPane.showInputDialog("Tolong tuliskan password anda !");
try {
if (password.isEmpty()) {
JOptionPane.showMessageDialog(null, "Maaf password tidak boleh kosong");
inpPassword();
}
} catch (NullPointerException npe) {
JOptionPane.showMessageDialog(null, "Anda harus menuliskan password anda");
inpPassword();
}
return password;
}
public void signIn() {
Object nameSuit[] = nameArray.toArray();
Object passSuit[] = passArray.toArray();
Object genderSuit[] = genderArray.toArray();
String nama = inpNama();
String password = inpPassword();
String kesalahan = "";
String betul = "";
int i;
for (i = 0; i < nameArray.size(); i++) {
if (nameSuit[i].equals(nama) && passSuit[i].equals(password)) {
JOptionPane.showMessageDialog(null,
" Selamat Datang " + genderSuit[i] + " " + nameSuit[i] + "");
menuJOption();
} else if (!nameSuit[i].equals(nama) && !passSuit[i].equals(password)) {
kesalahan = "nama dan password";
betul = "Betul";
} else {
if (!passSuit[i].equals(password)) {
kesalahan = "password";
betul = "dengan nama anda";
}
if (!nameSuit[i].equals(nama)) {
kesalahan = "nama anda";
betul = "dengan password anda";
}
}
}
if (i == nameArray.size()) {
JOptionPane.showMessageDialog(null, "Maaf nama pengguna tidak cocok" + betul + "\nTry Again, please");
mainMenu();
}
}
public void menuJOption() {
Konversi konv = new Konversi();
String[] pilihan = {"BINER", "HEXA", "OKTAL", "TERBILANG", "PECAHAN", "KEMBALI"};
while (true) {
int response = JOptionPane.showOptionDialog(
null, "Welcome !!"
+ "\nChoose Conversion at above?"// Pesan
, "Conversion" // Judul di Tittlebar
, JOptionPane.YES_NO_OPTION // Tipe Option
, JOptionPane.PLAIN_MESSAGE // Tipe Pesan
, null, pilihan, null // Default button
);
switch (response) {
case 0:
konv.setPilih("Biner");
konv.outHasilBiner();
break;
case 1:
konv.setPilih("Hexadesimal");
konv.outHasilHexa();
break;
case 2:
konv.setPilih("Oktal");
konv.outHasilOktal();
break;
case 3:
konv.setPilih("Terbilang");
konv.outTerbilang();
break;
case 4:
konv.setPilih("Pecahan");
konv.hasilPecahan();
break;
case 5:
mainMenu();
break;
default:
JOptionPane.showMessageDialog(null, "Maaf, jika anda mau keluar anda bisa menekan tombol SIGN OUT");
break;
}
}
}
}
Setelah pada Class Sign.java selesai, saya pun membuat New Java Class yang kedua yang diberi nama Konversi.java . Konversi.java ini saya mengopy dari tugas yang sudah pernah diberikan yaitu MenuDariJOption.java dan tinggal diedit sedikit.
Pada Konversi.java saya menuliskan coding seperti :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package LoginKonversi;
import javax.swing.JOptionPane;
/**
*
* @author USER
*/
public class Konversi {
private static String des;
private String pilih;
private static int validDes;
private static long bilTerbilang;
static String[] angka = {"", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas"};
static StringBuilder binerHasil = new StringBuilder();
static StringBuilder hexaHasil = new StringBuilder();
static StringBuilder oktalHasil = new StringBuilder();
public void setPilih(String pilih) {
this.pilih = pilih;
}
public static void keBiner(int n) {
if (n > 1) {
keBiner(n / 2);
}
System.out.print(n % 2);
binerHasil.append(n % 2);
}
public void keHexa(int n) {//int n : parameter
char[] daftarHexa = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
int sisaBagi = n % 16;
if (n > 0) {
keHexa((n - sisaBagi) / 16);
System.out.print(daftarHexa[n % 16]);
hexaHasil.append(daftarHexa[n % 16]);
}
}
public void keOktal(int n) {
int sisaBagi = n % 8;
if (n > 0) {
keOktal((n - sisaBagi) / 8);
System.out.print(n % 8);
oktalHasil.append(n % 8);
}
}
public void inputDesJOption(String pilih) {
des = JOptionPane.showInputDialog("Masukkan Bilangan Desimal : ");
try {
if (des.isEmpty()) {
JOptionPane.showMessageDialog(null, "Bilangan Desimalnya wajib diisi !!");
inputDesJOption(pilih);
}
} catch (NullPointerException npe) {
JOptionPane.showMessageDialog(null, "Wajib Diisi");
inputDesJOption(pilih);
}
}
public void outHasilBiner() {
inputDesJOption(pilih);
try {
validDes = Integer.parseInt(des);
System.out.print("\n Bilangan Desimal "+des+" jadi jika dibinerkan hasilnya : ");
keBiner(validDes);
System.out.println("\n");
JOptionPane.showMessageDialog(null, "Bilangan Desimal "+des+" jika dijadikan Biner hasilnya : : "
+ ""+binerHasil, "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE);
binerHasil = new StringBuilder();
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "'"+des+"'"
+ " bukan angka !!"
+ "\nMasukkan angka saja");
outHasilBiner();
}
}
public void outHasilHexa() {
inputDesJOption(pilih);
try {
validDes = Integer.parseInt(des);
System.out.print("\n Bilangan Desimal "+des+" jika dijadikan Hexa hasilnya : ");
keHexa(validDes);
System.out.println("\n");
JOptionPane.showMessageDialog(null, "Bilangan desimal "+des+" jika dijadikan Hexa hasilnya : "
+ ""+hexaHasil, "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE);
hexaHasil = new StringBuilder();
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "'"+des+"'"
+ " bukan angka !!"
+ "\nMasukkan angka saja");
outHasilHexa();
}
}
public void outHasilOktal() {
inputDesJOption(pilih);
try {//untuk melakukan penanganan kesalahan
validDes = Integer.parseInt(des);
System.out.print("\n Bilangan desimal : " + des + " jika dijadikan Oktal hasilnya : ");
keOktal(validDes);
System.out.println("\n");
JOptionPane.showMessageDialog(null, "Bilangan desimal : " + des + " jika dijadikan Oktal hasilnya : " + oktalHasil, "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE);
oktalHasil = new StringBuilder();
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "'" + des + "'"
+ " .... bukan angka !!"
+ "\nMasukkan angka saja !!");
outHasilOktal();
}
}
private String sebut(int x) {
String bilang = "";
int y = x / 100;
if (y > 0) {
bilang = angka[y] + " ratus ";
if (y == 1) {
bilang = "seratus ";
}
x %= 100;
}
if (x < 12) {
bilang += angka[x];
} else {
y = x / 10;
x %= 10;
if (y == 1) {
bilang += angka[x] + " belas";
} else {
bilang += angka[y] + " puluh " + angka[x];
}
}
return bilang;
}
private String terbilang(long x) {
int y;
String bilang = "";
String[] satuan = {"", " ribu ", " juta ", " milyar ", " trilyun ", " quadrilyun ", " quintilyun "};
if (x > Math.pow(10, 20)) {
return "maaf Bilangan terlalu besar";
}
for (int i = 6; i > 0; i--) {
y = (int) (x / Math.pow(10, i * 3));
if (y > 0) {
if (y == 1 && i == 1) {
bilang += " seribu ";
} else {
bilang += sebut(y) + satuan[i];
}
}
x %= Math.pow(10, i * 3);
}
bilang += sebut((int) x);
return bilang;
}
public void outTerbilang() {
inputDesJOption(pilih);
try {
bilTerbilang = Long.parseLong(des);
JOptionPane.showMessageDialog(null, new Konversi().terbilang(bilTerbilang), "Terbilang", JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "'"+des+"'"
+ " bukan angka!"
+ "\nMohon isikan angka saja");
outTerbilang();
}
}
public void hasilPecahan() {
inputDesJOption(pilih);
try {
long desimal = Long.parseLong(des);
long satu, dua, tiga, empat, lima, enam, tujuh, delapan, sembilan, sepuluh, sebelas, duabelas, tigabelas;
//
satu = desimal / 100000;
desimal %= 100000;
dua = desimal / 50000;
desimal %= 50000;
tiga = desimal / 20000;
desimal %= 20000;
empat = desimal / 10000;
desimal %= 10000;
lima = desimal / 5000;
desimal %= 5000;
enam = desimal / 2000;
desimal %= 2000;
tujuh = desimal / 1000;
desimal %= 1000;
delapan = desimal / 500;
desimal %= 500;
sembilan = desimal / 200;
desimal %= 200;
sepuluh = desimal / 100;
desimal %= 100;
sebelas = desimal / 50;
desimal %= 50;
duabelas = desimal / 10;
desimal %= 10;
tigabelas = desimal / 1;
desimal %= 1;
JOptionPane.showMessageDialog(null, "Bilangan " + des + " dalam : "
+ "Jumlah seratus ribuan = " + satu
+ "\nJumlah lima puluh ribuan = " + dua
+ "\nJumlah dua puluh ribuan = " + tiga
+ "\nJumlah sepuluh ribuan = " + empat
+ "\nJumlah lima ribuan = " + lima
+ "\nJumlah dua ribuan = " + enam
+ "\nJumlah seribuan = " + tujuh
+ "\nJumlah lima ratusan = " + delapan
+ "\nJumlah dua ratusan = " + sembilan
+ "\nJumlah seratusan = " + sepuluh
+ "\nJumlah lima puluhan = " + sebelas
+ "\nJumlah lima satuan = " + duabelas
+ "\nJumlah satuan = " + tigabelas, "Pecahan", JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "'"+des+"'"
+ " bukan angka!"
+ "\nMohon isikan angka saja");
hasilPecahan();
}
}
}
Yang terakhir adalah membuat New Java Class yang ketiga yang diberi nama PanggilanJava.java . Pada PanggilanJava.java inilah antara dua Java Class diatas tersebut digabungin dan dipanggil agar program dapat dijalankan dengan sempurna.
Pada PanggilanJava.java saya menuliskan coding seperti :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package LoginKonversi;
/**
*
* @author USER
*/
public class PanggilanJava {
public static void main(String[] args) {
Sign data = new Sign();
data.mainMenu();
}
}
Untuk menjalankan program, tekan Shift+F6 pada PanggilanJava.java
Maka hasil yang akan keluar :
Tekanlah Sign Up untuk memasukkan data anda
Lalu isilah dengan nama anda
Setelah menekan OK, maka akan muncul Text Box tentang Jenis Kelamin
Pilihlah sesuai Jenis Kelamin anda.
Setelah memilih Jenis Kelamin, maka akan muncul Text Box yang menanyakan password anda untuk masuk ke dalam program tersebut.
Tuliskan sesuai password anda, namun jika password anda kurang dari 8 karakter maka akan muncul Text Box seperti
Maka isilah password anda maximal 8 karakter
Setelah itu tekan OK. Maka akan kembali mengisi data anda
Namun anda tidak boleh memasukkan data yang sama. Karena jika anda memasukkan data yang sama, akan muncul Text Box seperti
Jadi isilah dengan data yang berbeda
Setelah selesai Sign Up, anda bisa melakukan Sign In. Untuk melakukan Sign In, anda pun harus mengisi data lagi
Setelah itu pilihlah OK, lalu akan masuk ke program yang dituju
Jika memilih kembali, maka akan kembali ke menu utama
Jika sudah selesai, anda bisa keluar dengan menekan Sign Out.
Semoga bermanfaat :)