LECTURE NOTE APLIKASI CRUD PERPUSTAKAAN Debby Ummul Hidayah, S.Kom., M.MSI [email protected] [email protected] 1 PEMROGRAMAN BERBASIS WINDOWS MEMBUAT APLIKASI CRUD PERPUSTAKAAN A. Pendahuluan Pada sesi ini mahasiswa diharapkan mampu membuat sendiri aplikasi berbasis desktop dengan fungsi CRUD (create, read, update, delete). Sebagai bahan latihan praktikum, aplikasi yang akan dibuat adalah aplikasi perpustaakan. B. Database 1. Pengantar Koneksi ke Database Koneksi ke database pada Java ditangani oleh JDBC (Java DataBase Connectivity). Perlu diketahui, bahwa JDBC merupakan salah satu API (Application Programming Interface). Antarmuka ini memungkinkan pemrogram menulis sebuah program yang dapat digunakan untuk mengakses database yang berbeda-beda, seperti: Oracle, Access, MySQL, dan lain sebagainya. 2. Membuat Database Untuk membuat database dengan MySQL, kita gunakan XAMPP. Terlebih dahulu aktifkan Apache dan MySql pada XAMPP. Gambar 1. Mengaktifkan Apache dan MySql pada XAMPP Pada browser ketikkan: localhost/phpmyadmin. Jika berhasil maka akan keluar tampilan seperti pada Gambar 2. 2 Gambar 2. Tampilan localhost/phpmyadmin Untuk memnuat database baru, kita klik tombol New kemudian isi nama database dengan db_perpustakaan. Kemudian klik tombol Create. Gambar 3. Membuat database db_perpustakaan 3. Membuat Tabel Setelah menekan tombol Create dan database berhasil dibuat, langkah selanjutnya adalah membuat tabel. Kita akan membuat beberapa tabel yaitu tabel: tbBuku, tbAnggota, tbPetugas, tbKategoriBuku, tbPeminjaman, dan tbPengembalian. 3 Isi Name dengan tbBuku dan columns 8. Kemudian klik tombol Go. Gambar 4. Membuat tabel tbBuku Gambar 5. Field untuk tbBuku Gambar 6. Field untuk tbKategoriBuku 4 Gambar 7. Field untuk tbAnggota Gambar 8. Field untuk tbPetugas Gambar 9. Field untuk tbPeminjaman 5 Gambar 10. Field untuk tbPengembalian C. Membuat Projek Baru Caranya pilih menu File New Project kemudian pada Categories pilih Java dan pada Projects pilih Java Application. Setelah itu klik tombol Next. Project Name isi dengan AppPerpustakaan dan untuk Project Location adalah pada direktori D:\PBO. Kemudian klik tombol Finish. Gambar 11. Membuat projek baru dengan nama AppPerpustakaan D. Package Untuk membuat package baru, klik kanan pada project AppPerpustakaan pilih New pilih Java Package. 6 Gambar 11. Membuat package baru Gambar 12. Memberi nama pada package baru Ada beberapa package yang perlu dibuat dalam AppPerpustakaan ini, antara lain: 1. Package Koneksi Buat class baru pada package Fungsi. Klik kanan pada package Koneksi lalu pilih New pilih Java Class Gambar 13. Membuat class baru pada package Koneksi 7 Untuk nama classnya beri dengan nama Koneksi lalu klik tombol Finish. Gambar 14. Memberi nama class dengan Koneksi Ketikkan script code Java berikut pada class Koneksi.java Gambar 15. Script untuk class Koneksi.java 8 Menambahkan Library MySql JDBC Driver Sebelum kita membuat koneksi ke database db_perpustakaan, kita perlu menambahkan terlebih dahulu library MySql JDBC driver ke dalam projek kita. Caranya yaitu klik kanan pada Libraries pilih Add Library lalu pilih MySQL JDBC Driver. Gambar 16. Menambahkan library MySql JDBC Driver 2. Package Fungsi Tambahkan class baru pada package Fungsi dengan nama Fungsi. Adapun caranya sama seperti pada Gambar 13 dan Gambar 14. Ketikkan script berikut pada class Fungsi.java. Gambar 17. Script untuk class Fungsi.java 9 3. Package appperpustakaan.Entitas Buat beberapa class baru sebagai berikut: Gambar 18. Class yang dibuat pada package appperpustakaan.Entitas a. Script untuk class Anggota.java package appperpustakaan.Entitas; public class Anggota { private String kodeAnggota, namaAnggota, tempatLahir, tglLahir, jk, alamat, agama, pekerjaan, telp; public String getKodeAnggota() { return kodeAnggota; } public void setKodeAnggota(String kodeAnggota) { this.kodeAnggota = kodeAnggota; } public String getNamaAnggota() { return namaAnggota; } public void setNamaAnggota(String namaAnggota) { this.namaAnggota = namaAnggota; } public String getTempatLahir() { return tempatLahir; } 10 public void setTempatLahir(String tempatLahir) { this.tempatLahir = tempatLahir; } public String getTglLahir() { return tglLahir; } public void setTglLahir(String tglLahir) { this.tglLahir = tglLahir; } public String getJk() { return jk; } public void setJk(String jk) { this.jk = jk; } public String getAlamat() { return alamat; } public void setAlamat(String alamat) { this.alamat = alamat; } public String getAgama() { return agama; } public void setAgama(String agama) { this.agama = agama; } public String getPekerjaan() { return pekerjaan; } 11 public void setPekerjaan(String pekerjaan) { this.pekerjaan = pekerjaan; } public String getTelp() { return telp; } public void setTelp(String telp) { this.telp = telp; } //membuat konstruktor anggota public Anggota(String kode, String nama, String tempatLahir, String tglLahir, String jk, String alamat, String agama, String pekerjaan, String telp) { this.kodeAnggota = kode; this.namaAnggota = nama; this.tempatLahir = tempatLahir; this.tglLahir = tglLahir; this.jk = jk; this.alamat = alamat; this.agama = agama; this.pekerjaan = pekerjaan; this.telp = telp; } } b. Script untuk class KategoriBuku.java package appperpustakaan.Entitas; public class KategoriBuku { private String kodeKategori, kategoriBuku; public String getKodeKategori() { return kodeKategori; 12 } public void setKodeKategori(String kodeBuku) { this.kodeKategori = kodeKategori; } public String getKategoriBuku() { return kategoriBuku; } public void setKategoriBuku(String kategoriBuku) { this.kategoriBuku = kategoriBuku; } public KategoriBuku(String kodeKategori, String kategoriBuku) { this.kodeKategori = kodeKategori; this.kategoriBuku = kategoriBuku; } } c. Script untuk class Buku.java package appperpustakaan.Entitas; public class Buku { private String kodeBuku, judulBuku, namaPenerbit, kodeKategori; private int tebalBuku, thnTerbit, stok; public String getKodeBuku() { return kodeBuku; } public void setKodeBuku(String kodeBuku) { this.kodeBuku = kodeBuku; } public String getJudulBuku() { 13 namaPenulis, return judulBuku; } public void setJudulBuku(String judulBuku) { this.judulBuku = judulBuku; } public String getNamaPenerbit() { return namaPenerbit; } public void setNamaPenerbit(String namaPenerbit) { this.namaPenerbit = namaPenerbit; } public String getNamaPenulis() { return namaPenulis; } public void setNamaPenulis(String namaPenulis) { this.namaPenulis = namaPenulis; } public String getKodeKategori() { return kodeKategori; } public void setKodeKategori(String kodeKategori) { this.kodeKategori = kodeKategori; } public int getTebalBuku() { return tebalBuku; } public void setTebalBuku(int tebalBuku) { this.tebalBuku = tebalBuku; } public int getThnTerbit() { 14 return thnTerbit; } public void setThnTerbit(int thnTerbit) { this.thnTerbit = thnTerbit; } public int getStok() { return stok; } public void setStok(int stok) { this.stok = stok; } //membuat konstruktor Buku public String Buku(String namaPenerbit, kodeBuku, String String namaPenulis, kdKategori, int stok) { this.kodeBuku = kodeBuku; this.judulBuku = judulBuku; this.tebalBuku = tebalBuku; this.namaPenerbit = namaPenerbit; this.namaPenulis = namaPenulis; this.thnTerbit = thnTerbit; this.kodeKategori = kdKategori; this.stok = stok; } } d. Script untuk class Petugas.java package appperpustakaan.Entitas; /** * * @author debbyummul */ 15 judulBuku, int int tebalBuku, thnTerbit, String public class Petugas { private String kodePetugas, namaPetugas, tempatLahir, tglLahir, jk, alamat, agama, pass, status, telp; public String getKodePetugas() { return kodePetugas; } public void setKodePetugas(String kodePetugas) { this.kodePetugas = kodePetugas; } public String getNamaPetugas() { return namaPetugas; } public void setNamaPetugas(String namaPetugas) { this.namaPetugas = namaPetugas; } public String getTempatLahir() { return tempatLahir; } public void setTempatLahir(String tempatLahir) { this.tempatLahir = tempatLahir; } public String getTglLahir() { return tglLahir; } public void setTglLahir(String tglLahir) { this.tglLahir = tglLahir; } public String getJk() { return jk; } 16 public void setJk(String jk) { this.jk = jk; } public String getAlamat() { return alamat; } public void setAlamat(String alamat) { this.alamat = alamat; } public String getAgama() { return agama; } public void setAgama(String agama) { this.agama = agama; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getTelp() { return telp; } 17 public void setTelp(String telp) { this.telp = telp; } public Petugas(String kodePetugas, String namaPetugas, String tempatLahir, String tglLahir, String jk, String alamat, String agama, String telp, String pass, String status) { this.kodePetugas = kodePetugas; this.namaPetugas = namaPetugas; this.tempatLahir = tempatLahir; this.tglLahir = tglLahir; this.jk = jk; this.alamat = alamat; this.agama = agama; this.telp = telp; this.pass = pass; this.status = status; } } e. Script untuk class Peminjaman.java package appperpustakaan.Entitas; /** * * @author debbyummul */ public class Peminjaman { private String kodePinjam, kodePetugas; private int jmlPinjam; public String getKodePinjam() { return kodePinjam; } 18 kodeAnggota, kodeBuku, tglPinjam, public void setKodePinjam(String kodePinjam) { this.kodePinjam = kodePinjam; } public String getKodeAnggota() { return kodeAnggota; } public void setKodeAnggota(String kodeAnggota) { this.kodeAnggota = kodeAnggota; } public String getKodeBuku() { return kodeBuku; } public void setKodeBuku(String kodeBuku) { this.kodeBuku = kodeBuku; } public String getTglPinjam() { return tglPinjam; } public void setTglPinjam(String tglPinjam) { this.tglPinjam = tglPinjam; } public String getKodePetugas() { return kodePetugas; } public void setKodePetugas(String kodePetugas) { this.kodePetugas = kodePetugas; } public int getJmlPinjam() { return jmlPinjam; } 19 public void setJmlPinjam(int jmlPinjam) { this.jmlPinjam = jmlPinjam; } public Peminjaman(String kodePinjam, String kodeAnggota, kodeBuku, int jmlBuku, String tglPinjam, String kodePetugas) { this.kodePinjam = kodePinjam; this.kodeAnggota = kodeAnggota; this.kodeBuku = kodeBuku; this.jmlPinjam = jmlBuku; this.tglPinjam = tglPinjam; this.kodePetugas = kodePetugas; } } f. Script untuk class Pengembalian.java package appperpustakaan.Entitas; /** * * @author debbyummul */ public class Pengembalian { private String kodePinjam, kodeAnggota, tglKembali; private int denda; public String getTglKembali() { return tglKembali; } public void setKodePinjam(String kodePinjam) { this.kodePinjam = kodePinjam; 20 String } public String getKodeAnggota() { return kodeAnggota; } public void setKodeAnggota(String kodeAnggota) { this.kodeAnggota = kodeAnggota; } public void setTglKembali(String tglKembali) { this.tglKembali = tglKembali; } public String getKodePinjam() { return kodePinjam; } public int getDenda() { return denda; } public void setDenda(int denda) { this.denda = denda; } public Pengembalian(String kodePinjam, String kodeAnggota, String tglKembali, int denda) { this.kodePinjam = kodePinjam; this.kodeAnggota = kodeAnggota; this.tglKembali = tglKembali; this.denda = denda; } } 21 g. Script untuk class Login.java package appperpustakaan.Entitas; /** * * @author debbyummul */ public class Login { String user, pass; public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public Login(String user, String pass) { this.user = user; this.pass = pass; } } 22 4. Package appperpustakaan.EntitasManajer Buat beberapa class baru sebagai berikut: Gambar 19. Class yang dibuat pada package appperpustakaan.EntitasManajer a. Script untuk class ManajerAnggota.java 23 b. Script untuk class ManajerKategoriBuku.java 24 c. Script untuk class ManajerBuku.java 25 d. Script untuk class ManajerPetugas.java 26 e. Script untuk class ManajerPeminjaman.java 27 f. Script untuk class ManajerPengembalian.java 28 5. Package appperpustakaan.Interface Untuk package ini kita tambahkan JFrame Form. Caranya cukup mudah. Klik kanan pada package appperpustakaan.Interface New JFrame Form. Pada Class Name isi dengan nama form yang akan kita buat, dalam hal ini Class Name yang akan dibuat adalah FormAnggota, lalu klik tombol Finish untuk mengakhiri. Gambar 20. Membuat FormAnggota a. Desain FormAnggota.java Gambar 21. Contoh Tampilan Membuat FormAnggota 29 Tabel 1. Properties yang dibutuhkan pada FormAnggota M Tools Variabel Name u TextField1 l txtKode enabled: false a TextField2 i TextField3 txtNama txtTmptLahir TextField4 m ComboBox1 e txtTglLahir cmbJk model: Laki-Laki, Perempuan l TextField5 a ComboBox2 k txtAlamat cmbAgama model: Budha, Hindu, Katolik, Kristen, u Islam, Lainnya k TextField6 a TextField7 n jButton1 txtPekerjaan txtTelp btTambah jButton2 f jButton3 u jButton4 n jButton5 g jButton6 s btSimpan jTable1 i tblAnggota btHapus btUbah btKeluar btBatal CRUD 1) First Kita perlu mengimport beberapa package berikut: import Koneksi.Koneksi; import appperpustakaan.Entitas.Anggota; import appperpustakaan.EntitasManajer.ManajerAnggota; 2) Kita perlu menampilkan data tabel. Caranya kita buat method tampilTabel(). Lalu ketikkan source berikut: private void tampilTabel() { DefaultTableModel tabel = new DefaultTableModel(); 30 tabel.addColumn("Kode Anggota"); tabel.addColumn("Nama Anggota"); tabel.addColumn("Tempat Lahir"); tabel.addColumn("Tanggal Lahir"); tabel.addColumn("Jenis Kelamin"); tabel.addColumn("Alamat"); tabel.addColumn("Agama"); tabel.addColumn("Pekerjaan"); tabel.addColumn("Nomor Telepon"); try { con = getConnection.configDB(); st = con.createStatement(); String sql = "SELECT * FROM tbanggota"; ResultSet rs = st.executeQuery(sql); while (rs.next()) { tabel.addRow(new Object[]{rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7), rs.getString(8),rs.getString(9)}); } tblAnggota.setModel(tabel); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Ada Kesalahan"); } } 3) Untuk membuat kode Anggota menjadi otomatis ketika ditambahkan, kita bisa membuat method tampilKodeAnggota(). Kita dapat menggunakan contoh script berikut: private void tampilKodeAnggota() { try { String sql = "SELECT MAX(right(kdAnggota, 1)) AS Kode FROM tbanggota"; con = getConnection.configDB(); st = con.createStatement(); ResultSet rs = st.executeQuery(sql); if (rs.first() == false) { txtKode.setText("A0001"); } else {; 31 rs.last(); int auto_id = rs.getInt(1) + 1; String no = String.valueOf(auto_id); int noLong = no.length(); //mengatur jumlah 00 for (int a = 0; a < 4 - noLong; a++) { no = "0" + no; } txtKode.setText("A" + no); } rs.close(); st.close(); } catch (Exception e) { } } 4) Agar data tabel pada database dapat tampil pada tabel di form Anggota, maka kita tinggal memanggil method tampilTabel() pada konstruktor utama. public FormAnggota() { initComponents(); tampilTabel(); } 5) Double klik pada tombol Simpan private void btSimpanActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if (txtKode.getText().isEmpty() || txtNama.getText().isEmpty() || txtTmptLahir.getText().isEmpty() || txtTglLahir.getText().isEmpty() || cmbJk.getSelectedItem().equals(null) || txtAlamat.getText().isEmpty() || cmbAgama.getSelectedItem().equals(null) || txtPekerjaan.getText().isEmpty() || txtTelp.getText().isEmpty()) { JOptionPane.showMessageDialog(null, "Field Tidak Boleh Kosong"); txtNama.requestFocus(); } else { Anggota a = new Anggota(txtKode.getText(),txtNama.getText(), txtTmptLahir.getText(),txtTglLahir.getText(), cmbJk.getSelectedItem().toString(), txtAlamat.getText(), cmbAgama.getSelectedItem().toString(), txtPekerjaan.getText(), txtTelp.getText()); ManajerAnggota ma = new ManajerAnggota(); int i = ma.INSERT(a); 32 if (i == 1) { JOptionPane.showMessageDialog(null, "Simpan Data Berhasil"); tampilTabel(); kosong(); txtNama.requestFocus(); btTambah.setEnabled(true); btSimpan.setEnabled(false); btUbah.setEnabled(false); btHapus.setEnabled(false); } else { JOptionPane.showMessageDialog(null, "Data gagal Disimpan"); kosong(); txtNama.requestFocus(); btTambah.setEnabled(true); btSimpan.setEnabled(false); btUbah.setEnabled(false); btHapus.setEnabled(false); } } } 6) Double klik pada tombol Ubah private void btUbahActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if (txtKode.getText().isEmpty() || txtNama.getText().isEmpty() || txtTmptLahir.getText().isEmpty() || txtTglLahir.getText().isEmpty() || cmbJk.getSelectedItem().equals(null) || txtAlamat.getText().isEmpty() || cmbAgama.getSelectedItem().equals(null) || txtPekerjaan.getText().isEmpty() || txtTelp.getText().isEmpty()) { JOptionPane.showMessageDialog(null, "Field Tidak Boleh Kosong"); txtNama.requestFocus(); } else { Anggota a = new Anggota(txtKode.getText(),txtNama.getText(), txtTmptLahir.getText(),txtTglLahir.getText(), cmbJk.getSelectedItem().toString(), txtAlamat.getText(), cmbAgama.getSelectedItem().toString(), txtPekerjaan.getText(), txtTelp.getText()); ManajerAnggota ma = new ManajerAnggota(); int i = ma.UPDATE(a); if (i == 1) { JOptionPane.showMessageDialog(null, "Ubah Data Berhasil"); 33 tampilTabel(); kosong(); txtNama.requestFocus(); btTambah.setEnabled(true); btSimpan.setEnabled(false); btUbah.setEnabled(false); btHapus.setEnabled(false); } else { JOptionPane.showMessageDialog(null, "Data Gagal Diubah"); kosong(); txtNama.requestFocus(); btTambah.setEnabled(true); btSimpan.setEnabled(false); btUbah.setEnabled(false); btHapus.setEnabled(false); } } } 7) Double klik pada tombol Hapus private void btHapusActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if (txtKode.getText().isEmpty() || txtNama.getText().isEmpty() || txtTmptLahir.getText().isEmpty() || txtTglLahir.getText().isEmpty() || cmbJk.getSelectedItem().equals(null) || txtAlamat.getText().isEmpty() || cmbAgama.getSelectedItem().equals(null) || txtPekerjaan.getText().isEmpty() || txtTelp.getText().isEmpty()) { JOptionPane.showMessageDialog(null, "Pilih Data Yang Akan Dihapus!"); txtNama.requestFocus(); } else { if (JOptionPane.showConfirmDialog(null, "Apakah Anda Yakin?", "Peringatan", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { ManajerAnggota ma = new ManajerAnggota(); ma.DELETE(txtKode.getText()); JOptionPane.showMessageDialog(null, "Hapus Data Berhasil"); tampilTabel(); kosong(); txtKode.requestFocus(); btSimpan.setEnabled(false); btHapus.setEnabled(false); btUbah.setEnabled(false); 34 btBatal.setEnabled(false); btTambah.setEnabled(true); } else { JOptionPane.showMessageDialog(null, "Hapus Data Gagal"); kosong(); btSimpan.setEnabled(false); btHapus.setEnabled(false); btUbah.setEnabled(false); btBatal.setEnabled(false); btTambah.setEnabled(true); } } } 8) Double klik pada tombol Keluar private void btKeluarActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: dispose(); } 9) Membuat method mouse klik private void tblAnggotaMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: int baris = tblAnggota.getSelectedRow(); txtKode.setText(tblAnggota.getModel().getValueAt(baris, 0).toString()); txtNama.setText(tblAnggota.getModel().getValueAt(baris, 1).toString()); txtTmptLahir.setText(tblAnggota.getModel().getValueAt(baris, 2).toString()); txtTglLahir.setText(tblAnggota.getModel().getValueAt(baris, 3).toString()); cmbJk.setSelectedItem(tblAnggota.getModel().getValueAt(baris, 4).toString()); txtPekerjaan.setText(tblAnggota.getModel().getValueAt(baris, 7).toString()); txtAlamat.setText(tblAnggota.getModel().getValueAt(baris, 5).toString()); cmbAgama.setSelectedItem(tblAnggota.getModel().getValueAt(baris, 6).toString()); txtPekerjaan.setText(tblAnggota.getModel().getValueAt(baris, 7).toString()); txtTelp.setText(tblAnggota.getModel().getValueAt(baris, 8).toString()); } 35 b. Desain FormKategoriBuku.java Gambar 22. Contoh Desain FormKategoriBuku c. Desain FormBuku.java Gambar 23. Contoh Desain FormBuku 36 d. Desain FormPetugas.java Gambar 24. Contoh Desain Form Petugas e. Desain FormPeminjaman.java Gambar 25. Contoh Desain FormPeminjamanBuku 37 f. Desain FormPengembalian.java Gambar 26. Contoh Desain FormPengembalianBuku g. Desain FormMasuk.java Gambar 27. Contoh Desain FormLogin h. Desain FormMenuUtama.java Gambar 28. Contoh Desain Menu Utama 38 6. Package appperpustakaan.Interface.images Pada package ini berisi gambar yang nantinya akan digunakan sebagai backround pada menu utama. Untuk menambahkan backround berupa gambar caranya cukup mudah. Tambahkan jLabel pada pojok kiri atas interface yang akan ditambah backround. Lalu klik kanan pilih Edit Text, hapus teks pada jLabel. Klik kanan pada interface, pilih Set Layout Absolute Layout. Kemudian klik pada jLabel lalu pada Properties pilih icon. Pilih External Image lalu pilih gambar yang akan dijadikan backround. Terakhir klik tombol OK. Gambar 29. Cara menambahkan gambar ke dalam form 39 DAFTAR PUSTAKA Kurniawan, Agus. (2014). “Pemrograman Java Tingkat Lanjut”. Penerbit ANDI: Yogyakarta. 40