0% menganggap dokumen ini bermanfaat (0 suara)
218 tayangan128 halaman

Modul-Pemrograman Berbasis Objek-D3-BSI-September2018 PDF

Modul ini membahas tentang pembuatan project perpustakaan berbasis MVC menggunakan Java. Terdapat penjelasan tentang konsep MVC, pembuatan basis data perpustakaan menggunakan MySQL, dan langkah-langkah pembuatan project perpustakaan di NetBeans dengan membuat beberapa package.

Diunggah oleh

Rio Ristyanto
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
218 tayangan128 halaman

Modul-Pemrograman Berbasis Objek-D3-BSI-September2018 PDF

Modul ini membahas tentang pembuatan project perpustakaan berbasis MVC menggunakan Java. Terdapat penjelasan tentang konsep MVC, pembuatan basis data perpustakaan menggunakan MySQL, dan langkah-langkah pembuatan project perpustakaan di NetBeans dengan membuat beberapa package.

Diunggah oleh

Rio Ristyanto
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 128

PEMROGRAMAN

BERBASIS OBJEK
Model, View, Controller Structure Code

Modul Praktikum
Oleh
Tim Penyusun

Unit Pengembangan Akademik


Akademi Manajemen Informatika dan Komputer
Bina Sarana Informatika
TUGAS PROJECT
MATA KULIAH PEMROGRAMAN BERBASIS OBJEK

Ketentuan Tugas Project Mata Kuliah Pemrograman Berbasis Objek:

1. Dikerjakan dalam bentuk “Kelompok”, dengan jumlah anggota masing-masing


kelompok berjumlah 5-6 mahasiswa (dibuat fleksibel dan disesuaikan dengan jumlah
mahasiswa per kelas).
Keterangan : Mahasiswa dapat mengusulkan 1 Kelompok beranggotakan 3 mahasiswa,
sebagai langkah tepat persiapan Tugas Akhir dengan memilih outline “Proyek Sistem
Informasi”.
2. Buat sebuah “Project Pemrograman Java Berbasis MVC”, untuk Tema Project
mahasiswa dapat menentukan sendiri atau ditentukan oleh Bapak/Ibu Pengajar, dengan
syarat “Tidak ada tema yang sama dalam 1 kelas yang sama, dan tidak sama dengan
tema studi kasus dalam Modul Praktikum ini”.
3. Contoh Tugas Project Java Berbasis MVC, akan dijabarkan dalam modul praktikum
ini, mulai dari persiapan pembuatan kelas-kelas dan interface-interface pada Modul,
View (Form Master dan Form Transaksi), hingga Controller.
4. Bentuk Tugas Project :
a. Program Java Berbasis MVC.
b. Menciptakan Video Tutorial cara Pembuatan Program dari project yang dibuat.
(Harus dipromosikan dan Dipublish diberbagai media sosial, seperti Youtube,
Instagram, dll)
c. Video Tutorial yang dibuat wajib memunculkan masing-masing anggota sedang
menyampaikan materi, sebagai contoh https://youtu.be/0KyvVFPifrw
d. Untuk Poin 4b dan 4c bisa dibuat menjadi beberapa episode atau beberapa file
video disesuaikan dengan tema bahasan video yang dibahas.
e. Masing-masing kelompok wajib mempromosikan kepada mahasiswa-
mahasiswa BSI bahkan masyarakat luas untuk belajar mandiri melalui video
yang sudah dipublish, untuk (Like, Comment, Subscribe).
5. Contoh Software yang dapat digunakan untuk pembuatan Video Tutorial antara lain,
Camtasia, Youtube Movie Maker, Windows Movie Maker, dll.

Modul Praktikum Pemrograman Berbasis Objek 1


6. Pada Pertemuan ke-13, 14, dan 15 masing-masing kelompok wajib demo program
sekaligus pengujian aplikasi (black box testing). Tabel black box testing terlampir.

Modul Praktikum Pemrograman Berbasis Objek 2


BAB I

KONSEP MVC

Sebelum dibahas lebih lanjut mengenai praktikum pemrograman berbasis objek pada

modul praktikum ini. Penyusun akan menjabarkan terlebih dahulu batasan spesifikasi

hardware yang dibutuhkan dalam mempelajari bahasan dalam modul praktikum ini. Untuk

editor penulisan kode program disarankan menggunakan editor Netbeans IDE 8.1 atau versi

yang tidak jauh dari itu. Sementara untuk basis data (database) yang digunakan adalah

MySQL, disarankan untuk kemudahan pembelajaran gunakan basis data MySQL yang telah

include dengan web server. Pembuatan basis data dalam modul praktikum ini menggunakan

web server Xampp versi 5.6.33 dengan PHP extension yang telah support dengan mysqli.

 Konsep Dasar MVC

Pemrograman berbasis objek sangat identik dengan bahasa pemrograman java yang

mudah dipelajari. Konsep Model View Controller atau biasa dikenal dengan istilah MVC

merupakan teknik pengembangan penulisan kode program yang lebih terstruktur dengan baik.

Pada dasarnya, konsep mvc khususnya dalam pemrograman java adalah memisahkan kode-

kode program kedalam kelas-kelas yang terpisah berdasarkan fungsinya masing-masing dan

terbagi menjadi tiga bagian utama yaitu model, view, controller.

Keunggulan dari pemrograman berbasis MVC yaitu, apabila telah dibangun dengan

dasar pemrograman berbasis desktop, dan suatu ketika ingin diubah menjadi berbasis website.

Maka, programmer tidak perlu merubah total struktur kode pada progam, hanya bagian

interfacenya dan yang berhubungan dengan control program saja. Hal ini sesuai dengan slogan

java, “write once, run anywhere”.

Berikut penjabaran pada masing-masing bagian konsep MVC, yaitu:

Modul Praktikum Pemrograman Berbasis Objek 3


1. Model, pada bagian ini berisi kelas-kelas atau interface-interface yang

mempresentasikan data.

2. View, pada bagian ini berisi kelas-kelas yang berhubungan dengan interface program

yang merupakan representasi dari model.

3. Controller, pada bagian ini berisi kelas-kelas yang berfungsi untuk pengaturan atau

sinkronisasi data antara bagian view dengan model.

 Pembuatan Database Perpustakaan

Pada modul praktikum ini membahas mengenai satu “project sederhana mengenai

perpustakaan”. Berikut penjabaran basis data yang dibutuhkan dan dibuat menggunakan

phpMyAdmin dari Xampp:

1. Buat basis data dengan nama “perpusmvc”, lalu didalamnya buat 4 buah tabel yaitu

admin, anggota, buku, peminjaman.

2. Tabel “admin”

Field Tipe Panjang Keterangan

id_admin Int 3 Primary Key,


AUTO_INCREMENT

username Varchar 20

password Varchar 20

3. Tabel “anggota”

Field Tipe Panjang Keterangan

id_anggota char 6 Primary Key

nama_anggota Varchar 35

Modul Praktikum Pemrograman Berbasis Objek 4


alamat Varchar 75

no_telp Varchar 18

email Varchar 25

tgl_daftar Date -

4. Tabel “buku”

Field Tipe Panjang Keterangan

kode_buku char 10 Primary Key

judul_buku Varchar 45

pengarang Varchar 35

penerbit Varchar 45

tgl_entry_perpus Date -

jml_buku Int 11

jml_diperpus Int 11

jml_dipinjam Int 11

Statistik Int 11

5. Tabel “peminjaman”

Field Tipe Panjang Keterangan

id_pinjam Int 11 Primary Key,


AUTO_INCREMENT

id_anggota Char 6

Modul Praktikum Pemrograman Berbasis Objek 5


kode_buku Char 10

tgl_pinjam Date -

tgl_batas_kembali Date -

tgl_kembali Date -

denda Int 11

Setelah membuat tabel pada basis data “perpusmvc” isilah 1 buh record untuk tabel

admin, yaitu:

Field Data Isian

username admin

password admin

 Pembuatan Project Perpustakaan

Setelah membuat basis data, lalu buatlah project baru pada editor Netbeans, dengan

langkah sebagai berikut:

1. Pilih Menu File – New Project

2. Pilih Kategori Java dan Projects Java Application

Modul Praktikum Pemrograman Berbasis Objek 6


3. Lalu klik Next dan beri nama pada Project Name : perpus dan tentukan sendiri

Project Location : contoh D:\NIM.

4. Jika telah selesai tekan tombol Finish.

5. Setelah project baru selesai dibuat, maka akan tampil pada tampilan jendela Project.

(note: jika jendela Projects tidak muncul pada Netbeans, munculkan dengan

memilih Menu Bar Window – Projects).

6. Langkah selanjutnya adalah membuat package pada projek perpus. Klik Kanan

folder Source Packages project perpus, lalu pilih New – Java Package. Beri nama

“perpus”.

Modul Praktikum Pemrograman Berbasis Objek 7


7. Buat 7 package lainnya dengan cara yang sama dengan nama “perpus.entity”,

“perpus.error”, “perpus.service”, “perpus.service.impl”, “perpus.koneksi”,

“perpus.model.event”, “perpus.model”.

(Note: Package merupakan suatu folder atau direktori yang berfungsi menampung

kelas-kelas yang memiliki fungsi yang sama).

8. Berikut tampilan dari project perpus dengan package-package yang telah dibuat:

Modul Praktikum Pemrograman Berbasis Objek 8


BAB II

ENTITY DAN EXCEPTION

Penulisan kode program pada modul praktikum ini dibagi-bagi kedalam package-

package yang telah dibuat pada bab sebelumnya. Pembahasan kode program dengan konsep

MVC akan dijabarkan dalam projek perpus ini, dibahas sesuai urutan awal kode program yang

harus dibuat.

 Package perpus.entity

Package perpus.entity ini berfungsi sebagai representasi dari masing-masing tabel pada

basis data yang telah dibuat dan atribut yang ada didalamnya.

Buat kelas java pada package perpus.entity dengan cara klik kanan package

perpus.entity, lalu pilih New – Java Class. Buatlah 4 buah kelas masing-masing diberi nama

“Admin”, “Anggota”, “Buku”, “Peminjaman”.

Berikut tampilan pada package perpus.entity :

Modul Praktikum Pemrograman Berbasis Objek 9


Kode Program pada Admin.java:

package perpus.entity;

public class Admin {


private int id_admin;
private String username, password;

public Admin() {
}

public Admin(int id_admin, String username, String password) {


this.id_admin = id_admin;
this.username = username;
this.password = password;
}

public int getId_admin() {


return id_admin;
}
public void setId_admin(int id_admin) {
this.id_admin = id_admin;
}

public String getUsername() {


return username;
}
public void setUsername(String username) {
this.username = username;
}

public String getPassword() {


return password;
}
public void setPassword(String password) {
this.password = password;
}

KERJAKAN TUGAS MANDIRI :

Lihat struktur Atribut dan tipe data dari masing-masing tabel pada basis data perpusmvc. Lalu
Buat kode program untuk “Anggota.java”, “Buku.java”, “Peminjaman.java”. Contoh
pembuatan kode program Lihat Admin.java, hanya tinggal merubah deklarasi variable yang
disesuaikan dengan tabel pada basis data, kemudiaN buat method Getter dan Setter.
(Note untuk atribut dengan tipe data “Date”, ketikan import java.util.Date;

Modul Praktikum Pemrograman Berbasis Objek 10


 Package perpus.error

Package perpus.error ini berisi kelas-kelas yang berisi exception sebagai dokumentasi

peringatan apabila ketika program berjalan atau sedang running dan muncul bug atau kesalah-

kesalahan.

Buat kelas java pada package perpus.error dengan cara klik kanan package

perpus.error, lalu pilih New – Java Class. Buatlah 4 buah kelas masing-masing diberi nama

“AdminException”, “AnggotaException”, “BukuException”, “PeminjamanException”.

Berikut tampilan pada package perpus.error :

Kode Program pada AdminException.java :

AdminException.java:
package perpus.error;

public class AdminException extends Exception{


/**
* Creates a new instance of
* <code>AdminException</code> without detail message.
*/
public AdminException() {
}

/**

Modul Praktikum Pemrograman Berbasis Objek 11


* Constructs an instance of
* <code>AdminException</code> with the specified detail message.
*
* @param msg the detail message.
*/
public AdminException(String msg) {
super(msg);
}
}

KERJAKAN TUGAS MANDIRI :

Buat kode program untuk file exception “AnggotaException”, “BukuException”,

“PeminjamanException” dengan ikuti contoh AdminException

 Package perpus.service

Package perpus.service ini berfungsi sebagai tempat deklarasi operasi-operasi insert,

update, delete dan query ke basis data.

File-file pada package ini berupa file “interface”, artinya serupa dengan kelas namun

method yang ada didalamnya adalah method abstract yang hanya dideklarasikan tidak ditulis

secara utuh. Langkah pengerjaannya yaitu:

1. Buat interface java pada package perpus.service dengan cara klik kanan package

perpus.service, lalu pilih New – Java Interface. Buatlah 4 buah interface masing-

masing diberi nama “AdminDao”, “AnggotaDao”, “BukuDao”, “PeminjamanDao”.

Modul Praktikum Pemrograman Berbasis Objek 12


2. Berikut tampilan pada package perpus.service :

Kode Program interface pada package.service :

1. AdminDao.java :
package perpus.service;

import perpus.entity.Admin;
import perpus.error.AdminException;

public interface AdminDao {


public int selectCount(Admin admin) throws AdminException;
public Admin getAdmin(int id_admin) throws AdminException;
}

2. AnggotaDao.java :
package perpus.service;

import perpus.entity.Anggota;
import perpus.error.AnggotaException;
import java.util.List;

public interface AnggotaDao {


public void insertAnggota(Anggota anggota) throws AnggotaException;
public void updateAnggota(Anggota anggota) throws AnggotaException;
public void deleteAnggota(String id_anggota) throws AnggotaException;
public Anggota getAnggota(String id_anggota) throws AnggotaException;
public int selectCount(Anggota anggota) throws AnggotaException;
public List<Anggota> selectAllAnggota() throws AnggotaException;

Modul Praktikum Pemrograman Berbasis Objek 13


}

3. BukuDao.java :
package perpus.service;

import perpus.entity.Buku;
import perpus.error.BukuException;
import java.util.List;

public interface BukuDao {


public void insertBuku(Buku buku) throws BukuException;
public void updateBuku(Buku buku) throws BukuException;
public void updatePinjamBuku(String kode_buku) throws BukuException;
public void updatePengembalian(String kode_buku) throws BukuException;
public void deleteBuku(String kode_buku) throws BukuException;
public Buku getBuku(String kode_buku) throws BukuException;
public List<Buku> top10BukuFavorit() throws BukuException;
public List<Buku> top10BukuBaru() throws BukuException;
public List<Buku> selectAllBuku() throws BukuException;
}

4. PeminjamanDao.java :
package perpus.service;
import perpus.entity.Buku;
import perpus.entity.Peminjaman;
import perpus.error.PeminjamanException;
import java.util.List;

public interface PeminjamanDao {


public void insertPeminjaman(Peminjaman peminjaman) throws
PeminjamanException;
public void updatePeminjaman(Peminjaman peminjaman) throws
PeminjamanException;
public void updatePengembalian(Peminjaman peminjaman) throws
PeminjamanException;
public void deletePeminjaman(int id_peminjaman) throws PeminjamanException;
public List<Peminjaman> getPeminjaman(String id_member) throws
PeminjamanException;
}

Modul Praktikum Pemrograman Berbasis Objek 14


BAB III

DATA ACCESS OBJECT

Untuk melanjutkan pembahasan pada bab ini, maka harus sudah dibuat terlebih dahulu

“TUGAS MANDIRI BAB II”, yaitu file pada package perpus.entitiy (Anggota.java,

Buku.java, Peminjaman.java) dan package perpus.error (AnggotaException, BukuException,

PeminjamanException).

 Package perpus.service.impl

Package perpus.service.impl ini berfungsi sebagai penjabaran operasi-operasi Data

Access Object (DAO) seperti insert, update, delete dan query ke basis data. Dalam

pemrograman berbasis MVC, struktur Data Access Object dibuat terpisah dari lapisan yang

lain, sehingga kode program pada aplikasi menjadi lebih terstruktur. Maka apabila ada

kesalahan program pada suatu bagian yang berhubungan dengan operasi akses basis data, bisa

langsung tertuju pada package ini tanpa mengganggu interface view dari user. Kelas-kelas pada

package ini mengimplent dari interface perpus.service yang masih belum ada isi pada

deklarasinya.

Buat kelas java pada package perpus.service.impl dengan cara klik kanan package

perpus.service.impl, lalu pilih New – Java Class. Buatlah 4 buah kelas masing-masing diberi

nama “AdminDaoImpl”, “AnggotaDaoImpl”, “BukuDaoImpl”, “PeminjamanDaoImpl”.

Berikut tampilan pada package perpus.service.impl :

Modul Praktikum Pemrograman Berbasis Objek 15


Kode Program pada package perpus.service.impl :

1. AdminDaoImpl.java :
package perpus.service.impl;
import perpus.entity.Admin;
import perpus.error.AdminException;
import perpus.service.AdminDao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class AdminDaoImpl implements AdminDao{


private Connection connection;

private final String selectCount = "SELECT COUNT(*) FROM admin WHERE


username=? AND password=?";

private final String updateAdmin = "UPDATE admin SET password=? WHERE


username=?";

private final String getById = "SELECT * FROM admin WHERE id_admin=?";

public AdminDaoImpl(Connection connection) {


this.connection = connection;
}

@Override
public int selectCount(Admin admin) throws AdminException {
PreparedStatement statement = null;
ResultSet resultSet = null;
int rowCount = 0;
try {
connection.setAutoCommit(false);
String selectCount = null;
statement = connection.prepareStatement(selectCount);
statement.setString(1, admin.getUsername());
statement.setString(2, admin.getPassword());
resultSet = statement.executeQuery();
connection.commit();
while (resultSet.next()) {
rowCount = resultSet.getInt(1);
}
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AdminException(exception.getMessage());
} finally {

Modul Praktikum Pemrograman Berbasis Objek 16


try {
connection.setAutoCommit(true);
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
return rowCount;
}

@Override
public Admin getAdmin(int id_admin) throws AdminException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(getById);
statement.setInt(1, id_admin);

ResultSet result = statement.executeQuery();


Admin admin = null;
if (result.next()) {
admin = new Admin();
admin.setUsername(result.getString("username"));
admin.setPassword(result.getString("password"));
} else {
throw new AdminException("Data Admin Tidak Ada!!!");
}
connection.commit();
return admin;
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AdminException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();

Modul Praktikum Pemrograman Berbasis Objek 17


} catch (SQLException exception) {
}
}
}
}
}

2. AnggotaDaoImpl.java :
package perpus.service.impl;
import perpus.entity.Anggota;
import perpus.error.AnggotaException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import perpus.service.AnggotaDao;
public class AnggotaDaoImpl implements AnggotaDao {
private final Connection connection;

private final String insertAnggota = "INSERT INTO anggota"


+ "(id_anggota, nama_anggota, alamat, no_telp, email, tgl_daftar)"
+ "VALUES (?,?,?,?,?,?)";

private final String updateAnggota = "UPDATE anggota SET nama_anggota=?,


alamat=?, no_telp=?, email=? WHERE id_anggota=?";

private final String deleteAnggota = "DELETE FROM anggota WHERE


id_anggota=?";

private final String getById = "SELECT * FROM anggota WHERE id_anggota=?";

private final String selectAll = "SELECT * FROM anggota";

private final String selectCount = "SELECT COUNT(*) FROM anggota WHERE


id_anggota = ?";

public AnggotaDaoImpl(Connection connection) {


this.connection = connection;
}

public void insertAnggota(Anggota anggota) throws AnggotaException {


PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(insertAnggota);
statement.setString(1, anggota.getId_anggota());
statement.setString(2, anggota.getNama_anggota());
statement.setString(3, anggota.getAlamat());
statement.setString(4, anggota.getNo_telp());
statement.setString(5, anggota.getEmail());

Modul Praktikum Pemrograman Berbasis Objek 18


statement.setDate(6, new Date(anggota.getTgl_daftar().getTime()));
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public void updateAnggota(Anggota anggota) throws AnggotaException {


PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updateAnggota);
statement.setString(1, anggota.getNama_anggota());
statement.setString(2, anggota.getAlamat());
statement.setString(3, anggota.getNo_telp());
statement.setString(4, anggota.getEmail());
statement.setString(5, anggota.getId_anggota());
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {

Modul Praktikum Pemrograman Berbasis Objek 19


statement.close();
} catch (SQLException exception) {
}
}
}
}

public void deleteAnggota(String id_anggota) throws AnggotaException {


PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(deleteAnggota);
statement.setString(1, id_anggota);
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
if (statement != null) {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public Anggota getAnggota(String id_anggota) throws AnggotaException {


PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(getById);
statement.setString(1, id_anggota);

ResultSet result = statement.executeQuery();


Anggota anggota = null;
if (result.next()) {
anggota = new Anggota();
anggota.setNama_anggota(result.getString("nama_anggota"));
anggota.setAlamat(result.getString("alamat"));
anggota.setNo_telp(result.getString("no_telp"));

Modul Praktikum Pemrograman Berbasis Objek 20


anggota.setEmail(result.getString("email"));
} else {
throw new AnggotaException("Data Anggota Tidak Ada!!!");
}
connection.commit();
return anggota;
} catch(SQLException exception) {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public List<Anggota> selectAllAnggota() throws AnggotaException {


Statement statement = null;
List<Anggota> list = new ArrayList<Anggota>();
try {
connection.setAutoCommit(false);
statement = connection.createStatement();

ResultSet result = statement.executeQuery(selectAll);

while(result.next()){
Anggota anggota = new Anggota();
anggota.setId_anggota(result.getString("id_anggota"));
anggota.setNama_anggota(result.getString("nama_anggota"));
anggota.setAlamat(result.getString("alamat"));
anggota.setNo_telp(result.getString("no_telp"));
anggota.setEmail(result.getString("email"));
anggota.setTgl_daftar(result.getDate("tgl_daftar"));

list.add(anggota);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {

Modul Praktikum Pemrograman Berbasis Objek 21


connection.setAutoCommit(true);
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public int selectCount(Anggota anggota) throws AnggotaException {


PreparedStatement statement = null;
ResultSet resultSet = null;
int rowCount = 0;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(selectCount);
statement.setString(1, anggota.getId_anggota());
resultSet = statement.executeQuery();
connection.commit();
while (resultSet.next()) {
rowCount = resultSet.getInt(1);
}
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}

Modul Praktikum Pemrograman Berbasis Objek 22


}
}
return rowCount;
}
}

3. BukuDaoImpl.java :
package perpus.service.impl;
import perpus.entity.Buku;
import perpus.error.BukuException;
import perpus.service.BukuDao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class BukuDaoImpl implements BukuDao {


private Connection connection;

private final String insertBuku = "INSERT INTO buku"


+ "(kode_buku, judul_buku, pengarang, penerbit, tgl_entry_perpus, jml_buku,
jml_diperpus, jml_dipinjam, statistik)"
+ "VALUES (?,?,?,?,?,?,?,?,?)";

private final String updateBuku = "UPDATE buku SET judul_buku=?, pengarang=?,


penerbit=?, jml_buku=?, jml_diperpus=?, jml_dipinjam=? WHERE kode_buku=?";

private final String updatePinjamBuku = "UPDATE buku SET


jml_diperpus=jml_diperpus-1, jml_dipinjam=jml_dipinjam+1, statistik=statistik+1
WHERE kode_buku=?";

private final String updatePengembalianBuku = "UPDATE buku SET


jml_diperpus=jml_diperpus+1, jml_dipinjam=jml_dipinjam-1 WHERE kode_buku=?";

private final String deleteBuku = "DELETE FROM buku WHERE kode_buku=?";

private final String top10Buku = "SELECT judul_buku, statistik FROM buku ORDER
BY statistik DESC limit 10";

private final String top10BukuBaru = "SELECT judul_buku FROM buku ORDER BY


tgl_entry_perpus DESC limit 10";

private final String getById = "SELECT * FROM buku WHERE kode_buku=?";

private final String selectAll = "SELECT * FROM buku";

public BukuDaoImpl(Connection connection) {


this.connection = connection;
}

Modul Praktikum Pemrograman Berbasis Objek 23


@Override
public void insertBuku(Buku buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(insertBuku);
statement.setString(1, buku.getKode_buku());
statement.setString(2, buku.getJudul_buku());
statement.setString(3, buku.getPengarang());
statement.setString(4, buku.getPenerbit());
statement.setDate(5, new Date(buku.getTgl_entry_perpus().getTime()));
statement.setInt(6, buku.getJml_buku());
statement.setInt(7, buku.getJml_diperpus());
statement.setInt(8, buku.getJml_dipinjam());
statement.setInt(9, buku.getStatistik());
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

@Override
public void updateBuku(Buku buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updateBuku);
statement.setString(1, buku.getJudul_buku());
statement.setString(2, buku.getPengarang());
statement.setString(3, buku.getPenerbit());
statement.setInt(4, buku.getJml_buku());
statement.setInt(5, buku.getJml_diperpus());
statement.setInt(6, buku.getJml_dipinjam());

Modul Praktikum Pemrograman Berbasis Objek 24


statement.setString(7, buku.getKode_buku());
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

@Override
public void updatePinjamBuku(String kode_buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updatePinjamBuku);
statement.setString(1, kode_buku);
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}

Modul Praktikum Pemrograman Berbasis Objek 25


}
}
}

@Override
public void updatePengembalian(String kode_buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updatePengembalianBuku);
statement.setString(1, kode_buku);
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

@Override
public void deleteBuku(String kode_buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(deleteBuku);
statement.setString(1, kode_buku);
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());

Modul Praktikum Pemrograman Berbasis Objek 26


} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

@Override
public Buku getBuku(String kode_buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(getById);
statement.setString(1, kode_buku);

ResultSet result = statement.executeQuery();


Buku buku = null;
if (result.next()) {
buku = new Buku();
buku.setJudul_buku(result.getString("judul_buku"));
buku.setPengarang(result.getString("pengarang"));
buku.setPenerbit(result.getString("penerbit"));
buku.setTgl_entry_perpus(result.getDate("tgl_entry_perpus"));
buku.setJml_buku(result.getInt("jml_buku"));
buku.setJml_diperpus(result.getInt("jml_diperpus"));
buku.setJml_dipinjam(result.getInt("jml_dipinjam"));
buku.setStatistik(result.getInt("statistik"));
} else {
throw new BukuException("Data Buku Tidak Ada!!!");
}
connection.commit();
return buku;
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}

Modul Praktikum Pemrograman Berbasis Objek 27


if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public List<Buku> top10Buku() throws BukuException {


Statement statement = null;
List<Buku> list = new ArrayList<Buku>();
try {
connection.setAutoCommit(false);
statement = connection.createStatement();

ResultSet result = statement.executeQuery(top10Buku);

while(result.next()){
Buku buku = new Buku();
buku.setJudul_buku(result.getString("judul_buku"));
buku.setStatistik(result.getInt("statistik"));
list.add(buku);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

@Override
public List<Buku> top10BukuBaru() throws BukuException {
Statement statement = null;
List<Buku> list = new ArrayList<Buku>();

Modul Praktikum Pemrograman Berbasis Objek 28


try {
connection.setAutoCommit(false);
statement = connection.createStatement();

ResultSet result = statement.executeQuery(top10BukuBaru);

while(result.next()){
Buku buku = new Buku();
buku.setJudul_buku(result.getString("judul_buku"));
list.add(buku);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

@Override
public List<Buku> selectAllBuku() throws BukuException {
Statement statement = null;
List<Buku> list = new ArrayList<Buku>();
try {
connection.setAutoCommit(false);
statement = connection.createStatement();

ResultSet result = statement.executeQuery(selectAll);

while(result.next()){
Buku buku = new Buku();
buku.setKode_buku(result.getString("kode_buku"));
buku.setJudul_buku(result.getString("judul_buku"));
buku.setPengarang(result.getString("pengarang"));
buku.setPenerbit(result.getString("penerbit"));
buku.setTgl_entry_perpus(result.getDate("tgl_entry_perpus"));

Modul Praktikum Pemrograman Berbasis Objek 29


buku.setJml_buku(result.getInt("jml_buku"));
buku.setJml_diperpus(result.getInt("jml_diperpus"));
buku.setJml_dipinjam(result.getInt("jml_dipinjam"));
buku.setStatistik(result.getInt("statistik"));
list.add(buku);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

@Override
public List<Buku> top10BukuFavorit() throws BukuException {
Statement statement = null;
List<Buku> list = new ArrayList<Buku>();
try {
connection.setAutoCommit(false);
statement = connection.createStatement();

ResultSet result = statement.executeQuery(top10Buku);

while(result.next()){
Buku buku = new Buku();
buku.setJudul_buku(result.getString("judul_buku"));
buku.setStatistik(result.getInt("statistik"));
list.add(buku);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {

Modul Praktikum Pemrograman Berbasis Objek 30


}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
}

4. PeminjamanDaoImpl.java :
package perpus.service.impl;
import perpus.entity.Peminjaman;
import perpus.error.PeminjamanException;
import perpus.service.PeminjamanDao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class PeminjamanDaoImpl implements PeminjamanDao{


private Connection connection;

private final String insertPeminjaman = "INSERT INTO peminjaman"


+ "(id_anggota, kode_buku, tgl_pinjam, tgl_batas_kembali, denda)"
+ "VALUES (?,?,?,?,?)";

private final String updatePeminjaman = "UPDATE peminjaman SET id_anggota=?,


kode_buku=?, tgl_kembali=?, denda=? WHERE id_pinjam=?";

private final String updatePengembalian = "UPDATE peminjaman SET tgl_kembali=?,


denda=? WHERE id_pinjam=?";

private final String deletePeminjaman = "DELETE FROM peminjaman WHERE


id_pinjam=?";

private final String getById_anggota = "SELECT * FROM peminjaman WHERE


id_anggota=? AND tgl_kembali IS NULL";

private final String chartPeminjaman = "SELECT date(tgl_pinjam) AS tgl_pinjam,


COUNT(id_pinjam) AS transaksi, SUM(denda) AS denda FROM peminjaman GROUP
BY date(tgl_pinjam) LIMIT 30";

private final String selectAll = "SELECT * FROM peminjaman";

Modul Praktikum Pemrograman Berbasis Objek 31


public PeminjamanDaoImpl(Connection connection) {
this.connection = connection;
}

public void insertPeminjaman(Peminjaman peminjaman) throws PeminjamanException


{
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(insertPeminjaman);
statement.setString(1, peminjaman.getId_anggota());
statement.setString(2, peminjaman.getKode_buku());
statement.setDate(3, new Date(peminjaman.getTgl_pinjam().getTime()));
statement.setDate(4, new Date(peminjaman.getTgl_batas_kembali().getTime()));
statement.setInt(5, peminjaman.getDenda());

statement.executeUpdate();
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public void updatePeminjaman(Peminjaman peminjaman) throws


PeminjamanException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updatePeminjaman);
statement.setString(1, peminjaman.getId_anggota());
statement.setString(2, peminjaman.getKode_buku());
statement.setDate(3, new Date(peminjaman.getTgl_kembali().getTime()));
statement.setInt(4, peminjaman.getDenda());
statement.setInt(5, peminjaman.getId_pinjam());

Modul Praktikum Pemrograman Berbasis Objek 32


statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public void updatePengembalian(Peminjaman peminjaman) throws


PeminjamanException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updatePengembalian);
statement.setDate(1, new Date(peminjaman.getTgl_kembali().getTime()));
statement.setInt(2, peminjaman.getDenda());
statement.setInt(3, peminjaman.getId_pinjam());
statement.executeUpdate();

connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {

Modul Praktikum Pemrograman Berbasis Objek 33


}
}
}
}

public void deletePeminjaman(int id_pinjam) throws PeminjamanException {


PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(deletePeminjaman);
statement.setInt(1, id_pinjam);
statement.executeUpdate();
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public List<Peminjaman> getPeminjaman(String id_anggota) throws


PeminjamanException {
PreparedStatement statement = null;
List<Peminjaman> list = new ArrayList<Peminjaman>();
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(getById_anggota);
statement.setString(1, id_anggota);

ResultSet result = statement.executeQuery();


while(result.next()) {
Peminjaman peminjaman = new Peminjaman();
peminjaman.setId_pinjam(result.getInt("id_pinjam"));
peminjaman.setId_anggota(result.getString("id_anggota"));
peminjaman.setKode_buku(result.getString("kode_buku"));
peminjaman.setTgl_pinjam(result.getDate("tgl_pinjam"));
peminjaman.setTgl_batas_kembali(result.getDate("tgl_batas_kembali"));

Modul Praktikum Pemrograman Berbasis Objek 34


peminjaman.setTgl_kembali(result.getDate("tgl_kembali"));
peminjaman.setDenda(result.getInt("denda"));
list.add(peminjaman);
}
connection.commit();
return list;
} catch(SQLException exception) {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
} finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}

public List<Peminjaman> selectAllPeminjaman() throws PeminjamanException {


Statement statement = null;
List<Peminjaman> list = new ArrayList<Peminjaman>();
try {
connection.setAutoCommit(false);
statement = connection.createStatement();

ResultSet result = statement.executeQuery(selectAll);

while(result.next()){
Peminjaman peminjaman = new Peminjaman();
peminjaman.setId_pinjam(result.getInt("id_pinjam"));
peminjaman.setId_anggota(result.getString("id_anggota"));
peminjaman.setKode_buku(result.getString("kode_buku"));
peminjaman.setTgl_pinjam(result.getDate("tgl_pinjam"));
peminjaman.setTgl_batas_kembali(result.getDate("tgl_batas_kembali"));
peminjaman.setTgl_kembali(result.getDate("tgl_kembali"));
peminjaman.setDenda(result.getInt("denda"));
list.add(peminjaman);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());

Modul Praktikum Pemrograman Berbasis Objek 35


} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
}

 Package perpus.koneksi

Package perpus.koneksi ini berfungsi sebagai koneksi ke basis data yang telah dibuat.

Sebelum membuat file-file java koneksi, import terlebih dahulu library “MySQL JDBC

Driver”. Cara import library “MySQL JDBC Driver”:

- Klik Kanan Folder Libraries pada project perpus, lalu pilih Add Library. Jika belum

ada pada daftar library, klik tombol import.

Modul Praktikum Pemrograman Berbasis Objek 36


Buat kelas java pada package perpus.koneksi dengan cara klik kanan package

perpus.koneksi, lalu pilih New – Java Class. Buatlah 4 buah kelas masing-masing diberi nama

“AdminKoneksi”, “AnggotaKoneksi”, “BukuKoneksi”, “PeminjamanKoneksi”.

Berikut tampilan pada package perpus.koneksi :

Kode Program pada package perpus.koneksi :

1. AdminKoneksi.java :
package perpus.koneksi;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import perpus.service.AdminDao;
import perpus.service.impl.AdminDaoImpl;
import java.sql.Connection;
import java.sql.SQLException;

public class AdminKoneksi {


private static Connection connection;
private static AdminDao adminDao;

public static Connection getConnection() throws SQLException {


if (connection == null) {
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/perpusmvc");
dataSource.setUser("root");
dataSource.setPassword("");
connection = dataSource.getConnection();
}
return connection;
}

public static AdminDao getAdminDao() throws SQLException {


if (adminDao == null) {
adminDao = new AdminDaoImpl(getConnection());
}
return adminDao;
}
}

Modul Praktikum Pemrograman Berbasis Objek 37


KERJAKAN TUGAS MANDIRI BAB III :

Buat kode program untuk “AnggotaKoneksi.java”, “BukuKoneksi.java”,


“PeminjamanKoneksi.java”. Contoh pembuatan kode program Lihat AdminKoneksi.java.

Modul Praktikum Pemrograman Berbasis Objek 38


BAB IV
MODEL

 Package perpus.model

Pada pemrograman MVC Package perpus.model ini berfungsi sebagai representasi data

object dari entitas yang ada. Langkah-langkah pembuatannya yaitu :

Buat kelas java pada package perpus.model dengan cara klik kanan package

perpus.model, lalu pilih New – Java Class. Buatlah 4 buah java kelas masing-masing diberi

nama “AdminModel”, “AnggotaModel”, “BukuModel”, “PeminjamanModel” ,

“TabelAnggotaModel”, “TabelBukuModel”, “TabelPeminjamanModel” .

 Berikut tampilan pada package perpus.model :

Kode Program pada package perpus.model :

1. AdminModel.java :
package perpus.model;

public class AdminModel {


private int id_admin;
private String username, password;

public int getId_admin() {


return id_admin;
}
public void setId_admin(int id_admin) {
this.id_admin = id_admin;
}

public String getUsername() {


return username;

Modul Praktikum Pemrograman Berbasis Objek 39


}
public void setUsername(String Username) {
this.username = username;
}

public String getPassword() {


return password;
}
public void setPassword(String password) {
this.password = password;
}
}

2. AnggotaModel.java :
package perpus.model;
import perpus.koneksi.AnggotaKoneksi;
import perpus.entity.Anggota;
import perpus.error.AnggotaException;
import perpus.model.event.AnggotaListener;
import java.sql.SQLException;
import java.util.Date;
import perpus.service.AnggotaDao;

public class AnggotaModel {


private String id_anggota, nama_anggota, alamat, no_telp, email;
private Date tgl_daftar;

private AnggotaListener listener;

public AnggotaListener getListener() {


return listener;
}
public void setListener(AnggotaListener listener) {
this.listener = listener;
}

public String getId_anggota() {


return id_anggota;
}
public void setId_anggota(String id_anggota) {
this.id_anggota = id_anggota;
fireOnChange();
}

public String getNama_anggota() {


return nama_anggota;
}
public void setNama_anggota(String nama_anggota) {
this.nama_anggota = nama_anggota;
fireOnChange();

Modul Praktikum Pemrograman Berbasis Objek 40


}

public String getAlamat() {


return alamat;
}
public void setAlamat(String alamat) {
this.alamat = alamat;
fireOnChange();
}

public String getEmail() {


return email;
}
public void setEmail(String email) {
this.email = email;
fireOnChange();
}

public String getNo_telp() {


return no_telp;
}
public void setNo_telp(String no_telp) {
this.no_telp = no_telp;
fireOnChange();
}

public Date getTgl_daftar() {


return tgl_daftar;
}
public void setTgl_daftar(Date tgl_daftar) {
this.tgl_daftar = tgl_daftar;
fireOnChange();
}

protected void fireOnChange() {


if (listener != null) {
listener.onChange(this);
}
}

protected void fireOnInsert(Anggota anggota) {


if (listener != null) {
listener.onInsert(anggota);
}
}

protected void fireOnUpdate(Anggota anggota) {


if (listener != null) {
listener.onUpdate(anggota);
}

Modul Praktikum Pemrograman Berbasis Objek 41


}

protected void fireOnDelete() {


if (listener != null) {
listener.onDelete();
}
}

public void resetAnggota() {


setId_anggota("");
setNama_anggota("");
setAlamat("");
setNo_telp("");
setEmail("");
setTgl_daftar(new Date());
}

public void insertAnggota() throws SQLException, AnggotaException {


AnggotaDao dao = AnggotaKoneksi.getAnggotaDao();

Anggota anggota = new Anggota();


anggota.setId_anggota(id_anggota);
anggota.setNama_anggota(nama_anggota);
anggota.setAlamat(alamat);
anggota.setNo_telp(no_telp);
anggota.setEmail(email);
anggota.setTgl_daftar(tgl_daftar);

dao.insertAnggota(anggota);

fireOnInsert(anggota);
}

public void updateAnggota() throws SQLException, AnggotaException {


AnggotaDao dao = AnggotaKoneksi.getAnggotaDao();

Anggota anggota = new Anggota();


anggota.setId_anggota(id_anggota);
anggota.setNama_anggota(nama_anggota);
anggota.setAlamat(alamat);
anggota.setNo_telp(no_telp);
anggota.setEmail(email);
anggota.setTgl_daftar(tgl_daftar);

dao.updateAnggota(anggota);

fireOnUpdate(anggota);
}

public void deleteAnggota() throws SQLException, AnggotaException {

Modul Praktikum Pemrograman Berbasis Objek 42


AnggotaDao dao = AnggotaKoneksi.getAnggotaDao();

dao.deleteAnggota(id_anggota);

fireOnDelete();
}
}
3. BukuModel.java :
package perpus.model;

import perpus.koneksi.BukuKoneksi;
import perpus.entity.Buku;
import perpus.error.BukuException;
import perpus.model.event.BukuListener;
import perpus.service.BukuDao;
import java.sql.SQLException;
import java.util.Date;

public class BukuModel {


private String kode_buku, judul_buku, pengarang, penerbit;
private Date tgl_entry_perpus;
private int jml_buku, jml_diperpus, jml_dipinjam, statistik;
private BukuListener listener;

public String getKode_buku() {


return kode_buku;
}
public void setKode_buku(String kode_buku) {
this.kode_buku = kode_buku;
fireOnChange();
}

public String getJudul_buku() {


return judul_buku;
}
public void setJudul_buku(String judul_buku) {
this.judul_buku = judul_buku;
fireOnChange();
}

public String getPengarang() {


return pengarang;
}
public void setPengarang(String pengarang) {
this.pengarang = pengarang;
fireOnChange();
}

public String getPenerbit() {


return penerbit;

Modul Praktikum Pemrograman Berbasis Objek 43


}
public void setPenerbit(String penerbit) {
this.penerbit = penerbit;
fireOnChange();
}

public Date getTgl_entry_perpus() {


return tgl_entry_perpus;
}
public void setTgl_entry_perpus(Date tgl_entry_perpus) {
this.tgl_entry_perpus = tgl_entry_perpus;
fireOnChange();
}

public int getJml_buku() {


return jml_buku;
}
public void setJml_buku(int jml_buku) {
this.jml_buku = jml_buku;
fireOnChange();
}

public int getJml_diperpus() {


return jml_diperpus;
}
public void setJml_diperpus(int jml_diperpus) {
this.jml_diperpus = jml_diperpus;
fireOnChange();
}

public int getJml_dipinjam() {


return jml_dipinjam;
}
public void setJml_dipinjam(int jml_dipinjam) {
this.jml_dipinjam = jml_dipinjam;
fireOnChange();
}

public int getStatistik() {


return statistik;
}
public void setStatistik(int statistik) {
this.statistik = statistik;
fireOnChange();
}

public BukuListener getListener() {


return listener;
}
public void setListener(BukuListener listener) {

Modul Praktikum Pemrograman Berbasis Objek 44


this.listener = listener;
}

protected void fireOnChange() {


if (listener != null) {
listener.onChange(this);
}
}

protected void fireOnInsert(Buku buku) {


if (listener != null) {
listener.onInsert(buku);
}
}

protected void fireOnUpdate(Buku buku) {


if (listener != null) {
listener.onUpdate(buku);
}
}

protected void fireOnDelete() {


if (listener != null) {
listener.onDelete();
}
}

public void resetBuku() {


setKode_buku("");
setJudul_buku("");
setPengarang("");
setPenerbit("");
setJml_buku(0);
setTgl_entry_perpus(new Date());
}

public void resetPeminjaman() {


setKode_buku("");
}

public void getBuku() throws SQLException, BukuException {


BukuDao dao = BukuKoneksi.getBukuDao();

fireOnInsert(dao.getBuku(getKode_buku()));
}

public void insertBuku() throws SQLException, BukuException {


BukuDao dao = BukuKoneksi.getBukuDao();

Buku buku = new Buku();

Modul Praktikum Pemrograman Berbasis Objek 45


buku.setKode_buku(kode_buku);
buku.setJudul_buku(judul_buku);
buku.setPengarang(pengarang);
buku.setPenerbit(penerbit);
buku.setTgl_entry_perpus(tgl_entry_perpus);
buku.setJml_buku(jml_buku);
buku.setJml_diperpus(jml_diperpus);
buku.setJml_dipinjam(jml_dipinjam);
buku.setStatistik(statistik);

dao.insertBuku(buku);

fireOnInsert(buku);
}

public void updateBuku() throws SQLException, BukuException {


BukuDao dao = BukuKoneksi.getBukuDao();

Buku buku = new Buku();


buku.setKode_buku(kode_buku);
buku.setJudul_buku(judul_buku);
buku.setPengarang(pengarang);
buku.setPenerbit(penerbit);
buku.setTgl_entry_perpus(tgl_entry_perpus);
buku.setJml_buku(jml_buku);
buku.setJml_diperpus(jml_diperpus);
buku.setJml_dipinjam(jml_dipinjam);

dao.updateBuku(buku);

fireOnUpdate(buku);
}

public void updatePinjamBuku() throws SQLException, BukuException {


BukuDao dao = BukuKoneksi.getBukuDao();

dao.updatePinjamBuku(getKode_buku());
}

public void updatePengembalian() throws SQLException, BukuException {


BukuDao dao = BukuKoneksi.getBukuDao();

dao.updatePengembalian(getKode_buku());
}

public void deleteBuku() throws SQLException, BukuException {


BukuDao dao = BukuKoneksi.getBukuDao();

dao.deleteBuku(kode_buku);

Modul Praktikum Pemrograman Berbasis Objek 46


fireOnDelete();
}
}

4. PeminjamanModel.java :
package perpus.model;

import perpus.koneksi.PeminjamanKoneksi;
import perpus.entity.Peminjaman;
import perpus.error.PeminjamanException;
import perpus.model.event.PeminjamanListener;
import perpus.service.PeminjamanDao;
import java.sql.SQLException;
import java.util.Date;

public class PeminjamanModel {


private String id_anggota, kode_buku;
private Date tgl_pinjam, tgl_batas_kembali, tgl_kembali;
private int id_pinjam, denda;
private PeminjamanListener listener;

public PeminjamanListener getListener() {


return listener;
}

public void setListener(PeminjamanListener listener) {


this.listener = listener;
}

public int getDenda() {


return denda;
}

public void setDenda(int denda) {


this.denda = denda;
fireOnChange();
}

public String getKode_buku() {


return kode_buku;
}

public void setKode_buku(String kode_buku) {


this.kode_buku = kode_buku;
fireOnChange();
}

public String getId_anggota() {


return id_anggota;
}

Modul Praktikum Pemrograman Berbasis Objek 47


public void setId_anggota(String id_anggota) {
this.id_anggota = id_anggota;
fireOnChange();
}

public int getId_pinjam() {


return id_pinjam;
}

public void setId_pinjam(int id_pinjam) {


this.id_pinjam = id_pinjam;
fireOnChange();
}

public Date getTgl_batas_kembali() {


return tgl_batas_kembali;
}

public void setTgl_batas_kembali(Date tgl_batas_kembali) {


this.tgl_batas_kembali = tgl_batas_kembali;
fireOnChange();
}

public Date getTgl_pinjam() {


return tgl_pinjam;
}

public void setTgl_pinjam(Date tgl_pinjam) {


this.tgl_pinjam = tgl_pinjam;
fireOnChange();
}

public Date getTgl_kembali() {


return tgl_kembali;
}

public void setTgl_kembali(Date tgl_kembali) {


this.tgl_kembali = tgl_kembali;
fireOnChange();
}

protected void fireOnChange() {


if (listener != null) {
listener.onChange(this);
}
}

protected void fireOnInsert(Peminjaman peminjaman) {


if (listener != null) {

Modul Praktikum Pemrograman Berbasis Objek 48


listener.onInsert(peminjaman);
}
}

protected void fireOnUpdate(Peminjaman peminjaman) {


if (listener != null) {
listener.onUpdate(peminjaman);
}
}

protected void fireOnDelete() {


if (listener != null) {
listener.onDelete();
}
}

public void resetPeminjamanKasir() {


setId_anggota("");
}

public void resetPeminjaman() {


setId_pinjam(0);
setId_anggota("");
setKode_buku("");
setTgl_pinjam(new Date());
setTgl_batas_kembali(new Date());
setTgl_kembali(new Date());
setDenda(0);
}

public void insertPeminjaman() throws SQLException, PeminjamanException {


PeminjamanDao dao = PeminjamanKoneksi.getPeminjamanDao();

Peminjaman peminjaman = new Peminjaman();


peminjaman.setId_anggota(id_anggota);
peminjaman.setKode_buku(kode_buku);
peminjaman.setTgl_pinjam(tgl_pinjam);
peminjaman.setTgl_batas_kembali(tgl_batas_kembali);
peminjaman.setDenda(denda);

dao.insertPeminjaman(peminjaman);
}

public void updatePeminjaman() throws SQLException, PeminjamanException {


PeminjamanDao dao = PeminjamanKoneksi.getPeminjamanDao();

Peminjaman peminjaman = new Peminjaman();


peminjaman.setId_pinjam(id_pinjam);
peminjaman.setId_anggota(id_anggota);
peminjaman.setKode_buku(kode_buku);

Modul Praktikum Pemrograman Berbasis Objek 49


peminjaman.setTgl_pinjam(tgl_pinjam);
peminjaman.setTgl_batas_kembali(tgl_batas_kembali);
peminjaman.setTgl_kembali(tgl_kembali);
peminjaman.setDenda(denda);

dao.updatePeminjaman(peminjaman);

fireOnUpdate(peminjaman);
}

public void updatePengembalian() throws SQLException, PeminjamanException {


PeminjamanDao dao = PeminjamanKoneksi.getPeminjamanDao();

Peminjaman peminjaman = new Peminjaman();


peminjaman.setId_pinjam(id_pinjam);
peminjaman.setTgl_kembali(tgl_kembali);
peminjaman.setDenda(denda);

dao.updatePengembalian(peminjaman);
}

public void deletePeminjaman() throws SQLException, PeminjamanException {


PeminjamanDao dao = PeminjamanKoneksi.getPeminjamanDao();

dao.deletePeminjaman(id_pinjam);

fireOnDelete();
}
}

5. File dibawah ini merupakan file model untuk setting tabel grid pada Form View

masing-masing kelas:

TabelBukuModel.java :
package perpus.model;

import perpus.entity.Buku;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class TabelBukuModel extends AbstractTableModel{


private List<Buku> list = new ArrayList<Buku>();

public void setList(List<Buku> list) {


this.list = list;
}

public Buku set(int index, Buku element) {

Modul Praktikum Pemrograman Berbasis Objek 50


try {
return list.set(index, element);
} finally {
fireTableRowsUpdated(index, index);
}
}

public Buku remove(int index) {


try {
return list.remove(index);
} finally {
fireTableRowsDeleted(index, index);
}
}

public Buku get(int index) {


return list.get(index);
}

public boolean add(Buku e) {


try {
return list.add(e);
} finally {
fireTableRowsInserted(getRowCount()-1, getRowCount()-1);
}
}

@Override
public String getColumnName(int column) {
switch(column) {
case 0 : return "Kode Buku";
case 1 : return "Judul";
case 2 : return "Pengarang";
case 3 : return "Penerbit";
case 4 : return "Tgl.Entry Perpus";
case 5 : return "Jml. Buku";
case 6 : return "Jml. Diperpus";
case 7 : return "Jml. Dipinjam";
default: return null;
}
}

@Override
public int getRowCount() {
return list.size();
}

@Override
public int getColumnCount() {
return 8;

Modul Praktikum Pemrograman Berbasis Objek 51


}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch(columnIndex) {
case 0 : return list.get(rowIndex).getKode_buku();
case 1 : return list.get(rowIndex).getJudul_buku();
case 2 : return list.get(rowIndex).getPengarang();
case 3 : return list.get(rowIndex).getPenerbit();
case 4 : return list.get(rowIndex).getTgl_entry_perpus();
case 5 : return list.get(rowIndex).getJml_buku();
case 6 : return list.get(rowIndex).getJml_diperpus();
case 7 : return list.get(rowIndex).getJml_dipinjam();
default: return null;
}
}
}

 Package perpus.model.event
Package perpus.model.event ini berfungsi sebagai deklarasi model data object. File ini

berisi file bertipe interface. Buat interface java pada package perpus.model.event dengan cara

klik kanan package perpus.model.event, lalu pilih New – Java Interface. Buatlah 3 buah

interface masing-masing diberi nama “AnggotaListener”, “BukuListener”,

“PeminjamanListener”.

Berikut tampilan pada package perpus.model.event :

Kode Program pada package perpus.model.event:

1. BukuListener.java :
package perpus.model.event;
import perpus.entity.Buku;
import perpus.model.BukuModel;

public interface BukuListener {


public void onChange(BukuModel model);
public void onInsert(Buku buku);
public void onUpdate(Buku buku);

Modul Praktikum Pemrograman Berbasis Objek 52


public void onDelete();
}

KERJAKAN TUGAS MANDIRI BAB IV :

1. Buat kode program untuk package perpus.model = “TabelAnggotaModel.java”,


“TabelPengembalianModel.java”. Contoh pembuatan kode program Lihat
TabelBukuModel.java.
2. Buat kode program untuk package perpus.model.event = “AnggotaListener”,
“PeminjamanListener”. Contoh pembuatan kode program Lihat BukuListener.

Modul Praktikum Pemrograman Berbasis Objek 53


BAB V

VIEW

Setelah pada bahasan sebelumnya, disiapkan kelas-kelas java yang berhubungan

dengan data yang ada pada basis data. Maka, pada pembahasan bab ini, akan dijabarkan

pembuatan form java yang akan dikategorikan kedalam package khusus yaitu view. Objek-

objek pada form akan dibantu oleh tools yang ada pada library UsuLibrary yang diciptakan

oleh Eko Khannedy seorang Java Programmer. UsuLibrary harus diimport dahulu kedalam

project atau bisa dengan copy paste biasa folder UsuLibrary pada windows explorer.

Selanjutnya buat terlebih dahulu package baru pada project bernama ”perpus.view”.

 Form LoginAdminView

Berikut langkah-langkah pengerjaan form LoginAdminView.java :

1. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama

kelas LoginAdminView.

Modul Praktikum Pemrograman Berbasis Objek 54


Desain form seperti gambar dibawah ini, dengan cara drag and drop objek yang dibutuhkan

pada Usu Library ciptaan Eko Khannedy:

Ketentuan Properties pada Form Login :

Nama Objek Ketarangan pada Properties

Panel, Untuk Backdround form

Toolbar, Untuk background judul

Label Judul Text : .:: Form Login Admin ::.

Modul Praktikum Pemrograman Berbasis Objek 55


Label Username, Text : Username

Label Password Text : Password

TextBox Username, Variable Name : txtUsername

TextBox Password Variable Name : txtPassword

Button Login Variable Name : btnLogin

Kode Program pada Form Login :

package perpus.view;
import perpus.koneksi.AdminKoneksi;
import perpus.entity.Admin;
import perpus.error.AdminException;
import perpus.service.AdminDao;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class LoginAdminView extends javax.swing.JFrame {

/**
* Creates new form Login
*/
public LoginAdminView() {

//super(parent, modal);
initComponents();
setTitle("Aplikasi Perpustakaan Berbasis MVC");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

panel1 = new perpus.view.usu.Panel();


txtUsername = new perpus.view.usu.TextBox();

Modul Praktikum Pemrograman Berbasis Objek 56


txtPassword = new perpus.view.usu.TextBox();
btnLogin = new perpus.view.usu.Button();
toolbar1 = new perpus.view.usu.Toolbar();
label1 = new perpus.view.usu.Label();
label2 = new perpus.view.usu.Label();
label3 = new perpus.view.usu.Label();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

btnLogin.setText("Login");
btnLogin.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnLoginActionPerformed(evt);
}
});

toolbar1.setRollover(true);

label1.setText(".:: Form Login Admin ::.");


label1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
toolbar1.add(label1);
label1.getAccessibleContext().setAccessibleDescription("");
label1.getAccessibleContext().setAccessibleParent(this);

label2.setText("Password");
label2.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

label3.setText("Username");
label3.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

javax.swing.GroupLayout panel1Layout = new


javax.swing.GroupLayout(panel1);
panel1.setLayout(panel1Layout);
panel1Layout.setHorizontalGroup(

panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(toolbar1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(121, 121, 121)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.T
RAILING)
.addComponent(txtPassword,
javax.swing.GroupLayout.PREFERRED_SIZE, 159,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtUsername,
javax.swing.GroupLayout.PREFERRED_SIZE, 159,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(119, Short.MAX_VALUE))

Modul Praktikum Pemrograman Berbasis Objek 57


.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
panel1Layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(165, 165, 165))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
panel1Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(btnLogin, javax.swing.GroupLayout.PREFERRED_SIZE,
88, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(151, 151, 151))

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L
EADING)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(166, 166, 166)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(164, Short.MAX_VALUE)))
);
panel1Layout.setVerticalGroup(

panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE,
48, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 50,
Short.MAX_VALUE)
.addComponent(txtUsername,
javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label2, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtPassword,
javax.swing.GroupLayout.PREFERRED_SIZE, 34,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(btnLogin, javax.swing.GroupLayout.PREFERRED_SIZE,
37, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(42, 42, 42))

Modul Praktikum Pemrograman Berbasis Objek 58


.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L
EADING)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(76, 76, 76)
.addComponent(label3, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(201, 201, 201)))
);

javax.swing.GroupLayout layout = new


javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);

pack();
}// </editor-fold>

private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
int rowCount = 0;
Admin admin = new Admin();
admin.setUsername(txtUsername.getText());
admin.setPassword(txtPassword.getText());
try {
AdminDao dao = AdminKoneksi.getAdminDao();
try {
if (txtUsername.getText().equals("")) {
JOptionPane.showMessageDialog(null, "Username Belum Terisi!!!");
} else if (txtPassword.getText().equals("")) {
JOptionPane.showMessageDialog(null, "Password Belum Terisi!!!");
} else {
rowCount = dao.selectCount(admin);
}
} catch (AdminException ex) {
Logger.getLogger(LoginAdminView.class.getName()).log(Level.SEVERE,
null, ex);
}
} catch (SQLException ex) {
}
if (rowCount == 1) {

Modul Praktikum Pemrograman Berbasis Objek 59


this.dispose();
try {
new AdminView().setVisible(true);
} catch (SQLException ex) {

Logger.getLogger(LoginAdminView.class.getName()).log(Level.SEVERE, null, ex);


}
} else {
//labelValidasi.setText("Username dan password tidak sesuai");
txtUsername.setText("");
txtPassword.setText("");
txtUsername.requestFocusInWindow();
}
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code
(optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look
and feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(LoginAdminView.class.getName()).log(java.util.l
ogging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(LoginAdminView.class.getName()).log(java.util.l
ogging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(LoginAdminView.class.getName()).log(java.util.l
ogging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {

Modul Praktikum Pemrograman Berbasis Objek 60


java.util.logging.Logger.getLogger(LoginAdminView.class.getName()).log(java.util.l
ogging.Level.SEVERE, null, ex);
}
//</editor-fold>
//</editor-fold>
//</editor-fold>
//</editor-fold>

/* Create and display the form */


java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new LoginAdminView().setVisible(true);
}
});
}

// Variables declaration - do not modify


private perpus.view.usu.Button btnLogin;
private perpus.view.usu.Label label1;
private perpus.view.usu.Label label2;
private perpus.view.usu.Label label3;
private perpus.view.usu.Panel panel1;
private perpus.view.usu.Toolbar toolbar1;
private perpus.view.usu.TextBox txtPassword;
private perpus.view.usu.TextBox txtUsername;
// End of variables declaration
}

 Fungsi Utama MainProgram

Untuk menjalankan Form Login Admin sebagai form awal dari projek yang akan

dijalankan, dibutuhkan kelas java yang khusus bertugas sebagai Fungsi Utama atau Main

Program. Berikut langkah-langkah pembuatan Fungsi Utama dari Project:

1. Klik kanan pada package “perpus”, lalu pilih New – Java Class, beri nama

MainProgram.

Modul Praktikum Pemrograman Berbasis Objek 61


Kode Program MainProgram.java :

package perpus;
import perpus.view.LoginAdminView;
import javax.swing.SwingUtilities;

public class MainProgram {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
LoginAdminView petugas = null;
petugas = new LoginAdminView();
petugas.setVisible(true);
}
});
}
}

 Form Menu Utama

Berikut langkah-langkah pengerjaan form AdminView.java :

1. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama

kelas AdminView.

Modul Praktikum Pemrograman Berbasis Objek 62


Desain form seperti gambar dibawah ini, dengan cara drag and drop objek yang

dibutuhkan pada UsuLibrary.

Label Tanggal

Label Buku Baru Label Buku Favorit

Ketentuan Properties pada Form Login :

Nama Objek Ketarangan pada Properties


Panel, Untuk Backdround form
Toolbar, Untuk background judul
Label Judul Text : .:: Halaman Utama Aplikasi ::.
Button Daftar Buku, Variable Name : btnBuku
Text : Daftar Buku
toolTipText : Menu Data Buku
icon : buku.png

Button Daftar Anggota, Variable Name : btnAnggota


Text : Daftar Anggota
toolTipText : Menu Data Anggota
icon : buku.png

Button Peminjaman, Variable Name : btnPinjam


Text : Peminjaman

Modul Praktikum Pemrograman Berbasis Objek 63


toolTipText : Menu Peminjaman Buku
icon : buku.png

Button Pengembalian, Variable Name : btnKembali


Text : Pengembalian
toolTipText : Menu Pengembalian Buku
icon : buku.png

Label Tanggal, Variable Name : lblTgl


Text : <html>

Label Buku Baru, Variable Name : lblBuku_baru


Text : <html>

Label Buku Favorit Variable Name : lblBuku_favorit


Text : <html>
Note : untuk icon buku.png, copy dahulu icon yang dimiliki kedalam pakage
“perpus.view.images”, icon bisa diganti.

Kode Program pada Halaman Admin View :

package perpus.view;
import perpus.koneksi.BukuKoneksi;
import perpus.entity.Buku;
import perpus.error.BukuException;
import perpus.error.AnggotaException;
import perpus.service.BukuDao;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.sql.SQLException;

public class AdminView extends javax.swing.JFrame {


/**
* Creates new form UserView
*/
public AdminView() throws SQLException {
initComponents();
setTitle("Aplikasi Perpustakaan Berbasis MVC");
//Code untuk membuat maximized tampilan Menu Utama Saat Running
setExtendedState(MAXIMIZED_BOTH);

//Membuat tanggal
Format formatter = new SimpleDateFormat("dd MMMM yyyy");
Date ftgl = new Date();
String tgl = formatter.format(ftgl);

Modul Praktikum Pemrograman Berbasis Objek 64


lblTgl.setText(tgl);

//Daftar Buku Terbaru


List<Buku> newBuku = new ArrayList<Buku>();
BukuDao daoBuku = BukuKoneksi.getBukuDao();
try {
newBuku = daoBuku.top10BukuBaru();
for (int i = 0; i < newBuku.size(); i++) {
lblBuku_baru.setText
(lblBuku_baru.getText() + "<tr><td>" + (i+1) + ". " +
newBuku.get(i).getJudul_buku() + "</td></tr>");
}
lblBuku_baru.setText(lblBuku_baru.getText() + "</table></html>");
} catch (BukuException ex) {
Logger.getLogger(AdminView.class.getName()).log(Level.SEVERE, null, ex);
}

//Daftar Buku Pinjaman Favorit


List<Buku> buku = new ArrayList<Buku>();
try {
buku = daoBuku.top10BukuFavorit();
for (int i = 0; i < buku.size(); i++) {
lblBuku_favorit.setText
(lblBuku_favorit.getText() + "<tr><td>" + (i+1) + ". " +
buku.get(i).getJudul_buku() + " </td>"
+ "<td> --> (" + buku.get(i).getStatistik() + " kali dipinjam)</td></tr>");
}
lblBuku_favorit.setText(lblBuku_favorit.getText() + "</table></html>");
} catch (BukuException ex) {
Logger.getLogger(AdminView.class.getName()).log(Level.SEVERE, null, ex);
}
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

panel1 = new perpus.view.usu.Panel();


toolbar1 = new perpus.view.usu.Toolbar();
label1 = new perpus.view.usu.Label();
label2 = new perpus.view.usu.Label();
lblTgl = new perpus.view.usu.Label();
btnAnggota = new perpus.view.usu.Button();
btnPinjam = new perpus.view.usu.Button();
btnKembali = new perpus.view.usu.Button();

Modul Praktikum Pemrograman Berbasis Objek 65


btnBuku = new perpus.view.usu.Button();
label3 = new perpus.view.usu.Label();
lblBuku_baru = new perpus.view.usu.Label();
label4 = new perpus.view.usu.Label();
lblBuku_favorit = new perpus.view.usu.Label();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

toolbar1.setRollover(true);

label1.setText(".:: Halaman Utama Aplikasi ::. ");


label1.setToolTipText("");
label1.setFont(new java.awt.Font("Arial", 1, 24)); // NOI18N
toolbar1.add(label1);

label2.setText("| ");
label2.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
toolbar1.add(label2);
toolbar1.add(lblTgl);

btnAnggota.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/perpus/view/images/buku.png"))); //
NOI18N
btnAnggota.setText("Daftar Anggota");
btnAnggota.setToolTipText("Menu Data Anggota");
btnAnggota.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAnggotaActionPerformed(evt);
}
});

btnPinjam.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/perpus/view/images/buku.png"))); //
NOI18N
btnPinjam.setText("Peminjaman");
btnPinjam.setToolTipText("Menu Peminjaman Buku");
btnPinjam.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPinjamActionPerformed(evt);
}
});

btnKembali.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/perpus/view/images/buku.png"))); //
NOI18N
btnKembali.setText("Pengembalian");
btnKembali.setToolTipText("Menu Pengembalian Buku");
btnKembali.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnKembaliActionPerformed(evt);

Modul Praktikum Pemrograman Berbasis Objek 66


}
});

btnBuku.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/perpus/view/images/buku.png"))); //
NOI18N
btnBuku.setText("Daftar Buku");
btnBuku.setToolTipText("Menu Data Buku");
btnBuku.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBukuActionPerformed(evt);
}
});

label3.setText("Daftar Judul Buku Terbaru:");


label3.setFont(new java.awt.Font("Tahoma", 2, 14)); // NOI18N

lblBuku_baru.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblBuku_baru.setText("<html>");
lblBuku_baru.setVerticalAlignment(javax.swing.SwingConstants.TOP);
lblBuku_baru.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
lblBuku_baru.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

label4.setText("Daftar Buku Pinjaman Favorit:");


label4.setFont(new java.awt.Font("Tahoma", 2, 14)); // NOI18N

lblBuku_favorit.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblBuku_favorit.setText("<html>");
lblBuku_favorit.setVerticalAlignment(javax.swing.SwingConstants.TOP);
lblBuku_favorit.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
lblBuku_favorit.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(panel1);


panel1.setLayout(panel1Layout);
panel1Layout.setHorizontalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(toolbar1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panel1Layout.createSequentialGroup()
.addContainerGap()

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(btnBuku, javax.swing.GroupLayout.PREFERRED_SIZE,
173, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(btnAnggota, javax.swing.GroupLayout.PREFERRED_SIZE,
173, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)

Modul Praktikum Pemrograman Berbasis Objek 67


.addComponent(btnPinjam, javax.swing.GroupLayout.PREFERRED_SIZE,
172, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(btnKembali, javax.swing.GroupLayout.PREFERRED_SIZE,
182, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addGroup(panel1Layout.createSequentialGroup()

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblBuku_baru,
javax.swing.GroupLayout.PREFERRED_SIZE, 343,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(lblBuku_favorit)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 288, Short.MAX_VALUE)))
.addGap(454, 454, 454))))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE, 55,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(btnAnggota, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnPinjam, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnKembali, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBuku, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(58, 58, 58)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI
NG)
.addGroup(panel1Layout.createSequentialGroup()

Modul Praktikum Pemrograman Berbasis Objek 68


.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(276, 276, 276))
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(lblBuku_favorit,
javax.swing.GroupLayout.PREFERRED_SIZE, 270,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblBuku_baru,
javax.swing.GroupLayout.PREFERRED_SIZE, 270,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(0, 179, Short.MAX_VALUE))
);

lblBuku_baru.getAccessibleContext().setAccessibleDescription("");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());


getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(panel1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);

pack();
}// </editor-fold>

private void btnBukuActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
DataBukuView buku = new DataBukuView();
try {
buku.loadKoneksi();
buku.setVisible(true);
} catch (BukuException ex) {
Logger.getLogger(DataBukuView.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DataBukuView.class.getName()).log(Level.SEVERE, null, ex);
}

Modul Praktikum Pemrograman Berbasis Objek 69


}

private void btnKembaliActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
PengembalianView kembali = new PengembalianView();
kembali.setVisible(true);
}

private void btnPinjamActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
PeminjamanView pinjam = new PeminjamanView();
pinjam.setVisible(true);
}

private void btnAnggotaActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
DataAnggotaView anggota = new DataAnggotaView();
try {
anggota.loadKoneksi();
anggota.setVisible(true);
} catch (AnggotaException ex) {
Logger.getLogger(DataAnggotaView.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DataAnggotaView.class.getName()).log(Level.SEVERE, null, ex);
}
}

// Variables declaration - do not modify


private perpus.view.usu.Button btnAnggota;
private perpus.view.usu.Button btnBuku;
private perpus.view.usu.Button btnKembali;
private perpus.view.usu.Button btnPinjam;
private perpus.view.usu.Label label1;
private perpus.view.usu.Label label2;
private perpus.view.usu.Label label3;
private perpus.view.usu.Label label4;
private perpus.view.usu.Label lblBuku_baru;
private perpus.view.usu.Label lblBuku_favorit;
private perpus.view.usu.Label lblTgl;
private perpus.view.usu.Panel panel1;
private perpus.view.usu.Toolbar toolbar1;
// End of variables declaration
}

Modul Praktikum Pemrograman Berbasis Objek 70


Tampilan Running Halaman Admin View (setelah berhasil login) :

Modul Praktikum Pemrograman Berbasis Objek 71


BAB VI

VIEW II (Form Master)

 Form Master Data Buku

Berikut langkah-langkah pengerjaan form DataBukuView.java :

1. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama

kelas DataBukuView.

Desain form seperti gambar dibawah ini, dengan cara drag and drop objek yang

dibutuhkan pada Usu Library.

Modul Praktikum Pemrograman Berbasis Objek 72


Ketentuan Properties pada Form Data Buku :

Nama Objek Ketarangan pada Properties


Panel, Untuk Backdround form
Toolbar, Untuk background judul
Label Judul Text : .:: Form Data Buku ::.
Button Tambah, Variable Name : btnTambah
Text : Tambah

Button Ubah, Variable Name : btnUbah


Text : Ubah

Button Hapus, Variable Name : btnHapus


Text : Hapus

Button Batal, Variable Name : btnBatal


Text : Batal

Button Keluar Variable Name : btnKeluar


Text : Keluar

TextBox Kode Buku, Variable Name : txtKode_buku


Text : <kosongkan>

TextBox Judul, Variable Name : txtJudul_buku


Text : < kosongkan >

TextBox Pengarang Variable Name : txtPengarang


Text : <kosongkan>

TextBox Penerbit Variable Name : txtPenerbit


Text : <kosongkan>

TextBox Jumlah Buku Variable Name : txtJml_buku


Text : <kosongkan>

JTable Tabel Buku Variable Name : tblBuku

Kode Program pada Form Data Buku :

package perpus.view;
import perpus.controller.BukuController;
import perpus.koneksi.BukuKoneksi;
import perpus.entity.Buku;
import perpus.error.*;
import perpus.model.BukuModel;
import perpus.model.TabelBukuModel;
import perpus.model.event.BukuListener;
import perpus.service.BukuDao;

Modul Praktikum Pemrograman Berbasis Objek 73


import perpus.view.usu.TextBox;
import java.awt.Color;
import java.awt.Font;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class DataBukuView extends javax.swing.JFrame implements BukuListener,


ListSelectionListener {
private TabelBukuModel tabelModel;
private BukuModel model;
private BukuController controller;
/**
* Creates new form DataBukuView
*/
public DataBukuView() {
tabelModel = new TabelBukuModel();

model = new BukuModel();


model.setListener(this);

controller = new BukuController();


controller.setModel(model);
initComponents();
setTitle("Data Buku Aplikasi Perpustakaan");
setExtendedState(MAXIMIZED_BOTH);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

tblBuku.getSelectionModel().addListSelectionListener(this);
tblBuku.setModel(tabelModel);
tblBuku.getTableHeader().setReorderingAllowed(false);
tblBuku.getTableHeader().setFont(new Font("Segoe UI", Font.PLAIN, 14));
tblBuku.getTableHeader().setBackground(Color.CYAN);
}

public TextBox gettxtKode_buku() {


return txtKode_buku;
}

public TextBox gettxtJudul_buku() {


return txtJudul_buku;
}

public TextBox gettxtPengarang() {


return txtPengarang;
}

Modul Praktikum Pemrograman Berbasis Objek 74


public TextBox gettxtPenerbit() {
return txtPenerbit;
}

public TextBox gettxtJml_buku() {


return txtJml_buku;
}

public JTable gettblBuku() {


return tblBuku;
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

panel1 = new perpus.view.usu.Panel();


toolbar1 = new perpus.view.usu.Toolbar();
label1 = new perpus.view.usu.Label();
label2 = new perpus.view.usu.Label();
label3 = new perpus.view.usu.Label();
label4 = new perpus.view.usu.Label();
label5 = new perpus.view.usu.Label();
txtKode_buku = new perpus.view.usu.TextBox();
txtJudul_buku = new perpus.view.usu.TextBox();
txtPengarang = new perpus.view.usu.TextBox();
txtPenerbit = new perpus.view.usu.TextBox();
jScrollPane2 = new javax.swing.JScrollPane();
tblBuku = new javax.swing.JTable();
label7 = new perpus.view.usu.Label();
label10 = new perpus.view.usu.Label();
txtJml_buku = new perpus.view.usu.TextBox();
btnTambah = new perpus.view.usu.Button();
btnUbah = new perpus.view.usu.Button();
btnHapus = new perpus.view.usu.Button();
btnBatal = new perpus.view.usu.Button();
btnKeluar = new perpus.view.usu.Button();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

panel1.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

toolbar1.setRollover(true);

label1.setText(".:: Form Data Buku ::.");

Modul Praktikum Pemrograman Berbasis Objek 75


label1.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
toolbar1.add(label1);

label2.setText("Kode Buku");
label2.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

label3.setText("Judul");
label3.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

label4.setText("Pengarang");
label4.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

label5.setText("Penerbit");
label5.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

tblBuku.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane2.setViewportView(tblBuku);

label7.setText("Jml. Buku");
label7.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

label10.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

btnTambah.setText("Tambah");
btnTambah.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnTambahActionPerformed(evt);
}
});

btnUbah.setText("Ubah");
btnUbah.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnUbahActionPerformed(evt);
}
});

btnHapus.setText("Hapus");
btnHapus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {

Modul Praktikum Pemrograman Berbasis Objek 76


btnHapusActionPerformed(evt);
}
});

btnBatal.setText("Batal");
btnBatal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBatalActionPerformed(evt);
}
});

btnKeluar.setText("Keluar");
btnKeluar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnKeluarActionPerformed(evt);
}
});

javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(panel1);


panel1.setLayout(panel1Layout);
panel1Layout.setHorizontalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(toolbar1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
panel1Layout.createSequentialGroup()
.addGap(32, 32, 32)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2,
javax.swing.GroupLayout.PREFERRED_SIZE, 107,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label5,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label3,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label4,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))

Modul Praktikum Pemrograman Berbasis Objek 77


.addGap(18, 18, 18))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
panel1Layout.createSequentialGroup()
.addComponent(label7, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(47, 47, 47)))

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(txtJml_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 153,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtJudul_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 411,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtKode_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 99,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI
NG, false)
.addComponent(txtPenerbit,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE, 345, Short.MAX_VALUE)
.addComponent(txtPengarang,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
111, Short.MAX_VALUE)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(btnUbah,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnKeluar,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnTambah,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnHapus,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE)

Modul Praktikum Pemrograman Berbasis Objek 78


.addComponent(btnBatal,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(61, 61, 61))
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(label10, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 886, Short.MAX_VALUE))
.addGroup(panel1Layout.createSequentialGroup()
.addGap(2, 2, 2)
.addComponent(jScrollPane2)
.addContainerGap())))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE, 55,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(txtKode_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnTambah, javax.swing.GroupLayout.PREFERRED_SIZE,
33, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(txtJudul_buku, javax.swing.GroupLayout.PREFERRED_SIZE,
39, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnUbah, javax.swing.GroupLayout.PREFERRED_SIZE, 32,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)

Modul Praktikum Pemrograman Berbasis Objek 79


.addComponent(txtPengarang, javax.swing.GroupLayout.PREFERRED_SIZE,
44, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnHapus, javax.swing.GroupLayout.PREFERRED_SIZE, 33,
javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(label5, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(txtPenerbit,
javax.swing.GroupLayout.PREFERRED_SIZE, 45,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE,
34, javax.swing.GroupLayout.PREFERRED_SIZE))))

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(label10, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE,
34, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createSequentialGroup()
.addGap(23, 23, 23)
.addComponent(label7, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createSequentialGroup()
.addGap(11, 11, 11)
.addComponent(txtJml_buku, javax.swing.GroupLayout.PREFERRED_SIZE,
44, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 233,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(38, Short.MAX_VALUE))
);

Modul Praktikum Pemrograman Berbasis Objek 80


javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(panel1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 93, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

private void btnTambahActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
controller.insertBuku(this);
}

private void btnUbahActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
controller.updateBuku(this);
}

private void btnHapusActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
controller.deleteBuku(this);
}

private void btnBatalActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
controller.resetBuku(this);
}

private void btnKeluarActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
this.dispose();
}

// Variables declaration - do not modify


private perpus.view.usu.Button btnBatal;
private perpus.view.usu.Button btnHapus;

Modul Praktikum Pemrograman Berbasis Objek 81


private perpus.view.usu.Button btnKeluar;
private perpus.view.usu.Button btnTambah;
private perpus.view.usu.Button btnUbah;
private javax.swing.JScrollPane jScrollPane2;
private perpus.view.usu.Label label1;
private perpus.view.usu.Label label10;
private perpus.view.usu.Label label2;
private perpus.view.usu.Label label3;
private perpus.view.usu.Label label4;
private perpus.view.usu.Label label5;
private perpus.view.usu.Label label7;
private perpus.view.usu.Panel panel1;
private javax.swing.JTable tblBuku;
private perpus.view.usu.Toolbar toolbar1;
private perpus.view.usu.TextBox txtJml_buku;
private perpus.view.usu.TextBox txtJudul_buku;
private perpus.view.usu.TextBox txtKode_buku;
private perpus.view.usu.TextBox txtPenerbit;
private perpus.view.usu.TextBox txtPengarang;
// End of variables declaration

public void loadKoneksi() throws BukuException, SQLException {


BukuDao dao = BukuKoneksi.getBukuDao();
tabelModel.setList(dao.selectAllBuku());
}

@Override
public void onChange(BukuModel model) {
txtKode_buku.setText(model.getKode_buku());
txtJudul_buku.setText(model.getJudul_buku());
txtPengarang.setText(model.getPengarang());
txtPenerbit.setText(model.getPenerbit());
txtJml_buku.setText(model.getJml_buku()+ "");//To change body of generated
methods, choose Tools | Templates.

@Override
public void onInsert(Buku anggota) {
tabelModel.add(anggota); //To change body of generated methods, choose Tools |
Templates.
}

@Override
public void onUpdate(Buku anggota) {
int index = tblBuku.getSelectedRow();
tabelModel.set(index, anggota); //To change body of generated methods, choose Tools |
Templates.
}

Modul Praktikum Pemrograman Berbasis Objek 82


@Override
public void onDelete() {
int index = tblBuku.getSelectedRow();
tabelModel.remove(index); //To change body of generated methods, choose Tools |
Templates.
}

@Override
public void valueChanged(ListSelectionEvent lse) {
try {
Buku model;
model = tabelModel.get(tblBuku.getSelectedRow());
txtKode_buku.setText(model.getKode_buku());
txtJudul_buku.setText(model.getJudul_buku());
txtPengarang.setText(model.getPengarang());
txtPenerbit.setText(model.getPenerbit());
txtJml_buku.setText(model.getJml_buku()+ "");
} catch (IndexOutOfBoundsException exception) {
} //To change body of generated methods, choose Tools | Templates.
}

}
Tampilan Running pada Form Data Buku :

Modul Praktikum Pemrograman Berbasis Objek 83


KERJAKAN TUGAS MANDIRI BAB VI :

Buat Form Anggota untuk package perpus.view, Contoh pembuatan Form dan Kode
program Lihat Form Data Buku.
Tampilan Program Running pada Form Data Anggota :

Modul Praktikum Pemrograman Berbasis Objek 84


BAB VII

CONTROLLER

Tahap terakhir dari struktur kode pemrograman berbasis MVC adalah menuangkan

kode program dan memasukkannya kedalam bagian “controller” atau penghubung antara

bagian view dengan model dan basis data. Selanjutnya buat terlebih dahulu package baru pada

project perpus bernama ”perpus.controller”.

 AnggotaController

Berikut langkah-langkah pembuatan AnggotaController.java:

1. Klik kanan pada package perpus.controller, lalu pilih New – Java Class, lalu beri nama

kelas AnggotaController.

Kode Program pada AnggotaController.java :

package perpus.controller;

import perpus.model.AnggotaModel;
import perpus.view.DataAnggotaView;
import java.awt.HeadlessException;
import java.sql.SQLException;
import java.util.Date;
import javax.swing.JOptionPane;
import perpus.error.AnggotaException;

public class AnggotaController {


private AnggotaModel model;

public void setModel(AnggotaModel model) {


this.model = model;
}

public void resetAnggota(DataAnggotaView view) {


model.resetAnggota();
}

public void insertAnggota(DataAnggotaView view) {

String id_anggota = view.gettxtId_anggota().getText();


String nama_anggota = view.gettxtNama_anggota().getText();
String alamat = view.gettxtAlamat().getText();

Modul Praktikum Pemrograman Berbasis Objek 85


String no_telp = view.gettxtNo_telp().getText();
String email = view.gettxtEmail().getText();
Date tgl_daftar = new Date();

if (id_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "ID Anggota Belum Terisi!!!");
} else if (id_anggota.length() > 6) {
JOptionPane.showMessageDialog(view, "ID Anggota tidak boleh lebih dari 6
karakter");
} else if (nama_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Nama Anggota Belum Terisi!!!");
} else if (nama_anggota.length() > 35) {
JOptionPane.showMessageDialog(view, "Nama Anggota tidak boleh lebih dari
35 karakter");
} else if (alamat.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Alamat Anggota Belum Terisi!!!");
} else if (alamat.length() > 75) {
JOptionPane.showMessageDialog(view, "Alamat Anggota tidak boleh lebih dari
75 karakter");
} else if (no_telp.length() > 18) {
JOptionPane.showMessageDialog(view, "Nomor no_telp tidak boleh lebih dari
18 digit");
} else if (!email.contains("@") || !email.contains(".")) {
JOptionPane.showMessageDialog(view, "Email Tidak Valid!!!");
} else if (email.length() > 25) {
JOptionPane.showMessageDialog(view, "Email tidak boleh lebih dari 25
karakter");
} else {
model.setId_anggota(id_anggota);
model.setTgl_daftar(tgl_daftar);
model.setNama_anggota(nama_anggota);
model.setAlamat(alamat);
model.setEmail(email);
model.setNo_telp(no_telp);

try {
model.insertAnggota();
JOptionPane.showMessageDialog(view, "Data Anggota Berhasil Tersimpan");
model.resetAnggota();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program !!!",
throwable.getMessage()});
}
}
}

public void updateAnggota(DataAnggotaView view) {

if (view.gettblAnggota().getSelectedRowCount() == 0) {

Modul Praktikum Pemrograman Berbasis Objek 86


JOptionPane.showMessageDialog(view, "Pilih Record Yang Akan Diubah");
} else {
String id_anggota = view.gettxtId_anggota().getText();
String nama_anggota = view.gettxtNama_anggota().getText();
String alamat = view.gettxtAlamat().getText();
String no_telp = view.gettxtNo_telp().getText();
String email = view.gettxtEmail().getText();

if (id_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "ID Anggota Belum Terisi!!!");
} else if (id_anggota.length() > 6) {
JOptionPane.showMessageDialog(view, "ID Anggota tidak boleh lebih dari 6
karakter");
} else if (nama_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Nama Anggota Belum Terisi!!!");
} else if (nama_anggota.length() > 35) {
JOptionPane.showMessageDialog(view, "Nama Anggota tidak boleh lebih dari
35 karakter");
} else if (alamat.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Alamat Anggota Belum Terisi!!!");
} else if (alamat.length() > 75) {
JOptionPane.showMessageDialog(view, "Alamat Anggota tidak boleh lebih dari
75 karakter");
} else if (no_telp.length() > 18) {
JOptionPane.showMessageDialog(view, "Nomor no_telp tidak boleh lebih dari
18 digit");
} else if (!email.contains("@") || !email.contains(".")) {
JOptionPane.showMessageDialog(view, "Email Tidak Valid!!!");
} else if (email.length() > 25) {
JOptionPane.showMessageDialog(view, "Email tidak boleh lebih dari 25
karakter");
} else {
model.setId_anggota(id_anggota);
model.setNama_anggota(nama_anggota);
model.setAlamat(alamat);
model.setEmail(email);
model.setNo_telp(no_telp);

try {
model.updateAnggota();
JOptionPane.showMessageDialog(view, "Data Anggota Berhasil
Terupdate");
model.resetAnggota();
} catch (SQLException | AnggotaException | HeadlessException throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program !!!",
throwable.getMessage()});
}
}
}

Modul Praktikum Pemrograman Berbasis Objek 87


}

public void deleteAnggota(DataAnggotaView view) {

if (view.gettblAnggota().getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(view, "Pilih Record Yang Akan Dihapus");
} else {
if (JOptionPane.showConfirmDialog(view, "Anda yakin ingin menghapus data
Anggota ini?") == JOptionPane.OK_OPTION) {
String id_anggota = view.gettxtId_anggota().getText();
model.setId_anggota(id_anggota);
try {
model.deleteAnggota();
JOptionPane.showMessageDialog(view, "Data Anggota Berhasil
Terhapus!!!");
model.resetAnggota();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program !!!",
throwable.getMessage()});
}
}
}
}

 BukuController

Berikut langkah-langkah pembuatan BukuController.java:

1. Klik kanan pada package perpus.controller, lalu pilih New – Java Class, lalu beri nama

kelas BukuController.

Kode Program pada BukuController.java :

package perpus.controller;

import perpus.model.BukuModel;
import perpus.view.*;
import perpus.error.BukuException;
import java.sql.SQLException;
import java.util.Date;
import javax.swing.JTable;
import javax.swing.JOptionPane;

public class BukuController {


private BukuModel model;

Modul Praktikum Pemrograman Berbasis Objek 88


public void setModel(BukuModel model) {
this.model = model;
}

public void resetBuku(DataBukuView view) {


model.resetBuku();
}

public void getBuku(PeminjamanView view) {


String Kode_buku = view.gettxtKode_buku().getText();

if (Kode_buku.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Kode Buku masih kosong");
} else if (Kode_buku.length() > 20) {
JOptionPane.showMessageDialog(view, "Kode Buku tidak boleh lebih dari 10
karakter");
} else {
model.setKode_buku(Kode_buku);

try {
model.getBuku();
JOptionPane.showMessageDialog(view, "Data Buku Tersimpan");
model.resetPeminjaman();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program",
throwable.getMessage()});
}
}
}

public void insertBuku(DataBukuView view) {


Integer jml_buku;
String kode_buku = view.gettxtKode_buku().getText();
Date tgl_entry_perpus = new Date();
String judul_buku = view.gettxtJudul_buku().getText();
String pengarang = view.gettxtPengarang().getText();
String penerbit = view.gettxtPenerbit().getText();
jml_buku = Integer.parseInt(view.gettxtJml_buku().getText());
Integer jml_diperpus = jml_buku;
Integer jml_dipinjam = 0;
Integer statistik = 0;

if (kode_buku.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Kode Buku Belum Terisi!!!");
} else if (kode_buku.length() > 10) {
JOptionPane.showMessageDialog(view, "Kode Buku tidak boleh lebih dari 10
karakter");
} else if (judul_buku.trim().equals("")) {

Modul Praktikum Pemrograman Berbasis Objek 89


JOptionPane.showMessageDialog(view, "Judul Buku Belum Terisi!!!");
} else if (judul_buku.length() > 45) {
JOptionPane.showMessageDialog(view, "Judul Buku tidak boleh lebih dari 45
karakter");
} else if (pengarang.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Pengarang Belum Terisi!!!");
} else if (pengarang.length() > 35) {
JOptionPane.showMessageDialog(view, "Pengarang tidak boleh lebih dari 35
karakter");
} else if (penerbit.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Penerbit Belum Terisi!!!");
} else if (penerbit.length() > 45) {
JOptionPane.showMessageDialog(view, "Penerbit tidak boleh lebih dari 45 karakter");
} else if (String.valueOf(jml_buku).trim().equals("")) {
JOptionPane.showMessageDialog(view, "Jumlah Buku Belum Terisi!!!");
} else if (String.valueOf(jml_buku).length() > 4) {
JOptionPane.showMessageDialog(view, "Jumlah Buku tidak boleh lebih dari 4 digit");
} else if (String.valueOf(jml_diperpus).trim().equals("")) {
JOptionPane.showMessageDialog(view, "Jumlah Diperpus Belum Terisi!!!");
} else if (String.valueOf(jml_diperpus).length() > 4) {
JOptionPane.showMessageDialog(view, "Jumlah Diperpus tidak boleh lebih dari 4
digit");
} else if (String.valueOf(jml_dipinjam).trim().equals("")) {
JOptionPane.showMessageDialog(view, "Jumlah Dipinjam Belum Terisi!!!");
} else if (String.valueOf(jml_dipinjam).length() > 4) {
JOptionPane.showMessageDialog(view, "Jumlah Dipinjam tidak boleh lebih dari 4
digit");
} else {
model.setKode_buku(kode_buku);
model.setPenerbit(penerbit);
model.setTgl_entry_perpus(tgl_entry_perpus);
model.setJudul_buku(judul_buku);
model.setPengarang(pengarang);
model.setJml_buku(jml_buku);
model.setJml_diperpus(jml_diperpus);
model.setJml_dipinjam(jml_dipinjam);
model.setStatistik(statistik);
try {
model.insertBuku();
JOptionPane.showMessageDialog(view, "Data Buku Berhasil Tersimpan!!!");
model.resetBuku();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program!!!",
throwable.getMessage()});
}
}
}

Modul Praktikum Pemrograman Berbasis Objek 90


public void updateBuku(DataBukuView view) {

if (view.gettblBuku().getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(view, "Pilih Record Yang Akan Diubah");
} else {

String kode_buku = view.gettxtKode_buku().getText();


Date tgl_entry_perpus = new Date();
String judul_buku = view.gettxtJudul_buku().getText();
String pengarang = view.gettxtPengarang().getText();
String penerbit = view.gettxtPenerbit().getText();
Integer jml_buku = Integer.parseInt(view.gettxtJml_buku().getText());
Integer jml_diperpus = jml_buku;

if (kode_buku.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Kode Buku Belum Terisi!!!");
} else if (kode_buku.length() > 10) {
JOptionPane.showMessageDialog(view, "Kode Buku tidak boleh lebih dari 10
karakter");
} else if (judul_buku.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Judul Buku Belum Terisi!!!");
} else if (judul_buku.length() > 45) {
JOptionPane.showMessageDialog(view, "Judul Buku tidak boleh lebih dari 45
karakter");
} else if (pengarang.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Pengarang Belum Terisi!!!");
} else if (pengarang.length() > 35) {
JOptionPane.showMessageDialog(view, "Pengarang tidak boleh lebih dari 35
karakter");
} else if (penerbit.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Penerbit Belum Terisi!!!");
} else if (penerbit.length() > 45) {
JOptionPane.showMessageDialog(view, "Penerbit tidak boleh lebih dari 45 karakter");
} else if (String.valueOf(jml_buku).trim().equals("")) {
JOptionPane.showMessageDialog(view, "Jumlah Buku Belum Terisi!!!");
} else if (String.valueOf(jml_buku).length() > 4) {
JOptionPane.showMessageDialog(view, "Jumlah Buku tidak boleh lebih dari 4 digit");
} else {
model.setKode_buku(kode_buku);
model.setJudul_buku(judul_buku);
model.setPengarang(pengarang);
model.setPenerbit(penerbit);
model.setTgl_entry_perpus(tgl_entry_perpus);
model.setJml_buku(jml_buku);
model.setJml_diperpus(jml_diperpus);
try {
model.updateBuku();
JOptionPane.showMessageDialog(view, "Data Buku Berhasil Terupdate!!!");
model.resetBuku();
} catch (Throwable throwable) {

Modul Praktikum Pemrograman Berbasis Objek 91


JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi error di database dengan pesan :",
throwable.getMessage()});
}
}
}
}

public void updatePeminjaman(PeminjamanView view) {


JTable tblTransaksi = view.gettblTransaksi();
int rowCounts = tblTransaksi.getRowCount();
String id_anggota = view.gettxtId_anggota().getText();

if (rowCounts == 0) {
JOptionPane.showMessageDialog(view, "Belum Ada Buku Yang Tersimpan");
} else if (id_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "ID Anggota Belum Terisi!!!");
} else if (id_anggota.length() > 6) {
JOptionPane.showMessageDialog(view, "ID Anggota tidak boleh lebih dari 6
karakter");
} else {
for (int i = 0; i < tblTransaksi.getRowCount(); i++) {
String Kode_buku = (String) tblTransaksi.getValueAt(i, 0);
model.setKode_buku(Kode_buku);
try {
model.updatePinjamBuku();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program",
throwable.getMessage()});
}
}
JOptionPane.showMessageDialog(view, "Data Buku Berhasil Terupdate");
}
}

public void updatePengembalian(PengembalianView view) {


JTable tblTransaksi = view.getTblTransaksi();

for (int i = 0; i < tblTransaksi.getRowCount(); i++) {


model.setKode_buku((String) tblTransaksi.getValueAt(i, 2));
try {
model.updatePengembalian();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Pada Program",
throwable.getMessage()});
}
}
JOptionPane.showMessageDialog(view, "Data Buku berhasil Terupdate");

Modul Praktikum Pemrograman Berbasis Objek 92


}

public void deleteBuku(DataBukuView view) {


if (view.gettblBuku().getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(view, "Pilih Record Yang Akan Dihapus");
} else {
if (JOptionPane.showConfirmDialog(view, "Anda yakin ingin menghapus data Buku
ini?") == JOptionPane.OK_OPTION) {
String Kode_buku = view.gettxtKode_buku().getText();
model.setKode_buku(Kode_buku);
try {
model.deleteBuku();
JOptionPane.showMessageDialog(view, "Data Buku Berhasil Terhapus!!!");
model.resetBuku();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi error di database dengan pesan :",
throwable.getMessage()});
}
}
}
}
}

Berikut ini adalah review gambaran dari projek perpus yang telah dibuat berserta
package-package yang ada dari Bab I hingga Bab VII :

Modul Praktikum Pemrograman Berbasis Objek 93


BAB VIII UTS

Modul Praktikum Pemrograman Berbasis Objek 94


BAB IX

VIEW (Form Transaksi)

 Form Transaksi Peminjaman

Berikut langkah-langkah pengerjaan form PeminjamanView.java :

1. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama

kelas PeminjamanView.

Desain form seperti gambar dibawah ini, dengan cara drag and drop objek yang dibutuhkan

pada Usu Library.

Modul Praktikum Pemrograman Berbasis Objek 95


Ketentuan Properties pada Form Peminjaman :

Nama Objek Ketarangan pada Properties


Panel, Untuk Backdround form
Toolbar, Untuk background judul
Label Judul Text : .:: Form Peminjaman Buku ::.
Button Tambah, Variable Name : btnTambah
Text : Tambah

Button Simpan, Variable Name : btnSimpan


Text : Simpan

Button Hapus, Variable Name : btnHapus


Text : Hapus

Button Batal, Variable Name : btnBatal


Text : Batal

Button Keluar Variable Name : btnKeluar


Text : Keluar

TextBox ID Anggota, Variable Name : txtId_anggota


Text : <kosongkan>

TextBox Kode Buku, Variable Name : txtKode_buku


Text : < kosongkan>

JDateChooser Tgl.Pengembalian Variable Name : dtTgl_kembali

JTable Tabel Transaksi Variable Name : tblTransaksi

Note : untuk objek JDateChooser, download terlebih dahulu Library “jcalendar”.

Secara default objek JDateChooser belum tersedia pada Editor Netbeans, maka lakukan

langkah berikut ini ketika sudah memiliki Library jcalendar:

1. Copy library jcalendar yang telah dimiliki kedalam folder Libraries projek perpus.

2. Dalam kondisi Form Peminjaman sedang terbuka, Klik kanan kotak objek Palette,

lalu pilih “Palette Manager”.

3. Pada Palette Manager, pilih “Add from JAR”, kemudian cari library jcalendar yang

sudah dicopy kedalam libraries projek perpus.

4. Lalu pipih komponen JDateChooser, lalu klik Next.

Modul Praktikum Pemrograman Berbasis Objek 96


5. Masukan kedalam Folder Swing Controls, lalu klik Finish. Maka JDateChooser siap

digunakan pada kotak Palette.

Modul Praktikum Pemrograman Berbasis Objek 97


Kode Program pada Form PeminjamanView.java :

package perpus.view;

import com.toedter.calendar.JDateChooser;
import perpus.controller.BukuController;
import perpus.controller.PinjamController;
import perpus.koneksi.BukuKoneksi;
import perpus.entity.Buku;
import perpus.error.BukuException;
import perpus.model.BukuModel;
import perpus.model.PeminjamanModel;
import perpus.service.BukuDao;
import perpus.view.usu.TextBox;
import java.awt.Color;
import java.awt.Font;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class PeminjamanView extends javax.swing.JFrame {

private PeminjamanModel peminjamanModel;


private PinjamController peminjamanController;
private BukuModel bukuModel;
private BukuController bukuController;
DefaultTableModel tableModel = new DefaultTableModel(
new Object[][]{}, new String[]{"Kode Buku", "Judul", "Pengarang", "Penerbit"}) {

@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;

Modul Praktikum Pemrograman Berbasis Objek 98


}
};
private int total;

/**
* Creates new form PeminjamanKasirView
*/
public PeminjamanView() {

peminjamanModel = new PeminjamanModel();


peminjamanController = new PinjamController();
peminjamanController.setModel(peminjamanModel);

bukuModel = new BukuModel();


bukuController = new BukuController();
bukuController.setModel(bukuModel);

initComponents();
setTitle("Form Peminjaman Aplikasi Perpustakaan");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setExtendedState(MAXIMIZED_BOTH);

tblTransaksi.setModel(tableModel);
tblTransaksi.getTableHeader().setReorderingAllowed(false);
tblTransaksi.getTableHeader().setFont(new Font("Segoe UI", Font.PLAIN, 16));
tblTransaksi.getTableHeader().setBackground(Color.CYAN);
}

public TextBox gettxtKode_buku() {


return txtKode_buku;
}

public TextBox gettxtId_anggota() {


return txtId_anggota;
}

public JDateChooser getdtTgl_kembali() {


return dtTgl_kembali;
}

public JTable gettblTransaksi() {


return tblTransaksi;
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">

Modul Praktikum Pemrograman Berbasis Objek 99


private void initComponents() {

panel1 = new perpus.view.usu.Panel();


toolbar1 = new perpus.view.usu.Toolbar();
label1 = new perpus.view.usu.Label();
label2 = new perpus.view.usu.Label();
label3 = new perpus.view.usu.Label();
txtId_anggota = new perpus.view.usu.TextBox();
txtKode_buku = new perpus.view.usu.TextBox();
jScrollPane2 = new javax.swing.JScrollPane();
tblTransaksi = new javax.swing.JTable();
btnSimpan = new perpus.view.usu.Button();
btnBatal = new perpus.view.usu.Button();
BtnKeluar = new perpus.view.usu.Button();
btnTambah = new perpus.view.usu.Button();
label4 = new perpus.view.usu.Label();
dtTgl_kembali = new com.toedter.calendar.JDateChooser();
btnHapus = new perpus.view.usu.Button();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

panel1.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

toolbar1.setRollover(true);

label1.setText(".:: Form Peminjaman Buku ::.");


label1.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
toolbar1.add(label1);

label2.setText("ID. Anggota");
label2.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

label3.setText("Kode Buku");
label3.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

txtKode_buku.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtKode_bukuActionPerformed(evt);
}
});

tblTransaksi.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"

Modul Praktikum Pemrograman Berbasis Objek 100


}
));
jScrollPane2.setViewportView(tblTransaksi);

btnSimpan.setText("Simpan");
btnSimpan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSimpanActionPerformed(evt);
}
});

btnBatal.setText("Batal");
btnBatal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBatalActionPerformed(evt);
}
});

BtnKeluar.setText("Keluar");
BtnKeluar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnKeluarActionPerformed(evt);
}
});

btnTambah.setText("Tambah");
btnTambah.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnTambahActionPerformed(evt);
}
});

label4.setText("Tgl. Pengembalian");
label4.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

btnHapus.setText("Hapus");
btnHapus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnHapusActionPerformed(evt);
}
});

javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(panel1);


panel1.setLayout(panel1Layout);
panel1Layout.setHorizontalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(toolbar1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(32, 32, 32)

Modul Praktikum Pemrograman Berbasis Objek 101


.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI
NG)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE,
777, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
107, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G, false)
.addComponent(txtId_anggota,
javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
.addComponent(txtKode_buku,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(154, 154, 154)
.addComponent(label4,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addComponent(dtTgl_kembali,
javax.swing.GroupLayout.PREFERRED_SIZE, 181,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createSequentialGroup()
.addGap(31, 31, 31)
.addComponent(btnTambah,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
panel1Layout.createSequentialGroup()
.addComponent(btnSimpan,
javax.swing.GroupLayout.PREFERRED_SIZE, 112,
javax.swing.GroupLayout.PREFERRED_SIZE)

Modul Praktikum Pemrograman Berbasis Objek 102


.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(btnHapus, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(BtnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(0, 124, Short.MAX_VALUE))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE, 55,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtId_anggota,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI
NG)
.addComponent(dtTgl_kembali,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)

Modul Praktikum Pemrograman Berbasis Objek 103


.addComponent(txtKode_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 39,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(btnTambah, javax.swing.GroupLayout.PREFERRED_SIZE, 60,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(31, 31, 31)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 188,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(btnSimpan, javax.swing.GroupLayout.PREFERRED_SIZE, 39,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE, 37,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(BtnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE, 38,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnHapus, javax.swing.GroupLayout.PREFERRED_SIZE, 39,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(79, Short.MAX_VALUE))
);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());


getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);

pack();
}// </editor-fold>

private void btnSimpanActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
if(peminjamanController.insertPeminjaman(this) == true) {
bukuController.updatePeminjaman(this);
JOptionPane.showMessageDialog(this, "Transaksi Peminjaman Berhasil
Dilakukan!!!");
}
else {
JOptionPane.showMessageDialog(this, "Transaksi Peminjaman Gagal Dilakukan!!!");
}

Modul Praktikum Pemrograman Berbasis Objek 104


}

private void btnBatalActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
txtId_anggota.setText("");
dtTgl_kembali.setDateFormatString("");
for (int i = tblTransaksi.getRowCount() - 1; i >= 0; i--) {
total -= (Integer) tblTransaksi.getValueAt(i, 2);
tableModel.removeRow(i);
}
inisialisasi_tabel();

private void BtnKeluarActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
this.dispose();
}

private void btnTambahActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
Buku buku = new Buku();
try {
BukuDao dao = BukuKoneksi.getBukuDao();
try {
buku = dao.getBuku(txtKode_buku.getText());
tableModel.addRow(new Object[]{
txtKode_buku.getText(),
buku.getJudul_buku(),
buku.getPengarang(),
buku.getPenerbit()
});
inisialisasi_tabel();

} catch (BukuException ex) {


Logger.getLogger(PeminjamanView.class.getName()).log(Level.SEVERE, null,
ex);
}

} catch (SQLException ex) {


Logger.getLogger(PeminjamanView.class.getName()).log(Level.SEVERE, null, ex);
}
}

private void txtKode_bukuActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
btnTambahActionPerformed(evt);
}

private void btnHapusActionPerformed(java.awt.event.ActionEvent evt) {

Modul Praktikum Pemrograman Berbasis Objek 105


// TODO add your handling code here:
if (tblTransaksi.getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(this, "Pilih Record Yang Akan Dihapus");
}
int[] rows = tblTransaksi.getSelectedRows();
for (int i = 0; i < rows.length; i++) {
tableModel.removeRow(rows[i] - i);
}
inisialisasi_tabel();
}

// Variables declaration - do not modify


private perpus.view.usu.Button BtnKeluar;
private perpus.view.usu.Button btnBatal;
private perpus.view.usu.Button btnHapus;
private perpus.view.usu.Button btnSimpan;
private perpus.view.usu.Button btnTambah;
private com.toedter.calendar.JDateChooser dtTgl_kembali;
private javax.swing.JScrollPane jScrollPane2;
private perpus.view.usu.Label label1;
private perpus.view.usu.Label label2;
private perpus.view.usu.Label label3;
private perpus.view.usu.Label label4;
private perpus.view.usu.Panel panel1;
private javax.swing.JTable tblTransaksi;
private perpus.view.usu.Toolbar toolbar1;
private perpus.view.usu.TextBox txtId_anggota;
private perpus.view.usu.TextBox txtKode_buku;
// End of variables declaration

private void inisialisasi_tabel() {


tblTransaksi.setModel(tableModel); //To change body of generated methods, choose
Tools | Templates.
}
}
Tampilan Running Form Peminjaman Buku :

Modul Praktikum Pemrograman Berbasis Objek 106


 PinjamController.java

Agar Form Peminjaman dapat Running, buat terlebih dahulu Controller untuk

Peminjaman. Buat kelas java baru pada package “controller” lalu beri nama

“PinjamController”.

Kode Program PinjamController.java :

package perpus.controller;

import java.sql.SQLException;
import perpus.model.PeminjamanModel;
import perpus.view.PengembalianView;
import perpus.view.PeminjamanView;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import perpus.error.PeminjamanException;
public class PinjamController {
private PeminjamanModel model;

public void setModel(PeminjamanModel model) {


this.model = model;
}

public void resetPeminjaman(PeminjamanView view) {


model.resetPeminjaman();
}

public boolean insertPeminjaman(PeminjamanView view) {

JTable tblTransaksi = view.gettblTransaksi();


Date tgl_pinjam = new Date();
Date tgl_batas_kembali = (Date) view.getdtTgl_kembali().getDate();
String id_anggota = view.gettxtId_anggota().getText();

Modul Praktikum Pemrograman Berbasis Objek 107


Integer denda = 0;

if (id_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "ID Anggota Belum Terisi!!!");
} else if (id_anggota.length() > 6) {
JOptionPane.showMessageDialog(view, "ID Anggota tidak boleh lebih dari 6
karakter");
} else if (tgl_batas_kembali.compareTo(new Date()) <= 0) {
JOptionPane.showMessageDialog(view, "Tanggal Pengembalian tidak boleh tanggal
yang telah lalu");
} else if (tblTransaksi.getRowCount() == 0) {
JOptionPane.showMessageDialog(view, "Belum Ada Buku Yang Dipilih!!!");
} else {
for (int i = 0; i < tblTransaksi.getRowCount(); i++) {
model.setTgl_pinjam(tgl_pinjam);
model.setTgl_batas_kembali(tgl_batas_kembali);
model.setId_anggota(id_anggota);
model.setKode_buku((String) tblTransaksi.getValueAt(i, 0));
model.setDenda(denda);

try {
model.insertPeminjaman();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Pada Program!!!",
throwable.getMessage()});
}
}
return true;
}
return false;
}

public void updatePengembalian(PengembalianView view) {


Integer denda = Integer.parseInt(view.gettxtDenda().getText());
Date tgl_kembali = new Date();
JTable tabelPeminjaman = view.getTblTransaksi();

if (view.gettxtDenda().getText().equals("")) {
JOptionPane.showMessageDialog(view, "Isikan Denda dengan nilai 0 jika
pengembalian tepat waktu");
} else {
model.setId_pinjam((Integer) tabelPeminjaman.getValueAt(0, 0));
model.setTgl_kembali(tgl_kembali);
model.setDenda(denda);
try {
model.updatePengembalian();
} catch (SQLException | PeminjamanException throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Pada Program",

Modul Praktikum Pemrograman Berbasis Objek 108


throwable.getMessage()});
}
for (int i = 1; i < tabelPeminjaman.getRowCount(); i++) {
model.setId_pinjam((Integer) tabelPeminjaman.getValueAt(i, 0));
model.setTgl_kembali(tgl_kembali);
model.setDenda(0);

try {
model.updatePengembalian();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Pada Program",
throwable.getMessage()});
}
}
JOptionPane.showMessageDialog(view, "Transaksi pengembalian berhasil
disimpan");
}
}
}

Modul Praktikum Pemrograman Berbasis Objek 109


BAB X

VIEW (Form Transaksi Lanjutan)

 Form Transaksi Pengembalian

Berikut langkah-langkah pengerjaan form PengembalianView.java :

2. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama

kelas PengembalianView.

Desain form seperti gambar dibawah ini, dengan cara drag and drop objek yang dibutuhkan

pada Usu Library.

Ketentuan Properties pada Form Pengembalian :

Modul Praktikum Pemrograman Berbasis Objek 110


Nama Objek Ketarangan pada Properties
Panel, Untuk Backdround form
Toolbar, Untuk background judul
Label Judul Text : .:: Form Pengembalian Buku ::.
Button Lihat Buku Yang Dipinjam, Variable Name : btnLihat
Text : Lihat Buku yang Dipinjam

Button Simpan, Variable Name : btnSimpan


Text : Simpan

Button Batal, Variable Name : btnBatal


Text : Batal

Button Keluar Variable Name : btnKeluar


Text : Keluar

TextBox ID Anggota, Variable Name : txtId_anggota


Text : <kosongkan>

TextBox Denda, Variable Name : txtDenda


Text : < kosongkan>

JTable Tabel Transaksi Variable Name : tblTransaksi

Kode Program pada Form PengembalianView.java :

package perpus.view;

import perpus.controller.BukuController;
import perpus.controller.PinjamController;
import perpus.koneksi.PeminjamanKoneksi;
import perpus.entity.Peminjaman;
import perpus.error.PeminjamanException;
import perpus.model.BukuModel;
import perpus.model.PeminjamanModel;
import perpus.model.TabelPengembalianModel;
import perpus.model.event.PeminjamanListener;
import perpus.service.PeminjamanDao;
import perpus.view.usu.TextBox;
import java.awt.Color;
import java.awt.Font;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;

Modul Praktikum Pemrograman Berbasis Objek 111


import javax.swing.event.ListSelectionListener;

public class PengembalianView extends javax.swing.JFrame implements


PeminjamanListener, ListSelectionListener{

private PeminjamanModel peminjamanModel;


private PinjamController pinjamController;
private BukuModel bukuModel;
private BukuController bukuController;
private TabelPengembalianModel tableModel;

/**
* Creates new form PeminjamanKasirView
*/
public PengembalianView() {
tableModel = new TabelPengembalianModel();

peminjamanModel = new PeminjamanModel();


pinjamController = new PinjamController();
pinjamController.setModel(peminjamanModel);

bukuModel = new BukuModel();


bukuController = new BukuController();
bukuController.setModel(bukuModel);

initComponents();
setTitle("Form Pengembalian Aplikasi Perpustakaan");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setExtendedState(MAXIMIZED_BOTH);

tblTransaksi.getSelectionModel().addListSelectionListener(this);
tblTransaksi.setModel(tableModel);
tblTransaksi.getTableHeader().setReorderingAllowed(false);
tblTransaksi.getTableHeader().setFont(new Font("Segoe UI", Font.PLAIN, 16));
tblTransaksi.getTableHeader().setBackground(Color.CYAN);
}

public TextBox gettxtDenda() {


return txtDenda;
}

public TextBox gettxtId_anggota() {


return txtId_anggota;
}

public JTable gettblTransaksi() {


return tblTransaksi;
}
/**
* This method is called from within the constructor to initialize the form.

Modul Praktikum Pemrograman Berbasis Objek 112


* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

panel1 = new perpus.view.usu.Panel();


toolbar1 = new perpus.view.usu.Toolbar();
label1 = new perpus.view.usu.Label();
label2 = new perpus.view.usu.Label();
label3 = new perpus.view.usu.Label();
txtId_anggota = new perpus.view.usu.TextBox();
txtDenda = new perpus.view.usu.TextBox();
jScrollPane2 = new javax.swing.JScrollPane();
tblTransaksi = new javax.swing.JTable();
btnSimpan = new perpus.view.usu.Button();
btnBatal = new perpus.view.usu.Button();
BtnKeluar = new perpus.view.usu.Button();
btnLihat = new perpus.view.usu.Button();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

panel1.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

toolbar1.setRollover(true);

label1.setText(".:: Form Pengembalian Buku ::.");


label1.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
toolbar1.add(label1);

label2.setText("ID. Anggota");
label2.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

label3.setText("Denda");
label3.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N

txtId_anggota.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtId_anggotaActionPerformed(evt);
}
});

txtDenda.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtDendaActionPerformed(evt);
}
});

tblTransaksi.setModel(new javax.swing.table.DefaultTableModel(

Modul Praktikum Pemrograman Berbasis Objek 113


new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane2.setViewportView(tblTransaksi);

btnSimpan.setText("Simpan");
btnSimpan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSimpanActionPerformed(evt);
}
});

btnBatal.setText("Batal");
btnBatal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBatalActionPerformed(evt);
}
});

BtnKeluar.setText("Keluar");
BtnKeluar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnKeluarActionPerformed(evt);
}
});

btnLihat.setText("Lihat Buku Yang Dipinjam");


btnLihat.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnLihatActionPerformed(evt);
}
});

javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(panel1);


panel1.setLayout(panel1Layout);
panel1Layout.setHorizontalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(toolbar1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(32, 32, 32)

Modul Praktikum Pemrograman Berbasis Objek 114


.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI
NG)
.addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.PREFERRED_SIZE, 777,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
107, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G, false)
.addComponent(txtId_anggota,
javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
.addComponent(txtDenda, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(31, 31, 31)
.addComponent(btnLihat, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(295, 295, 295))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
panel1Layout.createSequentialGroup()
.addComponent(btnSimpan,
javax.swing.GroupLayout.PREFERRED_SIZE, 112,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(BtnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(0, 64, Short.MAX_VALUE))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE, 55,
javax.swing.GroupLayout.PREFERRED_SIZE)

Modul Praktikum Pemrograman Berbasis Objek 115


.addGap(18, 18, 18)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtId_anggota,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtDenda, javax.swing.GroupLayout.PREFERRED_SIZE,
39, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(btnLihat, javax.swing.GroupLayout.PREFERRED_SIZE, 60,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 188,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)

.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(btnSimpan, javax.swing.GroupLayout.PREFERRED_SIZE, 39,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE, 37,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(BtnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE, 38,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(79, Short.MAX_VALUE))
);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());


getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

Modul Praktikum Pemrograman Berbasis Objek 116


);

pack();
}// </editor-fold>

private void btnSimpanActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
pinjamController.updatePengembalian(this);
bukuController.updatePengembalian(this);
btnLihatActionPerformed(evt);
txtId_anggota.setText(null);
txtDenda.setText(null);

private void btnBatalActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
txtId_anggota.setText("");
for (int i = tblTransaksi.getRowCount() - 1; i >= 0; i--) {
tableModel.remove(i);
}
inisialisasi_tabel();
}

private void BtnKeluarActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
this.dispose();
}

private void btnLihatActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
try {
PeminjamanDao dao = PeminjamanKoneksi.getPeminjamanDao();
try {
tableModel.setList(dao.getPeminjaman(txtId_anggota.getText()));
tableModel.fireTableDataChanged();
inisialisasi_tabel();
} catch (PeminjamanException ex) {
Logger.getLogger(PengembalianView.class.getName()).log(Level.SEVERE, null,
ex);
}
} catch (SQLException ex) {
Logger.getLogger(PengembalianView.class.getName()).log(Level.SEVERE, null,
ex);
}
}

private void txtDendaActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:

Modul Praktikum Pemrograman Berbasis Objek 117


}

private void txtId_anggotaActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
btnLihatActionPerformed(evt);
}

// Variables declaration - do not modify


private perpus.view.usu.Button BtnKeluar;
private perpus.view.usu.Button btnBatal;
private perpus.view.usu.Button btnLihat;
private perpus.view.usu.Button btnSimpan;
private javax.swing.JScrollPane jScrollPane2;
private perpus.view.usu.Label label1;
private perpus.view.usu.Label label2;
private perpus.view.usu.Label label3;
private perpus.view.usu.Panel panel1;
private javax.swing.JTable tblTransaksi;
private perpus.view.usu.Toolbar toolbar1;
private perpus.view.usu.TextBox txtDenda;
private perpus.view.usu.TextBox txtId_anggota;
// End of variables declaration

private void inisialisasi_tabel() {


tblTransaksi.setModel(tableModel); //To change body of generated methods, choose
Tools | Templates.
}

public JTable getTblTransaksi() {


return tblTransaksi; //To change body of generated methods, choose Tools | Templates.
}

@Override
public void onChange(PeminjamanModel model) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of
generated methods, choose Tools | Templates.
}

@Override
public void onInsert(Peminjaman peminjaman) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of
generated methods, choose Tools | Templates.
}

@Override
public void onUpdate(Peminjaman peminjaman) {
int index = tblTransaksi.getSelectedRow();
tableModel.set(index, peminjaman); //To change body of generated methods, choose
Tools | Templates.
}

Modul Praktikum Pemrograman Berbasis Objek 118


@Override
public void onDelete() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of
generated methods, choose Tools | Templates.
}

@Override
public void valueChanged(ListSelectionEvent lse) {
Peminjaman model = tableModel.get(tblTransaksi.getSelectedRow());
txtDenda.setText(model.getDenda() + ""); //To change body of generated methods,
choose Tools | Templates.
}

Tampilan Running Form Pengembalian.java :

Modul Praktikum Pemrograman Berbasis Objek 119


 Pengujian Black Box Testing
Setelah penulisan kode program pada project selesai dikerjakan, langkah selanjutnya

dari pengembangan aplikasi adalah melakukan pengujian. Karena projek pada Modul

Praktikum ini masih terbilang sederhana, maka pengujian yang sesuai adalah menggunakan

pengujian Blackbox Testing.

Blackbox Testing adalah tipe pengujian yang memperlakukan perangkat lunak yang

tidak diketahui kinerja internalnya. Sehingga para tester memandang perangkat lunak seperti

layaknya sebuah “kotak hitam” yang tidak penting dilihat isinya, tapi cukup dikenai proses

testing di bagian luar.

Beberapa alasan keuntungan digunakannya metode pengujian ini yaitu:

1. Penguji tidak harus dari seseorang yang memiliki kemampuan teknis di bidang

pemrograan.

2. Kesalahan dari perangkat lunak ataupun bug seringkali ditemukan oleh komponen

tester yang berasal dari pengguna.

3. Hasil dari blackbox testing dapat memperjelas kontradiksi ataupun keracunan yang

mungkin timbul dari eksekusi sebuah perangkat lunak.

4. Proses testing dapat dilakukan lebih cepat dibandingkan whitebox testing.

Beberapa teknik yang biasa digunakan untuk merancang pengujian black box:

1. Equivalence Partitioning

Dalam teknik ini, pengujian akan melibatkan pembagian nilai input kedalam bagian

nilai valid dan tidak valid serta pemilihan data test.

2. Boundary Value Analisys

Dalam teknik ini, pengujian akan melibatkan penentuan-penentuan nilai input dan

memilih beberapa nilai dari batasan-batasan tersebut baik luar maupun dalam dari

batasan-batasan tersebut sebagai data test.

Modul Praktikum Pemrograman Berbasis Objek 120


3. Cause Effect Graphic

Dalam teknik ini, pengujian akan melibatkan identifikasi kondisi input (percabangan

ataupun perulangan)

Berikut beberapa contoh penerapan pengujiannya dalam project ini :

1. Pengujian Form Login

Tabel Skenario dan Hasil Pengujian Equivalence Partitioning Form Login Admin
Hasil yang Skenario Hasil
No Halaman Test Case
diharapkan Pengujian
1 Halaman login Menguji input data test Berhasil Memasuka Inputan valid
Admin username dan masuk n username baik berupa
password, dengan kedalam dan huruf atau
karakter huruf dan halaman password angka untuk
angka sesuai dengan utama dengan login admin
data yang ada pada aplikasi huruf
basis data admin maupun
angka yang
sesuai
dengan data
pada basis
data

2 Halaman login Menguji input data test Aplikasi Memasuka Inputan tidak
Admin username dan menahan n username valid baik
password, dengan hasil input dan berupa huruf
karakter huruf dan dan password atau angka
angka tidak sesuai menolak dengan untuk login
dengan data yang ada untuk huruf admin
pada basis data masuk maupun
kedalam angka yang
halaman tidak sesuai
utama dengan data

Modul Praktikum Pemrograman Berbasis Objek 121


aplikasi pada basis
admin data

2. Pengujian Data Anggota

Skenario dan Hasil Pengujian Boundary Value Analisys Form Data Anggota

Hasil yang Skenario Hasil


No Halaman Test Case
diharapkan Pengujian
1 Halaman Form Menguji input data test Aplikasi Memasuka Aplikasi akan
Data Anggota ID Anggota dengan akan n input menahan dan
melebihi batasan menahan Kode input data
maksimal size 6 untuk tidak Anggota hanya bisa
karakter sesuai dapat lebih dari 6 maksimal 6
kebutuhan fungsional melanjutka karakter karakter,
n ketahapan muncul pesan
proses “ID Anggota
selanjutnya tidak boleh
lebih dari 6
karakter”

Modul Praktikum Pemrograman Berbasis Objek 122


3. Pengujian Input Email Data Anggota

Skenario dan Hasil Pengujian Cause Effect Graphic Form Data Anggota

Hasil yang Skenario Hasil


No Halaman Test Case
diharapkan Pengujian
1 Halaman Form Menguji input data test Aplikasi Memasuka Aplikasi akan
Data Anggota Email Anggota dengan akan n input menahan dan
kondisi tidak sesuai menahan Email input data,
format untuk tidak Anggota muncul pesan
dapat dengan “Email Tidak
melanjutka kondisi Valid”
n ketahapan tidak sesuai
proses format
selanjutnya

Modul Praktikum Pemrograman Berbasis Objek 123


BAB XI

PENGARAHAN TUGAS PROJECT

Pada bab ini,

1. Review dan Pengarahan Tugas Projek. Bapak/Ibu Pengajar diharuskan melakukan

pengecekan progress pengerjaan Tugas Projek dari masing-masing kelompok, agar

lebih siap untuk presentasi.

2. Mahasiswa membuat resume dari projek aplikasi perpustakaan yg telah dibuat.

(resume berisi analisa kekurangan dan kelebihan dari projek aplikasi perpustakaan, dan

memberikan saran atas kekurangan dari projek tersebut)

Modul Praktikum Pemrograman Berbasis Objek 124


BAB XII REVIEW
MATERI / QUIZ

Modul Praktikum Pemrograman Berbasis Objek 125


BAB XIII-XV
Demo Program dan
Blackbox Testing

Modul Praktikum Pemrograman Berbasis Objek 126


BAB XVI
UAS

Modul Praktikum Pemrograman Berbasis Objek 127

Anda mungkin juga menyukai