Disusun Oleh :
Ida Bagus Kade Taruna (1705551009)
Putu Ari Suryana Upeksa (1705551025)
Puji syukur terhadap Tuhan Yang Maha Esa, karena atas berkatnya
penyusunan laporan yang berjudul “Aplikasi Manajemen Koperasi Simpan
Pinjam Berbasis Client Server” dapat diselesaikan. Tujuan disusunnya laporan ini
untuk memenuhi tugas akhir dari mata kuliah Pemrograman Jaringan. Tentunya di
dalam penyusunan laporan ini penulis mendapat bantuan dari banyak pihak.
Untuk itu, pada kesempatan ini penulis mengucapkan banyak terima kasih kepada.
1. Gusti Made Arya Sasmita, ST., MT. selaku Dosen Pengampu Mata
Kuliah Pemrograman Jaringan.
2. Teman-teman yang secara tidak langsung ikut berpartisipasi dalam
memberi saran sehingga penyusunan laporan dan project aplikasi
Pemrograman Jaringan dapat selesai tepat pada waktunya.
Semoga laporan “Aplikasi Manajemen Koperasi Simpan Pinjam Berbasis
Client Server” dapat menambah dan memberikan informasi yang bermanfaat bagi
masyarakat, agar wawasan dan pengetahuan dapat berkembang lebih luas lagi.
Laporan ini masih jauh dari kata sempurna, oleh karena itu kritik dan saran yang
bersifat membangun sangat diharapkan demi sempurnanya laporan.
Penulis
2
DAFTAR ISI
KATA PENGANTAR.............................................................................................2
DAFTAR ISI............................................................................................................3
BAB I PENDAHULUAN........................................................................................5
2.1 Sistem.............................................................................................................8
2.2 Koperasi..........................................................................................................9
2.3 Pemrograman Berorientasi Objek................................................................10
2.3.1 Kelas (class).....................................................................................11
2.3.2 Objek (Object)..................................................................................12
2.3.3 Abstaksi (Abstraction).....................................................................12
2.3.4 Enkapsulasi (pembungkus)..............................................................12
2.3.5 Polimorfisme....................................................................................13
2.3.6 Inheritas (Pewarisan)........................................................................13
2.4 Bahasa Pemrograman Java...........................................................................13
2.5 Java Swing....................................................................................................14
2.6 Socket Programming....................................................................................15
2.6.1 Jenis Socket......................................................................................16
2.6.2 Socket TCP dan UDP.......................................................................17
2.6.3 Penggunaan Socket Programming...................................................18
2.7 Port................................................................................................................20
2.8 Model Aplikasi Client Server.......................................................................21
2.9 MySQL JDBC..............................................................................................22
2.10 Kriptografi Transposisi.................................................................................23
BAB III PERANCANGAN SISTEM....................................................................24
3
3.4 Desain Basis Data.........................................................................................27
3.5 Alur Proses Sistem........................................................................................29
BAB IV IMPLEMENTASI DAN PENGUJIAN...................................................31
5.1 Kesimpulan...................................................................................................72
5.2 Saran.............................................................................................................72
DAFTAR PUSTAKA............................................................................................73
4
BAB I
PENDAHULUAN
5
Aplikasi manajemen koperasi yang dibuat menggunakan basis client
server atau socket programming menggunakan bahasa pemrograman Java. Socket
adalah sebuah class yang disediakan oleh beberapa bahasa pemrograman. Dengan
socket, sebuah aplikasi di suatu komputer dapat membuka koneksi untuk
menghubungi aplikasi lain di komputer lainnya. Tentu saja aplikasi di komputer
yang dihubungi menerima koneksi juga menggunakan socket. Dengan kata lain
socket adalah suatu class yang digunakanoleh aplikasi untuk saling berhubungan.
Paradigma pada aplikasi jaringan berlaku model client-server. Aplikasi yang
menginisialisasi koneksi, disebut aplikasi client. Sedangkan aplikasi yang
menerima inisialisasi disebut sebagai aplikasi server. Oleh karena itu, membangun
suatu aplikasi jaringan yang lengkap, maka harus membuat aplikasi client maupun
aplikasi server.
6
1.4 Manfaat Penulisan
Berdasarkan rumusan masalah dan tujuan yang sudah dijelaskan di atas,
dapat dirumuskan beberapa manfaat dari laporan ini sebagai berikut.
1. Dapat menambah wawasan dan pengetahuan seputar sistem client server
atau socket programming.
2. Dapat mengimplementasikan socket programming pada pengembangan
aplikasi dengan bahasa Java.
7
BAB II
LANDASAN TEORI
2.1 Sistem
Sistem adalah suatu kesatuan, baik obyek nyata atau abstrak yang terdiri
dari berbagai komponen atau unsur yang saling berkaitan, saling tergantung,
saling mendukung, dan secara keseluruhan bersatu dalam satu kesatuan untuk
mencapai tujuan tertentu secara efektif dan efisien. Ada juga yang mengatakan
definisi sistem adalah suatu paduan yang terdiri dari beberapa unsur/ elemen yang
dihubungkan menjadi satu kesatuan sehingga memudahkan aliran informasi dan
materi/ energi untuk mewujudkan suatu tujuan tertentu. Suatu sistem dibentuk
oleh unsur-unsur tertentu. Setiap sistem terdiri dari empat unsur, yaitu.
a. Obyek, di dalam sistem terdapat sekumpulan obyek (fisik/ abstrak) dalam
bentuk elemen, bagian, atau variabel.
b. Atribut, sesuatu yang menentukan mutu atau sifat kepemilikan suatu
sistem dan obyeknya.
c. Hubungan internal, setiap elemen saling terikat menjadi satu kesatuan.
d. Lingkungan, tempat atau wilayah dimana sistem berada.
Selain terdapat unsur pembentuk, sebuah sistem juga memiliki elemen.
Elemen pembentuk suatu sistem dapat dibagi menjadi tujuh bagian, yaitu sebagai
berikut.
a. Tujuan, sistem dibuat untuk mencapai tujuan (output) tertentu yang ingin
dicapai.
b. Masukan, semuanya yang masuk ke dalam sistem akan diproses, baik itu
obyek fisik maupun abstrak.
c. Proses, yaitu transformasi dari masukan menjadi keluaran yang lebih
memiliki nilai, misalnya produk atau informasi. Namun juga bisa dapat
berupa hal yang tak berguna, misalnya limbah.
d. Keluaran, ini adalah hasil dari pemrosesan dimana wujudnya bisa dalam
bentuk informasi, saran, cetakan laporan, produk, dan lain-lain.
8
e. Batas, sesuatu yang memisahkan antara sistem dan daerah di luar sistem.
Dalam hal batas akan menentukan konfigurasi, ruang lingkup, dan hal-
hal lainnya.
f. Pengendalian dan Umpan Balik, mekanismenya dapat dilakukan dengan
memakai feedback terhadap keluaran untuk mengendalikan masukan
maupun proses.
g. Lingkungan, segala sesuaut di luar sistem yang berpengaruh pada sistem,
baik menguntungkan maupun merugikan.
2.2 Koperasi
Koperasi Simpan Pinjam adalah lembaga keuangan bukan bank yang
berbentuk koperasi dengan kegiatan usaha menerima simpanan dan memberikan
pinjaman uang kepada para anggotanya dengan bunga yang serendah-rendahnya.
Koperasi simpan pinjam atau biasa disebut koperasi kredit merupakan suatu
bentuk koperasi yang berdiri sendiri dimana anggota-anggotanya adalah orang-
orang atau badan-badan yang tergabung dalam koperasi tersebut. Mereka yang
tidak terdaftar sebagai anggota tidak bisa menyimpan atau meminjam uang dari
koperasi simpan pinjam.
Modal koperasi berasal dari modal pinjaman dan modal sendiri. Modal
pinjaman adalah modal yang dihimpun dari anggota, koperasi lainnya dan atau
anggotanya, bank dan lembaga keuangan lainnya, penerbitan obligasi dan
suratutang lainnya, sumber lain yang sah (berupa modal penyertaan). Sedangkan
yang dimaksud dengan modal sendiri adalah modal yang berasal dari anggota.
Modal sendiri itu berupa: simpanan pokok, simpanan wajib, simpanan bebas atau
sukarela dana cadangan, dan hibah. Peranan dan fungsi lembaga keuangan bukan
bank yang berbentuk Koperasi Simpan Pinjam terhadap anggotanya adalah
sebagai berikut.
a. Peran dan Fungsi Simpanan
Uang simpanan dan tabungan akan lebih aman, terjamin, dan
produktif.
Pengumpulan uang simpanan dan tabungan akan meningkat
jumlahnya dan menjadi investasi pada masa hari tua.
9
Simpanan dan tabungan itu akan diterima kembali secara
keseluruhan apabila pada suatu saat berhenti sebagai anggota
Koperasi Simpan Pinjam.
Mendorong agar timbul hasrat untuk menyimpan atau menabung
pada koperasi.
Pengumpulan dana simpanan dan tabungan menjadi investasi untuk
membantu usaha para anggota melalui penyaluran dana kredit.
10
Ide dasar pada OOP adalah mengkombinasikan data dan fungsi untuk
mengakses data menjadi sebuah kesatuan unit yang dikenal dengan nama objek.
Objek adalah struktur data yang terdiri dari bidang data dan metode bersama
dengan interaksi mereka untuk merancang aplikasi dan program komputer. Semua
data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-
objek. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan
ke objek lainnya.
Pemrograman berorientasi objek bekerja dengan baik ketika dibarengi
dengan Objek-Oriented Analysis And Design Process (OOAD). Jika membuat
program berorientasi objek tanpa OOAD, seperti membangun rumah tanpa
terlebih dahulu penganalisis apa saja yang dibutuhkan oleh rumah itu, tanpa
perencanaan, tanpa blue-print, tanpa menganalisis ruangan apa saja yang
diperlukan, beberapa besar rumah yang akan dibangun dan sebagainya.
11
2.3.2 Objek (Object)
Objek merupakan teknik dalam menyelesaikan masalah yang kerap
muncul dalam pengembangan perangkat lunak. Teknik ini merupakan teknik yang
efektif dalam menemukan cara yang tepat dalam membangun sistem dan menjadi
metode yang paling banyak dipakai oleh para pengembang perangkat lunak.
Orientasi objek merupakan teknik pemodelan sistem riil yang berbasis objek.
Objek adalah entitas yang memiliki atribut, karakter dan kadang kala disertai
kondisi. Objek mempresentasikan sesuai kenyataan seperti siswa,
mempresentasikan dalam bentuk konsep seperti merek dagang, juga bisa
menyatakan visualilasi seperti bentuk huruf (font).
12
2.3.5 Polimorfisme
Polimorfise merupakan suatu fungsionalitas yang diimplikasikan dengan
berbagai cara yang berbeda. Pada program berorientasi objek, pembuat program
dapat memiliki berbagai implementasi untuk sebagian fungsi tertentu.
13
bahasa Java hanya menyediakan konsep object saja. Fitur pemrograman object ini
memang akan memudahkan dalam pembuatan aplikasi yang kompleks, namun di
sisi lain ini juga membuat bahasa Java relatif lebih susah dipelajari terutama bagi
pemula.
Bahasa Java memiliki moto “write once, run anywhere“, yang
menekankan bahwa satu kode program Java yang di tulis, bisa langsung berjalan
di banyak perangkat dan berbagai sistem informasi, tanpa perlu di-compile ulang.
Untuk mendapatkan fitur seperti ini, bahasa Java menggunakan konsep byte
code dan JVM (Java Virtual Machine).
14
dan Applet yang diimplementasi dalam class JFrame, Jdialog, dan
JApplet.
b. Intermediate Container : Merupakan komponen perantara di mana
komponen lainnya akan diletakan. Salah satu contoh container ini adalah
class JPanel.
c. Atomic Component : Merupakan komponen yang memiliki fungsi spesifik
dan biasanya user berinteraksi langsung dengan komponen jenis ini.
Contohnya adalah JButton, JLabel, JTextField, dan JTextArea.
d. Layout Manager : Berfungsi untuk mengatur bagaimana posisi dari
komponen – komponen yang diletakan pada container. Secara default
terdapat 5 macam layout yaitu berupa class BorderLayout, BoxLayout,
FlowLayout, GridBagLayout, dan GridLayout.
e. Event Handling : Untuk menangani event yang dilakukan oleh user
misalnya menekan tombol, mengkilik mouse dan lain – lain.
15
transfer yang sama. Fasilitas-fasilitas yang disediakan oleh mesin unix seperti
rlogin, ssh, ftp, dan lain-lain menggunakan socket sebagai sarana komunikasi
mereka. Socket dibentuk dan digunakan dengan cara yang berbeda. Komunikasi
socket terutama diciptakan untuk tujuan menjembatani komunikasi antara dua
buah program yang dijalankan pada mesin yang berbeda. Jangan khawatir, ini
tentu saja berarti dua program pada mesin yang sama dapat juga saling
berkomunikasi. Kelebihan lain dari komunikasi socket adalah mampu menangani
banyak klien sekaligus (multiple clients).
2.6.1 Jenis Socket
Ada dua golongan atau jenis socket di Unix yang paling umum dipakai
yaitu socket lokal dan socket networking. Penjelasan dari masing-masing socket
dapat dilihat penjelasan dibawah.
a. Socket Lokal atau AF_UNIX
Socket Lokal adalah socket yang melakukan komunikasi dengan
perantaraan sebuah file yang biasanya diletakkan pada direktori /tmp atau /usr/tmp
ataupun /var/tmp. Socket semacam ini digunakan umumnya terbatas untuk
komunikasi antar aplikasi dalam satu mesin.
b. Socket Networking atau AF_INET
Socket Networking ditujukan untuk komunikasi antar aplikasi antar
mesin dalam lingkungan jaringan TCP/IP. Identifikasi socket dilakukan dengan
sebuah service identifier yaitu berupa nomor port TCP/IP yang dapat di sambung
oleh client. Socket Networking memiliki beberapa jenis, yang paling umum
digunakan yaitu:
- Socket Stream atau SOCK_STREAM
Socket Stream adalah socket komunikasi full-duplex berbasis aliran
(stream) data. Pada model komunikasi Socket Stream, koneksi dua
aplikasi harus dalam kondisi tersambung dengan benar untuk dapat
bertukar data. Ini dapat dianalogikan seperti komunikasi telepon. Jika
sambungan telepon di salah satu titik putus, maka komunikasi tidak dapat
terjadi. Koneksi model seperti ini akan menjamin data dapat dipertukarkan
dengan baik, namun memiliki kelemahan dalam hal penggunaan jalur data
yang relatif besar dan tidak boleh terputus.
16
- Socket Datagram atau SOCK_DGRAM
Socket Datagram berkomunikasi dengan cara yang berbeda. Socket ini
tidak membutuhkan koneksi yang tersambung dengan benar untuk
mengirimkan dan menerima data. Model koneksi semacam ini tidak dapat
menjamin data dapat dipertukarkan dengan baik, namun memiliki
keunggulan dalam hal penggunaan jalur data yang minimal. Socket
Datagram dapat dianalogikan dengan komunikasi yang terjadi pada kelas,
misalnya pada saat guru melakukan broadcasting materi pelajaran untuk
diterima oleh setiap murid. Tidak ada yang dapat menjamin materi
pelajaran dapat diterima oleh semua murid dengan baik, kecuali diterapkan
metoda rechecking. Rechecking ini dapat dilakukan baik oleh guru
maupun murid. Guru bertanya untuk memastikan jawaban dari murid
benar, atau murid bertanya untuk memastikan kebenaran materi yang
diterimanya. Socket Datagram pun menggunakan metoda ini untuk
menjamin pengiriman data dapat dilakukan dengan baik.
17
Terdapat perlakuan yang berbeda antara UDP dan TCP, walaupun sama-
sama berfungsi sebagai protokol pertukaran data.
UDP tidak memerlukan proses koneksi terlebih dahulu untuk dapat
mengirimkan data, paket-paket data yang dikirimkan UDP bisa jadi melalui rute
yang berbeda-beda, sehingga hasil yang diterima bisa jadi tidak berurutan.
Contohnya jika aplikasi socket pengirim mengirimkan berturut-turut
pesan 1, pesan 2, dan pesan 3, maka aplikasi socket penerima belum tentu
mendapatkan pesan yang berurutan dimulai dari pesan 1, pesan 2, dan terakhir
pesan 3. Bisa saja pesan 2 terlebih dulu diterima, menyusul pesan-pesan yang lain,
atau berbagai kemungkinan lainnya. Bahkan, dapat terjadi pesan yang dikirimkan
tidak sampai ke penerima karena kegagalan pengiriman paket data.
Tidak demikian halnya dengan stream socket yang menggunakan TCP.
Jenis ini mengharuskan terjadinya koneksi terlebih dahulu, kemudian
mengirimkan paket-paket data secara berurutan, penerima juga dijamin akan
menerima data dengan urutan yang benar, dimulai dari data pertama yang
dikirimkan hingga data terakhir. TCP dapat menangani data yang hilang, rusak,
terpecah, ataupun terduplikasi.
Dari sekilas perbedaan ini, kita dapat menarik kesimpulan bahwa aplikasi
socket yang menggunakan TCP memerlukan pertukaran data dua arah yang valid.
Sedangkan, aplikasi socket yang menggunakan UDP lebih memprioritaskan pada
pengumpulan data.
Karena itu aplikasi socket dengan TCP sering diterapkan untuk aplikasi
chat, transfer file, ataupun transaksi-transaksi penting. Sedangkan aplikasi socket
dengan UDP cocok diterapkan untuk aplikasi monitoring jaringan, game online,
dan aplikasi-aplikasi broadcast.
18
open() sedangkan pada socket kita manggunakan socket(). Pada file deskriptor
yang menjadi tujuan adalah sebuah file, sedangkan pada socket adalah komputer
atau node lain. Intinya ketika kita telah terhubung dengan socket(), maka
antarmukanya sama saja dengan sebuah file. Sebuah abstraksi perangkat lunak
yang digunakan sebagai suatu “terminal” dari suatu hubungan antara dua mesin
atau proses yang saling berinterkoneksi
Penggunaan socket programming memungkinkan adanya komunikasi
antara client dan server. Salah satu contoh sederhana penggunaan socket
programming adalah pembuatan program untuk chatting. Program tersebut
sebenarnya merupakan bentuk aplikasi berupa komunikasi antara client dan
server. Ketika seorang user (client) melakukan koneksi ke chat server, program
akan membuka koneksi ke port yang diberikan, sehingga server perlu membuka
socket pada port tersebut dan “mendengarkan” koneksi yang datang. Socket
sendiri merupakan gabungan antara host-adress dan port adress. Dalam hal ini
socket digunakan untuk komunikasi antara client dan server.
19
2.7 Port
Port adalah mekanisme yang mengizinkan sebuah komputer untuk
mendukung beberapa sesi koneksi dengan komputer lainnya dan program di
dalam jaringan. Port dapat mengidentifikasikan aplikasi dan layanan yang
menggunakan koneksi di dalam jaringan TCP/IP. Sehingga, port juga
mengidentifikasikan sebuah proses tertentu di mana sebuah server dapat
memberikan sebuah layanan kepada klien atau bagaimana sebuah klien dapat
mengakses sebuah layanan yang ada dalam server. Port dapat dikenali dengan
angka 16-Bit (dua byte) yang disebut dengan Port Number dan diklasifikasikan
dengan jenis protokol transport apa yang digunakan, ke dalam Port TCP dan Port
UDP. Karena memiliki angka 16-bit, maka total maksimum jumlah port untuk
setiap protokol transport yang digunakan adalah 65536 buah. Dilihat dari
penomorannya, port UDP dan TCP dibagi menjadi tiga jenis, yakni sebagai
berikut.
a. Well-known Port: yang pada awalnya berkisar antara 0 hingga 255 tapi
kemudian diperlebar untuk mendukung antara 0 hingga 1023. Port
number yang termasuk ke dalam well-known port, selalu
merepresentasikan layanan jaringan yang sama, dan ditetapkan oleh
Internet Assigned Number Authority (IANA). Beberapa di antara port-
port yang berada di dalam range Well-known port masih belum
ditetapkan dan direservasikan untuk digunakan oleh layanan yang bakal
ada di masa depan. Well-known port didefinisikan dalam RFC 1060.
b. Registered Port: Merupakan Port-port yang digunakan oleh vendor-
vendor komputer atau jaringan yang berbeda untuk mendukung aplikasi
dan sistem operasi yang mereka buat. Registered port juga diketahui dan
didaftarkan oleh IANA tapi tidak dialokasikan secara permanen,
sehingga vendor lainnya dapat menggunakan port number yang sama.
Range registered port berkisar dari 1024 hingga 49151 dan beberapa port
di antaranya adalah Dynamically Assigned Port.
c. Dynamically Assigned Port: merupakan port-port yang ditetapkan oleh
sistem operasi atau aplikasi yang digunakan untuk melayani request dari
20
pengguna sesuai dengan kebutuhan. Dynamically Assigned Port berkisar
dari 1024 hingga 65536 dan dapat digunakan atau dilepaskan sesuai
kebutuhan.
Obyek socket pada sisi client dan server berbeda sedikit. Pada sisi
aplikasi server, suatu socket server dibentuk dan melakukan operasi
listen/menunggu. Operasi ini pada intinya menunggu permintaan koneksi dari sisi
client. Sedangkan pada sisi client, dibentuk suatusocket biasa. Pada saat socket
client, informasi alamat socket server dilewatkan sebagai argumen dan socket
client akan otomatis mencoba meminta koneksi ke socket server. Pada saat
permintaan koneksi client sampai pada server, maka server akan membuat suatu
socket biasa. Socket iniyang nantinya akan berkomunikasi dengan socket pada sisi
client. Setelah itu socket serverdapat kembali melakukan listen untuk menunggu
permintaan koneksi dari client lainnya. Langkah ini umumnya hanya dilakukan
jika aplikasi server mengimplementasikan multithreading. Setelah tercipta koneksi
antara client dan server, maka keduanya dapat saling bertukar pesan. Salah satu
atau keduanya kemudian dapat mengakhiri komunikasi dengan menutup socket.
21
Untuk protokol UDP, perbedaanya adalah socket di sisi server sama
dengan socket disisi client, dan tidak ada operasi listen pada sisi server. Kemudian
saat paket data dikirimkan,alamat socket penerima harus disertakan sebagai
argumen.Program Aplikasi Client Server bisa dibuat dengan menggunakan Visual
Basic 6, NET,Delphi, dan lain sebagainya. Sebagai contoh yaitu Aplikasi Client
Server sederhana denganDelphi dimana tugas aplikasi server cukup sederhana,
yaitu hanya siap sedia menerima datayang masuk pada sebuah port.
22
Sebuah program Java yang mengakses data di basis data harus
menggunakan JDBC driver yang khusus untuk basis data tersebut. Ketika sebuah
perusahaan beralih dari satu basis data ke basis data lain, maka program Java
harus disesuaikan untuk menggunakan JDBC driver yang khusus untuk basis data
baru tersebut. Demikian pula agar program Java dapat berinteraksi dengan basis
data MySQL, harus digunakan JDBC driver dari MySQL. MySQL JDBC Driver
disebut juga dengan MySQL Connector/J.
23
BAB III
PERANCANGAN SISTEM
24
3.2 Use Case Diagram
Use case diagram koperasi simpan pinjam menjelaskan gambaran grafis
dari beberapa atau semua actor, use case, dan interaksi diantaranya yang
memperkenalkan suatu sistem. Use case diagram tidak menjelaskan secara detil
tentang penggunaan use case, tetapi hanya memberi gambaran singkat hubungan
antara use case, aktor, dan sistem. Di dalam use case ini akan diketahui fungsi-
fungsi apa saja yang berada pada sistem yang dibuat. Berikut merupakan use case
diagram dari koperasi simpan pinjam.
25
3.3 Arsitektur Sistem
Sistem aplikasi manajemen koperasi simpan pinjam menggunakan
arsitektur client server untuk melakukan pengolahan. Client akan meminta request
ke server dengan menggunakan komunikasi melalui socket. Aplikasi koperasi ini
akan menggunakan sebuah thread bernama client handler untuk melakukan proses
pengolahan. Alasannya sederhana, tidak ingin hanya satu klien untuk terhubung
ke server pada waktu tertentu tetapi banyak klien secara bersamaan. Arsitektur
sistem dengan thread mendukung banyak klien secara bersamaan. Untuk alasan
ini, harus menggunakan thread di sisi server sehingga setiap kali permintaan klien
datang, thread terpisah dapat ditugaskan untuk menangani setiap permintaan.
Umumnya, untuk menerapkan arsitektur ini akan membuat tiga file java,
Server.java, Client.java, dan clientHandler.java. File server berisi kelas yaitu
Server (kelas publik untuk membuat server), file clientHandler (untuk menangani
klien mana pun menggunakan multithreading). File client hanya berisi satu Klien
kelas publik (untuk membuat klien). Di bawah ini adalah diagram alir bagaimana
tiga kelas ini berinteraksi satu sama lain.
26
Proses pada Class Server yaitu membuat objek thread setelah mendapatkan stream
dan nomor port.
a. Membuat Koneksi: Objek soket server diinisialisasi dan di dalam
beberapa saat loop objek soket terus menerima koneksi masuk.
b. Memperoleh Streaming: Objek inputstream dan objek outputstream
diekstraksi dari objek socket permintaan saat ini.
c. Membuat objek handler: Setelah mendapatkan stream dan nomor port,
objek clientHandler baru (kelas di atas) dibuat dengan parameter ini.
d. Menjalankan metode start (): Metode start () dipanggil pada objek thread
yang baru dibuat ini.
Proses pada Class ClientHandler menggunakan thread yang terpisah untuk setiap
permintaan, cara kerja dan implementasi kelas yang memperluas thread kelas
ClientHandler. Objek kelas ini akan dipakai setiap kali permintaan datang.
a. Pertama-tama kelas ini memperluas Thread sehingga objek-objeknya
mengasumsikan semua properti Thread.
b. Kedua, konstruktor kelas ini membutuhkan tiga parameter, yang secara
unik dapat mengidentifikasi setiap permintaan yang masuk, mis. Socket,
DataInputStream untuk dibaca dan DataOutputStream untuk menulis.
Setiap kali menerima permintaan klien, server mengekstrak nomor
portnya, objek DataInputStream dan objek DataOutputStream dan
membuat objek thread baru dari kelas ini dan memanggil metode start () di
atasnya. Catatan: Setiap permintaan akan selalu memiliki triplet soket,
aliran input dan aliran output. Ini memastikan bahwa setiap objek dari
kelas ini menulis pada satu aliran tertentu dan bukan pada beberapa aliran.
c. Di dalam metode class run() ini, melakukan operasi pengolahan sesuai
permintaan client, membaca jawaban dari objek aliran input dan karenanya
menulis output pada objek aliran output.
27
perangkat lunak tertentu untuk memanipulasinya. Database merupakan sistem
komponen informasi karena berfungsi sebagai basis yang menyediakan informasi
bagi para pemakainya. Rancangan basis data tersebut terdiri dari beberapa tahapan
yaitu normalisasi dan rancangan file. Berikut merupakan desain basis data untuk
sistem koperasi simpan pinjam.
No Tabel Fungsi
1 tb_pegawai Berfungsi untuk menyimpan data pegawai
koperasi. Tabel ini juga menyimpan
username dan password yang akan
digunakan oleh pegawai untuk melakukan
login.
2 tb_nasabah Berfungsi untuk menyimpan informasi
data nasabah, mencakup nama lengkap,
alamat, pekerjaan, dan no telepon.
3 tb_jenis_transaksi Berfungsi untuk menyimpan jenis-jenis
transaksi yang tersedia pada koperasi
seperti simpanan dan penarikan.
4 tb_transaksi Berfungsi untuk menyimpan data hasil
transaksi yang dilakukan. Transaksi yang
dilakukan meliputi simpanan dan
penarikan.
5 tb_pinjaman Berfungsi untuk menyimpan data pinjaman
dari seorang nasabah, meliputi besaran
28
pinjaman, bunga, dan total angsuran.
6 tb_angsuran Berfungsi untuk menyimpan data angsuran
dari pinjaman yang dilakukan oleh
nasabah.
29
Gambar 3.5 Alur Proses Sistem
30
BAB IV
IMPLEMENTASI DAN PENGUJIAN
while(true){
Socket socket = null;
try {
//menerima socket dari client
socket = ss.accept();
System.out.println("\nTelah terkoneksi client : " +
socket );
31
+ socket );
Thread th = new clientHandler(socket, dis, dos);
th.start();
} catch (Exception e) {
socket.close();
e.printStackTrace();
}
}
}
}
Kode Program 4.1 Socket Server
if(path.equals("login")) {
dos.writeUTF(login());
} else if(path.equals("addNasabah")) {
dos.writeUTF(addNasabah());
}else if(path.equals("addTransaksi")){
dos.writeUTF(addTransaksi());
}else if(path.equals("addPinjaman")){
dos.writeUTF(addPinjaman());
}else if(path.equals("addAngsuran")){
dos.writeUTF(addAngsuran());
}else if(path.equals("editNasabah")){
dos.writeUTF(editNasabah());
}
} catch (IOException ex) {
Logger.getLogger(clientHandler.class.getName()).
log(Level.SEVERE, null, ex);
}
}
32
}
. . . . . .
}
Kode Program 4.2 Client Handler
try {
response = dis.readUTF();
} catch (IOException ex) {
Logger.getLogger(API.class.getName()).log(Level.SEVE
RE, null, ex);
}
33
return response;
}
}
Kode Program 4.3 Socket Client
34
resultData.close();
stmt.close();
connect.close();
}
}
Kode Program 4.4 Koneksi Database
public Login() {
initComponents();
}
35
}
}
private void
btnLoginActionPerformed(java.awt.event.ActionEvent evt) {
int statusValid = 1;
username = etUsername.getText();
password = etPassword.getPassword();
if(username.equals("")){
etUsernameErrorLabel.setText("Username tidak boleh
kosong");
statusValid = 0;
}
if(password.length == 0){
etPasswordErrorLabel.setText("Password tidak boleh
kosong");
statusValid = 0;
}
36
Proses autentikan login dari username dan password yang dimasukkan
oleh pegawai terjadi di client handler untuk mencocokan username dan password
menggunakan query MySQL. Berikut merupakan kode program untuk function
login pada client handler.
try {
result.next();
if(result.getInt(1) == 1){
response = result.getString(2);
}
} catch (SQLException ex){
Logger.getLogger(clientHandler.class.getName()).
log(Level.SEVERE, null, ex);
}
try {
koneksi.closeConnection();
} catch (SQLException ex) {
Logger.getLogger(clientHandler.class.getName()).
log(Level.SEVERE, null, ex);
}
}catch(IOException ex){
Logger.getLogger(clientHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
return response;
}
Kode Program 4.6 Modul Login Lanjutan
37
4.4 Modul Master Data
Modul data master merupakan proses pengelolaan yang meliputi
manajemen data nasabah, data tabungan, dan data pinjaman. Modul data master
mempermudah pegawai untuk melakukan pengecekan dan report bulanan.
4.4.1 Modul Data Nasabah
Modul data nasabah merupakan proses untuk pengelolaan data nasabah
yang meliputi penambahan nasabah, perubahan data nasabah, dan penghapusan
data nasabah. Berikut merupakan modul dari penglolaan data nasabah.
public Nasabah() {
initComponents();
}
38
}
try{
ResultSet result = con.setCommandToGetData("SELECT *
FROM tb_nasabah");
String data[]=new String[5];
while(result.next()){
data[0]=result.getString(2);
data[1]=result.getString(3);
data[2]=result.getString(4);
data[3]=result.getString(5);
data[4]=result.getString(6);
kolom.addRow(data);
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,"<Error>
Koneksikan Xampp Terlebih Dahulu : "+e,"Koneksi
Gagal",JOptionPane.WARNING_MESSAGE);
}
return kolom;
}
39
private void no(){
try{
String nomor;
String query = "CALL kode_nasabah()";
ResultSet result = con.setCommandToGetData(query);
if(result.next()){
nomor = result.getString("s");
etKode.setText(nomor);
}
con.closeConnection();
}catch(Exception e){
JOptionPane.showMessageDialog(rootPane, e);
}
}
private void
btnKembaliActionPerformed(java.awt.event.ActionEvent evt) {
Menu menu = new Menu();
menu.setLocationRelativeTo(null);
menu.setVisible(true);
dispose();
}
private void
btnSimpanActionPerformed(java.awt.event.ActionEvent evt) {
String kode, nama, alamat, notelp, pekerjaan;
String path = "addNasabah";
kode = etKode.getText();
nama = etNama.getText();
alamat = etAlamat.getText();
notelp = etNoTelp.getText();
pekerjaan = etPekerjaan.getText();
API.connect();
API.send(path);
API.send(kode);
API.send(nama);
API.send(alamat);
API.send(notelp);
API.send(pekerjaan);
if(!status.equals("-2")){
JOptionPane.showMessageDialog(null,"Data Nasabah
Berhasil Tersimpan","Koneksi
Sukses",JOptionPane.INFORMATION_MESSAGE);
}else {
JOptionPane.showMessageDialog(null,"Gagal Menyimpan
Data","Koneksi Gagal",JOptionPane.INFORMATION_MESSAGE);
}
awal();
40
}
41
}
con.closeConnection();
}catch(Exception e){
JOptionPane.showMessageDialog(null,"<Error>
Koneksikan Xampp Terlebih Dahulu : "+e,"Koneksi
Gagal",JOptionPane.WARNING_MESSAGE);
}
}
}
private void
btnEditActionPerformed(java.awt.event.ActionEvent evt) {
aktif();
btnUpdate.setEnabled(true);
btnEdit.setEnabled(false);
btnHapus.setEnabled(false);
}
private void
btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {
String kode, nama, alamat, notelp, pekerjaan;
String path = "editNasabah";
kode = etKode.getText();
nama = etNama.getText();
alamat = etAlamat.getText();
notelp = etNoTelp.getText();
pekerjaan = etPekerjaan.getText();
API.connect();
API.send(path);
API.send(kode);
API.send(nama);
API.send(alamat);
API.send(notelp);
API.send(pekerjaan);
if(!status.equals("-2")){
JOptionPane.showMessageDialog(null,"Data Nasabah
Berhasil Diubah","Koneksi
Sukses",JOptionPane.INFORMATION_MESSAGE);
}else {
JOptionPane.showMessageDialog(null,"Gagal Merubah
Data","Koneksi Gagal",JOptionPane.INFORMATION_MESSAGE);
}
awal();
etCariKode.setText("");
etCariNama.setText("");
private void
btnHapusActionPerformed(java.awt.event.ActionEvent evt) {
42
try{
String query ="DELETE FROM tb_nasabah WHERE
kode_nasabah='"+etCariKode.getText()+"' or
nama_nasabah='"+etCariNama.getText()+"'";
con.setCommandToUpdateData(query);
JOptionPane.showMessageDialog(null,"Data Nasabah
Berhasil Terhapus","Koneksi
Sukses",JOptionPane.INFORMATION_MESSAGE);
con.closeConnection();
awal();
etCariKode.setText("");
etCariNama.setText("");
}catch(HeadlessException | SQLException e){
JOptionPane.showMessageDialog(null,"<Error>
Koneksikan Xampp Terlebih : "+e,"Koneksi
Gagal",JOptionPane.WARNING_MESSAGE);
}
}
43
(kode_nasabah, nama_nasabah, alamat_nasabah, telp_nasabah,
pekerjaan) "
+ "VALUES ('"+kode+"', '"+nama+"',
'"+alamat+"', '"+notelp+"', '"
+pekerjaanku+"');";
response =
String.valueOf(koneksi.setCommandToUpdateData(query));
try {
koneksi.closeConnection();
} catch (SQLException ex) {
Logger.getLogger(clientHandler.class.getName()).
log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(clientHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
return response;
}
try {
koneksi.closeConnection();
} catch (SQLException ex) {
Logger.getLogger(clientHandler.class.getName()).
log(Level.SEVERE, null, ex);
}
}catch (IOException ex) {
Logger.getLogger(clientHandler.class.getName()).log(
Level.SEVERE, null, ex);
44
}
return response;
}
Kode Program 4.8 Modul Data Nasabah Lanjutan
public BukuTabungan() {
initComponents();
}
45
String[]judul = {"Kode Transaksi","Tanggal
Transaksi","Jenis Transaksi","Nominal"};
DefaultTableModel kolom=new
DefaultTableModel(null,judul);
try{
//String query = "SELECT kode_transaksi,
tgl_transaksi, tb_jenis_transaksi.transaksi, nominal_transaksi
FROM tb_transaksi, tb_jenis_transaksi, tb_nasabah WHERE
tb_transaksi.jenis_transaksi_id = tb_jenis_transaksi.id AND
tb_nasabah.id = tb_transaksi.nasabah_id AND
tb_nasabah.kode_nasabah ='"+etCariKode.getText()+"';";
String query = "CALL
transaksi('"+etCariKode.getText()+"')";
ResultSet result = con.setCommandToGetData(query);
String data[]=new String[4];
while(result.next()){
data[0]=result.getString(1);
data[1]=result.getString(2);
data[2]=result.getString(3);
data[3]=result.getString(4);
kolom.addRow(data);
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,"<Error>
Koneksikan Xampp Terlebih Dahulu : "+e,"Koneksi
Gagal",JOptionPane.WARNING_MESSAGE);
}
return kolom;
}
private void
btnCariActionPerformed(java.awt.event.ActionEvent evt) {
try{
ResultSet result =
con.setCommandToGetData("SELECT
nama_nasabah,alamat_nasabah,telp_nasabah,pekerjaan,SUM(tb_transa
ksi.nominal_transaksi*tb_jenis_transaksi.tipe) AS saldo "
+ "FROM tb_nasabah, tb_transaksi,
tb_jenis_transaksi WHERE jenis_transaksi_id =
tb_jenis_transaksi.id AND tb_nasabah.`id` =
tb_transaksi.`nasabah_id` AND kode_nasabah like
'"+etCariKode.getText()+"'");
if(result.next()){
tvNama.setText(result.getString(1));
tvAlamat.setText(result.getString(2));
tvTelp.setText(result.getString(3));
tvPekerjaan.setText(result.getString(4));
tvSaldo.setText(result.getString(5));
}else{
JOptionPane.showMessageDialog(null,"Kode
Tidak Tersedia");
etCariKode.setText("");
}
con.closeConnection();
}catch(Exception e){
JOptionPane.showMessageDialog(null,"<Error>
Koneksikan Xampp Terlebih Dahulu : "+e,"Koneksi
46
Gagal",JOptionPane.WARNING_MESSAGE);
}
jTable1.setModel(getTabungan());
}
private void
jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Menu menu = new Menu();
menu.setLocationRelativeTo(null);
menu.setVisible(true);
dispose();
}
Kode Program 4.9 Modul Data Tabungan
47
public DataPinjaman() {
initComponents();
}
try{
String query = "SELECT
kode_angsuran,tgl_angsuran,total_angsuran,nominal_bunga,nominal_
angsuran,sisa_pinjaman FROM tb_angsuran, tb_pinjaman WHERE
tb_pinjaman.id = tb_angsuran.pinjaman_id AND
tb_pinjaman.kode_pinjaman='"+etCariKode.getText()+"'";
//String query = "CALL
transaksi('"+etCariKode.getText()+"')";
ResultSet result = con.setCommandToGetData(query);
String data[]=new String[6];
while(result.next()){
data[0]=result.getString(1);
data[1]=result.getString(2);
data[2]=result.getString(3);
data[3]=result.getString(4);
data[4]=result.getString(5);
data[5]=result.getString(6);
kolom.addRow(data);
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,"<Error>
Koneksikan Xampp Terlebih Dahulu : "+e,"Koneksi
Gagal",JOptionPane.WARNING_MESSAGE);
}
return kolom;
}
private void
btnKembaliActionPerformed(java.awt.event.ActionEvent evt) {
Menu menu = new Menu();
menu.setLocationRelativeTo(null);
menu.setVisible(true);
dispose();
}
private void
btnCariActionPerformed(java.awt.event.ActionEvent evt) {
48
try{
ResultSet result =
con.setCommandToGetData("SELECT tb_nasabah.nama_nasabah,
tgl_pinjaman, pokok_pinjaman, pokok_angsuran, bunga,
jangka_waktu, status_pinjaman FROM tb_nasabah, tb_pinjaman WHERE
tb_nasabah.id=tb_pinjaman.nasabah_id AND kode_pinjaman =
'"+etCariKode.getText()+"'");
if(result.next()){
tvNama.setText(result.getString(1));
tvTanggal.setText(result.getString(2));
tvPinjaman.setText(result.getString(3));
tvAngsuran.setText(result.getString(4));
tvBunga.setText(result.getString(5));
tvWaktu.setText(result.getString(6));
tvStatus.setText(result.getString(7));
}else{
JOptionPane.showMessageDialog(null,"Kode
Tidak Tersedia");
etCariKode.setText("");
}
con.closeConnection();
}catch(Exception e){
JOptionPane.showMessageDialog(null,"<Error>
Koneksikan Xampp Terlebih Dahulu : "+e,"Koneksi
Gagal",JOptionPane.WARNING_MESSAGE);
}
jTable1.setModel(getPinjaman());
etCariKode.setText("");
}
49
Gambar 4.5 Tampilan Simpanan dan Penarikan
/**
* Creates new form Simpanan
*/
public Simpanan() {
initComponents();
}
private void
btnsimpanActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String jenis =
cmbjenis.getItemAt(cmbjenis.getSelectedIndex()).toString();
if(jenis=="Simpanan"){
tipe = 1;
}else if(jenis=="Penarikan"){
tipe = 2;
}
50
API.connect();
API.send(path);
API.send(Transposisi.enkripsi(idNasabah));
API.send(Transposisi.enkripsi(kodeTrans));
API.send(Transposisi.enkripsi(tipeTrans));
API.send(Transposisi.enkripsi(tglTrans));
API.send(Transposisi.enkripsi(nominalTrans));
API.send(Transposisi.enkripsi(idPegawai));
private void
jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
ResultSet result = con.setCommandToGetData("SELECT *
FROM tb_nasabah where kode_nasabah = '"+txtKode.getText()+"'");
// ResultSet result1 =
con.setCommandToGetData("SELECT * FROM tb_jenis_transaksi");
while(result.next()){
tampil();
no();
lblPegawai.setText(Session.getIDLogin());
String nama = result.getString(3);
idNasabah = result.getString(1);
JOptionPane.showMessageDialog(null, "Data
Nasabah ditemukan");
}
} catch (SQLException ex) {
Logger.getLogger(Simpanan.class.getName()).log(Level
.SEVERE, null, ex);
}
}
Kode Program 4.11 Modul Simpanan dan Penarikan
51
private String addTransaksi(){
String response = "-2";
try{
System.out.println("--- Tambah Transaksi ---");
String idNasabah = dis.readUTF();
System.out.println("Enkripsi id nasabah :
"+idNasabah);
idNasabah = Transposisi.dekripsi(idNasabah);
System.out.println("Dekripsi id nasabah :
"+idNasabah);
try {
koneksi.closeConnection();
} catch (SQLException ex) {
52
Logger.getLogger(clientHandler.class.getName()).
log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(clientHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
return response;
}
Kode Program 4.12 Modul Simpanan dan Penarikan Lanjutan
53
/**
* Creates new form Pinjaman
*/
public Pinjaman() {
initComponents();
}
private void
btnsimpanActionPerformed(java.awt.event.ActionEvent evt) {
String path = "addPinjaman";
String pokok = txtPokok.getText();
String tglTrans = lblTanggal.getText();
String bunga = String.valueOf(txtBunga.getText());
String waktu = String.valueOf(txtWaktu.getText());
idPegawai = String.valueOf(lblPegawai.getText());
angsuran =
Integer.parseInt(pokok)/Integer.parseInt(waktu);
String pokokAngsuran = String.valueOf(angsuran);
String kodePinjam =
String.valueOf(txtkodepinjaman.getText());
System.out.println(angsuran);
System.out.println(pokok);
System.out.println(tglTrans);
System.out.println(bunga);
System.out.println(waktu);
System.out.println(idPegawai);
try {
String dt = lblTanggal.getText();
Calendar c = Calendar.getInstance();
c.setTime(formatTanggal.parse(dt));
c.add(Calendar.MONTH, Integer.parseInt(waktu));
dt = formatTanggal.format(c.getTime());
System.out.println(dt);
API.connect();
API.send(path);
API.send(Transposisi.enkripsi(idNasabah));
API.send(Transposisi.enkripsi(pokok));
API.send(Transposisi.enkripsi(tglTrans));
API.send(Transposisi.enkripsi(bunga));
API.send(Transposisi.enkripsi(kodePinjam));
API.send(Transposisi.enkripsi(waktu));
API.send(Transposisi.enkripsi(idPegawai));
API.send(Transposisi.enkripsi(pokokAngsuran));
API.send(Transposisi.enkripsi(dt));
54
private void
jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
ResultSet result = con.setCommandToGetData("SELECT *
FROM tb_nasabah where kode_nasabah = '"+txtKode.getText()+"'");
while(result.next()){
tampil();
no();
lblPegawai.setText(Session.getIDLogin());
String nama = result.getString(3);
String alamat = result.getString(4);
String nomer = result.getString(5);
String pekerjaan = result.getString(6);
lblnama.setText(nama);
lblnomer.setText(nomer);
lblalamat.setText(alamat);
lblpekerjaan.setText(pekerjaan);
idNasabah = result.getString(1);
JOptionPane.showMessageDialog(null, "Data
Nasabah ditemukan");
}
} catch (SQLException ex) {
Logger.getLogger(Simpanan.class.getName()).log(Level
.SEVERE, null, ex);
}
}
Kode Program 4.13 Modul Pinjaman
55
String tglTrans = dis.readUTF();
System.out.println("Enkripsi tanggal pinjaman :
"+tglTrans);
tglTrans = Transposisi.dekripsi(tglTrans);
System.out.println("Dekripsi tanggal pinjaman :
"+tglTrans);
String dt = dis.readUTF();
System.out.println("Enkripsi jatuh tempo : "+dt);
dt = Transposisi.dekripsi(dt);
System.out.println("Dekripsi jatuh tempo : "+dt);
try {
56
koneksi.closeConnection();
} catch (SQLException ex) {
Logger.getLogger(clientHandler.class.getName()).
log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(clientHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
return response;
}
Kode Program 4.14 Modul Pinjaman Lanjutan
57
SimpleDateFormat noformat=new SimpleDateFormat("yyMM");
SimpleDateFormat formatTanggal=new SimpleDateFormat("yyyy-
MM-DD");
/**
* Creates new form Angsuran
*/
public Angsuran() {
initComponents();
}
private void
btnCariActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
tglpinjam.setText(tgl_pinjam);
jatuhtempo.setText(tgl_jatuh_tempo);
status.setText(status_pinjaman);
idPinjaman = result.getString(1);
lblnama.setText(namaNasabah);
lblpokokpinjaman.setText(pokokPinjaman);
lblpokokangsuran.setText(pokokAngsuran);
lblbunga.setText(bunga);
lbljangkawaktu.setText(jangkaWaktu);
periode(idPinjaman);
// idNasabah = result.getString(1);
JOptionPane.showMessageDialog(null, "Data
Pinjaman ditemukan");
58
}
} catch (SQLException ex) {
Logger.getLogger(Simpanan.class.getName()).log(Level
.SEVERE, null, ex);
}
}
private void
btnSimpanActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String path = "addAngsuran";
// String namaNasabah =
String.valueOf(lblnama.getText());
String pokokPinjaman =
String.valueOf(lblpokokpinjaman.getText());
String pokokAngsuran =
String.valueOf(lblpokokangsuran.getText());
String bungaAngsuran =
String.valueOf(lblbunga.getText());
String jangkaWaktu =
String.valueOf(lbljangkawaktu.getText());
nominalBunga =
Integer.parseInt(pokokPinjaman)*Integer.parseInt(bungaAngsuran)/
100;
nominalAngsuran =
Integer.parseInt(txttotalangsuran.getText())-nominalBunga;
String kodeAngsuran =
String.valueOf(txtkodeangsuran.getText());
String tanggalAngsuran =
String.valueOf(lbltanggal.getText());
String pinjamanID = String.valueOf(idPinjaman);
String periodeAngsuran =
String.valueOf(lblperiode.getText());
String totalAngsuran =
String.valueOf(txttotalangsuran.getText());
try{
String sisa = null;
ResultSet result = con.setCommandToGetData("SELECT *
FROM tb_angsuran WHERE pinjaman_id = '"+pinjamanID+"' AND
periode = '"+seleksiPeriode+"'");
if(result.next()){
sisa = result.getString(9);
sisaPinjam = Integer.parseInt(sisa)-
(nominalAngsuran);
System.out.println(sisaPinjam);
}else{
sisaPinjam = Integer.parseInt(pokokPinjaman)-
(nominalAngsuran);
System.out.println(sisaPinjam);
}
59
}catch(Exception e){
JOptionPane.showMessageDialog(rootPane, e);
}
API.connect();
API.send(path);
API.send(Transposisi.enkripsi(kodeAngsuran));
API.send(Transposisi.enkripsi(tanggalAngsuran));
API.send(Transposisi.enkripsi(pinjamanID));
API.send(Transposisi.enkripsi(periodeAngsuran));
API.send(Transposisi.enkripsi(totalAngsuran));
API.send(Transposisi.enkripsi(String.valueOf(nominalAngs
uran)));
API.send(Transposisi.enkripsi(String.valueOf(nominalBung
a)));
API.send(Transposisi.enkripsi(String.valueOf(sisaPinjam)
));
}
Kode Program 4.15 Modul Angsuran
60
tanggalAngsuran =
Transposisi.dekripsi(tanggalAngsuran);
System.out.println("Dekripsi tanggal angsuran :
"+tanggalAngsuran);
61
response =
String.valueOf(koneksi.setCommandToUpdateData(query));
try {
koneksi.closeConnection();
} catch (SQLException ex) {
Logger.getLogger(clientHandler.class.getName()).
log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(clientHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
return response;
}
Kode Program 4.16 Modul Angsuran Lanjutan
62
Gambar 4.9 Pengujian Login Lanjutan
63
Gambar 4.10 Pengujian Simpan Data Nasabah
64
Gambar 4.12 Pengujian Hapus Data Nasabah
65
4.7.3 Pengujian Data Pinjaman
Tahap pengujian data pinjaman dilakukan untuk menguji hasil proses
modul data pinjaman dalam melakukan proses menampilkan data pinjaman dan
angsuran dari nasabah yang kode pinjamannya diinputkan oleh pegawai. Berikut
merupakan hasil pengujian untuk data pinjaman nasabah.
66
Gambar 4.15 Pengujian Transaksi Simpanan
67
Gambar 4.17 Pengujian Transaksi Pinjaman
68
Gambar 4.18 Pengujian Transaksi Angsuran
counter = 1;
do {
for(int i = 0; i < kataKunci.length; i++){
if(kataKunci[i] == counter){
for(int j = 0; j < charPlainText.length; j+
+){
69
chiperText += charPlainText[j][i];
}
counter++;
break;
}
}
} while(counter <= kataKunci.length);
return chiperText;
}
do {
for(int i = 0; i < kataKunci.length; i++){
if(kataKunci[i] == counter){
for(int j = 0; j < charChiperText.length; j+
+){
charChiperText[j][i] =
chiperText.charAt(karakter);
karakter++;
}
counter++;
break;
}
}
} while(counter <= kataKunci.length);
counter = 0;
karakter = 1;
70
}
} else {
for(int j = 0; j < charChiperText[i].length; j+
+){
plainText += charChiperText[i][j];
}
}
}
return plainText;
}
}
Kode Program 4.17 Kriptografi Transposisi
71
BAB V
PENUTUP
5.2 Saran
Saran yang dapat diberikan pada pembuatan Aplikasi Koperasi ini,
diharapkan kedepannya Aplikasi Koperasi ini dapat berkembang lebih jauh lagi
dan dapat diterapkan oleh banyak koperasi yang ada. Pengembangan lebih lanjut
dapat berupa penambahan fitur-fitur yang lebih berguna kedepannya sehingga
aplikasi ini semakin sempurna untuk digunakan kedepannya.
72
DAFTAR PUSTAKA
73