1 TUGAS AKHIR IMPLEMENTASI FUZZY QUERY PADA DATABASE PEREKOMENDASIAN PENERIMAAN PEGAWAI Disusun Oleh: YAHYA ERDIPASA 2001 012 0056 JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS MUHAMMADIYAH YOGYAKARTA 2009 2 TUGAS AKHIR IMPLEMENTASI FUZZY QUERY PADA DATABASE PEREKOMENDASIAN PENERIMAAN PEGAWAI Diajukan sebagai salah satu syarat mendapatkan gelar Sarjana Teknik Program S-1 pada Fakultas Teknik Jurusan Teknik Elektro Universitas Muhammadiyah Yogyakarta. Disusun oleh : YAHYA ERDIPASA 2001 012 0056 JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS MUHAMMADIYAH YOGYAKARTA 2009 3 HALAMAN PENGESAHAN I TUGAS AKHIR IMPLEMENTASI FUZZY QUERY PADA DATABASE PEREKOMENDASIAN PENERIMAAN PEGAWAI Disusun oleh : YAHYA ERDIPASA 2001 012 0056 Telah diperiksa dan disetujui : Dosen Pembimbing Utama Dosen Pembimbing Muda (Ir. Tony K. Hariadi, M.T.) (Rahmat A. Al Hasibi, S.T.) 4 HALAMAN PENGESAHAN II IMPLEMENTASI FUZZY QUERY PADA DATABASE PEREKOMENDASIAN PENERIMAAN PEGAWAI Skripsi ini telah dipertahankan dan disahkan di depan dewan penguji pada tanggal 05 Januari 2009 Dosen Penguji : Ir. Tony K. Hariadi, M.T. (Ketua Penguji / Pembimbing Utama) (...........................................) tanggal : Rahmat A. Al Hasibi, S.T. (Penguji Anggota / Pembimbing Muda) (...........................................) tanggal : Haris Setyawan, S.T. (Penguji Anggota) (...........................................) tanggal : Helman Muhammad, S.T., M.T. (Penguji Anggota) (...........................................) tanggal : Menyetujui, Ketua Jurusan Teknik Elektro Universitas Muhammadiyah Yogyakarta ( Ir. Slamet Suripto ) 5 HALAMAN PERNYATAAN Semua yang tertulis dalam naskah skripsi ini adalah benar-benar merupakan hasil karya saya sendiri dan atau bukan menjiplak hasil karya orang lain, kecuali yang secara tertulis dijadikan acuan dalam penulisan naskah ini dan disebutkan dalam daftar pustaka. Apabila dikemudian hari terbukti pernyataan ini tidak benar, maka saya siap menerima sangsi dari Universitas Muhammadiyah Yogyakarta sesuai dengan peraturan yang berlaku. Yogyakarta, 17 Januari 2009 Yang Menyatakan Yahya Erdipasa 6 HALAMAN PERSEMBAHAN Kupersembahkan Skripsi ini untuk • Allah SWT yang telah memberikan keimanan, keikhlasan, kesabaran serta telah membukakan pintu ilmu pengetahuan kepada hamba-Nya. • Nabi Muhammad SAW... terima kasih untukmu ya Rasulullah, Manusia terbaik yang pernah ada di Dunia, pembawa Cahaya dan penghilang Kegelapan bagi seluruh umat manusia. Maafkanlah ya Rasulullah jika belum bisa menjalankan sunnahMu sepenuhnya. • Orang tuaku, adikku terima kasih atas Kasih sayang yang diberikan, kesabaran dan doa kalian membuatku bisa bersyukur. Aku bangga dan bersyukur bisa HIDUP diantara kalian. • Siang dan Malam. Terima kasih telah setia menemaniku selama 24 tahun. Seluruh-saudara seimanku... Teruslah berjuang untuk ISLAM karena mundur adalah • sebuah Penghianatan Almamaterku Jurusan Teknik Elektro, Fakultas Teknik Universitas Muhammadiyah • Yogyakarta • Kepada orang-orang yang dengan ikhlas memberikan kasih sayang dan kebaikannya kepada ku selama ini. Semoga menjadi kenangan yang indah dan tak terlupakan. Amien Ya Rabbal ‘Aalamien......... 7 HALAMAN MOTTO Setiap Manusia dilahirkan orisinil (dalam keadaan fitrah), jangan jangan mati sebagai salinan (stereotype)! (stereotype)! (Adaptasi dari John L. Mason) 8 KATA PENGANTAR Assalaa Assalaamu’alaikum Wr. Wb. Alhamdulillah, puji syukur penulis panjatkan kehadirat Allah SWT yang telah memberikan kenikmatan berupa nikmat hidup, nikmat iman, nikmat Islam, nikmat akal, serta nikmat-nikmat lainnya yang tak pernah terbatas kepada penulis sehingga penulis dapat menyelesaikan laporan skripsi berjudul “Implementasi Fuzzy Query Pada Database Perekomendasian Penerimaan Pegawai” ini dengan baik. Laporan Skripsi ini diselesaikan guna memenuhi persyaratan mendapatkan gelar Strata 1 (S1) yang telah ditetapkan oleh Fakultas Teknik Elektro Universitas Muhammadiyah Yogyakarta. Penulis menyadari terselesaikannya laporan ini tidak terlepas dari dukungan, bantuan, bimbingan, serta saran-saran yang berharga dari semua pihak. Oleh karena itu dengan tulus hati penulis ingin mengucapkan terimakasih kepada : 1. Ir. Tony K. Hariadi, M.T. selaku Dekan Fakultas Teknik Universitas Muhammadiyah Yogyakarta dan selaku Dosen Pembimbing Utama yang telah memberikan kemampuan terbaiknya dalam membimbing dan mengarahkan selama pelaksanakan penelitian sampai penulis menyelesaikan skripsi ini. 9 2. Ir. Slamet Suripto selaku Ketua Jurusan Teknik Elektro Universitas Muhammadiyah Yogyakarta. 3. Slamet Riyadi, S.T. selaku Dosen Pembimbing Akademik yang telah membantu penulis dalam merencanakan target studi perkuliahan. 4. Rahmat A. Al Hasibi, S.T. selaku Dosen Pembimbing Muda yang telah memberikan kemampuan terbaiknya dalam membimbing dan mengarahkan selama pelaksanakan penelitian sampai penulis menyelesaikan skripsi ini. 5. Haris Setyawan, S.T. dan Helman Muhammad, S.T., M.T. selaku dosen penguji, terimakasih atas kritik, saran serta spirit yang telah diberikan saat pendadaran. 6. Semua Dosen Jurusan Teknik Elektro Universitas Muhammadiyah Yogyakarta yang telah menjadi tempat bertukar fikiran dan informasi banyak hal tentang dunia keelektroan. 7. Karyawan Tata Usaha (TU) Jurusan Teknik Elektro Universitas Muhammadiyah Yogyakarta yang telah membantu kelancaran administrasi. 8. Seluruh staf biro, karyawan perpustakaan, dan bank rujukan Universitas Muhammadiyah Yogyakarta. 9. Kedua orang tuaku terutama untuk alm. papah yang telah mengorbankan segalanya demi anakmu tercinta. Maafkan bila anakmu ini belum bisa berbakti sepenuhnya. Mamah maafin anakmu ya yang sering membuat mamah kecewa baik secara sengaja maupun tidak. 10 10. Adikku Irra, tetap semangat dan rajin belajar, mudah-mudahan apa yang kamu cita-citakan bisa tercapai. Amin. Kuliahnya jangan lama-lama ya? Jangan tiru Abangmu ini. 11. Keluarga baruku pa Muksidi beserta anak-anaknya maafkan klo dirasa sikap saya selama ini di nilai kurang akrab dengan kalian, bukannya apa-apa, soalnya pulang ke Cerbon aja klo pas lebaran tok. 12. Sahabat-sahabatku Elliana, S.PdI. kapan baby mu lahir? Dah berapa bulan usia kandunganmu sekarang? Topik dan Abie buruan susul gue, masa pengen jadi mahasiswa terus-terusan, dr. Efi selamet ya sekarang dah jadi dokter beneran, tetaplah berpihak kepada rakyat kecil. 13. Teman-teman seperjuangan di Ikatan Mahasiswa Muhammadiyah Cabang A. R. Fakhruddin periode 2004/2005, Immawan Fauzi SIP., Immawan Nurdin S.H., Immawati Rita S.P., Immawan Hijrah, Immawan Tanto SIP, Immawan Mujib S.E., Immawati Ning S.PdI., Immawan Heri, Immawan Alwi SIP, Immawan Izal, Immawan Herman S.T., Immawati Ai S.PdI., kemana kalian semua, koq ‘ga da kabar ya? 14. Teman-teman seperjuangan di Korps Instruktur Ikatan Mahasiswa Muhammadiyah Cabang A. R. Fakhruddin angkatan pertama makasih dah mau memfasilitasi kami di setiap pelatihan, angkatan kedua yang dah samasama berjuang guna kemajuan perkaderan IMM di cabang kita, angkatan ketiga dan keempat maafin ya klo ada kesalahan dalam memfasilitasi pelatihan kalian. 11 15. Teman-teman seperjuangan di Ikatan Mahasiswa Muhammadiyah Kordinator Komisariat UMY periode 2003/2004 Immawan kang Iman SIP, Immawan Kak Romi SIP, Immawati Iis S.E., Immawan Okta SIP., Immawan Saptio S.P., Immawati Erlia S.Kep. gimana klo kita nostalgia lagi ke Bali kayanya enak nich. 16. Teman-teman seperjuangan di Ikatan Mahasiswa Muhammadiyah Komisariat Fakultas Teknik UMY periode 2003/2003 Immawan Alzi dan Febri kapan lulus dab! Dang ketuekan, Reno n Salman gimana kabarmu?Ipul, S.T. makasih dah mau memuji skaligus mengkritik aku. Makasih dah bersama-sama mengibarkan kembali panji IMM di Fakultas Teknik. Semoga perjuangan kita semua mendapat balasan yang selayaknya disisi Tuhan. 17. Immawan dan Immawati di seluruh Indonesia maafin klo saya pernah berbuat salah baik yang sengaja maupun yang tidak dalam aktifitas pertemuan kita. 18. Temen-temen seperjuangan di Keluarga Mahasiswa Teknik Eleketro Universitas Muhammadiyah Yogyakarta periode 2002 - 2003. Dah pada jadi S.T. semua blom, heheheheh...... 19. Teman-teman seperjuangan di PKO Muhammadiyah makasih dah menjadikan saya partner kerja yang baik bagi kalian. 12 20. Alm. Pak Yasir, Pa Bambang Wahyu, terima kasih atas sharing infonya tentang kepemanduan training. Buat pak Sugeng terima kasih rumahnya dah mo dijadiin basecamp instruktur. 21. Tio, Deka, Parman, Sobar S.Ei terima kasih atas pinjeman notebooknya, klo ga ada kalian aku ga kan dapet bahan-bahan buat tugas akhir kayaknya. 22. Semua temen-temen elektro angkatan 2001 kelas A, B, dan paralel malam juga 2002 ke atas. Lanjutkan perjuangan, semoga sukses menyertai kita semua, Amin. Novriandi S.T. makasih atas masukan-masukannya selama ini, Arif “The Bill” Marsudi terima kasih dah bantu2 nyiapin peralatan pendadaran (mbok cepet pendadaran biar gentian aku yang nyiapin alat2 mu, piss). Muh. Yamin S.T. kapan mo lulus S2 klo betah di kampung 23. Kost Boyz ( Ibu Kost, Bapak Kost, Alvan “Ahmad” gimana TA mu, mbok ya di garap jangan main zoo tycon ma CS mulu, Deka “Decca” ntar kmu ngisi di acara wisudaku ya, Ferdi “Autis” klo nyanyi jangan keras-keras donk soalnya suaramu kan pas-pasan, Wanto “Robusta” masa cuma bisa nerbitin satu judul buku, piye jal, Yudis “Anugroz” jangan nge game aja yang digedein ya, Tio gimana FM nya klo dah jago bilang ya?, Koko katanya mo nyusul? Apa bareng alvan aja?) keep the spirit n jaga kekompakan ... Thanks n Love u all. 24. Eks Kost Boyz (Feri, Adit Tea, Agung) jangan lupa sama kostan ya? Adit, Ari, Mia tetaplah jadi wanita yang perkasa. 13 25. Temen-temen di Hyem Magazine, maafin klo beberapa minggu ini saya ga bisa bantu ngereview, maklum lagi getol ngerjain TA. 26. Temen-temen Jarimulia, CD driver printerku balikin dong, kan acaranya dah selesai. Oh ya, sekalian aku minta dokumentasi acarnya donk. 27. Innanaz S.T. makasih ya dah mo jadi temen sharing tentang delphi, Wawan “Cilacap” S.T. gimana dah dapet kerja blom? Klo blom jangan nge game aja bro. 28. Semua pihak yang telah membantu baik secara langsung maupun tidak lansung dalam penulisan laporan ini. Semoga amal dan kebaikan yang telah diberikan kepada penulis mendapat balasan yang setimpal, dan semoga laporan ini dapat bermanfaat bagi kita semua, Amin. Yogyakarta, 17 Januari 2009 PENULIS 14 DAFTAR ISI HALAMAN PEGESAHAN I............................................................................ iii HALAMAN PENGESAHAN II........................................................................ iv HALAMAN PERNYATAAN........................................................................... v HALAMAN PERSEMBAHAN........................................................................ vi HALAMAN MOTTO........................................................................................ vii KATA PENGENTAR........................................................................................ viii DAFTAR ISI....................................................................................................... xiv DAFTAR GAMBAR.......................................................................................... xvii DAFTAR TABEL............................................................................................... xx BAB I. BAB II. PENDAHULUAN............................................................................ 1 A. Latar Belakang Masalah................................................................ 1 B. Rumusan Masalah......................................................................... 3 C. Tujuan........................................................................................... 3 D. Kontribusi...................................................................................... 4 TINJAUAN PUSTAKA................................................................... 5 A. Logika Fuzzy................................................................................. 5 1. Pendahuluan............................................................................. 5 2. Perbedaan Himpunan Fuzzy Dengan Himpunan Pasti (Crisp)........................................................................................... 7 3. Beberapa Hal yang Perlu Diketahui Dalam Sistem Fuzzy.......... 9 15 4. Fungsi Keanggotaan.................................................................... 11 5. Operator Dasar Zadeh untuk Operasi Himpunan Fuzzy............. 19 B. Database........................................................................................... 20 1. Pengertian Database.................................................................. 20 2. Database Relasional.................................................................. 21 3. Structured Query Language (SQL)............................................. 22 C. Teknik untuk Mengimplementasikan Fuzziness ke Dalam Database............................................................................................ 26 1. Fuzzy Query Database............................................................... 26 2. Fuzzy Database.......................................................................... 30 BAB III. METODOLOGI............................................................................... 37 A. Prosedur Perancangan................................................................... 37 B. Analisa Kebutuhan........................................................................ 37 C. Spesifikasi..................................................................................... 39 D. Perancangan Database dan Sistem............................................... 40 1. Perancangan Database............................................................. 40 2. Perancangan Sistem.................................................................. 44 3. Proses Penghitungan Firestrength............................................ 51 4. Pembuatan Graphical User Interface (GUI)............................ 53 E. Verifikasi...................................................................................... 68 F. Validasi......................................................................................... 68 16 BAB IV. IMPLEMENTASI DAN PENGUJIAN........................................ 70 A. Perangkat Lunak................................................................................ 70 1. Implementasi Perangkat Lunak.................................................... 70 2. Analisa Penghitungan Fungsi Keanggotaan Fuzzy..................... 80 3. Analisa Penghitungan Firestrength.......................................... 88 4. Perbandingan Hasil Penghitungan Sistem Lama Dengan BAB V. Sistem Baru.............................................................................. 91 KESIMPULAN DAN DISKUSI...................................................... 95 A. Kesimpulan................................................................................... 95 B. Diskusi.......................................................................................... 95 DAFTAR PUSTAKA......................................................................................... LAMPIRAN........................................................................................................ 17 DAFTAR GAMBAR Gambar 2.1 Himpunan Muda, Parobaya, dan Tua................................................ 7 Gambar 2.2 Himpunan Fuzzy untuk Variabel Umur............................................. 8 Gambar 2.3 Representasi Linear Naik................................................................... 12 Gambar 2.4 Representasi Linear Turun................................................................. 13 Gambar 2.5 Representasi Kurva Segitiga............................................................... 13 Gambar 2.6 Representasi Kurva Trapesium............................................................ 14 Gambar 2.7 Representasi Kurva Bahu..................................................................... 15 Gambar 2.8 Karakteristik Fungsi Kurva S-Pertumbuhan...................................... 16 Gambar 2.9 Karakteristik Fungsi Kurva S-Penyusutan........................................... 17 Gambar 2.10 Karakteristik Fungsional Kurva π....................................................... 18 Gambar 2.11 Karakteristik Fungsional Kurva β....................................................... 18 Gambar 2.12 Karakteristik Fungsional Kurva Gauss............................................... 19 Gambar 2.13 Pengolahan Data Menjadi Informasi................................................... 21 Gambar 3.1 Prosedur Perancangan...................................................................... 37 Gambar 3.2 Perancangan Database..................................................................... 43 Gambar 3.3 Perancangan Sistem.......................................................................... 44 Gambar 3.4 Diagram Konteks Sistem.................................................................. 45 Gambar 3.5 Diagram Peninjauan......................................................................... 46 Gambar 3.6 Detail Diagram Level 1, Proses 2..................................................... 48 Gambar 3.7 Detail Diagram Level 1, Proses 3..................................................... 49 18 Gambar 3.8 Tampilan Menu Utama......................................................................... 54 Gambar 3.9 Tampilan dari Tab Data Pelamar.......................................................... 55 Gambar 3.10 Tampilan Frame Data Pelamar Tambah Data.................................... 56 Gambar 3.11 Tampilan Frame Data Pelamar Edit Data........................................... 57 Gambar 3.12 Tampilan Frame Data Pelamar Hapus Data....................................... 58 Gambar 3.13 Tampilan dari Tab Jenis Tes.............................................................. 59 Gambar 3.14 Tampilan Frame Tambah Jenis Tes................................................... 60 Gambar 3.15 Tampilan Frame Edit Jenis Tes.......................................................... 61 Gambar 3.16 Tampilan Frame Hapus Jenis Tes...................................................... 62 Gambar 3.17 Tampilan Frame Tambah Kriteria...................................................... 63 Gambar 3.18 Tampilan Frame Edit Kriteria............................................................. 64 Gambar 3.19 Tampilan Frame Hapus Kriteria......................................................... 65 Gambar 3.20 Tampilan Frame Ok Pada Tab Input Nilai......................................... 66 Gambar 3.21 Tampilan Frame Hasil Nilai............................................................... 67 Gambar 3.22 Tampilan Frame Seleksi Pelamar....................................................... 68 Gambar 4.1 Tabel Data Pelamar............................................................................... 70 Gambar 4.4 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Kopetensi................................................................................. 71 Gambar 4.5 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Wawancara.............................................................................. 72 Gambar 4.6 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Kremlin Cukup........................................................................ 73 19 Gambar 4.7 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Kremlin Baik........................................................................... 73 Gambar 4.8 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Kremlin Topskor...................................................................... 74 Gambar 4.9 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Magang........................................................................................... 75 Gambar 4.10 Tabel Input Nilai.............................................................................. 76 Gambar 4.13 Tabel Hasil....................................................................................... 77 Gambar 4.16 Frame Seleksi Pelamar.................................................................... 79 Gambar 4.17. Diagram Alir Cara Kerja Sistem..................................................... 80 Gambar 4.18 Hasil Seleksi Dengan Mengubah Kategori Kremlin Menjadi Topskor................................................................................................................... 94 20 DAFTAR TABEL Tabel 2.1 Tabel Biodata Karyawan...................................................................... 32 Tabel 3.1 Tabel Pelamar........................................................................................ 40 Tabel 3.2 Tabel Jenistes........................................................................................ 41 Tabel 3.3 Tabel Kriteria........................................................................................ 41 Tabel 3.4 Tabel Nilai............................................................................................. 42 Tabel 3.5 Tabel Result.......................................................................................... 42 Tabel 4.1 Tabel 25 Teratas Hasil Pembobotan Nilai............................................ 92 21 BAB I PENDAHULUAN A. Latar Belakang Masalah Pada proses untuk menentukan atau mencari pegawai yang layak untuk mengisi posisi yang tersedia, tentunya setiap perusahaan memiliki kriteria-kriteria tertentu untuk menyaring mereka, salah satunya adalah dengan tahapan-tahapan tes yang diselenggarakan oleh perusahaan tersebut. Dalam kenyataannya sering kita jumpai perusahaan membuka kesempatan kerja untuk mengisi bermacam-macam posisi yang mereka butuhkan dalam satu periode penerimaan. P.T. BAT Indonesia Tbk. Cirebon merupakan salah satu dari sekian banyak perusahaan nasional yang berkedudukan di kota Cirebon yang diminati oleh para pencari kerja untuk dapat bergabung di perusahaan tersebut. Hal ini cukup beralasan karena perusahaan yang bergerak di bidang industri rokok khususnya rokok putih ini setiap periodenya memberikan kesempatan kerja khususnya kepada putra daerah yang memiliki prestasi untuk ditempatkan pada perusahaan dan anak perusahaannya di samping upah yang diberikan terbilang tinggi dibandingkan perusahaan-perusahaan lain yang ada di kota Cirebon dan sekitarnya. Berdasarkan pengamatan yang dilakukan oleh pihak HRD P.T. BAT Indonesia Tbk. setiap tahunnya ada sekitar 70-an pelamar kerja yang mencoba mencari peruntungan di 22 perusahaan tersebut, padahal perusahaan setiap tahunnya hanya membutuhkan sekitar 5 sampai 10 orang tenaga baru. Mengingat banyaknya antusiasme para pencari kerja, juga kebutuhan perusahaan atas sumber daya manusia yang berkualitas, maka diperlukan suatu sistem penseleksian bagi pegawai baru agar nantinya perusahaan dapat menemukan dan menempatkan mereka pada posisi yang semestinya. Salah satunya adalah dengan membuat sebuah sistem database yang dapat mengerjakan proses penseleksian para pelamar kerja agar dapat ditemukan orang yang tepat untuk ditempatkan pada posisi tertentu dengan kriteriakriteria tes dan persyaratan lainnya yang telah ditetapkan. Database yang ada pada perusahaan saat ini adalah database yang hanya memuat data biografi pelamar kerja beserta data-data hasil tes yang diselenggarakan oleh perusahaan. Permasalahan yang timbul adalah ketika pihak HRD harus menentukan siapa saja dari mereka yang dinyatakan layak untuk mengisi posisi yang tersedia dengan merujuk pada hasil tes yang terdiri dari beberapa parameter tes yang telah distandardkan oleh perusahaan. Ambil contoh perusahaan membutuhkan lima orang untuk menempati posisi sebagai electrician dengan beberapa tes serta persyaratan yang harus dipenuhi (tes kompetensi, tes wawancara, tes kreaplin, serta magang), kemudian HRD melakukan proses penseleksian sesuai dengan kriteria yang telah ditentukan perusahaan (tes kompetensi baik, tes wawancara baik, tes kreaplin cukup, serta nilai magang baik). Kesulitan akan timbul ketika pihak 23 HRD harus mencari orang-orang yang memenuhi kriteria yang di maksud, padahal database yang ada hanya memuat nilai hasil tes yang merupakan data bersifat data pasti (crisp) yang hanya memiliki dua keadaan: lulus dan tidak, sedangkan data kriteria yang diinginkan merupakan data yang terdiri dari beberapa parameter keadaan seperti lulus dengan nilai sangat baik, baik serta cukup. Oleh karena itu, untuk menangani kriteria-kriteria yang memiliki nilai data yang tidak pasti atau samar, dapat menggunakan logika fuzzy sebagai solusi pemecahannya. Pada proses mencari pelamar kerja yang dapat direkomendasikan mengisi posisi yang tersedia, logika fuzzy dimasukkan kedalam query. B. Rumusan Masalah Permasalahan yang di bahas dalam tugas akhir ini adalah sebagai berikut: 1. Bagaimana memasukkan logika fuzzy kedalam query. 2. Bagaimana menentukan seberapa layak seorang pelamar kerja untuk dapat direkomendasikan mengisi posisi yang tersedia berdasarkan kriteriakriteria yang dimasukkan. C. Tujuan Tujuan dari tugas akhir ini adalah menerapkan logika fuzzy dalam query untuk melakukan proses penseleksian dalam memilih pelamar kerja yang layak direkomendasikan untuk mengisi posisi yang tersedia. 24 D. Kontribusi Database yang di buat diharapkan dapat mempermudah kerja bagian Human and Resource Department (HRD) khususnya dalam menentukan siapa saja para pelamar kerja yang dapat mengisi posisi yang tersedia di dalam sebuah perusahaan atau institusi. 25 BAB II TINJAUAN PUSTAKA A. Logika Fuzzy 1. Pendahuluan Titik awal dari konsep modern mengenai ketidakpastian (fuzzy) adalah makalah yang di buat oleh Lofti A. Zadeh, di mana Zadeh memperkenalkan teori yang memiliki obyek-obyek dari himpunan fuzzy yang memiliki batasan yang tidak presisi dan keanggotaan dalam himpunan fuzzy dan bukan dalam bentuk logika benar (true) atau salah (false), tetapi dinyatakan dalam derajat (degree). Konsep seperti ini di sebut dengan Fuzziness dan teorinya dinamakan Fuzzy Set Theory. Logika fuzzy (Fuzziness) dapat didefinisikan sebagai logika kabur berkenaan dengan semantik dari suatu kejadian, fenomena, atau pernyataan itu sendiri. Seringkali fenomena tersebut ditemukan dalam pernyataan yang di buat oleh seseorang, evaluasi, dan pengambilan suatu keputusan. Sebagai contoh: a. Manajer pergudangan mengatakan pada manajer produksi seberapa banyak persediaan barang pada akhir minggu ini, kemudian manajer produksi ingin menetapkan jumlah barang yang harus di produksi esok hari. 26 b. Pelayan restoran memberikan pelayanan terhadap tamu, kemudian tamu ingin memberikan tip yang sesuai atas baik tidaknya pelayanan yang diberikan. c. Anda mengatakan pada saya seberapa sejuk ruangan yang anda inginkan, saya ingin mengatur putaran kipas yang ada pada ruangan ini. Ada beberapa alasan mengapa orang menggunakan logika fuzzy, diantaranya: a. Konsep logika fuzzy mudah dimengerti. Konsep matematis yang mendasari penalaran fuzzy sangat sederhana dan mudah dimengerti. b. Logika fuzzy sangat fleksibel. c. Logika fuzzy memiliki toleransi terhadap data-data yang tidak tepat. d. Logika fuzzy mampu memodelkan fungsi-fungsi nonlinear yang sangat kompleks. e. Logika fuzzy dapat membangun dan mengaplikasikan pengalamanpengalaman para pakar secara langsung tanpa harus melalui proses pelatihan. f. Logika fuzzy dapat bekerjasama dengan teknik-teknik kendali secara konvensional. g. Logika fuzzy didasarkan pada bahasa alami. 27 2. Perbedaan Himpunan Fuzzy Dengan Himpunan Pasti (Crisp) Pada himpunan pasti, nilai keanggotaan suatu item x dalam suatu himpunan A, yang sering ditulis dengan µA[x], memiliki dua kemungkinan, yaitu: a. Satu (1), yang berarti bahwa suatu item menjadi anggota dalam suatu himpunan, atau b. Nol (0), yang berarti bahwa suatu item tidak menjadi anggota suatu himpunan. Contoh : Misalkan variabel umur dibagi menjadi tiga kategori, yaitu: Muda umur < 35 tahun Parobaya 35 ≤ umur ≤ 55 tahun Tua umur ≥ 55 tahun Nilai keanggotaan secara grafis, himpunan Muda, Parobaya, dan Tua dapat di lihat pada gambar 2.1. 1 Muda 1 µ[x] 0 0 Parobaya 1 µ[x] 35 0 0 Tua µ[x] 35 55 0 0 55 Gambar 2.1 Himpunan Muda, Parobaya, dan Tua Pada gambar 2.1 dapat dijelaskan bahwa: a. Apabila seseorang berusia 34 tahun, maka ia dikatakan Muda (µMuda[34] = 1), 28 b. Apabila seseorang berusia 35 tahun, maka ia dikatakan Tidak Muda (µMuda[35] = 0), c. Apabila seseorang berusia 35 tahun kurang 1 hari, maka ia dikatakan Tidak Parobaya (µParobaya[35 th - 1 hari] = 0). Berdasarkan contoh di atas bisa dikatakan pemakaian himpunan pasti untuk menyatakan umur sangat tidak adil, adanya perubahan sedikit saja pada suatu nilai mengakibatkan perbedaan kategori yang cukup signifikan. Himpunan fuzzy digunakan untuk mengantisipasi hal tersebut. Seseorang dapat masuk dalam dua himpunan yang berbeda: Muda dan Parobaya, Parobaya dan Tua, dan sebagainya. Seberapa besar eksistensinya dalam himpunan tersebut dapat di lihat pada nilai derajat keanggotaannya. Gambar 2.2 menunjukkan himpunan fuzzy untuk variabel umur. Muda Parobaya Tua µ[x] 0,5 0,25 0 25 35 40 45 50 55 65 Umur (th) Gambar 2.2 Himpunan Fuzzy untuk Variabel Umur Pada gambar 2.2 dapat di lihat bahwa: a. Seseorang yang berumur 40 tahun, termasuk dalam himpunan Muda dengan µMuda[40] = 0,25; namun dia juga termasuk dalam himpunan 29 Parobaya dengan µParobaya[40] = 0,5. b. Seseorang yang berumur 50 tahun, termasuk dalam himpunan Tua dengan µTua[50] = 0,25; namun dia juga termasuk dalam himpunan Parobaya dengan µParobaya[50] = 0,5. Jika pada himpunan pasti nilai keanggotaan hanya ada dua kemungkinan, yaitu 0 atau 1, pada himpunan fuzzy nilai keanggotaan terletak pada rentang 0 sampai dengan 1. Apabila x memiliki nilai keanggotaan fuzzy µA[x] = 0 berarti x tidak menjadi anggota himpunan A, demikian pula apabila x memiliki nilai keanggotaan fuzzy µA[x] = 1 berarti x menjadi anggota penuh pada himpunan A. 3. Beberapa Hal yang Perlu Diketahui Dalam Sistem Fuzzy Ada beberapa hal yang perlu diketahui dalam memahami sistem fuzzy, yaitu: a. Variabel Fuzzy Variabel fuzzy merupakan variabel yang hendak di bahas dalam suatu sistem fuzzy, contoh: umur, temperatur, permintaan, dan sebagainya. b. Himpunan Fuzzy Himpunan fuzzy merupakan suatu grup yang mewakili suatu kondisi atau keadaan tertentu dalam suatu variabel fuzzy. Contoh untuk beberapa himpunan fuzzy: • Variabel umur, terbagi menjadi tiga himpunan fuzzy, yaitu: Muda, Parobaya, dan Tua. 30 • Variabel temperatur, terbagi menjadi lima himpunan fuzzy, yaitu: Dingin, Sejuk, Normal, Hangat, dan Panas. Himpunan fuzzy memiliki dua atribut, yaitu: 1) Linguistik, yaitu penamaan grup yang mewakili suatu keadaan atau kondisi tertentu dengan menggunakan bahasa alami, seperti Dingin, Sejuk, Normal, Hangat, Panas, dan sebagainya. 2) Numeris, yaitu suatu nilai (angka) yang menunjukkan ukuran dari suatu variabel, seperti 40, 25, 50, dan sebagainya. c. Semesta Pembicaraan Semesta pembicaraan adalah keseluruhan nilai yang diperbolehkan untuk dioperasikan dalam suatu variabel fuzzy. Semesta pembicaraan merupakan himpunan bilangan nyata (real) yang senantiasa bergerak naik (bertambah) secara monoton dari kiri ke kanan. Nilai semesta pembicaraan dapat berupa bilangan positif maupun bilangan negatif. Adakalanya nilai semesta pembicaraan ini tidak dibatasi batas atasnya. Contoh: • Semesta pembicaraan untuk variabel umur: [0 +∞]. • Semesta pembicaraan untuk variabel temperatur: [0 40]. d. Domain Domain himpunan fuzzy adalah keseluruhan nilai yang diijinkan dalam semesta pembicaraan dan boleh dioperasikan dalam suatu himpunan fuzzy. Seperti halnya dengan semesta pembicaraan, domain 31 merupakan himpunan bilangan nyata yang senantiasa bergerak naik (bertambah) secara monoton dari kiri ke kanan. Nilai domain dapat berupa bilangan positif maupun negatif. Contoh domain himpunan fuzzy untuk temperatur: • Dingin = [0, 20] • Sejuk = [15, 25] • Normal = [20, 30] • Hangat = [25, 35] • Panas = [30, 40] 4. Fungsi Keanggotaan Fungsi keanggotaan (membership function) adalah suatu kurva yang menunjukkan pemetaan titik-titik masukkan data kedalam nilai keanggotaannya (sering juga disebut dengan derajat keanggotaan) yang memiliki interval antara 0 sampai 1. Salah satu cara yang dapat digunakan untuk mendapatkan nilai keanggotaan adalah dengan melalui pendekatan fungsi. Ada beberapa fungsi yang dapat digunakan diantaranya adalah: a. Representasi Linear Pada representasi linear, pemetaan masukkan kedalam derajat keanggotaannya digambarkan sebagai suatu garis lurus. Bentuk ini paling sederhana dan menjadi pilihan yang baik untuk mendekati suatu konsep yang kurang jelas. Ada dua keadaan himpunan fuzzy fungsi linear. 32 1) Representasi Linear Naik Kenaikan himpunan dimulai pada nilai domain yang memiliki derajat keanggotaan nol bergerak ke kanan menuju ke nilai domain yang memiliki derajat keanggotaan lebih tinggi (gambar 2.3). 1 derajat keanggotaan µ[x] 0 a b domain Gambar 2.3 Representasi Linear Naik Fungsi keanggotaan: 0; µ[x] = (x - a)/(b - a); 1; x≤a a<x<b x≥b 2) Representasi Linear Turun Representasi linear turun merupakan kebalikan dari linear naik. Garis lurus dimulai dari nilai domain dengan derajat keanggotaan tertinggi pada sisi kiri, kemudian bergerak menurun ke nilai domain yang memiliki derajat keanggotaan lebih rendah (Gambar 2.4). 33 1 derajat keanggotaan µ[x] 0 a b domain Gambar 2.4 Representasi Linear Turun Fungsi keanggotaan: 1; (b - x)/(b - a); µ[x] = 0; x≤ a<x<b x≥b b. Representasi Kurva Segitiga Kurva segitiga pada dasarnya merupakan gabungan antara dua garis linear seperti terlihat pada gambar 2.5. 1 derajat keanggotaan µ[x] 0 a b c domain Gambar 2.5 Representasi Kurva Segitiga Fungsi keanggotaan: 0; (x – a)/(b – a); µ[x] = (c – x)/(c – b); 1; x ≤ a atau x ≥ c a<x≤b b<x<c x=b 34 c. Representasi Kurva Travesium Kurva Travesium pada dasarnya sama seperti bentuk segitiga, hanya saja ada beberapa titik yang memiliki nilai keanggotaan satu. 1 derajat keanggotaan µ[x] 0 a b c d domain Gambar 2.6 Representasi Kurva Trapesium Fungsi Keanggotaan: 0; (x – a)/(b – a); µ[x] = 1; (d – x)/(d – c); x ≤ a atau x ≥ d a<x<b b≤x≤c c<x<d d. Representasi Kurva Bentuk Bahu Kurva bentuk bahu merupakan jenis kurva dengan keadaan daerah yang terletak di tengah-tengah suatu variabel yang direpresentasikan dalam bentuk segitiga, pada sisi kanan dan kirinya akan naik dan turun (misalkan: Muda bergerak ke Parobaya kemudian bergerak ke Tua). Akan tetapi, dalam kondisi tertentu, sisi-sisi dari variabel tersebut tidak mengalami perubahan. Sebagai contoh, apabila telah mencapai kondisi Tua, kenaikan variabel umur akan tetap pada kondisi Tua. Himpunan fuzzy “bahu” digunakan untuk mengakhiri variabel suatu daerah fuzzy. Bahu kiri bergerak dari benar ke salah, demikian juga bahu kanan, bergerak dari salah ke benar. Gambar 2.7 menunjukkan representasi kurva bentuk bahu. 35 Bahu Kiri Bahu Kanan 1 0 a d b e c Gambar 2.7 Representasi Kurva Bahu Fungsi keanggotaan representasi kurva bahu merupakan perpaduan antara fungsi keanggotaan representasi linier dengan representasi segitiga sehingga rumus fungsi keanggotaanya mengikuti rumus fungsi keduanya. Fungsi ini sering digunakan karena dapat mendefinisikan beberapa himpunan fuzzy dalam satu waktu serta sederhana dalam proses penghitungannya. e. Representasi Kurva S Kurva S memiliki nilai kenaikan atau penurunan yang tidak linear. Ada dua representasi kurva S, yaitu kurva S-Pertumbuhan dan kurva SPenyusutan. Kurva S didefinisikan dengan menggunakan tiga parameter, yaitu: nilai keanggotaan nol (α), nilai keanggotaan lengkap (γ), dan titik infleksi atau crossover (β), yaitu titik yang memiliki domain 50% benar. Fungsi ini baik digunakan untuk pendefinisian himpunan fuzzy tunggal. 36 1) Representasi Kurva S-Pertumbuhan Kurva S-Pertumbuhan bergerak dari sisi paling kiri dengan nilai keanggotaan nol menuju sisi paling kanan dengan nilai keanggotaan satu. Fungsi keanggotaannya bertumpu pada 50% nilai derajat keanggotaannya yang sering di sebut dengan titik infleksi (gambar 2.8). 1 µ[x] 0,5 0 α β γ domain Gambar 2.8 Karakteristik Fungsi Kurva S-Pertumbuhan Fungsi keanggotaan kurva S-Pertumbuhan: 0; 2((x - α)/(γ - α))²; µ(x;α,β,γ) = 1 - 2((γ - x)/(γ - α))²; 1; x≤α α<x≤β β<x<γ x≥γ 2) Representasi Kurva S-Penyusutan Kurva S-Penyusutan merupakan kebalikan dari Kurva SPertumbuhan. Nilai keanggotaannya bergerak dari sisi kiri dengan nilai keanggotaan satu menuju sisi kanan dengan nilai keanggotaan nol. Seperti yang terlihat pada gambar 2.9. 37 1 µ[x] 0,5 0 α β domain γ Gambar 2.9 Karakteristik Fungsi Kurva S-Penyusutan Fungsi keanggotaan kurva S-Penyusutan: 1; 1 - 2((x - α)/(γ - α))²; µ(x; α, β, γ) = 2((γ - x)/(γ - α))²; 0; x≤α α<x≤β β<x<γ x≥γ f. Representasi Kurva Bentuk Lonceng (Bell Curve) Untuk merepresentasikan himpunan fuzzy biasanya digunakan kurva bentuk lonceng. Kurva bentuk lonceng terbagi atas tiga kelas, yaitu: Kurva Phi (π), Beta (β), dan Gauss. Perbedaan ketiga kurva ini terletak pada gradiennya. 1) Kurva Phi (π) Kurva-π berbentuk lonceng dengan derajat keangotaan satu terletak pada pusat dengan domain (γ) dan lebar kurva (β). Seperti yang terlihat pada gambar 2.10. 38 Pusat (γ) 1 Titik infleksi µ[x] 0.5 0 Ri lebar (β) Domain Rj Gambar 2.10 Karakteristik Fungsional Kurva π Fungsi keanggotaan: S[x; γ – β, γ – β/2, γ] π(x,β,γ) = 1 – S[x; γ, γ + β/2, γ + β] x≤γ x>γ 2) Kurva Beta (β) Seperti halnya Kurva π, kurva beta juga berbentuk lonceng namun lebih rapat. Kurva ini didefinisikan dengan dua parameter, yaitu nilai pada domain yang menunjukkan pusat kurva (γ) dan setengah lebar kurva (β). Seperti yang terlihat pada gambar 2.11. Pusat (γ) 1 Titik infleksi (γ – β) Titik infleksi (γ + β) 0,5 µ[x] 0 Ri domain Rj Gambar 2.11 Karakteristik Fungsional Kurva β Fungsi keanggotaan: β(x; γ, β) = 1/1 + [x – γ/β]2 39 Salah satu perbedaan yang mencolok yang dimiliki oleh kurva beta terhadap kurva-π adalah fungsi keanggotaannya akan mendekati nol hanya jika nilai β sangat besar. 3) Kurva Gauss Kurva Gauss menggunakan γ untuk menunjukkan nilai domain pada pusat kurva dan k yang menunjukkan lebar kurva. Seperti yang terlihat pada gambar 2.12. Pusat (γ) 1 µ[x] 0,5 0 Ri lebar (k) Rj Domain Gambar 2.12 Karakteristik Fungsional Kurva Gauss Fungsi keanggotaan: G(x; k, γ) = e – k(γ – x)2 5. Operator Dasar Zadeh untuk Operasi Himpunan Fuzzy Seperti halnya himpunan konvensional, ada beberapa operasi yang didefinisikan secara khusus untuk mengkombinasi dan memodifikasi himpunan fuzzy. Nilai keanggotaan sebagai hasil dari operasi dua himpunan atau lebih sering di kenal dengan nama firestrength atau α-predikat. Ada tiga operator dasar yang diciptakan oleh Zadeh, yaitu: 40 a. Operator And Operator ini berhubungan dengan operasi interseksi pada himpunan α-predikat sebagai hasil operasi dengan operator And diperoleh dengan mengambil nilai keanggotaan terkecil antar elemen pada himpunan-himpunan yang bersangkutan. µA∩B = Min(µA[x], µB[y]) b. Operator Or Operator ini berhubungan dengan operasi union pada himpunan α-predikat sebagai hasil operasi dengan operator Or diperoleh dengan mengambil nilai keanggotaan terbesar antar elemen pada himpunanhimpunan yang bersangkutan. µAUB = Max(µA[x], µB[y]) c. Operator Not Operator ini berhubungan dengan operasi komplemen pada himpunan. α-predikat sebagai hasil operasi dengan operator Not diperoleh dengan mengurangi nilai keanggotaan elemen pada himpunan yang bersangkutan dari satu. µA’ = 1 - µA[x] B. Database 4. Pengertian Database Dalam arti khusus database adalah sekumpulan informasi yang di atur agar mudah di cari. Sedangkan dalam arti umum database adalah 41 sekumpulan data yang di proses dengan bantuan komputer yang memungkinkan data dapat di akses dengan mudah dan tepat, yang dapat digambarkan sebagai aktivitas dari satu atau lebih organisasi yang berelasi. Sebagaimana kita ketahui, manajemen modern sekarang ini telah mengikutsertakan informasi sebagai sumber daya penting yang setara dengan sumber daya manusia, uang, mesin, dan meterial. Informasi adalah suatu bentuk penyajian data yang melalui mekanisme pemrosesan serta berguna bagi pihak tertentu misalnya manajer. Bagi pihak manajer informasi merupakan bahan acuan bagi pengambilan keputusan. Data Proses Informasi Gambar 2.13 Pengolahan Data Menjadi Informasi 5. Database Relasional Prinsip dari model relasional pertama kali dikenalkan oleh Dr. E. F. Codd pada bulan Juni 1970 pada tulisan makalahnya yang berjudul ”A Relational Model of Data for Large Shared Data Banks”. Pada makalah tersebut Dr. E. F. Codd mengusulkan model relasional untuk sistem database. Model relasional lebih popular daripada tipe model database lain seperti hirarki dan network karena kesederhanaannya. Relational Database Management System (RDBMS) menjadi sangat populer karena mudah digunakan dan strukturnya bersifat fleksibel. Komponen dari model relasional adalah: 42 a. Kumpulan obyek atau relasi yang menyimpan data, b. Kumpulan operator yang dapat digunakan pada relasi untuk menghasilkan relasi yang lain, c. Integritas data untuk akurasi dan konsistensi. Database relasional menggunakan relasi atau tabel dua dimensi untuk menyimpan informasi. Sebagai contoh akan di simpan informasi tentang pegawai dalam suatu perusahaan, maka pada database relasional di buat beberapa tabel untuk menyimpan kumpulan informasi tentang pegawai seperti tabel pegawai, tabel departemen, dan tabel gaji. 6. Structured Query Language (SQL) SQL adalah bahasa standard untuk melakukan query pada database. SQL independent terhadap arsitektur database sehingga bisa digunakan pada database apa saja. Sebuah query adalah sebuah ekspresi bahasa yang menggambarkan data yang ingin didapatkan kembali dari sebuah database. Dalam hubungannya dengan optimasi query, seringkali diasumsikan bahwa queryquery tersebut dinyatakan dalam sebuah dasar-dasar isi dan sekumpulan cara orientasi yang memberikan optimizer pilihan-pilihan di antara prosedur-prosedur alternatif evaluasi. Query dapat digunakan pada beberapa keadaan, kebanyakan aplikasi nyatanya adalah permintaan-permintaan secara langsung dari pengguna (user) yang memerlukan informasi tentang bentuk maupun isi dari database. 43 Apabila permintaan pengguna terbatas pada sekumpulan query-query standard, maka query-query tersebut dapat dioptimisasi secara manual oleh pemrograman prosedur-prosedur pencarian gabungan dan membatasi masukan dari pengguna pada sebuah ukuran menu. Tetapi bagaimanapun juga, sebuah sistem optimisasi query otomatis menjadi penting apabila query-query khusus dinyatakan dengan menggunakan bahasa query yang digunakan secara umum seperti SQL. SQL adalah bahasa pemrograman yang digunakan untuk akses ke database. SQL di buat oleh perusahaan IBM sekitar tahun 1970, bersamaan dengan diperkenalkannya konsep relational Database. Setelah mengalami banyak perkembangan, pada masa kini SQL sudah menjadi bahasa yang lazim digunakan dalam dunia database. Bahasa SQL dapat digolongkan bahasa generasi keempat yang tidak berupa bahasa yang berstruktur dan beraturan seperti C dan Pascal (golongan bahasa generasi ketiga). Oleh karena itu, bahasa SQL mudah dipelajari. Pernyataan (statement) SQL dapat digolongkan atas tiga golongan yaitu: a. Data Definition Language (DDL) yang mendefinisikan struktur suatu data. Perintah-perintah SQL yang termasuk DDL antara lain : 1) Create = untuk membuat tabel dengan sintaksnya sebagai berikut : CREATE TABLE [Pemakai.] Nama Tabel( {nama kolom pertama TipeData [default] [constraint kolom] constraint tabel) [,(nama kolom kedua TipeData [default] [constraint kolom] constraint tabel}]... .); 44 2) Alter = untuk mengubah (modify) tabel yang telah dibuat, seperti : a) Menambah kolom baru, b) Mengubah ukuran kolom, c) Mengubah aturan-aturan yang berlaku untuk suatu kolom. Sintaks yang dapat dipakai adalah: ALTER TABLE [Pemakai.] Nama Tabel {[ADD {Nama Kolom | [CONSTRAINT Nama Constraint] Constraint Tabel}[, Nama Kolom |[CONSTRAINT Nama Constraint] Constraint Tabel }]…)][MODIFY (Nama Kolom [, Nama Kolom]….)][DROP Nama Constra int]}[ENABLE Nama Constraint | DISABLE Nama Constraint]; 3) Drop = untuk menghapus suatu tabel. Sintaks yang dapat dipakai adalah: DROP TABLE [Pemakai.]Nama [CASCADE CONSTRAINTS]; Tabel b. Data Manipulation Language (DML) yang dapat mencari (query) dan mengubah (modify) suatu tabel. Perintah-perintah SQL yang termasuk DML antara lain: 1) Select = untuk membaca (query) isi tabel. Sintaks yang dapat digunakan adalah sebagai berikut: SELECT [ ALL | DISTINCT {* | [Pemakai..]Nama Tabel.* | Ekspresi [Alias [, Ekspresi [Alias] ]..} FROM [Pemakai.]Nama Table [@Nama Database] [Alias]...[WHERE Kondisi][CONNECT BY Kondisi [START WITH Kondisi]][GROUP BY Ekspresi [, Ekspresi]... .] [HAVING Kondisi][(UNION [ALL] | INTERSECT MINUS)SELECT …] [ORDER BY {EKspresi | Posisi} [ASC }| DESC]…[, {Expresi | Posisi} [ASC | DESC]]]…[FOR UPDATE [OF [[Pemakai.]{Nama Tabel | Nama View}.]Nama Kolom [, [[Pemakai.]{Nama Tabel | Nama View}.]]…] NOWAIT]; 45 2) Insert = untuk memasukkan data ke tabel. Sintaks yang dapat digunakan adalah sebagai berikut: INSERT INTO [Pemakai.]Nama Tabel[@nama Database] [(Nama Kolom [Nama Kolom]…)]VALUE [Ekspresi]...) | Query...); 3) Update = untuk mengubah isi tabel. Sintaks yang dapat digunakan adalah sebagai berikut: UPDATE [Pemakai.]Nama Tabel SET {Nama Kolom = Ekspresi [Nama Kolom = Ekspresi].. .| (Nama Kolom [,Nama Kolom]..) = ( Subquery) | [WHERE Kondisi]; 4) Delete = untuk menghapus isi tabel. Sintaks yang dapat digunakan adalah sebagai berikut : DELETE FROM [Pemakai.]Nama Table[@Nama Database] [WHERE Kondisi]; c. Data Control Language (DCL) adalah yang mengatur hak-hak (privilege) untuk seorang pemakai database. Semua bahasa pemrograman mempunyai aturan gramatikal. Beberapa aturan yang perlu diperhatikan pada saat menulis bahasa SQL adalah : 1) Semua pernyataan SQL di tutup dengan tanda titik-koma (;). 2) Perintah SQL dapat di tulis dalam satu baris atau di pisah-pisah dalam beberapa baris agar mudah di baca. 3) SQL tidak membedakan huruf besar atau kecil (not case sensitive) untuk penulisan perintah-perintah SQL (seperti Create, Alter, Select), nama tabel, dan nama kolom. 46 4) Isi dari tabel peka terhadap huruf besar atau kecil (case sensitive), tergantung bagaimana isi tabel dimasukkan. Hal ini penting dijadikan perhatian ketika membuat pernyataan query SQL dalam mencari isi tabel. 5) Pernyataan SQL harus di tulis menurut sintaks tertentu. 6) Pernyataan SQL dapat diberikan baris komentar untuk dokumentasi serta menjelaskan maksud dari pemrograman. C. Teknik untuk Mengimplementasikan Fuzziness ke Dalam Database Pada umumnya, ada dua metode untuk memasukkan fuzziness kedalam database, yaitu: 1. Fuzzy Query Database Fuzzy query database adalah membuat sebuah fuzzy query terhadap database klasik. Artinya, kita membuat sebuah aplikasi yang dapat menangani sebuah query di mana dalam query tersebut terdapat variabelvariabel yang bernilai fuzzy atau dengan kata lain query tersebut memiliki variabel-variabel linguistik. Sedangkan data pada database yang akan di akses merupakan data yang pasti. Ada beberapa pendekatan yang dapat dijadikan rujukan untuk menyelesaikan persoalan fuzzy query database. Pendekatan-pendekatan itu adalah: 47 a. Model Chang Shi Kuo Chang mengajukan konsep kerangka database yang mengijinkan pengguna untuk menetapkan isi dan arti dari sebuah koleksi data. Kerangka database ini nantinya digunakan sebagai suatu dasar ilmu semantik yang mendukung fuzzy query. Metodologi yang diusulkan dapat memproses fuzzy query adalah: Query: get supplierName; goods equal 'Tv'. Query ini adalah “fuzzy”’ karena tidak menyediakan cukup keterangan pada DBMS (tidak ada lintasan akses yang ditetapkan). Terjemahan dari fuzzy query kedalam sebuah query lengkap dirumuskan sebagai sebuah masalah untuk mengkonversi sebuah penetapan grafik query secara parsial ke dalam sebuah penetapan secara menyeluruh. Sebuah query penuh untuk query di atas mengambil bentuk: Query: get supply.supplierName; stock.goods equal 'Tv'. Dalam makalah Chang, istilah “fuzzy” mengacu pada keterangan penentuan secara tidak menyeluruh pada query, seperti itu kekurangan dari lintasan akses. Ini harus di catat bahwa teori logika fuzzy tidak dipergunakan dengan tegas di dalam merumuskan metodologi. Alhasil, model ini kurang kuat, sepertinya kurang pantas dalam menangani fuzzy query yang melibatkan data fuzzy yang samarsamar dan rancu. 48 b. Model Wong Eugene Wong mengajukan sebuah kerangka untuk menangani keterangan tidak menyeluruh dalam DBMS nonfuzzy. Terkadang, sehubungan dengan keterangan tidak menyeluruh atau tidak tepat pada DBMS, sebuah database tidak dapat menyediakan jawaban untuk beberapa query. Dalam keadaan di mana ketidaktepatan sehubungan dengan merekam kesalahan, data usang, skala tidak cocok, atau kesalahan pengukuran, Wong menyarankan penggunaan dari pendekatan data statistik untuk mendekati hasil, kecuali jawabanjawaban yang penuh arti. Ini di catat bahwa model Wong berlandaskan teori dari probabilitas dan statistik lebih dari teori himpunan fuzzy. Sebagai data fuzzy, secara keseluruhan, posibilistik dibandingkan posibilistik alami, model ini seperti model Chang, tidak berhasil menangani dengan baik fuzzy query yang melibatkan data fuzzy. c. Model Tahani Valiollah Tahani mengembangkan sebuah kerangka konseptual tingkat tinggi untuk memproses fuzzy query pada sebuah ruang lingkup database konvensional nonfuzzy. Diusulkan kerangka sistem perolehan kembali fuzzy, penggunaan pendekatan dari perancangan perolehan kembali asosiasi. Di bawah perancangan ini, sebuah fuzzy query digantikan oleh asosiasi arti dirinya kemudian pencocokan 49 operasi dilakukan untuk membandingkan fuzzy mulai dari akurasi data hingga memperoleh sebuah jawaban. Model ini dianggap model yang paling baik untuk menjawab persoalan fuzzy query database karena model ini menggunakan teori himpunan fuzzy untuk mendapatkan informasi pada query-nya. Misalkan dalam sebuah database karyawan di buat kategorikategori sebagai berikut: 1) Usia karyawan dikategorikan ke dalam himpunan fuzzy menjadi Muda, Parobaya, dan Tua. 2) Gaji karyawan dikategorikan ke dalam himpunan fuzzy menjadi Rendah, Sedang, dan Tinggi. 3) Masa kerja karyawan dikategorikan ke dalam himpunan fuzzy menjadi Baru dan Lama. Dari pendefinisian himpunan fuzzy di atas kita dapat membuat beberapa query, misalnya siapa saja karyawan yang masih muda serta memiliki gaji tinggi? Query-nya adalah: Select nama from karyawan where (Usia = “Muda”) and (Gaji = “Tinggi”). Maka pada database yang telah dibuat akan muncul siapasiapa saja karyawan yang masih muda dan mendapat gaji tinggi. 50 d. Model Kacprzyk Janusz Kacprzyk menyajikan sebuah sistem fuzzy query yang di kenal dengan Fquery III. Melalui Fquery III, tambahan data Dbase III (sebuah nonfuzzy mikro komersial berbasis komputer RDBS) dapat di bedah menggunakan fuzzy query. Fquery III didasari pada kerangka dengan teori logika fuzzy. 2. Fuzzy Database Fuzzy database adalah teknik untuk memasukkan informasi fuzzy ke dalam database. Maksudnya adalah kita memasukkan informasi-informasi yang memiliki nilai fuzzy kedalam database. Ada beberapa pendekatan yang dapat dijadikan rujukan untuk menyelesaikan persoalan fuzzy query database. Pendekatan-pendekatan itu adalah: a. Model Buckles Model Buckles adalah salah satu model versi paling awal dari Fuzzy Relational DataBase System (FRDBS) dengan menggabungkan teori himpunan fuzzy dan Relational DataBase System (RDBS). Billy P. Buckles merumuskan sebuah kerangka teoritis yang kokoh dari persamaan mendasar FRDBS yang mana memiliki persyaratan sebagai berikut: 1) Model ini mengijinkan komponen-komponen tuple nonatomik, 51 2) Model ini memerlukan hubungan persamaan untuk masingmasing domain data agar supaya memelihara persyaratan penting dari RDBS klasik, 3) Model ini menerima ambang batas yang didefinisikan pengguna dari penerimaan selama evaluasi query, 4) Model ini hanya mendukung sebuah kelas spesifik angka fuzzy tetapi tidak mendukung distribusi kemungkinan jenis data (untuk perbandingan, lihat model yang disediakan oleh Umano). b. Model Shenoi Sujeet Shenoi generalisasikan persamaan berdasar model. Senoi mengamati bahwa pemeliharaan dari persyaratan RDBS klasik juga dapat dilakukan dengan cara membatasi komponen-komponen fuzzy tuples menjadi subset-subset yang tidak kosong dari kesamaan kelas-kelas dari pembagian domain. Sejak pendapat kesamaan kelaskelas lebih umum dibandingkan pendapat dari hubungan persamaan, sebuah kesamaan model dari FRDBS, dimana sebuah generalisasi dari model dasar persamaan telah diajukan. c. Model Umano Pendekatan berbeda yang lain pada penyajian dan manipulasi dengan data fuzzy diajukan oleh Umano yang mengembangkan Kebebasan-0, sebuah FRDBS. Tidak seperti model Buckles dan Shenoi yang mana batas-batas data fuzzy pada angka fuzzy spesifik, 52 Kebebasan-0 mengikuti distribusi kemungkinan keduanya dan angka fuzzy. Walaupun demikian, Kebebasan-0 lebih kuat dalam kaitannya dengan struktur data fuzzy ini, ini kekurangan kerangka database formal yang mana ditemukan pada model Buckles. Kebebasan-0 menggunakan sebuah bahasa program terlekat pada Fortran untuk manipulasi data fuzzy. Misalkan terdapat tabel karyawan seperti terlihat pada tabel 2.1 berikut. Tabel 2.1 Tabel Biodata Karyawan Nama Umur (th) Nama Anak Farrel 35 Maya Fitri 33 - Aldo Muda Tidak Tahu Kaila Tidak Tahu Ningrum Mozza 56 {Nisa,Ana}p Misyka {50,51}p Undefined Pada record pertama, tidak ada data yang ambiguous. Farrel berusia 35 tahun dan memiliki seorang anak yang bernama Maya. Pada record kedua juga tidak ada data yang ambiguous. Fitri berusia 33 tahun dan belum mempunyai anak. Pada record ketiga, Aldo tidak diketahui berapa umurnya tetapi dia masih muda. Umur Aldo diekspresikan dengan distribusi 53 posibilitas Muda, misalkan Muda merupakan himpunan dengan distribusi posibilitas sebagai berikut: Muda = {0,3/15; 0,6/17; 0,8/22; 1/25; 0,8/30; 0,7/33; 0,6/35; 0,2/40} Aldo memiliki anak tetapi kita tidak mengetahui siapa nama anaknya. Nama anaknya Aldo diekspresikan dengan distribusi posibilitas tidak tahu yang berarti siapapun mungkin (nilai posibilitas = 1). Pada record keempat kita tidak mengetahui berapa umur Kaila. Umur Kaila diekspresikan dengan distribusi posibilitas tidak tahu yang berarti berapapun mungkin. Kaila memiliki anak yang bernama Ningrum. Pada record kelima, Mozza diketahui berumur 56 tahun. Mozza memiliki seorang anak yang belum jelas siapa namanya, apakah Nisa atau Ana. Nama anak Mozza diekspresikan dengan distribusi posibilitas {Nisa,Ana}p yang artinya Nisa atau Ana. Misalkan distribusi posibilitas yang diberikan adalah: Nama Anak = {0,8/Nisa; 0,5/Ana} Ini berarti bahwa anak Mozza bernama Nisa memiliki nilai posibilitas lebih besar dibandingkan dengan nilai posibilitas Ana. 54 Pada record keenam, umur Misyka diketahui 50 atau 51 tahun. Umur Misyka diekspresikan dengan distribusi posibilitas {50,51}p, misalkan distribusi posibilitas yang diberikan adalah: Umur = {0,8/50; 0,4/51} Ini berarti bahwa umur Misyka 50 tahun memiliki nilai posibilitas lebih besar dibandingkan dengan nilai posibilitas 51 tahun. Kita tidak tahu apakah Misyka memiliki anak atau tidak. Nama anak Misyka diekspresikan dengan distribusi posibilitas undefined, tidak jelas apakah Misyka memiliki anak atau tidak (nilai posibilitas = 0). Apabila diberikan query siapa saja karyawan yang usianya lebih dari 36 tahun? Maka yang termasuk kedalam kategori tersebut adalah Aldo, Kaila, Mozza dan Misyka. Aldo termasuk dalam kategori ini karena Aldo termasuk dalam kategori Muda di mana usia 40 tahun (> 36 tahun) menjadi anggota himpunan Muda meskipun nilai posibilitasnya 0,2. Kaila termasuk dalam kategori ini karena kita tidak mengetahui umur Kaila sehingga berapapun umur yang di minta, Kaila tetap masuk (nilai posibilitas = 1). Mozza jelas termasuk dalam kategori ini sebab umur Mozza 56 tahun. Misyka juga termasuk dalam kategori ini sebab baik 50 tahun maupun 51 tahun keduanya lebih dari 36 tahun. 55 d. Model Zemankova Maria Zemankova juga mengembangkan sebuah FRDBS yang dapat menangani teori fuzzy keduanya serta data distribusi kemungkinan. RIM, sebuah RDBS nonfuzzy konvensional, di pilih sebagai sebuah tempat dalam menerapkan FRDBS. Vektor menunjukkan jenis dukungan oleh RIM yang biasanya mewakili data fuzzy. Tambahan di buat pada RIM struktur data RDBS sehingga komponen tuple tidak dibatasi pada nilai atomik. Pengembangan FRDBS dapat menangani fuzzy query. Secara umum, FRDBS menunjukkan keuntungan-keuntungan utama yang mengikuti melalui model RDBS konvensional. 1) Model ini mengijinkan sebuah cara yang lebih alami dari penanganan data karena data fuzzy lebih kompatibel dengan pikiran dan pengamatan manusia, 2) Penggunaan dengan teori himpunan fuzzy dan teori distribusi kemungkinan menyediakan sebuah pondasi matematika formal untuk penyajian sistematis dan manipulasi dari data pasti dan data fuzzy, 3) Model ini menyediakan sebuah lingkungan database untuk menangani keduanya (data pasti dan data fuzzy). Bagaimanapun, dalam model ini, tidak diragukan bahwa RDBS adalah kunci kerangka database pada penanganan data fuzzy. 56 Bagaimanapun, seperti generasi terdahulu dari teknologi database, RDBS dikembangkan untuk pengolahan data konvensional yang melibatkan struktur data pasti dan data atomik, dengan demikian ini tidak sesuai untuk aplikasi-aplikasi yang memerlukan penghitungan intensif dan struktur data kompleks seperti data himpunan fuzzy. 57 BAB III METODOLOGI G. Prosedur Perancangan Prosedur perancangan yang di maksud adalah tata cara pencapaian target perancangan sebagaimana tertulis dalam tujuan penelitian. Prosedur perancangan ini ditunjukkan dalam gambar 3.1. Target: Tujuan perancangan Analisis Kebutuhan Spesifikasi Desain Gagal Verifikasi Berhasil Validasi Finalisasi Gambar 3.1 Prosedur Perancangan H. Analisa Kebutuhan Sistem yang akan di bangun merupakan sistem database fuzzy. Karena model yang digunakan adalah Model Tahani, maka relasi yang ada 58 dalam database masih bersifat standard, dengan penekanan fuzzy pada beberapa field dalam tabel-tabel yang ada pada database tersebut. 1. Kebutuhan Masukkan Kebutuhan masukkan sistem digolongkan menjadi dua, yaitu masukkan fuzzy dan masukkan nonfuzzy. a. Masukkan fuzzy terdiri dari: 1) Data-data pelamar kerja yang menyangkut: tes kompetensi, tes wawancara, tes kreaplin, dan magang. 2) Untuk fungsi S-pertumbuhan, nilai keanggotaan nol = α, nilai titik infleksi = β, dan nilai keanggotaan lengkap = γ. Untuk fungsi keanggotaan bahu merupakan perpaduan antara fungsi linier naik dan turun serta fungsi segitiga (nilai batas bawah fungsi linier turun = a, nilai batas atas fungsi linier turun = b, nilai batas bawah fungsi segitiga = c, nilai tengah fungsi segitiga = d, nilai batas atas fungsi segitiga = e, nilai batas bawah fungsi linier naik = f dan nilai batas atas fungsi linier naik = g) berlaku untuk variabelvariabel pada bagian (1). b. Masukkan nonfuzzy terdiri dari data-data pelamar kerja yang menyangkut ada tidaknya pengalaman kerja. 2. Kebutuhan Keluaran Keluaran sistem berupa rekomendasi pelamar kerja yang sesuai dengan kriteria yang diinginkan oleh perusahaan atau instansi terkait. 59 3. Menggunakan Delphi sebagai GUI Delphi digunakan sebagai antar muka (Graphical User Interface) agar pengguna tidak mengalami kesulitan dalam memasukkan dan memproses data sehingga dapat menghindari terjadinya kesalahan. I. Spesifikasi Secara umum perangkat lunak yang di bangun mempunyai spesifikasi sebagai berikut: 1. Memiliki Database yang dapat memuat data-data para pelamar kerja, jenis dan kriteria tes, nilai hasil tes, serta predeksi pelamar kerja yang akan di terima. 2. Menggunakan sistem berbasis GUI yaitu Delphi 7.0 tidak berbasis web. 3. Menggunakan Mysql sebagai perangkat lunak penyimpan database tidak menggunakan client server. 4. Dapat digunakan pada komputer dengan spesifikasi minimum sebagai berikut: a. Desktop PC atau Notebook dengan prosessor 800 Mhz. b. HDD 750 MB. c. Memory RAM 256 MB. d. VGA/SVGA 16 MB dengan resolusi (1024 x 768). e. Sistem operasi Microsoft Windows XP Professional. 60 J. Perancangan Database dan Sistem Dengan spesifikasi di atas maka komponen-komponen yang dibutuhkan untuk membangun perangkat lunak ini adalah: 1. Perancangan Database Database yang digunakan adalah database standard yang sudah umum digunakan dengan struktur database yang memiliki relasional antar tabel. Secara keseluruhan kita membuat sebuah database yang di beri nama database fuzzy. Karena pada penelitian ini menggunakan database model Tahani, maka query yang akan di dapat dari proses seleksi menggunakan teori himpunan fuzzy. Ada enam tabel yang digunakan dalam penyelesaian tugas akhir ini dengan tujuan dan kegunaan yang berbeda-beda. Penjelasannya adalah sebagai berikut: a. Struktur Tabel 1) Tabel Pelamar Tabel pelamar ini digunakan untuk menyimpan data-data tentang biodata para pelamar kerja. Struktur tabel pelamar kerja dapat di lihat pada tabel 3.1. Tabel 3.1 Tabel Pelamar Nama Field idpelamar* kode nama alamat tempatlahir tgllahir Tipe Data Lebar Integer Varchar Varchar Varchar Varchar Date 11 8 32 64 16 - Keterangan Auto increment No. urut pelamar Nama pelamar Alamat pelamar Kota kelahiran pelamar Tanggal lahir pelamar 61 usia Real *) Kunci Primer 2) - Usia pelamar Tabel Jenis Tes Tabel jenistes ini digunakan untuk menyimpan data-data tentang jenis-jenis tes yang diadakan untuk menyaring para pelamar kerja oleh suatu institusi atau perusahaan. Struktur tabel pelamar dapat di lihat pada tabel 3.2. Tabel 3.2 Tabel Jenis Tes Nama Field Tipe Data idjenistes* Integer nama Varchar *) Kunci Primer 3) Lebar Keterangan 11 16 Auto increment Nama jenis tes Tabel Kriteria dari Jenis Tes Tabel kriteria ini digunakan untuk menyimpan data-data tentang derajat keanggotaan suatu jenis tes tertentu pada himpunan fuzzy tertentu serta menyimpan data-data domain dari himpunan fuzzy. Struktur tabel pelamar dapat di lihat pada tabel 3.3. Tabel 3.3 Tabel Kriteria Nama Field idkriteria* nama idjenistes kurva Tipe Data Lebar Integer Varchar Integer Varchar 11 16 11 16 a b c d Float Float Float Float - Keterangan Auto increment Nama kriteria tes Kode dari jenis tes Nama fungsi dari derajat keanggotaan fuzzy Batas dari himpunan fuzzy Batas dari himpunan fuzzy Batas dari himpunan fuzzy Batas dari himpunan fuzzy 62 *) Kunci Primer 4) Tabel Nilai Tabel nilai ini digunakan untuk menyimpan data-data tentang nilai-nilai tes yang di ambil dari hasil tes yang telah dilakukan oleh perusahaan atau institusi. Struktur tabel pelamar dapat di lihat pada tabel 3.4. Tabel 3.4 Tabel Nilai Nama Field Type Data idnilai* idpelamar Integer Integer 11 11 idjenistes Integer 11 nilai Float *) Kunci Primer 5) Lebar Keterangan Auto increment Kode dari nama pelamar Kode dari jenis tes Nilai - Tabel Hasil (Result) Tabel result ini digunakan untuk menyimpan data-data tentang hasil dari penghitungan nilai keanggotaan dari fungsi keanggotaan yang telah ditentukan. Struktur tabel pelamar dapat di lihat pada tabel 3.5. Tabel 3.5 Tabel Result Nama Field Type Data Lebar idresult* idpelamar Integer Integer 11 11 idkriteria Integer 11 nilai Float - Keterangan Auto increment Kode dari nama pelamar Kode dari kriteria tes Nilai 63 *) Kunci Primer 6) Tabel Temporary Tabel sTemp digunakan untuk menyimpan data secara temporary. Tabel ini memuat field-field yang berisi data-data sementara yang dihasilkan selama proses penghitungan dalam sistem ini berlangsung. Data-data yang merupakan hasil dari penghitungan firestrength antara dua kriteria atau lebih. Untuk lebih jelasnya tentang kegunaan dari tabel ini akan di bahas pada perancangan sistem. config PK PK nonfuzzy idpelamar* kode nama alamat tempatlahir tgllahir nonfuzzy nilai PK jenistes pelamar idnilai* idpelamar idjenistes nilai PK kriteria PK idjenistes* nama result PK idresult* idpelamar Idkriteria nilai idkriteria* nama idjenistes kurva a b c d sTemp PK Gambar 3.2 Perancangan Database idresult* idpelamar Idkriteria Temp f1 Temp f2 ........ Fire strength temp Temp nf1 ........ 64 2. Perancangan Sistem Secara umum sistem yang akan di buat adalah seperti gambar 3.3 berikut ini: Masukkan: database Pelamar kerja Tentukan fungsi keanggotaan Ambil data yang diperlukan Olah data dan hitung firestrength Keluaran: hasil rekomendasi Gambar 3.3 Perancangan Sistem a. Diagram Arus Data Penggunaan diagram arus data di sini bertujuan untuk memudahkan dalam melihat arus data dalam sebuah sistem. 1) Diagram Konteks Konteks diagram seperti terlihat pada Gambar 3.4. 65 Definisi variabel fuzzy Definisi himpunan fuzzy Pengguna Definisi fungsi keanggotaan Database tabel dan field nilai Sistem Query Pelamar Kerja direkomendasi Data Pelamar Kerja Pelamar Kerja Gambar 3.4 Diagram Konteks Sistem Dari konteks diagram diatas terlihat ada dua entitas luar yang berhubungan dengan sistem ini, yaitu: Pelamar Kerja dan Pengguna. Dari pelamar kerja akan diperoleh data-data pelamar kerja sedangkan pengguna adalah orang yang menjalankan program ini. Pengguna dapat menentukan sendiri klasifikasi dari pelamar kerja yang akan direkomendasikan, yaitu dengan cara memasukkan: a) Variabel fuzzy yang dibutuhkan, b) Himpunan fuzzy dari masing-masing variabel fuzzy, c) Fungsi keanggotaan dari masing-masing himpunan fuzzy, Setelah itu, untuk mendapatkan pelamar kerja yang direkomendasikan, pengguna dapat memasukkan query yang telah ada pada user interface. 66 Hasil yang di terima oleh pengguna adalah berupa tabel yang berisi data pelamar kerja yang direkomendasikan berdasarkan variabel fuzzy, himpunan fuzzy, fungsi keanggotaan, dan query yang dimasukkan oleh pengguna. 2) Diagram Peninjauan Diagram peninjauan menunjukkan gambaran proses yang ada dalam sistem secara garis besar. Seperti yang terlihat pada gambar 3.5. Pelamar Kerja Data Pelamar Kerja 1.1 Masukk an dan ubah data Data Pelamar Kerja Tabel Pelamar Kerja Data Pelamar Kerja 1.3 Fuzzy Query Data Hasil Tabel Hasil Data Nilai Query Pengguna Data Temporary Fungsi Tabel Nilai Pengguna Tabel Temporary Pelamar Kerja Dirokemendasi Tabel Kriteria Tabel Jeinis Tes Himpunan fuzzy Variabel fuzzy 1.2 Inisialisai hal yang dibutuhkan Data Kriteria Data Jenis Tes Definisi variabel Definisi himpunan fuzzy Database tabel dan field Definisi fungsi Pengguna Pengguna Pengguna Gambar 3.5 Diagram Peninjauan Pengguna 67 Dari diagram peninjauan di atas terlihat ada tiga proses, yaitu: proses masukkan dan ubah data, proses inisialisasi hal-hal yang dibutuhkan, serta proses fuzzy query. a) Proses Masukkan dan Ubah Data. Pada proses ini pengguna dapat memasukan data para pelamar kerja atau mengubah data para pelamar kerja yang ada dalam database. b) Proses Inisialisasi Hal-hal yang Dibutuhkan. Pada proses ini pengguna harus memasukkan hal-hal yang dibutuhkan oleh sistem sebelum melakukan fuzzy query seperti variabel fuzzy, himpunan fuzzy, fungsi keanggotaan, dan database (nama database, tabel, dan field) nilai. Untuk kebutuhan sistem yang terakhir ini digunakan sebagai atribut pada variabel fuzzy yang berhubungan dengan dari mana asal data yang akan di cari nilai keanggotaannya. c) Proses fuzzy query Pada proses ini terjadi penghitungan nilai derajat keanggotaan (µ), penganalisaan query dan penghitungan firestrength. 3) Detail Diagram a) Level 1, Proses 2 Pada detail diagram ini akan ditampilkan proses lebih detail dari proses 2. Seperti terlihat pada Gambar 3.6. 68 Pengguna 1.2.2 Pendefinisian himpunan fuzzy Definisi fungsi keanggotaan Definisi himpunan fuzzy Himpunan fuzzy Variabel fuzzy Pengguna Definisi variabel fuzzy 1.2.1 Pendefinisia n variabel fuzzy 1.2.3 Pendefinisian fungsi keanggotaan Variabel fuzzy Pengguna Fungsi keanggotaan Himpunan fuzzy Fuzzy query Fuzzy query Fuzzy query Gambar 3.6 Detail Diagram Level 1, Proses 2 Dari Gambar 3.6 diatas terlihat ada tiga proses, yaitu: i. Pendefinisian variabel fuzzy. Pengguna dapat menentukan variabel fuzzy yang diperlukan dalam proses. ii. Pendefinisian himpunan fuzzy. Selain membutuhkan variabel fuzzy, proses juga membutuhkan himpunan fuzzy. Oleh karena itu pengguna dapat menentukan sendiri himpunan fuzzy pada masing-masing variabel fuzzy yang akan dimasukkan ke dalam proses. iii. Pendefinisian fungsi keanggotan. Pengguna dapat menentukan sendiri fungsi keanggotaan pada masing-masing himpunan fuzzy. Pendefinisian fungsi keanggotaan ini juga mencangkup semesta pembicaraan dan domain pada masingmasing himpunan fuzzy. 69 b) Level 1, Proses 3 Pada detail diagram ini akan ditampilkan proses lebih menyeluruh dari proses 3. Seperti terlihat pada Gambar 3.7. Masukkan nilai tes Pengguna Inisialisasi hal yang dibutuhkan Inisialisasi hal yang dibutuhkan Tabel Nilai 1.3.3 Penghitungan derajat keanggotaan Inisialisasi hal yang dibutuhkan 1.3.1 Menyimpan nilai hasil tes Data hasil tes Data hasil tes Data nilai tes 1.3.4 Penghitungan nilai fire strength Data temporary Tabel temporary Variabel linguistik 1.3.2 Ambil statement dari sintaks 1.3.5 Menampilkan tabel Query Tabel hasil Data temporary Pelamar kerja terrekomendasi Pengguna Pengguna Gambar 3.7 Detail Diagram Level 1, Proses 3 Pada proses 3 terdapat lima proses: i. Mengisi Database Tabel dan Field Nilai Nama database, tabel dan field nilai ditentukan oleh pengguna. Proses ini diperlukan sebagai data masukkan dari hasil-hasil tes yang telah di lalui oleh para pelamar kerja yang kemudian nilai tersebut akan di olah sesuai dengan atribut dari variabel fuzzy yang telah ditentukan, variabel-variabel 70 yang akan di-fuzzy query-kan harus berada pada satu tabel yang sama. ii. Penghitungan Derajat Keanggotaan Proses ini menghitung nilai derajat keanggotaan dari masingmasing himpunan fuzzy yang ada dalam variabel fuzzy yang telah ditentukan oleh pengguna. Penghitungan nilai derajat keanggotaan juga di dapat dari fungsi keanggotaan yang telah ditentukan oleh pengguna. Data yang akan di hitung nilai keanggotaannya adalah berdasarkan atribut dari nama database, tabel dan field yang ada pada tabel hasil kemudian hasilnya akan ditampilkan oleh tabel sTemp. iii. Ambil Statement dari sintaks “where” Proses ini adalah proses untuk mengambil variabel linguistik yang ada pada query dan pada sistem ini variabel linguistik terletak pada sintaks “where”. iv. Penghitungan Nilai Firestrength Firestrength menunjukkan seberapa besar rekomendasi yang diberikan oleh sistem (firestrength memiliki nilai kisaran antara 0 – 1). Nilai satu menunjukkan nilai rekomendasi penuh, semakin mendekati nol maka pelamar kerja tersebut semakin tidak direkomendasi. Penghitungan firestrength ini 71 membutuhkan data dari tabel hasil dan variabel linguistik dari query yang ada. Selama melakukan proses penghitungan firestrength, data sementara akan di simpan dalam tabel temporary dan setelah penghitungan selesai, hasil akhir dari penghitungan juga akan di simpan dalam tabel temporary. v. Menampilkan tabel temporary Proses ini merupakan proses yang terakhir dari rangkaian proses dalam sistem ini. Proses ini akan menampilkan tabel temporary yang berisi nilai rekomendasi untuk masingmasing pelamar kerja. Proses ini sangat sederhana karena hanya mengambil data dari tabel temporary dan menampilkannya pada GUI. 3. Proses Penghitungan Firestrength Operator yang bisa digunakan untuk menghitung firestrength hanya ada dua yaitu AND dan OR. Karena dalam query dapat memiliki variabel linguistik yang banyak pada sintaks where-nya, maka dibutuhkan suatu metode agar sistem tahu operand dan operator mana yang harus dikerjakan lebih dahulu. Oleh karena itu, dalam sistem ini akan menggunakan metode Infix pada statement variabel linguistiknya. Sebagai contoh diberikan statement linguistik berikut: 72 Where Tes Kompetensi = ”lulus” and Tes Wawancara = “lulus” or Kreaplin = “baik” Urutan pengerjaan yang seharusnya dilakukan adalah: Where Tes Kompetensi= “lulus” and Pertama Tes Wawancara = “lulus” Kedua or Kreaplin = “baik” a. Pertama, sistem akan mengambil fungsi keanggotaan dari variabel fuzzy tes kompetensi dengan himpunan fuzzy lulus dan variabel fuzzy tes wawancara dengan himpunan fuzzy lulus yang telah ada pada tabel temporary. Kemudian melakukan operasi dengan operator and, karena operatornya and maka data yang diambil adalah nilai minimal dari kedua nilai keanggotaan tersebut. Setelah itu hasilnya di simpan pada tabel temporary. b. Kedua, sistem kemudian mengambil nilai sementara yang ada pada tabel temporary tadi untuk dilakukan operasi penghitungan firestrength dengan operand dan operator berikutnya. Hasilnya akan kembali di simpan dalam tabel temporary. Begitu seterusnya. Setelah seluruh variabel di eksekusi kemudian hasilnya dioperasikan dengan variabel nonfuzzy. 73 c. Karena statement sudah habis, berarti nilai terakhir yang dimasukkan ke dalam tabel temporary adalah hasilnya. Contoh: Statement where pada query adalah: where tes kompetensi = lulus and tes wawancara = lulus or kreaplin = baik and magang = baik Sehingga penghitungan firestrength-nya adalah: Firestrength = Max(Min(teskompetensi_lulus, teswawancara_lulus), Min(kreaplin_baik, magang_baik,)) 4. Pembuatan Graphical User Interface (GUI) Pembuatan Graphical User Interface (GUI) dan program dalam sistem ini menggunakan Delphi v7.0 sebagai bahasa pemrograman. Secara sederhana user interface yang ada sebagai berikut: a. Menu Utama Frame menu utama merupakan tampilan yang disediakan untuk melakukan semua proses yang berhubungan dengan fuzzy query dalam sistem ini. Pada frame ini terdapat tabbedpane di mana masingmasing tab berisi tools sesuai dengan fungsinya (gambar 3.8). 74 Gambar 3.8 Tampilan Menu Utama 1) Tab Data Pelamar Tab data pelamar ini merupakan tab untuk mengisikan datadata para pelamar kerja seperti nama, alamat, tempat lahir, tanggal lahir, usia, dan pengalaman kerja. Pada tab ini terdapat beberapa tombol, yaitu: 75 Gambar 3.9 Tampilan dari Tab Data Pelamar a) Tombol tambah Tombol ini digunakan untuk menambah data-data yang masuk dari para pelamar kerja. Jika tombol ini di tekan maka tabel data pelamar kerja akan menambah baris kosong untuk kemudian baris tersebut di isi dengan data yang diinginkan. 76 Gambar 3.10 Tampilan Frame Data Pelamar Tambah Data b) Tombol Edit Tombol ini digunakan untuk mengubah data-data yang keliru dari para pelamar kerja yang telah dimasukkan sebelumnya, misalnya salah ketik nama, alamat dan lain sebagainya. Dari gambar diatas terlihat jika tombol tersebut di tekan maka akan muncul frame ubah pada jendela berikutnya kemudian pengguna dapat merubah data yang di anggap keliru sesuai dengan apa yang ingin diluruskan. 77 Gambar 3.11 Tampilan Frame Data Pelamar Edit Data c) Tombol hapus Tombol ini digunakan untuk menghapus data-data yang telah dimasukkan kedalam tabel pelamar kerja. Jika tombol ini di tekan maka data yang telah dimasukkan akan di hapus dengan terlebih dahulu muncul tab konfirmasi sebelum menghapus data tersebut. Hal ini diperlukan untuk menghindari terjadinya kesalahan hapus sehingga ketika ingin mengurungkan untuk menghapus data tersebut data masih bisa diselamatkan. 78 Gambar 3.12 Tampilan Frame Data Pelamar Hapus Data 2) Tab Jenis Tes Tab jenis tes ini merupakan tab untuk melakukan inisialisasi awal seperti membuat variabel fuzzy (tampilan sebelah kiri), himpunan fuzzy, fungsi keanggotaan, dan domain (tampilan sebelah kanan). Pada tab ini terdapat beberapa tombol, yaitu: 79 Gambar 3.13 Tampilan dari Tab Jenis Tes a) Tombol Tambah Jenis Tes (Variabel Fuzzy) Tombol ini digunakan untuk menambah jenis tes (variabel fuzzy) pada sistem. Jika tombol ini di tekan maka akan tampil menu untuk menambah jenis tes. Tampilan untuk menambah jenis tes terlihat seperti pada gambar 3.14. 80 Gambar 3.14 Tampilan Frame Tambah Jenis Tes b) Tombol Edit Jenis Tes Tombol ini digunakan untuk mengubah jenis tes (variabel fuzzy) pada sistem. Jika tombol ini di tekan maka akan tampil menu untuk mengubah jenis tes. 81 Gambar 3.15 Tampilan Frame Edit Jenis Tes c) Tombol Hapus Jenis Tes Tombol ini digunakan untuk menghapus jenis tes (variabel fuzzy) pada sistem. Jika tombol ini di tekan maka akan tampil menu untuk menghapus jenis tes. Tampilan untuk menghapus jenis tes terlihat seperti pada gambar 3.16. 82 Gambar 3.16 Tampilan Frame Hapus Jenis Tes d) Tombol Tambah Kriteria (Himpunan Fuzzy) Tombol ini digunakan untuk menambah kriteria (himpunan fuzzy) pada sistem. Jika tombol ini di tekan maka akan tampil menu untuk menambah kriteria (himpunan fuzzy), kurva (fungsi keanggotaan), serta batas-batas (domain). Tampilan untuk batas-batas menyesuaikan, tergantung fungsi keanggotaan yang di pilih. Tampilan untuk menambah kriteria terlihat seperti pada gambar 3.17. 83 Gambar 3.17 Tampilan Frame Tambah Kriteria. e) Tombol Edit Kriteria Tombol ini digunakan untuk mengubah kriteria (himpunan fuzzy) pada sistem. Jika tombol ini di tekan maka akan tampil menu untuk mengubah kriteria (himpunan fuzzy), kurva (fungsi keanggotaan) serta batas-batas (domain). Tampilan untuk batasbatas menyesuaikan, tergantung fungsi keanggotaan yang di pilih. Tampilan untuk mengubah kriteria terlihat seperti pada gambar 3.18. 84 Gambar 3.18 Tampilan Frame Edit Kriteria f) Tombol Hapus Kriteria Tombol ini digunakan untuk menghapus kriteria (himpunan fuzzy) pada sistem. Jika tombol ini di tekan maka akan tampil menu untuk menghapus kriteria (himpunan fuzzy), kurva (fungsi keanggotaan) serta batas-batas (domain). Tampilan untuk menghapus kriteria terlihat seperti pada gambar 3.19. 85 Gambar 3.19 Tampilan Frame Hapus Kriteria 3) Tab Input Nilai Tab input nilai ini merupakan tab untuk memasukkan nilainilai dari berbagai macam tes yang telah di lalui oleh para pelamar kerja, misalnya: tes kompetensi, tes wawancara, beberapa macam psikotes, test TOEFL, dan lain-lain. Pada tab ini terdapat dua tombol, yaitu tombol Ok untuk menyimpan nilai yang kemudian akan di taruh pada tabel hasil dan tombol batal untuk membatalkan proses penyimpanan nilai. Apabila tombol Ok di tekan maka akan muncul frame dialog untuk mengkonfirmasi jadi atau tidaknya data di simpan pada tabel hasil. Untuk lebih jelasnya dapat di lihat pada 86 gambar 3.20. Gambar 3.20 Tampilan Frame Ok Pada Tab Input Nilai 4) Tab Hasil Nilai Tab hasil nilai ini merupakan tab untuk menampilkan nilainilai dari berbagai macam tes yang telah di lalui oleh para pelamar kerja, misalnya: tes kompetensi, tes wawancara, beberapa macam psikotes, test TOEFL, dan lain-lain. Tampilan untuk tab hasil nilai terlihat seperti pada gambar 3.21. 87 Dalam tab ini terdapat tombol seleksi Gambar 3.21 Tampilan Frame Hasil Nilai Pada frame ini terdapat tombol seleksi yang apabila tombol ini di tekan akan tampil menu seleksi pelamar yang didalamnya terdapat proses query serta penghitungan firestrength yang akhirnya akan memunculkan seberapa besar para pelamar kerja dapat di terima (memiliki kriteria) untuk mengisi posisi yang ditawarkan. 88 Gambar 3.22 Tampilan Frame Seleksi Pelamar K. Verifikasi Proses verifikasi perangkat lunak dilakukan berdasarkan pemasangan perangkat lunak pendukung seperti database server serta MySQL editor kedalam komputer agar database yang ada pada perangkat lunak utama dapat di akses di komputer. Apabila perangkat lunak utama masih belum bisa di akses, maka dilakukan pengecekkan baik terhadap perangkat lunak pendukung maupun terhadap configuration setting yang ada pada perangkat lunak utamanya. L. Validasi Pengujian validasi perangkat lunak ini dilakukan dengan cara melakukan proses pengamatan atau pemantauan terhadap kinerja orang-orang yang di anggap lulus oleh sistem serta menguji kinerja orang-orang tersebut dengan kasus yang di buat oleh pihak HRD sehingga pihak HRD dapat memastikan apakah orang-orang itu benar-benar memiliki kemampuan sesuai 89 dengan apa yang telah di analisa oleh sistem. Waktu pengujian bisa dilakukan dengan memanfaatkan masa kontrak karyawan atau sekurang-kurangnya tiga bulan masa kerja. Dari proses pengujian serta pengamatan tersebut diharapkan akan terjadi kesesuaian antara hasil penghitungan sistem perangkat lunak dengan keadaan sebenarnya sehingga pada akhirnya perangkat lunak ini dapat dipertanggung jawabkan serta dapat dijadikan rujukan dalam setiap proses penseleksian pegawai baru di kemudian hari. 90 BAB IV IMPLEMENTASI DAN PENGUJIAN A. Perangkat Lunak 5. Implementasi Perangkat Lunak Pada percobaan ini akan di uji jalannya aplikasi sesuai dengan urutan proses yang telah di rancang dan hasil yang diharapkan adalah data para pelamar kerja yang terokemendasi berdasarkan kriteria-kriteria yang telah ditetapkan oleh pengguna. Pada pengujian kali ini data yang di ambil adalah data para pelamar kerja yang ingin mengisi posisi sebagai electrician dan datanya dapat di lihat pada gambar 4.1 berikut. Gambar 4.1 Tabel Data Pelamar 91 Kemudian pengguna menentukan variabel fuzzy yang diperoleh dari kriteria-kriteria yang akan di ambil untuk menseleksi para pelamar kerja. Kriteria-kriteria tersebut berupa persyaratan serta jenis-jenis tes yang harus di lalui dalam sebuah proses penerimaan karyawan baru untuk posisi electrician yang terdiri dari: a. Tes Kompetensi Dari kriteria tes kompetensi ini kemudin di buat kategori “baik” untuk dijadikan sebagai himpunan fuzzy, fungsi keanggotaan SPertumbuhan di buat untuk memenuhi kategori tes kompetensi serta di buat nilai domainnya dengan nilai terendah 60 dan tertinggi 100. Gambar 4.2 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Kompetensi 92 b. Tes Wawancara Himpunan fuzzy dari variabel fuzzy tes wawancara adalah “baik”, fungsi keanggotaan yang di pakai adalah fungsi keanggotaan SPertumbuhan dan nilai domai untuk tes wawancara adalah 60 sampai dengan 100. Gambar 4.3 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Wawancara c. Tes Kreaplin Himpunan fuzzy untuk tes kreaplin adalah “cukup”, “baik” dan “topskor”. Fungsi keanggotaan yang di pakai adalah fungsi keanggotaan bahu dan nilai domai untuk tes kreaplin dari tiap-tiap kategori adalah cukup 5 – 8, baik 7 – 11, dan top skor 10 - 14. 93 Gambar 4.4 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Kreaplin Cukup Gambar 4.5 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Kreaplin Baik 94 Gambar 4.6 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Tes Kreaplin Topskor d. Magang Himpunan fuzzy untuk magang adalah “baik”, fungsi keanggotaan yang di pakai adalah fungsi keanggotaan S-Pertumbuhan dan nilai domai untuk magang adalah 60 sampai dengan 100. 95 Gambar 4.7 Variabel, Himpunan, Fungsi Keanggotaan, Serta Nilai Domain untuk Kriteria Magang Setelah variabel, himpunan, fungsi keanggotaan serta domain dari logika fuzzy di buat langkah selanjutnya adalah memasukkan semuan nilai hasil ujian yang telah distandardkan sebelumnya ke dalam tabel nilai tes dan hasilnya akan terlihat seperti gambar 4.8 berikut ini. 96 Gambar 4.8 Tabel Input Nilai (Data 34 Nilai Teratas) Setelah semua nilai hasil tes dimasukkan, langkah selanjutnya adalah menyimpan nilai tersebut dan hasilnya dapat dilihat pada tabel hasil. Jika terjadi kekeliruan dalam memasukkan data, pengguna dapat langsung mengubahnya dengan cara mengklik data pada kolom tabel yang datanya keliru kemudian mengubahnya dengan cara memasukkan langsung data baru pada kolom tabel tersebut sebelum tab input ini di tutup. Karena tabel nilai ini merupakan tabel temporary maka data-data yang dimasukkan akan hilang dengan sendirinya ketika pengguna menekan tombol OK atau pengguna menutup jendela tab input nilai. Jadi, pastikan pengguna memasukkan data dengan benar sebelum menekan tombol Ok atau sebelum 97 menutup tab input nilai. Gambar 4.9 Tabel Hasil (Data 30 Nilai Teratas) Dari tabel hasil ini pengguna dapat memulai proses penseleksian pelamar kerja yang akan direkomendasikan untuk mengisi posisi electrician dengan menekan tombol seleksi yang terletak pada pojok kiri bawah dari layout tabel hasil dengan menggunakan mouse. Ketika tombol seleksi di tekan maka akan muncul frame seleksi. Di dalam frame ini pada kolom sisi kanan atas memuat semua variabel serta himpunan fuzzy yang telah di buat sebelumnya sedangkan pada kolom sisi kiri atas digunakan untuk menyaring kategori yang telah kita tentukan sebagai proses peng-query-an. Selain itu pada frame ini juga terdapat kolom untuk variabel nonfuzzy yang datanya di ambil dari tabel 98 data pelamar. Variabel nonfuzzy ini berfungsi untuk mengakomodasi kriteria yang cukup hanya di lihat dengan kategori ya dan tidak. Misalkan standard yang ditetapkan oleh pengguna untuk posisi electrician adalah tes kompetensi baik, tes wawancara baik, tes kreaplin baik, magang baik, serta pengalaman kerja tidak diutamakan, maka pengguna dapat menyaringnya dengan menekan tombol panah warna hijau dengan sebelumnya menekan kursor mouse pada kolom variabel serta himpunan fuzzy yang diinginkan, dilanjutkan dengan penyaringan kategori pada variabel nonfuzzy. Setelah proses peng-query-an dilakukan hal berikutnya yang harus dilakukan adalah menekan tombol cari pelamar sesuai dengan filter dan hasil dari pencarian tersebut dapat di lihat pada tabel yang terdapat di kolom bawah dari frame seleksi. 99 Gambar 4.10 Frame Seleksi Pelamar Tabel pada frame seleksi merupakan tabel temporary maka data itu akan hilang dengan sendirinya ketika pengguna menekan tombol OK atau menutup jendela tab seleksi pelamar atau membuat filter seleksi baru. Jadi, pastikan pengguna telah mendokumentasikan data tersebut atau jika sudah terlanjur maka ulangi tahap penseleksiannya. Untuk memudahkan pemahaman urutan kerja dari perangkat lunak ini, dapat dilihat pada diagram alir pada gambar 4.11. 100 ............ Mulai Input Nilai Data pelamar Masukkan dan simpan nilai-nilai tes Masukkan Data Pelamar Hasil Nilai Tambah/edit/ hapus data? Ya Seleksi Tidak Jenis tes Tentukan jenis dan kriteria yang ingin di seleksi (proses peng-query-an) Masukkan jenis dan kriteria tes Eksekusi query yang telah di buat Tambah/edit/hap us jenis dan kriteria tes? Ya Tampilan Hasil seleksi Tidak ............ Selesai Gambar 4.11 Diagram Alir Cara Kerja Sistem 6. Analisa Penghitungan Fungsi Keanggotaan Fuzzy Dari penjelasan pembahasan sebelumnya, nilai yang tersaji pada tabel seleksi pelamar di dapat dari proses penghitungan data yang bersumber dari tabel hasil. Nilai-nilai tersebut merupakan hasil penghitungan dari tiap-tiap variabel, himpunan, serta fungsi keanggotaan yang telah ditentukan 101 sebelumnya. Adapun penjelasan lebih lengkapnya dapat di lihat pada pembahasan berikut ini. a. Tes Kompetensi Pada kolom tes kompetensi, nilai himpunan “lulus” merupakan nilai yang di dapat dari penghitungan logika fuzzy dengan menggunakan fungsi keanggotaan S-Pertumbuhan. Sebagai contoh penghitungan dapat di ambil beberapa sampel data dari para pelamar kerja berikut ini. 1) Umar Hadi Waluyo Nilai tes kompetensi = 77, batas bawah (α) = 60, batas atas (γ) = 100. Maka nilai fungsi keanggotaan untuk himpunan “lulus” pada variabel tes kompetensi bagi Umar Hadi Waluyo adalah: µLulus[77] = 2((x – α)/(γ – α))2 = 2((77 – 60)/(100 – 60))2 = 2((17)/(40))2 = 2(0,425)2 = 2(0,180625) = 0,36125 2) Arif Setiyawan Nilai tes kompetensi = 70, batas bawah (α) = 60, batas atas (γ) = 100. Maka nilai fungsi keanggotaan untuk himpunan “lulus” pada variabel tes kompetensi bagi Arif Setiyawan adalah: µLulus[70] = 2((x – α)/(γ – α))2 102 = 2((70 – 60)/(100 – 60))2 = 2((10)/(40))2 = 2(0,25)2 = 2(0,0625) = 0,125 3) Agus Joko Umbaran Nilai tes kompetensi = 58, batas bawah (α) = 60, batas atas (γ) = 100. Maka nilai fungsi keanggotaan untuk himpunan “lulus” pada variabel tes kompetensi bagi Agus Joko Umbaran adalah 0 karena nilai yang dimiliki oleh Agus Joko Umbaran ≤ 60. Sesuai dengan rumus fungsi keanggotaan S-Pertumbuhan bahwa apabila nilai x ≤ batas bawah (α) maka nilai keanggotaannya = 0. Untuk penghitungan nilai fungsi keanggotaan para pelamar kerja lainnya, digunakan rumus yang sama serta hasilnya dapat di lihat pada kolom “lulus” pada tabel temporary pada frame seleksi pelamar. b. Tes Wawancara Pada kolom tes wawancara, nilai himpunan “lulus” merupakan nilai yang di dapat dari penghitungan logika fuzzy dengan menggunakan fungsi keanggotaan S-Pertumbuhan. Sebagai contoh penghitungan dapat di ambil beberapa sampel data dari para pelamar kerja berikut ini. 1) Umar Hadi Waluyo Nilai tes wawancara = 66, batas bawah (α) = 60, batas atas (γ) = 100. 103 Maka nilai fungsi keanggotaan untuk himpunan “lulus” pada variabel tes wawancara bagi Umar Hadi Waluyo adalah: µLulus[66] = 2((x – α)/(γ – α))2 = 2((66 – 60)/(100 – 60))2 = 2((6)/(40))2 = 2(0,15)2 = 2(0,0225) = 0,045 2) Arif Setiyawan Nilai tes wawancara = 78, batas bawah (α) = 60, batas atas (γ) = 100. Maka nilai fungsi keanggotaan untuk himpunan “lulus” pada variabel tes wawancara bagi Arif Setiyawan adalah: µLulus[78] = 2((x – α)/(γ – α))2 = 2((78 – 60)/(100 – 60))2 = 2((18)/(40))2 = 2(0,45)2 = 2(0,2025) = 0,405 3) Agus Joko Umbaran Nilai tes wawancara = 65, batas bawah (α) = 60, batas atas (γ) = 100. Maka nilai fungsi keanggotaan untuk himpunan “lulus” pada variabel tes wawancara bagi Agus Joko Umbaran adalah: 104 µLulus[65] = 2((x – α)/(γ – α))2 = 2((65 – 60)/(100 – 60))2 = 2((5)/(40))2 = 2(0,125)2 = 2(0,015625) = 0,03125 Untuk penghitungan nilai fungsi keanggotaan para pelamar kerja lainnya, menggunakan rumus yang sama serta hasilnya dapat di lihat pada kolom “lulus_1” pada tabel temporary pada frame seleksi pelamar. c. Kreaplin Pada kolom kreaplin, nilai himpunan “baik” merupakan nilai yang di dapat dari penghitungan logika fuzzy dengan menggunakan fungsi keanggotaan bahu. Sebagai contoh penghitungan dapat di ambil beberapa sampel data dari para pelamar kerja berikut ini. 1) Umar Hadi Waluyo Nilai kreaplin = 7, kurva bahu merupakan perpaduan dari dua buah kurva linear serta sebuah kurva segitiga, karena himpunan “baik” terletak pada kurva segitiga maka domain (batas) yang digunakan adalah domain kurva segitiga dimana batas 1 = 7, batas 2 = 9, batas 3 = 11. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel tes kreaplin bagi Umar Hadi Waluyo adalah 0 karena nilai yang dimiliki oleh Umar Hadi Waluyo ≤ 7. Sesuai dengan rumus 105 fungsi keanggotaan segitiga bahwa apabila nilai x ≤ batas 1 (a) maka nilai keanggotaannya = 0. 2) Arif Setiyawan Nilai kreaplin = 6, kurva bahu merupakan perpaduan dari dua buah kurva linear serta sebuah kurva segitiga, karena himpunan “baik” terletak pada kurva segitiga maka domain (batas) yang digunakan adalah domain kurva segitiga dimana batas 1 = 7, batas 2 = 9, batas 3 = 11. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel tes kompetensi bagi Arif Setiyawan adalah 0 karena nilai yang dimiliki oleh Arif Setiyawan ≤ 7. Sesuai dengan rumus fungsi keanggotaan segitiga bahwa apabila nilai x ≤ batas 1 (a) maka nilai keanggotaannya = 0. 3) Agus Joko Umbaran Nilai kreaplin = 5, kurva bahu merupakan perpaduan dari dua buah kurva linear serta sebuah kurva segitiga, karena himpunan “baik” terletak pada kurva segitiga maka domain (batas) yang digunakan adalah domain kurva segitiga dimana batas 1 (a) = 7, batas 2 (b) = 9, batas 3 (c) = 11. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel kreaplin bagi Agus Joko Umbaran adalah 0 karena nilai yang dimiliki oleh Agus Joko Umbaran ≤ 7. Sesuai dengan rumus fungsi keanggotaan segitiga bahwa apabila nilai x ≤ batas 1 (a) maka nilai keanggotaannya = 0. 106 Untuk penghitungan nilai fungsi keanggotaan para pelamar kerja lainnya, menggunakan rumus yang sama serta hasilnya dapat dilihat pada kolom “baik” pada tabel temporary pada frame seleksi pelamar. Adapun untuk mengetahui proses penghitungan dengan nilai yang memenuhi persyaratan himpunan “baik” diberikan contoh sebagai berikut. 1) Rosit Evendi Nilai kreaplin = 8, batas 1 = 7, batas 2 = 9, batas 3 = 11. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel kreaplin bagi Rosit Evendi adalah: µbaik[8] = (x – a)/(b – a) = (8 – 7)/(9 – 7) = 0,5 2) Abdul Manan Nilai kreaplin = 9, batas 1 = 7, batas 2 = 9, batas 3 = 11. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel kreaplin bagi Abdul Manan adalah 1 karena nilai yang dimiliki oleh Abdul Manan = 9. Sesuai dengan rumus fungsi keanggotaan segitiga bahwa apabila nilai x = batas 2 (b) maka nilai keanggotaannya = 1. 3) Candra Agung Nilai kreaplin = 10, batas 1 = 7, batas 2 = 9, batas 3 = 11. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel kreaplin 107 bagi Candra Agung adalah: µbaik[10] = (c – x)/(c – b) = (11 – 10)/(11 – 9) = 0,5 d. Magang Pada kolom magang, nilai himpunan “baik” merupakan nilai yang di dapat dari penghitungan logika fuzzy dengan menggunakan fungsi keanggotaan S-Pertumbuhan. Sebagai contoh penghitungan dapat di ambil beberapa sampel data dari para pelamar kerja berikut ini. 1) Umar Hadi Waluyo Nilai magang = 70, batas bawah (α) = 60, batas atas (γ) = 100. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel magang bagi Umar Hadi Waluyo adalah: µLulus[77] = 2((x – α)/(γ – α))2 = 2((70 – 60)/(100 – 60))2 = 2((10)/(40))2 = 2(0,25)2 = 2(0,0625) = 0,125 2) Arif Setiyawan Nilai magang = 70, batas bawah (α) = 60, batas atas (γ) = 100. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel 108 magang bagi Arif Setiyawan adalah: µLulus[70] = 2((x – α)/(γ – α))2 = 2((70 – 60)/(100 – 60))2 = 2((10)/(40))2 = 2(0,25)2 = 2(0,0625) = 0,125 3) Agus Joko Umbaran Nilai magang = 60, batas bawah (α) = 60, batas atas (γ) = 100. Maka nilai fungsi keanggotaan untuk himpunan “baik” pada variabel magang bagi Agus Joko Umbaran adalah 0 karena nilai yang dimiliki oleh Agus Joko Umbaran ≤ 60. Sesuai dengan rumus fungsi keanggotaan S-Pertumbuhan bahwa apabila nilai x ≤ batas bawah (α) maka nilai keanggotaannya = 0. Untuk penghitungan nilai fungsi keanggotaan para pelamar kerja lainnya, digunakan rumus yang sama serta hasilnya dapat di lihat pada kolom “baik_2” pada tabel temporary pada frame seleksi pelamar. 7. Analisa Penghitungan Firestrength Dari frame seleksi pelamar di atas dapat dilihat statement “where” pada proses peng-query-an tersebut adalah: Where tes kompetensi = lulus and tes wawancara = lulus and tes kreaplin = baik and magang = baik and pengalaman kerja = all. 109 Sehingga penghitungan firestrength-nya adalah: Firestrength = Min(µtes kompetensi lulus, µtes wawancara lulus, µtes kreaplin baik, µmagang baik) Hasil dari query di atas kemudian di saring kembali oleh masukkan nonfuzzy yang telah di buat yaitu pengalaman kerja = all. Sebagai contoh penghitungan di ambil dari data beberapa pelamar kerja sebagai berikut. 1) Saleh Al-farabi Dari tabel temporary pada frame seleksi pelamar dapat di lihat bahwa Saleh Al-farabi memiliki data sebagai berikut: • Kompetensi = 0,98875 • Wawancara = 0,93875 • Kreaplin = 1 • Magang = 0,5 Sehingga penghitungan firestrength-nya adalah: Firesrength = Min(0,98875,0,93875,1, 0,5) = 0,5 2) Suryana Dari tabel temporary pada frame seleksi pelamar dapat di lihat bahwa Suryana memiliki data sebagai berikut: • Kompetensi = 0,93875 • Wawancara = 0,93875 • Kreaplin = 1 • Magang = 0,5 110 Sehingga penghitungan firestrength-nya adalah: Firesrength = Min(0,93875,0,93875,1, 0,5) = 0,5 3) Dirza Suhendra Dari tabel temporary pada frame seleksi pelamar dapat di lihat bahwa Dirza Suhendra memiliki data sebagai berikut: • Kompetensi = 0,84875 • Wawancara = 0,68 • Kreaplin = 0,5 • Magang = 0,5 Sehingga penghitungan firestrength-nya adalah: Firesrength = Min(0,84875, 0,68,0,5,0,5) = 0,5 Untuk penghitungan nilai fungsi keanggotaan para pelamar kerja lainnya, digunakan rumus yang sama serta hasilnya dapat dilihat pada kolom “firestrength” pada tabel temporary pada frame seleksi pelamar. Pada kolom firestrength dalam tabel seleksi pelamar, hasil penghitungannya kemudian diurutkan dari nilai firestrength tertinggi hingga nilai firestrength terendah. Hal ini dimaksudkan agar pengguna dapat dengan mudah menentukan para pelamar kerja yang dinyatakan di terima untuk posisi electrician dengan cara mengambil data para pelamar kerja dari nilai firestrength tertinggi sebanyak yang dibutuhkan. Apabila perusahaan hanya membutuhkan tiga orang untuk ditempatkan pada posisi electrician maka nama-nama yang masuk 111 nominasi adalah Saleh Al-farabi, Suryana, dan Dirza Suhendra. 8. Perbandingan Hasil Penghitungan Sistem Lama Dengan Sistem Baru Membandingkan antara sistem yang di buat saat ini dengan sistem yang sudah ada pada perusahaan atau instansi menjadi suatu keniscayaan untuk mengetahui apakah sistem yang baru ini nantinya dapat menggantikan peran sistem sebelumnya. a. Hasil Pembobotan Nilai Pembobotan yang ditetapkan oleh pihak HRD P.T. BAT Indonesia Tbk. adalah untuk nilai tes kompetensi x 0,3, tes wawancara x 0,3, kreaplin x 0,2, dan magang x 0,2. Hasil dari pembobotan terhadap nilai tes para pelamar kerja secara lengkap dapat di lihat pada tabel 4.1 berikut. 112 Tabel. 4.1 Tabel 25 Teratas Hasil Pembobotan Nilai No. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 No Id 36 17 30 63 64 28 16 12 13 56 11 43 26 27 29 50 44 66 65 34 10 18 70 59 53 Nama Esti Wahyuningsih Saiful Jauhari Miftahul Jannah Saleh Al-Farabi Suryana Ferdinand Anton Herilmiwati Abdul Manan Candra Agung Agung Setiadi Rosit Evendi Dirza Suhendra Hendra Ermi Devitra Joko Triyanto Maulani Ferdiyansyah Said Karim Johar Haries Sutamin Sunaryo Denny Yuliansyah Dedi Subianto Akbar Nugraha Jarot Adi Sutarto Beni Wahyudi Khairul Fuadi Tes Kompetensi 1 0,9 0,99 0,97 0,93 0,8 0,91 1 0,96 0,83 0,98 0,89 0,88 0,81 0,79 0,84 0,92 0,82 0,9 0,8 0,82 0,89 0,91 0,8 0,92 Bobot Hasil 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,27 0,297 0,291 0,279 0,24 0,273 0,3 0,288 0,249 0,294 0,267 0,264 0,243 0,237 0,252 0,276 0,246 0,27 0,24 0,246 0,267 0,273 0,24 0,276 Tes Wawancara 1 0,9 0,99 0,93 0,93 1 0,8 0,8 0,78 0,97 0,77 0,84 0,96 0,99 0,88 0,82 0,78 0,8 0,76 0,85 0,75 0,77 0,7 0,8 0,59 Bobot Hasil Kreaplin Bobot Hasil Magang Bobot Hasil Hasil 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,3 0,27 0,297 0,279 0,279 0,3 0,24 0,24 0,234 0,291 0,231 0,252 0,288 0,297 0,264 0,246 0,234 0,24 0,228 0,255 0,225 0,231 0,21 0,24 0,177 0,79 0,86 0,57 0,64 0,64 0,71 0,79 0,64 0,71 0,5 0,57 0,57 0,5 0,5 0,57 0,64 0,57 0,64 0,57 0,57 0,57 0,5 0,57 0,57 0,79 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,158 0,172 0,114 0,128 0,128 0,142 0,158 0,128 0,142 0,1 0,114 0,114 0,1 0,1 0,114 0,128 0,114 0,128 0,114 0,114 0,114 0,1 0,114 0,114 0,158 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,7 0,7 0,8 0,7 0,7 0,7 0,7 0,7 0,8 0,7 0,7 0,7 0,6 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,16 0,16 0,16 0,16 0,16 0,16 0,16 0,16 0,16 0,16 0,16 0,16 0,14 0,14 0,16 0,14 0,14 0,14 0,14 0,14 0,16 0,14 0,14 0,14 0,12 0,918 0,872 0,868 0,858 0,846 0,842 0,831 0,828 0,824 0,8 0,799 0,793 0,792 0,78 0,775 0,766 0,764 0,754 0,752 0,749 0,745 0,738 0,737 0,734 0,731 113 b. Perbandingan Hasil Penghitungan Pembobotan Dengan Firestrength Dari hasil penghitungan dengan cara pembobotan terlihat bahwa Esti Wahyuningsih menempati posisi paling puncak, dengan kata lain Esti Wahyuningsih memiliki nilai bobot paling tinggi, sedangkan dari hasil penghitungan firestrength Saleh Al-farabi menempati posisi paling puncak dan ini juga berarti bahwa Saleh Al-farabi memiliki nilai derajat keanggotaan paling tinggi dari proses peng-query-an yang telah dilakukan. Pada proses penghitungan firestength nama Esti Wahyuningsih tidak termasuk, hal ini dikarenakan Esti Wahyuningsih dikategorikan oleh sistem (logika fuzzy) sebagai orang yang tidak termasuk dalam kategori yang ditetapkan oleh pengguna, yaitu: tes kompetensi lulus, tes wawancara lulus, tes kreaplin baik, magang baik, dan pengalaman kerja tidak diutamakan. Hasil penghitungan dari fungsi keanggotaan pada himpunan fuzzy kreaplin baik untuk Esti Wahyuningsih adalah 0, karena nilai yang dimiliki oleh Esti Wahyuningsih ≥ 11. Sesuai dengan rumus fungsi keanggotaan segitiga bahwa apabila nilai x ≥ batas 3 (11) maka nilai keanggotaannya = 0. Akan tetapi apabila kategori dalam proses peng-query-an di ubah menjadi tes kompetensi lulus, tes wawancara lulus, tes kreaplin topskor, magang baik, dan pengalaman kerja tidak diutamakan maka Esti Wahyuningsih termasuk dalam kategori tersebut, karena pada himpunan fuzzy kreaplin topskor nilai yang dimiliki oleh Esti Wahyuningsih menjadi 114 anggota himpunan fuzzy tersebut dengan perincian perhitungannya adalah: µLulus[11] = (x – b)/(b – a) = (11 – 10)/(14 – 10) = 1/4 = 0,25 Hal yang sama juga terjadi pada Saiful Jauhari yang menempati posisi kedua atau satu tingkat di bawah Esti Wahyuningsih dalam penghitungan menggunakan metode pembobotan. Artinya, seberapa pun tinggi atau rendah nilai hasil tesnya akan menjadi tidak terseleksi oleh sistem ketika nilai tersebut tidak termasuk dalam kategori yang ditentukan. Gambar 4.18 Hasil Seleksi Dengan Mengubah Kategori Kreaplin Menjadi Topskor. 115 BAB V KESIMPULAN DAN DISKUSI C. Kesimpulan Dari hasil pegujian dan implementasi alat, maka dapat disimpulkan bahwa peneltian ini telah berhasil dalam merancang dan membuat sebuah alat yang dapat digunakan oleh perusahaan/institusi khususnya bagi Human and Resource Department (HRD) dalam merekomendasikan siapa saja para pelamar kerja yang dinyatakan layak untuk mengisi posisi yang tersedia. Di antara bukti keberhasilan ini adalah sebagai berikut: 1. Pada perangkat lunak ini logika fuzzy berhasil dimasukkan kedalam proses peng-query-an dalam sebuah database. Hal ini dibuktikan dari keberhasilan perangkat lunak ini dalam mengeksekusi setiap proses pengquery-an yang diberikan oleh pengguna ke dalam sistem. 2. Perangkat lunak ini dapat merekomendasikan siapa saja para pelamar kerja yang dinyatakan layak untuk mengisi posisi tertentu berdasarkan kriteria yang telah di buat sebelumnya. D. Diskusi Selama dan setelah penelitian ini terlaksana, sistem masih memiliki kekurangan-kekurangan sebagai berikut: 1. Perangkat lunak ini hanya memberikan nilai derajat perekomendasian, keputusan yang sebenarnya tergantung pada pengguna. 116 2. Untuk pengambilan keputusan yang lebih baik lagi dimungkinkan untuk menggunakan metode kombinasi (hybrid) terhadap logika fuzzy, contohnya adalah menggabungkan logika fuzzy dengan jaringan syaraf tiruan. 117 DAFTAR PUSTAKA Buku Referensi Badriyah, Tessy. 2003. Oracle Academic Initiative Oracle9i Introduction to SQL. Surabaya: Politeknik Elektronika Negeri Surabaya. Galindo, José, Urrutia, Angélica and Piattini, Mario. 2006. Fuzzy Databases: Modeling, Design and Implementation. Harshey: Idea Group Publishing Kusumadewi, Sri dan Purnomo, Hari. 2004. Aplikasi Logika Fuzzy Untuk Pendukung Keputusan. Yogyakarta: Graha Ilmu. Timothy, J. Ross. 2004. Fuzzy Logic With Engineering Applications. Chichester: John Wiley & Sons. Artikel dan Jurnal http://database.about.com. http://fuzzy.sonalysts.com/How Fuzzy Query Works.html Malaysian Journal of Computer Science, Vol. 10 No. 1, June 1997, pp. 42-46 118 LAMPIRAN 119 A. Listing Program Delphi 1. Halaman Depan unit MainForm; implementation uses DataPelamarForm, DataJenisTesForm, NilaiForm, HasilNilaiForm, Rutinitas; {$R *.dfm} {$R winxp.res} procedure TfrmMain.FormCreate(Sender: TObject); begin Self.WindowState := wsMaximized; end; procedure TfrmMain.actPelamarExecute(Sender: TObject); begin DataPelamar; end; procedure TfrmMain.actNilaiExecute(Sender: TObject); begin InputNilai; end; procedure TfrmMain.actJenisTesExecute(Sender: TObject); begin DataJenisTes; end; procedure TfrmMain.actHasilExecute(Sender: TObject); begin HasilNilai; end; end. 2. Form Data Pelamar unit DataPelamarForm; procedure DataPelamar; implementation uses DMForm, Rutinitas, TambahPelamarForm, DateUtils; {$R *.dfm} procedure DataPelamar; var 120 aComponent: TComponent; begin aComponent := Application.FindComponent('frmDataPelamar'); if not Assigned(aComponent) then frmDataPelamar := TfrmDataPelamar.Create(Application); frmDataPelamar.Show; end; procedure TfrmDataPelamar.qryPelamarNewRecord(DataSet: TDataSet); function GetKode: string; begin with qryRutinitas do try SQL.Text := 'select max(idpelamar) from pelamar'; Open; First; Result := Format('%.5d',[Fields[0].AsInteger+1]); finally Free; end; end; begin qryPelamarkode.AsString := GetKode; end; procedure TfrmDataPelamar.qryPelamarAfterInsert(DataSet: TDataSet); begin end; procedure TfrmDataPelamar.qryPelamarCalcFields(DataSet: TDataSet); begin if qryPelamartgllahir.IsNull then qryPelamarUsia.AsVariant := null else qryPelamarUsia.AsString := IntToStr(YearsBetween(qryPelamartgllahir.AsDateTime,Date)) + ' Th'; end; 121 procedure TfrmDataPelamar.qryPelamarBeforePost(DataSet: TDataSet); function IDPelamar: Integer; begin with qryRutinitas do try SQL.Text := 'select max(idpelamar) from pelamar'; Open; First; Result := Fields[0].AsInteger + 1; finally Free; end; end; begin if qryPelamaridpelamar.IsNull then qryPelamaridpelamar.AsInteger := IDPelamar; end; procedure TfrmDataPelamar.FormCreate(Sender: TObject); var i: Integer; begin for i := 0 to qryPelamar.FieldCount -1 do begin if LowerCase(qryPelamar.Fields[i].FieldName) = 'nonfuzzy' then begin qryPelamar.Fields[i].DisplayLabel := GetNonFuzzy; Break; end; end; inherited; end; procedure TfrmDataPelamar.qryPelamarAfterEdit(DataSet: TDataSet); begin TambahPelamar(DataSet) end; 122 end. 3. Form Jenis Tes unit DataJenisTesForm; procedure DataJenisTes; implementation uses DMForm, TambahJenisTesForm, TambahKriteriaForm, Rutinitas; {$R *.dfm} procedure DataJenisTes; var aComponent: TComponent; begin aComponent := Application.FindComponent('frmDataJenisTes'); if not Assigned(aComponent) then frmDataJenisTes := TfrmDataJenisTes.Create(Application); frmDataJenisTes.Show; end; procedure TfrmDataJenisTes.qryJenisTesAfterInsert(DataSet: TDataSet); begin TambahJenisTes(DataSet); end; procedure TfrmDataJenisTes.qryJenisTesAfterOpen(DataSet: TDataSet); begin qryKriteria.Close; qryKriteria.Open; end; procedure TfrmDataJenisTes.qryKriteriaNewRecord(DataSet: TDataSet); begin with DataSet do begin FieldByName('idjenistes').AsInteger := qryJenisTesidjenistes.AsInteger; FieldByName('kurva').AsString := 'Linear Naik'; end; end; 123 procedure TfrmDataJenisTes.qryKriteriaAfterInsert(DataSet: TDataSet); begin TambahKriteria(DataSet); end; procedure TfrmDataJenisTes.actHapusKriteriaExecute(Sender: TObject); begin if KonfirmasiHapus then qryKriteria.Delete; end; procedure TfrmDataJenisTes.actTambahKriteriaExecute(Sender: TObject); begin qryKriteria.Append; end; procedure TfrmDataJenisTes.actEditKriteriaExecute(Sender: TObject); begin qryKriteria.Edit; end; procedure TfrmDataJenisTes.qryKriteriaAfterPost(DataSet: TDataSet); begin qryJenisTes.Locate('idjenistes',qryKriteriaidjenistes.AsInteger,[]); end; procedure TfrmDataJenisTes.qryKriteriaBeforePost(DataSet: TDataSet); begin with DataSet do begin if (FieldByName('kurva').AsString = 'Linear Naik') or (FieldByName('kurva').AsString = 'Linear Turun') then begin FieldByName('c').AsVariant := null; FieldByName('d').AsVariant := null; end else if (FieldByName('kurva').AsString = 'Kurva Segitiga') or (FieldByName('kurva').AsString = 'Kurva S Pertumbuhan') or 124 (FieldByName('kurva').AsString = 'Kurva S Penyusutan') then FieldByName('d').AsVariant := null; end; end; procedure TfrmDataJenisTes.qryKriteriaaValidate(Sender: TField); begin if (qryKriteriakurva.AsString = 'S Pertumbuhan') or (qryKriteriakurva.AsString = 'S Penyusutan') then if not(qryKriteriac.IsNull) then qryKriteriab.AsFloat := qryKriteriaa.AsFloat + ((qryKriteriac.AsFloat - qryKriteriaa.AsFloat) / 2); end; procedure TfrmDataJenisTes.qryKriteriacValidate(Sender: TField); begin if (qryKriteriakurva.AsString = 'S Pertumbuhan') or (qryKriteriakurva.AsString = 'S Penyusutan') then if not(qryKriteriaa.IsNull) then qryKriteriab.AsFloat := qryKriteriaa.AsFloat + ((qryKriteriac.AsFloat - qryKriteriaa.AsFloat) / 2); end; end. 4. Form Tambah Jenis Tes unit TambahJenisTesForm; function TambahJenisTes(Dataset: TDataSet): Boolean; implementation uses DataJenisTesForm; {$R *.dfm} function TambahJenisTes(Dataset: TDataSet): Boolean; begin frmTambahJenisTes := TfrmTambahJenisTes.Create(Application); with frmTambahJenisTes do try dsMaster.DataSet := Dataset; Caption := 'Jenis Tes'; Result := ShowModal = mrOk; finally Free; end; 125 end; end. 5. Tambah Kriteria unit TambahKriteriaForm; function TambahKriteria(Dataset: TDataSet): Boolean; implementation uses DMForm, DataJenisTesForm, Rutinitas; {$R *.dfm} function TambahKriteria(Dataset: TDataSet): Boolean; begin frmTambahKriteria := TfrmTambahKriteria.Create(Application); with frmTambahKriteria do try qryJenisTes.Open; dsMaster.DataSet := Dataset; cbxKurvaChange(cbxKurva); Caption := 'Kriteria Penilaian'; Result := ShowModal = mrOk; finally Free; end; end; procedure TfrmTambahKriteria.cbxKurvaChange(Sender: TObject); var vis: Boolean; begin vis := cbxKurva.ItemIndex in [0,1,2,3,4,5]; lblA.Visible := vis; lblB.Visible := vis; edtA.Visible := vis; edtB.Visible := vis; vis := cbxKurva.ItemIndex in [2,3,4,5]; lblC.Visible := vis; edtC.Visible := vis; vis := cbxKurva.ItemIndex = 3; lblD.Visible := vis; 126 edtD.Visible := vis; edtB.Enabled := cbxKurva.ItemIndex in [0,1,2,3]; end; end. 6. Form Input Nilai unit NilaiForm; procedure InputNilai; implementation uses Rutinitas, DateUtils; {$R *.dfm} procedure InputNilai; var i: Integer; str: TStrings; begin frmNilai := TfrmNilai.Create(Application); with frmNilai do try Caption := 'Input Nilai'; str := TStringList.Create; tblNilai.AddField('idpelamar',ftInteger); tblNilai.AddField('tgllahir',ftDate); tblNilai.AddField('kode',ftString,8); tblNilai.AddField('nama',ftString,32); tblNilai.AddField('alamat',ftString,64); with qryRutinitas do try SQL.Text := 'select idjenistes,nama from jenistes'; SQL.Add('order by idjenistes'); Open; First; while not Eof do begin tblNilai.AddField(FieldByName('idjenistes').AsString,ftFloat); str.Add(FieldByName('nama').AsString); Next; end; 127 tblNilai.Open; Close; SQL.Text := 'select * from pelamar order by kode'; Open; First; while not Eof do begin tblNilai.Append; tblNilai.FieldByName('idpelamar').AsInteger := FieldByName('idpelamar').AsInteger; tblNilai.FieldByName('tgllahir').AsDateTime := FieldByName('tgllahir').AsDateTime; tblNilai.FieldByName('kode').AsString := FieldByName('kode').AsString; tblNilai.FieldByName('nama').AsString := FieldByName('nama').AsString; tblNilai.FieldByName('alamat').AsString := FieldByName('alamat').AsString; tblNilai.Post; Next; end; finally Free; end; with grd1 do for i := 0 to Columns.Count -1 do begin if (Columns[i].FieldName = 'idpelamar') or (Columns[i].FieldName = 'tgllahir') then Columns[i].Visible := False else if Columns[i].FieldName = 'kode' then begin Columns[i].Title.Caption := 'Kode'; Columns[i].Width := 64; Columns[i].ReadOnly := True; end else if Columns[i].FieldName = 'nama' then begin 128 Columns[i].Title.Caption := 'Nama'; Columns[i].Width := 128; Columns[i].ReadOnly := True; end else if Columns[i].FieldName = 'alamat' then begin Columns[i].Title.Caption := 'Alamat'; Columns[i].Width := 256; Columns[i].ReadOnly := True; end else begin Columns[i].Title.Caption := str[i-5]; Columns[i].Title.Alignment := taRightJustify; end; end; tblNilai.First; ShowModal; finally str.Free; Free; end; end; { TfrmNilai } function TfrmNilai.Simpan: Boolean; var i: Integer; idjenistes: Integer; begin Result := MessageDlg('Simpan data ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes; if not Result then Exit; try tblNilai.DisableControls; with qryRutinitas do try SQL.Text := 'delete from nilai'; 129 Execute; Close; SQL.Text := 'insert into nilai('; SQL.Add('idpelamar,idjenistes,nilai)'); SQL.Add('values('); SQL.Add(':idpelamar,:idjenistes,:nilai)'); tblNilai.First; while not tblNilai.Eof do begin for i := 0 to tblNilai.FieldCount -1 do begin if (tblNilai.Fields[i].FieldName = 'idpelamar') or (tblNilai.Fields[i].FieldName = 'tgllahir') or (tblNilai.Fields[i].FieldName = 'kode') or (tblNilai.Fields[i].FieldName = 'nama') or (tblNilai.Fields[i].FieldName = 'alamat') then Continue; //if Copy(tblNilai.Fields[i].FieldName,1,1) = 'j' then begin idjenistes := StrToInt(tblNilai.Fields[i].FieldName); Close; ParamByName('idpelamar').AsInteger := tblNilai.FieldByName('idpelamar').AsInteger; ParamByName('idjenistes').AsInteger := idjenistes; ParamByName('nilai').AsFloat := tblNilai.FieldByName(tblNilai.Fields[i].FieldName).AsFloat; Execute; end; end; tblNilai.Next; end; finally Free; end; InsertIntoResult; finally tblNilai.EnableControls; end; 130 if Result then MessageDlg('Data berhasil disimpan', mtInformation, [mbOK], 0); end; procedure TfrmNilai.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if not(ActiveControl is TDBGrid) then inherited; end; procedure TfrmNilai.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if ModalResult = mrOk then CanClose := Simpan; end; procedure TfrmNilai.mniAmbilUsiaClick(Sender: TObject); begin if not(grd1.DataSource.DataSet.State in [dsInsert,dsEdit]) then grd1.DataSource.DataSet.Edit; grd1.DataSource.DataSet.FieldByName(grd1.Columns[grd1.SelectedI ndex].FieldName).AsInteger := YearsBetween(tblNilai.FieldByName('tgllahir').AsDateTime,Date); end; procedure TfrmNilai.pm1Popup(Sender: TObject); begin mniAmbilUsia.Enabled := (grd1.Columns[grd1.SelectedIndex].FieldName <> 'idpelamar') and (grd1.Columns[grd1.SelectedIndex].FieldName <> 'tgllahir') and (grd1.Columns[grd1.SelectedIndex].FieldName <> 'kode') and (grd1.Columns[grd1.SelectedIndex].FieldName <> 'nama') and (grd1.Columns[grd1.SelectedIndex].FieldName <> 'alamat') end; end. 7. Form Hasil unit HasilNilaiForm; procedure HasilNilai; 131 implementation uses Rutinitas, SeleksiForm; {$R *.dfm} procedure HasilNilai; var aComponent: TComponent; begin aComponent := Application.FindComponent('frmHasilNilai'); if not Assigned(aComponent) then begin frmHasilNilai := TfrmHasilNilai.Create(Application); frmHasilNilai.LoadNilai; end; frmHasilNilai.Show; end; { TfrmHasilNilai } procedure TfrmHasilNilai.LoadNilai; var i: Integer; str: TStrings; begin if tblNilai.Active then tblNilai.Close; try str := TStringList.Create; tblNilai.AddField('idpelamar',ftInteger); tblNilai.AddField('tgllahir',ftDate); tblNilai.AddField('kode',ftString,8); tblNilai.AddField('nama',ftString,32); tblNilai.AddField('alamat',ftString,64); with qryRutinitas do try SQL.Text := 'select idjenistes,nama from jenistes'; SQL.Add('order by idjenistes'); Open; First; while not Eof do begin 132 tblNilai.AddField('j' + FieldByName('idjenistes').AsString,ftFloat); str.Add(FieldByName('nama').AsString); Next; end; tblNilai.Open; Close; SQL.Text := 'select n.idpelamar,p.kode,p.nama,p.tgllahir,p.alamat,'; SQL.Add('n.idjenistes,n.nilai from pelamar p'); SQL.Add('join nilai n on n.idpelamar = p.idpelamar'); SQL.Add('order by n.idpelamar,n.idjenistes'); Open; First; while not Eof do begin if not(tblNilai.Locate('idpelamar',FieldByName('idpelamar').AsInteger,[] )) then begin tblNilai.Append; tblNilai.FieldByName('idpelamar').AsInteger := FieldByName('idpelamar').AsInteger; tblNilai.FieldByName('tgllahir').AsDateTime := FieldByName('tgllahir').AsDateTime; tblNilai.FieldByName('kode').AsString := FieldByName('kode').AsString; tblNilai.FieldByName('nama').AsString := FieldByName('nama').AsString; tblNilai.FieldByName('alamat').AsString := FieldByName('alamat').AsString; end else tblNilai.Edit; tblNilai.FieldByName('j'+FieldByName('idjenistes').AsString).AsFloat := FieldByName('nilai').AsFloat; tblNilai.Post; Next; 133 end; finally Free; end; with grd1 do for i := 0 to Columns.Count -1 do begin if (Columns[i].FieldName = 'idpelamar') or (Columns[i].FieldName = 'tgllahir') then Columns[i].Visible := False else if Columns[i].FieldName = 'kode' then begin Columns[i].Title.Caption := 'Kode'; Columns[i].Width := 64; end else if Columns[i].FieldName = 'nama' then begin Columns[i].Title.Caption := 'Nama'; Columns[i].Width := 128; end else if Columns[i].FieldName = 'alamat' then begin Columns[i].Title.Caption := 'Alamat'; Columns[i].Width := 256; end else begin Columns[i].Title.Caption := str[i-5]; Columns[i].Title.Alignment := taRightJustify; end; end; tblNilai.First; finally str.Free; end; end; 134 procedure TfrmHasilNilai.btnSeleksiClick(Sender: TObject); begin Seleksi; end; end. 8. Form Seleksi Pelamar unit SeleksiForm; function Seleksi: Boolean; implementation uses DMForm, Rutinitas, Math; {$R *.dfm} function Seleksi: Boolean; begin frmSeleksi := TfrmSeleksi.Create(Application); with frmSeleksi do try SQLSelect := TStringList.Create; SQLWhere := TStringList.Create; SQLOrder := TStringList.Create; Caption := 'Seleksi Pelamar'; sTemp := 't' + IntToStr(Random(999)); //ShowMessage(sTemp); ConvertResult2FinalResult(sTemp); qryJenisTes.Open; qryKriteria.Open; tblFilter.Open; tblFilterAfterPost(tblFilter); SQLOrder.Text := 'order by nilai desc'; lblNonFuzzy.Caption := GetNonFuzzy; cbxNonFuzzy.ItemIndex := 0; Result := ShowModal = mrOk; finally SQLSelect.Free; SQLWhere.Free; SQLOrder.Free; Free; end; end; 135 procedure TfrmSeleksi.btnGoClick(Sender: TObject); begin if qryKriteriaidkriteria.IsNull then begin MessageDlg('Kriteria tidak ada', mtWarning, [mbOK], 0); Exit; end; if tblFilter.Locate('idkriteria;operator',VarArrayOf([qryKriteriaidkriteria. AsInteger,rgDan.Items[rgDan.ItemIndex]]),[]) then Exit; tblFilter.Append; tblFilterIDKriteria.AsInteger := qryKriteriaidkriteria.AsInteger; tblFilterJenis.AsString := qryJenisTesnama.AsString; tblFilterKriteria.AsString := qryKriterianama.AsString; tblFilterOperator.AsString := rgDan.Items[rgDan.ItemIndex]; tblFilter.Post; end; procedure TfrmSeleksi.btnHapusClick(Sender: TObject); begin if tblFilter.Eof then Exit; if Konfirmasi('Remove filter ?') then tblFilter.Delete; end; procedure TfrmSeleksi.tblFilterAfterPost(DataSet: TDataSet); var bm: TBookmarkStr; begin mmoFilter.Clear; try bm := tblFilter.Bookmark; tblFilter.First; while not tblFilter.Eof do begin if tblFilter.Bof then 136 mmoFilter.Text := tblFilterJenis.AsString + ' ' + tblFilterKriteria.AsString else mmoFilter.Text := mmoFilter.Text + ' ' + tblFilterOperator.AsString + ' ' + tblFilterJenis.AsString + ' ' + tblFilterKriteria.AsString; tblFilter.Next; end; finally tblFilter.Bookmark := bm; end; end; procedure TfrmSeleksi.btnFilterPelamarClick(Sender: TObject); var bm: TBookmarkStr; a,b: Extended; nilai: Extended; // nilai fire strength idpelamar: TStrings; // daftar idpelamar i: Integer; operator: string; begin // query disini try bm := tblFilter.Bookmark; if tblFilter.Eof then begin MessageDlg('Silakan pilih kriteria', mtWarning, [mbOK], 0); Exit; end; // edit dulu tabel temporary utk memperoleh firestrenght with qryRutinitas do try idpelamar := TStringList.Create; try SQL.Text := 'select idpelamar from pelamar order by idpelamar'; Open; First; while not Eof do 137 begin idpelamar.Add(Fields[0].AsString); // masukkan idpelamar ke stringlist Next; end; for i := 0 to idpelamar.Count -1 do begin tblFilter.First; while not tblFilter.Eof do begin if tblFilter.Bof then begin Close; SQL.Text := 'select k'+tblFilterIDKriteria.AsString; tblFilter.Next; // ambil record kedua SQL.Add(',k'+tblFilterIDKriteria.AsString); SQL.Add('from '+sTemp); SQL.Add('where idpelamar=:idpelamar'); ParamByName('idpelamar').AsInteger := StrToInt(idpelamar[i]); Open; First; a := Fields[0].AsFloat; b := Fields[1].AsFloat; operator := tblFilterOperator.AsString; end else begin Close; SQL.Text := 'select k'+tblFilterIDKriteria.AsString; SQL.Add('from '+sTemp); SQL.Add('where idpelamar=:idpelamar'); ParamByName('idpelamar').AsInteger := StrToInt(idpelamar[i]); Open; 138 First; a := nilai; b := Fields[0].AsFloat; operator := tblFilterOperator.AsString; end; if operator = 'dan' then nilai := Min(a,b) else nilai := Max(a,b); tblFilter.Next; end; // update fire strengthnya tabel temp berdasar filter/operator Close; SQL.Text := Format('update %s set nilai=:nilai where idpelamar=:idpelamar',[sTemp]); ParamByName('idpelamar').AsInteger := StrToInt(idpelamar[i]); ParamByName('nilai').AsFloat := nilai; Execute; end; finally idpelamar.Free; end; finally Free; end; finally tblFilter.Bookmark := bm; end; cbxNonFuzzyChange(cbxNonFuzzy); end; procedure TfrmSeleksi.tblFilterCalcFields(DataSet: TDataSet); begin if tblFilterOperator.AsString = 'dan' then tblFilterOperator2.AsString := 'and' else tblFilterOperator2.AsString := 'or'; end; procedure TfrmSeleksi.cbxNonFuzzyChange(Sender: TObject); 139 var bm: TBookmarkStr; begin try bm := tblFilter.Bookmark; tblFilter.DisableControls; SQLSelect.Text := 'select f.idpelamar,p.kode as "Kode",p.nama as "Nama",p.alamat as "Alamat",p.nonfuzzy as "'+GetNonFuzzy+'"'; tblFilter.First; while not tblFilter.Eof do begin SQLSelect.Add(',f.k' + tblFilterIDKriteria.AsString + ' as "' + tblFilterKriteria.AsString + '"'); tblFilter.Next; end; SQLSelect.Add(',nilai as "Fire Strength"'); // ==> nilai fire strength SQLSelect.Add(Format('from %s f',[sTemp])); SQLSelect.Add('join pelamar p on p.idpelamar = f.idpelamar'); SQLWhere.Text := 'where'; tblFilter.First; while not tblFilter.Eof do begin if tblFilter.Bof then SQLWhere.Add('f.k' + tblFilterIDKriteria.AsString + '>0') else SQLWhere.Add(tblFilterOperator2.AsString + ' f.k' + tblFilterIDKriteria.AsString + '>0'); tblFilter.Next; end; if cbxNonFuzzy.ItemIndex in [1,2] then // False,True SQLWhere.Add('and p.nonfuzzy='+IntToStr(cbxNonFuzzy.ItemIndex-2)); with qryResult do begin Close; SQL.Clear; SQL.Add(SQLSelect.Text); SQL.Add(SQLWhere.Text); 140 SQL.Add(SQLOrder.Text); Open; //ShowMessage(SQL.Text); grdResult.Columns[0].Visible := False; end; finally tblFilter.Bookmark := bm; tblFilter.EnableControls; end; end; procedure TfrmSeleksi.dsResultDataChange(Sender: TObject; Field: TField); begin inherited; end; end.