SISTEM PENGGAJIAN PERKANTORAN MENGGUNAKAN METODE BERORIENTASI OBJEK SKRIPSI Diajukan Untuk Melengkapi Salah Satu Syarat Memperoleh Gelar Sarjana (Strata 1)
Oleh : DEDE IIN MUTMAINAH 2009140799
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS PAMULANG PAMULANG 2013
SISTEM PENGGAJIAN PERKANTORAN MENGGUNAKAN METODE BERORIENTASI OBJEK SKRIPSI
Oleh : DEDE IIN MUTMAINAH 2009140799
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS PAMULANG PAMULANG 2013 i
LEMBAR PERNYATAAN Yang bertanda tangan di bawah Nama
: Dede Iin Mutmainah
NIM
: 2009140799
Program Studi
: Teknik Informatika
Fakultas
: Teknik
Jenjang Pendidikan
: Strata1
Menyatakan bahwa skripsi yang saya buat dengan judul: SISTEM PENGGAJIAN PERKANTORAN MENGGUNAKAN METODE BERORIENTASI OBJEK 1. Merupakan hasil karya tullis ilmiah sendiri, bukan merupakan karya yang pernah diajukan untuk memperoleh gelar akademik oleh pihak lain, dan bukan merupakan hasil plagiat. 2. Saya ijinkan untuk dikelola oleh Universitas Pamulang sesuai dengan norma hokum dan etika yang berlaku.
Pernyataan ini saya buat dengan penuh tanggung jawab dan saya bersedia menerima konsekuensi apapun sesuai yang berlaku apabila di kemudian hari pernyataan ini tidak benar.
Pamulang, 18 September 2013
(Dede Iin Mutmainah)
ii
LEMBAR PERSETUJUAN NIM
: 2009140799
Nama
: Dede Iin Mutmainah
Program Studi
: Teknik Informatika
Fakultas
: Teknik
Jenjang Pendidikan
: Strata 1
Judul Skripsi
:SISTEM PENGGAJIAN PERKANTORAN MENGGUNAKAN METODE BERORIENTASI OBJEK
Skripsi ini telah diperiksa dan disetujui. Pamulang , 18 September 2013
Riswal Hanafi Siregar, S.Si.,MSi. Pembimbing
Mengetahui,
Ahmad Hindasyah, SSi, MSi. KaProdi Teknik Informatika
iii
LEMBAR PENGESAHAN NIM
: 2009140799
Nama
: Dede Iin Mutmainah
Program Studi
: Teknik Informatika
Fakultas
: Teknik
Jenjang Pendidikan
: Strata 1
Judul Skripsi
: SISTEM PENGGAJIAN PERKANTORAN MENGGUNAKAN METODE BERORIENTASI OBJEK
Skripsi ini telah dipertahankan di hadapan dewan penguji ujian skripsi fakultas Teknik, program studi Teknik Informatika dan dinyatakan LULUS. Pamulang, 18 September 2013
Normalisa,S.Kom.,M.Kom.
Adi Sulistiyo Nugroho S.Kom.,M.M.
Penguji 1
Penguji II
Riswal Hanafi Siregar, S.Si.,MSi. Pembimbing
Mengetahui,
Ahmad Hindasyah, SSi, MSi. KaProdi Teknik Informatika
iv
KATA PENGANTAR Puji Syukur penulis panjatkan kehadirat Tuhan Yang Maha Esa, yang telah
melimpahkan
rahmat
dan
karunia-Nya,
sehingga
penulis
dapat
menyelesaikan proposal tugas akhir dengan judul ”SISTEM PENGGAJIAN PERKANTORAN MENGGUNAKAN METODE BERORIENTASI OBJEK” ini dengan sebaik-baiknya dan tidak lupa pula shalawat serta salam semoga tercurahkan kepada Nabi Muhammad SAW, Keluarga,sahabat dan semoga sampai kepada pengikutnya hingga akhir zaman. Dalam penyusunan proposal tugas akhir ini penulis banyak mendapatkan masukan-masukan yang berharga baik moril maupun materi.Maka dalam kesempatan ini penulis ingin mengucapkan terima kasih yang sebesar-besarnya semoga Allah SWT, kepada penulis untuk menyusun proposal ini dengan sebaikbaiknya.senantiasa melimpahkan rahmat,hidayah serta karunia_Nya kepada : 1. Bapak Drs. H. Darsono, selaku pemilik yayasan sasmita jaya, Universitas Pamulang dan Stikes Unpam yang telah memberikan kesempatan kepada penulis untuk menyelesaikan kuliah di Universitas Pamulang. 2. Bapak DR. Dayat Hidayat, M.M selaku Rektor Universitas Pamulang. 3. Bapak Ir. Sewaka, M.M selaku Dekan Fakultas Teknik di Universitas Pamulang. 4. Bapak Ahmad Hindasyah, SSi, MSi., selaku Kaprodi Tehnik Informatika Universitas Pamulang. 5. Bapak Riswal Hanafi Siregar, S.Si, MSi., selaku dosen pembimbing Tehnik Informatika Universitas Pamulang. 6. Kedua orang tua penulis yang telah memberikan segala-galanya buat penulis hingga penulis tidak mampu mengungkapkan dengan lisan maupun tulisan. 7. Bapak Ardiansyah Murdiawan Saputra selaku direktur utama PT.Arlinda Putra yang telah memberikan kesempatan untuk dapat melakukan survey dan penelitian di PT.Arlinda Putra.
v
Penulis menyadari bahwa tak ada gading yang tak retak.Oleh karena itu,kritik
dan
saran
yang
konstruktif
sangat
penulis
harapkan
demi
menyempurnakan tugas-tugas berikutnya.Akhir kata semoga proposal tugas akhir ini bermanfaat bagi semua pihak yang membutuhkan khususnya bagi mahasiswa Tehnik Informatika Universitas Pamulang yang hendak mengajukan tugas akhir dan masyarakat pada umumnya.
Pamulang, 18 September 2013
Dede Iin Mutmainah
vi
ABSTRACT Salary is financial returns received by employeesin exchange for their contribution to an organization / company / institution wheretheir work. Utilization of science and technology that is not optimal, the sourceinadequate human resources, facilities and infrastructure that are less supportive,and salary calculations are usually done at the end of the month by spv, are the factors that cause high errorof the technical payroll processing or calculating employee salary detailson an institution. The purpose of this study is: to build software applicationsfinancial data to the Java programming language that is easy, efficient,cheap, with adequate results and conduct a test of the systemthat has been built. Subjects in this study is the application software payroll system officeXYZ, particularly the manufacture of employee salaries each month.Step development of this application begins with data collection personnel,analysis of the data, making the submission process payroll cycle,salary calculation, making data flow diagrams, interface design, andsystem testing with black box test This research resulted in a form of software"Office Payroll System Using Object-Oriented Methods"The information generated from this system is related to employee datawith salaries, printing of employee salaries and financial reporting. based onthe results of the testing that has been done, the system can run well andfit for use. Kunnci words: java, salary payroll system,
vii
ABSTRAK Gaji merupakan kembalian finansial yang diterima oleh para pegawai sebagai
ganti
konstribusi
mereka
terhadap
suatu
organisasi/perusahaan/instansitempat mereka bekerja (iwan kurnianto:2008). Pemanfaatan ilmu dan teknologi yang belum optimal, sumber daya manusia yang belum memadai,sarana dan prasarana yang kurang mendukung, dan perhitungan gaji yang biasanya dilakukan pada akhir bulan oleh spv, merupakan faktor-faktor penyebab tingginya kesalahan teknis pembuat daftar gaji dalam memproses atau menghitung rincian gaji pegawai pada suatu instansi. Tujuan dari penelitian ini adalah: membangun software aplikasi data keuangan dengan bahasa pemrograman java yang mudah, efisien, murah, dengan hasil yang memadai dan melakukan suatu pengujian terhadap sistem yang telah dibangun. Subjek pada penelitian ini adalah software aplikasi sistem penggajian perkantoranPT.XYZ, khususnya pembuatan gaji pegawai tiap bulannya. Langkah pengembangan aplikasi ini diawali dengan pengumpulan data pegawai, analisis data, pembuatan siklus proses pengajuan gaji, perhitungan gaji, pembuatan diagram alur data, perancangan antarmuka, dan pengujian sistem dengan black box test. Penelitian yang dilakukan ini menghasilkan sebuah perangkat lunak berupa
“Sistem
Penggajian
Perkantoran
Dengan Menggunakan
Metode
Berorientasi Objek”Informasi yang dihasilkan dari sistem ini adalah data pegawai yang berhubungan dengan gaji, pencetakan gaji pegawai dan pembuatan laporan keuangan. Berdasarkan hasil pengujian yang telah dilakukan, sistem tersebut dapat berjalan dengan baik dan layak digunakan. Kata kunnci: java, gaji sistem penggajian,
viii
DAFTAR ISI
LEMBAR PERNYATAAN .................................................................................... ii LEMBAR PERSETUJUAN................................................................................... iii LEMBAR PENGESAHAN ................................................................................... iv KATA PENGANTAR ............................................................................................ v ABSTRACT .......................................................................................................... vii ABSTRAK ........................................................................................................... viii DAFTAR ISI .......................................................................................................... ix DAFTAR GAMBAR ........................................................................................... xiii DAFTAR TABEL ................................................................................................ xvi DAFTAR SIMBOL............................................................................................. xvii BAB I PENDAHULUAN ....................................................................................... 1 1.1.
Latar Belakang ......................................................................................... 1
1.2.
Rumusan Masalah .................................................................................... 2
1.3.
Tujuan Penelitian ...................................................................................... 2
1.4.
Batasan Masalah ....................................................................................... 2
1.5.
Manfaat Penelitian .................................................................................... 3
1.6.
Metode Penelitian ..................................................................................... 3
1.7.
Sistematika Penulisan ............................................................................... 4
BAB II LANDASAN TEORI ................................................................................. 6 2.1.
Definisi Penggajian .................................................................................. 6
2.2.
Pemrograman Berorientasi Objek ............................................................ 6
2.2.1.
Keuntungan metode berarah berorientasi objek ................................ 7
2.2.2.
Penentuan objek dan kelas ................................................................ 7
ix
2.2.3. 2.3.
Model MVC(Model-View-Controller) ............................................. 8
Definisi UML ......................................................................................... 10
2.3.1.
Use Case Diagram ........................................................................... 11
2.3.2.
Activity Diagram ............................................................................. 12
2.3.3.
Class Diagram ................................................................................. 15
2.3.4.
Sequence Diagram .......................................................................... 16
2.4.
Definisi Basis Data ................................................................................. 16
2.4.1.
Tujuan Basis Data ........................................................................... 17
2.4.2.
DBMS (Database Management System) ........................................ 17
2.4.3.
Merancang Model Basis Data ......................................................... 18
2.5.
Teori Pemrograman ................................................................................ 21
2.5.1.
Java.................................................................................................. 21
2.5.2.
Keunggulan Java ............................................................................. 22
2.6.
Aplikasi Pendukung ............................................................................... 24
2.6.1.
Netbeans .......................................................................................... 24
2.6.2.
JasperReport .................................................................................... 24
2.6.3.
MySQL............................................................................................ 25
BAB III ANALISA DAN PERANCANGAN ...................................................... 28 3.1.
Analisa .................................................................................................... 28
3.1.1.
Analisa Sistem Berjalan .................................................................. 28
3.1.2.
Analisa data ..................................................................................... 30
3.1.3.
Analisa Perangkat Keras ................................................................. 31
3.1.4.
Analisa Perangkat Lunak ................................................................ 32
3.1.5.
Analisa User .................................................................................... 32
3.1.6.
Analisa Kebutuhan .......................................................................... 33
3.2.
Perancangan ............................................................................................ 35
x
3.2.1.
Perancangan Basis Data .................................................................. 35
3.2.2.
Perancangan Aplikasi ...................................................................... 53
BAB IV IMPLEMENTASI DAN PENGUJIAN .................................................. 66 4.1.
Implementasi Aplikasi ............................................................................ 66
4.2.
Implementasi Komputer ......................................................................... 66
4.2.1.
Implementasi Perangkat Keras ........................................................ 66
4.2.2.
Implementasi Perangkat Lunak ....................................................... 66
4.2.3.
Implementasi Antar Muka............................................................... 67
4.3.
Pengujian Aplikasi / Testing Apliccation ............................................... 70
4.3.1
Kasus dan pengujian ....................................................................... 71
BAB V PENUTUP ................................................................................................ 73 5.1.
Kesimpulan ............................................................................................. 73
5.2.
Saran ....................................................................................................... 73
DAFTAR PUSTAKA ........................................................................................... 74 LAMPIRAN .......................................................................................................... 76 6.1.
ApplicationContext.xml ......................................................................... 76
6.2.
Main Java ............................................................................................... 77
6.3.
KaryawanController.java ....................................................................... 80
6.4.
SQLTemplete.java .................................................................................. 89
6.5.
KaryawanDao.java ................................................................................. 91
6.6.
Karyawan.java ........................................................................................ 93
6.7.
MasterSevice.java................................................................................. 104
6.8.
TableModel.java ................................................................................... 108
6.9.
MessageUtility.java .............................................................................. 111
6.10.
MainFrame.java ................................................................................ 113
6.11.
LaporanDataKaryawanPanel.java..................................................... 131
xi
6.12.
KaryawanPanel.java ......................................................................... 135
6.13.
PenggajianDialog.java ...................................................................... 168
6.14.
PenggajianPanel.java ........................................................................ 221
xii
DAFTAR GAMBAR Gambar 2.0-1Simbol kelas ...................................................................................... 8 Gambar 2.0-2 Simbol class & object ...................................................................... 8 Gambar 2.0-3 Komponen model MVC................................................................... 9 Gambar 2.0-4 Simbol actor use case..................................................................... 11 Gambar 2.0-5 Simbol Use Case ............................................................................ 12 Gambar 2.0-6 Simbol Relationship ....................................................................... 12 Gambar 2.0-7 Simbol Star Activity diagram ........................................................ 12 Gambar 2.0-8 Simbol final Activity diagram ....................................................... 13 Gambar 2.0-9 Simbol Activity .............................................................................. 13 Gambar 2.0-10 Simbol Hole Activities................................................................. 13 Gambar 2.0-11 Simbol Miracle Activities ............................................................ 13 Gambar 2.0-12 Simbol Fork ................................................................................. 14 Gambar 2.0-13 Simbol Join .................................................................................. 14 Gambar 2.0-14 Simbol Decision Point ................................................................. 14 Gambar 2.0-15 Simbol Swimlane ......................................................................... 15 Gambar 2.0-16Class model diagram .................................................................... 15 Gambar 2.0-17 model sequence diagram .............................................................. 16 Gambar 3.0-1 Activity Diagram Proses Pengumpulan Data ................................. 28 Gambar 3.0-2 Activity Diagram Proses Penggajian .............................................. 29 Gambar 3.0-3 Activity Diagram Proses Pembuatan Laporan ............................... 29 Gambar 3.0-4 Ketergantungan Fungsi Pada Relasi Cabang ................................. 35 Gambar 3.0-5 Ketergantungan Fungsi Pada Relasi Jabatan ................................. 35 Gambar 3.0-6 Ketergantungan Fungsi Pada Relasi Jenis Potongan ..................... 36 Gambar 3.0-7 Ketergantungan Fungsi Pada Relasi Potongan .............................. 37 Gambar 3.0-8 Ketergantungan Fungsi Pada Relasi Detil pengurangan ................ 38 Gambar 3.0-9 Ketergantungan Fungsi Pada Relasi Karyawan ............................. 39 Gambar 3.0-10 Ketergantungan Fungsi Pada Relasi Jenis Pendapatan ................ 40 Gambar 3.0-11 Ketergantungan Fungsi Pada Relasi Gaji .................................... 40 Gambar 3.0-12 Ketergantungan Fungsi Pada Relasi Detil Pendapatan ................ 41 Gambar 3.0-13 Ketergantungan Fungsi Pada Relasi Slip ..................................... 42
xiii
Gambar 3.0-14 Ketergantungan Fungsi Pada Relasi Tahun Buku ....................... 43 Gambar 3.0-15 Entity Relational Diagram Sistem Usulan................................... 44 Gambar 3.0-16 Transformasi ERD KE LRS ......................................................... 45 Gambar 3.0-17 Logical Record Structure ............................................................. 46 Gambar 3.0-18 Use Case Diagram Sistem Penggajian ......................................... 53 Gambar 3.0-19 Class Diagram Sistem Usulan ...................................................... 54 Gambar 3.0- 20 Sequence Diagram Karyawan ..................................................... 55 Gambar 3.0-21 Sequence Diagram Cabang ......................................................... 55 Gambar 3.0-22 Sequence Diagram Jabatan .......................................................... 56 Gambar 3.0-23 Squence Diagram Tahun Buku .................................................... 56 Gambar 3.0-24 Squence Diagram Potongan ......................................................... 57 Gambar 3.0-25 Sequence DiagramPenggajian ..................................................... 57 Gambar 3.0-26 Sequence DiagramLaporan Karyawan ........................................ 58 Gambar 3.0-27 Sequence DiagramLaporan Penggajian ....................................... 58 Gambar 3.0-28 Sequence Diagram Laporan Potongan ......................................... 59 Gambar 3.0-29 Sequence Diagram User ............................................................... 59 Gambar 3.0-30 Activity Diagram Login User ...................................................... 60 Gambar 3.0-31 Activity Diagram Pendataan Pegawai ........................................ 61 Gambar 3.0-32 Activity Diagram Penghitungan Gaji .......................................... 62 Gambar 3.0-33 Activity Diagram Pembuatan Laporan ....................................... 62 Gambar 3.0-34 User Interface Login User ........................................................... 63 Gambar 3.0-35 User Interface Cabang ................................................................ 63 Gambar 3.0-36 User Interface Jabatan ................................................................. 63 Gambar 3.0-37 User Interface Dialog Jabatan ..................................................... 64 Gambar 3.0-38 User InterfaceKaryawan .............................................................. 64 Gambar 3.0-39 User Interface Dialog Karyawan ................................................. 65 Gambar 4.0-1 Tampilan File Jabatan .................................................................... 67 Gambar 4.0-2 Tampilan File Tambah/Ubah Jabatan ............................................ 67 Gambar
4.0-3
Tampilan
FileTambah/Ubah
penerimaan
gaji
karyawan
berdasarkan jabatan ............................................................................................... 68 Gambar 4.0-4 Tampilan File Karyawan ............................................................... 68 Gambar 4.0-5 Tampilan FileTambah/Ubah Karyawan ........................................ 69
xiv
Gambar 4.0-6 Tampilan File Cabang ................................................................... 69 Gambar 4.0-7 Tampilan FileTahun Buku ............................................................. 70
xv
DAFTAR TABEL Tabel 2.1Diagram UML ........................................................................................ 10 Tabel 3.1 Data karyawan....................................................................................... 47 Tabel 3.2 Data jabatan........................................................................................... 48 Tabel 3.3 Slip ........................................................................................................ 48 Tabel 3.4 Gaji Karyawan ...................................................................................... 49 Tabel 3.5 Cabang .................................................................................................. 49 Tabel 3.6 Detil Pendapatan ................................................................................... 50 Tabel 3.7 Jenis pendapatan ................................................................................... 50 Tabel 3.8 Potongan................................................................................................ 51 Tabel 3.9 Detil pengurangan ................................................................................. 51 Tabel 3.10 Jenis potongan ..................................................................................... 52 Tabel 3.11 Tahun Buku ....................................................................................... 52 Tabel 3.12 User ..................................................................................................... 53 Tabel 4.1 Rencana pengujian.............................................................................. 70 Tabel 4.2 Pengujian login (data normal) ............................................................... 71 Tabel 4.3 Pengujian login (data normal) ............................................................... 71 Tabel 4.4 Pengujian Gaji ....................................................................................... 71 Tabel 4.5 Pengujian Slip Gaji ............................................................................... 72
xvi
DAFTAR SIMBOL
1. Usecase Diagram Actor
Actor Use Case Association
2. Class Diagram
name
Class, Nama, Atribut, Method
-atribute +methode() Assosiation
xvii
Multiplicity
3. Sequence Diagram Actor
Actor
Boundary
Control .
Entity
Object Message
xviii
Message of self
Object
xix
BAB I PENDAHULUAN 1.1.
Latar Belakang Gaji merupakan upah dari hasil kerja yang di terima seorang pekerja
secara tetap(Evi, 2013). Dalam penggajian setiap perusahaan memiliki sistem yang berbeda-beda.Pay for position dimana pegawai dihargai berdasarkan posisi atau jabatannya dalam perusahaan (Saiful, 2012). Sehingga tidaklah heran jika perusahaan mengalami kesulitan dalam melakukan perhitungan gajinya. Masalah yang timbul di departemen Finance bagian penggajian adalah akibat jumlah tenaga kerja yang banyak,biasanya dilakukan pada akhir bulan dan diakibatkan oleh banyaknya karyawan yang masuk dan mengundurkan diri setiap bulannya serta tersebarnya karyawan di berbagai cabang.Hal tersebut tentu menyulitkan dalam pengarsipan data karyawan, perhitungan gaji karyawan yang dihitung berdasarkan lama kerja karyawan dan tunjangan karyawan.Maka dari itu perusahaan memerlukan suatu sistem untuk menghitung dan membuat suatu laporan penggajian. Oleh karena itu dibutuhkan suatu sistem komputerisasi sehingga data yang di dapat lebih efisien dan efektif, sehingga mempermudah cara memproses data pengajian(Fahmi, 2000). Semakin banyak perusahaan yang menggunakan sistem komputerisasi diharapkan dapat meminimalkan kesalahan yang dibuat oleh manusia sehingga mengurangi kurugian yang besar. Oleh sebab itu penulis tertarik untuk melakukan penelitian pada bidang penggajian pada perusahaan dengan judul ”Sistem Penggajian Perkantoran MenggunakanMetode Berorentasi Objek ”.
1
2
1.2.
Rumusan Masalah Dalam penelitian karya ilmiah ini berdasarkan latar belakang, maka
permasalahan yang akan dibahas sebagai berikut: 1. Bagaimana system ini dapat membantu proses penghitungan gaji karyawan? 1.3.
Tujuan Penelitian Tujuan penelitian karya ilmiah berdasarkan rumusan masalah di atas
adalah: 1. Membantu proses penghitungan gaji karyawan pada sebuah perusahaan. 1.4.
Batasan Masalah Dalam penelitian karya ilmiah ini menggunakan metode beroreintasi
objek, dimana metode ini mempermudah para pengembang dan analisa untuk megimplementasi suatu pembuatan aplikasi, keutungan berorientasi objek ini meningkatkan produktifitas dimana kelas dan objek yang ditemukan pada suatu kasus masih dapat dipakai ulang untuk kasus lainnya, meningkatkan kualitas karena sistem yang dibangun dengan baik dan benar pada saat analisis dan perncangannya, mempermudah perawatan karena model objek pola-pola yang cenderung tetap dan stabil, adanya suatu konsistensi karena perwarisan dan penggunaan notasi yang sama pada saat analisis. maka penulis melakukan pembatasan masalah.Adapun batasan masalah ini adalah: 1. Pembahasan sistem mencakup data pegawai, proses pencatatan rekap absen, perhitungan tunjangan, proses perhitungan bonus dan potongan gaji pada sebuah perusahaan. 2. Laporan yang dihasilkan adalah data karyawan,laporan data penggajian karyawan dan pencetakan slip gaji.
3
1.5.
Manfaat Penelitian Manfaat yang dapat diperoleh dari penulisan karya ilmiah ini antara lain,
a. Manfaat pihak akademis Pada Universitas Pamulang, dalam penelitian ini juga dapat memberikan konstribusi untuk bahan kajian dikalangan akademis. b. Manfaat pihak instansi Diharapkan menjadi suatu system informasi
yang dapat digunakan pada
perusahaan-perusahaan,khususnya pada perusahaan tertentu dalam mengelola dan menghitung gaji, tunjangan, absensi, maupun laporan-laporan setiap karyawan diberbagai kantor cabang perusahaan. c. Manfaat bagi penulis Manfaat bagi penulis adalah untuk lebih mengerti masalah-masalah yang ada dalam sebuah perusahaan, terutama pada bagian penggajian karyawan pada perusahaan. 1.6.
Metode Penelitian
Metode penelitian 1. Studi Literatur Metode yang digunakan untuk mengumpulkan data adalah dengan cara observasi,wawancara , dan menganalisa dokumen yang berkaitan (document analysis). 2. Perencanaan Dalam pengumpulan data penulis menggunakan beberapa metode untuk mendapatkan hasil yang optimal,metode yang digunakan mengikuti SDLC (Sytem Development Life Sycle).Penulis juga melakukan studi pustaka dengan studi lapangan, mencari informasi langsung dari narasumber, dalam hal ini selaku pemilik perusahaan.
4
3. Analisis dan Perancangan Analisis ini mengenai tentang system yang sedang berjalan dan system yang akan diusulkan.Perancangan system seperti ERD,LRS,Usecase diagram, Sequence diagram,Class diagram. Desain interface untuk user. 4. Implementasi Sistem Membuat database yang diperlukan untuk menunjang program, membuat aplikasi menggunakan Netbeans 7.3 Dan MySql serta menjelaskan detil-detil sistem yang dibuat dengan menggunakan bahasa pemrograman yang sesuai. 5. Pengujian Sistem Dalam hal ini akan dilakukan pengujian terhadap sistem yang dibuat selama kurun waktu tertentu. Apakah aplikasi program dapat benar-benar membantu user dalam memecahkan masalah dan pengujian apakah memungkinkan terjadi human error. Sehingga dapat dilakukan perbaikan-perbaikan pada aplikasi.
1.7.
Sistematika Penulisan Sistematika dari penulisan ini dimaksudkan untuk memberi penjelasan
bagi pembaca mengenai setiap hal yang ada dalam penulisan ini yang terdiri dari lima bab, yang setiap babnya mempunyai isi pokok bahasan tersendiri, yaitu: BAB I PENDAHULUAN Memberikan
penjelasan
mengenai latar belakang permasalahan, rumusan
masalah,tujuan penelitian, batasan masalah, manfaat penelitian, metode penelitian dan sistematika penulisan. BAB II LANDASAN TEORI Bab ini berisi tentang kajian pustaka teori-teori dan definisi-definisi yang digunakan dalam membantu proses pembuatan tugas akhir. BAB IIIANALISA DAN PERANCANGAN
5
Bab ini penulis membuat sistem penggajian karyawan beserta aliran datanya,proses untuk bisa ditampilkan di program tersebut.
BAB IV PENGUJIAN DAN IMPLEMENTASI Melakukan testing ( uji coba ) dan implementasi terhadap program atau aplikasi tersebut. BAB V KESIMPULAN DAN SARAN Bab ini berisi tentang kesimpulan dan saran
BAB II LANDASAN TEORI 2.1.
Definisi Penggajian Gaji merupakan pembayaran atas penyerahan jasa yang dilakukan oleh
karyawan yang mempunyai jenjang jabatan seperti manajer(Mulyadi, 2001). Gaji adalah suatu bentuk pembayaran secara periodik dari pihak perusahaan atau majikan kepada karyawannya atau pekerjaanya sesuai dengan yang dinyatakan dalam kontrak kerja. Dari sudut pandang pelaku bisnis, gaji dapat dianggap sebagai biaya yang dibutuhkan untuk mendapatkan sumber daya manusia untuk menjalankan operasi (Tines Priandini,2011). Penggajian dapat diartikan sebagai proses pembayaran upah kepada seseorang atau individu untuk pengganti hasil kerja atau jasa yang telah dilakukan.Jadi Sistem Penggajian atau kepegawaian adalah sistem yang mencakup seluruh tahap pemrosesan penggajian pelaporan kepegawaian(Mulyadi, 2001). Penggajian adalah kegiatan atau proses dari pembayaran gaji dari pihak perusahaan atau majikan kepada karyawannya dengan mengikuti prosedurprosedur tertentu yang sudah disepakati sebelumnya (Tines Priandini,2011). 2.2.
Pemrograman Berorientasi Objek Objek dapat digambarkan sebagai benda , orang, tempat dan sebagainya
yang mempunyai artibut dan metode. Tahap-tahap metodelogi berdasarkan System Development Life Cycle (SDLC) digunakan dengan memperhatikan karakteristik khusus berorientasi objek (Sutopo, 2002) yaitu analisa, desain, dan implementasi. Orientasi objek adalah suatu strategis untuk mengorganisasikan sistem sebagai koleksi dari interaksi objek-objek yang menggabungkan data dan prilaku (Blaha, 1998). Karakteristik atau sifat-sifat yang dipakai dalam pendekatan berorientasi objek untuk pengembangan sistem (Edward, 1994):
6
7
a. Abstraksi Prinsip untuk meresentasikan dunia nyata yang kompleks menjadi satu bentuk model yang sederhana dengan mangabaikan aspek-aspek lain yang tidak sesuai dengan permasalahan. b. Enkapsulasi (Pembukusan) Pembungkusan atribut data dan layanan (operasi-operasi) yang dipunya objek menyembunyikan implementasi dan objek sehingga objek lain tidak mengetahui cara kerja nya. c. Interitance (Perwarisan) Mekanisme menurunkan atribut dan fungsi dari suatu superkelas ke subkelas dalam suatu hiraksi. 2.2.1. Keuntungan metode berarah berorientasi objek Keuntungan metode berarah objek diantranya adalah: 1. Meningkatkan produktivitas Karena kelas dan objek yang diketemukan pada suatu kasus yang masih dapat dipakai ulang yang melibatkan objek tersebut. 2. Meningkatkan kualitas Karena sistem yang dibangun dengan baik dan benar pada saat analisa dan perancanganya akan menyebabkan berkurangnya kesalahan pada saat pengkodean program aplikasi. 3. Mempermudah perawatan Karena dengan model objek pola-pola yang cenderung tetap dan stabil dapat dipisahkan dari pola-pola yang mungkin sering berubah-ubah. 4. Adanya konsistensi Karena sifatnya pewarisan dan penggunaan notasi yang sama pada saat analisa, perancangan, maupun pengkodean. 2.2.2. Penentuan objek dan kelas Pengertian
objek
adalah
suatu
abstraksi
dari
suatu
lingkup
permasalahan / implementasi yang menggambarkan kemampuan dari system untuk menangkap informasi tentang objek tersebut, berinteraksi dengan keduanya pada nilai atribut dan service-nya.
8
Kelas
adalah suatu gambaran dari satu atau lebih objek,
penggambaran dengan sekumpulan atribut dan service yang sama. Menggambarkan bagaimana untuk menciptakan objek-objek baru dalam suatu kelas.
Gambar 2.0-1Simbol kelas
Simbol ini digunakan untuk merepresentasikan generalisasi kelas dari lingkup permasalahan yang berhubungan dengan objek-objeknya yang digambarkan dengan objek. Kelas & objek adalah suatu istilah yang berarti suatu kelas & objek yang ada di kelas tersebut.
Gambar 2.0-2 Simbol class & object
Simbol diberi nama dengan kelas & objeknya, atribut dan service dapat digunakan untuk tiap-tiap objek disuatu kelas. Nama kelas & objek adalah suatu kata kerja atau kata sifat. Kelas & objek mengambarkan suatu objek tunggal dengan kelasnya. Contoh: ketika tiap objek menggambarkan sesuatu yang berhubungan dengan “meja” maka nama kelas & objeknya: “anggota_meja”. 2.2.3. Model MVC(Model-View-Controller) Model-View-Controller arsitekturnya adalah sebuah pola yang terbukti membangun proyek secara lebih efektif. Hal itu dilakukan dengan memilih komponen antra model, view dan controller pada bagian-bagian dalam proyek.
9
Gambar 2.0-3 Komponen model MVC Gambar di atas menunjukan tiga komponen yang terdapat pada dalam pola model MVC dan interaksi yang terjadi. 1. Model Pola
MVC
memiliki
layer
yang
disebut
dengan
model
yang
merepresentasikan data yang digunakan oleh aplikasi sebagaimana proses bisnis yang diasosiasikan terhadapnya. Dengan memilihnya sebagai bagian terpisah, penampungan data, presentasi, serta proses manipulasi terpisah dari bagian lain aplikasi(Jeni, 2000). Membuat detail data dan operasinya dapat ditempatkan yang ditentukan (model), hal ini memberikan keuntungan dalam proses maintance aplikasi.Dengan pemisahan total antara data dengan implementasi interface, komponen model dapat digunakan kembali oleh aplikasi lain yang memiliki kegunaan yang hampir sama.
2. View Layer ini mendukung keseluruhan detail dari implementasi keseluruhan presentasi. Di sini komponen grafis menyediakan representasi proses internal aplikasi dan menuntun alur interaksi user terhadap apllikasi. Tidak ada layer lain yang berinteraksi dengan user, hanya View.
10
3. Controller Kelebihan penggunaan layer Controller secara terpisah: a. Dengan menggunakan komponen terpisah untuk menampung komponen terpisah untuk menampung detail dari transisi layer, hal ini memudahkan team pengembang multiple interface berkerja secara terpisah dari yang lain b. secara
simultan
antara
komponen
View
terabstraksi
dalam
Controller(Kristoko, 2009). c. Dengan menggunakan layer terpisah yang melakukan update terhadap komponen Model, bagaimana data dari user mengubah ketetepan aplikasi disembunyikan oleh Controller. Hal ini memisahkan dengan jelas antara presentation logic dengan business logic (Sutopo, 2002). 2.3.
Definisi UML Menurut (Salahudin & Rosa, 2007) pada perkembangan teknik
pemrograman berorientasi objek, muncul sebuah standarisasi bahasa pemodelan untuk pembangunan perangkat lunak yang dibangun dengan menggunakan teknik pemrograman berorientasi objek, yaitu Unified Modeling Language (UML). UML muncul karena adanya kebutuhan pemodelan visual untuk menspesifikasikan, menggambarkan, membangun dan dokumentasi dari sistem perangkat lunak. UML merupakan bahasa visual untuk pemodelan dan komunikasi mengenai sebuah sistem dengan menggunakan diagram dan teks-teks pendukung Pada UML terdapat 13 macam diagram yang dikelompokkan dalam 3 kategori dan macam-macam diagram tersebut dapat dilihat pada label dibawah ini: Tabel 2.1Diagram UML
Structure
1. Class diagram
Diagrams
2. Object diagram 3. Component diagram 4. Composite structure diagram 5. Package diagram 6. Deployment diagram
11
Behavior diagram
1. Use Case diagram 2. Activity diagram 3. State machine diagram
Interaction
1. Sequence diagram
diagram
2. Communication diagram 3. Timing diagram 4. Interaction overview diagram
2.3.1. Use Case Diagram Use Case diagram adalah model fungsional sebuah system yang menggunakan actor dan use case. Use Case adalah layanan (service) atau fungsi yang disediakan oleh system untuk pengunanya(Hendri, 2008). Use Case adalah suatu pola atau gambaran yang menunjukan kelakuan atau kebiasaan sistem. Setiap Use Case adalah suatu urut-urutan (sequence) transaksi yang saling berhubungan dan dilakukan oleh sebuah actor dan sistem dalam sebuah dialog. Komponen yang ada dalam use case: 1) Actor Actor adalah segala sesuatu yang berinteraksi langsung dengan sistem aplikasi komputer, seperti orang, benda atau lainnya. Tugas actor adalah memberikan informasi kepada sistem dan dapat memerintahkan sistem uc Use Case Model untuk melakukan sesuatu tugas.
<< Simbol actor
Actor
<
Gambar 2.0-4 Simbol actor use case 2) Use case Use case menggambarkan fungsi tertentu dalam suatu sistem berupa komponen, kejadian atau kelas. Setiap Use Case adalah sebuah urutan dari
12
hubungan transaksi yang dikerjakan oleh actor dan sistem dalam sebuah dialog.
uc Use Case Model
Use Case
Gambar 2.0-5 Simbol Use Case 3) Relationship Hubungan yang terjadi antar simbol dalam use case. Menggunakan garis dan tipe simbol yang digunakan untuk menghubungkan garis. uc Business Process Model
Use Case2 <
Use Case1 <
> Actor2
Gambar 2.0-6 Simbol Relationship 2.3.2. Activity Diagram Activity Diagram adalah salah satu cara untuk memodelkan eventevent yang terjadi dalam suatu use case. Diagram ini juga dapat digantikan
dengan
sejumlah teks,
namun penggunaannya kadang sulit
dipahami. Sehingga activity diagram yang bersifat grafis lebih sering digunakan.Komponen-komponen pada Activity Diagram 1) Start Point Start Point (initial node), menggambarkan permulaan dari sebuah sistem yang akan dikerjakan, biasanya diletakkan pada pojok kiri atas. analysis Bu...
ActivityInitial
Gambar 2.0-7 Simbol Star Activity diagram
13
2) End Point End Point (activity final node), menggambarkan akhir dari sebuah sistem.
act Busines...
ActivityFinal
Gambar 2.0-8 Simbol final Activity diagram 3) Activities Activities,
menggambarkan
activity state.
proses
bisnis
dan dikenal sebagai
act Business Process Model
Activ ity
Gambar 2.0-9 Simbol Activity 4) Black Hole Activities Black Hole Activities, ada masukan dan keluaran
Gambar 2.0-10 Simbol Hole Activities 5) Miracle Activities Miracle Activities, tidak ada masukan dan ada keluaran dan dipakai pada waktu start point
Gambar 2.0-11 Simbol Miracle Activities
14
6) Parallel Activities a) Fork Fork (percabangan), mempunyai 1 transisi masuk dan 2 atau lebih transisi keluar
act Business Process Model
Activ ity1
Activ ity3
Activ ity2
Gambar 2.0-12 Simbol Fork b) Join Join (penggabungan), mempunyai 2 atau lebih transisi masuk dan hanya 1 transisi keluar. act Business Process Model Activ ity1
Activ ity2
Activ ity3
Gambar 2.0-13 Simbol Join 7) Decision Point Decision Points, tidak ada keterangan (pertanyaan) pada
tengah
belah ketupat seperti pada flowchart dan harus mempunyai Guards (kunci).
act Busines...
Gambar 2.0-14 Simbol Decision Point
15
8) Swimlane Swimlane, sebuah cara untuk mengelempokan activity berdasarkan actor.
act Business Process Model w imlane
Gambar 2.0-15 Simbol Swimlane
2.3.3. Class Diagram Class diagram menggambarkan struktur dan deskripsi class, package dan obyek beserta hubungan satu sama lain seperti containment, pewarisan, asosiasi, dan lain-lain.Class memiliki tiga area pokok, yaitu : 1) Nama (dan stereotype) 2) Atribut Atribut adalah sebuah nilai data yang dimiliki oleh obyek sebuah kelas. Nama, umur, berat badan, adalah atribut dari obyek manusia atau orang. 3) Metode Metode adalah implementasi dari sebuah operasi ke dalam sebuah kelas. Sebagai contoh, sebuah kelas “file” mungkin mempunyai operasi print.
Gambar 2.0-16Class model diagram
16
2.3.4. Sequence Diagram Sequence diagram menggambarkan interaksi antar obyek di dalam dan di sekitar sistem (termasuk pengguna, display dan sebagainya). Sequence diagram biasa digunakan untuk menggambarkan skenario atau rangkaian langkah-langkah yang dilakukan sebagai respons dari sebuah event untuk menghasilkan output tertentu.
Gambar 2.0-17 model sequence diagram
2.4.
Definisi Basis Data Basis Data (database) merupakan kumpulan data yang saling berhubungan
satu dengan yang lainnya, tersimpan di perangkat keras komputer dan digunakan perangkat lunak untuk memanipulasinya. Data perlu disimpan didalam basis data perlu diorganisasikan sedemikian rupa, supaya informasi yang dihasilkan berkualitas. Untuk mengelola basis data diperlukan perangkat lunak yang disebut DBMS. Definisi DBMS menurut (Connolly, 2005) adalah suatu sistem perangkat lunak yang bisa mendefinisikan, membuat, memelihara, dan mengontrol akses ke basis data.Berikut ini adalah transformasi data yang menjadi database: a. Karakter, merupakan bagian data terkecil, dapat berupa karakter, numeric, huruf ataupun karakter khusus yang membentuk suatu item data.
17
b. Field, suatu field menggambarkan suatu atribut dari record yang menunjukan suatu item dari data, seperti misalnya nama, alamat, dan lain sebagainya. Kumpulan dari field berbentuk suatu record. c. Record,
kumpulan
dari
field
membentuk
suatu
record.
Record
menggambarkan suatu unit data individu tertentu. Kumpulan dari record membentuk suatu file. Misalnya file personalia, tiap record dapat mewakili data tiap- tiap karyawan. d. File, file terdiri dari record- record yang menggambarkan suatu kesatuan data yang sejenis. Misalnya file mata kuliah berisi data tentang semua mata kuliah yang ada. e. Database,database merupakan kumpulan dari file yang membentuk database. 2.4.1. Tujuan Basis Data Prinsip utama database adalah pengaturan data dengan tujuan utama fleksibelitas dan kecepatan dalam pengambilan data kembali. Adapun tujuan database diantaranya: a. Efisiensi meliputi speed, space, dan accuracy. b. Menangani data dalam jumlah besar. c. Kebersamaan pemakaian (Sharebility). d. Meniadakan duplikasi dan inkinsistensi data. 2.4.2. DBMS (Database Management System) Database Management System (DBMS atau DMS) adalah paket perangkat lunak yang kompleks digunakan untuk memanipulasi database. Sedangkan Connoly menjelaskan pengenalan sistem informasi, DBMS adalah suatu sistem perangkat lunak yang bisa mendefinisikan, membuat, memelihara, dan mengontrol akses ke basis data.(Connolly, 2005) Semua operasi input dan output yang berhubungan dengan database harus menggunakan DBMS. Jika pemakai akan mengakses database, DBMS menyediakan penghubung (interface) antara pemakai dengan database. Hubungan pemakai dengan database dapat dilakukan dengan dua cara yaitu :
18
a. Secara interaktif menggunakan bahasa pernyataan (Query Language) b. Dengan menggunakan program aplikasi (Microsoft SQL Server) 2.4.3. Merancang Model Basis Data Pada perancangan model konseptual penekanan tinjauan dilakukan pada struktur data dan relasi antara file. Menurut (Connolly, 2005), suatu desain basis data harus memenuhi kondisi untuk tidak mengandung anomali, yaitu suatu kejanggalan dari suatu penempatan atribut tertentu dari suatu objek data. Pendekatan yang dilakukan pada perancangan model konseptual adalah menggunakan model data relational, terdapat dua buah teknik yaitu : 2.4.3.1. Normalisasi Normalisasi
adalah
teknik
analisis
data
yang
mengorganisasikan data kedalam grup untuk bentuk yang non redundant,stabil, fleksibel. Sebuah tabel yang belum dinormalisasi disebut UNF (Unormalized Form). UNF merupakan suatu tabel yang berisikan satu atau lebih grup yang berulang(Whitten, 2004). Proses pembentukan tabel normal (normalisasi) bertujuan untuk :
Membuat sekecil mungkin terjadinya data rangkap
Menghindarkan adanya data yang tidak konsisten terutama bila dilakukan penghapusan atau penambahan data sebagai akibat adanya data rangkap. Bentuk normalisasi adalah suatu aturan yang dikenakan
pada relasi- relasi dalam basis data dan harus dipenuhi oleh relasirelasi tersebut pada langkah- langkah normalisasi. Bentuk Normal adalah keadaan yang dihasilkan dengan menerapkan
aturan
sederhana
berkaitan
dengan
konsep
ketergantungan fungsional (functional dependency). Ada 6 tahap normalisasi menurut (Connolly, 2005) yaitu :
19
1) Bentuk tidak normal Bentuk ini merupakan kumpulan data yang akan disimpan, tidak ada keharusan mengikuti suatu format tertentu, dapat saja data tidak lengkap atau terduplikasi dan data dikumpulkan apa adanya. 2) Bentuk Normal Pertama (First Normal Form/ 1NF) Sebuah relasi dimana setiap baris dan kolom mempunyai hanya satu nilai. Dengan mentransfer data dari sumber kedalam format tersebut dan table dalam bentuk tidak normal (unnormalized form) akan diubah ke bentuk normal pertama dengan menghilangkan kelompok yang berulang seperti atribut atau sekelompok atribut. 3) Bentuk normal kedua Sebuah relasi yang ada pada bentuk normal pertama, dan setiap atribut yang bukan primary key ketergantungan fungsional penuh pada primary key. Yang didasarkan pada konsep ketergantungan fungsional secara penuh. Perubahan dari 1NF ke 2NF ditentukan dengan menghilangkan ketergantungan parsial.
Jika
terdapat
ketergantungan
parsial
dilakukan
penghilangan atribut yang tergantung fungsional dengan memindahkan kedalam relasi baru dengan duplikasi dari determinannya. 4) Bentuk normal ketiga Sebuah relasi dimana memenuhi 1NF dan 2NF dan dimana atribut tidak primary key mengalami ketergantungan transitif pada primary key. Dan meskipun relasi 2NF lebih sedikit mengalami pengulangan data dari pada 1NF, tidak dipungkiri masih bisa mengalami update anomalies (relasi yang memiliki data yang berulang). Normalisasi 2NF ke 3NF dilakukan dengan menghilangkan ketergantungan transitif. Jika terdapat ketergantungan transitif, maka dihilangkan dari relasi dengan
20
menempatkan atribut pada suatu relasi yang baru dengan duplikasi determinannya. 5) Bentuk normal Boyce-Codd (BCNF) BCNF adalah suatu relasi jika dan hanya jika setiap determinan adalah kunci kandidat. BCNF berdasarkan pada prinsip ketergantungan fungsional. Perbedaan BCNF dan 3NF adalah jika 3NF memungkinkan sebuah relasi memiliki B sebagai primary key dan A ketergantungan fungsional terhadap B, A boleh tidak merupakan kunci kandidat, sedangkan dalam BCNF, A harus merupakan kunci kandidat. 6) Dependensi nilai banyak dan bentuk normal keempat (4NF/Fourth Normal Form) Suatu relasi yang memenuhi BCNF dan tidak mengandung nontrival multi-valued dependencies (yang dilakukan dengan pemisahan atribut yang multi-valued dependencies ke relasi baru). MVD menggambarkan ketergantungan antara atribut dalam suatu relasi, dimana setiap nilai A adalah sekelompok nilai untuk B sekelompok nilai untuk C. Dimana nilai- nilai B dan C tidak tergantung satu sama lain. 7) Dependensi gabungan dan bentuk normal kelima (5NF/Fifth Normal form) Suatu relasi yang tidak memiliki ketergantungan gabungan (join dependency). 5NF ini sering disebut project-join normal form(PJNF). Join dependency menggambarkan sebuah tipe ketergantungan. Contoh sebuah relasi R dengan subset dari atribut R menunjuk A, B, …Z, sebuah relasi R memenuhi joindependency jika dan hanya jika setiap nilai resmi dari R sama dengan penggabungan proyeksi A, B…Z. a. Teknik Entity Relationship 1. Perancangan database Teknik Entity Relationship Database adalah kumpulan file yang saling berkaitan. Pada
Entity
Relationship
menurut
(Connolly,
21
2005)merupakan hubungan antar data berdasarkan persepsi dunia nyata yang terdiri dari sekumpulan objek dasar yang disebut entity dan hubungan antar objek tersebut. Model Entity Relationship merepresentasikan bagaimana isi dari basis data yang harus dibentuk. Salah satu hal penting adalah kardinalitas yang merepresentasikan jumlah suatu ke entity lain yang diasoasikan dalam hubungannya. 2. Entity Relationship Concept Relasi antara dua file atau tabel dapat dikategorikan menjadi tiga macam. Demikian pula untuk membantu gambaran relasi secara lengkap. Terdapat juga tiga macam relasi dalam hubungan atribut dalam satu file, yaitu antara lain : 1) One To One Relationship 2 file : hubungan antara file pertama dengan file kedua adalah satu banding satu. 2) One To Many Relationship 2 file : hubungan antara file pertama dengan file kedua adalah satu berbanding banyak atau dapat pula dibalik banyak berbanding satu. 3) Many To Many Relationship 2 file : hubungan antara file pertama dengan file kedua adalah banyak berbanding banyak. 2.5.
Teori Pemrograman 2.5.1. Java Java merupakan pemrograman yang menanjak popularitasnya dewasa ini. Selain gratis, Java mudah didapatkan dan juga tangguh. Java sendiri lahir pada tahun 1991 yang diprakarsai oleh tim Sun melalui proyek bernama Green yang dipimpin oleh James Gosling.
22
Java merupakan fitur- fitur dari bahasa pemrograman yang lain, dimana fitur
itu dianggap merupakan suatu kelebihan oleh tim Sun.
Misalnya Java Virtual Machine (JVM)/ Java Runtime environment (JRE) yang merupakan mesin maya pada bahasa pascal, sintaks dan Exception Handling diambil dari C/C++ dan lain sebagainya. Java Virtual Machine (JVM) atau Java Runtime Environment (JRE) merupakan fitur Java yang membuatnya dapat berjalan pada semua PlatForm sistem operasi. Apabila anda membuat Java pada Windows, anda dapat menjalankannya pada sistem operasi Linux, Mac OS dan lainnya. 2.5.2. Keunggulan Java Java memiliki beberapa keunggulan yang tidak dimiliki oleh bahasa lain. Berdasarkan White Paper resmi dari SunMicrosystem, Java memiliki karakteristik sebagai berikut menurut (Andi, 2010) : 1. Sederhana Bahasa pemrograman Java menggunakan sintaks mirip dengan C++, namun sintaks Java telah banyak diperbaiki terutama menghilangkan penggunaan pointer yang rumit dan multiple inheritance. Java juga menggunakan automatic memory allocation dan memory garbage collection. 2. Berorientasi Objek (Object Oriented) Java menggunakan pemrograman berorientasi objek yang membuat program dapat dibuat secara modular dan dapat dipergunakan kembali. Pemrograman berorientasi objek memodelkan dunia nyata kedalam objek dan melakukan interaksi antara objek- objek tersebut. 3. Dapat Didistribusikan dengan Mudah Java dibuat untuk membuat aplikasi terdistribusi secara mudah dengan adanya libraries networking yang terintegrasi pada java. 4. Interpreter Program java dijalankan menggunakan interpreter yaitu Java Virtual Machine (JVM). Hal ini menyebabkan source code java yang telah
23
dikompilasi menjadi java bytecodes dapat dijalankan pada platform yang berbeda- beda.
5. Robust Java mempunyai realibilitas yang tinggi. Compiler pada java mempunyai kemampuan mendeteksi
error
secara lebih teliti
dibandingkan bahasa pemrograman lain. Java mempunyai Runtime Exception
Handling
untuk
membantu
mengatasi
error
pada
pemrograman. 6. Aman Sebagai bahasa pemrograman untuk aplikasi internet dan terdistribusi, java memiliki beberapa mekanisme keamanan untuk menjaga aplikasi tidak digunakan untuk merusak system computer yang menjalankan aplikasi tersebut. 7. Architecture Neutral Program java merupakan platform independen. Program cukup mempunyai satu buah versi yang dapat dijalankan pada platform yang berbeda dengan Java Virtual Machine. 8. Portabel Source code maupun program java dapat dengan mudah dibawa ke platform yang berbeda- beda tanpa harus dikompilasi ulang. 9. Multithreading Java mempunyai kemampuan untuk membuat suatu program yang dapat melakukan beberapa pekerjaan secara sekaligus dan simultan. 10. Dinamis Java didesain untuk dapat dijalankan pada lingkungan yang dinamis. Perubahan pada suatu class dengan menambahkan properties ataupun method
dapat
dilakukan
menggunakan class tersebut.
tanpa
mengganggu
program
yang
24
2.6.
Aplikasi Pendukung 2.6.1. Netbeans NetBeans merupakan sebuah proyek kode terbuka yang sukses dengan pengguna yang sangat luas, komunitas yang terus tumbuh. Sun Microsystems mendirikan proyek kode terbuka NetBeans pada bulan Juni 2000 dan terus menjadi sponsor utama. Saat ini terdapat dua produk NetBeans IDE dan NetBeans PlatForm. The NetBeans IDE adalah sebuah lingkungan pengembangan sebuah kakas untuk pemrograman menulis, mengompilasi, mencari kesalahan dan menyebarkan program. NetBeans IDE ditulis dalam Java namun dapat mendukung bahasa pemrograman lain. Terdapat banyak modul untuk memperluas NetBeans IDE. NetBeans IDE adalah sebuah produk bebas dengan tanpa batasan bagaimana digunakan. Tersedia juga NetBeans PlatForm sebuah fondasi yang modular dan dapat diperluas yang dapat digunakan sebagai perangkat lunak dasar untuk membuat aplikasi desktop yang besar. Mitra ISV menyediakan plugin bernilai tambah yang dapat dengan mudah diintegrasikan kedalam Platform dan dapat juga digunakan untuk membuat kakas dan solusi sendiri. 2.6.2. JasperReport Laporan adalah hal yang mutlak ada pada hampir semua aplikasi. Tanpa laporan, program komputer hampir tidak bermakna apa- apa. Percuma pengolahan data dilakukan kalau tidak ada hasil berupa laporan atau report yang dihasilkan. Biasanya laporan dibuat saat user interface dan pengolahan data user selesai. JasperReport adalah sebuah tool yang sangat powerful untuk membuat laporan dalam bentuk PDF, HTML, XLS, RTF, ODT, CSV, TXT, dan XML. Program ini mulai dikembangkan tahun 2001 oleh Teodor Danciu, setelah pada peluncurannya pada tahun itu sampai sekarang tool ini menjadi sangat popular. Sehingga pada search engine dia
25
muncul paling awal dibanding dengan yang lainnya. Kemudian pada tahun 2005 muncul perusahaan JasperSoft yang pengembangannya didukung oleh beberapa pengembang software, dan menyediakan juga beberapa aplikasi tambahan yang bersifat commercial. Dengan kemampuan dan fleksibilitasnya yang sangat tinggi, anda bisa membuat berbagai laporan berbentuk chart, crosstabs, subreport dan kemampuan lain yang anda butuhkan. Satu lagi, yang tidak kalah pentingnya adalah sifatnya yang open source membuat tool ini semakin menawan untuk menjadi pilihan bagi programmer maupun developer terkini. Anda bisa mendapatkan distribusi secara gratis di alamat www.jasperforge.org. 2.6.3. MySQL Database secara sederhana, dapat kita sebut sebagai gudang data. Secara teori, database adalah kumpulan data atau sistem informasi yang kompleks, data- data tersebut disusun menjadi beberapa kelompok dengan tipe data yang sejenis, dimana setiap datanya dapat saling berhubungan satu sama lain atau dapat berdiri sendiri, sehingga mudah diakses. Database dapat kita kelola menggunakan program aplikasi data, misalnya : MySql, Ms. Access, PostgreSQL dan SQL Server. Aplikasi yang dapat membuat dan mengelola database disebut database manajemen system (DBMS). Mysql merupakan database server yang awalnya hanya berjalan pada system Unix dan Linux. Seiring berjalannya waktu dan banyaknya peminat yang menggunakan database ini, Mysql merilis versi yang
dapat
di-instal
pada
hampir
semua
Platform,
termasuk
Windows.(Bunafit, 2008) MySQL menggunakan bahasa standar untuk mengakses database, yaitu menggunakan bahasa Structured Query Language (SQL). Sejak tahun 70-an bahasa ini telah dikembangkan oleh IBM, yang kemudian diikuti dengan adanya Oracle, Informix dan Sybase. Dengan menggunakan SQL, proses akses database menjadi lebih user- friendly dibandingkan
26
dengan misalnya dbase ataupun Clipper yang masih menggunakan syntax pemrograman murni. MySQL adalah sebuah server database SQL multiuser dan multithreaded. SQL sendiri adalah salah satu bahasa database yang paling popular didunia. Implementasi program server database ini adalah program daemon MySQLd dan beberapa program lain serta beberapa referensi. Keunggulan MySQL dibandingkan dengan perangkat lunak database server lainnya, yaitu : 1. Freeware 2. High performance 3. Biaya rendah 4. Mudah untuk dikonfigurasi dan dipelajari 5. Portable 6. MySQL merupakan program yang multi-threaded, sehingga dipasang pada server yang memiliki multi-CPU. 7. Didukung program- program umum seperti C, C++, Java, Perl, PHP, Python, TCL APIs. 8. Bersifat terbuka 9. Memiliki sistem keamanan yang baik dengan verifikasi host. 10. Memiliki kemampuan mengelola database dengan jumlah record yang banyak. 11. Mendukung record yang memiliki kolom dengan panjang tetap atau panjang bervariasi. MySQL merupakan program database server dengan SQL sebagai bahasa yang digunakan didalamnya. SQL dibagi menjadi dua bentuk query, yaitu : 1. DDL (Data Definition Language) DDL Adalah sebuah metode Query SQL yang berguna untuk mendefinisikan data pada sebuah database, adapun Query yang dimiliki adalah :
CREATE : digunakan untuk melakukan pembuatan table dan database.
27
DROP : digunakan untuk melakukan penghapusan table maupun database.
ALTER : digunakan untuk melakukan pengubahan struktur table yang telah dibuat, baik menambah Field (add), mengganti nama Field (change), ataupun menamakannya kembali (rename), serta menghapus (drop).
2. DML (Data Manipulation Language) DML Adalah sebuah metode Query yang dapat digunakan apabila DDL telah terjadi, sehingga fungsi dari Query ini adalah untuk melakukan pemanipulasi database yang telah ada atau yang telah dibuat sebelumnya. Berikut Query yang termasuk didalamnya adalah :
SELECT : digunakan untuk menampilkan data pada table
INSERT:digunakan untuk melakukan penginputan/pemasukan data pada tabel database.
UPDATE : dilakukan untuk melakukan pengubahan atau peremajaan terhadap data yang ada pada tabel.
DELETE : digunakan untuk melakukan penghapusan data pada tabel.(Nugroho, 2008).
BAB III ANALISA DAN PERANCANGAN 3.1.
Analisa Sistem penggajian pada PT. XYZ yang berjalan selama ini melibatkan
divisi Hrd, staff keuangan dan spv.Di sistem berjalan pada perusahaan tersebut terpusat pada Divisi Keuangan. Adapun analisa sistem berjalan sebagai berikut: 3.1.1. Analisa Sistem Berjalan a. Pengumpulan Data Setiap kali perusahaan akan melakukan penggajian bagian HRD
menyerahkan data jenis gaji karyawan dan rekap absen
manual. Untuk staff keuangan sendiri mengumpulkan data potongan gaji baik berupa piutang karyawan ataupun kerugian yang disebabkan oleh karyawan. Setelah selesai semua data diserahkan ke bagian spv. act Pengumpulan data2 HRD
Staff keuangan
Menyerahkan data jenis gaji karyawan dan rekap absen manual
menyerahkan data potongan gaji, baik berupa piutang karyawan ataupun kerugian yang disebabkan oleh karyawan
SPV
terima data
Gambar 3.0-1 Activity Diagram Proses Pengumpulan Data
28
29
b. Transaksi Penggajian Proses penggajian setelah data terkumpul bagian spv menerima data lalu membuat slip gaji untuk masing-masing karyawan berdasarkan jumlah kehadiran dan karyawan menerima slip gaji setiap awal bulan yang di buat oleh bagian spv. act transaksi penggaj ian spv
buat slip gaj i karyaw an berdasarkan j umlah kehadiran
karyaw an
terima slip gaj i
Gambar 3.0-2 Activity Diagram Proses Penggajian
c. Pembuatan Laporan Bagian spv membuat laporan pembayaran gaji karyawan setiap awal bulan yang nanti laporan tersebut diserahkan kepada pimpinan. act pembuatan laporan spv
pimpinan
buat laporan pembayaran gaj i
terima laporan
Gambar 3.0-3 Activity Diagram Proses Pembuatan Laporan
30
3.1.2. Analisa data 1. Analisa Keluaran Analisa keluaran merupakan gambaran keluaran berbentuk informasi yang dihasilkan oleh sistem berjalan. Analisa keluaran di PT.XYZ dapat dirincikan sebagai berikut : a. Slip Gaji Nama Keluaran
: Slip Gaji
Fungsi
: Bukti pembayaran gaji karyawan
Media
: Kertas
Distribusi
: Karyawan dan SPV
Rangkap
: 2 (dua)
Frekuensi
: Setiap bulan
Keterangan
: Dokumen ini berisikan rincian data penggajian karyawan
b. Laporan Gaji Nama Keluaran
: Laporan Gaji
Fungsi
: Mengetahui laporan gaji karyawan selama sebulan
Media
: Kertas
Distribusi
: Spv Internal dan Manager Finance
Rangkap
: 2 (dua)
Frekuensi
: Setiap bulan
Keterangan
: Rekapitulasi
data
penggajian
karyawan 2. Analisa Masukan Analisa Masukan adalah bentuk data yang diperlukan dalam proses sistem penggajian karyawan.Analisa masukkan akan diolah sesuai dengan maksud dan tujuan sistem
31
a. Data Karyawan Nama Masukkan
: Data Karyawan
Fungsi
: Mengetahui data karyawan secara detail
Media
: Kertas
Distribusi
: Hrd
Rangkap
: 1 (satu)
Frekuensi
: Setiap bulan
Keterangan
: Data lengkap karyawan
b. Rekap Absensi Nama Masukkan
: Rekap Absensi
Fungsi
: Mengetahui data absensi karyawan selama sebulan
Media
: Kertas
Distribusi
: Hrd dan staff internal
Rangkap
: 1 (satu)
Frekuensi
: Setiap bulan
Keterangan
: Data absensi karyawan
3.1.3. Analisa Perangkat Keras Perangkat keras (hardware) di PT.XYZ: 1. Delapan buah komputer yang terdapat di ruang financesebagai berikut: a. Processor
: Intel® Core™ i3-2350M CPU
2.30GHz b. Harddisk
: 160GB
c. Memory
: 2.00GB
d. Monitor
: 14 inchi
e. Mouse 2. Printer Dua buah yang terdapat di ruang finance dengan type dan merk canon pixma ip2770
32
3.1.4. Analisa Perangkat Lunak Sistem operasi yang digunakan di PT.XYZ adalah Microsoft Windows 7 dan Microsoft office. Untuk mengimplementasikan Sistem Penggajianyang
diusulkan
hanya
menambahkan
perangkat
lunak
Neatbeans 7.3dan JDK7 sebagai aplikasi, Navicat for MySQL 1.0.01 dan XAMPP 1.7.7 untuk DBMS. Perangkat lunak diatas sudah cukup mengolah data penggajian dan pengolahan data lainnya yang diperlukan. 3.1.5. Analisa User Analisa user dimaksudkan untuk mengetahui siapa saja user atau pengguna yang terlibat dalam pengolahan data beserta karakteristiknya sehingga dapat diketahui tingkat pemahaman user terhadap komputer. 1. Direktur Nama
: Rudi
Nip
: -
Pendidikan
: Sarjana
Sistem
operasi : Windows 7
yang digunakan Software
yang : Microsof word dan Microsoft Excel
digunakan
2. Manager Keuangan Nama
: Sinta
Nip
: -
Pendidikan
: Sarjana
Sistem
operasi : Windows 7
yang digunakan Software digunakan
yang : Microsof word dan Microsoft Excel
33
3. Manager Frenchise Nama
: Budi
Nip
: -
Pendidikan
: Sarjana
Sistem
operasi : Windows 7
yang digunakan Software
yang : Microsof word dan Microsoft Excel
digunakan
3.1.6. Analisa Kebutuhan Dalam melakukan perancangan, adapun analisa kebutuhannya adalah : 1. Komponen Gaji a. Komponen gaji karyawan terdiri atas Gaji Pokok Tunjangan Tetap - Tunjangan Jabatan Tunjangan Tidak Tetap - Tunjangan Makan - Tunjangan Transport - Tunjangan Komunikasi b. Tunjangan jabatan diberikan kepada karyawan yang menempati jabatan struktural dalam perusahaan. c. Tunjangan makan diberikan kepada karyawan untuk satu kali makan dalam satu hari. d. Tunjangan
transportdiberikan
kepada
karyawan
untuk
perjalanan berangkat dan pulang kerja. e. Tunjangan Komunikasi diberikan kepada karyawan untuk komunikasi jika ada penambahan bahan baku di outlet serta untuk komunikasi pengiriman bahan baku ke frenchise.
34
f. Untuk tunjangan makan,tunjangan transport dan tunjangan komunikasi berlaku ketentuan sebagai berikut: - Tunjangan makan dibayarkan kepada karyawan secara bulanan untuk management sedangkan untuk operator dan gudang bisa diambil harian dan dihitung berdasarkan jumlah kehadiran per bulan. - Tunjangan Komunikasi dibayarkan kepada karyawan secara bulanan. - Karyawan yang tidak masuk kerja tidak mendapatkan tunjangan makan dan tunjangan transport. - Perhitungan besarnya tunjangan makan dan transport untuk satu bulan adalah tunjangan per hari dikalikan jumlah kehadiran sebulan 2. Potongan a. Untuk meringankan beban karyawan, perusahaan memberikan bantuan keuangan berupa pinjaman tanpa bunga bagi karyawan untuk keperluan yang dianggap penting dan mendesak b. Besarnya pinjaman maksimal adalah 50% dari total gaji berdasarkan berapa hari kerja. 3. Menghitung Tunjangan Perhitungan jumlah tunjangan yang diterima per bulan adalah sebagai berikut: Tunjangan Jabatan + Tunjangan Makan + Tunjangan Transport + Tunjangan Komunikasi = Jumlah Tunjangan / Bulan 4. Menghitung Potongan Perhitungan jumlah potongan yang diterima per bulan adalah sebagai berikut: Potongan Pinjaman +
Potongan Pengambilan uang makan +
Potongan Selisih kas + Potongan Koreksi bahan baku = Jumlah Potongan / Bulan
35
3.2.
Perancangan Berdasarkan analisa yang telah dilakukan, perancangan sistem dibagi
dalam dua tahap, yaitu perancangan basis data dan perancangan aplikasi. 3.2.1. Perancangan Basis Data 3.2.1.1. Normalisasi 1. Relasi Cabang Kode_cabang
cabang
Gambar 3.0-4 Ketergantungan Fungsi Pada Relasi Cabang
Keterangan Gambar : a) Tabel m_cabang sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel m_cabang sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu cabang bergantung sepenuhnya kepada atribut key yaitu kode_cabang (Funcional Dependency). c) Tabel m_cabang sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key lainnya tetapi terhadap key
yaitu kode_cabang (Transitive
Dependency). 2. Relasi Jabatan Kode_Jabatan
Jabatan
Gambar 3.0-5 Ketergantungan Fungsi Pada Relasi Jabatan
Keterangan Gambar : a) Tabel m_jabatan sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group).
36
b) Tabel m_jabatan sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu jabatan bergantung sepenuhnya kepada atribut key yaitu kode_jabatan (Funcional Dependency). c) Tabel m_jabatan sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key lainnya tetapi terhadap key
yaitu kode_jabatan (Transitive
Dependency). 3. Relasi Jenis Potongan Kode_Jenis_Potongan
Jenis_Potongan
Gambar 3.0-6 Ketergantungan Fungsi Pada Relasi Jenis Potongan
Keterangan Gambar : a) Tabel m_jenis_potongan sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel m_jenis_potongansudah normal bentuk kedua (2NF) karena semua atribut non key yaitu jenis_potongan bergantung sepenuhnya kepada atributkey yaitu kode_jenis_potongan (Funcional Dependency). c) Tabel m_jenis_potongansudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key
lainnya tetapi terhadap key
(Transitive Dependency).
yaitu m_jenis potongan
37
4. Relasi Potongan Jumlah_Potongan
Keterangan
Sisa_potongan
Kode_Potongan
Status
Tanggal_Potongan
Nik_karyawan
Kode_Jenis_Potongan
Gambar 3.0-7 Ketergantungan Fungsi Pada Relasi Potongan
Keterangan Gambar : a) Tabel t_potongan sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel t_potongan sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu jumlah_potongan, keterangan, sisa_potongan,
status,
dankode_jenis_potongan
tanggal_potongan, bergantung
nik_karyawan
sepenuhnya
kepada
atributkey yaitu kode_potongan (Funcional Dependency). c) Tabel t_Potongan sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key lainnya tetapi terhadap key Dependency).
yaitu kode_Potongan(Transitive
38
5. Relasi Detil Pengurangan Jumlah_Pengurangan
Kode_Detil_Pengurangan
Kode_slip
Kode_Potongan
Gambar 3.0-8 Ketergantungan Fungsi Pada Relasi Detil pengurangan
Keterangan Gambar : a) Tabel t_detil_pengurangan sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel t_detil_pengurangan sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu jumlah_pengurangan, kode_slip dan kode_potonganbergantung sepenuhnya kepada atribut
key
yaitu
kode_detil_pengurangan
(Funcional
Dependency). c) Tabel t_detil_pengurangan sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key
lainnya
tetapi
terhadap
key
kode_detil_pengurangan(Transitive Dependency).
yaitu
39
6. Relasi karyawan Jenis_Kelamin
Status_Perkawinan
Alamat_Karyawan
Nama_Karyawan
No_Rekening
Nik_Karyawan
Tanggal_Lahir
Tanggal_Masuk
No_Telepon
Tempat_Lahir
Kode_Jabatan
Kode_Cabang
Gambar 3.0-9 Ketergantungan Fungsi Pada Relasi Karyawan
Keterangan Gambar : a) Tabel m_karyawan sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel m_karyawan sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu jenis_kelamin, status_perkawinan, alamat_karyawan, nama_karyawan, no_rekening, tanggal_lahir, tanggal_masuk, no_telepon, tempat_lahir, kode_jabatan dan kode_cabang bergantung sepenuhnya kepada atribut key yaitu nik_karyawan (Funcional Dependency). c) Tabel m_karyawan sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key lainnya tetapi terhadap key Dependency).
yaitu nik_karyawan (Transitive
40
7. Relasi Jenis Pendapatan Kode_Jenis_Pendapatan
Jenis_Pendapatan
Gambar 3.0-10 Ketergantungan Fungsi Pada Relasi Jenis Pendapatan
Keterangan Gambar : a) Tabel m_jenis_pendapatan sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel m_jenis_pendapatan sudah normal bentuk kedua (2NF) karena
semua
bergantung
atribut
sepenuhnya
non
key
yaitu
kepada
jenis_pendapatan
atribut
key
yaitu
kode_jenis_pendapatan (Funcional Dependency). c) Tabel m_jenis_pendapatan sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key lainnya tetapi terhadap key yaitu kode_jenis_pendapatan (Transitive Dependency). 8. Relasi Gaji Besar_Gaji
Periode Kode_gaji Kode_Jabatan
Kode_Jenis_Pendapatan
Gambar 3.0-11 Ketergantungan Fungsi Pada Relasi Gaji
Keterangan Gambar : a) Tabel m_gaji sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group).
41
b) Tabel m_gaji sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu besar_gaji, priode, kode_jabatan dan kode_jenis_pendapatan bergantung sepenuhnya kepada atribut key yaitu (Funcional Dependency). c) Tabel m_gaji sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key lainnya tetapi terhadap key yaitu kode_gaji (Transitive Dependency). 9. Relasi Detil Pendapatan Jumlah_pendapatan
Kode_detil_pendapatan
Kode_gaji
Kode_slip
Gambar 3.0-12 Ketergantungan Fungsi Pada Relasi Detil Pendapatan
Keterangan Gambar : a) Tabel t_detil_pendapatan sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel t_detil_pendapatan sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu jumlah_pendapatan, kode_gaji dan kode_slipbergantung sepenuhnya kepada atribut key yaitu kode_detil_pendapatan (Funcional Dependency). c) Tabel t_detil_pendapatan sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key
lainnya
tetapi
terhadap
key
kode_detil_pendapatan(Transitive Dependency).
yaitu
42
10. Relasi Slip Slip_gaji
Jumlah_hadir
Tanggal_slip
Total_gaji Kode_Slip Total_pendapatan
Total_pengurangan
Nik_karyawan
Kode_tahun_buku
Gambar 3.0-13 Ketergantungan Fungsi Pada Relasi Slip
Keterangan Gambar : a) Tabel t_slip sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel t_slip sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu slip_gaji, jumlah_hadir, tanggal_slip, total_gaji, total_pendapatan, total_pengurangan, nik_karyawan dan kode_tahun_bukubergantung sepenuhnya kepada atribut key yaitu kode_slip (Funcional Dependency). c) Tabel t_slip sudah normal bentuk ketiga (3NF) karena semua atribut non key tidak bergantung kepada atribut key lainnya tetapi terhadap key yaitu kode_slip (Transitive Dependency).
43
11.
Relasi Tahun Buku Tahun_Buku
Awalan
Kode_Tahun_Buku
Keterangan
Status_Aktif
Tanggal_buku
Tanggal_Mulai
Gambar 3.0-14 Ketergantungan Fungsi Pada Relasi Tahun Buku
Keterangan Gambar : a) Tabel m_tahun_buku sudah bernilai tunggal (1NF) karena sudah tidak ada atribut yang berulang (Repeating Group). b) Tabel m_tahun_buku sudah normal bentuk kedua (2NF) karena semua atribut non key yaitu tahun_buku, awalan, keterangan, status_aktif, tanggal_buku dan tanggal mulai bergantung sepenuhnya
kepada
atribut
key
yaitu
kode_tahun_buku
(Funcional Dependency). c) Tabel m_tahun_buku sudah normal bentuk ketiga (3NF) karena semua atribut nonkey tidak bergantung kepada atributkey lainnya tetapi terhadap key yaitu kode_tahun_buku(Transitive Dependency).
44
3.2.1.2. ERD jenis_potongan
kode_jenis_potongan* jenis_potongan
1
ada
kode_jenis_potongan* kode_potongan*
bekerja_di
M M
1
dapat
kode_potongan* Jumlah_potongan kode_potongan* nik_karyawan* keterangan Sisa_potongan Status Tanggal_potongan
1
ada
karyawan
dapat M
M
ada
1
slip M
1
1
punya
jabatan
kode_jabatan* jabatan
1
kode_jabatan* nik_karyawan*
dapat
kode_jabatan* kode_gaji*
M
nik_karyawan* kode_slip*
kode_slip* Slip_gaji jumlah_hadir Tanggal_slip Total_gaji Total_pendapatan M Total_pengurangan
kode_detil_pengurangan* kode_slip*
username* password status
1
kode_detil_pengurangan* detil_pengurangan jumlah_pengurangan M
user
kode_cabang* nik_karyawan*
1 nik_karyawan* Jenis_kelamin Status_perkawinan Alamat_karyawan Nama_karyawan No_rekening Tanggal_lahir Tanggal_masuk no_telepon Tempat_lahir
kode_potongan* kode_detil_pengurangan*
1 adalah username* nik_karyawan*
1
M potongan
kode_cabang* cabang
cabang
kode_gaji* Besar_gaji periode
gaji 1
kode_detil_pendapatan* kode_gaji*
M
ada kode_jenis_pendapatan* kode_gaji*
ada
M detil_pendapatan
kode_detil_pendapatan* jumlah_pendapatan
M
ada
kode_detil_pendapatan* kode_slip*
kode_slip* kode_tahun_buku* rekap
1 tahun_buku kode_tahun_buku* tahun_buku awalan keterangan Status_aktif tanggal_buku tanggal_mulai
Gambar 3.0-15 Entity Relational Diagram Sistem Usulan
1
jenis_pendapatan kode_jenis_pendapatan* jenis_pendapatan
45
3.2.1.3. Transformasi ERD ke LRS jenis_potongan
kode_jenis_potongan* jenis_potongan
1
ada
kode_jenis_potongan* kode_potongan*
bekerja_di
M M
1
dapat
1 kode_potongan* kode_potongan* Jumlah_potongan nik_karyawan* keterangan
ada
kode_potongan* kode_detil_pengurangan*
M kode_detil_pengurangan* detil_pengurangan jumlah_pengurangan
1 M
nik_karyawan* kode_slip*
kode_slip* Slip_gaji jumlah_hadir Tanggal_slip Total_gaji Total_pendapatan M Total_pengurangan
M
kode_detil_pengurangan* kode_slip* ada
kode_cabang* nik_karyawan*
karyawan
dapat
1
username* password status
user
username* nik_karyawan*
1 nik_karyawan* Jenis_kelamin Status_perkawinan Alamat_karyawan Nama_karyawan No_rekening Tanggal_lahir Tanggal_masuk no_telepon Tempat_lahir
Sisa_potongan Status Tanggal_potongan
1
adalah
1
M potongan
kode_cabang* cabang
cabang
1
slip M
1
punya
jabatan
kode_jabatan* jabatan
1
kode_jabatan* nik_karyawan*
kode_jabatan* kode_gaji*
dapat
M kode_gaji* Besar_gaji periode
M
gaji 1
ada
ada kode_jenis_pendapatan* kode_gaji*
kode_detil_pendapatan* kode_gaji*
M detil_pendapatan
kode_detil_pendapatan* jumlah_pendapatan
M
ada
kode_detil_pendapatan* kode_slip*
kode_slip* kode_tahun_buku* rekap
1 tahun_buku kode_tahun_buku* tahun_buku awalan keterangan Status_aktif tanggal_buku tanggal_mulai
Gambar 3.0-16 Transformasi ERD KE LRS
1
jenis_pendapatan kode_jenis_pendapatan* jenis_pendapatan
46
3.2.1.4. LRS
m_jenis_potongan
m_user
PK kode_jenis_potongan
PK username
m_cabang PK kode_cabang
jenis_potongan
cabang
password status nik_karyawan
m_jabatan PK kode_jabatan jabatan
t_potongan PK
kode_potongan m_jenis_pendapatan
jumlah_potongan keterangan sisa_potongan status tanggal_potongan FK1 nik_karyawan FK2 kode_jenis_potongan
PK kode_jenis_pendapatan m_karyawan PK
nik_karyawan m_gaji
jenis_kelamin status_perkawinan alamat_karyawan nama_karyawan no_rekening tanggal_lahir tanggal_masuk no_telepon tempat_lahir FK2 kode_jabatan FK1 kode_cabang
t_detil_pengurangan PK
jenis_pendapatan
kode_detil_pengurangan
jumlah_pengurangan FK2 kode_slip FK1 kode_potongan
PK
besar_gaji periode FK1 kode_jabatan FK2 kode_jenis_pendapatan
t_detil_pendapatan PK
t_slip PK
kode_slip
slip_gaji jumlah_hadir tanggal_slip total_gaji total_pendapatan total_pengurangan FK1 nik_karyawan FK2 kode_tahun_buku
m_tahun_buku PK kode_tahun_buku tahun_buku awalan keterangan status_aktif tanggal_buku tanggal_mulai
Gambar 3.0-17 Logical Record Structure
kode_gaji
kode_detil_pendapatan
jumlah_pendapatan FK1 kode_gaji FK2 kode_slip
47
3.2.1.5. Spesifikasi Basis Data
1. Nama File
: Karyawan
Isi
: Data Karyawan
Media
: Hardisk
Primary Key
: Nik_karyawan
Foreign Key
: Kode_cabang, Kode Jabatan
Panjang Record
:
Tabel 3.1 Data karyawan
Nama Field
Type
Lebar
Nik_karyawan
Varchar
6
No induk karyawan
Jenis_kelamin
Varchar
10
Jenis kelamin karyawan
Status_perkawinan
Varchar
30
Status karyawan
Alamat_karyawan
Varchar
100
Alamat karyawan
Nama_karyawan
Varchar
100
Nama karyawan
no_rekening
Varchar
20
Nomer Rekening
Tanggal_lahir
Date
Tanggal lahir karyawan
Tanggal_masuk
Date
Tanggal masuk karyawan
No_telepon
Varchar
20
Nomer telepon
Tempat_lahir
Varchar
100
Tempat lahir karyawan
Kode_jabatan
Varchar
3
Kode Jabatan karyawan
Kode_cabang
Varchar
3
Kode cabang karyawan
2. Nama File
: Jabatan
Isi
: Data Jabatan
Media
: Hardisk
Primary Key
: Kode_jabatan
Foreign key
: -
Panjang Record
:
Keterangan
48
Tabel 3.2 Data jabatan
Nama Field
Type
Lebar
Keterangan
Kode_jabatan
Varchar
3
Kode jabatan
Jabatan
Varchar
50
Jabatan
3. Nama File
: Slip
Isi
: Data slip
Media
: Hardisk
Primary Key
: Kode_slip
Foreign Key
: Nik_karyawan, kode_tahun_buku
Panjang Record
:
Tabel 3.3 Slip
Nama Field
Type
Lebar
Kode_slip
Varchar
13
Kode slip
Slip_gaji
Varchar
15
Slip gaji
Jumlah_hadir
Int
Jumlah hadir
Tanggal_slip
Date
Tanggal slip
Total_gaji
Int
Total gaji
Total_pendapatan
Int
Total pendapatan
Total_pengurangan
Int
Total pengurangan
Nik_karyawan
Varchar
6
Nomer induk karyawan
Kode_tahun_buku
Varchar
4
Kode tahun buku
4. Nama File
Keterangan
: Gaji karyawan
Isi
: Data gaji karyawan
Media
: Hardisk
Primary Key
: Kode_gaji
Foreign Key
: Kode_jabatan, kode_jenis_pendapatan
Panjang Record
:
49
Tabel 3.4 Gaji Karyawan
Nama Field
Type
Lebar
Kode_gaji
Varchar
7
Besar_gaji
Int
Periode_gaji
Varchar
20
Periode gaji
Kode_jabatan
Varchar
3
Kode jabatan
Kode_jenis_pendapatan Varchar
4
Kode jenis pendapatan
5. Nama File
Keterangan Kode gaji Besar gaji
: Cabang
Isi
: Data Cabang
Media
: Hardisk
Primary Key
: Kode_cabang
Foreign Key
: -
Panjang Record
:
Tabel 3.5 Cabang
Nama Field
Type
Lebar
Keterangan
Kode_cabang
Varchar
3
Kode cabang
Cabang
Varchar
50
Nama cabang
6. Nama File
: Detil pendapatan
Isi
: Data detil pendapatan
Media
: Hardisk
Primary Key
: Kode_detil_pendapatan
Foreign Key
: Kode_gaji, Kode_slip
Panjang Record
:
50
Tabel 3.6 Detil Pendapatan
Nama Field
Type
Lebar
Keterangan
12
Kode detil pendapatan
Kode_detil_pendapatan Varchar Jumlah_pendapatan
Int
Kode_gaji
Varchar
7
Kode gaji
Kode_slip
Varchar
13
Kode slip
7. Nama File
Jumlah pendapatan
: Jenis pendapatan
Isi
: Data jenis pendapatan
Media
: Hardisk
Primary Key
: Kode_jenis_pendapatan
Foreign Key
: _
Panjang Record
:
Tabel 3.7 Jenis pendapatan
Nama Field
Type
Lebar
Keterangan
Kode_jenis_pendapatan Varchar
4
Kode jenis pendapatan
Jenis_pendapatan
50
Jenis pendapatan
8. Nama File
Varchar
: Potongan
Isi
: Data potongan
Media
: Hardisk
Primary Key
: Kode_potongan
Foreign Key
: Nik_karyawan, kode_jenis_potongan
Panjang Record
:
51
Tabel 3.8 Potongan
Nama Field
Type
Lebar
Kode_potongan
Varchar
8
Jumlah_potongan
Int
Keterangan
Varchar
Sisa_potongan
Int
Status
Varchar
Tanggal_potongan
Date
Nik_karyawan
Varchar
6
No induk karyawan
Kode_jenis_potongan
Varchar
4
Kode jenis potongan
9. Nama File
Keterangan Kode potongan jumlah potongan
255
Keterangan Sisa Potongan
11
Status Tanggal potongan
: Detil pegurangan
Isi
: Data detil pengurangan
Media
: Hardisk
Primary Key
: Kode_detil_pengurangan
Foreign Key
: Kode slip, kode potongan
Panjang Record
:
Tabel 3.9 Detil pengurangan
Nama Field
Type
Lebar
Keterangan
10
Kode detil pengurangan
Kode_detil_pengurangan Varchar Jumlah_pengurangan
Bigint
Kode_slip
Varchar
13
Kode slip
Kode_potongan
Varchar
8
Kode potongan
10. Nama File
Jumlah pengurangan
: Jenis potongan
Isi
: Data jenis potongan
Media
: Hardisk
Primary Key
: Kode_jenis_potongan
Foreign Key
: -
52
Panjang Record
:
Tabel 3.10 Jenis potongan
Nama Field
Type
Lebar
Kode_jenis_potongan
Varchar
4
Kode jenis potongan
Jenis_potongan
Varchar
50
Jenis potongan
10. Nama File
Keterangan
: Tahun buku
Isi
: Data tahun buku
Media
: Hardisk
Primary Key
: Kode_tahun_buku
Foreign Key
: -
Panjang Record
:
Tabel 3.11 Tahun Buku
Nama Field
Type
Lebar
Kode_tahun_buku
Varchar
4
Kode tahun buku
Awalan
Varchar
5
Awalan
Keterangan
Varchar
255
Status_aktif
Int
Tahun_buku
Varchar
Tanggal_mulai
Date
11. Nama File
Keterangan
Keterangan Status aktif
100
Tahun buku Tanggal mulai
: User
Isi
: Data user
Media
: Hardisk
Primary Key
: username
Foreign Key
: nik_karyawan
Panjang Record
:
53
Tabel 3.12 User
Nama Field
Type
Lebar
Keterangan
username
Varchar
30
username
password
Varchar
100
password user
status
Varchar
25
status user
nik_karyawan
char
6
NIK Karyawan
3.2.2. Perancangan Aplikasi 3.2.2.1. Use Case Diagram 1. Sistem Penggajian uc sistem_penggaj ian
Data Cabang
Data Karyaw an
Data Jabatan HRD Data Pengguna
Tahun Buku Potongan Gaj i
Penggaj ian
Laporan Data Karyaw an
SPV
Laporan Potongan Laporan Penggaj ian
Gambar 3.0-18 Use Case Diagram Sistem Penggajian
54
3.2.2.2. Class Diagram class sistem_informasi_penggajian User -
Cabang - kodeCabang: String - cabang: String
1..1
username: String password: String status: String nikKaryawan: String
Jabatan 1..1
+ getter() + setter()
+ getter() + setter()
- kodeJabatan: String - jabatan: String + getter() + setter()
1..1
1..1
1..*
JenisPotongan
1..*
Karyawan
- kodeJenisPotongan: String - jenisPotongan: String + getter() + setter() 1..*
1..1
Potongan 1..* 1..1 + +
1..1
kodePotongan: String tanggalPotongan: Date jumlahPotongan: int sisaPotongan: int keterangan: String status: String karyawan: String jenisPotongan: String
1..1 -
1..*
nikKaryawan: String namaKaryawan: String tempatLahir: String tanggalLahir: Date jenisKelaminKaryawan: String statusPerkawinan: String 1..1 alamatKaryawan: String rekeningKaryawan: String teleponKaryawan: String tanggalMasuk: Date cabang: String jabatan: String
GajiKaryawan -
kodeGaji: String jenisPendapatan: String 1..* jabatan: String periodeGaji: String besarGaji: int
+ getter() + setter()
JenisPendapatan 1..1 - kodeJenisPendapatan: String - jenisPendapatan: String + getter() + setter()
1..1
+ getter() + setter()
getter() setter() 1..* Slip
1..*
1..1 -
DetilPengurangan -
kodeDetilPengurangan: String jumlahPengurangan: int 1..* potongan: String slip: String
+ getter() + setter() TahunBuku -
kodeTahunBuku: String tahunBuku: String awalanTahunBuku: String 1..1 statusTahunBuku: int keteranganTahunBuku: String tanggalMulai: Date
kodeSlip: String slipGaji: String tanggalSlip: Date jumlahHadir: int 1..1 totalGaji: int totalPendapatan: int totalPengurangan: int tahunBuku: String karyawan: String
1..* DetilPendapatan 1..* -
kodeDetilPendapatan: String jumlahPendapatan: int gajiKaryawan: String slip: String
+ getter() + setter()
+ getter() + setter() 1..*
+ getter() + setter()
Gambar 3.0-19 Class Diagram Sistem Usulan
55
3.2.2.3. Sequence Diagram a. Tampilan Diagram Karyawan sd Karyaw an
HRD
Form Karyawan
Karyawan Control l er
Karyawan
getLi st() getLi st()
getLi st() getLi st()
i nsert()
i nsert()
i nsert()
update()
update()
update()
del ete()
del ete()
del ete()
Gambar 3.0- 20 Sequence Diagram Karyawan
b. Tampilan Diagram Cabang sd cabang
HRD
Form Cabang
Cabang Control l er
Cabang
getLi st() getLi st() getLi st() getLi st() getLi st() i nsert() i nsert() i nsert() update() update() update() del ete() del ete() del ete()
Gambar 3.0-21 Sequence Diagram Cabang
56
c. Tampilan Digram Jabatan sd j abatan
HRD
form j abatan
j abatan control l er
j abatan
getLi st() getLi st() getLi st() getLi st() getLi st() i nsert() i nsert() i nsert()
update() update() update()
del ete() del ete() del ete()
Gambar 3.0-22 Sequence Diagram Jabatan
d. Tampilan Digram Tahun buku sd sistempenggaj ian
SPV
form tahun buku
tahun buku control l er
tahun buku
getLi st() getLi st() getLi st() geLi st() getLi st() i nsert() i nsert() i nsert() update() update() update() del ete() del ete() del ete()
Gambar 3.0-23 Squence Diagram Tahun Buku
57
e. Tampilan Digram Potongan sd potongan
SPV
Form potongan
potongan control l er
potongan
getLi st() getLi st() getLi st()
getLi st() getLi st() i nsert() i nsert() i nsert() update() update() update()
del ete() del ete() del ete()
Gambar 3.0-24 Squence Diagram Potongan
f. Tampilan Digram Penggajian sd potongan
SPV
Form potongan
potongan control l er
potongan
getLi st() getLi st() getLi st()
getLi st() getLi st() i nsert() i nsert() i nsert() update() update() update()
del ete() del ete() del ete()
Gambar 3.0-25 Sequence DiagramPenggajian
58
g. Tampilan Diagram Laporan Karyawan sd laporan karyaw an
SPV
Form Laporan karyawan
Laporan karyawan Controller
karyawan
cetak() cetak() cetak() cetak() cetak()
Gambar 3.0-26 Sequence DiagramLaporan Karyawan
h. Tampilan Diagram Laporan penggajian sd laporan penggaj ian
SPV
Form Laporan penggajian
Laporan penggajian controller
penggajian
cetak() cetak() cetak() cetak() cetak()
Gambar 3.0-27 Sequence DiagramLaporan Penggajian
59
i. Tampilan Laporan Potongan sd laporan potongan
SPV
Form Laporan potongan
Laporan Potongan contoller
potongan
cetak() cetak() cetak() cetak() cetak()
Gambar 3.0-28 Sequence Diagram Laporan Potongan
j. Tampilan Diagram User sd user
HRD
Form User
User Controller
User
getList() getList() getList() getList() getList()
insert() insert() insert() update()
delete()
update()
update()
delete() delete()
Gambar 3.0-29 Sequence Diagram User
60
3.2.2.4. Activity Diagram a. Login User Pertama Hrd dan Spv input username dan password jika sudah system akan berjalan cari username jika username yang diinput salah maka akan kembali tapi jika username benar maka user akan mendapatkan hak akses untuk menggunakan aplikasi. act activ ity_sistem_usulan_login_aplikasi HRD
SPV
Input username dan passw ord
Sistem Penggaj ian
Input username dan passw ord
Login Sistem
terima pesan gagal login aplikasi
terima pesan gagal login aplikasi cek username dan passw ord
[Tidak Cocok] [Cocok]
masuk ke aplikasi masuk ke aplikasi
masuk ke aplikasi
tampilkan menu berdasarkan akses
Gambar 3.0-30 Activity Diagram Login User
61
b. Pendataan Pegawai Pertama Hrd
input data lengkap pegawai terlebih dahulu lalu
system memvalidasi data inputan jika data tidak valid maka akan kembali jika data benar maka data akan tersimpan.
act pendataan pegaw ai HRD
menginput data lengkap pegaw ai
data tidak v alid
Sistem
memv alidasi data inputan
T idak
Ya data disimpan
Gambar 3.0-31 Activity Diagram Pendataan Pegawai
c.
Penghitungan Gaji
Pertama Spv input nomor induk karyawan lalu system akan menampilkan data gaji dan potongan karyawan kemudian spv input absensi karyawan jika sudah system akan mengitung akumulasi data gaji karyawan lalu cetak slip jika sudah karyawan terima slip
62
act penghitungan gaj i SPV
input nomor induk karyawan
Sistem
Karyawan
cari data gaj i dan potongan karyawan
input absensi karyawan
hitung akumulasi data gaj i
cetak slip gaj i
terima slip gaj i
Gambar 3.0-32 Activity Diagram Penghitungan Gaji
d. Pembuatan Laporan Pertama Spv mencetak laporan lalu laporan di serahkan ke asisten manager act pembuatan laporan SPV
Cetak laporan
Sistem
cetak laporan
Gambar 3.0-33 Activity Diagram Pembuatan Laporan
Asisten Manager
terima laporan
63
3.2.2.5. User Interface 1. Tampilan Login User sistem informasi penggajian
Gambar 3.0-34 User Interface Login User
2. Tampilan Cabang Sistem Informasi Penggajian
Gambar 3.0-35 User Interface Cabang
3. Tampilan Jabatan Sistem Informasi Penggajian
Gambar 3.0-36 User Interface Jabatan
64
4. Tampilan Dialog Jabatan Sistem Informasi Penggajian
Gambar 3.0-37 User Interface Dialog Jabatan
5. Tampilan Karyawan Sistem Informasi Penggajian
Gambar 3.0-38 User InterfaceKaryawan
65
6. Tampilan Dialog Karyawan Sistem Informasi Penggajian
Gambar 3.0-39 User Interface Dialog Karyawan
BAB IV IMPLEMENTASI DAN PENGUJIAN 4.1.
Implementasi Aplikasi Perangkat lunak (Software) rancangan sistem penggajian menggunakan
metode berorientasi objek pada PT.XYZ dengan menggunakan netbeans 7.3 dan Mysql. Implementasi system merupakan 4.2.
Implementasi Komputer Dalam implementasi pendukung system
penggajian aplikasi berbasis
desktop rancang bangun system penggajian PT.XYZ, pada sub ini akan dibahas mengenai: 1)
Implementasi perangkat keras
2)
Implementasi perangkat lunak
4.2.1.
Implementasi Perangkat Keras Perangkat Keras (Hardware) yang digunakan untuk pembuatan sistem informasi ini secara optimal memerlukan spesifikasi minimum komputer sebagai berikut :
4.2.2.
1. Processor
: Intel® Pentium core i3 (2,4GHz)
2. HardDisk
: 320 GB
3. Memory RAM
: 2 GB
Implementasi Perangkat Lunak Untuk mendukung sistem yang diusulkan berjalan dengan optimal, dibutuhkan software pengolahan data, adapun perangkat lunak yang digunakan untuk mendukung pembuatan program aplikasi ini sebagai berikut : 1.
Windows 8 pro sebagai sistem operasi.
2.
Java NetBeans IDE 7.3 sebagai perangkat lunak pembuatan listing program dan design interface.
66
67
3.
Navicat for MySQL sebagai database server dengan XAMPP.
4.2.3.
4.
Enterprise Architect
5.
Microsoft Visio 2007
Implementasi Antar Muka Implementasi antarmuka dilakukan dengan setiap halaman program yang dibuat dan pengkodeannya dalam bentuk file program. Berikut ini adalah implementasi antarmuka yang dibuat : a. Tampilan File Jabatan
Gambar 4.0-1 Tampilan File Jabatan
b. Tampilan File Tambah/Ubah Jabatan
Gambar 4.0-2 Tampilan File Tambah/Ubah Jabatan
68
c. Tampilan
File
Tambah/Ubah
Penerimaan
gaji
karyawan
berdasarkan Jabatan
Gambar 4.0-3 Tampilan FileTambah/Ubah penerimaan gaji karyawan berdasarkan jabatan
d. Tampilan File Karyawan
Gambar 4.0-4 Tampilan File Karyawan
69
e. Tampilan File Tambah/Ubah Karyawan
Gambar 4.0-5 Tampilan FileTambah/Ubah Karyawan
f. Tampilan File Cabang
Gambar 4.0-6 Tampilan File Cabang
70
g. Tampilan File Tahun Buku
Gambar 4.0-7 Tampilan FileTahun Buku
4.3.
Pengujian Aplikasi / Testing Apliccation Rencana testing yang akan dilakukan dengan menguji sistem secara alpha. Tabel 4.1 Rencana pengujian
71
4.3.1 Kasus dan pengujian Berdasarkan rencana pengujian yang telah disusun, maka dapat dilakukan pengujian sebagai berikut : 4.3.1.1. Login Tabel 4.2 Pengujian login (data normal)
Data masukkan
User dan password
Yang diharapkan
Username, password bagian yang dimasukkan benar sehingga dapat masuk.
Pengamatan
Username, password bagian yang dimasukkan diterima kemudian masuk ke menu utama.
Kesimpulan
Sukses
Tabel 4.3 Pengujian login (data normal)
Kasus dan hasil uji (data salah) Data masukkan
Username dan password
Yang diharapkan
Username dan password yang di masukkan salah sehingga tidak dapat masuk.
Pengamatan
Muncul notifikasi bahwa login tidak valid
Kesimpulan
Sukses
4.3.1.2. Pengolahan Gaji Tabel 4.4 Pengujian Gaji Kasus dan hasil uji (data normal) Data masukkan
Data cabang, data jabatan, data karyawan, data tahun buku, data buku besar, data jenis gaji, data gaji pegawai,data transaksi dan data Laporan.
Yang diharapkan
Pengolahan data berhasil. Klik tambah, ubah dan hapus akan muncul masing-masing
72
form dialog. Pengamatan
Berhasil masuk form data cabang, data jabatan, data karyawan, data tahun buku buku besar, data jenis gaji, data gaji pegawai, data transaksi, dan data laporan.
Kesimpulan
Sukses
4.3.1.3. Pengolahan Slip Gaji Tabel 4.5 Pengujian Slip Gaji
Kasus dan hasil uji coba (data normal) Data masukkan
Mengisi data nota di form dengan lengkap.
Yang diharapkan
Pengolahan data berhasil. Isi data nota dengan lengkap, lalu klik cetak.
Pengamatan
Data berhasil dan tersimpan dalam database.
Kesimpulan
Sukses
BAB V PENUTUP 5.1.
Kesimpulan Dari hasil perbandingan antara sistem yang dirancang dan diusulkan,
maka penyusun dapat menyimpulkan bahwa dengan adanya sistem penghitungan gaji karyawan diharapkan dapat membantu untuk penghitungan gaji pada sebuah perusahaan. 5.2.
Saran Berdasakan Kesimpulan Diatas, maka penulis menyampaikan saran-saran
sebagai berikut: a. Diperlukan ketelitian dalam memasukan data, sehingga informasi yang dihasilkan lebih baik.
73
DAFTAR PUSTAKA
Andi. (2010). pengembangan aplikasi java dengan netbeans. yogyakarta: wahana komputer. Andi, K. (2007). SISTEM PENGAJIAN. Blaha. (1998). Konsep Berorintasi Objek. Analisis Dan Perancangan Sistem Dengan Metose Berorintasi Objek , 2. Bunafit, N. (2008). Panduan Lengkap Menguasai SQL. Jakarta: Media Kita. Connolly. (2005). Definisi Database Manajemen Sistem. 342. Edward, Y. (1994). Object-Oriented sistem design an intrgrated approach. New Jersey: Prentice Healt Inc. Evi, L. D. (2013). Kamus Lengkap Bahasa indonesia. Tangerang Selatan: Kharima Publishing group. Fahmi, f. (2000). Sistem Informasi. Sistem Informasi Pengajian karyawan pada CV.Diva menggunakan VB.Net . Hendri. (2008). Belajar merancang sistem aplikasi. Bandung: Modula. Jeni. (2000). Pengenalan model MVC (model-view controller. Jakarta: PT.Gramedia Utama. Kristoko, D. H. (2009). Implementasi Model View Controller dan Object Relation pada Content Management System Informasi Keuangan. Jurnal Teknologi Informasi , 1. Mulyadi. (2001). Kamus Besar. Nugroho, B. (2008). Panduan Lengkap menguasai SQL. jakarta: media kita. Saiful, B. (2012). Perancangan sisem pengajian pada PT. Grainda Gunalaras .
74
Salahudin, M., & Rosa, A. S. (2007). Belajar Pemrograman dengan bahasa java . Bandung: Bumi Aksara. Sutopo, H. (2002). Analisa dan desain berorientasi objek. Yogyakarta: J & J Learning. Whitten. (2004). Database Manajemen Sistem. 322.
75
LAMPIRAN 6.1.ApplicationContext.xml
76
id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSourc e" p:driverClassName="${driver.class}" p:url="${connection.string}" p:username="${username.string}" p:password="${password.string}"/>
id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSes sionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="classpath:hibernate.cfg.xml"/>
id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionMan ager" p:sessionFactory-ref="sessionFactory"/>
6.2.Main Java package com.unpam.gajiapp;
77
import com.unpam.gajiapp.service.MasterService; import com.unpam.gajiapp.service.TransaksiService; import com.unpam.gajiapp.view.MainFrame; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import org.jb2011.lnf.beautyeye.BeautyEyeLookAndFeelCross; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContex t;
public class Main {
private static MasterService masterService; private static TransaksiService transaksiService;
public static void main(String[] args) { ApplicationContext
applicationContext
=
ClassPathXmlApplicationContext("applicationContext.xml");
78
new
masterService
=
(MasterService)
applicationContext.getBean("masterService"); transaksiService
=
(TransaksiService)
applicationContext.getBean("transaksiService"); new MainFrame().setVisible(true); //
new LoginDialog(null, true).setVisible(true); }
static { try { UIManager.setLookAndFeel(new BeautyEyeLookAndFeelCross()); } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } }
public static MasterService getMasterService() { return masterService; }
public static TransaksiService getTransaksiService() {
79
return transaksiService; }
} 6.3.KaryawanController.java package com.unpam.gajiapp.controller;
import com.unpam.gajiapp.Main; import com.unpam.gajiapp.model.Cabang; import com.unpam.gajiapp.model.Karyawan; import com.unpam.gajiapp.model.KaryawanView; import com.unpam.gajiapp.swingmodel.TableModel; import com.unpam.gajiapp.utility.MessageUtility; import com.unpam.gajiapp.utility.ValidationUtility; import com.unpam.gajiapp.view.MainFrame; import com.unpam.gajiapp.view.master.KaryawanPanel; import java.util.ArrayList; import java.util.List; import javax.swing.JOptionPane;
public class KaryawanController {
80
private KaryawanPanel karyawanPanel; private Cabang cabang; private Karyawan karyawan; private List listKaryawanViews; private TableModel tableModelKaryawan; private ValidationUtility validationUtility;
public KaryawanController(KaryawanPanel karyawanPanel) { this.karyawanPanel = karyawanPanel; cabang = new Cabang(); karyawan = new Karyawan(); listKaryawanViews = new ArrayList(); tableModelKaryawan
=
new
TableModel(KaryawanView.class); validationUtility = new ValidationUtility(); }
public void ambilListKaryawan() { karyawanPanel.setTableModel(tableModelKaryawan); if(karyawanPanel.getTableView().getModel().getRowCount()>0) { karyawanPanel.getTableModel().removeAllRow(); } 81
karyawanPanel.getTableModel().setList(Main.getMasterService().getL istKaryawan("nikKaryawan"));
karyawanPanel.getTableView().setModel(karyawanPanel.getTableMo del()); //
settingTable2();
//
reset(); }
private void settingTable2() { int[] width={100,250}; for(int i=0;i<2;i++){
karyawanPanel.getTableView().getColumnModel().getColumn(i).setPr eferredWidth(width[i]); } }
public void simpan() { if(validasi()) { try { Main.getMasterService().saveKaryawan(buatKaryawan()); ambilListKaryawan();
82
karyawanPanel.getForm().setVisible(false); } catch(Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(MainFrame.getInstance(), "Data gagal disimpan!", "Error",JOptionPane.ERROR_MESSAGE); } } }
public void delete(String parameter) { if(JOptionPane.showConfirmDialog(karyawanPanel, MessageUtility.getMessage("delete.confirm.message"),MessageUtility .getMessage("delete.confirm.title"),
JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ karyawan = Main.getMasterService().getKaryawan(parameter); karyawanPanel.setParameter(null); try { Main.getMasterService().deleteKaryawan(karyawan); ambilListKaryawan(); } catch(Exception e) { JOptionPane.showMessageDialog(MainFrame.getInstance(), MessageUtility.getMessage("delete.failed.message"),
83
MessageUtility.getMessage("confirm.message.title"),JOptionPane.ER ROR_MESSAGE); } } }
public void setFieldText(String parameter) { try { karyawan = Main.getMasterService().getKaryawan(parameter);
karyawanPanel.getTextNik().setText(karyawan.getNikKaryawan());
karyawanPanel.getTextNama().setText(karyawan.getNamaKaryawan() );
karyawanPanel.getTextTempatLahir().setText(karyawan.getTempatLa hir());
karyawanPanel.getTextTanggalLahir().setDate(karyawan.getTanggalL ahir());
karyawanPanel.getComboJenisKelamin().setSelectedItem(karyawan.g etJenisKelaminKaryawan());
84
karyawanPanel.getComboStatus().setSelectedItem(karyawan.getStatus Perkawinan());
karyawanPanel.getTextAlamat().setText(karyawan.getAlamatKaryawa n());
karyawanPanel.getTextRekening().setText(karyawan.getRekeningKar yawan());
karyawanPanel.getTextTelepon().setText(karyawan.getTeleponKarya wan());
karyawanPanel.getTextTanggalMasuk().setDate(karyawan.getTanggal Masuk());
karyawanPanel.getTextCabang().setText(karyawan.getCabang().getKo deCabang());
karyawanPanel.getTextJabatan().setText(karyawan.getJabatan().getKo deJabatan()); karyawanPanel.getForm().setVisible(true); } catch(Exception e) { JOptionPane.showMessageDialog(MainFrame.getInstance(), "????????", "Error",JOptionPane.ERROR_MESSAGE);
85
} }
private Karyawan buatKaryawan() {
karyawan.setNikKaryawan(karyawanPanel.getTextNik().getText());
karyawan.setNamaKaryawan(karyawanPanel.getTextNama().getText() );
karyawan.setTempatLahir(karyawanPanel.getTextTempatLahir().getT ext());
karyawan.setTanggalLahir(karyawanPanel.getTextTanggalLahir().get Date());
karyawan.setJenisKelaminKaryawan(karyawanPanel.getComboJenisK elamin().getSelectedItem().toString());
karyawan.setStatusPerkawinan(karyawanPanel.getComboStatus().getS electedItem().toString());
karyawan.setAlamatKaryawan(karyawanPanel.getTextAlamat().getTe xt());
karyawan.setRekeningKaryawan(karyawanPanel.getTextRekening().g etText());
86
karyawan.setTeleponKaryawan(karyawanPanel.getTextTelepon().getT ext());
karyawan.setTanggalMasuk(karyawanPanel.getTextTanggalMasuk().g etDate());
karyawan.setCabang(Main.getMasterService().getCabang(karyawanPa nel.getTextCabang().getText()));
karyawan.setJabatan(Main.getMasterService().getJabatan(karyawanPa nel.getTextJabatan().getText())); return karyawan; } public void reset() { karyawanPanel.getTextNik().setText(null); karyawanPanel.getTextNama().setText(null); karyawanPanel.getTextTempatLahir().setText(null); karyawanPanel.getTextTanggalLahir().setDate(null); karyawanPanel.getComboJenisKelamin().setSelectedIndex(0); karyawanPanel.getComboStatus().setSelectedIndex(0); karyawanPanel.getTextAlamat().setText(null); karyawanPanel.getTextTelepon().setText(null); karyawanPanel.getTextRekening().setText(null); karyawanPanel.getTextTanggalMasuk().setDate(null); 87
karyawanPanel.getTextCabang().setText(null); karyawanPanel.getTextJabatan().setText(null); karyawanPanel.getForm().setVisible(false); }
private boolean validasi() { if(karyawanPanel.getTextCabang().getText().length() == 0) { JOptionPane.showMessageDialog(karyawanPanel, MessageUtility.getMessage("null.char"), MessageUtility.getMessage("message.title"), JOptionPane.ERROR_MESSAGE); return false; } //
else
if(!validationUtility.CharOnly(karyawanPanel.getTextCabang().getTex t())) { //
JOptionPane.showMessageDialog(karyawanPanel,
MessageUtility.getMessage("char.only"), MessageUtility.getMessage("message.title"), JOptionPane.ERROR_MESSAGE); //
return false;
//
} return true; }
} 88
6.4.SQLTemplete.java package com.unpam.gajiapp.dao;
import java.lang.reflect.ParameterizedType; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired;
public class SQLTemplate {
@SuppressWarnings("unchecked") protected Class className; @Autowired protected SessionFactory sessionFactory;
@SuppressWarnings("unchecked") public SQLTemplate() { this.className
=
(Class)
((ParameterizedType)getClass().getGenericSuperclass()).getActualTyp eArguments()[0]; }
public void save(T className) { sessionFactory.getCurrentSession().saveOrUpdate(className);
89
}
public void merge(T domain) { sessionFactory.getCurrentSession().merge(domain); }
public void delete(T className) { sessionFactory.getCurrentSession().delete(className); }
@SuppressWarnings("unchecked") public List getList(String parameter) { return
sessionFactory.getCurrentSession().createQuery("FROM
"+className.getName()+" ORDER BY "+parameter+" ASC").list(); }
@SuppressWarnings("unchecked") public Long count() { List
list
sessionFactory.getCurrentSession().createQuery("SELECT COUNT(*) FROM "+className.getName()+" x").list(); Long count = (Long) list.get(0); return count;
90
=
}
} 6.5.KaryawanDao.java package com.unpam.gajiapp.dao;
import com.unpam.gajiapp.model.Karyawan; import com.unpam.gajiapp.model.KaryawanView; import com.unpam.gajiapp.model.Potongan; import com.unpam.gajiapp.model.PotonganView; import java.util.List; import org.hibernate.Hibernate; import org.hibernate.transform.Transformers; import org.springframework.stereotype.Repository;
@Repository public class KaryawanDao extends SQLTemplate {
public Karyawan get(String parameter) { Karyawan
karyawan
=
(Karyawan)
sessionFactory.getCurrentSession().get(Karyawan.class, parameter); if(karyawan!=null){ Hibernate.initialize(karyawan.getPotongans()); 91
for(Potongan potongan : karyawan.getPotongans()) { Hibernate.initialize(potongan.getJenisPotongan()); } Hibernate.initialize(karyawan.getSlips()); } return karyawan; }
public List getListView(String parameter) { return sessionFactory.getCurrentSession().createSQLQuery("SELECT*FRO M v_karyawan ORDER BY nikKaryawan=:parameter") .setString("parameter", parameter)
.setResultTransformer(Transformers.aliasToBean(KaryawanView.clas s)).list(); }
public List getListView(Karyawan karyawan) { return sessionFactory.getCurrentSession().createSQLQuery("SELECT*FRO M
v_potongan
WHERE
statusPotongan
karyawan=:karyawan
ORDER
BY
ASC").setString("karyawan",
karyawan.getNikKaryawan()+"
92
-
"+karyawan.getNamaKaryawan()).setResultTransformer(Transformers .aliasToBean(PotonganView.class)).list(); } } 6.6.Karyawan.java package com.unpam.gajiapp.model;
import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; 93
import javax.persistence.UniqueConstraint; import org.hibernate.annotations.Cascade;
@Entity @Table(name
=
"m_karyawan",
uniqueConstraints={@UniqueConstraint(columnNames={"nama_kary awan"})}) public class Karyawan implements Serializable {
@Id @Column(name="nik_karyawan", updatable=false, length=6) private String nikKaryawan;
@Column(name="nama_karyawan", nullable=false, length=100) private String namaKaryawan;
@Column(name="tempat_lahir", nullable=false, length=100) private String tempatLahir;
@Temporal(TemporalType.DATE) @Column(name="tanggal_lahir", nullable=false) private Date tanggalLahir;
94
@Column(name="jenis_kelamin", nullable=false, length=10) private String JenisKelaminKaryawan;
@Column(name="status_perkawinan", nullable=false, length=30) private String StatusPerkawinan;
@Column(name="alamat_karyawan", nullable=false, length=100) private String alamatKaryawan;
@Column(name="no_rekening", length=20) private String rekeningKaryawan;
@Column(name="no_telepon", length=20) private String teleponKaryawan;
@Temporal(TemporalType.DATE) @Column(name="tanggal_masuk", nullable=false) private Date tanggalMasuk;
@ManyToOne @JoinColumn(name="kode_cabang", referencedColumnName="kode_cabang")
95
nullable=false,
private Cabang cabang;
@ManyToOne @JoinColumn(name="kode_jabatan",
nullable=false,
referencedColumnName="kode_jabatan") private Jabatan jabatan;
@OneToMany(mappedBy="karyawan",
cascade=
CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHA N) private List potongans = new ArrayList();
@OneToMany(mappedBy="karyawan",
cascade=
CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHA N) private List slips = new ArrayList();
//
@OneToOne(mappedBy = "user")
//
private User user;
96
public void addPotongan(Potongan potongan) { if(potongans==null) { potongans = new ArrayList(); } potongans.add(potongan); potongan.setKaryawan(this); }
public void removePotongan(Potongan potongan) { if(potongans==null) { potongans = new ArrayList(); } potongans.remove(potongan); potongan.setKaryawan(this); }
public List getPotongans() { return potongans; }
public void setPotongans(List potongans) { this.potongans = potongans;
97
if(potongans != null && !potongans.isEmpty()) { for(Potongan potongan : potongans) { potongan.setKaryawan(this); } } }
public void addSlip(Slip slip) { if(slips==null) { slips = new ArrayList(); } slips.add(slip); slip.setKaryawan(this); }
public void removeSlip(Slip slip) { if(slips==null) { slips = new ArrayList(); } slips.remove(slip); slip.setKaryawan(this); }
98
public List getSlips() { return slips; }
public void setSlips(List slips) { this.slips = slips; if(slips != null && !slips.isEmpty()) { for(Slip slip : slips) { slip.setKaryawan(this); } } }
public String getNikKaryawan() { return nikKaryawan; }
public void setNikKaryawan(String nikKaryawan) { this.nikKaryawan = nikKaryawan; }
99
public String getNamaKaryawan() { return namaKaryawan; }
public void setNamaKaryawan(String namaKaryawan) { this.namaKaryawan = namaKaryawan; }
public String getTempatLahir() { return tempatLahir; }
public void setTempatLahir(String tempatLahir) { this.tempatLahir = tempatLahir; }
public Date getTanggalLahir() { return tanggalLahir; }
public void setTanggalLahir(Date tanggalLahir) { this.tanggalLahir = tanggalLahir;
100
}
public String getJenisKelaminKaryawan() { return JenisKelaminKaryawan; }
public
void
setJenisKelaminKaryawan(String
JenisKelaminKaryawan) { this.JenisKelaminKaryawan = JenisKelaminKaryawan; }
public String getStatusPerkawinan() { return StatusPerkawinan; }
public void setStatusPerkawinan(String StatusPerkawinan) { this.StatusPerkawinan = StatusPerkawinan; }
public String getAlamatKaryawan() { return alamatKaryawan; }
101
public void setAlamatKaryawan(String alamatKaryawan) { this.alamatKaryawan = alamatKaryawan; }
public String getRekeningKaryawan() { return rekeningKaryawan; }
public void setRekeningKaryawan(String rekeningKaryawan) { this.rekeningKaryawan = rekeningKaryawan; }
public String getTeleponKaryawan() { return teleponKaryawan; }
public void setTeleponKaryawan(String teleponKaryawan) { this.teleponKaryawan = teleponKaryawan; }
public Date getTanggalMasuk() {
102
return tanggalMasuk; }
public void setTanggalMasuk(Date tanggalMasuk) { this.tanggalMasuk = tanggalMasuk; }
public Cabang getCabang() { return cabang; }
public void setCabang(Cabang cabang) { this.cabang = cabang; }
public Jabatan getJabatan() { return jabatan; }
public void setJabatan(Jabatan jabatan) { this.jabatan = jabatan; }
103
// //
public User getUser() {
// //
return user; }
// //
public void setUser(User user) {
// //
this.user = user; }
} 6.7.MasterSevice.java package com.unpam.gajiapp.service;
import com.unpam.gajiapp.model.Cabang; import com.unpam.gajiapp.model.GajiKaryawanView; import com.unpam.gajiapp.model.Jabatan; import com.unpam.gajiapp.model.JenisPendapatan; import com.unpam.gajiapp.model.JenisPotongan; import com.unpam.gajiapp.model.Karyawan; import com.unpam.gajiapp.model.KaryawanView; import com.unpam.gajiapp.model.PotonganView; import com.unpam.gajiapp.model.TahunBuku;
104
import com.unpam.gajiapp.model.User; import java.util.List;
public interface MasterService {
//
SERVICE CABANG public void saveCabang(Cabang cabang); public void deleteCabang(Cabang cabang); public Cabang getCabang(String parameter); public List getListCabang(String parameter); public String getKodeCabang(); public
List
getListKaryawanByCabang(String
parameter); public
List
getListPotonganPerKaryawan(Karyawan karyawan);
//
SERVICE CABANG public void saveUser(User user); public void deleteUser(User user); public User getUser(String parameter); public List getListUser(String parameter); public User loginUser(String username, String password);
105
//
SERVICE CABANG public void saveJabatan(Jabatan jabatan); public void deleteJabatan(Jabatan jabatan); public Jabatan getJabatan(String parameter); public List getListJabatan(String parameter); public
List
getListGajiJabatan(String
parameter); public String getKodeJabatan();
//
SERVICE JENIS PENDAPATAN public void saveJenisPendapatan(JenisPendapatan jenisPendapatan); public
void
deleteJenisPendapatan(JenisPendapatan
jenisPendapatan); public JenisPendapatan getJenisPendapatan(String parameter); public
List
getListJenisPendapatan(String
parameter); public String getKodeJenisPendapatan();
//
SERVICE JENIS POTONGAN public void saveJenisPotongan(JenisPotongan jenisPotongan); public void deleteJenisPotongan(JenisPotongan jenisPotongan); public JenisPotongan getJenisPotongan(String parameter);
106
public
List
getListJenisPotongan(String
parameter); public String getKodeJenisPotongan();
//
SERVICE TAHUN BUKU public void saveTahunBuku(TahunBuku tahunBuku); public void deleteTahunBuku(TahunBuku tahunBuku); public TahunBuku getTahunBuku(String parameter); public TahunBuku getTahunBukuAktif(int parameter); public List getListTahunBuku(String parameter); public String getKodeTahunBuku();
//
SERVICE KARYAWAN public void saveKaryawan(Karyawan karyawan); public void deleteKaryawan(Karyawan karyawan); public Karyawan getKaryawan(String parameter); public List getListKaryawan(String parameter);
}
107
6.8.TableModel.java package com.unpam.gajiapp.swingmodel;
import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel;
public class TableModel extends AbstractTableModel {
private List list; private List fields; private List columns;
public TableModel(Class myClass) { list = new ArrayList(); fields = new ArrayList(); columns = new ArrayList();
for(Field field : myClass.getDeclaredFields()) { HeaderColumn
column
field.getAnnotation(HeaderColumn.class); if(column != null) { 108
=
fields.add(field); columns.add(column); } } }
public List getList() { return list; }
public void setList(List list) { this.list = list; }
@Override public int getRowCount() { if(list == null) { return 0; } else { return list.size(); } }
109
@Override public int getColumnCount() { return fields.size(); }
@Override public String getColumnName(int column) { return columns.get(column).name(); }
@Override public Object getValueAt(int rowIndex, int columnIndex) { try { Field filed = fields.get(columnIndex); filed.setAccessible(true); return filed.get(list.get(rowIndex)); } catch (IllegalArgumentException e) { e.printStackTrace(); return null; } catch (IllegalAccessException e) { e.printStackTrace();
110
return null; } }
public void removeAllRow(){ list.removeAll(list); fireTableDataChanged(); }
public void addRow(T e){ list.add(e); fireTableDataChanged(); }
} 6.9.MessageUtility.java package com.unpam.gajiapp.utility;
import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.logging.Level;
111
import java.util.logging.Logger;
public class MessageUtility {
private static Properties properties = new Properties(); private static InputStream inputStream; private static String message;
public static String getMessage(String str) { try { inputStream
=
MessageUtility.class.getClassLoader().getResourceAsStream("messag e.properties"); properties.load(inputStream); message = properties.getProperty(str); } catch (IOException ex) {
Logger.getLogger(MessageUtility.class.getName()).log(Level.SEVER E, null, ex); } return message; }
112
} 6.10. MainFrame.java package com.unpam.gajiapp.view;
import com.unpam.gajiapp.controller.MainController; import com.unpam.gajiapp.view.laporan.LaporanDataKaryawanPanel; import com.unpam.gajiapp.view.laporan.LaporanPenggajianPanel; import com.unpam.gajiapp.view.laporan.LaporanPotonganPanel; import com.unpam.gajiapp.view.master.CabangPanel; import com.unpam.gajiapp.view.master.JabatanPanel; import com.unpam.gajiapp.view.master.KaryawanPanel; import com.unpam.gajiapp.view.master.TahunBukuPanel; import com.unpam.gajiapp.view.transaksi.PenggajianPanel; import com.unpam.gajiapp.view.transaksi.PotonganPanel;
public class MainFrame extends javax.swing.JFrame {
private static MainFrame instance; private MainController mainController; private CabangPanel cabangPanel; private JabatanPanel jabatanPanel; private KaryawanPanel karyawanPanel;
113
private TahunBukuPanel tahunBukuPanel; private String parameter;
private PotonganPanel potonganPanel; private PenggajianPanel penggajianPanel;
private LaporanDataKaryawanPanel laporanDataKaryawanPanel; private LaporanPenggajianPanel laporanPenggajianPanel; private LaporanPotonganPanel laporanPotonganPanel;
public MainFrame() { mainController = new MainController(this); initComponents(); instance = this; mainController.settingPanel(); setExtendedState(MAXIMIZED_BOTH); }
@SuppressWarnings("unchecked") // private void initComponents() {
114
jPanel1 = new javax.swing.JPanel(); contentViewer = new javax.swing.JPanel(); statusViewer = new javax.swing.JPanel(); jSeparator1 = new javax.swing.JSeparator(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); menuItemJabatan = new javax.swing.JMenuItem(); jMenuItem6 = new javax.swing.JMenuItem(); menuItemKaryawan = new javax.swing.JMenuItem(); jMenuItem2 = new javax.swing.JMenuItem(); jSeparator2 = new javax.swing.JPopupMenu.Separator(); jMenuItem1 = new javax.swing.JMenuItem(); jMenu2 = new javax.swing.JMenu(); jMenuItem3 = new javax.swing.JMenuItem(); jMenuItem4 = new javax.swing.JMenuItem(); jSeparator3 = new javax.swing.JPopupMenu.Separator(); jMenuItem8 = new javax.swing.JMenuItem(); jMenu3 = new javax.swing.JMenu(); jMenuItem5 = new javax.swing.JMenuItem(); jMenuItem7 = new javax.swing.JMenuItem(); jMenuItem9 = new javax.swing.JMenuItem();
115
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_ CLOSE);
javax.swing.GroupLayout
contentViewerLayout
=
new
javax.swing.GroupLayout(contentViewer); contentViewer.setLayout(contentViewerLayout); contentViewerLayout.setHorizontalGroup(
contentViewerLayout.createParallelGroup(javax.swing.GroupLayout. Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE) ); contentViewerLayout.setVerticalGroup(
contentViewerLayout.createParallelGroup(javax.swing.GroupLayout. Alignment.LEADING) .addGap(0, 214, Short.MAX_VALUE) );
javax.swing.GroupLayout
statusViewerLayout
javax.swing.GroupLayout(statusViewer); statusViewer.setLayout(statusViewerLayout); statusViewerLayout.setHorizontalGroup(
116
=
new
statusViewerLayout.createParallelGroup(javax.swing.GroupLayout.Al ignment.LEADING) .addGap(0, 0, Short.MAX_VALUE) ); statusViewerLayout.setVerticalGroup(
statusViewerLayout.createParallelGroup(javax.swing.GroupLayout.Al ignment.LEADING) .addGap(0, 35, Short.MAX_VALUE) );
javax.swing.GroupLayout
jPanel1Layout
=
new
javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addComponent(contentViewer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(statusViewer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
117
.addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE,
723,
Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(contentViewer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(0, 0, 0) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) .addComponent(statusViewer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) );
jMenu1.setText("File Master");
menuItemJabatan.setText("Data Jabatan"); 118
3,
menuItemJabatan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuItemJabatanActionPerformed(evt); } }); jMenu1.add(menuItemJabatan);
jMenuItem6.setText("Data Cabang"); jMenuItem6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem6ActionPerformed(evt); } }); jMenu1.add(jMenuItem6);
menuItemKaryawan.setText("Data Karyawan"); menuItemKaryawan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuItemKaryawanActionPerformed(evt); }
119
}); jMenu1.add(menuItemKaryawan);
jMenuItem2.setText("Tahun Buku"); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); jMenu1.add(jMenuItem2); jMenu1.add(jSeparator2);
jMenuItem1.setText("Master User"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1); 120
jMenu2.setText("Transaksi");
jMenuItem3.setText("Potongan Gaji"); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem3ActionPerformed(evt); } }); jMenu2.add(jMenuItem3);
jMenuItem4.setText("Penggajian"); jMenuItem4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem4ActionPerformed(evt); } }); jMenu2.add(jMenuItem4); jMenu2.add(jSeparator3);
jMenuItem8.setText("Tutup Tahun Buku"); 121
jMenu2.add(jMenuItem8);
jMenuBar1.add(jMenu2);
jMenu3.setText("Laporan");
jMenuItem5.setText("Laporan Data Karyawan"); jMenuItem5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem5ActionPerformed(evt); } }); jMenu3.add(jMenuItem5);
jMenuItem7.setText("Laporan Penggajian"); jMenuItem7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem7ActionPerformed(evt); } }); jMenu3.add(jMenuItem7); 122
jMenuItem9.setText("Laporan Potongan"); jMenuItem9.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem9ActionPerformed(evt); } }); jMenu3.add(jMenuItem9);
jMenuBar1.add(jMenu3);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout
layout
=
new
javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
123
); layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) );
pack(); }//
private
void
menuItemJabatanActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("jabatan"); }
private
void
menuItemKaryawanActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("karyawan"); }
124
private
void
jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: }
private
void
jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("potongan"); }
private
void
jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("penggajian"); }
private
void
jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("laporan_karyawan"); }
private
void
jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("laporan_penggajian"); } 125
private
void
jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("tahun_buku"); }
private
void
jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("cabang"); }
private
void
jMenuItem9ActionPerformed(java.awt.event.ActionEvent evt) { mainController.tampilkan("laporan_potongan"); }
// Variables declaration - do not modify private javax.swing.JPanel contentViewer; private javax.swing.JMenu jMenu1; private javax.swing.JMenu jMenu2; private javax.swing.JMenu jMenu3; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1;
126
private javax.swing.JMenuItem jMenuItem2; private javax.swing.JMenuItem jMenuItem3; private javax.swing.JMenuItem jMenuItem4; private javax.swing.JMenuItem jMenuItem5; private javax.swing.JMenuItem jMenuItem6; private javax.swing.JMenuItem jMenuItem7; private javax.swing.JMenuItem jMenuItem8; private javax.swing.JMenuItem jMenuItem9; private javax.swing.JPanel jPanel1; private javax.swing.JSeparator jSeparator1; private javax.swing.JPopupMenu.Separator jSeparator2; private javax.swing.JPopupMenu.Separator jSeparator3; private javax.swing.JMenuItem menuItemJabatan; private javax.swing.JMenuItem menuItemKaryawan; private javax.swing.JPanel statusViewer; // End of variables declaration
public static MainFrame getInstance() { return instance; }
public javax.swing.JPanel getContentViewer() {
127
return contentViewer; }
public CabangPanel getCabangPanel() { return cabangPanel; }
public void setCabangPanel(CabangPanel cabangPanel) { this.cabangPanel = cabangPanel; }
public JabatanPanel getJabatanPanel() { return jabatanPanel; }
public void setJabatanPanel(JabatanPanel jabatanPanel) { this.jabatanPanel = jabatanPanel; }
public KaryawanPanel getKaryawanPanel() { return karyawanPanel; }
128
public void setKaryawanPanel(KaryawanPanel karyawanPanel) { this.karyawanPanel = karyawanPanel; }
public PotonganPanel getPotonganPanel() { return potonganPanel; }
public void setPotonganPanel(PotonganPanel potonganPanel) { this.potonganPanel = potonganPanel; }
public TahunBukuPanel getTahunBukuPanel() { return tahunBukuPanel; }
public void setTahunBukuPanel(TahunBukuPanel tahunBukuPanel) { this.tahunBukuPanel = tahunBukuPanel; }
129
public PenggajianPanel getPenggajianPanel() { return penggajianPanel; }
public void setPenggajianPanel(PenggajianPanel penggajianPanel) { this.penggajianPanel = penggajianPanel; }
public
LaporanDataKaryawanPanel
getLaporanDataKaryawanPanel() { return laporanDataKaryawanPanel; }
public
void
setLaporanDataKaryawanPanel(LaporanDataKaryawanPanel laporanDataKaryawanPanel) { this.laporanDataKaryawanPanel = laporanDataKaryawanPanel; }
public LaporanPenggajianPanel getLaporanPenggajianPanel() { return laporanPenggajianPanel; }
130
public void setLaporanPenggajianPanel(LaporanPenggajianPanel laporanPenggajianPanel) { this.laporanPenggajianPanel = laporanPenggajianPanel; }
public LaporanPotonganPanel getLaporanPotonganPanel() { return laporanPotonganPanel; }
public
void
setLaporanPotonganPanel(LaporanPotonganPanel
laporanPotonganPanel) { this.laporanPotonganPanel = laporanPotonganPanel; }
} 6.11. LaporanDataKaryawanPanel.java package com.unpam.gajiapp.view.laporan;
import com.unpam.gajiapp.controller.LaporanKaryawanController; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
public class LaporanDataKaryawanPanel extends javax.swing.JPanel {
131
private LaporanKaryawanController laporanKaryawanController;
public LaporanDataKaryawanPanel() { laporanKaryawanController
=
new
LaporanKaryawanController(this); initComponents(); initListener(); }
private void initListener() { buttonCetak.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) { laporanKaryawanController.print(); } }); } @SuppressWarnings("unchecked") // private void initComponents() {
132
jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); buttonCetak = new javax.swing.JButton();
setBackground(new java.awt.Color(255, 255, 255));
jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel1.setText("Laporan Data Karyawan");
jLabel2.setText("Anda dapat mencetak laporan data karyawan di halaman ini");
buttonCetak.setText("Cetak Laporan");
javax.swing.GroupLayout
layout
=
new
javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addGroup(layout.createSequentialGroup() 133
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addComponent(jLabel1) .addComponent(jLabel2) .addComponent(buttonCetak, javax.swing.GroupLayout.PREFERRED_SIZE,
157,
javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(291, Short.MAX_VALUE)) ); layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
134
.addComponent(buttonCetak) .addContainerGap(290, Short.MAX_VALUE)) ); }// // Variables declaration - do not modify private javax.swing.JButton buttonCetak; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; // End of variables declaration } 6.12. KaryawanPanel.java package com.unpam.gajiapp.view.master;
import com.toedter.calendar.JDateChooser; import com.unpam.gajiapp.controller.KaryawanController; import com.unpam.gajiapp.model.KaryawanView; import com.unpam.gajiapp.swingmodel.TableModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField;
135
import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener;
public class KaryawanPanel extends javax.swing.JPanel implements ListSelectionListener {
private KaryawanController karyawanController; private TableModel tableModel; private String parameter;
public KaryawanPanel() { karyawanController = new KaryawanController(this); initComponents(); karyawanController.ambilListKaryawan(); tableView.getSelectionModel().addListSelectionListener(this); }
@SuppressWarnings("unchecked") // private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
136
tableView = new javax.swing.JTable(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); form = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); textNik = new javax.swing.JTextField(); textNama = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); textTempatLahir = new javax.swing.JTextField(); textTanggalLahir = new com.toedter.calendar.JDateChooser(); comboJenisKelamin = new javax.swing.JComboBox(); comboStatus = new javax.swing.JComboBox(); jLabel8 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); textAlamat = new javax.swing.JTextArea(); jLabel10 = new javax.swing.JLabel(); textRekening = new javax.swing.JTextField(); textTelepon = new javax.swing.JTextField();
137
jLabel12 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); textTanggalMasuk = new com.toedter.calendar.JDateChooser(); textCabang = new javax.swing.JTextField(); jLabel13 = new javax.swing.JLabel(); jLabel14 = new javax.swing.JLabel(); textJabatan = new javax.swing.JTextField(); buttonSimpan = new javax.swing.JButton(); buttonBatal = new javax.swing.JButton(); jSeparator1 = new javax.swing.JSeparator(); jToolBar1 = new javax.swing.JToolBar(); filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0)); buttonTambah = new javax.swing.JButton(); buttonHapus = new javax.swing.JButton();
setOpaque(false);
tableView.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, 138
{null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } ));
tableView.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ OFF); tableView.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tableViewMouseClicked(evt); } }); jScrollPane1.setViewportView(tableView);
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/unpam/gajiapp/i mage/cabang_64.png"))); // NOI18N
jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N
139
jLabel2.setText("DAFTAR KARYAWAN");
jLabel3.setText("Daftar karyawan yang telah terdaftar");
form.setOpaque(false);
jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel4.setText("NIK :");
jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel5.setText("Nama :");
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel6.setText("Tempat & Tanggal Lahir :");
comboJenisKelamin.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "[ Pilih ]", "LakiLaki", "Perempuan" }));
140
comboStatus.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "[ Pilih ]", "Belum Menikah", "Menikah" }));
jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel8.setText("Status :");
jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel7.setText("Jenis Kelamin :");
jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel9.setText("Alamat :");
textAlamat.setColumns(20); textAlamat.setRows(5); jScrollPane2.setViewportView(textAlamat);
141
jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel10.setText("No. Rekening :");
jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel12.setText("No. Telepon :");
jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel11.setText("Tanggal Masuk :");
textCabang.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textCabangMouseClicked(evt); } }); textCabang.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { textCabangActionPerformed(evt); 142
} });
jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel13.setText("Cabang :");
jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel14.setText("Jabatan :");
textJabatan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textJabatanMouseClicked(evt); } }); textJabatan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { textJabatanActionPerformed(evt); }
143
});
buttonSimpan.setText("Simpan"); buttonSimpan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonSimpanActionPerformed(evt); } });
buttonBatal.setText("Batal"); buttonBatal.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonBatalActionPerformed(evt); } });
javax.swing.GroupLayout javax.swing.GroupLayout(form); form.setLayout(formLayout); formLayout.setHorizontalGroup(
144
formLayout
=
new
formLayout.createParallelGroup(javax.swing.GroupLayout.Alignment. LEADING) .addGroup(formLayout.createSequentialGroup() .addContainerGap()
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING, false) .addGroup(formLayout.createSequentialGroup()
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING) .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE,
140,
javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE,
140,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING) .addComponent(textNik, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
145
113,
.addComponent(textNama))) .addGroup(formLayout.createSequentialGroup() .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE,
140,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jScrollPane2)) .addGroup(formLayout.createSequentialGroup()
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, formLayout.createSequentialGroup() .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE,
140,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(comboStatus, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, formLayout.createSequentialGroup()
146
0,
.addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE,
140,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(comboJenisKelamin,
0,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, formLayout.createSequentialGroup() .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE,
140,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textTempatLahir, javax.swing.GroupLayout.PREFERRED_SIZE,
154,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textTanggalLahir, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(20, 20, 20)
147
125,
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING) .addGroup(formLayout.createSequentialGroup() .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE,
135,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textRekening, javax.swing.GroupLayout.PREFERRED_SIZE,
164,
javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(formLayout.createSequentialGroup()
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.TRAILING) .addGroup(formLayout.createSequentialGroup() .addComponent(buttonSimpan) .addGap(3, 3, 3) .addComponent(buttonBatal))
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING) .addGroup(formLayout.createSequentialGroup()
148
.addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE,
135,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textTanggalMasuk, javax.swing.GroupLayout.PREFERRED_SIZE,
125,
javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(formLayout.createSequentialGroup() .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE,
135,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textTelepon, javax.swing.GroupLayout.PREFERRED_SIZE,
164,
javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(formLayout.createSequentialGroup() .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE,
135,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
149
.addComponent(textCabang, javax.swing.GroupLayout.PREFERRED_SIZE,
164,
javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(formLayout.createSequentialGroup() .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE,
135,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textJabatan, javax.swing.GroupLayout.PREFERRED_SIZE,
164,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) ); formLayout.setVerticalGroup(
formLayout.createParallelGroup(javax.swing.GroupLayout.Alignment. LEADING) .addGroup(formLayout.createSequentialGroup() .addContainerGap()
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE)
150
.addComponent(jLabel4) .addComponent(textNik, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE) .addComponent(jLabel5) .addComponent(textNama, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel10) .addComponent(textRekening, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
151
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE) .addComponent(jLabel6) .addComponent(textTempatLahir, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(textTanggalLahir, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE) .addComponent(jLabel12) .addComponent(textTelepon, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING) .addGroup(formLayout.createSequentialGroup()
152
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING, false) .addGroup(formLayout.createSequentialGroup()
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE) .addComponent(jLabel7) .addComponent(comboJenisKelamin))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)) .addGroup(formLayout.createSequentialGroup() .addComponent(jLabel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(6, 6, 6)))
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE) .addComponent(jLabel8) .addComponent(comboStatus, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel13)
153
.addComponent(textCabang, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addComponent(textTanggalMasuk, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING) .addComponent(jLabel9) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(formLayout.createSequentialGroup()
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE) .addComponent(jLabel14) .addComponent(textJabatan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
154
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(formLayout.createParallelGroup(javax.swing.GroupLayout .Alignment.BASELINE) .addComponent(buttonBatal) .addComponent(buttonSimpan)))) .addGap(0, 0, 0)) );
jToolBar1.setFloatable(false); jToolBar1.setRollover(true); jToolBar1.add(filler1);
buttonTambah.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/unpam/gajiapp/i mage/toolbar_add.png"))); // NOI18N buttonTambah.setText("Tambah Baru"); buttonTambah.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonTambahActionPerformed(evt); }
155
}); jToolBar1.add(buttonTambah);
buttonHapus.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/unpam/gajiapp/i mage/toolbar_delete.png"))); // NOI18N buttonHapus.setText("Hapus"); buttonHapus.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonHapusActionPerformed(evt); } }); jToolBar1.add(buttonHapus);
javax.swing.GroupLayout
layout
=
new
javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING)
156
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addGroup(layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel2))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jSeparator1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jLabel3)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jLabel1) .addContainerGap()) .addComponent(form, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
157
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addComponent(jLabel1) .addGroup(layout.createSequentialGroup() .addGap(24, 24, 24) .addComponent(jLabel2) .addGap(0, 0, 0)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addComponent(jLabel3) .addGroup(layout.createSequentialGroup() .addGap(8, 8, 8)
158
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(form, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
236,
Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) ); }//
159
@Override public void valueChanged(ListSelectionEvent e) { try { parameter
=
String.valueOf(tableView.getValueAt(tableView.getSelectedRow(), 0).toString()); } catch(Exception ex) {} }
private
void
buttonTambahActionPerformed(java.awt.event.ActionEvent evt) { if(!form.isVisible()) { form.setVisible(true); } }
private
void
buttonHapusActionPerformed(java.awt.event.ActionEvent evt) { if(parameter != null) { karyawanController.delete(parameter); } }
160
private void tableViewMouseClicked(java.awt.event.MouseEvent evt) { if(parameter != null) { if(evt.getClickCount()==2) { karyawanController.setFieldText(parameter); } } }
private void textCabangMouseClicked(java.awt.event.MouseEvent evt) {
}
private
void
textCabangActionPerformed(java.awt.event.ActionEvent evt) {
}
private void textJabatanMouseClicked(java.awt.event.MouseEvent evt) {
}
161
private
void
textJabatanActionPerformed(java.awt.event.ActionEvent evt) {
}
private
void
buttonSimpanActionPerformed(java.awt.event.ActionEvent evt) { karyawanController.simpan(); }
private
void
buttonBatalActionPerformed(java.awt.event.ActionEvent evt) { karyawanController.reset(); }
// Variables declaration - do not modify private javax.swing.JButton buttonBatal; private javax.swing.JButton buttonHapus; private javax.swing.JButton buttonSimpan; private javax.swing.JButton buttonTambah; private javax.swing.JComboBox comboJenisKelamin; private javax.swing.JComboBox comboStatus;
162
private javax.swing.Box.Filler filler1; private javax.swing.JPanel form; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JSeparator jSeparator1; private javax.swing.JToolBar jToolBar1; private javax.swing.JTable tableView; private javax.swing.JTextArea textAlamat;
163
private javax.swing.JTextField textCabang; private javax.swing.JTextField textJabatan; private javax.swing.JTextField textNama; private javax.swing.JTextField textNik; private javax.swing.JTextField textRekening; private com.toedter.calendar.JDateChooser textTanggalLahir; private com.toedter.calendar.JDateChooser textTanggalMasuk; private javax.swing.JTextField textTelepon; private javax.swing.JTextField textTempatLahir; // End of variables declaration
public TableModel getTableModel() { return tableModel; }
public
void
setTableModel(TableModel
tableModel) { this.tableModel = tableModel; }
public javax.swing.JTable getTableView() { return tableView;
164
}
public JButton getButtonBatal() { return buttonBatal; }
public JButton getButtonSimpan() { return buttonSimpan; }
public JPanel getForm() { return form; }
public String getParameter() { return parameter; }
public void setParameter(String parameter) { this.parameter = parameter; }
165
public JComboBox getComboJenisKelamin() { return comboJenisKelamin; }
public JComboBox getComboStatus() { return comboStatus; }
public JTextArea getTextAlamat() { return textAlamat; }
public JTextField getTextCabang() { return textCabang; }
public JTextField getTextJabatan() { return textJabatan; }
public JTextField getTextNama() { return textNama;
166
}
public JTextField getTextNik() { return textNik; }
public JTextField getTextRekening() { return textRekening; }
public JDateChooser getTextTanggalLahir() { return textTanggalLahir; }
public JDateChooser getTextTanggalMasuk() { return textTanggalMasuk; }
public JTextField getTextTelepon() { return textTelepon; }
167
public JTextField getTextTempatLahir() { return textTempatLahir; }
} 6.13. PenggajianDialog.java package com.unpam.gajiapp.view.transaksi;
import com.unpam.gajiapp.controller.PenggajianController; import com.unpam.gajiapp.model.DetilPendapatan; import com.unpam.gajiapp.model.DetilPendapatanView; import com.unpam.gajiapp.model.DetilPengurangan; import com.unpam.gajiapp.model.DetilPenguranganView; import com.unpam.gajiapp.model.Karyawan; import com.unpam.gajiapp.model.PotonganView; import com.unpam.gajiapp.model.Slip; import com.unpam.gajiapp.model.TahunBuku; import com.unpam.gajiapp.swingmodel.TableModel; import com.unpam.gajiapp.view.MainFrame; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTable;
168
import javax.swing.JTextField; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener;
public
class
PenggajianDialog
extends
javax.swing.JDialog
implements ListSelectionListener {
private PenggajianController penggajianController; private TahunBuku tahunBuku; private Slip slip; private Karyawan karyawan; private
TableModel
tableModelDetilPendapatan; private
TableModel
tableModelDetilPengurangan; private TableModel tableModelPotongan; private String parameter;
public PenggajianDialog(java.awt.Frame parent, boolean modal, PenggajianController penggajianController) { super(parent, modal); this.penggajianController = penggajianController; initComponents();
169
setSize(MainFrame.getInstance().getSize()); penggajianController.setPenggajianDialog(this); penggajianController.resetPenggajianDialog();
tablePotongan.getSelectionModel().addListSelectionListener(this);
}
@SuppressWarnings("unchecked") // private void initComponents() {
jPanel1 = new javax.swing.JPanel(); jSplitPane1 = new javax.swing.JSplitPane(); jPanel2 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); tablePendapatan = new javax.swing.JTable(); jLabel1 = new javax.swing.JLabel(); labelTotalPendapatan = new javax.swing.JLabel(); jLabel13 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); textTotalAbsen = new javax.swing.JTextField();
170
buttonHitungGaji = new javax.swing.JButton(); jPanel3 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); tablePengurangan = new javax.swing.JTable(); jLabel4 = new javax.swing.JLabel(); labelTotalPengurangan = new javax.swing.JLabel(); jLabel14 = new javax.swing.JLabel(); jLabel8 = new javax.swing.JLabel(); jPanel4 = new javax.swing.JPanel(); jLabel9 = new javax.swing.JLabel(); textTahunBuku = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); textKodeSlip = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); textTanggal = new com.toedter.calendar.JDateChooser(); jLabel3 = new javax.swing.JLabel(); comboBulan = new javax.swing.JComboBox(); jPanel5 = new javax.swing.JPanel(); jLabel6 = new javax.swing.JLabel(); textNikKaryawan = new javax.swing.JTextField(); jButton2 = new javax.swing.JButton(); jLabel10 = new javax.swing.JLabel();
171
jLabel11 = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel(); textNamaKaryawan = new javax.swing.JTextField(); textCabangKaryawan = new javax.swing.JTextField(); textJabatanKaryawan = new javax.swing.JTextField(); jScrollPane3 = new javax.swing.JScrollPane(); tablePotongan = new javax.swing.JTable(); labelTotalGaji = new javax.swing.JLabel(); panelBayar = new javax.swing.JPanel(); jLabel15 = new javax.swing.JLabel(); textKodePotongan = new javax.swing.JTextField(); jLabel16 = new javax.swing.JLabel(); textPotongan = new javax.swing.JTextField(); jLabel17 = new javax.swing.JLabel(); textJumlahPembayaran = new javax.swing.JTextField(); buttonBayar = new javax.swing.JButton(); jLabel18 = new javax.swing.JLabel(); textJumlahPotongan = new javax.swing.JTextField(); jLabel19 = new javax.swing.JLabel(); textSisaPotongan = new javax.swing.JTextField();
172
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ ON_CLOSE);
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT );
jPanel2.setBackground(new java.awt.Color(255, 255, 255));
tablePendapatan.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); 173
tablePendapatan.setAutoResizeMode(javax.swing.JTable.AUTO_RES IZE_OFF); jScrollPane1.setViewportView(tablePendapatan);
jLabel1.setText("TOTAL PENDAPATAN :");
labelTotalPendapatan.setText("Rp. 0,00-");
jLabel13.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel13.setText("PENDAPATAN KARYAWAN");
jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel7.setText("Total Absen :");
buttonHitungGaji.setText("Hitung Gaji"); buttonHitungGaji.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {
174
buttonHitungGajiActionPerformed(evt); } });
javax.swing.GroupLayout
jPanel2Layout
=
new
javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
648,
Short.MAX_VALUE) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
175
.addComponent(labelTotalPendapatan, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE,
206,
javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textTotalAbsen, javax.swing.GroupLayout.PREFERRED_SIZE,
128,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(buttonHitungGaji) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap())
176
); jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel13)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(textTotalAbsen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel7) .addComponent(buttonHitungGaji))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
177
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
48,
Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(labelTotalPendapatan)) .addContainerGap()) );
jSplitPane1.setLeftComponent(jPanel2);
jPanel3.setBackground(new java.awt.Color(255, 255, 255));
tablePengurangan.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null},
178
{null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } ));
tablePengurangan.setAutoResizeMode(javax.swing.JTable.AUTO_RE SIZE_OFF); jScrollPane2.setViewportView(tablePengurangan);
jLabel4.setText("TOTAL PENGURANGAN :");
labelTotalPengurangan.setText("Rp. 0,00-");
jLabel14.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel14.setText("POTONGAN KARYAWAN");
javax.swing.GroupLayout
jPanel3Layout
javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); 179
=
new
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.LEADING) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE,
648,
Short.MAX_VALUE) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(labelTotalPengurangan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE)
180
190,
.addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE,
206,
javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel14)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE,
358,
Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(jLabel4)
181
.addComponent(labelTotalPengurangan)) .addContainerGap()) );
jSplitPane1.setRightComponent(jPanel3);
jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel8.setText("TOTAL GAJI :");
jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanel4.setOpaque(false);
jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel9.setText("Tahun Buku :");
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel2.setText("Kode Slip :");
182
jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel5.setText("Tanggal :");
jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel3.setText("Bulan :");
comboBulan.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "[ Pilih ]", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" })); comboBulan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { comboBulanActionPerformed(evt); } });
javax.swing.GroupLayout
jPanel4Layout
javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout);
183
=
new
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textTahunBuku, javax.swing.GroupLayout.PREFERRED_SIZE,
149,
javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
184
.addComponent(textKodeSlip, javax.swing.GroupLayout.PREFERRED_SIZE,
149,
javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textTanggal, javax.swing.GroupLayout.PREFERRED_SIZE,
168,
javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(comboBulan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) );
185
168,
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(jLabel9) .addComponent(textTahunBuku, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(textKodeSlip, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
186
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.LEADING, false) .addComponent(textTanggal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE,
20,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(comboBulan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3)) .addContainerGap(18, Short.MAX_VALUE)) );
187
jPanel5.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanel5.setOpaque(false);
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT) ; jLabel6.setText("NIK :");
textNikKaryawan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textNikKaryawanMouseClicked(evt); } });
jButton2.setText("..."); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } });
188
jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel10.setText("Nama :");
jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel11.setText("Cabang :");
jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel12.setText("Jabatan :");
textNamaKaryawan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textNamaKaryawanMouseClicked(evt); } });
textCabangKaryawan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { 189
textCabangKaryawanMouseClicked(evt); } });
textJabatanKaryawan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textJabatanKaryawanMouseClicked(evt); } });
javax.swing.GroupLayout
jPanel5Layout
=
new
javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup()
190
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textNikKaryawan, javax.swing.GroupLayout.PREFERRED_SIZE,
96,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jButton2)) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textNamaKaryawan, javax.swing.GroupLayout.PREFERRED_SIZE,
199,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.TRAILING, false)
191
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel5Layout.createSequentialGroup() .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textJabatanKaryawan))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel5Layout.createSequentialGroup() .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textCabangKaryawan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel5Layout.setVerticalGroup(
192
131,
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(textNikKaryawan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6) .addComponent(jButton2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(jLabel10) .addComponent(textNamaKaryawan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
193
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(jLabel11) .addComponent(textCabangKaryawan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(jLabel12) .addComponent(textJabatanKaryawan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(15, Short.MAX_VALUE)) );
tablePotongan.setModel(new javax.swing.table.DefaultTableModel(
194
new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } ));
tablePotongan.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZ E_OFF); tablePotongan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tablePotonganMouseClicked(evt); } }); jScrollPane3.setViewportView(tablePotongan);
labelTotalGaji.setText("Rp. 0,00-");
195
jLabel15.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel15.setText("Kode Potongan :");
textKodePotongan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textKodePotonganMouseClicked(evt); } });
jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel16.setText("Jenis Potongan :");
textPotongan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textPotonganMouseClicked(evt); } });
196
jLabel17.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel17.setText("Sisa Potongan :");
textJumlahPembayaran.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textJumlahPembayaranMouseClicked(evt); } });
buttonBayar.setText("Bayar"); buttonBayar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonBayarActionPerformed(evt); } });
jLabel18.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel18.setText("Jumlah Potongan :");
197
textJumlahPotongan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textJumlahPotonganMouseClicked(evt); } });
jLabel19.setHorizontalAlignment(javax.swing.SwingConstants.RIGH T); jLabel19.setText("Jumlah Pembayaran :");
textSisaPotongan.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { textSisaPotonganMouseClicked(evt); } });
javax.swing.GroupLayout
panelBayarLayout
javax.swing.GroupLayout(panelBayar); panelBayar.setLayout(panelBayarLayout); panelBayarLayout.setHorizontalGroup( 198
=
new
panelBayarLayout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addGroup(panelBayarLayout.createSequentialGroup() .addContainerGap()
.addGroup(panelBayarLayout.createParallelGroup(javax.swing.Group Layout.Alignment.TRAILING) .addGroup(panelBayarLayout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(buttonBayar)) .addGroup(panelBayarLayout.createSequentialGroup()
.addGroup(panelBayarLayout.createParallelGroup(javax.swing.Group Layout.Alignment.LEADING, false)
.addGroup(panelBayarLayout.createSequentialGroup() .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE,
120,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textKodePotongan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
199
135,
.addGroup(panelBayarLayout.createSequentialGroup() .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE,
120,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(textPotongan, javax.swing.GroupLayout.PREFERRED_SIZE,
135,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panelBayarLayout.createSequentialGroup() .addComponent(jLabel18, javax.swing.GroupLayout.PREFERRED_SIZE,
120,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE) .addComponent(textJumlahPotongan, javax.swing.GroupLayout.PREFERRED_SIZE,
135,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(panelBayarLayout.createParallelGroup(javax.swing.Group Layout.Alignment.LEADING, false)
.addGroup(panelBayarLayout.createSequentialGroup()
200
.addGap(11, 11, 11) .addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE,
120,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panelBayarLayout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UN RELATED) .addComponent(jLabel19, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(panelBayarLayout.createParallelGroup(javax.swing.Group Layout.Alignment.LEADING) .addComponent(textJumlahPembayaran, javax.swing.GroupLayout.PREFERRED_SIZE,
142,
javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textSisaPotongan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(0, 0, Short.MAX_VALUE))) .addGap(17, 17, 17)) );
201
142,
panelBayarLayout.setVerticalGroup(
panelBayarLayout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addGroup(panelBayarLayout.createSequentialGroup() .addContainerGap()
.addGroup(panelBayarLayout.createParallelGroup(javax.swing.Group Layout.Alignment.BASELINE) .addComponent(jLabel15) .addComponent(textKodePotongan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(panelBayarLayout.createParallelGroup(javax.swing.Group Layout.Alignment.BASELINE) .addComponent(jLabel16) .addComponent(textPotongan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel19)
202
.addComponent(textJumlahPembayaran, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED)
.addGroup(panelBayarLayout.createParallelGroup(javax.swing.Group Layout.Alignment.BASELINE) .addComponent(jLabel17) .addComponent(jLabel18) .addComponent(textJumlahPotongan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(textSisaPotongan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(buttonBayar)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
203
);
javax.swing.GroupLayout
jPanel1Layout
=
new
javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE,
86,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(labelTotalGaji, javax.swing.GroupLayout.PREFERRED_SIZE,
190,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE
204
LATED,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)) .addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.TRAILING) .addComponent(panelBayar, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() .addGap(10, 10, 10)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.LEADING) .addComponent(jPanel5, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addGap(10, 10, 10)))
205
.addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE,
670,
javax.swing.GroupLayout.PREFERRED_SIZE)) ); jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm ent.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(11, 11, 11) .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
206
127,
.addGap(1, 1, 1) .addComponent(panelBayar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UN RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLay out.Alignment.BASELINE) .addComponent(jLabel8) .addComponent(labelTotalGaji))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(jSplitPane1, javax.swing.GroupLayout.Alignment.TRAILING) );
javax.swing.GroupLayout
layout
javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(
207
=
new
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) );
pack(); }//
@Override public void valueChanged(ListSelectionEvent e) { try { parameter
=
String.valueOf(tablePotongan.getValueAt(tablePotongan.getSelectedR ow(), 0).toString());
208
penggajianController.tampilkanPotonganKeLayar(parameter); } catch(Exception ex) {} }
private
void
textNikKaryawanMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: }
private
void
textNamaKaryawanMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: }
private
void
textCabangKaryawanMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: }
private
void
textJabatanKaryawanMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: }
209
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { penggajianController.cariKaryawan(textNikKaryawan.getText()); }
private
void
comboBulanActionPerformed(java.awt.event.ActionEvent evt) { penggajianController.setKodeSlip(); }
private
void
buttonHitungGajiActionPerformed(java.awt.event.ActionEvent evt) { penggajianController.simpanSlip(); }
private
void
textKodePotonganMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: }
private
void
textPotonganMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: 210
}
private
void
textJumlahPembayaranMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: }
private
void
tablePotonganMouseClicked(java.awt.event.MouseEvent evt) {
}
private
void
textJumlahPotonganMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: }
private
void
textSisaPotonganMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: }
211
private
void
buttonBayarActionPerformed(java.awt.event.ActionEvent evt) { penggajianController.potongGaji(textKodePotongan.getText()); }
// Variables declaration - do not modify private javax.swing.JButton buttonBayar; private javax.swing.JButton buttonHitungGaji; private javax.swing.JComboBox comboBulan; private javax.swing.JButton jButton2; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel17; private javax.swing.JLabel jLabel18; private javax.swing.JLabel jLabel19; private javax.swing.JLabel jLabel2;
212
private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JSplitPane jSplitPane1; private javax.swing.JLabel labelTotalGaji; private javax.swing.JLabel labelTotalPendapatan; private javax.swing.JLabel labelTotalPengurangan; private javax.swing.JPanel panelBayar; private javax.swing.JTable tablePendapatan; private javax.swing.JTable tablePengurangan;
213
private javax.swing.JTable tablePotongan; private javax.swing.JTextField textCabangKaryawan; private javax.swing.JTextField textJabatanKaryawan; private javax.swing.JTextField textJumlahPembayaran; private javax.swing.JTextField textJumlahPotongan; private javax.swing.JTextField textKodePotongan; private javax.swing.JTextField textKodeSlip; private javax.swing.JTextField textNamaKaryawan; private javax.swing.JTextField textNikKaryawan; private javax.swing.JTextField textPotongan; private javax.swing.JTextField textSisaPotongan; private javax.swing.JTextField textTahunBuku; private com.toedter.calendar.JDateChooser textTanggal; private javax.swing.JTextField textTotalAbsen; // End of variables declaration
public javax.swing.JComboBox getComboBulan() { return comboBulan; }
public javax.swing.JLabel getLabelTotalGaji() { return labelTotalGaji;
214
}
public javax.swing.JLabel getLabelTotalPendapatan() { return labelTotalPendapatan; }
public javax.swing.JLabel getLabelTotalPengurangan() { return labelTotalPengurangan; }
public javax.swing.JTable getTablePendapatan() { return tablePendapatan; }
public javax.swing.JTable getTablePengurangan() { return tablePengurangan; }
public JTextField getTextCabangKaryawan() { return textCabangKaryawan; }
215
public JTextField getTextJabatanKaryawan() { return textJabatanKaryawan; }
public JTextField getTextNamaKaryawan() { return textNamaKaryawan; }
public JTextField getTextNikKaryawan() { return textNikKaryawan; }
public JTextField getTextTahunBuku() { return textTahunBuku; }
public javax.swing.JTextField getTextKodeSlip() { return textKodeSlip; }
public com.toedter.calendar.JDateChooser getTextTanggal() { return textTanggal;
216
}
public javax.swing.JTextField getTextTotalAbsen() { return textTotalAbsen; }
public TahunBuku getTahunBuku() { return tahunBuku; }
public void setTahunBuku(TahunBuku tahunBuku) { this.tahunBuku = tahunBuku; }
public Karyawan getKaryawan() { return karyawan; }
public void setKaryawan(Karyawan karyawan) { this.karyawan = karyawan; }
217
public Slip getSlip() { return slip; }
public void setSlip(Slip slip) { this.slip = slip; }
public
TableModel
getTableModelDetilPendapatan() { return tableModelDetilPendapatan; }
public
void
setTableModelDetilPendapatan(TableModel tableModelDetilPendapatan) { this.tableModelDetilPendapatan = tableModelDetilPendapatan; }
public
TableModel
getTableModelDetilPengurangan() { return tableModelDetilPengurangan; }
218
public
void
setTableModelDetilPengurangan(TableModel tableModelDetilPengurangan) { this.tableModelDetilPengurangan
=
tableModelDetilPengurangan; }
public TableModel getTableModelPotongan() { return tableModelPotongan; }
public void setTableModelPotongan(TableModel tableModelPotongan) { this.tableModelPotongan = tableModelPotongan; }
public JTable getTablePotongan() { return tablePotongan; }
public JTextField getTextJumlahPembayaran() { return textJumlahPembayaran;
219
}
public JTextField getTextKodePotongan() { return textKodePotongan; }
public JTextField getTextPotongan() { return textPotongan; }
public JTextField getTextJumlahPotongan() { return textJumlahPotongan; }
public JTextField getTextSisaPotongan() { return textSisaPotongan; }
public JButton getButtonBayar() { return buttonBayar; }
220
public JButton getButtonHitungGaji() { return buttonHitungGaji; }
public JPanel getPanelBayar() { return panelBayar; }
} 6.14. PenggajianPanel.java package com.unpam.gajiapp.view.transaksi;
import com.unpam.gajiapp.controller.PenggajianController; import com.unpam.gajiapp.model.SlipView; import com.unpam.gajiapp.swingmodel.TableModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener;
public class PenggajianPanel extends javax.swing.JPanel implements ListSelectionListener {
private PenggajianController penggajianController; private TableModel tableModel; 221
private String parameter;
public PenggajianPanel() { penggajianController = new PenggajianController(this); initComponents(); penggajianController.ambilListPenggajian(); tableView.getSelectionModel().addListSelectionListener(this); }
@SuppressWarnings("unchecked") // private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane(); tableView = new javax.swing.JTable(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jSeparator1 = new javax.swing.JSeparator(); jToolBar1 = new javax.swing.JToolBar(); filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0)); 222
buttonTambah = new javax.swing.JButton(); buttonHapus = new javax.swing.JButton();
setOpaque(false);
tableView.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } ));
tableView.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ OFF); tableView.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tableViewMouseClicked(evt);
223
} }); jScrollPane1.setViewportView(tableView);
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/unpam/gajiapp/i mage/cabang_64.png"))); // NOI18N
jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel2.setText("PENGGAJIAN KARYAWAN");
jLabel3.setText("Daftar
penggajian
karyawan
yang
telah
dibayarkan");
jToolBar1.setFloatable(false); jToolBar1.setRollover(true); jToolBar1.add(filler1);
buttonTambah.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/unpam/gajiapp/i mage/toolbar_add.png"))); // NOI18N buttonTambah.setText("Tambah Baru");
224
buttonTambah.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonTambahActionPerformed(evt); } }); jToolBar1.add(buttonTambah);
buttonHapus.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/unpam/gajiapp/i mage/toolbar_delete.png"))); // NOI18N buttonHapus.setText("Hapus"); buttonHapus.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { buttonHapusActionPerformed(evt); } }); jToolBar1.add(buttonHapus);
javax.swing.GroupLayout javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( 225
layout
=
new
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE,
772,
Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addGroup(layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel2))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jSeparator1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jLabel3)))
226
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE LATED) .addComponent(jLabel1) .addContainerGap()) .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addComponent(jLabel1) .addGroup(layout.createSequentialGroup() .addGap(24, 24, 24) .addComponent(jLabel2) .addGap(0, 0, 0)
227
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alig nment.LEADING) .addComponent(jLabel3) .addGroup(layout.createSequentialGroup() .addGap(8, 8, 8) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))) .addGap(0, 0, 0) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(0, 0, 0) .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) ); }//
@Override public void valueChanged(ListSelectionEvent e) { try {
228
223,
parameter
=
String.valueOf(tableView.getValueAt(tableView.getSelectedRow(), 0).toString()); } catch(Exception ex) {} }
private
void
buttonTambahActionPerformed(java.awt.event.ActionEvent evt) { new
PenggajianDialog(null,
true,
penggajianController).setVisible(true); }
private
void
buttonHapusActionPerformed(java.awt.event.ActionEvent evt) { if(parameter != null) { penggajianController.delete(parameter); } }
private void tableViewMouseClicked(java.awt.event.MouseEvent evt) { if(parameter != null) { if(evt.getClickCount()==2) { penggajianController.setFieldText(parameter);
229
} } }
// Variables declaration - do not modify private javax.swing.JButton buttonHapus; private javax.swing.JButton buttonTambah; private javax.swing.Box.Filler filler1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JSeparator jSeparator1; private javax.swing.JToolBar jToolBar1; private javax.swing.JTable tableView; // End of variables declaration
public TableModel getTableModel() { return tableModel; }
public void setTableModel(TableModel tableModel) {
230
this.tableModel = tableModel; }
public javax.swing.JTable getTableView() { return tableView; }
public String getParameter() { return parameter; }
public void setParameter(String parameter) { this.parameter = parameter; }
}
231