Minggu, 09 September 2012

Konversi Bilangan dengan JOption


Hola,
Lumayan lama juga ni gak utek-utek THIS blog. Nah buat yang kali ini, aku bakalan sharing lagi sedikit ilmu JAVA yang baru aku dapetin di sekolah.
Kali ini, aku sharing tentang Konversi Bilangan dan menampilakan bilangan tersebut dalam pecahannya dan penulisannya versi JAVA menggunakan JOption. Di program yang kali ini sebelum melakukan konversi, kita harus mengisi form identitas kita yang ditampilkan menggunakan show message. 


Nah buat lebih dalam membahas tentang program ini, kita lihat seperti apa codenya :
            /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package praktek1;

import javax.swing.JOptionPane;

/**
 *
 * @author juwita
 */
public class menu_JOption {
    private static String name;
    private static String des;
    private static int validDes;
     private static String gender;
    private static String kelamin;
    static StringBuilder hasilBiner= new StringBuilder();
    static StringBuilder hasilHexa= new StringBuilder();
    static StringBuilder hasilOctal= new StringBuilder();
    static String sc;
    public static void keBiner(int n){
    if(n>1){
        keBiner(n/2);
      
    }
    System.out.print(n%2);
    hasilBiner.append(n%2);
    }
    public static void inputDesJOption(){
        des=JOptionPane.showInputDialog("Bilangan Desimal yang ingin dikonversikan : ");
        try{
            if(des.isEmpty()){
                JOptionPane.showMessageDialog(null, "Isi dulu bilangan desimalnya :D");
                inputDesJOption();
            }
        }
        catch(NullPointerException npa){
            JOptionPane.showMessageDialog(null, "Isi dulu ya :D");
            inputDesJOption();
        }
    }
    public static void eksepsiInpBiner(){
        inputDesJOption();
        try {
            validDes=Integer.parseInt(des);
            System.out.print("\nDesimal "+des+",Dalam biner = ");
            keBiner(validDes);
            System.out.println("\n");
             JOptionPane.showMessageDialog(null, "Desimal : "+des+" Dalam Biner : "+hasilBiner, "KONVERSI", JOptionPane.PLAIN_MESSAGE);
        }catch(NumberFormatException nfe){
            JOptionPane.showMessageDialog(null, "'"+des+"'"
                    + " Sorry ... Bukan angka lo"
                    + "\nInputkan angka saja ya ;D");
            outHasilBiner();
        }
    }
 
    public static void outHasilBiner() {
      
    eksepsiInpBiner();
    }
     public static void keHexa(int n){
     char [] daftarHexa={'0','1','2','3','4','5','6','7','8','9','A','B','C',
            'D','E','F'};
        if (n>1){
            keHexa (n/16);
        }
    System.out.print(daftarHexa[n%16]);
    hasilHexa.append(daftarHexa[n%16]);
  
    }
  
    public static void eksepsiInpHexa(){
        inputDesJOption();
        try {
            validDes=Integer.parseInt(des);
            System.out.print("\nDesimal "+des+",Dalam hexa = ");
            keHexa(validDes);
            System.out.println("\n");
             JOptionPane.showMessageDialog(null, "Desimal : "+des+" Dalam Hexa = "+hasilHexa, "KONVERSI", JOptionPane.PLAIN_MESSAGE);
        }catch(NumberFormatException nfe){
            JOptionPane.showMessageDialog(null, "'"+des+"'"
                    + " Sorry .... Bukan angka lo"
                    + "\nInputkan angka saja ya ;D");
            outHasilHexa();
        }
    }
    public static void outHasilHexa() {
    eksepsiInpHexa();
  
    }
     public static void keOctal(int n){
    if(n>1){
        keOctal(n/8);
      
    }
    System.out.print(n%8);
    hasilOctal.append(n%8);
    }
      public static void eksepsiInpOctal(){
        inputDesJOption();
        try {
            validDes=Integer.parseInt(des);
            System.out.print("\nDesimal "+des+",Dalam Octal = ");
            keOctal(validDes);
            System.out.println("\n");
             JOptionPane.showMessageDialog(null, "Desimal = "+des+" Dalam Octal = "+hasilOctal, "KONVERSI", JOptionPane.PLAIN_MESSAGE);
        }catch(NumberFormatException nfe){
            JOptionPane.showMessageDialog(null, "'"+des+"'"
                    + " Sorry .... Bukan angka lo"
                    + "\nInputkan angka saja ya ;D");
            outHasilOctal();
        }
    }
    public static void outHasilOctal() {
    eksepsiInpOctal();
    }
    public static void inpNama(){
    name=JOptionPane.showInputDialog("My name is ");
    try {
        if(name.isEmpty()){
            JOptionPane.showMessageDialog(null, "ayo perkalkan nama kamu dulu kawan");
            inpNama();//kembali input nama
        } 
    }catch (NullPointerException npe){
        JOptionPane.showMessageDialog(null, "Isi dulu ya form namanya");
        inpNama();//kembali input nama
    }
    }
    //untuk menampilkan input dialog jenis Kelamin (gender)
    public static void jenisKelamin(){
        gender=JOptionPane.showInputDialog("Isi Form Jenis Kelamin berikut (Laki-Laki/Perempuan) "
                +"*TOLONG SESUAIKAN PENULISAN BESAR KECILNYA HURUF *");
        try{
            if(gender.isEmpty()){
                JOptionPane.showMessageDialog(null, "Laki-Laki apa Perempuan ya? Isi dulu deh biar gak bertanya-tanya");
                jenisKelamin();
            }
        }
        catch(NullPointerException npt){
            JOptionPane.showMessageDialog(null, "Isi dulu ya form Jenis Kelaminnnya");
            jenisKelamin();
        }
        if ("Laki-Laki".equals(gender)) {
            kelamin="Bung, ";
        }
        else{
            if("Perempuan".equals(gender)){
                kelamin="Sis, ";
            }
            else{
                JOptionPane.showMessageDialog(null, "Maaf hanya ada 2 pilihan (Laki-Laki atau Perempuan saja)");
                jenisKelamin();
            }
        }
      
    }
    //menampilkan terbilang
     String[] angka={"","Satu","Dua","Tiga","Empat","Lima","Enam","Tujuh","Delapan","Sembilan","Sepuluh","Sebelas"};

    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 "};
        if(x > Math.pow(10, 20)) return "Melebihi kapasitas";
        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 static void outTerbilang(){
    sc = JOptionPane.showInputDialog("Inputkan Bilangan yang kamu ingin ketahui penulisannya *maksimal Quadriliyun* ");
    JOptionPane.showMessageDialog(null, new menu_JOption().terbilang(new Long(sc)), "TERBILANG", JOptionPane.INFORMATION_MESSAGE);
    }
    //Untuk Pecahan
    public static void bilPecahan(){
    int dec;
      
        String str=JOptionPane.showInputDialog("Masukkan bilangan yang ingin kamu ketahui apabila dipecah ");
        dec=Integer.parseInt(str);
        int satu, dua, tiga, empat, lima, enam, tujuh, delapan, sembilan, sepuluh, sebelas, duabelas, tigabelas;
      
        satu=dec/100000;
        dec%=100000;
      
        dua=dec/50000;
        dec%=50000;
     
       tiga=dec/10000;
        dec%=10000;
      
        empat=dec/5000;
        dec%=5000;
      
     
      
        lima=dec/1000;
        dec%=1000;
      
        enam=dec/500;
        dec%=500;
      
     
        tujuh=dec/100;
        dec%=100;
      
        delapan=dec/50;
        dec%=50;
      
        sembilan=dec/1;
        dec%=1;
  
  
            JOptionPane.showMessageDialog(null,"Banyaknya seratus ribuan    = "+satu
                                        +"\nBanyaknya lima puluh ribuan     = "+dua
                                        +"\nBanyaknya sepuluh ribuan        = "+tiga
                                        +"\nBanyaknya lima ribuan           = "+empat
                                        +"\nBanyaknya seribuan              = "+lima
                                        +"\nBanyaknya lima ratusan          = "+enam
                                        +"\nBanyaknya seratusan             = "+tujuh
                                        +"\nBanyaknya lima puluhan          = "+delapan
                                        +"\nBanyaknya satuan                = "+sembilan
                                        , "PECAHAN", JOptionPane.INFORMATION_MESSAGE);
    }
    //inputkembali
     public static void menuKembali(){
        inpNama();
        jenisKelamin();
    }
   
    public static void menuJOption(){
    //....text untuk tombol.
        inpNama();
        jenisKelamin();
        String[] pilihan={"BINER","HEXA","OCTAL","TERBILANG", "PECAHAN", "KEMBALI","<<KELUAR>>"};
        //...."Infinite" loop ,selesai jika system.exit(0)
        while (true){
            int response = JOptionPane.showOptionDialog(null//Tengah Window.
                    ,"Selamat Datang Lagi " +kelamin +name+"!!"+"\nPilih Proses Konversi Bilangan dibawah ini"//pesan
                    ,"Proses Konversi Bilangan"
                    ,JOptionPane.YES_NO_OPTION//Tipe Pilihan
                    ,JOptionPane.PLAIN_MESSAGE//Tipe Pesan
                    ,null //icon (none)
                    ,pilihan //tombol text.
                    ,null//label tombol default
                    );
            //...menggunakan switch untuk mengecek tombol yang di tekan.
            switch( response){
                case 0:
                    outHasilBiner();
                    break;
                case 1:
                    outHasilHexa();
                    ;
                     break;
                case 2:
                    outHasilOctal();
                    ;
                case 3:
                    outTerbilang();
                     break;
                case 4:
                    bilPecahan();
                    break;
                case 5:
                    menuKembali();
                    break;
                case 6:
                case -1:
                  
                    //..antara tombol (6) dan close box (-1) ditangani disini.
                    System.exit(0);//keluar looping,tapi
                default:
                    //Jika kita disini ada kesalahan,
                    JOptionPane.showMessageDialog(null,"Wow Ini Diluar Logika" +  response);break;
            }         
        }
    }
    public static void main(String[]args){
    menuJOption();
    }
}
dari hasil coding tersebut, akan menghasilkan tampilan seperti ini :
(tampilan saat pertama log in)

(notifikasi ini muncul apabila nama tidak diisi)

(nitifikasi akan uncul apabila form log in tesebut di cancel atau do close)

(tampilan log ini untuk mengisi jenis kelamin)

(notifikasi yang muncul apabila jenis kelamin tidak diisi)

(notifikasi yang muncul apabila jenis kelamin diisi selain Laki-Laki dan Perempuan)

(Notifikasi yang muncul yang apabila form jenis kelamin dicancel atau diclose)

(Tampilan menu konversi)

(Form untuk mengisi inputan bilangan desimak yang ingin dikonversikan, tampilan ini akan muncul pada konversi biner, hexa maupun octal)





(Tampilan hasil dari konversi biner, hexa, dan octal)

(Notifikasi apabila form konversi tidak diisi)

(Notifikasi apabila form diisi huruf bukan angka)

(Notifikasi yang muncul apabila form dicancel atau diclose)

(Tampilan form untuk mengisi bilangan yang ingin kita ketahui cara penulisannya)

(Hasil dari form bilangan yang ingin kita ketahui penulisannya)

(Form untuk mengisi bilangan yang ingin kita ketahui berapa pecahannya)

(Hasil dari form bilangan yang ingin kita ketahui pecahannya)


Nah, itu tadi project yang sudah saya coba buat, semoga bermanfaat :)








0 komentar:

Posting Komentar

 
;