Anda di halaman 1dari 73

PEMROGRAMAN JARINGAN

APLIKASI MANAJEMEN KOPERASI SIMPAN PINJAM BERBASIS


CLIENT SERVER (SOCKET PROGRAMMING)

Dosen Pengampu Mata Kuliah :


Gusti Made Arya Sasmita, ST., MT.

Disusun Oleh :
Ida Bagus Kade Taruna (1705551009)
Putu Ari Suryana Upeksa (1705551025)

PROGRAM STUDI TEKNOLOGI INFORMASI


FAKULTAS TEKNIK
UNIVERSITAS UDAYANA
2019
KATA PENGANTAR

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.

Jimbaran, 4 Januari 2020

Penulis

2
DAFTAR ISI

KATA PENGANTAR.............................................................................................2

DAFTAR ISI............................................................................................................3

BAB I PENDAHULUAN........................................................................................5

1.1 Latar Belakang................................................................................................5


1.2 Rumusan Masalah...........................................................................................6
1.3 Tujuan Penulisan............................................................................................6
1.4 Manfaat Penulisan..........................................................................................7
1.5 Batasan Masalah.............................................................................................7
BAB II LANDASAN TEORI..................................................................................8

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.1 Gambaran Umum Sistem..............................................................................24


3.2 Use Case Diagram........................................................................................25
3.3 Arsitektur Sistem..........................................................................................26

3
3.4 Desain Basis Data.........................................................................................27
3.5 Alur Proses Sistem........................................................................................29
BAB IV IMPLEMENTASI DAN PENGUJIAN...................................................31

4.1 Komponen Aplikasi......................................................................................31


4.1.1 Socket Server...................................................................................31
4.1.2 Client Handler..................................................................................32
4.1.3 Socket Client....................................................................................33
4.2 Koneksi Database.........................................................................................34
4.3 Modul Login.................................................................................................35
4.4 Modul Master Data.......................................................................................38
4.4.1 Modul Data Nasabah........................................................................38
4.4.2 Modul Data Tabungan.....................................................................45
4.4.3 Modul Data Pinjaman......................................................................47
4.5 Modul Transaksi...........................................................................................49
4.5.1 Modul Simpanan dan Penarikan......................................................49
4.5.2 Modul Pinjaman...............................................................................53
4.5.3 Modul Angsuran..............................................................................57
4.6 Pengujian Login............................................................................................62
4.7 Pengujian Sistem Master Data......................................................................63
4.7.1 Pengujian Data Nasabah..................................................................63
4.7.2 Pengujian Data Tabungan................................................................65
4.7.3 Pengujian Data Pinjaman.................................................................66
4.8 Pengujian Sistem Transaksi..........................................................................66
4.8.1 Pengujian Transaksi Simpanan dan Penarikan................................66
4.8.2 Pengujian Transaksi Pinjaman.........................................................67
4.8.3 Pengujian Transaksi Angsuran.........................................................68
4.9 Pengujian Sistem Kriptografi.......................................................................69
4.9.1 Pengujian Sistem Enkripsi dan Dekripsi..........................................71
BAB V PENUTUP.................................................................................................72

5.1 Kesimpulan...................................................................................................72
5.2 Saran.............................................................................................................72
DAFTAR PUSTAKA............................................................................................73

4
BAB I
PENDAHULUAN

1.1 Latar Belakang


Kemajuan teknologi yang berkembang dengan cepat mendorong setiap
instansi atau organisasi untuk tetap mengikuti perkembangan dan terus
meningkatkan kemampuannya didalam mengolah data-data dan informasi yang
dibutuhkan untuk mencapai tujuan, visi dan misi terutama mengenai masalah
informasi yang berhubungan dengan kegiatan instansi atau organisasi tersebut.
Suatu instansi atau organisasi memerlukan informasi yang tepat, cepat serta
efisien, untuk itu suatu instansi akan sangat memerlukan manajemen sistem
informasi yang baik dalam menciptakan efisiensi dan efektivitas kerja instansi itu
sendiri, serta dapat membantu dalam pengembangan sistem informasi di dalam
instansi tersebut.
Koperasi merupakan suatu organisasi atau badan usaha yang memiliki
peranan sangat penting dalam menumbuhkan dan mengembangkan potensi
ekonomi rakyat. Koperasi juga merupakan wadah demokrasi ekonomi dan sosial
milik bersama para anggota, pengurus maupun pengelola. Salah satu ciri koperasi
adalah sebagai usaha bersama kekeluargaan dan kegotongroyongan. Setiap
anggota berkewajiban bekerja sama untuk mencapai tujuan yaitu kesejahteraan
para anggota.
Layanan jasa simpan pinjam pada koperasi saat ini masih diproses secara
manual yaitu dengan menggunakan alat – alat seperti buku untuk mencatat
transaksi dan kalkulator untuk menghitung, yang menyebabkan pekerjaan menjadi
kurang efektif dan tidak efisien karena akan menyita banyak waktu dan biaya
serta mempunyai banyak kerugian, diantaranya buku tersebut bisa rusak, hilang,
basah, dan sobek. Sehingga dapat menghambat kinerja dari pengurus koperasi.
Dikarenakan prosesnya yang masih manual sehingga mengkibatkan sulitnya untuk
mengetahui anggota yang memiliki simpanan atau pinjaman. Misalnya data
anggota, besar pinjaman, angsuran yang dibayar, yang menjadi permasalahan
bagaimana cara memperbaiki sistem yang ada, untuk menyajikan data yang akurat
dan tepat waktu, oleh karena itu penyusun membuat aplikasi manajemen koperasi.

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.

1.2 Rumusan Masalah


Berdasarkan latar belakang yang sudah dijelaskan di atas, dapat
dirumuskan beberapa masalah yang akan dibahas sebagai berikut.
1. Apa itu aplikasi berbasis client server atau socket programming ?
2. Bagaimana tahapan dalam membuat sistem manajemen koperasi berbasis
client server dengan Java yang memanfaatkan socket ?
3. Bagaimana cara kerja sistem aplikasi manajemen koperasi berbasis client
server ?

1.3 Tujuan Penulisan


Berdasarkan rumusan masalah yang sudah dijelaskan di atas, maka
tujuan dari penulisan dapat dijabarkan sebagai berikut.
1. Mengetahui konsep dari sistem client server atau socket programming
Java.
2. Mengimplementasikan socket programming dengan mengembangkan
aplikasi manajemen koperasi simpan pinjam.
3. Mengetahui cara kerja sistem aplikasi manajemen koperasi berbasis
client server menggunakan bahasa Java.

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.

1.5 Batasan Masalah


Berdasarkan rumusan masalah yang sudah dijelaskan di atas, Batasan
masalah dari penulisan laporan ini sebagai berikut.
1. Sistem aplikasi manajemen koperasi hanya melakukan proses manajemen
data nasabah, buku tabungan, data peminjam dan proses transaksi
simpanan, penarikan, pinjaman serta angsuran.
2. Aplikasi manajemen koperasi menggunakan database MySQL untuk
menyimpan dan mengolah data.
3. Proses yang dilakukan pada client handler terbatas hanya pada proses
penyimpanan.

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.

b. Peran dan Fungsi Pinjaman


 Melalui penyaluran dana kredit itu akan dapat meningkatkan
pendapatan para anggota dan sekaligus mengentaskan kemiskinan.
 Pelayanan pemberian kredit sangat cepat dan mudah tanpa agunan
atau jaminan kredit.
 Pemberian kredit dengan bunga sangat rendah.
 Pada akhir tahun buku jasa bunga kredit itu dibagikan kepada para
anggota setelah dikurangi biaya operasional, dana cadang dan dana
pengembangan kredit, sesuai dengan Anggaran Dasar dan Anggaran
Rumah Tangga.

2.3 Pemrograman Berorientasi Objek


Pemrograman berorientasi objek (Object Oriented Programming atau
disingkat OOP) adalah paradigma pemrograman yang berorientasikan kepada
objek yang merupakan suatu metode dalam pembuatan program, dengan tujuan
untuk menyelesaikan kompleksnya berbagai masalah program yang terus
meningkat. Objek adalah entitas yang memiliki atribut, karakter (bahavour) dan
kadang kala disertai kondisi (state) (Douglas, 1992).
Pemrograman berorientasi objek ditemukan pada Tahun 1960, dimana
berawal dari suatu pembuatan program yang terstruktur (structured
programming). Metode ini dikembangkan dari bahsa C dan Pascal. Dengan
program yang terstruktur inilah untuk pertama kalinya kita mampu menulis
program yang begitu sulit dengan lebih mudah.

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.

2.3.1 Kelas (class)


Kelas (class) merupakan penggambaran satu set objek yang memiliki
atribut yang sama. Kelas mirip dengan tipe data ada pemrograman non objek,
akan tetapi lebih komprehensif karena terdapat struktur sekaligus karakteristiknya.
Kelas baru dapat dibentuk lebih spesifik dari kelas ada umumnya.kelas merupakan
jantung dalam pemrograman berorientasi objek.

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).

2.3.3 Abstaksi (Abstraction)


Kemampuan sebuah program untuk melewati aspek informasi yang
diolah adalah kemampuan untuk fokus pada inti permasalahan. Setiap objek
dalam sistem melayani berbagai model dari pelaku abstrak yang dapat melakukan
kerja, laporan dan perubahan serta berkomunikasi dengan objek lain dalam sistem,
tanpa harus menampakkan kelebihan diterapkan.

2.3.4 Enkapsulasi (pembungkus)


Pembungkusan merupakan penggabungan potongan-potongan informasi
dan perilaku-perilaku spesifik yang bekerja pada informasi tersebut, kemudian
mengemasnya menjadi sesuatu yang disebut objek (Nugroho,2005).
Enkapsulasi adalah proses memastikan pengguna sebuah objek tidak
dapat menggantikan keadaan dari sebuah objek dengan cara yang tidak sesuai
prosedur. Artinya, hanya metode yang terdapat dalam objek tersebut yang diberi
izin untuk mengakses keadaan yang diinginkan. Setiap objek mengakses interface
yang menyabutkan bagaimana objek lainnya dapat berintegrasi dengannya. Objek
lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek
tersebut.

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.

2.3.6 Inheritas (Pewarisan)


Konsep inheritas mempunyai fungsi mengatur polimorfise dan
enkapsulasi dengan mengizinkan objek didefinisikan dan diciptakan dengan jenis
khusus dari objek yang sudah ada. Objek-objek ini dapat membagi dan
memperluas perilaku mereka tanpa mengimplementasikan perilaku tersebut.

2.4 Bahasa Pemrograman Java


Bahasa pemrograman Java adalah “general-purpose computer-
programming language that is concurrent, class-based, object-oriented, and
specifically designed to have as few implementation dependencies as possible”.
Terjemahan bebasnya, Java adalah “bahasa pemrograman umum (general-
purpose) yang konkuren (menjalankan banyak hal secara bersamaan), berbasis
class, berorientasi object dan dirancang secara khusus agar tidak bergantung
pada sistem tertentu“.
Java dirancang sebagai bahasa pemrograman umum yang bisa dipakai
untuk membuat berbagai aplikasi, mulai untuk aplikasi desktop, website, aplikasi
mobile, hingga embedded device seperti microprocessor atau perangkat pintar. Ini
berbeda dengan bahasa pemrograman yang secara khusus dipakai untuk
pembuatan aplikasi tertentu. Sebagai contoh, bahasa pemrograman PHP secara
khusus dipakai untuk membuat website saja.
Dalam teori komputasi, concurrent programming adalah fitur di sebuah
bahasa pemrograman yang bisa menjalankan banyak hal dalam satu waktu. Lawan
dari kata concurrent adalah sequential programming, dimana alur pemrograman di
proses secara berurutan dari awal hingga akhir. Secara umum, concurrent
programming akan meningkatkan performa dari aplikasi yang dibuat.
Berbeda dengan kebanyakan bahasa pemrograman yang mendukung
pemrograman prosedural dan object sekaligus (seperti C++, PHP, atau Python),

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).

2.5 Java Swing


Java Swing adalah sekumpulan kelas-kelas yang digunakan untuk
mengembangkan aplikasi berbasis GUI (Graphical User Interface) selain itu java
swing juga bisa diartikan sebagai salah satu dari banyaknya solusi untuk
mengembangkan aplikasi berbasis GUI. Java Swing merupakan versi peningkatan
dari AWT (Abstract Window Toolkit). Package dari Swing menyediakan banyak
kelas untuk membuat aplikasi GUI. Package tersebut dapat ditemukan di
javax.swing. Komponen Swing ditulis menyeluruh menggunakan Java.
Kesimpulannya, program GUI ditulis menggunakan banyak kelas dari package
Swing yang mempunyai tampilan look and feel yang sama meski dijalankan pada
beda paltform. Lebih dari itu, Swing menyediakan komponen yang lebih menarik
seperti color chooser dan option pane.
Nama dari komponen GUI milik Swing hampir sama persis dengan
komponen GUI milik AWT. Perbedaan jelas terdapat pada penamaan komponen.
Pada dasarnya, nama komponen Swing sama dengan nama komponen AWT tetapi
dengan tambahan huruf J pada prefixnya. Sebagai contoh, satu komponen dalam
AWT adalah button class. Sedangkan pada Swing, nama komponen tersebut
menjadi Jbutton class. Komponen dari Java swing dapat dibagi mejadi beberapa
jenis yaitu sebagai berikut.
a. Top-level Container : Merupakan container dasar di mana komponen
lainnya diletakan. Contoh Top-level container ini adalah Frame, Dialog

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.

2.6 Socket Programming


Socket adalah mekanisme komunikasi yang memungkinkan terjadinya
pertukaran data antar program atau proses baik dalam satu mesin maupun antar
mesin. Gaya pemrograman socket sendiri berawal dari sistem Unix BSD yang
terkenal dengan kepeloporannya pada bidang penanganan jaringan, sehingga
sering disebut BSD Socket. Socket pertama kali diperkenalkan di sistem Unix
BSD versi 4.2 tahun 1983 sebagai kelanjutan dari implementasi protokol TCP/IP
yang muncul pertama kali pada sistem Unix BSD 4.1 pada akhir 1981. Hampir
setiap variant Unix dan Linux mengadopsi BSD Socket. Pada lingkungan Unix,
socket memberikan keleluasaan pemrograman gaya Unix yang terkenal dengan
ideologinya, Semua di Unix/Linux adalah file. Komunikasi antar program dapat
berlangsung lewat penggunaan deskriptor file standar Unix dengan bantuan
socket.
Keunggulan dari penggunaan socket adalah anda dapat melakukan
komunikasi antar proses/program melalui jaringan berbasis yang TCP/IP
tentunya, bahkan dengan program lain yang berjalan pada platform non-unix
seperti Microsoft Windows, sepanjang program tersebut berbicara dalam protokol

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.

2.6.2 Socket TCP dan UDP


Dalam komunikasi antara dua pihak, tentunya harus digunakan
kesepakatan aturan dan format yang sama agar komunikasi dapat dimengerti.
Seperti halnya dua orang yang menggunakan bahasa yang sama, maka bahasa di
sini berfungsi sebagai protokol. Protokol yang digunakan dalam socket dapat
menggunakan TCP ataupun UDP. Contoh komunikasi sederhana adalah
komunikasi antara komputer A dan komputer B. Baik komputer A maupun
komputer B harus memiliki identitas unik, yang direpresentasikan oleh IP masing-
masing. Komunikasi yang terjadi melalui port, sehingga baik komputer A maupun
komputer B harus memiliki port yang dapat diakses satu sama lain.
Pemrograman socket adalah cara untuk menggunakan komponen/API
(Application Programming Interface) socket untuk membuat sebuah aplikasi.
Aplikasi socket umumnya terdiri dari dua kategori berdasarkan pengiriman
datanya, yaitu:
a. Datagram socket (menggunakan UDP).
b. Stream socket (menggunakan TCP).

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.

2.6.3 Penggunaan Socket Programming


Socket adalah sebuah cara untuk berkomunikasi dengan program atau
node lain menggunakan file deskriptor. Di UNIX (dimana socket diciptakan) kita
sering mendengar slogan: “everything is a file”, jadi untuk berkomunikasi dengan
program atau node lain semudah kita membaca dan menulis file deskriptor.
Antarmuka socket dan file adalah mirip, jika pada file kita membukanya dengan

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.

Socket merupakan fasilitas IPC (Inter Proses Communication) untuk


aplikasi jaringan. Agar suatu socket dapat berkomunikasi dengan socket lainnya,
maka socket butuh diberi suatu alamat unik sebagai identifikasi. Alamat socket
terdiri atas Alamat IP dan Nomer Port. Contoh alamat socket
adalah 192.168.29.30: 3000, dimana nomer 3000 adalah nomer portnya. Alamat
IP dapat menggunakan alamat Jaringan Lokal (LAN) maupun alamat
internet. Jadi socket dapat digunakan untuk IPC pada LAN maupun Internet.

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.

2.8 Model Aplikasi Client Server


Untuk membuat aplikasi socket yang sederhana diperlukan dua aplikasi.
Yaitu, pertamaadalah aplikasi server yang akan menerima data, sedangkan
aplikasi kedua adalah aplikasiclient yang mengirimkan data pada server. Baik
aplikasi server dan aplikasi client mendefinisikan port yang sama sebagai jalur
komunikasi.

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.

2.9 MySQL JDBC


Java menyediakan standard API (application programming interface)
untuk pengembangan program aplikasi basis data (database) yang disebut dengan
JDBC API. JDBC adalah API Java untuk memanipulasi basis data. Dengan JDBC
API, para pengembang aplikasi dan applet Java diberi kemudahan untuk
mengakses berbagai tipe basis data dari berbagai penyedia basis data (database
vendors) seperti MySQL Server, SQL Server, Oracle, Sybase dan sebagainya.
JDBC merupakan perantara antara Java dengan basis data. JDBC adalah
sebuah spesifikasi yang menyediakan sekumpulan interface yang membolehkan
akses portabel ke semua basis data. Dapat dikatakan pula bahwa JDBC hanya
menyediakan interface standar, sedangkan masing-masing database vendors
membuat driver yang diperlukan sebagai interface yang sebenarnya antara
program Java (aplikasi, applet, servlet atau JSP) dengan basis data.

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.

2.10 Kriptografi Transposisi


Metode penyandian transposisi adalah metode penyandian dengan cara
mengubah letak dari teks pesan yang akan disandikan. Untuk membaca pesan
aslinya kembali, cukup dengan mengembalikan letak dari pesan tersebut
berdasarkan kunci dan algoritma pergeseran huruf yang telah disepakati. Terdapat
beberapa algoritma dalam metode penyandian transposisi diantaranya yaitu
Transposisi Rail Fence, Transposisi Route, Transposisi Kolom, Transposisi
Ganda, dan Transposisi Myszkowski.

23
BAB III
PERANCANGAN SISTEM

3.1 Gambaran Umum Sistem


Sistem koperasi simpan pinjam dikelola oleh seorang petugas yang
langsung melakukan proses transaksi saat ada permohonan transaksi dari nasabah.
Gambaran umum sistem koperasi menggambarkan bagaimana sistem
berhubungan atau berinteraksi dengan aktifitas luar atau pemakai yang
berkepentingan atau membutuhkan informasi yang dihasilkan oleh sistem. Berikut
merupakan gambaran umum koperasi simpan pinjam.

Gambar 3.1 Gambaran Umum Sistem

Pada koperasi simpan pinjam memiliki beberapa kegiatan atau proses


yang dapat dilakukan oleh petugas yaitu pengelolaan data master berupa data
nasabah, data tabungan, dan data pinjaman. Pengelolaan transaksi pada koperasi
meliputi transaksi simpanan wajib, transaksi penarikan tabungan, transaksi
pinjaman dengan ketentuan bunga menetap yang besaran ditentukan oleh petugas
sesuai dengan kesepakatan dengan nasabah, dan transaksi angsuran dari pinjaman
yang dilakukan.

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.

Gambar 3.2 Use Case Diagram

Use case diagram tersebut menjelaskan interaksi actor pegawai dengan


modul pada sistem harus melewati sistem login untuk melakukan proses
autentikasi. Setelah proses autentikan login berhasil, pegawai baru dapat
melakukan pengolahan sesuai dengan permintaan yang masuk dari nasabah. Pada
setiap modul ada yang memiliki extend atau peluasan fungsi seperti modul data
nasabah yang memiliki fungsi tambah, edit, dan hapus nasabah.

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.

Gambar 3.3 Arsitektur Sistem

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.

3.4 Desain Basis Data


Basis data adalah kumpulan dari data yang saling berhubungan satu
dengan yang lainnya, tersimpan, disimpan dari luar komputer dan digunakan

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.

Gambar 3.4 Desain Basis Data

Rancangan basis data atau database dari koperasi simpan pinjam


memiliki 6 tabel yang digunakan untuk menyimpan hasil pengolahan data.
Penjelasan masing-masing tabel dapat dilihat pada tabel berikut.

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.

3.5 Alur Proses Sistem


Perancangan sistem secara umum mengidentifikasikan komponen –
komponen sistem informasi yang akan didesain secara rinci. Pada tahap
perancangan sistem secara umum, komponen – komponen sistem informasi
dirancang dengan tujuan untuk dikomunikasi kepada user bukan untuk
pemrogram. Rancangan model sistem yang dapat dilakukan yaitu model bentuk
pertama adalah physical model, bentuk ini biasanya digambarkan dengan bagan
alir sistem ( system flowchart). Bentuk physical model menunjukkan bagaimana
nantinya sistem secara fisik diterapkan.

29
Gambar 3.5 Alur Proses Sistem

30
BAB IV
IMPLEMENTASI DAN PENGUJIAN

4.1 Komponen Aplikasi


Komponen aplikasi untuk membentuk sistem aplikasi berbasis client
server yang menggunakan thread dapat dibagi menjadi 3 komponen yaitu class
server, class client handler dan class client.
4.1.1 Socket Server
Socket server merupakan class server yang akan memberikan layanan
kepada client, socket server membuat sebuah jalur socket yang dapat dihubungi
oleh client saat akan meminta sebuah layanan. Server akan melalukan pembuatan
thread baru saat sebuah layanan diminta oleh client. Berikut adalah kode program
dari socket server.

public class server {


public static void main(String[] args) throws IOException {
try {
new ProcessBuilder("cmd", "/c",
"cls").inheritIO().start()
.waitFor();
} catch(Exception e){
e.printStackTrace();
}

int port = 5555;

ServerSocket ss = new ServerSocket(port);


System.out.println("Server ON (Port: "+port+")");

while(true){
Socket socket = null;

try {
//menerima socket dari client
socket = ss.accept();
System.out.println("\nTelah terkoneksi client : " +
socket );

DataInputStream dis = new DataInputStream(socket.


getInputStream());
DataOutputStream dos = new
DataOutputStream(socket.
getOutputStream());

//membuat thread baru


System.out.println("Thread baru untuk client : "

31
+ socket );
Thread th = new clientHandler(socket, dis, dos);
th.start();
} catch (Exception e) {
socket.close();
e.printStackTrace();
}
}
}
}
Kode Program 4.1 Socket Server

4.1.2 Client Handler


Client handler merupakan thread yang akan melakukan proses
pengolahan yang diminta client melalui server kemudian memberikan response
terhadap hasil pengolahan. Berikut adalah kode program dari client handler.

public class clientHandler extends Thread {


final DataInputStream dis;
final DataOutputStream dos;
final Socket socket;

public clientHandler(Socket socket, DataInputStream dis,


DataOutputStream dos){
this.socket = socket;
this.dis = dis;
this.dos = dos;
}

public void run() {


while(true) {
try {
String path = dis.readUTF();

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

4.1.3 Socket Client


Socket client merupakan class client yang akan meminta layanan kepada
socket server dengan membangun koneksi ke server terlebih dahulu melalui IP
Address dan port. Setelah koneksi terbentuk barulah client akan mengirimkan data
melalui data input dan output stream. Berikut merupakan kode program untuk
membentuk koneksi ke server dan melakukan pengiriman dan penerimaan data
stream.

public class API {


private static final int PORT = 5555;
private static final String HOST = "127.0.0.1";
private static Socket socket;
private static DataInputStream dis;
private static DataOutputStream dos;

public static void connect() {


try {
socket = new Socket(HOST, PORT);
dis = new DataInputStream(socket.getInputStream());
dos = new
DataOutputStream(socket.getOutputStream());
} catch(Exception e) {
System.out.println("Anda Keluar dari Aplikasi");
}
}

public static void send(String message) {


try {
dos.writeUTF(message);
} catch (IOException ex) {
Logger.getLogger(API.class.getName()).log(Level.SEVE
RE, null, ex);
}
}

public static String get() {


String response = "";

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

4.2 Koneksi Database


Pengolahan data menggunakan database pada Java memerlukan class
untuk melakukan koneksi dan function untuk mengeksekusi query tertentu. Class
ini akan melakukan koneksi ke database untuk dapat memberikan hasil dari
eksekusi query. Berikut merupakan kode program untuk membuat koneksi ke
database MySQL.

public class Koneksi {


private static final String username = "root";
private static final String password = "";
private static final String url =
"jdbc:mysql://localhost/koperasi";
private static Connection connect = null;
private static Statement stmt = null;
private static ResultSet resultData = null;
private static int resultStatus = -2;

public ResultSet setCommandToGetData(String command){


try {
Class.forName("com.mysql.jdbc.Driver");
connect =
DriverManager.getConnection(url,username,password);
stmt = connect.createStatement();
resultData = stmt.executeQuery(command);
} catch(ClassNotFoundException | SQLException error){
System.err.println("ERROR: " + error);
}
return resultData;
}

public int setCommandToUpdateData(String command){


try {
Class.forName("com.mysql.jdbc.Driver");
connect =
DriverManager.getConnection(url,username,password);
stmt = connect.createStatement();
resultStatus = stmt.executeUpdate(command);
} catch(ClassNotFoundException | SQLException error){
System.err.println("ERROR: " + error);
}
return resultStatus;
}

public void closeConnection() throws SQLException {

34
resultData.close();
stmt.close();
connect.close();
}
}
Kode Program 4.4 Koneksi Database

4.3 Modul Login


Modul login merupakan proses authentikasi pada sistem aplikasi yang
dimana proses login dilakukan oleh pegawai menggunakan username dan
password yang telah dimiliki masing-masing pegawai. Untuk dapat menggunakan
layanan yang ada pada aplikasi ini pegawai memerlukan authentikasi. Berikut
merupakan modul login pada bagian client.

Gambar 4.1 Tampilan Modul Login

public class Login extends javax.swing.JFrame {

private String username;


private char[] password;

public Login() {
initComponents();
}

private void etUsernameKeyReleased(java.awt.event.KeyEvent


evt) {
username = etUsername.getText();
if(username.equals("")){
etUsernameErrorLabel.setText("Username tidak boleh
kosong");
}
else{
etUsernameErrorLabel.setText("");

35
}
}

private void etPasswordKeyReleased(java.awt.event.KeyEvent


evt) {
password = etPassword.getPassword();
if(password.length == 0){
etPasswordErrorLabel.setText("Password tidak boleh
kosong");
}
else{
etPasswordErrorLabel.setText("");
}
}

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;
}

if(!username.equals("") && password.length != 0){


String path = "login";
API.connect();
API.send(path);
API.send(Transposisi.enkripsi(username));
API.send(Transposisi.enkripsi(String.valueOf(passwor
d)));

String status = API.get();


System.out.println(status);
if(!status.equals("0")){
Session.setIDLogin(status);
// System.out.println(status);
Menu menu = new Menu();
menu.setLocationRelativeTo(null);
menu.setVisible(true);
dispose();
}else{
JOptionPane.showMessageDialog(this, "ID User
atau Password Salah!");
}
}
}
Kode Program 4.5 Modul Login

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.

private String login() {


String response = "0";
try{
System.out.println("--- Proses Login ---");
String username = dis.readUTF();
System.out.println("Enkripsi Username : "+username);
username = Transposisi.dekripsi(username);
System.out.println("Dekripsi Username : "+username);

String password = dis.readUTF();


System.out.println("Enkripsi Password : "+password);
password = Transposisi.dekripsi(password);
System.out.println("Dekripsi Password : "+password);

Koneksi koneksi = new Koneksi();


String query = "SELECT COUNT(*), id FROM tb_pegawai
WHERE username='"+username+"' AND password='"+password+"'";
ResultSet result =
koneksi.setCommandToGetData(query);

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.

Gambar 4.2 Tampilan Modul Data Nasabah

public class Nasabah extends javax.swing.JFrame {

Koneksi con = new Koneksi();


Date tgl = new Date();
SimpleDateFormat noformat=new SimpleDateFormat("yyMM");

public Nasabah() {
initComponents();
}

private void aktif(){


etNama.setEnabled(true);
etAlamat.setEnabled(true);
etNoTelp.setEnabled(true);
etPekerjaan.setEnabled(true);

38
}

public void bersih(){


etKode.setText("");
etNama.setText("");
etAlamat.setText("");
etNoTelp.setText("");
etPekerjaan.setText("");
}

public DefaultTableModel gettabel(){


String[]judul = {"No. Anggota","Nama
Anggota","Alamat","No. Telp","Pekerjaan"};
DefaultTableModel kolom=new
DefaultTableModel(null,judul);

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;
}

private void awal(){


jTable1.setModel(gettabel());
bersih();
aktif();
no();
etKode.setEnabled(false);
etNama.requestFocus();
btnKembali.setEnabled(true);
btnUpdate.setVisible(false);
btnEdit.setEnabled(false);
btnHapus.setEnabled(false);
btnSimpan.setEnabled(true);
}

private void pasif(){


etKode.setEnabled(false);
etNama.setEnabled(false);
etAlamat.setEnabled(false);
etNoTelp.setEnabled(false);
etPekerjaan.setEnabled(false);
}

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);

String status = API.get();

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
}

private void etCariKodeKeyPressed(java.awt.event.KeyEvent


evt) {
if(evt.getKeyCode()==KeyEvent.VK_ENTER)
{
try{
ResultSet result =
con.setCommandToGetData("SELECT * FROM tb_nasabah WHERE
kode_nasabah like '"+etCariKode.getText()+"'");
if(result.next()){
etKode.setText(result.getString(2));
etNama.setText(result.getString(3));
etAlamat.setText(result.getString(4));
etNoTelp.setText(result.getString(5));
etPekerjaan.setText(result.getString(6));
pasif();
btnEdit.setEnabled(true);
btnSimpan.setVisible(false);
btnHapus.setEnabled(true);
btnUpdate.setVisible(true);
btnUpdate.setEnabled(false);
}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);
}
}
}

private void etCariNamaKeyPressed(java.awt.event.KeyEvent


evt) {
if(evt.getKeyCode()==KeyEvent.VK_ENTER)
{
try{
ResultSet result =
con.setCommandToGetData("SELECT * FROM tb_nasabah WHERE
nama_nasabah like '"+etCariNama.getText()+"'");
if(result.next()){
etKode.setText(result.getString(2));
etNama.setText(result.getString(3));
etAlamat.setText(result.getString(4));
etNoTelp.setText(result.getString(5));
etPekerjaan.setText(result.getString(6));
pasif();
btnEdit.setEnabled(true);
btnSimpan.setVisible(false);
btnUpdate.setVisible(true);
btnUpdate.setEnabled(false);
}else{
JOptionPane.showMessageDialog(null,"Nama
Tidak Tersedia");
etCariNama.setText("");

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);

String status = API.get();

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);
}
}

private void formWindowOpened(java.awt.event.WindowEvent


evt) {
// TODO add your handling code here:
awal();
}
Kode Program 4.7 Modul Data Nasabah

Proses penyimpanan data nasabah dan perubahan data nasabah diproses


oleh client handler, pada modul nasabah hanya mengirim data informasi sesuai
dengan form, yang kemudian pada client handler yang melakukan proses
penambahan atau perubahan. Berikut merupakan kode program dari client handler
untuk penambahan dan perubahan data nasabah.

private String addNasabah(){


String response = "-2";
try{
String kode = dis.readUTF();
System.out.println(kode);

String nama = dis.readUTF();


System.out.println(nama);

String alamat = dis.readUTF();


System.out.println(alamat);

String notelp = dis.readUTF();


System.out.println(notelp);

String pekerjaanku = dis.readUTF();


System.out.println(pekerjaanku);

Koneksi koneksi = new Koneksi();


String query = "INSERT INTO tb_nasabah

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;
}

private String editNasabah(){


String response = "-2";
try{
String kode = dis.readUTF();
System.out.println(kode);

String nama = dis.readUTF();


System.out.println(nama);

String alamat = dis.readUTF();


System.out.println(alamat);

String notelp = dis.readUTF();


System.out.println(notelp);

String pekerjaanku = dis.readUTF();


System.out.println(pekerjaanku);

Koneksi koneksi = new Koneksi();


String query = "UPDATE tb_nasabah SET
nama_nasabah='"+nama+"',alamat_nasabah='"+alamat+"',telp_nasabah
='"+notelp+"',"
+ "pekerjaan='"+pekerjaanku+"' WHERE
kode_nasabah='"+kode+"';";
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);

44
}

return response;
}
Kode Program 4.8 Modul Data Nasabah Lanjutan

4.4.2 Modul Data Tabungan


Modul data tabungan merupakan proses untuk menampilkan saldo dan
riwayat transaksi dari nasabah yang melakukan simpanan ataupun penarikan.
Semua proses dari data tabungan dilakukan langsung oleh client karena hanya
menampilkan data. Berikut merupakan kode program dari modul data tabungan.

Gambar 4.3 Tampilan Modul Data Tabungan

public class BukuTabungan extends javax.swing.JFrame {

Koneksi con = new Koneksi();

public BukuTabungan() {
initComponents();
}

private void awal(){


tvNama.setEnabled(false);
tvAlamat.setEnabled(false);
tvTelp.setEnabled(false);
tvPekerjaan.setEnabled(false);
tvSaldo.setEnabled(false);
}

public DefaultTableModel getTabungan(){

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

4.4.3 Modul Data Pinjaman


Modul data pinjaman merupakan proses untuk menampilkan data
pinjaman dan riwayat angsuran dari nasabah yang melakukan pinjaman dana ke
koperasi. Semua proses dari data pinjaman dilakukan langsung oleh client karena
hanya menampilkan data. Berikut merupakan kode program dari modul data
pinjaman.

Gambar 4.4 Modul Data Pinjaman

public class DataPinjaman extends javax.swing.JFrame {

Koneksi con = new Koneksi();

47
public DataPinjaman() {
initComponents();
}

private void awal(){


tvNama.setEnabled(false);
tvTanggal.setEnabled(false);
tvPinjaman.setEnabled(false);
tvAngsuran.setEnabled(false);
tvBunga.setEnabled(false);
tvWaktu.setEnabled(false);
tvStatus.setEnabled(false);
}

public DefaultTableModel getPinjaman(){


String[]judul = {"Kode Angsuran","Tanggal","Nominal
Angsuran","Bunga","Pokok Angsuran","Sisa Pinjaman"};
DefaultTableModel kolom=new
DefaultTableModel(null,judul);

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("");
}

private void formWindowOpened(java.awt.event.WindowEvent


evt) {
awal();
}
Kode Program 4.10 Modul Data Pinjaman

4.5 Modul Transaksi


Modul transaksi merupakan proses untuk menangani setiap transaksi
yang ada pada koperasi. Proses transaksi yang ada pada koperasi simpan pinjam
meliputi simpanan, penarikan, pinjaman, dan angsuran.
4.5.1 Modul Simpanan dan Penarikan
Modul transaksi pertama adalah proses untuk transaksi simpanan dan
penarikan yang dilakukan oleh nasabah. Proses transaksi simpanan dan penarikan
menerima inputan berupa jumlah nominal uang untuk simpanan atau penarikan
yang dilakukan oleh nasabah. Berikut kode program modul simpanan dan
penarikan.

49
Gambar 4.5 Tampilan Simpanan dan Penarikan

public class Simpanan extends javax.swing.JFrame {


Koneksi con = new Koneksi();
Date tgl = new Date();
String idNasabah = "",idPegawai="";
int tipe;
SimpleDateFormat noformat=new SimpleDateFormat("yyMM");
SimpleDateFormat formatTanggal=new SimpleDateFormat("yyyy-
MM-DD");

/**
* 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;
}

String path = "addTransaksi";


String kodeTrans = txtkodetrans.getText();
String tglTrans = lblTanggal.getText();
String nominalTrans = String.valueOf(txtNominal.getText());
String tipeTrans = String.valueOf(tipe);
idPegawai = String.valueOf(lblPegawai.getText());

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));

String status = API.get();


System.out.println(status);
if(!status.equals("-2")){
JOptionPane.showMessageDialog(null,"Data Transaksi
Berhasil Tersimpan","Koneksi
Sukses",JOptionPane.INFORMATION_MESSAGE);
}else {
JOptionPane.showMessageDialog(null,"Gagal Menyimpan
Data","Koneksi Gagal",JOptionPane.INFORMATION_MESSAGE);
}

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

Proses penyimpanan data transaksi simpanan dan penarikan dilakukan


oleh client handler. Modul transaksi pada sisi client hanya menerima inputan data,
yang kemudian mengirim melalui data stream ke client handler. Berikut
merupakan kode program dari client handler untuk transaksi 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);

String kodeTrans = dis.readUTF();


System.out.println("Enkripsi kode transaksi :
"+kodeTrans);
kodeTrans = Transposisi.dekripsi(kodeTrans);
System.out.println("Dekripsi kode transaksi :
"+kodeTrans);

String tipeTrans = dis.readUTF();


System.out.println("Enkripsi tipe transaksi :
"+tipeTrans);
tipeTrans = Transposisi.dekripsi(tipeTrans);
System.out.println("Dekripsi tipe transaksi :
"+tipeTrans);

String tglTrans = dis.readUTF();


System.out.println("Enkripsi tanggal transaksi :
"+tglTrans);
tglTrans = Transposisi.dekripsi(tglTrans);
System.out.println("Dekripsi tanggal transaksi :
"+tglTrans);

String nominalTrans = dis.readUTF();


System.out.println("Enkripsi nominal transaksi :
"+nominalTrans);
nominalTrans = Transposisi.dekripsi(nominalTrans);
System.out.println("Dekripsi nominal transaksi :
"+nominalTrans);

String idPegawai = dis.readUTF();


System.out.println("Enkripsi id pegawai :
"+idPegawai);
idPegawai = Transposisi.dekripsi(idPegawai);
System.out.println("Dekripsi id pegawai :
"+idPegawai);
Koneksi koneksi = new Koneksi();
String query = "INSERT INTO tb_transaksi
(nasabah_id,kode_transaksi,jenis_transaksi_id,tgl_transaksi,nomi
nal_transaksi,pegawai_id) "
+ "VALUES
('"+idNasabah+"','"+kodeTrans+"','"+tipeTrans+"','"+tglTrans+"',
'"+nominalTrans+"','"+idPegawai+"');";
response =
String.valueOf(koneksi.setCommandToUpdateData(query));

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

4.5.2 Modul Pinjaman


Modul transaksi kedua adalah proses untuk transaksi pinjaman dana
kepada koperasi yang dilakukan oleh nasabah. Proses pinjaman menerima inputan
berupa besaran pinjaman, besaran bunga, dan lama peminjaman. Berikut
merupakan kode program modul pinjaman.

Gambar 4.6 Tampilan Modul Pinjaman

public class Pinjaman extends javax.swing.JFrame {

Koneksi con = new Koneksi();


Date tgl = new Date();
String idNasabah = "",idPegawai="";
double angsuran;
SimpleDateFormat noformat=new SimpleDateFormat("yyMM");
SimpleDateFormat formatTanggal=new SimpleDateFormat("yyyy-
MM-DD");

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));

String status = API.get();


System.out.println(status);
if(!status.equals("-2")){
JOptionPane.showMessageDialog(null,"Data Transaksi
Berhasil Tersimpan","Koneksi
Sukses",JOptionPane.INFORMATION_MESSAGE);
}else {
JOptionPane.showMessageDialog(null,"Gagal Menyimpan
Data","Koneksi Gagal",JOptionPane.INFORMATION_MESSAGE);
}

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

Proses penyimpanan data transaksi pinjaman dilakukan oleh client


handler. Modul transaksi pada sisi client hanya menerima inputan data, yang
kemudian mengirim melalui data stream ke client handler. Berikut merupakan
kode program dari client handler untuk transaksi pinjaman.

private String addPinjaman(){


String response = "-2";
try{
System.out.println("--- Tambah Pinjaman ---");
String idNasabah = dis.readUTF();
System.out.println("Enkripsi id nasabah :
"+idNasabah);
idNasabah = Transposisi.dekripsi(idNasabah);
System.out.println("Dekripsi id nasabah :
"+idNasabah);

String pokok = dis.readUTF();


System.out.println("Enkripsi pokok pinjaman :
"+pokok);
pokok = Transposisi.dekripsi(pokok);
System.out.println("Dekripsi pokok pinjaman :
"+pokok);

55
String tglTrans = dis.readUTF();
System.out.println("Enkripsi tanggal pinjaman :
"+tglTrans);
tglTrans = Transposisi.dekripsi(tglTrans);
System.out.println("Dekripsi tanggal pinjaman :
"+tglTrans);

String bunga = dis.readUTF();


System.out.println("Enkripsi bunga : "+bunga);
bunga = Transposisi.dekripsi(bunga);
System.out.println("Dekripsi bunga : "+bunga);

String kodePinjam = dis.readUTF();


System.out.println("Enkripsi kode pinjaman :
"+kodePinjam);
kodePinjam = Transposisi.dekripsi(kodePinjam);
System.out.println("Dekripsi kode pinjaman :
"+kodePinjam);

String waktu = dis.readUTF();


System.out.println("Enkripsi jangka waktu :
"+waktu);
waktu = Transposisi.dekripsi(waktu);
System.out.println("Dekripsi jangka waktu :
"+waktu);

String idPegawai = dis.readUTF();


System.out.println("Enkripsi id pegawai :
"+idPegawai);
idPegawai = Transposisi.dekripsi(idPegawai);
System.out.println("Dekripsi id pegawai :
"+idPegawai);

String pokokAngsuran = dis.readUTF();


System.out.println("Enkripsi pokok angsuran :
"+pokokAngsuran);
pokokAngsuran = Transposisi.dekripsi(pokokAngsuran);
System.out.println("Dekripsi pokok angsuran :
"+pokokAngsuran);

String dt = dis.readUTF();
System.out.println("Enkripsi jatuh tempo : "+dt);
dt = Transposisi.dekripsi(dt);
System.out.println("Dekripsi jatuh tempo : "+dt);

Koneksi koneksi = new Koneksi();


String query = "INSERT INTO tb_pinjaman
(kode_pinjaman,tgl_pinjaman,pegawai_id,nasabah_id,pokok_pinjaman
,bunga,pokok_angsuran,jangka_waktu,tgl_jatuh_tempo) "
+ "VALUES
('"+kodePinjam+"','"+tglTrans+"','"+idPegawai+"','"+idNasabah+"'
,'"+pokok+"','"+bunga+"','"+pokokAngsuran+"','"+waktu+"','"+dt+"
');";
response =
String.valueOf(koneksi.setCommandToUpdateData(query));

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

4.5.3 Modul Angsuran


Modul transaksi ketiga adalah proses untuk transaksi angsuran dana
pinjaman yang dilakukan oleh nasabah. Proses angsuran menerima inputan berupa
besaran angsuran yang dibayarkan oleh nasabah. Berikut merupakan kode
program modul angsuran.

Gambar 4.7 Modul Angsuran

public class Angsuran extends javax.swing.JFrame {


Koneksi con = new Koneksi();
Date tgl = new Date();
String idNasabah = "",idPegawai="", idPinjaman="";
int nominalBunga,nominalAngsuran, sisaPinjam;

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 {

ResultSet result = con.setCommandToGetData("SELECT


tb_pinjaman.id,nama_nasabah,pokok_pinjaman,pokok_angsuran,bunga,
jangka_waktu,tb_pinjaman.tgl_pinjaman,tb_pinjaman.tgl_jatuh_temp
o,tb_pinjaman.status_pinjaman"
+ " FROM tb_pinjaman"
+ " INNER JOIN tb_nasabah ON tb_nasabah.id =
tb_pinjaman.nasabah_id"
+ " WHERE tb_pinjaman.kode_pinjaman =
'"+txtkodepinjam.getText()+"'");
// ResultSet result1 =
con.setCommandToGetData("SELECT * FROM tb_jenis_transaksi");
while(result.next()){
tampil();
no();
// String s =
result1.getString(2);
// System.out.println(s);
// lblPegawai.setText(Session.getIDLogin());
// String idPinjaman = result.getString(1);
String tgl_pinjam = result.getString(7);
String tgl_jatuh_tempo = result.getString(8);
String status_pinjaman = result.getString(9);
String namaNasabah = result.getString(2);
String pokokPinjaman = result.getString(3);
String pokokAngsuran = result.getString(4);
String bunga = result.getString(5);
String jangkaWaktu = result.getString(6);

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());

int seleksiPeriode = Integer.parseInt(periodeAngsuran)-


1;
System.out.println(seleksiPeriode);

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)
));

String status = API.get();


System.out.println(status);
if(!status.equals("-2")){
JOptionPane.showMessageDialog(null,"Data Transaksi
Berhasil Tersimpan","Koneksi
Sukses",JOptionPane.INFORMATION_MESSAGE);
}else {
JOptionPane.showMessageDialog(null,"Gagal Menyimpan
Data","Koneksi Gagal",JOptionPane.INFORMATION_MESSAGE);
}

}
Kode Program 4.15 Modul Angsuran

Proses penyimpanan data transaksi angsuran dilakukan oleh client


handler. Modul transaksi pada sisi client hanya menerima inputan data, yang
kemudian mengirim melalui data stream ke client handler. Berikut merupakan
kode program dari client handler untuk transaksi angsuran.

private String addAngsuran(){


String response = "-2";
try{
System.out.println("--- Tambah Angsuran ---");
String kodeAngsuran = dis.readUTF();
System.out.println("Enkripsi kode angsuran :
"+kodeAngsuran);
kodeAngsuran = Transposisi.dekripsi(kodeAngsuran);
System.out.println("Dekripsi kode angsuran :
"+kodeAngsuran);

String tanggalAngsuran = dis.readUTF();


System.out.println("Enkripsi tanggal angsuran :
"+tanggalAngsuran);

60
tanggalAngsuran =
Transposisi.dekripsi(tanggalAngsuran);
System.out.println("Dekripsi tanggal angsuran :
"+tanggalAngsuran);

String pinjamanID = dis.readUTF();


System.out.println("Enkripsi id pinjaman :
"+pinjamanID);
pinjamanID = Transposisi.dekripsi(pinjamanID);
System.out.println("Dekripsi id pinjaman :
"+pinjamanID);

String periodeAngsuran = dis.readUTF();


System.out.println("Enkripsi periode angsuran :
"+periodeAngsuran);
periodeAngsuran =
Transposisi.dekripsi(periodeAngsuran);
System.out.println("Dekripsi periode angsuran :
"+periodeAngsuran);

String totalAngsuran = dis.readUTF();


System.out.println("Enkripsi total angsuran :
"+totalAngsuran);
totalAngsuran = Transposisi.dekripsi(totalAngsuran);
System.out.println("Dekripsi total angsuran :
"+totalAngsuran);

String nominalAngsuran = dis.readUTF();


System.out.println("Enkripsi nominal angsuran :
"+nominalAngsuran);
nominalAngsuran =
Transposisi.dekripsi(nominalAngsuran);
System.out.println("Dekripsi nominal angsuran :
"+nominalAngsuran);

String nominalBunga = dis.readUTF();


System.out.println("Enkripsi nominal bunga :
"+nominalBunga);
nominalBunga = Transposisi.dekripsi(nominalBunga);
System.out.println("Dekripsi nominal bunga :
"+nominalBunga);

String sisaPinjam = dis.readUTF();


System.out.println("Enkripsi sisa pinjaman :
"+sisaPinjam);
sisaPinjam = Transposisi.dekripsi(sisaPinjam);
System.out.println("Dekripsi sisa pinjaman :
"+sisaPinjam);

Koneksi koneksi = new Koneksi();


String query = "INSERT INTO tb_angsuran
(kode_angsuran,tgl_angsuran,pinjaman_id,periode,total_angsuran,n
ominal_angsuran,nominal_bunga,sisa_pinjaman) "
+ "VALUES
('"+kodeAngsuran+"','"+tanggalAngsuran+"','"+pinjamanID+"','"+pe
riodeAngsuran+"','"+totalAngsuran+"','"+nominalAngsuran+"','"+no
minalBunga+"','"+sisaPinjam+"');";

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

4.6 Pengujian Login


Tahap pengujian login dilakukan untuk melakukan pengetesan saat
pegawai mengimputkan data yang benar dan salah apakah authentikasi dapat
melakukan validasi. Berikut merupakan hasil dari validasi authentikasi login
ketika berhasil login dan gagal login.

Gambar 4.8 Pengujian Login

62
Gambar 4.9 Pengujian Login Lanjutan

4.7 Pengujian Sistem Master Data


Tahap pengujian data master untuk melakukan pengujian terhadap proses
masing-masing data sudah berjalan sesuai dengan rancangan kode program atau
masih ada anomaly atau kesalahan.
4.7.1 Pengujian Data Nasabah
Tahap pengujian data nasabah dilakukan untuk menguji hasil proses
modul data nasabah dalam melakukan proses penambahan data nasabah,
perubahan data nasabah, dan penghapusan data nasabah. Berikut merupakan hasil
pengujian untuk penambahan, perubahan, dan penghapusan data.

63
Gambar 4.10 Pengujian Simpan Data Nasabah

Gambar 4.11 Pengujian Ubah Data Nasabah

64
Gambar 4.12 Pengujian Hapus Data Nasabah

4.7.2 Pengujian Data Tabungan


Tahap pengujian data tabungan dilakukan untuk menguji hasil proses
modul data tabungan dalam melakukan proses menampilkan data tabungan dan
riwayat transaksi dari nasabah yang kode anggotanya diinputkan oleh pegawai.
Berikut merupakan hasil pengujian untuk data tabungan nasabah.

Gambar 4.13 Pengujian Data Tabungan

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.

Gambar 4.14 Pengujian Data Pinjaman

4.8 Pengujian Sistem Transaksi


Tahap pengujian transaksi merupakan proses untuk menguji hasil dari
proses transaksi simpanan, penarikan, pinjaman, dan angsuran apakah sudah
sesuai dengan rancangan kode program modul masing-masing transaksi.
4.8.1 Pengujian Transaksi Simpanan dan Penarikan
Tahap pengujian modul simpanan dan penarikan untuk menguji hasil
proses dari simpanan dan penarikan dalam melakukan penyimpanan data ke
database tanpa adanya kesalahan. Berikut merupakan hasil dari pengujian
transaksi simpanan dan penarikan.

66
Gambar 4.15 Pengujian Transaksi Simpanan

Gambar 4.16 Pengujian Transaksi Penarikan

4.8.2 Pengujian Transaksi Pinjaman


Tahap pengujian modul pinjaman untuk menguji hasil proses dari
pinjaman dalam melakukan proses perhitungan dan penyimpanan data ke database
tanpa adanya kesalahan. Berikut merupakan hasil dari pengujian transaksi
pinjaman.

67
Gambar 4.17 Pengujian Transaksi Pinjaman

4.8.3 Pengujian Transaksi Angsuran


Tahap pengujian modul angsuran untuk menguji hasil proses dari
angsuran dalam melakukan proses perhitungan dan penyimpanan data ke database
tanpa adanya kesalahan. Berikut merupakan hasil dari pengujian transaksi
angsuran.

68
Gambar 4.18 Pengujian Transaksi Angsuran

4.9 Pengujian Sistem Kriptografi


Tahap pengujian kriptografi merupakan proses untuk menguji hasil dari
proses enkripsi dan dekripsi apakah sudah sesuai dengan algoritma kriptografi
transposisi yang digunakan. Berikut kode program dari kriptografi trasnposisi
untuk melakukan enkripsi dan dekripsi.

public class Transposisi {


private static final int[] kataKunci = {6, 1, 5, 3, 2,
4}; // TEKNIK

public static String enkripsi(String plainText) {


char[] alfabet = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z'
};
char[][] charPlainText = new char
[(int) Math.ceil((double) plainText.length() /
kataKunci.length)]
[kataKunci.length];
int counter = 0;
int leftover = ((int) Math.ceil((double)
plainText.length() / kataKunci.length)
* kataKunci.length) - plainText.length();
String chiperText = "";

for(int i = 0; i < charPlainText.length; i++){


for(int j = 0; j < charPlainText[i].length; j++){
charPlainText[i][j] = plainText.charAt(counter);
counter++;
if(counter == plainText.length()){
break;
}
}
}

for(int i = charPlainText[0].length - leftover; i <


charPlainText[0].length; i++){
charPlainText[charPlainText.length - 1][i] =
alfabet[alfabet.length - (charPlainText[0].length - i)];
}

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;
}

public static String dekripsi(String chiperText) {


char[] alfabet = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z'
};
char[][] charChiperText = new char
[(int) Math.ceil((double) chiperText.length() /
kataKunci.length)]
[kataKunci.length];
int counter = 1;
int karakter = 0;
String plainText = "";

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;

for(int i = charChiperText[0].length - 1; i > 0; i--){


if(charChiperText[charChiperText.length - 1][i] ==
alfabet[alfabet.length - karakter]){
counter++;
karakter++;
}
}

for(int i = 0; i < charChiperText.length; i++){


if(i == charChiperText.length - 1){
for(int j = 0; j < charChiperText[i].length -
counter; j++){
plainText += charChiperText[i][j];

70
}
} else {
for(int j = 0; j < charChiperText[i].length; j+
+){
plainText += charChiperText[i][j];
}
}
}

return plainText;
}
}
Kode Program 4.17 Kriptografi Transposisi

4.9.1 Pengujian Sistem Enkripsi dan Dekripsi


Tahap pengujian sistem enkripsi dan dekripsi untuk menguji hasil proses
dari enkripsi plaintext data menjadi chipertext sesuai dengan key yang sudah
ditentukan kemudian melakukan dekripsi dari chipertext ke plaintext. Berikut
merupakan hasil dari enkripsi transposisi.

Gambar 4.19 Pengujian Kriptografi Transposisi

71
BAB V
PENUTUP

Bab V merupakan bagian punutup pada penulisan Laporan Pemrograman


Jaringan yang telah dibuat. Pada bagian ini berisi kesimpulan dan saran
berdasarkan hasil dari pembahasan yang telah dibuat.
5.1 Kesimpulan
Kesimpulan yang dapat diambil oleh penulis berdasarkan implementasi dan
pembahasan Aplikasi Koperasi yang telah dibuat adalah sebagai berikut.
a. Aplikasi Koperasi ini dapat memudahkan karyawan koperasi dalam
mengelola data koperasi itu sendiri, seperti data nasabah, data transaksi,
dan data lainnya.
b. Aplikasi Koperasi ini dilengkapi dengan banyak fitur dan sudah
terintegrasi dengan database MySQL dan juga data yang dikirimkan
telah melalui proses enkripsi agar data yang dikirim dan diterima melalui
server keamanannya terjaga

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

[1] Anonim. (2019). Penjelasan dan Konsep OOP (Object Oriented


Programming). Indonesia: https://www.belajarcpp.com/tutorial/cpp/penjelasan-
oop/.
[2] Muhardian, A. (2017). Belajar Java OOP: Memahami Konsep Dasar OOP
(untuk Pemula). Indonesia: https://www.petanikode.com/java-oop/.
[3] Munandar, A. (2016). Pengertian MySQL. Indonesia:
https://bahasaweb.com/pengertian-mysql/.
[4] Ahmad Muhardian. (2016). Pemrograman Java Swing: Membuat Jendela
dengan JFrame: https://www.petanikode.com/java-swing-jframe/

73

Anda mungkin juga menyukai