Sabtu, 20 April 2019

GUI III (Create and Read)


GUI III  "Create and Read"
Pada kesempatan ini, kita akan belajar cara menghubungkan Java dengan MySQL dan membuat sebuah program CRUD sederhana berbasis teks. 

Kita membutuhkan JDBC (Java Data Base Connectivity) untuk menghubungkan Java dan MySQL.
JDBC bertugas menyediakan koneksi ke database, sehingga kita bisa mengakses dan mengelola datanya dari program Java.

Ada beberapa istilah yang harus dipahami dalam JDBC:
  • DriverManager: adalah sebuah class yang mengelola dirver;
  • Driver: adalah interface yang menangani komunikasi dengan database.
  • Connection: adalah interface yang menyediakan method untuk menghubungi database;
  • Statement: adalah inteface untuk mengeksekusi query;
  • ResultSet: adalah interface untuk menampung data hasil query.
Langkah pertama yaitu membuat database terlebih dahulu untuk menyimpan atau menginput data yang aakan dimasukan kedalam tampilan GUI.
 
Membuat project baru:
1. Buka aplikasi netbeans
2. Buka projek baru dengan cara klik file =>  New Project
3. Pilih katagori: java dan project: java application.
4. Berikan nama project: mahasiswa dan jangan lupa jangan lupa centang create main project lalu finish.
 
Buatlah database pada software yang biasa anda gunakan.
setelah itu buatlah file create: 
Disini saya contoh yaitu menggunakan GUI dengan Pemilu
 
setelah itu buatlah sourch code untuk menyambungkan pada Gui tampilan tersebut:
 
package pemilu;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
 
public class Create extends javax.swing.JFrame {

    /** Creates new form Create */
    public Create() {
        initComponents();
    }

    @SuppressWarnings("unchecked") 

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        String capres = String.valueOf(jTextField1.getText());
        String cawapres = String.valueOf(jTextField2.getText());
        String slogan = String.valueOf(jTextArea1.getText());
        if (capres.equals("")) {
            JOptionPane.showMessageDialog(null, "Anda Belum Mengisi Nama Capres!", "Input Data Status", 1);
        } else if (cawapres.equals("")) {
            JOptionPane.showMessageDialog(null, "Anda Belum Mengisi Nama CaWapres!", "Input Data Status", 1);
        } else if (slogan.equals("")) {
            JOptionPane.showMessageDialog(null, "Anda Belum Mengisi Slogan!", "Input Data Status", 1);
        } else { // jika data tidak ada yang kosong.
            try {
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/pemilu", "root", "");
                Statement st = conn.createStatement();
                String query = "INSERT INTO daftar_peserta VALUES (null,'" + capres + "','" + cawapres + "','" + slogan + "')";
                // harus diberi null, karena di database nya , kolom id itu AUTO INCREEMENT. null berarti tidak ada data yang masuk ke tabel
                st.executeUpdate(query);
                JOptionPane.showMessageDialog(null, "Data Berhasil Tersimpan!", "Input Data Status", 1);
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Terjadi Kesalahan! Periksa Kembali Data Anda! "+ex, "Input Data Status", 0);
            }
        }
    }
 
 
Setelah membuat File create untuk menginputkan data. 
 
Buatlah file Read untuk menampilkan data atau membaca data yang sudah diinputkan
 Diatas adalah tampilan Gui Read untuk menyimpan data yang sudah diinputkan
 
Setelah itu buatlah sourch code Readnya:

package pemilu;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class Read extends javax.swing.JFrame {

    /** Creates new form Read */
    public Read() {
        initComponents();
        data(); // ini berfungsi untuk memanggil method yang memanggil data pada database
    }


    @SuppressWarnings("unchecked")
                        
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null},
                {null, null, null},
                {null, null, null},
                {null, null, null}
            },
            new String [] {
                "CaPres", "CaWapres", "Slogan"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 452, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(14, Short.MAX_VALUE))
        );

        pack();
    }                   

    public void data() {         try {
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/pemilu", "root", "");
            String query2 = "SELECT * FROM daftar_peserta";
            Statement st2 = conn.createStatement();
            ResultSet rs2 = st2.executeQuery(query2);
            DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
            tm.setRowCount(0);
            while (rs2.next()) {
                String capress = rs2.getString("capres");
                String cawapress = rs2.getString("cawapres");
                String slogann = rs2.getString("slogan");
                tm.addRow(new Object[]{capress, cawapress, slogann});
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Terjadi Kesalahan! Periksa Kembali Data Anda!", "Input Data Status", 0);
        }
    }

                    
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
                     
}

Jadi setelah selesai maka bisa di Run kan atau dicoba.

diatas hanya materi tentang Create dan Read dari Gui pemrograman java untuk menginputkan sebuah data capres atau cawapres pemilu 2019.


Sumber : https://www.petanikode.com/java-mysql/

Jumat, 19 April 2019

GUI II (Events dan Pengambilan Nilai Pada Swings)


Events dan Pengambilan Nilai Pada Swings

Sebelum membuat events pada sebuah tampilan gui sebelumnya buatlah terlebih dahulu tampilan gui yang sederhana.
Contoh tampilan gui sederhana: 

 Pada tampilan Gui diatas terdiri dari beberapa komponen yaitu:
  1. Label = pada label diberi nama dengan angka dan hasil perhitungan
  2. textfield = text field ini nanti fungsinya untuk menginputkan angka dan menampilkan hasil dari perhitungan setelah dilakukannya event pada sebuah tombol hasil. 
  3. Button1 = pada komponen button ini diberi nama variabel hasil gunannya nanti akan diberikan sebuah event agar dapat melakukan sebuah perhitungan.
Sebelum dilakukannya perhitungan pada event terdapat langkah-langkah untuk membuat event terlebih dahulu pada tombol button1. 
seperti gambar dibawah ini: 



 setelah dilakukannya event pada button diatas buatlah sebuah sourch programnya.
contoh sourch program:
 import javax.swing.*;

public class Materi2 extends javax.swing.JFrame {


    public Materi2() {
        initComponents();
    }

 
    @SuppressWarnings("unchecked")


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
          String a = String.valueOf (Nama.getText());
          int b = Integer.parseInt(a);
          int c;
          c = b*2;
          System.out.println("Tulisannya Adalah : "+a);
          hasil.setText(""+c);


public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Materi2().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JTextField Nama;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JTextField nim;
    // End of variables declaration

}



Setelah membuat sourch code nya kemudian mencoba mengaplikasikan event pada gui perhitungan tersebut.
Gambar diatas adalah hasil dari event sesuai sourch code yang sudah dibuat.

Pengantar Gui


Pengantar Gui
Pengantar
  • GUI (Graphical User Interface), memungkinkan user untuk berinteraksi dengan komputer secara lebih baik.
  • Pengguna berinteraksi dengan berbagai elemen grafis,diantaranya: button, dialog box, menu, dsb.
  • Sejak 1994 Sun Microsystem berupaya untuk membuat JAVA memiliki perangkat bergaya desktop dengan ToolkitJAVA yang dikenal sebagai AWT (Abstract Windowing Toolkit)
  • Tahun 1997, muncul JFC (Java Foundation Class) untuk kepentingan pembuatan aplikasi Window yang merupakan pengembangan dari AWT.
  • JFC mempunyai kode swing yang terdapat pada package yang disediakan pada JAVA SDK versi 1.2 ke atas (JAVA 2).
  • JAVA menyediakan dua graphical library :
                 AWT (Abstract Windows Toolkit) 
                 Swing
 
Contoh:           import java.awt.* ;
                        Import java.awt.event.* ;
                        Import javax.swing.* ; 

Contoh Tampilan Gui sederhana:


Contoh Container-container pada Gui:
Container : Frame

        import javax.swing.*;
             class FramePertamaku extends JFrame {
             public FramePertamaku() {
         setTitle( "Frame Pertama );
         setSize( 300 , 200 );
              }
        }
public class Frameku {
public static void main (String args[ ] ) {
     FramePertamaku coba = new FramePertamaku();
     coba.show();
     }
}

Component : TextField


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
    public class TeksField {
    public static void main(String[ ] args) {
        JFrame frame = new JFrame("Membuat TeksField");
        JLabel label = new JLabel("Nama :");
        JTextField textField = new JTextField(20);
           frame.getContentPane().setLayout(new FlowLayout());
           frame.getContentPane().add(label);
           frame.getContentPane().add(textField);
           frame.pack();
           frame.setVisible(true);
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       }
}

Component : Label
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
   public class KomponenLabel {
   public static void main(String[ ] args) {
          JFrame frame = new JFrame("Membuat Label");
         JLabel label = new JLabel("Pemrograman Berorientasi Obyek");
         frame.getContentPane().add(label);
         frame.pack();
         frame.setVisible(true);
         frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
         }
}
 

Kamis, 18 April 2019

Array dan Blok Eksepsi


Array dan Blok Eksepsi
Array
  • Sebuah tipe data bentukan yang terdiri dari sejumlah komponen dengan tipe
  • yang sama.
  • Berfungsi untuk menyimpan nilai pada suatu variabel yang memiliki tipe data
  • yang sama.
  • Konsep array adalah menyimpan setiap nilai ke dalam tiap blok yang disebut
  • indeks.
  • Setiap indeks dimulai dari 0 dan seterusnya.
Deklarasi umum aray adalah :
      Tipe_data nama_variabel[jumlah_Indeks];

Contoh:
      int nilai [5];
     String [ ] nilai = new String[5];
  • Jumlah indeks dapat ditulis ataupun tidak ditulis.
  • Jumlah indeks berarti menentukan batas maksimal untuk menyimpan nilai ke dalam setiap indeks.
  • Tanpa penulisan jumlah indeks, jumlah indeks menjadi dinamis (bergantung kepada jumlah nilai yang tersimpan). 
Contoh Inisialisasi Array :
          int nilai[ ] = {7,8,9,10,6};
          String [ ] nilai1 = new String[]{"1","2"};

 Contoh Array :
Pengunaan Int: 
        int a [ ] = {5,2,3,4,54};
       System.out.println("Nilai"+a[5]+"merupakan indeks ke-0");
       System.out.println("Nilai"+a[2]+"merupakan indeks ke-1");
       System.out.println("Nilai"+a[3]+"merupakan indeks ke-2"); 
       System.out.println("Nilai"+a[4]+"merupakan indeks ke-3");
       System.out.println("Nilai"+a[54]+"merupakan indeks ke-4"); 

penggunaan String:
       String [ ] a  = new String {"5","2","3","4","54"};
       System.out.println("Nilai"+a[5]+"merupakan indeks ke-0");
       System.out.println("Nilai"+a[2]+"merupakan indeks ke-1");
       System.out.println("Nilai"+a[3]+"merupakan indeks ke-2"); 
       System.out.println("Nilai"+a[4]+"merupakan indeks ke-3");
       System.out.println("Nilai"+a[54]+"merupakan indeks ke-4");

Array Multidimensi
  • Bentuk Kompleks dari Array.
  • Pengaksesan nilai dalam array menggunakan indeks baris dan kolom.
  • Bentuk deklarasinya : variable[][]
  • Utamanya digunakan untuk operasi Matriks.
Blok Eksepsi
  • Merupakan keadaan tidak normal (abnormal) saat program tersebut dijalankan.
  • Ketika terjadi suatu eksepsi, maka dibutuhkan suatu objek tertentu untuk penanganan eksepsi tersebut.
  • Terdapat beberapa metode untuk penanganan Eksepsi, yaitu: try…catch, throw, throws dan finally.
Try…Catch
  • Bentuk dasar penanganan sebuah kondisi abnormal dari program.
  • Ketika terjadi satu eksepsi, maka blok catch akan “menangkapnya“ tanpa menghentikan program.
  • Jika tidak terjadi suatu eksepsi, maka blok try yang akan dijalankan.
Contoh :
        int x = 10;

        try {
            x = x / 0;
        }
        catch (Exception e){
            e.printStackTrace();
            System.out.println("error karena pembagian nol");
        }

        System.out.println(x);

        System.out.println("akhir program");
    }
}

Throw
  • Throw digunakan secara eksplisit untuk melemparkan suatu kondisi.
  • Aliran eksekusi akan segera terhenti apabila telah mencapai pernyataan throw.
  • Throw dibuat secara manual oleh programmer yang artinya kita dapat menentukan kapan kondisi throw terjadi. 
Contoh :
 try {
      throw new Exception ("Kesalahan Terjadi");
     }catch (Exception e){
           System.out.println(e);
     }
  }
Throws
  • Solusi apabila sebuah method dapat menyebabkan terjadinya eksepsi, namun tidak dapat “menangkapnya”.
  • Method lain dibuat untuk menangkap eksepsi tersebut. 
Contoh:
class Utama{
 public static void main(String args[]){
 Fungsi f = new Fungsi();
 try{
 double z = f.hitung(10, 0);
 }catch(Exception ex){
 System.out.println( ex.getMessage( ));
 }
 }
}
 
class Fungsi{
 public double hitung(int x, int y)throws Exception{
 double hasil = 0;
 try{
 hasil =  x/y;
 }catch(Exception ex){
 throws new Exception("Error Pembagian dengan Nol");
 }
 return hasil;
 }
}

Finally
  • Kondisi Finally akan dieksekusi, meskipun tidak terjadi suatu eksepsi. 
Contoh:
public class try_return_finally {
    public static String myMethod()
    {
       try {
         return "Ini adalah pernyataan return dalam blok try";
          
       }
       finally {
         System.err.println("Ini adalah pernyataan dalam blok finally");
         System.err.println("Pernyataan ini dieksekusi walaupun blok try memiliki pernyataan return");
       }
    }
     
    public static void main(String args[])
    {
       System.out.println(myMethod()); 
    }
 
}


 
 


Biodata Admin



  • Nama               : Dafikin
  • Alamat             : Desa Cangkring RT 01, RW 01, Kecamatan Sadang, Kabupaten Kebumen 54311
  • Program Studi : Teknologi Informasi, Universitas Muhammadiyah Purworejo  
  • Motto Hidup : Prioritaskan Kebutuhan dan kurangilah keinginan

Perulangan


PERULANGAN
  •  Sebuah metode untuk mengeksekusi perintah secara berulang.
  • Perulangan akan terus dieksekusi secara terus menerus ketika kondisinya
    TRUE.
  • Digunakan terutama untuk melakukan pemanggilan data pada Basisdata.
  • Memiliki 3 jenis penulisan: For, While, Do…While
  • Dalam pemrograman, terbagi menjadi 2 jenis : Counted Loop & Uncounted
    Loop.
Jenis Perulangan
  • Counted Loop : Jenis perulangan yang telah ditentukan (batasnya) dan
  • terhitung.
  • Uncounted Loop : Jenis perulangan yang tidak memiliki batas perulangan
  • yang jelas. Perulangan akan terus dilakukan selama kondisinya TRUE.
Contoh Counted Loop : For dan For…Each (Memunculkan Nilai Array).
Contoh Uncounted Loop : While dan Do…While 


Perulangan (For)
  • Perulangan yang umum digunakan untuk menampilkan data Array.
  • Pengecekan kondisinya dilakukan SEBELUM perulangan dimulai.
  • Selain kondisinya yang telah ditentukan, jumlah perhitungannya
  • (Increement/Decreement) juga dilakukan sebelum perulangan dilakukan. 
           for (nilai awal; kondisi; perhitungan){
                 blok yang akan diulang
           } 

Contoh:
         For( a=2;  a<=5;  a++ ){
                     System.out.printf("Hello World!!\n");
         }

Perulangan (While)
  • Merupakan bentuk lain dari perulangan yang merupakan salah satu jenis Uncounted Loop.
  • Perhitungan dilakukan SAAT perulangan. Sedangkan pengecekan kondisi dilakukan SEBELUM perulangan.
  • Digunakan juga untuk menampilkan data pada basisdata. 
     while (kondisi){
              blok yang akan diulangi
              perhitungan;
     } 

Contoh:
  int batas = 0;
        while (batas<10) {
          System.out.print(batas);
          batas++;
        }
    }
}
 
Perulangan Do…While
Hampir sama dengan perulangan pada while.
Perbedaannya terletak pada pengecekan kondisi. Pengecekan kondisi
dilakukan setelah perulangan. Hal ini berarti, perulangan akan dilakukan
terlebih dahulu baru setelahnya dicek kondisinya.
 
do{
  blok yang akan diulang
  perhitungan

   }while(kondisi)
} 
Contoh:
int batas = 0;
        do {
            System.out.print(batas);
            batas++;
        }while (batas<10);
    }
}

Percabangan


PERCABANGAN
  • Berfungsi untuk menampilkan kondisi tertentu (TRUE atau FALSE) atau
    ekspresi.
  • Penggunaan OPERATOR PERBANDINGAN dan OPERATOR LOGIKA.
  • Penggunaannya dapat digabungkan dengan PERULANGAN. 
Jenis Percabangan
  • IF
  1. Merupakan bentuk sederhana dari percabangan.
  2. Statement yang akan dieksekusi adalah yang bernilai TRUE.
  3. Apabila kondisi bernilai FALSE, maka program tidak akan menampilkan statement apapun.
            IF ( kondisi ){

                  Statement..\

            }

        Contoh :
                    int angka_1 = 10;
                    int angka_2 = 30;
                    if (angka_1 < angka 30){
                        System.out.println(“Angka 1 Lebih Kecil dari Angka 2”);
                   }
  • IF…ELSE
  1. Memiliki sedikit perbedaan dengan IF Tunggal.
  2. Jika pada IF Tunggal, statement akan dijalankan apabila kondisi TRUE saja, namun jika tidak (FALSE), maka statement tidak akan dijalankan.
  3. Statement pada IF…ELSE bernilai TRUE dan FALSE. Jika bernilai TRUE, maka Statement yang dieksekusi adalah IF sedangkan ELSE akan dieksekusi ketika kondisi
  4. bernilai FALSE.

         IF (Kondisi){

              STATEMENT TRUE

         } ELSE {

             STATEMENT FALSE

        }
      Contoh:
                 int nilai = 49;
                   if(nilai > 50){
                       System.out.println (“Anda Lulus”);
                 } else {
                       System.out.println(“Anda Tidak Lulus”);
                 }
  • IF Bersarang (IF-NESTED)
  1. IF-NESTED merupakan bentuk IF yang kompleks dari IF dan IF…ELSE
  2. Secara teori, IF-NESTED digunakan untuk mengeksekusi beberapa kondisi di dalam kondisi atau beberapa kondisi yang nilainya TRUE.
  3. Statement yang bernilai FALSE, dapat ditulis maupun tidak. Kondisi FALSE akan dijalankan jika beberapa kondisi TRUE tidak dieksekusi. 
          IF (KONDISI 1) {

              IF (KONDISI 1.1){

                     STATEMENT 1.1

          }

          } ELSE IF (KONDISI 2){

             IF (KONDISI 2.1){

                     STATEMENT 2.1

            }

         } ELSE {

                    STATEMENT

         }

        Contoh:

int nilai = 10;
        String pesan="", jumlah="";

        if (nilai>2) {
            jumlah = "Lebih besar dari 2";
            if(nilai%2 == 0){
                pesan = "Bilangan Genap";
            }else{
                pesan = "Bilangan Ganjil";
            }
            System.out.println(jumlah+" dan "+pesan);
        }else{
            jumlah = "Lebih kecil dari 2";
            System.out.println(jumlah);
        }
    }

}
  • SWITCH…CASE
  1. Merupakan kemungkinan penyataan yang akan dieksekusi.
  2. Hanya bekerja pada tipe data primitif (SWITCH).
      SWITCH(){

              CASE NILAI :

                        STATEMENT

                        BREAK

             CASE N:

                      STATEMENT N

                      BREAK

                      DEFAULT:

                      STATEMENT

                     BREAK;

           }

Minggu, 14 April 2019

Tipe Data dan Variabel


Tipe Data dan Operator

1. Tipe data dan variabel
Tipe Data merupakan sebuah pendeklarasian yang digunakan untuk menyimpan bilangan atau karakter.
Variabel merupakan Sebuah pengenal yang mewakili suatu nilai tertentu dalam program. 

Macam-macam tipe Data:
a. Tipe data numerik
b. Tipe data karakter
c. Tipe data Logika

  • Tipe Data Primitif
      Merupakan tipe data yang telah tersedia pada library/file header tertentu, misalnya : int,
char, string, dll.

Pendeklarasian: <tipe_data> <nama_variabel>;

Contoh : int nama;

  • Tipe data Numerik
     Merupakan tipe data yang digunakan untuk menyimpan bilangan bulat, mulai bilangan
positif, negatif atau keduanya.

Contoh tipe data numerik: int, long.

Dapat langsung diinialisasi.

Pendeklarasian : <int> <nama_variabel>

Contoh : int angka;
  • Tipe Data Karakter
       Merupakan tipe data yang digunakan untuk menyimpan karakter berupa kata(string),
karakter.

Contoh tipe data karakter : string, char.

Dapat langsung diinisialisasi.

Pendeklarasian sama dengan tipe data numerik

  • Tipe Data Boolean
        Merupakan bentuk ekspresi dari perbandingan

Tipe data boolean ditulis dengan bool

Tipe data ini hanya bernilai True (1) atau False (0)

Secara default bernilai 1.

  • Tipe Data Modifier
       Merupakan tipe data yang dapat memanipulasi tipe data primitif dalam hal rentang dan
ukuran memori yang digunakan.

Macam-macam tipe data modifier:
1. Signed : Memungkinkan bilangan yang tersimpan menjadi postif dan negatif.
2. Unsigned : Memungkinkan bilangan yang tersimpan menjadi positif saja.
3. Short : Untuk mengecilkan jumlah memori yang digunakan.
4. Long : Untuk membesarkan memori yang digunakan.

Enkapsulasi

Enkapsulasi Enkapsulasi Merupakan suatu metode dalam konsep OOP yang berfungsi agar suatu proses pada sebuah program tidak dapat diakse...