Sabtu, 08 September 2012

KONVERSI BILANGAN MENGGUNAKAN JOPTION.PANE

Pada materi sebelum ini telah dijelaskan bagaimana cara membuat program konversi bilangan desimal. perbedaan program yang dibahas kali ini dengan yang kemarin adalah output hasil menggunakan JOption.Pane dan konversi bilanagn desimal ke pecahan dan terbilang.

tuliskan coding berikut ini

package Praktek1;

import javax.swing.JOptionPane;

/**
 *
 * @author DELLA_VINKA
 */

public class MenuDariJOption {

    private static String name;
    private static String des;
    private static int validDes;
    static String kelamin;
    static String inpTerbilang;
    static StringBuilder hasilBiner = new StringBuilder();
    static StringBuilder hasilHexa = new StringBuilder();
    static StringBuilder hasilOktal = new StringBuilder();




// coding dibawah ini untuk proses  eksekusi pengconvertan bilangan

    public static void keBiner(int n) {
        if (n > 1) {
            keBiner(n / 2);

        }
        System.out.print(n % 2);
        hasilBiner.append(n % 2);
    }

    public static void keHexa(int n) {
        char[] daftarHexa = {'0', '1', '2', '3', '4', '5', '6', '7',
            '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};//==> daftra hexa = list untuk hexa
        if (n > 1) {
            keHexa(n / 16);
        }
        System.out.print(daftarHexa[n % 16]);

        hasilHexa.append(n % 16);
    }

    public static void keOktal(int n) {
        char[] daftarOktal = {'0', '1', '2', '3', '4', '5', '6', '7'};
        if (n > 1) {
            keOktal(n / 8);
        }
        System.out.print(daftarOktal[n % 8]);

        hasilOktal.append(n % 8);
    }


// coding selanjutnya untuk melakukan input desimal, nama, dan jenis kelamin melalui JOption.Pane

    public static void inputDesJOption() {
        des = JOptionPane.showInputDialog("masukkan"
                + "Bil.Desimalnya = ");

        try {
            if (des.isEmpty()) {
                JOptionPane.showMessageDialog(null,
                        "bilangan tidak boleh kosong !");
                inputDesJOption();//kembali input nama
            }
        } catch (NullPointerException npe) {
            JOptionPane.showMessageDialog(null,
                    "Harap diisi Bilangan desimalnya dahulu !");
            inputDesJOption();//kembali input bil desimal        }
    }

    public static void inpKelamin() {
        kelamin = JOptionPane.showInputDialog("Masukkan"
                + "Jenis Gender anda laki-laki/perempuan :");
        try {
            if (kelamin.isEmpty()) {
                JOptionPane.showMessageDialog(null,
                        "Jenis Gender tidak boleh kosong !");
                inpKelamin();//kembali input kelamin
            }
        } catch (NullPointerException npe) {
            JOptionPane.showMessageDialog(null,
                    "Harap diisi Gender anda dahulu !");
            inpKelamin();//kembali input kelamin
        }
        if ("laki-laki".equals(kelamin)) {
            kelamin = "Mr ";
        } else {
            if ("perempuan".equals(kelamin)) {
                kelamin = "Ms ";

            } else {
                JOptionPane.showMessageDialog(null, "Hanya perempuan atau laki - laki");
                inpKelamin();
            }
        }
    }

    public static void inpNama() {
        name = JOptionPane.showInputDialog("Masukkan"
                + "Nama Anda :");
        try {
            if (name.isEmpty()) {
                JOptionPane.showMessageDialog(null,
                        "nama tidak boleh kosong !");
                inpNama();//kembali input nama
            }
        } catch (NullPointerException npe) {
            JOptionPane.showMessageDialog(null,
                    "Harap diisi Nama dahulu !");
            inpNama();//kembali input nama

        } catch (NumberFormatException nfe) {// dirun saat kesalahan formatnumber
            JOptionPane.showMessageDialog(null, name
                    + "bukan karakter !"
                    + "\nMasukkan karakter saja !");
            inpNama();

        }
    }


//coding selanjutnya ini untuk proses eksepsi inputan bilangan. mulai dari message dialog untuk menginputkan sampai aturan aturannya

    public static void eksepsiInpBiner() {
        inputDesJOption();
        try { //konsepnya seperti if dan else ------ try-catch-catch----finally
            validDes = Integer.parseInt(des);
            System.out.print("\nDesimal dari " + des
                    + ", Binernya adalah = ");
            keBiner(validDes);
            System.out.println();
            JOptionPane.showMessageDialog(null, "Bilangan desimal :" + des
                    + " maka binernya adalah :" + hasilBiner, "KONVERSI BILANGAN", JOptionPane.PLAIN_MESSAGE);
            hasilBiner = new StringBuilder();
        } catch (NumberFormatException nfe) {// dirun saat kesalahan formatnumber
            JOptionPane.showMessageDialog(null, des
                    + "bukan angka !"
                    + "\nMasukkan angka saja !");
            eksepsiInpBiner();
        }
    }

    public static void eksepsiInpHexa() {
        inputDesJOption();
        try { //konsepnya seperti if dan else ------ try-catch-catch----finally
            validDes = Integer.parseInt(des);

            System.out.print("\nDesimal dari " + des
                    + ", Hexanya adalah = ");
            keHexa(validDes);
            System.out.println();
            JOptionPane.showMessageDialog(null, "Bilangan desimal :" + des
                    + " maka hexanya adalah :" + hasilHexa, "KONVERSI BILANGAN", JOptionPane.PLAIN_MESSAGE);
            hasilHexa = new StringBuilder();
        } catch (NumberFormatException nfe) {// dirun saat kesalahan formatnumber
            JOptionPane.showMessageDialog(null, des
                    + "bukan angka !"
                    + "\nMasukkan angka saja !");
            eksepsiInpHexa();
        }
    }

    public static void eksepsiInpOktal() {
        inputDesJOption();
        try { //konsepnya seperti if dan else ------ try-catch-catch----finally
            validDes = Integer.parseInt(des);
            System.out.print("\nDesimal dari " + des
                    + ", Oktalnya adalah = ");
            keOktal(validDes);
            System.out.println();
            JOptionPane.showMessageDialog(null, "Bilangan desimal :" + des
                    + " maka oktalnya adalah :" + hasilOktal, "KONVERSI BILANGAN", JOptionPane.PLAIN_MESSAGE);
            hasilOktal = new StringBuilder();
        } catch (NumberFormatException nfe) {// dirun saat kesalahan formatnumber
            JOptionPane.showMessageDialog(null, des
                    + "bukan angka !"
                    + "\nMasukkan angka saja !");
            eksepsiInpOktal();
        }
    }



// coding selanjutnya untuk mengoutputkan hasil konversi
public static void outHasilBiner() {
        eksepsiInpBiner();
    }

    public static void outHasilHexa() {
        eksepsiInpHexa();
    }

    public static void outHasilOktal() {
        eksepsiInpOktal();
    }


 // coding selanjutnya untuk konversi bilangan pecahan dan terbilang
String[] angka = {"", "Satu", "Dua", "Tiga",
        "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas"};

    private String keTerbilang(int a) {
        String bilang = "";
        int b = a / 100;
        if (b > 0) {
            bilang = angka[b] + " Ratus ";
            if (b == 1) {
                bilang = "Seratus ";
            }
            a %= 100;
        }
        if (a < 12) {
            bilang += angka[a];
        } else {
            b = a / 10;
            a %= 10;
            if (b == 1) {
                bilang += angka[a] + " Belas";
            } else {
                bilang += angka[b] + " Puluh " + angka[a];
            }
        }
        return bilang;
    }

    private String terbilang(long a) {
        int b;
        String bilang = "";
        String[] satuan = {"", " Ribu ", " Juta ", " Milyar ", " Trilyun ", " Quadrilyun ", " Quintilyun "};
        if (a > Math.pow(10, 20)) {
            return "Bilangan terlalu besar";
        }
        for (int i = 6; i > 0; i--) {
            b = (int) (a / Math.pow(10, i * 3));
            if (b > 0) {
                if (b == 1 && i == 1) {
                    bilang += " Seribu ";
                } else {
                    bilang += keTerbilang(b) + satuan[i];
                }
            }
            a %= Math.pow(10, i * 3);
        }
        bilang += keTerbilang((int) a);
        return bilang;
    }

    public static void outTerbilang() {
        inpTerbilang = JOptionPane.showInputDialog("Masukan Bilangan yang akan disebut : ");
        JOptionPane.showMessageDialog(null, new MenuDariJOption().terbilang(new Long(inpTerbilang)),
                "TERBILANG", JOptionPane.INFORMATION_MESSAGE);
    }

    public static void hasilPecahan() {
        int desimal;

        String str = JOptionPane.showInputDialog("Masukkan bilangan yang akan dipecah : ");
        desimal = Integer.parseInt(str);
        int 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, "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);
    }

//coding selanjutnya untuk proses menampilkan pada JOptionPane. coding ini merupakan coding terakhir dan utama untuk interface pada JOptionPane serta sekaligus coding main utama untuk menjalakna program tersebut
  public static void menuJOption() {
        // text untuk tombol
        inpNama();
        inpKelamin();
        String[] pilihan = {"BINER", "HEXA", "OKTAL", "TERBILANG", "PECAHAN", "<< KEMBALI", "<< KELUAR >>"};
        // "infinite" loop,selesai jika system.exit(0)
        while (true) {
            int response = JOptionPane.showOptionDialog( // ------ merupakan isian parameter
                    null, "Selamat Datang" + kelamin + "" + name + ","
                    + "\nPilih Konversi Bilangan dibawah sini"//pesan
                    , "Konversi Bilangan"// Judul Bar
                    , JOptionPane.YES_NO_OPTION //tipe pilihan
                    , JOptionPane.QUESTION_MESSAGE //tipepesan
                    , null //icon (none)
                    , pilihan //tombol text
                    , null //label tombol default
                    );
            //menggunakan switch untuk mengecek tombol yg ditekan
            switch (response) {
                case 0:
                    outHasilBiner();
                    break;
                case 1:
                    outHasilHexa();
                    ;
                    break;
                case 2:
                    outHasilOktal();
                    ;
                    break;
                case 3:
                    outTerbilang();
                    ;
                    break;
                case 4:
                    hasilPecahan();
                    ;
                    break;
                case 5:
                    inpNama();
                    inpKelamin();
                    ;
                    break;
                case 6:
                    System.exit(0);
                    break;

                case -1://mengeksekusi keluaran agar tidak ke default
                    //antara tombol 3 dan close box -1 ditangani disini
                    System.exit(0);//keluar looping tapi
                default:
                    // jika kita disini ada kesalahan
                    JOptionPane.showMessageDialog(null,
                            "response salah" + response);
                    break;

            }
        }
    }

    public static void main(String[] args) {

        menuJOption();

    }
}


NB : UNTUK MERAPIKAN CODING AGAR TERTATA RAPI TEKAN Alt+Ctrl+F

SELAMAT MENCOBA !!!





0 komentar:

Posting Komentar