SISTEM PENDUKUNG PENGAMBILAN KEPUTUSAN ...
-
Upload
khangminh22 -
Category
Documents
-
view
0 -
download
0
Transcript of SISTEM PENDUKUNG PENGAMBILAN KEPUTUSAN ...
i
SISTEM PENDUKUNG PENGAMBILAN KEPUTUSAN
PENENTUAN PEMAIN DALAM SUATU FORMASI
PADA SEBUAH TIM SEPAKBOLA
SKRIPSI
Diajukan untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Teknik
Program Studi Teknik Informatika
Oleh:
Nicolas Dwiatmoko
NIM : 025314053
PROGRAM STUDI TEKNIK INFORMATIKA
JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2007
ii
DECISION SUPPORT SYSTEM FOR PLAYER SELECTION
OF A FOOTBALL TEAM FORMATION
A Thesis
Presented as Partial Fulfillment of the Requirements
To Obtain the Sarjana Teknik Degree
In Informatics Engineering
By:
Nicolas Dwiatmoko
Student Number : 025314053
INFORMATICS ENGINEERING STUDY PROGRAM
DEPARTMENT OF INFORMATICS ENGINEERING
FACULTY OF ENGINEERING
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2007
iii
HALAMAN PERSETUJUAN
SKRIPSI
SISTEM PENDUKUNG PENGAMBILAN KEPUTUSAN
PENENTUAN PEMAIN DALAM SUATU FORMASI PADA
SEBUAH TIM SEPAK BOLA
Oleh :
Nicolas Dwiatmoko
NIM : 025314053
Telah disetujui oleh
Pembimbing I
v
PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis tidak
memuat karya atau bagian karya orang lain, kecuali yang telah disebutkan dalam
kutipan dan daftar pustaka, sebagaimana layaknya karya ilmiah.
Yogyakarta, Juni 2007
Penulis
Nicolas Dwiatmoko
vi
HALAMAN MOTTO
Fate exists but it can only take you so far, Because once you’re there
It’s up to you to make it happen
The only wrong thing would beThe only wrong thing would beThe only wrong thing would beThe only wrong thing would be to deny what your heart truly feelsto deny what your heart truly feelsto deny what your heart truly feelsto deny what your heart truly feels
Percayalah bahwa Tuhan
selalu ada di dekat kita
vii
HALAMAN PERSEMBAHAN
Karya ilmiah ini saya persembahkan kepada:
Yesus Kristus,
Bunda Maria,
Bapak, Ibu dan Kakakku tercinta atas semangat, doa serta
dukungan yang tak terhingga nilainya baik secara moril maupun
materiil,
Semua temanku,
Almamaterku Teknik Informatika Universitas Sanata Dharma,
khususnya angkatan 2002
viii
INTISARI
Sistem Pendukung Pengambilan Keputusan Penentuan Pemain dalam
Suatu Formasi pada Sebuah Tim Sepak Bola merupakan sebuah sistem
pendukung pengambilan keputusan yang dibuat untuk membantu seorang pelatih
menentukan siapakah pemain yang paling tepat untuk mengisi suatu posisi dalam
sebuah formasi.
Sistem ini memiliki fasilitas-fasilitas yang berfungsi untuk mendukung
proses penentuan pemain, antara lain menu tambah pemain, menu hapus pemain,
menu ubah pemain, menu formasi, dan menu penentuan pemain.
Model yang dipakai dalam SPPK ini adalah model optimasi
dikombinasikan dengan simulasi. Data masukan pada sistem ini berupa nilai
karakter tiap pemain yang terdiri dari atribut teknik, atribut mental, dan atribut
fisik serta bobot nilai untuk karakter pada setiap posisi yang akan ditentukan. Dari
data masukan tersebut, sistem akan melakukan proses perhitungan dan
penyeleksian untuk mendapatkan hasil akhir berupa nama pemain yang
direkomendasikan untuk menempati posisi tersebut.
ix
ABSTRACT
Decision Support System for Player Selection of a Football Team
Formation is a decision support system which is made to help a coach to decide
the appropriate player that will be placed in each position of a formation.
This system has facilities to support player selection process such as “Add
Player Menu”, “Delete Player Menu”, “Update Player Menu”, “Formation Menu”,
and “Player Determination Menu”.
The model used in system is optimization model combined with
simulation model. The input data in this system is the score of the characteristic of
each player consist of technical attributes, mental attributes, and also physical
attributes and the value for the characteristic of each position that will decided.
From the input data, the system continues to do calculating and qualifying process
to obtain the name of the player that recommended for each position as the final
result.
x
KATA PENGANTAR
Puji serta syukur saya panjatkan kepada Tuhan, karena atas berkat dan
rahmat-Nya saya dapat menyelesaikan tugas akhir ini dengan baik dan lancar.
Dalam proses penulisan tugas akhir ini saya menyadari bahwa ada begitu
banyak pihak yang telah memberikan perhatian dan bantuan dengan caranya
masing-masing sehingga tugas akhir ini dapat terselesaikan. Oleh karena itu saya
ingin mengucapkan terima kasih antara lain kepada :
1. Bapak Ir. Gregorius Heliarko SJ, SS, BST, MA, M.Sc selaku Dekan
Fakultas Teknik Universitas Sanata Dharma.
2. Ibu P. H. Prima Rosa, S.Si., M.Sc., selaku Dosen Pembimbing Tugas Akhir,
yang telah banyak memberikan bimbingan, dukungan, motivasi sehingga
saya dapat menyelesaikan tugas akhir ini dengan baik.
3. Ibu Agnes Maria Polina, S.Kom., M.Sc., selaku Ketua Jurusan Teknik
Informatika sekaligus Dosen Pembimbing Akademik. Terima kasih karena
selama ini telah sabar memberikan bimbingan dan pendampingan akademik
serta masukan untuk saya pribadi.
4. Ibu Ridowati Gunawan, S.Kom., M.T., Bapak Alb. Agung Hadhiatma, S.T.,
M.T dan Bapak H. Agung Hernawan, S.T. selaku panitia penguji yang telah
memberikan banyak kritik dan saran demi sempurnanya tugas akhir saya.
5. Seluruh staf dosen Teknik Informatika Universitas Sanata Dharma yang
telah banyak memberikan bekal ilmu, arahan dan pengalaman selama saya
menempuh studi.
xi
6. Seluruh staf Sekretariat Teknik, yang banyak membantu saya dalam urusan
administrasi akademik terutama menjelang ujian tugas akhir.
7. Staf laboran Teknik Informatika, terima kasih atas kerja sama dan semua
bantuannya.
8. Bapak, Ibu, dan Kakak tercinta. Terima kasih atas doa, semangat, dukungan
dan cintanya sehingga saya bisa menyelesaikan studi dengan lancar. Semoga
saya bisa membalas cinta tulus kalian.
9. All my pren’s : Andhika, Albert, Widy, GWendy, Hasto, Pristo, McD,
Handie, Bowo, Pram, Lilik, Tono, Afu, Tjaya, Santo, Ate, Gede, Andi R,
Andi D, Andre, Nugroho, Heri, Aceng, Ase, Kobeesh, Lijun, Acong,
Yohanes, Yudho, Ucok, Dadit, Radit, Mario, Fredi, Kris, Sigit, Nita, Rika,
Nine, Dani, Ika, Yohana, Tere, Brigita, Kristi, Tata, Wiwik, Tri, Yeane,
Dian, Merlin, Kristin, Melinda, Budi, Krisna, Angga, Henri, Wisnu, Joyo,
AG, Dono, Agus, Dance, Dewa, Berto & James, Handri, Eki, Leo, Indra,
Tina, Lydia, Tyas, Fany, Yese, Sekar, Iven, temen-temen di radio
MASDHA, temen-temen ANILOP FC, ya... pokoknya every single one yang
udah mengisi hidup Nico selama lima tahun kuliah di Jogja ampe kelar
dengan semua kontribusinya masing-masing, besar kecil, sedikit banyak,
atau ada kata-kata lain kontribusinya yang jelas setiap peran yang ada di
“film Nico” selama lima tahun di Jogja punya kenangan manis tersendiri
yang ga mungkin Nico lupain, I wish the Best 4 u all, God Bless U, n of
course Thanks to u all gal’s.
xii
10. Seluruh pihak yang telah ambil bagian dalam proses penulisan tugas akhir
ini yang tidak bisa saya sebutkan satu per satu.
Dengan rendah hati saya menyadari bahwa tugas akhir ini masih jauh dari
sempurna, oleh karena itu berbagai kritik dan saran untuk perbaikan tugas akhir
ini sangat saya harapkan. Akhir kata, semoga tugas akhir ini bermanfaat bagi
semua pihak. Terima kasih.
Yogyakarta, Juni 2007
Penulis
xiii
DAFTAR ISI
HALAMAN JUDUL ....................................................................................... i
HALAMAN PERSETUJUAN ........................................................................ iii
HALAMAN PENGESAHAN ......................................................................... iv
PERNYATAAN KEASLIAN KARYA .......................................................... v
HALAMAN MOTTO ...................................................................................... vi
HALAMAN PERSEMBAHAN ...................................................................... vii
INTISARI ......................................................................................................... viii
ABSTRACT ..................................................................................................... ix
KATA PENGANTAR ..................................................................................... x
DAFTAR ISI ................................................................................................... xiii
DAFTAR GAMBAR ...................................................................................... xvii
DAFTAR TABEL ........................................................................................... xix
BAB I PENDAHULUAN
1.1 Latar Belakang Masalah………………………………............. 1
1.2 Rumusan Masalah…………………………………………….. 3
1.3 Batasan Masalah……………………………………………… 3
1.4 Tujuan Penelitian……………………………………………... 4
1.5 Metodologi Penelitian………………………………………… 5
1.6 Sistematika Isi………………………………………………… 6
xiv
BAB II LANDASAN TEORI
2.1 Pengertian Pengambilan Keputusan.......................................... 8
2.1.1 Fase-fase pengambilan Keputusan................................ 10
2.2 Sistem Pendukung Pengambilan Keputusan (SPPK)................ 11
2.2.1 Pengertian Sistem Pendukung Pengambilan Keputusan
(SPPK)........................................................................... 11
2.2.2 Karakterisitik dan Kemampuan SPPK.......................... 11
2.2.3 Komponen SPPK.......................................................... 14
2.3 Java Graphical User Interface (GUI)………………………... 21
2.4 MySQL………………………………………………………. 24
2.4.1 Keunggulan MySQL..................................................... 24
2.4.2 SQL STANDAR DATABASE......................................... 24
2.5 Pengembangan Sistem Berorientasi Objek............................... 25
2.5.1 Object-oriented analysis (OOA).................................... 25
2.5.2 Object-oriented Design (OOD)..................................... 26
2.5.3 Unified Modelling Language (UML)............................ 28
BAB III ANALISA DAN DESAIN SISTEM
3.1 Analisa Sistem……………………………………………….. 32
3.1.1 Gambaran Umum Sistem……………………………... 32
xv
3.1.2 Analisa Kebutuhan (Requirement Analysis)................. 33
3.1.2.1 Use Case Diagram........................................... 34
3.1.2.2 Use Case Narative........................................... 35
3.1.3 Class Diagram pada tahap analisa sistem…………….. 42
3.2 Desain Sistem…………………………………………………. 43
3.2.1 Desain Proses dengan Metode OOD.............................. 43
3.2.1.1 Sequence Diagram........................................... 44
3.2.1.2 Class Diagram tahap desain............................ 50
3.2.2 Desain Manajemen Antarmuka ( User Interface )......... 56
3.2.3 Desain Manajemen Model............................................. 61
3.2.4 Desain Manajemen Basisdata........................................ 66
3.2.4.1 Desain Relasi Antar Tabel............................... 66
3.2.4.2 Desain Struktur Tabel...................................... 66
BAB IV IMPLEMENTASI SISTEM
4.1 Karakteristik Sistem................................................................. 69
4.2 Implementasi Database........................................................... 70
4.3 Koneksi ke Database............................................................... 79
4.4 Implemetas Antar Muka.......................................................... 81
xvi
BAB V ANALISA HASIL
5.1 Pengujian Sistem..................................................................... 102
5.2 Evaluasi Pengguna.................................................................. 105
5.2.1 Kelebihan Sstem yang Dibuat................................................. 107
5.3 Kekurangan Sistem Yang Dibuat............................................ 107
BAB VI PENUTUP
6.1 Kesimpulan............................................................................. 108
6.1 Saran....................................................................................... 108
DAFTAR PUSTAKA
LAMPIRAN
xvii
DAFTAR GAMBAR
Gambar Keterangan Halaman
2.1 Simbol Entity Object 26
2.2 Simbol Interface Object 27
2.3 Simbol Control Object 27
2.4 Simbol Use Case 29
2.5 Simbol Actor 29
3.1 Use Case Diagram 34
3.2 Class Diagram pada tahap analisa sistem 42
3.3 Sequence Diagram Menentukan Formasi 44
3.4 Sequence Diagram Menentukan Pemain 45
3.5 Sequence Diagram Tambah Pemain 46
3.6 Sequence Diagram Update Profil Pemain 47
3.7 Sequence Diagram Hapus Pemain 48
3.8 Sequence Diagram Melihat Profil Pemain 49
3.9 Class Diagram menentukan formasi 50
3.10 Class Diagram menentukan pemain 51
3.11 Class Diagram tambah pemain 52
3.12 Class Diagram Update profil pemain 53
3.11 Class Diagram hapus pemain 54
3.12 Class Diagram melihat profil pemain 55
3.16 Halaman Utama 56
3.17 Halaman Formasi 57
3.18 Halaman SPPK 58
3.19 Halaman Tambah Pemain 59
3.20 Halaman Update Profil Pemain 60
3.21 Halaman Profil Pemain 61
3.22 Relasi Antar Tabel 66
xviii
4.1 Proses Create New Schema 71
4.2 Proses penamaan pada schema baru 71
4.3 Schema baru telah selesai dibuat 72
4.4 Halaman Utama 81
4.5 Halaman Formasi 82
4.6 Halaman Info 83
4.7 Halaman SPPK 90
4.8 Halaman Tambah Pemain 98
4.9 Halaman Update Profil Pemain 99
4.10 Halaman Profil Pemain 100
4.11 Halaman Grafik Perbandingan 101
5.1 Diagram batang hasil perhitungan secara manual 103
5.2 Diagram batang hasil perhitungan yang dilakukan oleh
sistem
104
xix
DAFTAR TABEL
Tabel Keterangan Halaman
3.1 Use Narative Menentukan Formasi 35
3.2 Use Narative Memilih Pemain 36
3.3 Use Narative Tambah Pemain 38
3.4 Use Narative Hapus Pemain 39
3.5 Use Narative Update Pemain 40
3.6 Use Narative Melihat Profil Pemain 41
3.7 Bobot nilai 65
3.8 Tabel formation 66
3.9 Tabel player 67
3.10 Tabel formation_position 67
3.11 Tabel position 67
3.12 Tabel player_position 68
3.13 Tabel detail_profile 68
3.14 Tabel detail_player_profile 68
3.15 Tabel formation_save 68
3.16 Tabel playing 68
5.1 Masukan pada atribut teknik 102
5.2 Masukan pada atribut mental 102
5.3 Masukan pada atribut fisik 103
5.4 Hasil perhitungan secara manual 103
5.5 Hasil perhitungan oleh system 104
5.6 Hasil kuesioner pengujian program 106
1
BAB I
PENDAHULUAN
1.1 Latar Belakang Masalah
Pada sebuah tim sepak bola banyak terdapat faktor yang dapat
mempengaruhi hasil akhir yang akan diperoleh tim tersebut dalam sebuah
pertandingan, menang, kalah, ataupun seri. Salah satu faktor pentingnya
adalah bagaimana seorang pelatih dapat memadukan kekuatan yang terdapat
pada timnya yaitu dengan menentukan siapakah pemain yang paling tepat
untuk dapat menempati sebuah posisi dalam sebuah formasi yang akan
digunakan oleh pelatih tersebut. Untuk dapat menentukan formasi yang tepat
biasanya seorang pelatih harus melakukan serangkaian langkah, antara lain :
Langkah pertama
Seorang pelatih harus mengenali karakter pemain yang dimilikinya
dengan melakukan latihan-latihan secara rutin.
Langkah kedua
Setelah menjalani proses latihan, seorang pelatih akan mengelompokkan
para pemain menurut posisinya berdasarkan analisa yang dilakukan oleh
pelatih pada proses latihan.
Langkah ketiga
Langkah terakhir adalah membandingkan karakter khusus seperti teknik,
mental, dan fisik para pemain yang sudah didapatkan dari proses latihan
2
sebelumnya. Proses perbandingan ini hanya dilakukan pada pemain-
pemain yang memiliki posisi yang sama, misalnya untuk menentukan
siapa yang paling tepat mengisi posisi sebagai seorang penyerang, maka
proses perbandingan yang dilakukan hanya antara pemain-pemain yang
dikelompokkan sebagai penyerang saja. Adapun mekanisme penentuan
siapakah pemain yang paling tepat untuk mengisi sebuah posisi, seorang
pelatih dengan pelatih lainnya biasanya memiliki kriteria-kriteria
tersendiri.
Permasalahan yang timbul dari proses penentuan posisi pemain ini
adalah seorang pelatih membutuhkan waktu yang cukup lama untuk melalui
serangkaian langkah di atas, memproses informasi yang tidak sedikit dan bisa
berubah-ubah, dan semuanya dilakukan dengan segala keterbatasan yang
dimiliki oleh seorang pelatih sebagai manusia yang tidak pernah luput dari
kesalahan.
Salah satu contoh permasalahannya adalah bagaimana seorang pemain
dengan posisi penyerang ternyata setelah menjalani beberapa kali latihan lebih
cocok menduduki posisi sebagai seorang gelandang yang bisa mengatur
permainan di lapangan. Pada masalah yang satu ini seorang pelatih dituntut
untuk jeli dalam melihat perubahan-perubahan yang terjadi pada pemainnya.
Contoh lain misalnya seorang gelandang yang biasa bermain di tengah
ternyata mengalami peningkatan pada kecepatan berlarinya dan dengan
adanya perubahan tersebut pemain itu lebih efektif bila bermain di posisi
3
sayap, sama halnya dengan permasalahan sebelumnya seorang pelatih harus
dapat dengan baik memonitor perkembangan yang terjadi pada setiap pemain.
Untuk itu dibutuhkan sebuah sistem pendukung pengambilan keputusan
yang dapat membantu pelatih untuk menentukan siapa pemain yang paling
tepat untuk mengisi sebuah posisi dalam suatu formasi.
1.2 Rumusan Masalah
Dari latar belakang di atas dapat dirumuskan menjadi beberapa masalah
sebagai berikut :
o Bagaimana membangun sebuah sistem pendukung pengambilan
keputusan untuk menentukan siapa pemain yang paling tepat untuk
mengisi sebuah posisi dalam suatu formasi pada sebuah tim sepak
bola?
1.3 Batasan Masalah
Pada proses penentuan formasi pemain ditetapkan beberapa batasan
sebagai berikut :
1. Hanya terdapat satu user yang terlibat di dalam sistem pendukung
pengambilan keputusan ini yaitu pelatih yang memiliki kewenangan
untuk melakukan proses tambah, hapus, dan edit pemain.
4
2. Pelatih sebagai pengambil keputusan yang terlibat langsung dengan
proses penentuan pemain yang didukung oleh sistem.
3. Proses penentuan nilai pada analisa karakter pemain dilakukan oleh
user yaitu pelatih.
4. Proses perbandingan yang dilakukan mencakup karakter yang
dimiliki oleh pemain dengan posisi yang sama.
5. Proses penentuan pola formasi pemain yang akan dipakai ditentukan
oleh user atau pelatih.
6. Sistem membantu pelatih dengan mencari nilai optimal per posisi.
7. Proses penentuan posisi pemain berdasarkan pengolahan informasi-
informasi intern tim.
8. Sistem yang dibuat belum termasuk penanganan pada masalah
kecocokan antar pemain.
9. Sistem ini dibuat dengan menggunakan Java sebagai bahasa
pemrograman dan MySQL sebagai database engine.
1.4 Tujuan Penelitian
Membuat sebuah sistem pendukung pengambilan keputusan yang dapat
mendukung seorang pelatih sepak bola dalam menentukan siapakah pemain
yang paling tepat untuk dapat mengisi sebuah posisi dalam formasi yang akan
digunakan.
5
1.5 Metodologi Penelitian
Metode yang digunakan dalam membangun sistem ini adalah sebagai
berikut :
a. Metode Pengumpulan Data
• Studi Pustaka
Studi literatur tentang bagaimana mekanisme penentuan
siapakah pemain yang paling tepat untuk dapat mengisi sebuah
posisi dalam formasi pada tim sepak bola.
• Wawancara atau Interview
Salah satu cara untuk mengumpulkan informasi tentang
mekanisme penentuan siapakah pemain yang paling tepat untuk
dapat mengisi sebuah posisi dalam formasi pada tim sepak bola
adalah dengan melakukan wawancara dengan pelatih sebagai
orang yang terlibat langsung dengan masalah ini.
b. Metode Pengembangan Sistem
• Analisa Sistem
Menganalisa dan mengidentifikasikan mekanisme penentuan
posisi pemain yang selama ini digunakan, dalam upaya
mengetahui permasalahan yang ada dan juga data yang
berhubungan dengan input dan output yang diperlukan oleh
user, dengan metode OOA (Object Oeriented Analysis).
6
• Desain Sistem
Pada tahap ini akan ditentukan spesifikasi yang lebih rinci dari
komponen sistem, struktur maupun fitur. Tahap perancangan
dapat dibagi menjadi empat bagian, yaitu :
� Perancangan proses dengan menggunakan metode OOD
(Object Oriented Design)
� Perancangan subsistem dialog (antarmuka )
� Perancangan manajemen model
� Perancangan manajemen basisdata
• Implementasi Sistem
Mengimplementasikan hasil desain sistem dalam bentuk
program, dan melakukan uji coba program pada pengguna.
1.6 Sistematika Penulisan
BAB I PENDAHULUAN
Bab ini berisi latar belakang masalah, rumusan masalah, batasan
masalah, tujuan penelitian, metodologi penelitian dan sistematika
penulisan.
BAB II LANDASAN TEORI
Bab ini berisi pembahasan tentang teori-teori yang berhubungan erat
dan dipergunakan dalam penelitian ini.
7
BAB III ANALISA DAN DESAIN SISTEM
Bab ini berisi tentang deskripsi analisa sistem yang dibutuhkan
dalam penelitian ini. Berdasarkan hasil analisa sistem tersebut
kemudian dirancang sistem untuk menyelesaikan masalah dalam
penelitian ini.
BAB IV IMPLEMENTASI SISTEM
Bab ini berisi deskripsi tentang tahap penulisan program hingga
implementasi rancangan sistem ke dalam sistem yang sesungguhnya.
BAB V ANALISA HASIL
Bab ini berisi tentang analisa dari sistem sesuai dengan
permasalahan dan tujuan yang sudah dijabarkan pada Bab I.
BAB VI PENUTUP
Bab ini berisi tentang kesimpulan penulis berdasarkan rumusan
masalah yang dihadapi dan saran yang diberikan penulis untuk
pengembangan lebih lanjut.
DAFTAR PUSTAKA
LAMPIRAN
8
BAB II
LANDASAN TEORI
2.1 Pengertian Pengambilan Keputusan
Pengambilan keputusan merupakan sebuah proses pemilihan
tindakan dari antara berbagai alternatif tindakan yang ada untuk mencapai
suatu tujuan atau beberapa tujuan (Turban, 1995).
Ada beberapa bentuk pengambilan keputusan yang disusun
berdasarkan beberapa sudut pandang yaitu :
• Pengambilan keputusan berdasarkan tingkat kepentingan.
Misalnya dalam suatu organisasi terdapat hirarki manajemen
yang terdiri dari tiga tingkatan yaitu : manajemen atas,
manajemen menengah, dan manajemen bawah. Pengambilan
keputusan umumnya disesuaikan dengan tingkat hirarki
manajemen yang bersangkutan.
• Pengambilan keputusan berdasarkan regularitas.
Jenis keputusan ini diusulkan oleh H. Simon, seorang ahli
manajemen pemenang Nobel Ekonomi. Menurutnya keputusan
berada pada suatu rangkaian kesatuan, dengan keputusan
terstruktur pada satu ujungnya dan keputusan tidak terstruktur
pada ujung yang lainnya.
Keputusan terstruktur bersifat ulang dan rutin, sehingga
parameter-parameter persoalan dapat diketahui dan terdefinisi
9
dengan baik. Pengambilan keputusannya biasanya berdasarkan
pada teknik-teknik tertentu yang sudah bersifat standar.
Keputusan tidak terstruktur merupakan keputusan-keputusan
yang berkaitan dengan persoalan-persoalan baru. Masalah yang
dihadapi cukup rumit karena parameter-parameter persoalan
belum diketahui dengan jelas. Pengambilan keputusan biasanya
dilakukan dengan intuisi atau berdasarkan pada pengalaman.
• Pengambilan keputusan berdasarkan tingkat persoalan.
Berdasarkan tingkat persoalan, suatu permasalahan dapat dibagi
menjadi dua kelompok yaitu internal dan eksternal. Jika
dipandang dari dimensi waktu, dapat dikelompokan menjadi
keputusan jangka panjang dan keputusan jangka pendek.
Dari pandangan di atas maka suatu permasalahan dapat
dikelompokkan menjadi :
• Keputusan internal jangka pendek.
Jenis keputusan ini biasanya berkaitan dengan masalah
operasional, seperti penentuan jadwal produksi.
• Keputusan internal jangka panjang.
Jenis keputusan ini berkaitan dengan masalah organisasional,
seperti perombakan atau pergantian struktur organisasi.
10
• Keputusan eksternal jangka pendek.
Jenis keputusan ini biasanya berkaitan dengan persoalan-
persoalan yang berhubungan dengan lingkungan dalam waktu
yang relatif pendek.
• Keputusan eksternal jangka panjang.
Jenis keputusan ini berkaitan dengan persoalan-persoalan yang
berhubungan dengan lingkungan dalam waktu yang relatif
panjang.
2.1.1 Fase-fase pengambilan Keputusan
Proses pengambilan meliputi empat fase utama: intelegensi, desain,
pilihan, dan implementasi.
Proses pengambilan keputusan dimulai dari fase intelegensi. Pada
proses ini dilakukan pengidentifikasian dan penentuan masalah, serta
menetapkan kepemilikan masalah. Pada fase desain, akan dikonstruksi
sebuah model yang merepresentasikan sistem. Hal ini dilakukan dengan
membuat asumsi-asumsi yang menyederhanakan realitas dan menuliskan
hubungan di antara semua variabel. Model ini kemudian divalidasi, dan
ditentukanlah kriteria dengan menggunakan prinsip memilih untuk
mengevaluasi alternatif tindakan yang telah diidentifikasi. Fase
selanjutnya adalah fase pilihan, di mana fase ini meliputi pilihan terhadap
solusi yang diusulkan untuk model, solusi tersebut akan diuji untuk
kemudian apabila solusi yang diusulkan sudah masuk akal, maka fase
11
berlanjut ke fase terakhir yaitu fase implementasi. Pada fase implementasi
yang terpenting adalah bagaimana membuat solusi yang diusulkan atau
direkomendasikan dapat bekerja dengan baik.
2.2 Sistem Pendukung Pengambilan Keputusan (SPPK)
2.2.1 Pengertian Sistem Pendukung Pengambilan Keputusan (SPPK)
SPPK atau Sistem Pendukung Pengambilan Keputusan adalah suatu
sistem informasi berbasis komputer yang interaktif, fleksibel, dan
dirancang khusus untuk mendukung pemecahan masalah yang bersifat
semi terstruktur atau tidak terstruktur sehingga dihasilkan suatu keputusan
yang lebih baik (Turban, 1995).
Interaktif berarti ada komunikasi dua arah antara komputer dan
pengguna. Fleksibel berarti sistem dapat diatur sesuai dengan situasi dan
mampu beradaptasi dengan sistem yang sudah ada.
2.2.2 Karakterisitik dan Kemampuan SPPK
Karakteristik dan kemampuan kunci dari SPPK adalah :
• Dirancang untuk membantu pengambilan keputusan dari masalah
semi terstruktur maupun tidak terstruktur, seperti masalah yang
tidak dapat dipecahkan dengan memuaskan hanya dengan sistem
berbasis komputer lainnya, seperti Electronic Data Processing
(EDP) atau Management Information System (MIS).
12
• Mendukung pengambilan keputusan untuk berbagai tingkat
manajerial, dari manajer tingkat atas sampai manajer tingkat
bawah.
• Mendukung pengambilan keputusan untuk individu maupun
kelompok. Banyak permasalahan organisasi melibatkan
kelompok pengambil keputusan. Masalah-masalah yang kurang
terstruktur seringkali membutuhkan beberapa individu dari
departemen dan tingkat organisasi yang berbeda untuk
menyelesaikannya.
• Mendukung beberapa keputusan yang independen dan atau
berurutan
• Mendukung semua fase pengambilan keputusan yaitu :
pemikiran, perancangan, pemilihan, dan implementasi.
• Mendukung berbagai macam proses pengambilan keputusan dan
gaya pengambilan keputusan, terdapat kesesuaian antara SPPK
dan atribut dari individu pengambil keputusan.
• Mampu beradaptasi dari waktu ke waktu. Pengambilan
keputusan harus reaktif, mampu bertindak cepat dalam
menghadapi perubahan kondisi dan menyesuaikan SPPK dengan
perubahan tersebut. SPPK bersifat fleksibel, sehingga pengguna
dapat menambahkan, menghapus, mengkombinasikan, merubah,
atau mengurutkan ulang elemen-elemen dasarnya.
13
• Mudah digunakan. Sistem yang dibuat harus user friendly,
fleksibel, dan memiliki kemampuan grafis yang baik.
• Ditekankan untuk meningkatkan efektifitas dari keputusan
(akurasi, waktu, kualitas) daripada efisiensi.
• Pengambil keputusan memegang sepenuhnya setiap tahap
pengambilan keputusan. SPPK ditujukan untuk mendukung
bukan menggantikan pengambil keputusan. Pengambil keputusan
dapat menolak setiap rekomendasi komputer pada setiap waktu
dalam proses.
• Menuntun proses belajar, terutama pada saat muncul permintaan
baru dan perbaikan sistem, yang menuntut untuk belajar lebih,
dimana proses belajar yang terus menerus akan meningkatkan
dan mengembangkan SPPK.
• End User harus mampu membangun sendiri sistem yang
sederhana. Sistem yang lebih besar dapat dibangun dalam
kelompok pengguna dengan sedikit bantuan dari pakar sistem
informasi.
• Biasanya menggunakan model (baik standar maupun yang sudah
jadi) untuk menganalisa situasi pengambil keputusan.
Kemampuan pemodelan memungkinkan pengguna melakukan
percobaaan dengan strategi yang berbeda dengan konfigurasi
yang berbeda pula. Setiap percobaan menghasilkan pandangan
dan pengetahuan baru.
14
• SPPK yang lebih maju dilengkapi dengan komponen
pengetahuan yang memungkinkan solusi yang efisien dan efektif
dari setiap masalah yang sulit.
2.2.3 Komponen SPPK
Sistem Pendukung Pengambilan Keputusan disusun oleh komponen-
komponen sebagai berikut :
• Manajemen Data
Manajemen data meliputi basis data, sebagai penyedia data bagi
sistem dan diolah oleh software yang disebut Database
Management System atau disebut sebagai sistem manajemen
basis data. Sub sistem manajemen data ini disusun oleh beberapa
elemen, yaitu :
− Basis Data
Merupakan sekumpulan data yang saling berelasi yang
diorganisasi yang berhubungan dengan kebutuhan dan
struktur organisasi dan dapat digunakan oleh lebih dari satu
orang atau lebih dari satu aplikasi. Data dalam basis data
SPPK terdiri dari data internal dan data eksternal.
Data internal berasal dari Sistem Pemrosesan Transaksi
organisasi. Misalnya data yang berasal dari area fungsional
seperti akunting, pemasaran, produksi dan personalia. Data
15
eksternal terdiri dari data karyawan regional, regulasi
pemerintahan, rata-rata pajak, atau data ekonomi nasional.
− Sistem Manajemen Basis Data
Sebuah sistem manajemen basis data terdiri dari tiga fungsi
utama. Dengan tiga fungsi utama ini dimungkinkan untuk
menyimpan data, mencari atau mengakses data, dan
mengontrol basis data.
1. Penyimpanan
Sistem manajemen basis data bermacam-macam dalam
hal penyimpanan data. Sistem menyimpan sejumlah besar
file, dimana setiap file terdiri dari record-record. Dan
setiap record terdiri dari beberapa karakter.
2. Pencarian
Fungsi sistem manajemen basis data paling umum yang
sering dibutuhkan oleh pengguna adalah pencarian data.
Sistem menejemen basis data saat ini menawarkan
fleksibilitas yang tinggi dalam pencarian dan
menampilkan informasi.
3. Kontrol
Banyak aktifitas kontrol yang tidak dapat dilihat oleh
pengguna. Pengguna meminta beberapa informasi dan
menerimanya tanpa mengetahui bagaimana proses yang
dilakukan oleh sistem menejemen basis data. Sistem
16
manajemen basis data berperan sebagai filter, dan
memungkinkan data diakses secara akurat.
− Fasilitas Query
Elemen fasilitas query memungkinkan pengguna untuk
mengakses data, memanipulasi data sesuai yang pengguna
inginkan.
− Direktori Data
Direktori data adalah sebuah katalog dari semua data pada
basis data. Direktori data memuat semua definisi data dan
fungsi utamanya adalah untuk menjawab pertanyaan
mengenai ketersediaan item data dan sumbernya. Ditektori
data secara terutama digunakan untuk mendukung fase
pemikiran dari proses pengambilan keputusan dengan
melakukan scan data dan mengidentifikasikan area masalah
atau peluang-peluang. Direktori data, seperti katalog lainnya,
mendukung input data, penghapusan data, dan pencarian data.
• Manajemen Model
Keunikan dari SPPK adalah kemampuannya dalam
mengitegrasikan data dengan model-model keputusan. Jika
dalam manajemen data dilakukan oleh sistem manajemen basis
data, maka dalam manajemen model organisasi model dilakukan
oleh manajemen model (model based).
17
Model sendiri merupakan representasi sederhana atau abtraksi
dari realitas (Turban, 1995). Penyederhanaan dilakukan karena
realitas sangat kompleks dan sebagian besar hal yang kompleks
tersebut dapat diklasifikasikan sebagai berikut :
− Pemodelan Ikonik
Dengan pemodelan ikonik dibuat sebuah tiruan fisik dari
sistem tetapi dengan ukuran yang berbeda.
− Pemodelan Analog
Model analog dibuat tidak mirip dengan sistem aslinya, tetapi
bertindak seolah-olah seperti aslinya. Model analog ini
biasanya berupa bagan, seperti : bagan organisasi, peta, cetak
biru bangunan mesin, speedometer, thermometer.
− Pemodelan Matematik
Pemodelan matematik dilakukan dengan menggunakan
fungsi-fungsi matematis.
Secara umum proses pemodelan matematik dapat dibagi ke
beberapa proses, yaitu :
o Trial & error (coba-coba)
Cara ini dilakukan dengan mengadakan sejumlah uji coba
dengan mengubah-ubah faktor yang berpengaruh
terhadap sistem dalam kondisi yang nyata. Namun
demikian keberhasilan cara ini akan sangat tergantung
dengan kondisi-kondisi seperti di bawah ini:
18
1. Dalam kondisi nyata tidak terdapat banyak alternatif
coba yang harus dilakukan.
2. Biaya kegagalan tidak tinggi.
3. Faktor lingkungan yang tidak cepat berubah.
o Simulasi
Simulasi dilakukan dengan melakukan eksperimen
terhadap sistem dengan memasukkan variabel keputusan
dan bagaimana pengaruh yang ditimbulkan oleh variabel
tersebut. Dengan langkah ini, pengambil keputusan dapat
menemukan kombinasi terbaik yang bisa memecahkan
solusinya.
o Optimasi
Optimasi merupakan model yang dilakukan dengan cara
memilih solusi terbaik dari alternatif solusi yang ada.
o Heuristik
Heuristik digunakan untuk memecahkan masalah yang
tidak terstruktur dan memberikan solusi yang memuaskan
untuk masalah yang kompleks. Heuristik biasanya hanya
digunakan pada situasi tertentu. Di bawah ini adalah
kondisi dimana heuristik dapat dipakai :
1. Data yang diinputkan tidak pasti dan terbatas.
2. Realita yang ada begitu kompleks dimana tidak cukup
menggunakan model optimasi.
19
3. Metode pasti yang dapat diandalkan tidak ada.
4. Waktu komputasi untuk optimasi terlalu berlebihan.
5. Masalah yang dipecahkan berulang dan membutuhkan
waktu proses yang lama.
Manfaat yang bisa didapat dari pemodelan adalah :
− Biaya analisis terhadap model jauh lebih murah dibandingkan
terhadap sistem asli.
− Pemodelan menyingkat waktu. Proses yang memakan waktu
lama dapat diselesaikan dengan cepat oleh komputer.
− Manipulasi model lebih mudah dilakukan daripada
manipulasi terhadap sistem yang sesungguhnya.
− Keadaaan atau kondisi lingkungan bisnis berada pada situasi
yang tidak menentu. Dengan penggunaan pemodelan seorang
manajer dapat menghitung resiko untuk suatu keputusan.
• Manajemen Dialog
Manajemen dialog pada SPPK, digunakan sebagai fasilitas untuk
mengintegrasikan sistem yang terpasang dengan pengguna secara
interaktif. Melalui manajemen dialog ini, sistem
diimplementasikan sehingga pemakai dapat berkomunikasi
dengan sistem yang telah dirancang. Gaya dialog yang digunakan
terdiri dari beberapa jenis yaitu :
− Tanya jawab
20
Dalam dialog ini, sistem akan bertanya kepada pengguna, dan
pengguna akan memberikan jawaban. Hasil dari dialog ini
adalah sistem akan menawarkan alternatif keputusan yang
dianggap memenuhi keinginan pengguna.
− Perintah
Dalam dialog ini, pengguna memberikan perintah-perintah
yang tersedia pada sistem untuk menjalankan fungsi tertentu
pada SPPK.
− Menu
Dalam dialog ini, pengguna dihadapkan pada berbagai
alternatif menu yang telah disediakan sistem. Menu akan
ditampilkan di monitor. Dalam menentukan pilihannya,
pengguna cukup menekan tombol-tombol tertentu dan pilihan
akan menghasilkan respon tertentu.
− Masukan atau Keluaran.
Dialog ini menyediakan form input atau masukan. Melalui
form ini, pengguna memasukan perintah atau data.
Disamping form input, juga disediakan form output atau
keluaran yang merupakan respon dari sistem.
• Manajemen Pengetahuan
Manajemen pengetahuan merupakan komponen yang
menyediakan keahlian yang diperlukan untuk memecahkan
21
beberapa aspek masalah dan menyediakan knowledge yang dapat
meningkatkan operasi pada komponen SPPK yang lain.
2.3 Java Graphical User Interface (GUI)
Java menyediakan API untuk membuat aplikasi berbasis grafis atau
yang lebih dikenal dengan Graphical User Interface (GUI). Ada dua
package untuk membuat GUI yaitu AWT (Abstract Windowing Toolkit)
dan Swing.
AWT menyediakan beberapa fasilitas untuk keperluan grafis, yaitu :
o Pengaturan tata letak (layout management) komponen.
o Event handling, yaitu pendeteksian setiap event dan penentuan
respon yang akan diberikan ketika pengguna menekan atau
mengklik komponen, untuk kemudian melakukan proses yang
diinginkan.
o Manipulasi grafis komponen, meliputi teks, warna, ukuran, dan
lain-lain.
AWT memiliki beberapa komponen untuk aplikasi GUI yaitu button,
canvas, cheskbox, choice, label, list, scroolbar, textfield, dan textarea.
Setiap komponen ini memiliki fungsi dan cara pembuatan yang berbeda-
beda.
Swing memiliki komponen yang lebih banyak dibandingkan dengan
AWT, selain itu Swing juga memiliki fasilitas Look and Feel yaitu metal,
22
windows, dan CDE/motif. Dengan Look and Feel, GUI akan terlihat lebih
menarik.
Swing memiliki beberapa komponen untuk aplikasi GUI yaitu
button, combo box, check box, label, list, scroolbar, textfield, radio button,
option pane, slider, progress bar, tabel, menu, dan textarea.
Graphical User Interface merupakan salah satu fasilitas yang
disediakan untuk membuat pengguna lebih nyaman dalam melakukan
interaksi dengan program. Graphical User Interface (GUI) merupakan
suatu teknik/mekanisme untuk berinteraksi dengan sebuah program. GUI
dibangun menggunakan suatu komponen GUI. Komponen GUI
merupakan objek yang dapat menerima masukan dari pengguna melalui
mouse atau keyboard. Ada beberapa item yang cukup penting dalam
pembuatan Graphical User Interface seperti Component dan Container.
COMPONENT dan CONTAINER merupakan dua item yang cukup
penting dalam Graphical User Interface.
Component adalah item-item yang dapat ditampilkan pada sebuah
Graphcis screen seperti button (tombol), textfields, scrollbars dan drop-
down lists.
CONTAINER adalah sebuah item yang digunakan untuk
menampung beberapa set komponen sehingga menjadi suatu grup.
Container bisa duasumsikan sebagai wadah dan Component sebagai
barang-barang yang terdapat dalam wadah itu. Di dalam suatu Container
bisa terdapat Container yang lain (Container dalam Container).
23
GUI Component yang biasa digunakan pada Java 2 sudah
distandarkan dalam package javax.swing. Sehingga sering dikenal pula
sebagai Swing GUI Component.
Diagram Inheritance dari Swing GUI adalah class Jcomponent, yang
terletak dalam package javax.swing yang merupakan superclass dari
beberapa component Swing GUI seperti JLabel. Komponen Swing
merupakan bagian dari Java Foundation Class (JFC).
Setiap komponen GUI, seperti button (tombol), textfield dan lain-
lain biasa digunakan untuk keperluan input data maupun memproses data
yang diinputkan. Dengan demikian, masing-masing komponen GUI perlu
memiliki kemampuan untuk mendengarkan (listen) terjadinya suatu event
pada komponen tersebut dan kemudian kode yang bersesuaian perlu
dieksekusi.
Event-handling model terdiri atas 3 bagian utama :
− Event source
Komponen GUI dengan mana pengguna berinteraksi (Komponen
GUI yang diakses User)
− Event object
Object yang berisi informasi tentang event yang terjadi
− Event listener
Object yang menerima (mendengarkan) event object dan
kemudian menyiapkan respon yang bersesuaian
24
2.4 MySQL
MySQL adalah salah satu jenis database server yang sangat terkenal,
disebabkan MySQL menggunakan SQL sebagai bahasa dasar untuk
mengakses database. MySQL bersifat free atau gratis (tidak perlu
membayar dalam menggunakannya). MySQL dapat digunakan pada
berbagai platform sistem operasi.
2.4.1 Keunggulan MySQL
MySQL mempunyai kelebihan dapat diakses oleh banyak bahasa
pemrograman sebagai “frontend”. MySQL merupakan database server
yang ideal untuk data segala ukuran dengan kemampuan mempunyai
kecepatan yang sangat tinggi dalam melakukan proses data, multi-
threaded, multi user dan query.
2.4.2 SQL STANDAR DATABASE
SQL (Structure Query Language) bukan suatu perangkat lunak atau
bahasa pemrograman. Namun, SQL adalah bahasa standar yang digunakan
untuk mengolah database (Saputro, T, Wahju, 2005).
Perintah SQL dikelompokkan menjadi :
1. DDL (Data Definition Language)
DDL merupakan perintah yang digunakan untuk membuat dan
mendefinisikan database dan struktur tabelnya. Seperti CREATE
25
DATABASE, CREATE TABLE, DROP VIEW, DROP TABLE,
ALTER TABLE.
2. DML (Data Manipulation Language)
DML adalah perintah yang digunakan untuk melakukan proses
manipulasi atau pengelolaan data yang ada dalam database atau
tabel. Seperti INSERT, SELECT, UPDATE, dan DELETE.
3. DCL (Data Control Language)
DCL adalah kelompok perintah yang digunakan untuk
melakukan otorisasi terhadap hak akses suatu data dan
pengalokasian ruang. Seperti REVOKE, GRANT, COMMIT,
dan ROLLBACK.
2.5 Pengembangan Sistem Berorientasi Objek
2.5.1 Object-oriented analysis (OOA)
Object-oriented analysis (OOA) merupakan sebuah pendekatan
untuk mempelajari objek yang ada, untuk melihat apakah objek tersebut
dapat digunakan kembali atau dapat beradaptasi dengan kebutuhan yang
baru, dan untuk mendefinisikan objek yang baru atau memodifikasi objek
yang akan dikombinasikan dengan objek yang sudah ada ke dalam aplikasi
bisnis komputing yang berguna.
Object modeling adalah sebuah teknik untuk mengidentifikasikan
objek ke dalam lingkungan sistem dan relasi antara objek.
26
2.5.2 Object-oriented design (OOD)
Object-oriented design (OOD) merupakan pendekatan yang
digunakan untuk menspesifikasikan solusi perangkat lunak dalam bentuk
kolaborasi objek, atribut dan method, dan proses ini merupakan kelanjutan
dari proses object oriented analysis.
Tahap ini merupakan kelanjutan dari proses analisis sistem
berorientasi objek. Dalam tahap ini terdapat tiga jenis objek yaitu:
1. Entity Object, merupakan sebuah objek yang berisi informasi
yang berhubungan dengan bisnis dan secara khusus bersifat
persisten dan disimpan dalam database.
Gambar 2.1 Simbol Entity Object
2. Interface Object, merupakan sebuah objek yang disediakan untuk
menggambarkan bagaimana sebuah aktor akan berkomunikasi
dengan sistem. Contoh: sebuah window, dialog box. Tanggung
jawab dari interface object ada dua yaitu:
a. Menterjemahkan input user ke dalam informasi dimana
sistem dapat mengerti dan menggunakannya untuk
memproses kejadian bisnis.
27
INTERFACE
OBJECT
CONTROL
OBJECT
b. Membawa data yang berhubungan ke dalam sebuah kejadian
bisnis dan menterjemahkan data untuk dipresentasikan tepat
kepada user.
Gambar 2.2 Simbol Interface Object
3. Control Object, merupakan sebuah objek yang berisi aplikasi
logika yang bukan merupakan tanggung jawab entity object.
Control object akan mengkoordinasikan message antara interface
object dan entity object dan mengurutkan message yang terjadi.
Gambar 2.3 Simbol Control Object
Ketiga jenis objek tersebut akan menggambarkan fakta bahwa
responsibilitas dan behaviour dibutuhkan untuk mendukung fungsi sistem
di antara ketiga objek yang akan bekerja sama untuk mendapatkan servis
terbaik.
28
2.5.3 Unified Modelling Language
Unified Modelling Language (UML) adalah bahasa standar yang
digunakan untuk menjelaskan dan memvisualisasikan artifak dari proses
analisis dan desain berorientasi objek. Artifak adalah sepotong informasi
yang digunakan atau dihasilkan dalam suatu proses rekayasa perangkat
lunak. Artifak dapat berupa model, deskripsi atau perangkat lunak.
UML menyediakan standar pada notasi dan diagram yang digunakan
untuk memodelkan suatu sistem. UML dikembangkan oleh Grady Booch,
Jim Rumbaugh dan Ivar Jacobson yang merupakan para pakar orentasi
objek. Sehingga secara cepat UML menjadi bahasa standar untuk
berkomunikasi dalam perspektif objek antara user dengan developer,
developer analisa dengan developer desain, dan developer desain dengan
developer pemrograman. UML mendefinisikan diagram-diagram sebagai
berikut:
1. Use Case Diagram
Use case diagram adalah sebuah diagram yang menggambarkan
interaksi antara sistem, eksternal sistem dan pemakai. Use case
diagram dapat digunakan selama proses analisa untuk
menangkap semua kebutuhan sistem (system requirement) dan
untuk memahami bagaimana sistem seharusnya bekerja. Selama
tahap desain, use case diagram menetapkan perilaku sistem
(system behaviour) pada saat diimplementasikan. Dalam sebuah
model mungkin terdapat satu atau lebih use case diagram.
29
Use case merupakan bagian dari keseluruhan sistem. Use case
merupakan sebuah pekerjaan tertentu, misalnya login ke sistem,
membuat sebuah daftar belanja, dan sebagainya. Seorang atau
sebuah actor adalah sebuah entitas manusia atau mesin yang
berinteraksi dengan sistem untuk melakukan pekerjaan-pekerjaan
tertentu.
Gambar 2.4 Simbol Use Case
Gambar 2.5 Simbol Actor
2. Class Diagram
Class diagram dapat digunakan untuk memvisualisasikan
struktur kelas-kelas dari suatu sistem dan merupakan tipe
diagram yang paling banyak dipakai. Class diagram
memperlihatkan hubungan antar kelas dan penjelasan detail tiap-
tiap kelas di dalam model desain dari suatu sistem.
Selama proses analisa, class diagram memperlihatkan aturan-
aturan dan tanggung jawab entitas yang menentukan perilaku
sistem. Selama tahap desain, class diagram berperan dalam
menangkap struktur dari semua kelas yang membentuk arsitektur
30
sistem yang dibuat. Class diagram juga merupakan dasar untuk
membuat component diagram dan depolyment diagram.
3. Behaviour Diagram
a. Activity Diagram
Activity diagram menggambarkan berbagai aliran aktivitas
dalam sistem yang sedang dirancang, bagaimana masing-
masing aliran berawal, decision yang mungkin terjadi, dan
bagaimana mereka berakhir. Pada dasarnya, activity diagram
adalah diagram flowchart yang diperluas yang menunjukkan
aliran kendali satu aktivitas ke aktivitas lain.
b. Statechart Diagram
Statechart diagram digunakan untuk memodelkan perilaku
dinamis suatu kelas atau objek. Diagram ini memperlihatkan
urutan keadaan sesaat (state) yang dilalui sebuah objek,
kejadian yang menyebabkan adanya transisi dari satu state
atau aktivitas ke state atau aktivitas yang lainnya, dan aksi
yang menyebabkan perubahan satu state atau aktivitas.
c. Interaction Diagram
o Sequence Diagram
Sequence diagram menjelaskan interaksi objek yang
disusun dalam suatu urutan waktu. Sequence diagram
memperlihatkan tahap demi tahap apa yang seharusnya
terjadi untuk menghasilkan sesuatu di dalam use case.
31
o Collaboration Diagram
Collaboration diagram mengacu pada interaksi dan
hubungan terstruktur antar objek. Dalam satu
collaboration diagram terdapat beberapa object, link dan
message.
4. Implementation Diagram
a. Component Diagram
Component diagram digunakan untuk menggambarkan
alokasi semua kelas dan objek ke dalam komponen-
komponen dalam desain fisik prangkat lunak. Diagram ini
memperlihatkan pengaturan dan kebergantungan antar
komponen perangkat lunak, seperti source code, binary code.
b. Deployment Diagram
Deployment diagram menunjukkan pemetaan perangkat
lunak terhadap perangkat kerasnya. Setiap model hanya
memiliki satu deployment diagram. Diagram ini
memperlihatkan koneksi antara processor dan device, dan
alokasi proses-prosesnya pada processor.
32
BAB III
ANALISA DAN DISAIN SISTEM
3.1 Analisa Sistem
Analisa sistem adalah suatu teknik penyelesaian masalah yang
membagi sistem ke dalam bagian-bagian komponen kecil dengan tujuan
agar bagian-bagian dari komponen tersebut dapat bekerja dan berinteraksi
dengan baik untuk melengkapi tujuannya.
3.1.1 Gambaran Umum Sistem
Sistem pendukung pengambilan keputusan penentuan pemain
dalam suatu formasi pada sebuah tim sepak bola merupakan sebuah SPPK
yang dibuat untuk membantu pelatih untuk menentukan siapakah pemain
yang paling tepat untuk dapat mengisi sebuah posisi dalam formasi yang
akan digunakan.
Adapun langkah-langkah dalam proses penentuan pemain adalah
sebagai berikut :
1. Pelatih harus menentukan terlebih dahulu formasi apa yang akan
digunakan untuk mendapatkan sebelas macam posisi yang
nantinya akan diisi oleh para pemain.
33
2. Proses seleksi pertama merupakan proses penyaringan pemain
yang berstatus tidak bisa bermain karena cedera atau terkena
akumulasi kartu kuning atau terkena kartu merah.
3. Setelah proses seleksi pertama, sesuai dengan status posisi yang
sudah dimiliki oleh setiap pemain (seorang pemain dapat
menempati lebih dari satu posisi), akan dilakukan proses
penyeleksian berdasarkan kriteria pemain yang diinginkan oleh
pelatih.
3.1.2 Analisa Kebutuhan (Requirement Analysis)
Analisa kebutuhan terdiri dari use case diagram dan use case
narative yang menjelaskan manfaat sistem jika dilihat menurut pandangan
orang yang berada di luar sistem (actor). Diagram ini menunjukkan
fungsionalitas suatu sistem atau kelas dan bagaimana sistem berinteraksi
dengan dunia luar. Di dalam use case diagram yang lebih ditekankan
adalah “apa” yang diperbuat sistem, dan pada use case narative
didokumentasikan lagi lebih jelas interaksi antara user dan sistem. Use
case merupakan sebuah pekerjaan tertentu, misalnya login ke sistem,
meng-update profil pemain, dan sebagainya.
34
3.1.2.1 Use Case Diagram
Pada sistem ini terdapat tujuh aktifitas yang dapat dilakukan oleh
pengguna, antara lain : menentukan formasi, menentukan pemain, update
profil pemain, menambah pemain, menghapus pemain, melihat profil
pemain dan logout.
Gambar 3.1 Use Case Diagram
35
3.1.2.2 Use Case Narative
1. Use Case Narative Menentukan Formasi
Tabel 3.1 Use Case Narative Menentukan Formasi
Usecase Name Menentukan Formasi
Usecase Id
Priority High
Source
Primary Bussines
Actor
Pengguna atau Pelatih
Other Participating
Actors
Interested
Stackholders
Description Use case ini menggambarkan kegiatan dari pelatih sebagai
pengguna ketika menentukan formasi apa yang digunakan.
Kemudian setelah memilih salah satu formasi, maka akan
ditampilkan sebuah gambar formasi sesuai dengan formasi
yang telah dipilih.
Precondition -
Trigger Pelatih ingin menentukan formasi yang akan digunakan.
Typical Course of
Events
Langkah 1 : Pelatih masuk ke halaman utama sistem.
Langkah 2 : Sistem menampilkan halaman utama.
Langkah 3 : Pelatih masuk ke menu formasi.
Langkah 4 : Sistem menampilkan halaman formasi, dimana
pelatih harus menentukan formasi apa yang akan digunakan.
Langkah 5 : Pelatih memilih formasi apa yang akan
digunakan.
Langkah 6 : Sistem menampilkan gambar formasi sesuai
dengan pilihan pelatih.
Alternate courses -
Conclusion
Postcondition Sistem menampilkan gambar formasi.
Business Rules
Implementation
constraints and
specifications
Assumptions
Open Issues
36
2. Use Case Narative Memilih Pemain
Tabel 3.2 Use Case Narative Memilih Pemain
Usecase Name Memilih Pemain
Usecase Id
Priority High
Source
Primary Bussines
Actor
Pengguna atau Pelatih
Other Participating
Actors
Interested
Stackholders
Description Use case ini menggambarkan kegiatan dari pelatih sebagai
pengguna ketika memilih siapa pemain yang terbaik untuk
dapat mengisi posisi-posisi pada formasi yang telah ditentukan.
Precondition -
Trigger Pelatih ingin menentukan siapa pemain yang terbaik untuk
mengisi suatu posisi.
Typical Course of
Events
Langkah 1 : Pelatih memilih pada posisi apa pemain akan
ditempatkan.
Langkah 2 : Sistem menampilkan sebuah form dimana pelatih
harus menginputkan karakter apa yang akan dibandingkan dan
bobot prioritas tiap karakter.
Langkah 3 : Pelatih menginputkan karakter dan bobot tiap
karakter untuk seluruh posisi.
Langkah 4 : Sistem melakukan penghitungan nilai karakter
dan bobot prioritas pada tiap pemain, lalu dilakukan proses
perbandingan dan pemain dengan nilai paling besar akan
terpilih untuk mengisi posisi itu dengan munculnya nama
pemain tersebut pada masing-masing posisi dalam formasi.
Langkah 5 : Untuk dapat mengetahui proses perbandingan
dengan lebih jelas, pelatih dapat melihat hasil penghitungan
yang berupa nilai akhir tiap pemain yang sudah diurutkan dari
yang paling besar.
Langkah 6 : Sistem menampilkan hasil penghitungan berupa
nilai akhir tiap pemain yang sudah diurutkan dari yang paling
besar.
Langkah 7 : Jika pelatih tidak puas dengan pilihan sistem,
pelatih dapat mengganti pilihan pemain yang sudah dilakukan
sistem.
Langkah 8 : Sistem menampilkan nama pemain yang dipilih
oleh pelatih.
37
Langkah 9 : Apabila kesebelas pemain yang terpilih sudah
benar-benar sesuai dengan kriteria yang diinginkan oleh
pelatih, maka formasi disimpan.
Langkah 10 : Data kesebelas pemain disimpan ke dalam tabel
formasi final.
Alternate courses -
Conclusion Use Case ini akan berakhir setelah kesebelas posisi dalam
formasi sudah terisi dengan nama-nama pemain, sesuai dengan
keinginan pelatih.
Postcondition Sistem menampilkan gambar formasi lengkap dengan nama-
nama pemain pada setiap posisinya dan disimpan.
Business Rules
Implementation
constraints and
specifications
Assumptions
Open Issues
38
3. Use Case Narative Tambah Pemain
Tabel 3.3 Use Case Narative Tambah Pemain
Usecase Name Tambah Pemain
Usecase Id
Priority Medium
Source
Primary Bussines
Actor
Pengguna atau Pelatih
Other Participating
Actors
Interested
Stackholders
Description Use case ini menggambarkan kegiatan dari pelatih sebagai
pengguna ketika menambahkan data pemain baru yang masuk
ke dalam tim.
Precondition -
Trigger Pelatih ingin menambah atau memasukkan data pemain baru.
Typical Course of
Events
Langkah 1 : Dari halaman utama pelatih masuk ke menu
tambah pemain.
Langkah 2 : Sistem menampilkan menu tambah pemain.
Langkah 3 : Pelatih mengisi data-data pemain baru sesuai
dengan yang terdapat pada menu tambah pemain, lalu menekan
tombol simpan.
Langkah 4 : Sistem akan menyimpan data-data pemain
tersebut ke dalam basis data.
Alternate courses -
Conclusion Use case ini akan berakhir apabila telah muncul informasi
bahwa data pemain baru telah berhasil disimpan.
Postcondition -
Business Rules • Data pemain baru yang dimasukkan harus lengkap
Implementation
constraints and
specifications
Assumptions
Open Issues
39
4. Use Case Narative Hapus Pemain
Tabel 3.4 Use Case Narative Hapus Pemain
Usecase Name Hapus Pemain
Usecase Id
Priority Medium
Source
Primary Bussines
Actor
Pengguna atau Pelatih
Other Participating
Actors
Interested
Stackholders
Description Use case ini menggambarkan kegiatan dari pelatih sebagai
pengguna ketika menghapus data pemain yang keluar dari tim.
Precondition -
Trigger Pelatih ingin menghapus data pemain yang keluar dari tim.
Typical Course of
Events
Langkah 1 : Dari halaman utama pelatih masuk ke menu hapus
pemain.
Langkah 2 : Sistem menampilkan menu hapus pemain.
Langkah 3 : Pelatih mencari siapa pemain yang dihapus.
Langkah 4 : Sistem menampilkan data-data pemain yang akan
dihapus.
Langkah 5 : Pelatih menekan tombol hapus.
Langkah 6 : Sistem akan menghapus data pemain.
Alternate courses -
Conclusion Berakhirnya Use Case ini ditandai oleh munculnya informasi
bahwa data pemain telah berhasil dihapus.
Postcondition -
Business Rules
Implementation
constraints and
specifications
Assumptions
Open Issues
40
5. Use Case Narative Update Profil Pemain
Tabel 3.5 Use Case Narative Update Profil Pemain
Usecase Name Update Profil Pemain
Usecase Id
Priority Medium
Source
Primary Bussines
Actor
Pengguna atau Pelatih
Other Participating
Actors
Interested
Stackholders
Description Use case ini menggambarkan kegiatan dari pelatih sebagai
pengguna ketika mengedit profil pemain.
Precondition -
Trigger Pelatih ingin mengupdate profil pemain.
Typical Course of
Events
Langkah 1 : Dari halaman utama pelatih masuk ke menu
update profil pemain.
Langkah 2 : Sistem menampilkan menu update profil pemain.
Langkah 3 : Pelatih mencari siapa pemain yang akan diupdate.
Langkah 4 : Sistem menampilkan data-data pemain yang akan
diupdate.
Langkah 5 : Pelatih mengupdate profil pemain, lalu disimpan.
Langkah 6 : Sistem akan menyimpan hasil dari proses update.
Alternate courses -
Conclusion Berakhirnya Use Case ini ditandai oleh munculnya informasi
bahwa data pemain yang diupdate sudah berhasil disimpan.
Postcondition -
Business Rules
Implementation
constraints and
specifications
Assumptions
Open Issues
41
6. Use Case Narative Melihat Profil Pemain
Tabel 3.6 Use Case Narative Melihat Profil Pemain
Usecase Name Melihat Profil Pemain
Usecase Id
Priority Medium
Source
Primary Bussines
Actor
Pengguna atau Pelatih
Other Participating
Actors
Interested
Stackholders
Description Use case ini menggambarkan kegiatan dari pelatih sebagai
pengguna ketika melihat profil pemain.
Precondition -
Trigger Pelatih ingin melihat profil pemain.
Typical Course of
Events
Langkah 1 : Dari halaman formasi pelatih memilih pemain
mana yang akan dilihat profilnya, lalu double klik pada nama
pemain yang dipilih.
Langkah 2 : Sistem menampilkan halaman profil pemain
sesuai dengan nama pemain yang telah dipilih oleh pelatih.
Langkah 3 : Pelatih dapat melihat profil lengkap dari pemain.
Alternate courses -
Conclusion Berakhirnya Use Case ini ditandai oleh munculnya halaman
profil pemain.
Postcondition -
Business Rules
Implementation
constraints and
specifications
Assumptions
Open Issues
42
3.1.3 Class Diagram pada tahap analisa sistem
Class Diagram pada tahap ini berfungsi untuk menggambarkan
struktur objek dari sistem, memperlihatkan class objek dari sistem yang
disusun dengan relasi antara class objeknya.
1..1
1..N
0..N 1..1 1..1
1..1
1..1
1..1
1..N
0..N
1..11..1
1..1
1..N
1..N
1..N
1..N
1..N
berisi
terpilihterpilih
memiliki
dimiliki
memiliki
dimiliki dimiliki
memiliki
Pemain
NoPunggung : String
NamaPemain : String
Kewarganegaraan : String
TglLahir : Date
Umur : Integer
Kaki : String
Berat : Integer
Tinggi : Integer
Kondisi : Integer
Moral : String
Cedera : String
KartuKuning : String
KartuMerah : String
TambahPemain()
UpdateProfilPemain()
HapusPemain()
LihatProfilPemain()
DetailProfilPemain
NoPunggung : String
IDProfil : String
SkorProfil : Integer
DetailProfil
IDProfil : String
NamaProfil : String
PosisiPemain
NoPunggung : String
IDPosisi : String
Posisi
IDPosisi : String
Posisi : String
NamaPosisi : String
x : Integer
y : Integer
PosisiFormasi
IDFormasi : String
IDPosisi : String
Formasi
IDFormasi : String
NamaFormasi : String
PilihFormasi()
Bermain
NoPunggung : String
IDFormasi : String
IDPosisi : String
SkorPemain : Long
HitungSkor()
Gambar 3.2 Class Diagram pada tahap analisa sistem
43
3.2 Desain Sistem
Desain sistem merupakan abstraksi dari implementasi suatu sistem
perangkat lunak. Tahap ini bertujuan agar nantinya implementasi dapat
dilakukan dengan sebaik mungkin dan merupakan dasar dari implementasi
sistem. Tahap desain dapat dibagi menjadi empat bagian, yaitu :
� Desain proses dengan menggunakan metode OOD (Object
Oriented Design)
� Desain manajemen antarmuka
� Desain manajemen model
� Desain manajemen basis data
3.2.1 Desain Proses dengan Metode OOD
Pemodelan proses atau alur kerja sebuah proses bisnis di dalam
desain sistem berorientasi objek digambarkan dengan menggunakan
sequence diagram. Setelah menggambarkan sequence diagram, maka
proses selanjutnya adalah menggambarkan kembali class diagram.
Berbeda dengan class diagram pada tahap analisa, class diagram pada
tahap desain merupakan transformasi class diagram dari tahap analisa,
dimana terdapat penambahan-penambahan seperti penambahan desain
objek dan penambahan method.
44
3.2.1.1 Sequence Diagram
1. Sequence Diagram Menentukan Formasi
: Halaman Utama : User : Kontrol Formasi : Halaman Formasi : data Formasi
1. Memilih menu f ormasi
2. Menu formasi
3. Menampilkan halaman f ormasi
4. Memilih formasi
5. query data formasi
6. Mengembal ikan hasil query
7. Menampilkan gambar f ormasi
Gambar 3.3 Sequence Diagram Menentukan Formasi
45
2. Sequence Diagram Menentukan Pemain
: User : Halaman Formasi : Kontrol SPPK : Halaman SPPK : data Pemain : data FinalFormasi
1. Memilih posisi
2. Membuka halaman SPPK
3. Menampilkan halaman SPPK
4. Memasukkan kriteria pemain
5. Mengambil data pemain yang akan dibandingkan
6. Memberikan data pemain yang akan dibandingkan
7. Menampilkan nama pemain
8. Simpan data formasi final
9. Menyimpan data formasi final
Gambar 3.4 Sequence Diagram Menentukan Pemain
46
3. Sequence Diagram Tambah Pemain
: User : Halaman Utama : Kontrol Tambah Pemain : Halaman Tambah Pemain : data Pemain
1. Memilih Menu Tambah pemain
2. Menu Tambah Pemain
4. Memasukkan data-data pemain baru
5. Simpan data pemain baru
6. Simpan data pemain
3. Menampilkan menu tambah pemain
Gambar 3.5 Sequence Diagram Tambah Pemain
47
4. Sequence Diagram Update Profil Pemain
: User : Halaman Utama : Kontrol Update Pemain : Halaman Update Pemain : data Pemain
1. Memilih Menu Update Pemain
2. Menu Update Pemain
3. Menampilkan Menu Update Pemain
4. Meng-Update Data Pemain
5. Update Data Pemain
6. Simpan Update Data Pemain
Gambar 3.6 Sequence Diagram Update Profil Pemain
48
5. Sequence Diagram Hapus Pemain
: Kontrol Hapus Pemain : User : Halaman Utama : data Pemain
1. Memilih pemain y ang akan dihapus
2. Mengklik perinatah hapus pemain
3. Delete Data Pemain
Gambar 3.7 Sequence Diagram Hapus Pemain
49
6. Sequence Diagram Melihat Profil Pemain
: User : Halaman Formasi : Kontrol Tampil Pemain : Halaman Profil Pemain : data Pemain
1. Memilih pemain
2. Data pemain yang dipilih
3. select data pemain
4. data pemain
5. Menampilkan data pemain
Gambar 3.8 Sequence Diagram Melihat Profil Pemain
50
3.2.1.2 Class Diagram tahap desain
1. Class Diagram menentukan formasi
Kontrol FormasiHalaman Formasi Digunakan oleh
Menampilkan
1..1
1..1
1..1
1..N
0..N 1..1 1..1
1..1
1..1
1..1
1..N
0..N
1..11..1
1..1
1..N
1..N
1..N
1..N
1..N
berisi
terpilihterpilih
memiliki
dimiliki
memiliki
dimiliki dimiliki
memiliki
Pemain
NoPunggung : String
NamaPemain : String
Kewarganegaraan : String
TglLahir : Date
Umur : Integer
Kaki : String
Berat : Integer
Tinggi : Integer
Kondisi : Integer
Moral : String
Cedera : String
KartuKuning : String
KartuMerah : String
TambahPemain()
UpdateProfilPemain()
HapusPemain()
LihatProfilPemain()
DetailProfilPemain
NoPunggung : String
IDProfil : String
SkorProfil : Integer
DetailProfil
IDProfil : String
NamaProfil : String
PosisiPemain
NoPunggung : String
IDPosisi : String
Posisi
IDPosisi : String
Posisi : String
NamaPosisi : String
x : Integer
y : Integer
PosisiFormasi
IDFormasi : String
IDPosisi : String
Formasi
IDFormasi : String
NamaFormasi : String
PilihFormasi()
Bermain
NoPunggung : String
IDFormasi : String
IDPosisi : String
SkorPemain : Long
HitungSkor()
Gambar 3.9 Class Diagram menentukan formasi
51
2. Class Diagram menentukan pemain
Digunakan oleh
1..1
1..1Halaman SPPK
Halaman Formasi
Kontrol SPPK
PilihPemain() Digunakan oleh
simpan
1..1
1..N
0..N 1..1 1..1
1..1
1..1
1..1
1..N
0..N
1..11..1
1..1
1..N
1..N
1..N
1..N
1..N
berisi
terpilihterpilih
memiliki
dimiliki
memiliki
dimiliki dimiliki
memiliki
Pemain
NoPunggung : String
NamaPemain : String
Kewarganegaraan : String
TglLahir : Date
Umur : Integer
Kaki : String
Berat : Integer
Tinggi : Integer
Kondisi : Integer
Moral : String
Cedera : String
KartuKuning : String
KartuMerah : String
TambahPemain()
UpdateProfilPemain()
HapusPemain()
LihatProfilPemain()
DetailProfilPemain
NoPunggung : String
IDProfil : String
SkorProfil : Integer
DetailProfil
IDProfil : String
NamaProfil : String
PosisiPemain
NoPunggung : String
IDPosisi : String
Posisi
IDPosisi : String
Posisi : String
NamaPosisi : String
x : Integer
y : Integer
PosisiFormasi
IDFormasi : String
IDPosisi : String
Formasi
IDFormasi : String
NamaFormasi : String
PilihFormasi()
Bermain
NoPunggung : String
IDFormasi : String
IDPosisi : String
SkorPemain : Long
HitungSkor()
Gambar 3.10 Class Diagram menentukan pemain
52
3. Class Diagram tambah pemain
Digunakan olehtambah1..1 1..1 Halaman Tambah PemainKontrol Tambah Pemain
1..1
1..N
0..N 1..1 1..1
1..1
1..1
1..1
1..N
0..N
1..11..1
1..1
1..N
1..N
1..N
1..N
1..N
berisi
terpilihterpilih
memiliki
dimiliki
memiliki
dimiliki dimiliki
memiliki
Pemain
NoPunggung : String
NamaPemain : String
Kewarganegaraan : String
TglLahir : Date
Umur : Integer
Kaki : String
Berat : Integer
Tinggi : Integer
Kondisi : Integer
Moral : String
Cedera : String
KartuKuning : String
KartuMerah : String
TambahPemain()
UpdateProfilPemain()
HapusPemain()
LihatProfilPemain()
DetailProfilPemain
NoPunggung : String
IDProfil : String
SkorProfil : Integer
DetailProfil
IDProfil : String
NamaProfil : String
PosisiPemain
NoPunggung : String
IDPosisi : String
Posisi
IDPosisi : String
Posisi : String
NamaPosisi : String
x : Integer
y : Integer
PosisiFormasi
IDFormasi : String
IDPosisi : String
Formasi
IDFormasi : String
NamaFormasi : String
PilihFormasi()
Bermain
NoPunggung : String
IDFormasi : String
IDPosisi : String
SkorPemain : Long
HitungSkor()
Gambar 3.11 Class Diagram tambah pemain
53
4. Class Diagram update profil pemain
Digunakan olehupdate1..1 1..1 Kontrol Update Profil Pemain Halaman Update Profil Pemain
1..1
1..N
0..N 1..1 1..1
1..1
1..1
1..1
1..N
0..N
1..11..1
1..1
1..N
1..N
1..N
1..N
1..N
berisi
terpilihterpilih
memiliki
dimiliki
memiliki
dimiliki dimiliki
memiliki
Pemain
NoPunggung : String
NamaPemain : String
Kewarganegaraan : String
TglLahir : Date
Umur : Integer
Kaki : String
Berat : Integer
Tinggi : Integer
Kondisi : Integer
Moral : String
Cedera : String
KartuKuning : String
KartuMerah : String
TambahPemain()
UpdateProfilPemain()
HapusPemain()
LihatProfilPemain()
DetailProfilPemain
NoPunggung : String
IDProfil : String
SkorProfil : Integer
DetailProfil
IDProfil : String
NamaProfil : String
PosisiPemain
NoPunggung : String
IDPosisi : String
Posisi
IDPosisi : String
Posisi : String
NamaPosisi : String
x : Integer
y : Integer
PosisiFormasi
IDFormasi : String
IDPosisi : String
Formasi
IDFormasi : String
NamaFormasi : String
PilihFormasi()
Bermain
NoPunggung : String
IDFormasi : String
IDPosisi : String
SkorPemain : Long
HitungSkor()
Gambar 3.12 Class Diagram update profil pemain
54
5. Class Diagram hapus pemain
Digunakan olehhapus1..1 1..1 Halaman UtamaKontrol Hapus Pemain
1..1
1..N
0..N 1..1 1..1
1..1
1..1
1..1
1..N
0..N
1..11..1
1..1
1..N
1..N
1..N
1..N
1..N
berisi
terpilihterpilih
memiliki
dimiliki
memiliki
dimiliki dimiliki
memiliki
Pemain
NoPunggung : String
NamaPemain : String
Kewarganegaraan : String
TglLahir : Date
Umur : Integer
Kaki : String
Berat : Integer
Tinggi : Integer
Kondisi : Integer
Moral : String
Cedera : String
KartuKuning : String
KartuMerah : String
TambahPemain()
UpdateProfilPemain()
HapusPemain()
LihatProfilPemain()
DetailProfilPemain
NoPunggung : String
IDProfil : String
SkorProfil : Integer
DetailProfil
IDProfil : String
NamaProfil : String
PosisiPemain
NoPunggung : String
IDPosisi : String
Posisi
IDPosisi : String
Posisi : String
NamaPosisi : String
x : Integer
y : Integer
PosisiFormasi
IDFormasi : String
IDPosisi : String
Formasi
IDFormasi : String
NamaFormasi : String
PilihFormasi()
Bermain
NoPunggung : String
IDFormasi : String
IDPosisi : String
SkorPemain : Long
HitungSkor()
Gambar 3.13 Class Diagram hapus pemain
55
6. Class Diagram melihat profil pemain
Digunakan olehtampil1..1 1..1 Kontrol Tampil Pemain Halaman Profil Pemain
1..1
1..N
0..N 1..1 1..1
1..1
1..1
1..1
1..N
0..N
1..11..1
1..1
1..N
1..N
1..N
1..N
1..N
berisi
terpilihterpilih
memiliki
dimiliki
memiliki
dimiliki dimiliki
memiliki
Pemain
NoPunggung : String
NamaPemain : String
Kewarganegaraan : String
TglLahir : Date
Umur : Integer
Kaki : String
Berat : Integer
Tinggi : Integer
Kondisi : Integer
Moral : String
Cedera : String
KartuKuning : String
KartuMerah : String
TambahPemain()
UpdateProfilPemain()
HapusPemain()
LihatProfilPemain()
DetailProfilPemain
NoPunggung : String
IDProfil : String
SkorProfil : Integer
DetailProfil
IDProfil : String
NamaProfil : String
PosisiPemain
NoPunggung : String
IDPosisi : String
Posisi
IDPosisi : String
Posisi : String
NamaPosisi : String
x : Integer
y : Integer
PosisiFormasi
IDFormasi : String
IDPosisi : String
Formasi
IDFormasi : String
NamaFormasi : String
PilihFormasi()
Bermain
NoPunggung : String
IDFormasi : String
IDPosisi : String
SkorPemain : Long
HitungSkor()
Gambar 3.14 Class Diagram melihat profil pemain
56
3.2.2 Desain Manajemen Antarmuka ( User Interface )
1. Halaman Utama
Odysseus 1.0Odysseus 1.0
File Edit Help
GAMBAR
Gambar 3.16 Halaman Utama
Pada halaman utama ini terdapat tiga submenu, yaitu :
• File yang berisi empat submenu yaitu : formasi, tambah pemain,
simpan formasi, simpan data pemain dan keluar.
• Edit yang berisi dua submenu yaitu : update profil pemain, dan
hapus pemain.
• Keterangan yang berisi satu submenu yaitu : perihal sistem.
57
2. Halaman Formasi
Gambar 3.17 Halaman Formasi
Pada halaman ini user melakukan proses pemilihan formasi, dan
penentuan pemain pada halaman SPPK dengan mengklik lingkaran-
lingkaran kecil pada gambar formasi.
58
3. Halaman SPPK
Gambar 3.18 Halaman SPPK
Pada halaman SPPK ini akan dilakukan proses penyeleksian pemain
dengan penentuan kriteria pemain yang diinginkan oleh pengguna, dan
penentuan bobot karakter yang akan diproses.
59
4. Halaman Tambah Pemain
Gambar 3.19 Halaman Tambah Pemain
Halaman tambah pemain berfungsi untuk membantu user dalam
melakukan penambahan data pemain, dimana untuk melakukan proses
ini user harus memasukkan profil pemain secara lengkap.
60
5. Halaman Update Profil Pemain
Kondisi
Update Profil Pemain Update Profil Pemain
File Edit Keterangan
Atribut Umum
Kewarganegaraan
Tinggi badan
Berat badan
Kaki
Umur
Tanggal Lahir
Atribut Teknik
dribbling
tackling
marking
passing
heading
shooting
finishing
crossing
technique
one on ones
handling
communication
command of area
aerial ability
throwing
ball control
tendency to punch
rushing out
reflexes
Atribut Mental
anticipation
determination
decisions
creativity
concentration
composure
bravery
aggresions
positioning
teamwork
influence
Atribut Fisik
agility
strength
stamina
pace
jumping
balance
acceleration
workrate
off the ball
Nama Pemain
No Punggung
cm
kg
26 Tahun
Iwan Sanusi 8
8
8
8
8
8
8
8
3
2
8
8
8
2
2
2
2
2
2
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
Nama Pemain
11/12/1980
Negara
Kanan
60
178
11
Cedera
Kartu Kuning
Kartu Merah
Lainnya
Moral
Status Pemain
100 %
Baik
GK
ML
MC
WBR
WBL
DMC
DR
DL
DC
SW
Posisi
AMR
AML
AMC
MR FC
Ya
Tidak
Tidak
Tidak
Ya
Ya
SimpanTambah
Kondisi
Gambar 3.20 Halaman Update Profil Pemain
Halaman ini berfungsi untuk meng-update profil pemain yang dapat
berubah-ubah.
61
6. Halaman Profil Pemain
Gambar 3.21 Halaman Profil Pemain
Halaman ini berfungsi ketika user ingin melihat profil pemain seperti,
atribut teknik, atribut mental, atribut fisik, dan lain-lain.
3.2.3 Desain Manajemen Model
Model yang dipakai dalam SPPK ini adalah model optimasi
dikombinasikan dengan simulasi, yakni suatu pemodelan yang
mengimitasikan realita dari sebuah sistem dengan segala kejadian yang
terjadi di dalamnya.
Model disajikan sebagai fungsi yang menggambarkan hubungan
antara parameter-parameter yakni Atribut Teknik, Atribut Mental, dan
Atribut Fisik yang berperan dalam penentuan siapa pemain yang paling
tepat untuk mengisi sebuah posisi dalam suatu formasi. Model
memungkinkan pemakai untuk dapat mengubah nilai parameter-parameter,
62
sedangkan fungsi yang dipakai tidak dapat diubah.
Model yang dirancang menyajikan proses perhitungan sebagai
berikut :
1. Nilai parameter Atribut Teknik
A1 =
∑
∑=
j
i
i
j
i
ii
bt
btt1
)*(
..... (1)
A1 = nilai parameter Atribut Teknik
i = indeks Atribut Teknik
j = jumlah Atribut Teknik yang akan melalui proses
perhitungan
ti = nilai Atribut Teknik ke-i
bti = bobot nilai untuk Atribut Teknik ke-i
Nilai ti diisi dengan angka berkisar antara 1 sampai dengan 10,
dimana bila angka semakin mendekati nilai 10, maka angka
tersebut mengindikasikan bahwa semakin baik juga karakter
pemain yang termasuk dalam Atribut Teknik.
Semakin tinggi nilai A1, maka semakin besar pula peluang
pemain yang bersangkutan untuk terpilih menjadi pemain yang
paling tepat untuk mengisi sebuah posisi dalam suatu formasi.
63
2. Nilai parameter Atribut Mental
A2 =
∑
∑=
j
i
i
j
i
ii
bm
bmm1
)*(
..... (2)
A2 = nilai parameter Atribut Mental
i = indeks Atribut Mental
j = jumlah Atribut Mental yang akan melalui proses
perhitungan
mi = nilai Atribut Mental ke-i
bmi = bobot nilai untuk Atribut Mental ke-i
Nilai mi diisi dengan angka berkisar antara 1 sampai dengan 10,
dimana bila angka semakin mendekati nilai 10, maka angka
tersebut mengindikasikan bahwa semakin baik juga karakter
pemain yang termasuk dalam Atribut Mental.
Semakin tinggi nilai A2, maka semakin besar pula peluang
pemain yang bersangkutan untuk terpilih menjadi pemain yang
paling tepat untuk mengisi sebuah posisi dalam suatu formasi.
64
3. Nilai parameter Atribut Fisik
A3 =
∑
∑=
j
i
i
j
i
ii
bp
bpp1
)*(
..... (3)
A3 = nilai parameter Atribut Fisik
i = indeks Atribut Fisik
j = jumlah Atribut Fisik yang akan melalui proses
perhitungan
pi = nilai Atribut Fisik ke-i
bpi = bobot nilai untuk Atribut Fisik ke-i
Nilai pi diisi dengan angka berkisar antara 1 sampai dengan 10,
dimana bila angka semakin mendekati nilai 10, maka angka
tersebut mengindikasikan bahwa semakin baik juga karakter
pemain yang termasuk dalam Atribut Fisik.
Semakin tinggi nilai A3, maka semakin besar pula peluang
pemain yang bersangkutan untuk terpilih menjadi pemain yang
paling tepat untuk mengisi sebuah posisi dalam suatu formasi.
Nilai atribut teknik, atribut mental, dan atribut fisik beserta
bobotnya dimasukkan oleh pelatih sebagai pengguna, namun untuk bobot
dimasukkan pada saat proses penyeleksian dilaksanakan, sehingga nilai
bobot dapat diubah-ubah sesuai dengan kriteria pemain yang diinginkan
oleh pelatih selaku pengambil keputusan. Berikut ini merupakan
65
penjelasan dari tiap nilai bobot yang dipergunakan dalam proses
penghitungan :
Tabel 3.7 Bobot nilai
Tingkat Kepentingan Nilai Bobot
Kurang penting, tapi perlu 1
Cukup penting 2
Penting 3
Sangat Penting 4
Sangat Penting Sekali 5
Untuk proses penghitungan skor total nilai parameter dari setiap
pemain diperoleh rumus sebagai berikut :
Skor = l
Al
k
k∑=1 ..... (4)
Skor = nilai total parameter yang diperoleh pemain
k = indeks parameter
l = jumlah parameter yang digunakan
Ak = nilai parameter ke-k
Setelah dilakukan proses perhitungan skor total pada nilai-nilai
parameter, selanjutnya skor total akan diurutkan dari yang terbesar sampai
dengan yang terkecil, dan pemain yang memiliki skor total yang paling
besar, namanya akan ditampilkan pada gambar formasi pada halaman
formasi sesuai dengan posisi yang dipilih.
66
3.2.4 Desain Manajemen Basisdata
3.2.4.1 Desain Relasi Antar Tabel
Gambar 3.22 Relasi Antar Tabel
3.2.4.2 Desain Struktur Tabel
1. Tabel formation
Tabel 3.8 Tabel formation
Nama Field Tipe Data Size Nulls?
id_formation VARCHAR 10 No
formation_name VARCHAR 20 No
67
2. Tabel player
Tabel 3.9 Tabel player
Nama Field Tipe Data Size Nulls?
no_player VARCHAR 5 No
player_name VARCHAR 30 No
nationality VARCHAR 20 No
birth_date DATE No
age INT 5 No
foot VARCHAR 10 No
weight INT 5 No
height INT 5 No
conditione INT 5 Yes
morale VARCHAR 10 Yes
injuries VARCHAR 10 Yes
yellow_card VARCHAR 10 Yes
red_card VARCHAR 10 Yes
3. Tabel formation_position
Tabel 3.10 Tabel formation_position
Nama Field Tipe Data Size Nulls?
id_formasi VARCHAR 10 No
id_position VARCHAR 5 No
4. Tabel position
Tabel 3.11 Tabel position
Nama Field Tipe Data Size Nulls?
id_position VARCHAR 10 No
position VARCHAR 10 No
position_name VARCHAR 30 No
x INT 10 No
y INT 10 No
68
5. Tabel player_position
Tabel 3.12 Tabel player_position
Nama Field Tipe Data Size Nulls?
no_player VARCHAR 5 No
id_formation VARCHAR 10 No
6. Tabel detail_profile
Tabel 3.13 Tabel detail_profile
Nama Field Tipe Data Size Nulls?
id_profile VARCHAR 10 No
profile_name VARCHAR 30 No
7. Tabel detail_player_profile
Tabel 3.14 Tabel detail_player_profile
Nama Field Tipe Data Size Nulls?
no_player VARCHAR 5 No
id_profile VARCHAR 10 No
profile_score INT 10 No
8. Tabel formation_save
Table 3.15 Tabel formation_save
Nama Field Tipe Data Size Nulls?
id_fs INT 5 No
fs_name VARCHAR 20 No
9. Tabel playing
Table 3.16 Tabel playing
Nama Field Tipe Data Size Nulls?
id_fs INT 5 No
no_player VARCHAR 5 No
id_formasi VARCHAR 10 No
id_position VARCHAR 10 No
player_score FLOAT 10 No
69
BAB IV
IMPLEMENTASI SISTEM
4.1 Karakteristik Sistem
Sistem pendukung pengambilan keputusan ini dibuat untuk membantu
seorang pelatih menentukan siapa pemain yang paling tepat untuk mengisi
suatu posisi dalam sebuah formasi. Sistem ini memiliki beberapa fungsi
yang telah disesuaikan dengan kebutuhan seorang pelatih dalam proses
penentuan pemain. Fungsi-fungsi yang dimiliki oleh sistem
diimplementasikan ke dalam bentuk menu, antara lain :
1. Menu Formasi
Menu ini membantu pelatih untuk memilih formasi yang akan
digunakan.
2. Menu Tambah Pemain
Menu ini berfungsi untuk menambahkan data pemain baru.
3. Menu Update Pemain
Menu ini berfungsi untuk mengubah karakter-karakter yang
dimiliki seorang pemain.
4. Menu Profil Pemain
Menu ini berfungsi untuk menampilkan karakter-karakter yang
dimiliki seorang pemain.
70
5. Menu SPPK
Menu ini berfungsi untuk membantu pelatih menentukan kriteria
pemain pada suatu posisi.
4.2 Implementasi Basisdata
Basisdata pada sistem pendukung pengambilan keputusan ini dibangun
dengan mesin basisdata MySQL Server 5.0, sedangkan untuk pembuatan
basisdata digunakan MySQL Query Browser.
Pembuatan basisdata pada sistem pendukung pengambilan keputusan
ini meliputi dua proses, yaitu create database dan pembuatan tabel-tabel
yang terdapat di dalam basisdata. Pada sistem pendukung pengambilan
keputusan ini hanya terdapat satu basisdata saja. Proses create database
dapat dilakukan dengan dua cara, yang pertama secara manual dengan
menggunakan perintah SQL, yaitu:
create database if not exists `spkbola`;
USE `spkbola`;
Sedangkan pada cara yang kedua proses pembuatan basisdata
dilakukan menggunakan MySQL Query Browser, caranya lebih sederhana
dibandingkan dengan cara yang pertama, pertama klik kanan pada jendela
Schemata, lalu pilih menu Create New Schema, untuk lebih jelasnya dapat
dilihat pada gambar 4.1
71
Gambar 4.1 Proses Create New Schema
Langkah selanjutnya adalah isikan nama Schema yang akan dibuat,
lalu tekan tombol ‘OK’.
Gambar 4.2 Proses penamaan pada schema baru
72
Setelah itu pada jendela Schemata akan tampil Schema yang baru saja
dibuat.
Gambar 4.3 Schema baru telah selesai dibuat
Setelah proses create database selesai, maka proses selanjutnya adalah
pembuatan tabel-tabel yang dibutuhkan oleh sistem sesuai dengan desain
struktur tabel yang terdapat pada Bab sebelumnya. Tabel-tabel yang harus
dibuat antara lain :
1. Tabel player
Tabel player berfungsi untuk menyimpan data-data umum setiap
pemain. Adapun perintah SQL untuk membuat tabel player adalah
sebagai berikut :
CREATE TABLE `player` ( `no_player` varchar(5) NOT NULL, `player_name` varchar(30) NOT NULL, `nationality` varchar(20) NOT NULL, `birth_date` date NOT NULL,
73
`age` varchar(10) NOT NULL, `foot` varchar(10) NOT NULL, `weight` varchar(10) NOT NULL, `height` varchar(10) NOT NULL, `conditione` varchar(10) default NULL, `morale` varchar(10) default NULL, `injuries` varchar(10) default 'No', `yellow_card` varchar(10) default 'No', `red_card` varchar(10) default 'No', PRIMARY KEY (`no_player`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2. Tabel position
Tabel position berfungsi untuk menyimpan data-data posisi pemain
seperti id_position, position, position_name, x, dan y. Adapun
perintah SQL untuk membuat tabel position adalah sebagai berikut:
CREATE TABLE `position` ( `id_position` varchar(10) NOT NULL, `position` varchar(10) NOT NULL, `position_name` varchar(30) NOT NULL, `x` int(10) unsigned default NULL, `y` int(10) unsigned default NULL, PRIMARY KEY (`id_position`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Data-data pada tabel position langsung diisikan menggunakan
perintah SQL sebagai berikut :
insert into `position` values ('pos01','GK','Goal Keeper',154,418), ('pos02','SW','Sweeper',154,382), ('pos03','DC','Defender Center',100,347), ('pos04','DC','Defender Center',154,347), ('pos05','DC','Defender Center',207,347), ('pos06','DL','Defender Left',30,347), ('pos07','DR','Defender Right',276,347), ('pos08','DMC','Defensive Midfielder Center',100,278), ('pos09','DMC','Defensive Midfielder Center',154,278), ('pos10','DMC','Defensive Midfielder Center',207,278), ('pos11','WBL','Wing Back Left',30,278), ('pos12','WBR','Wing Back Right',276,278), ('pos13','MC','Midfielder Center',100,206),
74
('pos14','MC','Midfielder Center',154,206), ('pos15','MC','Midfielder Center',207,206), ('pos16','ML','Midfielder Left',30,206), ('pos17','MR','Midfielder Right',276,206), ('pos18','AMC','Attacking Midfielder Center',100,137), ('pos19','AMC','Attacking Midfielder Center',154,137), ('pos20','AMC','Attacking Midfielder Center',207,137), ('pos21','AML','Attacking Midfielder Left',30,137), ('pos22','AMR','Attacking Midfielder Right',276,137), ('pos23','FC','Forward Center',100,68), ('pos24','FC','Forward Center',154,68), ('pos25','FC','Forward Center',207,68);
3. Tabel detail_profile
Tabel detail_profile berfungsi untuk menyimpan data-data detail
profil pemain. Adapun perintah SQL untuk membuat tabel
detail_profile adalah sebagai berikut :
CREATE TABLE `detail_profile` ( `id_profile` varchar(10) NOT NULL, `profile_name` varchar(30) NOT NULL, PRIMARY KEY (`id_profile`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Data-data pada tabel detail_profile langsung diisikan menggunakan
perintah SQL sebagai berikut :
insert into `detail_profile` values ('pro01','crossing'), ('pro02','dribbling'), ('pro03','finishing'), ('pro04','shooting'), ('pro05','heading'), ('pro06','passing'), ('pro07','marking'), ('pro08','tackling'), ('pro09','ball control'), ('pro10','technique'), ('pro11','throwing'), ('pro12','aerial ability'),
75
('pro13','command of area'), ('pro14','communication'), ('pro15','handling'), ('pro16','one on ones'), ('pro17','reflexes'), ('pro18','rushing out'), ('pro19','tendency to punch'), ('pro20','aggresions'), ('pro21','anticipation'), ('pro22','bravery'), ('pro23','composure'), ('pro24','concentration'), ('pro25','creativity'), ('pro26','decisions'), ('pro27','determination'), ('pro28','influence'), ('pro29','positioning'), ('pro30','teamwork'), ('pro31','workrate'), ('pro32','off the ball'), ('pro33','acceleration'), ('pro34','agility'), ('pro35','balance'), ('pro36','jumping'), ('pro37','pace'), ('pro38','stamina'), ('pro39','strength');
4. Tabel formation
Tabel formation berfungsi untuk menyimpan data-data formasi.
Adapun perintah SQL untuk membuat tabel formation adalah
sebagai berikut :
CREATE TABLE `formation` ( `id_formation` varchar(10) NOT NULL, `formation_name` varchar(20) NOT NULL, PRIMARY KEY (`id_formation`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Data-data pada tabel detail_profile langsung diisikan menggunakan
perintah SQL sebagai berikut :
insert into `formation` values ('for01','4-4-2'), ('for02','3-5-2');
76
5. Tabel player_position
Tabel player_position berfungsi sebagai tabel relasi antara tabel
player dengan tabel position. Adapun perintah SQL untuk
membuat tabel player_position adalah sebagai berikut :
CREATE TABLE `player_position` ( `no_player` varchar(5) NOT NULL, `id_position` varchar(10) NOT NULL, KEY `FK_position_player_1` (`no_player`), KEY `FK_position_player_2` (`id_position`), CONSTRAINT `FK_position_player_1` FOREIGN KEY (`no_player`) REFERENCES `player` (`no_player`), CONSTRAINT `FK_position_player_2` FOREIGN KEY (`id_position`) REFERENCES `position` (`id_position`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
6. Tabel detail_player_profile
Tabel detail_player_profile berfungsi sebagai tabel relasi antara
tabel player dengan tabel detail_profile. Adapun perintah SQL
untuk membuat tabel formation adalah sebagai berikut :
CREATE TABLE `detail_player_profile` ( `no_player` varchar(5) NOT NULL, `id_profile` varchar(10) NOT NULL, `profile_score` int(10) unsigned NOT NULL, KEY `FK_detail_player_profile_1` (`no_player`), KEY `FK_detail_player_profile_2` (`id_profile`), CONSTRAINT `FK_detail_player_profile_1` FOREIGN KEY (`no_player`) REFERENCES `player` (`no_player`), CONSTRAINT `FK_detail_player_profile_2` FOREIGN KEY (`id_profile`) REFERENCES `detail_profile` (`id_profile`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
77
7. Tabel formation_position
Tabel formation_position berfungsi sebagai tabel relasi antara tabel
formation dengan tabel position. Adapun perintah SQL untuk
membuat tabel formation_position adalah sebagai berikut :
CREATE TABLE `formation_position` ( `id_formation` varchar(10) NOT NULL, `id_position` varchar(10) NOT NULL, KEY `FK_formation_position_1` (`id_formation`), KEY `FK_formation_position_2` (`id_position`), CONSTRAINT `FK_formation_position_1` FOREIGN KEY (`id_formation`) REFERENCES `formation` (`id_formation`), CONSTRAINT `FK_formation_position_2` FOREIGN KEY (`id_position`) REFERENCES `position` (`id_position`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Data-data pada tabel formation_position langsung diisikan
menggunakan perintah SQL sebagai berikut :
insert into `formation_position` values ('for01','pos01'), ('for01','pos03'), ('for01','pos05'), ('for01','pos06'), ('for01','pos07'), ('for01','pos13'), ('for01','pos15'), ('for01','pos16'), ('for01','pos17'), ('for01','pos23'), ('for01','pos25'), ('for02','pos01'), ('for02','pos02'), ('for02','pos03'), ('for02','pos05'), ('for02','pos13'), ('for02','pos14'), ('for02','pos15'), ('for02','pos16'), ('for02','pos17'), ('for02','pos23'), ('for02','pos25');
78
8. Tabel playing
Tabel playing berfungsi sebagai tabel relasi antara tabel player,
tabel position, dan tabel formation. Adapun perintah SQL untuk
membuat tabel playing adalah sebagai berikut :
CREATE TABLE `playing` ( `id_fs` int(5) unsigned zerofill NOT NULL auto_increment, `no_player` varchar(5) NOT NULL, `id_formation` varchar(10) NOT NULL, `id_position` varchar(10) NOT NULL, `player_score` float unsigned NOT NULL, KEY `FK_playing_1` (`no_player`), KEY `FK_playing_2` (`id_formation`), KEY `FK_playing_3` (`id_position`), KEY `FK_playing_4` (`id_fs`), CONSTRAINT `FK_playing_1` FOREIGN KEY (`no_player`) REFERENCES `player` (`no_player`), CONSTRAINT `FK_playing_2` FOREIGN KEY (`id_formation`) REFERENCES `formation` (`id_formation`), CONSTRAINT `FK_playing_3` FOREIGN KEY (`id_position`) REFERENCES `position` (`id_position`), CONSTRAINT `FK_playing_4` FOREIGN KEY (`id_fs`) REFERENCES `formation_save` (`id_fs`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='InnoDB free: 3072 kB; (`id_fs`) REFER `spkbola/formation_sav';
9. Tabel filter_playing
Tabel filter_playing berfungsi untuk menyimpan sementara data-
data hasil perhitungan tiap pemain sebelum nantinya data-data
tersebut akan disimpan pada tabel playing. Adapun perintah SQL
untuk membuat tabel filter_playing adalah sebagai berikut :
CREATE TABLE `filter_playing` ( `no_player` varchar(5) NOT NULL, `id_position` varchar(10) NOT NULL, `player_score` float unsigned NOT NULL, `score_technical` float unsigned NOT NULL, `score_mental` float unsigned NOT NULL,
79
`score_physical` float unsigned NOT NULL, KEY `FK_filter_playing_1` (`no_player`), KEY `FK_filter_playing_2` (`id_position`), CONSTRAINT `FK_filter_playing_1` FOREIGN KEY (`no_player`) REFERENCES `player` (`no_player`), CONSTRAINT `FK_filter_playing_2` FOREIGN KEY (`id_position`) REFERENCES `position` (`id_position`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
10. Tabel formation_save
Tabel formation_save berfungsi untuk menyimpan data formasi
(id_fs dan fs_name) dari proses simpan pada halaman formasi.
Adapun perintah SQL untuk membuat tabel formation_save adalah
sebagai berikut :
CREATE TABLE `formation_save` ( `id_fs` int(5) unsigned NOT NULL auto_increment, `fs_name` varchar(20) NOT NULL, PRIMARY KEY (`id_fs`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
4.3 Koneksi ke Basisdata
JDBC (Java Database Connectivity) API (Application Programming
Interface) digunakan untuk mengakses berbagai jenis tabular data yang
terdapat pada mesin basisdata.
Pada sistem ini terdapat satu file khusus untuk menangani koneksi ke
basisdata, yaitu file koneksi.java. File ini terdiri dari dua method, yakni :
1. private boolean loadDriver()
Method ini berfungsi untuk me-load JDBC driver. Nilai yang
dikembalikan bernilai true jika proses loading JDBC driver
80
berhasil dilakukan dan bernilai false jika gagal. Listing program
dari method private boolean loadDriver() adalah sebagai
berikut :
private boolean loadDriver(){ try { Class.forName("com.mysql.jdbc.Driver"); return true; } catch (Exception exc){ System.err.println("Error: " + exc); return false; } }
2. public boolean koneksi2DBMS()
Method ini berfungsi untuk koneksi ke basisdata. Listing
programnya adalah sebagai berikut :
public boolean koneksi2DBMS(){ loadDriver(); try { Connection con = DriverManager.getConnection ("jdbc:mysql://localhost:3306/spkbola","root",""); conn = con; return true; } catch (Exception exc){ System.err.println("Error: " + exc); return false; } }
81
4.4 Implementasi Antar Muka
1. Halaman Utama
Gambar 4.4 Halaman Utama
Halaman utama merupakan halaman pertama yang akan dijumpai oleh
pengguna ketika menjalankan program sistem pendukung pengambilan
keputusan ini. Pada halaman utama terdapat tiga menu, yaitu :
1. Menu File yang berisi lima submenu yaitu :
1.1. Submenu Formasi berfungsi untuk memanggil halaman
Formasi.
1.2. Submenu Tambah Pemain berfungsi untuk memanggil
halaman Tambah Pemain.
1.3. Submenu Simpan Formasi berfungsi untuk menyimpan
susunan formasi yang sudah dilengkapi dengan nama pemain
yang harus mengisi posisi dalam formasi yang telah dipilih.
82
1.4. Submenu Simpan Profil Pemain berfungsi untuk menyimpan
profil dari pemain baru atau profil pemain yang telah di-
update. Pada halaman utama ini submenu Simpan Profil
Pemain tidak dapat dieksekusi karena pada halaman ini tidak
terdapat proses yang berhubungan dengan profil pemain.
1.5. Submenu Keluar berfungsi untuk keluar dari program.
2. Menu Edit yang berisi tiga submenu yaitu :
2.1. Submenu Update Profil Pemain berfungsi untuk memanggil
halaman Update Profil Pemain.
2.2. Submenu Hapus Data Pemain berfungsi untuk menghapus
data pemain. Pada halaman ini submenu Hapus Data Pemain
tidak dapat dieksekusi.
3. Menu Keterangan terdiri dari satu submenu, yaitu :
3.1. Submenu Perihal berfungsi untuk memanggil halaman
Perihal.
83
2. Halaman Formasi
Gambar 4.5 Halaman Formasi
Pada halaman ini pengguna dapat memilih formasi mana yang akan
digunakan, sesuai dengan keinginan pengguna. Selain itu, pengguna
dapat melihat informasi seluruh pemain, pengguna juga dapat
menentukan siapa pemain yang berhak mengisi suatu posisi pada
formasi yang telah dipilih oleh pengguna, sesuai dengan karakter yang
diinginkan, dengan cara klik dua kali pada lingkaran merah yang
mewakili setiap posisi pada formasi, maka akan tampil halaman SPPK.
Pada halaman SPPK akan terjadi proses perhitungan nilai karakter
pemain beserta bobot berdasarkan kriteria yang diinginkan oleh pelatih,
dari proses perhitungan tersebut akan didapatkan sebuah nilai yang
84
nantinya akan dibandingkan, untuk mendapatkan sebuah nama pemain
yang berhak mengisi suatu posisi. Pengguna dapat melihat hasil
perbandingan yang dilakukan oleh sistem dengan menekan tombol Lihat.
Adapun hasil dari perbandingan adalah nama-nama pemain yang
memiliki karakter sesuai dengan kriteria yang diinginkan oleh pelatih
sebagai pengguna. Nama-nama tersebut akan langsung muncul di bawah
lingkaran merah, kecuali pada proses perbandingan ditemukan pemain
yang memiliki nilai maksimum di lebih dari satu posisi. Pada kasus ini,
sistem akan langsung menampilkan sebuah informasi (lihat gambar 4.5)
yang menyatakan bahwa dari perhitungan yang dilakukan terdapat
seorang pemain dengan nilai maksimum pada lebih dari satu posisi.
Informasi yang ditampilkan akan meminta pengguna untuk menentukan
dimana pemain tersebut akan diletakkan dengan menekan salah satu
radio button yang sudah tersedia.
Gambar 4.6 Halaman Info
85
Berikut ini adalah listing program untuk menampilkan nama-nama
pemain yang memiliki karakter sesuai dengan kriteria yang diinginkan
oleh pengguna.
...
... Playing bantu1 = new Playing(); PosisiFormasi bantu2 = new PosisiFormasi(); Posisi bantu3 = new Posisi(); Formasi bantu4 = new Formasi(); Pemain bantu5 = new Pemain(); ... ... else if(e.getSource()==lihat){ int baris = bantu1.CekTabel(); String[] pos = bantu2.getPosisi((String)pilih. getSelectedItem()); if(baris==0){ JOptionPane.showMessageDialog(null,"Untuk dapat menampilkan nama pemain,\n" + "Silahkan masukkan kriteria pemain pada\n" + "setiap posisi!!\nKlik dua kali pada lingkaran merah\n" + "untuk dapat memasukkan kriteria pemain\n" + "yang anda inginkan!!","Info", JOptionPane.INFORMATION_MESSAGE); } else{ int counter = 0; for(int i=0;i<pos.length;i++){ String posisi = bantu1.CekPosisi(pos[i]); if(posisi==null){ JOptionPane.showMessageDialog(null,"Anda belum " + "memasukkan kriteria pemain pada posisi "+ bantu3.getNamaPosisi(pos[i])+" ","Info", JOptionPane.INFORMATION_MESSAGE); FormDss appli = new FormDss(bantu3. getNamaPosisi(pos[i]),pos[i]); i = pos.length; } else counter++; } if(counter==11){ setPickPos((String)pilih.getSelectedItem()); Thread thread = new Thread(canvas); thread.start(); if(pilih.getSelectedIndex()==0){ canvas.masukan = (String)pilih.getSelectedItem();
86
} else if(pilih.getSelectedIndex()==1){ canvas.masukan = (String)pilih.getSelectedItem(); } canvas.view = true; } } } public void setPickPos(String masukan){ posi = bantu2.getPosisi(masukan); for(int i=0;i<posi.length;i++){ max_score[i] = bantu1.getNilaiMax(posi[i]); in_nama[i] = bantu1.getNamaPemain(max_score[i],posi[i]); } String temp = " "; String namaSama = ""; int[] jum_nama = new int[11]; for(int i=0;i<11;i++){ jum_nama[i] = 0; } for(int i=0;i<11;i++){ temp = in_nama[i]; if(temp.compareTo(namaSama)!=0){ for(int j=0;j<11;j++){ if(temp.compareTo(in_nama[j])==0){ jum_nama[i] = jum_nama[i]+1; if(jum_nama[i]>1) namaSama = temp; } } } } String[] temp_posisi = new String[0]; int[] index = new int[0]; for(int i=0;i<11;i++){ if(jum_nama[i]>1){ int k=0; temp_posisi = new String[jum_nama[i]]; index = new int[jum_nama[i]]; for(int j=0;j<11;j++){ if(in_nama[i].compareTo(in_nama[j])==0){ temp_posisi[k]=posi[j]; index[k]=j; k++; } }
87
FormPlus appli = new FormPlus(this, true,temp_posisi,index,in_nama[i]); int index2 = appli.getIndex(); max_score[index2] = bantu1.getNilaiMax2(posi[index2], in_nama[i]); in_nama[index2]=bantu1.getNamaPemain2( max_score[index2], posi[index2],in_nama[i]); } } canvas.inp_nama = in_nama; for(int i=0;i<posi.length;i++){ for(int j=0;j<fieldNama.length;j++){ if(fieldNama[j].getText().compareTo( in_nama[i])==0){ pickPos[j].setText(bantu3.getNamaPosisi( posi[i])); id_posisi[j]=posi[i]; } } } for(int i=0;i<pickPos.length;i++){ if(pickPos[i].getText().compareTo("")==0){ pickPos[i].setText("SUB"); id_posisi[i] = "SUB"; } } } ... ... class ArcCanvas extends Canvas implements Runnable, MouseListener{ private Ball data; private Nama inputNama; String masukan=null; boolean view = false; int inX[][] = new int[0][0]; ImageIcon dot,lap; Image i_dot,i_lap; String[] inp_nama = new String[11]; public ArcCanvas(){ data = new Ball(); inputNama = new Nama(); addMouseListener(this); dot = new ImageIcon("D:/DOPUNIC'S/JAVA AREA" + "/Latihan/latmysql/images/bulet2_kcl.gif"); i_dot = dot.getImage(); lap = new ImageIcon("D:/DOPUNIC'S/JAVA AREA" + "/Latihan/latmysql/images/lapngan.gif"); i_lap = lap.getImage(); }
88
public void paint(Graphics g){ ... ... g.setFont(new Font("arial",Font.BOLD,12)); int panjang1 = inputNama.getNama1().length(); int minus1 = 0; if(panjang1>4) minus1 = (panjang1/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama1(),x1-minus1,y1+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama1(),x1-(minus1+1),y1+31); int panjang2 = inputNama.getNama2().length(); int minus2 = 0; if(panjang2>4) minus2 = (panjang2/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama2(),x2-minus2,y2+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama2(),x2-(minus2+1),y2+31); int panjang3 = inputNama.getNama3().length(); int minus3 = 0; if(panjang3>4) minus3 = (panjang3/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama3(),x3-minus3,y3+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama3(),x3-(minus3+1),y3+31); int panjang4 = inputNama.getNama4().length(); int minus4 = 0; if(panjang4>4) minus4 = (panjang4/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama4(),x4-minus4,y4+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama4(),x4-(minus4+1),y4+31); int panjang5 = inputNama.getNama5().length(); int minus5 = 0; if(panjang5>4) minus5 = (panjang5/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama5(),x5-minus5,y5+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama5(),x5-(minus5+1),y5+31); int panjang6 = inputNama.getNama6().length(); int minus6 = 0; if(panjang6>4) minus6 = (panjang6/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama6(),x6-minus6,y6+30); g.setColor(new Color(244,244,0));
89
g.drawString(inputNama.getNama6(),x6-(minus6+1),y6+31); int panjang7 = inputNama.getNama7().length(); int minus7 = 0; if(panjang7>4) minus7 = (panjang7/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama7(),x7-minus7,y7+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama7(),x7-(minus7+1),y7+31); int panjang8 = inputNama.getNama8().length(); int minus8 = 0; if(panjang8>4) minus8 = (panjang8/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama8(),x8-minus8,y8+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama8(),x8-(minus8+1),y8+31); int panjang9 = inputNama.getNama9().length(); int minus9 = 0; if(panjang9>4) minus9 = (panjang9/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama9(),x9-minus9,y9+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama9(),x9-(minus9+1),y9+31); int panjang10 = inputNama.getNama10().length(); int minus10 = 0; if(panjang10>4) minus10 = (panjang10/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama10(),x10-minus10,y10+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama10(),x10-(minus10+1),y10+31); int panjang11 = inputNama.getNama11().length(); int minus11 = 0; if(panjang11>4) minus4 = (panjang11/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama11(),x11-minus11,y11+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama11(),x11-(minus11+1),y11+31); } public void run(){ if(view){ inputNama.setNama1(inp_nama[0]); inputNama.setNama2(inp_nama[1]); inputNama.setNama3(inp_nama[2]); inputNama.setNama4(inp_nama[3]); inputNama.setNama5(inp_nama[4]);
90
inputNama.setNama6(inp_nama[5]); inputNama.setNama7(inp_nama[6]); inputNama.setNama8(inp_nama[7]); inputNama.setNama9(inp_nama[8]); inputNama.setNama10(inp_nama[9]); inputNama.setNama11(inp_nama[10]); cobain(masukan); repaint(); view = false; } else if(masukan!=null){ setTampilanNama(); cobain(masukan); repaint(); } try{ Thread.sleep(200); } catch(Exception e){} }
3. Halaman SPPK
Gambar 4.7 Halaman SPPK
91
Pada halaman ini dilakukan proses penentuan kriteria pemain dengan
cara memilih karakter-karakter mana yang penting pada seorang pemain
untuk dapat mengisi suatu posisi dan juga penentuan bobot untuk tiap
karakter yang dipilih sebagai indikator seberapa penting karakter
tersebut. Setelah kriteria pemain ditentukan, untuk memprosesnya
pengguna harus mengklik tombol Proses.
Karakter-karakter yang telah dipilih beserta bobot nilainya akan diproses
sesuai dengan proses perhitungan yang telah dijabarkan pada bab tiga.
Adapun detail proses yang terjadi dapat dilihat pada listing program di
bawah ini :
else if(e.getSource()==proses){ String position = (String) cmbPos.getSelectedItem(); posisiPemain bantu1 = new posisiPemain(); DetailPlayerProfile bantu3 = new DetailPlayerProfile(); Playing bantu4 = new Playing(); String[] noPung = bantu1.getNoPunggungNama(position); getIdProfil(); getBobot(); score = new int[in_profil.length]; for(int i = 0;i<noPung.length;i++){ for(int j=0;j<in_profil.length;j++){ if(in_profil[j]!=null) score[j] = bantu3.getScore(noPung[i], in_profil[j]); else score[j] = 0; } SkorTech(); SkorMental(); SkorPhysic(); SkorTotal(); bantu4.simpankeFilter(noPung[i], id_pos, skorTotal,skorTech, skorMental,skorPhysic); } setVisible(false); }
92
public void getIdProfil(){ int n=0; DetailProfil bantu2 = new DetailProfil(); for (int i = 0; i<chkAttr.length ; i++){ if(chkAttr[i].isSelected()){ in_profil[i] = bantu2.getIDProfil(chkAttr[i].getText()); } else in_profil[i] = null; } } public void getBobot(){ int incom = 0; for(int i = 0 ;i<cmbAttr.length;i++){ if(cmbAttr[i].isEnabled()){ String combo = (String) cmbAttr[i].getSelectedItem(); incom = Integer.parseInt(combo); nilai[i] = incom; } } } public void SkorTech(){ TotTech = 0; BobotTech = 0; skorTech = 0; for(int i=0;i<19;i++){ TotTech = TotTech + (score[i]*nilai[i]); BobotTech = BobotTech + nilai[i]; } if(BobotTech!=0) skorTech = TotTech / BobotTech; else skorTech = 0; } public void SkorMental(){ TotMental = 0; BobotMental = 0; for(int i=19;i<32;i++){ TotMental = TotMental + (score[i]*nilai[i]); BobotMental = BobotMental + nilai[i]; } if(BobotMental!=0) skorMental = TotMental / BobotMental; else skorMental = 0; }
93
public void SkorPhysic(){ TotPhysic = 0; BobotPhysic = 0; for(int i=32;i<39;i++){ TotPhysic = TotPhysic + (score[i]*nilai[i]); BobotPhysic = BobotPhysic + nilai[i]; } if(BobotPhysic!=0) skorPhysic = TotPhysic / BobotPhysic; else skorPhysic = 0; } public void SkorTotal(){ skorTotal = 0; skorTotal = (skorTech + skorMental + skorPhysic) / 3; }
Import java.sql.*; public class posisiPemain { ... ... public String[] getNoPunggungNama(String in_pos, String kaki, int in_age, String op1, int in_weight, String op2, int in_height, String op3, int in_condition, String op4){ rs = null; ko = new Koneksi(); ko.koneksi2DBMS(); try{ stmt = ko.conn.createStatement(); sql = "select c.player_name, a.no_player " + "from player_position a, position b, player c " + "where b.position = '"+in_pos+"' " + "and a.id_position = b.id_position " + "and a.no_player = c.no_player " + "and c.foot like '"+kaki+"' " + "and c.age "+op1+ " "+in_age+" " + "and c.weight "+op2+ " "+in_weight+" "+ "and c.height "+op3+ " "+in_height+" "+ "and c.conditione "+op4+ " "+in_condition+" "+ "and c.injuries like 'no'" + "and c.red_card like 'no'" + "group by a.no_player"; rs = stmt.executeQuery(sql); rs.last(); int p = rs.getRow(); posit = new String[p]; //nama = new String[p];
94
rs.beforeFirst(); int n=0; while(rs.next()){ posit[n] = rs.getString("no_player"); //nama[n] = rs.getString("player_name"); n++; } stmt.close(); ko.conn.close(); } catch(Exception exc){ System.err.println("Error: " + exc); } return posit; } ... ... }
import java.sql.*; public class DetailPlayerProfile { ... ... public int getScore(String in_noPung, String in_profil){ rs = null; ko = new Koneksi(); ko.koneksi2DBMS(); try{ stmt = ko.conn.createStatement(); String sql = "select * " + "from detail_player_profile " + "where no_player = '"+in_noPung+"' " + "and id_profile = '"+in_profil+"'"; rs = stmt.executeQuery(sql); while(rs.next()){ score = rs.getInt("profile_score"); } stmt.close(); ko.conn.close(); } catch(Exception exc){ System.err.println("Error: " + exc); } return score; }
95
...
... } import java.sql.*; public class Playing { ... ... public void simpankeFilter(String in_noPunggung, String in_idPosition, float in_skorPemain, float skorTech, float skorMental, float skorPhysic){ ko = new Koneksi(); ko.koneksi2DBMS(); try{ sql = "insert into filter_playing values (?,?,truncate(?,3),truncate(?,3)," + "truncate(?,3),truncate(?,3))"; PreparedStatement insert = ko.conn.prepareStatement(sql); insert.setString(1, in_noPunggung); insert.setString(2, in_idPosition); insert.setFloat(3, in_skorPemain); insert.setFloat(4, skorTech); insert.setFloat(5, skorMental); insert.setFloat(6, skorPhysic); insert.executeUpdate(); insert.close(); ko.conn.close(); } catch(Exception exc){ System.err.println("Error: " + exc); } } ... ... }
import java.sql.*; public class DetailProfil { ... ... public String getIDProfil(String in_profil){ rs = null; ko = new Koneksi();
96
ko.koneksi2DBMS(); try{ stmt = ko.conn.createStatement(); sql = "select * from detail_profile where profile_name ='"+in_profil+"'"; rs = stmt.executeQuery(sql); while(rs.next()){ idProfil = rs.getString("id_profile"); } stmt.close(); ko.conn.close(); } catch(Exception exc){ System.err.println("Error: " + exc); } return idProfil; } }
Potongan program di atas menjelaskan urutan langkah-langkah yang
dieksekusi oleh program setelah pengguna menekan tombol Proses.
Seperti yang tertulis pada potongan program di atas, pertama program
mendeklarasikan sebuah variabel String dengan nama position untuk
mengambil sekaligus mengubah nilai dari cmbPos.getSelectedItem(),
dimana pada proses selanjutnya variabel position digunakan sebagai
parameter untuk memanggil fungsi getNoPunggungNama() yang
terdapat pada class posisiPemain. Nilai balik yang didapat dari fungsi
getNoPunggungNama() disimpan dalam sebuah variabel bantu yaitu
noPung.
Proses selanjutnya adalah memanggil fungsi getIdProfil() untuk
mendapatkan id_profile dari karakter yang telah dipilih dan
getBobot() untuk mengambil nilai bobot yang sudah ditentukan
melalui combo box, dengan adanya variabel noPung dan in_profil
97
(in_profil merupakan variabel global pada class FormDSS yang
menyimpan nilai balik yang didapatkan dari fungsi getIdProfil()) ,
maka proses berikutnya adalah memanggil fungsi getScore() yang
terdapat pada class DetailPlayerProfile, untuk mendapatkan nilai
dari tiap karakter pemain yang akan dibandingkan.
Setelah program mendapatkan nilai karakter beserta bobotnya, maka
program akan memanggil fungsi SkorTech() untuk menghitung total
nilai yang didapat dari karakter-karakter yang dipilih pada Atribut
Teknik, SkorMental()untuk menghitung total nilai yang didapat dari
karakter-karakter yang dipilih pada Atribut Mental, SkorPhysic()untuk
menghitung total nilai yang didapat dari karakter-karakter yang dipilih
pada Atribut Fisik, dan SkorTotal() untuk menghitung rata-rata jumlah
nilai total pada Atribut Teknik, Atribut Mental, dan Atribut Fisik.
Proses terakhir adalah menyimpan semua hasil perhitungan (skorTech,
skorMental, skorPhysic, dan skorTotal) ke dalam tabel
filter_playing dengan memanggil fungsi simpankeFilter(), yang
terdapat pada class Playing.
98
4. Halaman Tambah Pemain
Gambar 4.8 Halaman Tambah Pemain
Halaman Tambah Pemain berfungsi untuk membantu pengguna dalam
melakukan penambahan data pemain. Pengisian nilai pada atribut teknik,
atribut mental, dan atribut fisik berdasarkan nilai yang didapat dari
proses pengujian pada setiap pemain di lapangan. Data pemain yang
dimasukkan harus lengkap, karena jika tidak, maka akan muncul pesan
kesalahan yang menandakan bahwa data pemain yang dimasukkan
belum lengkap dan data pemain tidak dapat disimpan ke basisdata.
99
5. Halaman Update Profil Pemain
Gambar 4.9 Halaman Update Profil Pemain
Halaman ini berfungsi untuk mengubah profil pemain yang bersifat
dinamis.
100
6. Halaman Profil Pemain
Gambar 4.10 Halaman Profil Pemain
Halaman ini berfungsi ketika pengguna ingin melihat detail profil
pemain seperti, atribut teknik, atribut mental, atribut fisik, dan lain-lain.
101
7. Halaman Grafik Perbandingan
Gambar 4.11 Halaman Grafik Perbandingan
Pada halaman ini pengguna dapat melihat lebih jelas perbandingan Skor
Teknik, Skor Mental, Skor Fisik, dan Skor Total antara beberapa pemain
pada suatu posisi setelah dilakukan perhitungan melalui diagram batang.
102
BAB V
ANALISA HASIL
5.1 Pengujian Sistem
Pengujian ini merupakan proses perbandingan antara hasil perhitungan
secara manual dan hasil perhitungan yang dilakukan oleh sistem.
Proses pengujian ini dilakukan untuk mengetahui apakah hasil proses
perhitungan yang dilakukan oleh sistem sesuai dengan hasil perhitungan
yang dilakukan secara manual. Dengan menggunakan input yang sama,
maka diperoleh perbandingan hasil perhitungan secara manual dan
perhitungan oleh sistem adalah sebagai berikut :
Masukan dari program adalah sebagai berikut :
Atribut teknik
Tabel 5.1 Masukan pada atribut teknik
Nama Profil Nilai Bobot
heading 3
marking 4
tackling 5
Atribut mental
Tabel 5.2 Masukan pada atribut mental
Nama Profil Nilai Bobot
anticipation 3
composure 4
decisions 4
teamwork 5
103
Atribut fisik
Tabel 5.3 Masukan pada atribut fisik
Nama Profil Nilai Bobot
balance 3
stamina 4
strength 5
Hasil perhitungan secara manual :
Tabel 5.4 Hasil perhitungan secara manual
Nama Pemain Skor Teknik Skor Mental Skor Fisik Skor Total
Widyanto 5.667 7.063 8.583 7.104
Titto 7.417 6.813 8.083 7.438
Bruno 7.917 7.813 7.667 7.799
Hasil perhitungan secara manual dalam diagram batang :
0
1
2
3
4
5
6
7
8
9
10
Skor Teknik Skor Mental Skor Fisik Skor Total
Widyanto
Titto
Bruno
Gambar 5.1 Diagram batang hasil perhitungan secara manual
104
Hasil perhitungan yang dilakukan oleh sistem :
Tabel 5.5 Hasil perhitungan oleh sistem
Nama Pemain Skor Teknik Skor Mental Skor Fisik Skor Total
Widyanto 5.666 7.062 8.583 7.104
Titto 7.416 6.812 8.083 7.437
Bruno 7.916 7.812 7.666 7.798
Hasil perhitungan yang dilakukan oleh sistem dalam bentuk diagram
batang :
0
1
2
3
4
5
6
7
8
9
10
Skor Teknik Skor Mental Skor Fisik Skor Total
Widyanto
Titto
Bruno
Gambar 5.2 Diagram batang hasil perhitungan yang dilakukan oleh
sistem
Dari hasil perbandingan yang diperoleh di atas, dapat dilihat bahwa
hasil perhitungan yang diperoleh dari proses manual mempunyai nilai yang
sama dengan hasil perhitungan yang dilakukan oleh sistem. Hanya terjadi
sedikit perbedaan karena adanya pembulatan pada tiga angka di belakang
105
koma. Dengan demikian, dapat disimpulkan bahwa proses perhitungan yang
dilakukan oleh sistem sudah baik.
5.2 Evaluasi Pengguna
Untuk dapat menentukan kelebihan dan kekurangan pada sistem,
maka dilakukan pengujian program dan evaluasi berupa pengisian kuesioner
secara langsung oleh pengguna.
Kuesioner terdiri dari delapan pernyataan mengenai program dan
sekaligus pilihan jawaban bertingkat. Urutan pilihan bertingkat yang
disediakan antara lain Sangat Tidak Setuju, Tidak Setuju, Netral, Setuju, dan
Sangat Setuju. Berikut ini hasil kesimpulan dari kedelapan pernyataan pada
kuesioner yang diisi oleh pengguna :
106
Tabel 5.6 Hasil kuesioner pengujian program
Jumlah Jawaban
Pernyataan STS TS N S SS
1. Tampilan program menarik - - - 3 -
2. Tampilan program (baik pilihan warna
maupun ukuran huruf) nyaman untuk
dilihat
- - - 3 -
3. Program mudah dipakai - - 1 2 -
4. Navigasi program memudahkan
penggunaan program - 1 2 - -
5. Proses input data dapat dilakukan dengan
mudah - - - 3 -
6. Ketika terjadi kesalahan program sudah
menampilkan pesan yang jelas - 1 1 1 -
7. Program ini memudahkan pengguna untuk
memahami karakter yang dimiliki oleh
setiap pemain
- - - 2 1
8. Program ini dapat mendukung proses
penentuan pemain pada suatu formasi - - - 3 -
107
5.2.1 Kelebihan Sistem Yang Dibuat
1. Tampilan program sudah baik.
2. Program mudah dipakai.
3. Sistem ini dapat membantu pelatih untuk melihat kemampuan para
pemain dengan lebih jelas melalui penilaian pada setiap karakter yang
dimiliki oleh setiap pemain secara visual.
4. Sistem ini dapat mendukung pelatih dalam menentukan pemain yang
paling tepat untuk dapat mengisi sebuah posisi dalam formasi yang akan
digunakan, dengan memberikan informasi berupa nama pemain yang
memenuhi kriteria pemain yang diinginkan oleh pelatih.
5.2.2 Kekurangan Sistem Yang Dibuat
1. Tampilan program masih sederhana.
2. Sistem belum bisa mempertimbangkan optimalisasi formasi tim secara
keseluruhan.
3. Sistem belum dapat menangani masalah cocok atau tidaknya pemain
yang satu dengan yang lain.
4. Sistem belum memuat manajemen pengetahuan, yang dapat menyimpan
pengetahuan pelatih tentang karakteristik pemain yang baik untuk setiap
posisi.
5. Sistem belum bisa mempertimbangkan informasi-informasi di luar
karakter yang dimiliki oleh pemain, misalnya informasi kekuatan lawan
yang akan dihadapi.
108
BAB VI
PENUTUP
6.1. Kesimpulan
Berdasarkan implementasi dan analisis sistem yang telah dibuat, maka
diperoleh beberapa kesimpulan antara lain:
1. Sistem telah berhasil dibuat dengan menggunakan Java sebagai
bahasa pemrograman dan MySQL sebagai mesin basisdata.
2. Berdasarkan evaluasi pengguna sistem ini dipandang dapat
membantu pelatih untuk melihat kemampuan para pemain dengan
lebih jelas melalui penilaian pada setiap karakter yang dimiliki oleh
setiap pemain secara visual.
3. Sistem ini dapat mendukung pelatih dalam menentukan pemain
yang paling tepat untuk dapat mengisi sebuah posisi dalam formasi
yang akan digunakan.
4. Sistem belum bisa mengakomodasi informasi-informasi di luar
karakter yang dimiliki oleh pemain sebagai kriteria pengambilan
keputusan.
109
6.2. Saran
Dari sistem yang telah dibuat, masih perlu dilakukan beberapa
pengembangan, agar sistem menjadi lebih baik dan semakin sempurna.
Berikut ini beberapa saran yang dapat dilakukan untuk pengembangan
sistem :
1. Tampilan program dibuat lebih menarik .
2. Agar pelatih dapat memonitor perkembangan karakter tiap pemain
dengan lebih baik perlu disediakan fasilitas berupa rekaman
perkembangan karakter dari tiap pemain dalam bentuk grafik.
3. Kriteria pengambilan keputusan dapat ditambah agar hasil yang
didapatkan juga semakin baik, misalnya dengan ikut
mempertimbangkan peta kekuatan lawan yang akan dihadapi, serta
masalah cocok atau tidaknya pemain yang satu dengan yang lain.
4. Sistem akan lebih baik apabila dapat mempertimbangkan optimasi
formasi tim secara keseluruhan.
5. Penambahan basis pengetahuan pada sistem dapat juga lebih
menyempurnakan sistem yang telah dibuat.
DAFTAR PUSTAKA
Gunawan, Ridowati. Materi Kuliah Rekayasa Perangkat Lunak I. Yogyakarta,
2004
Komputer, Wahana. Membuat Aplikasi Profesional dengan Java. Jakarta. Elex
Media Komputindo. 2005
Saputro, T, Wahju. MySQL untuk Pemula. Yogyakarta. Pena Media. 2005
Suryadi, Kadarsah. Ramdhani, Ali. Sistem Pendukung Keputusan Suatu Wacana
Struktural Idealisasi dan Implementasi Konsep Pengambilan Keputusan.
Bandung. PT Remaja Rosdakarya. 2002
Turban, Efraim. Aronson, Jay. Sistem Pendukung Keputusan dan Sistem Cerdas.
Yogyakarta. Andi. 1995
Dittman, B, Whitten. Systems Analysis and Design Methods. New York.
McGraw-Hill. 2001
Class Ball.java public class Ball{ int posX1 = 154; int posY1 = 418; int posX2 = 100; int posY2 = 347; int posX3 = 207; int posY3 = 347; int posX4 = 30; int posY4 = 347; int posX5 = 276; int posY5 = 347; int posX6 = 100; int posY6 = 206; int posX7 = 207; int posY7 = 206; int posX8 = 30; int posY8 = 206; int posX9 = 276; int posY9 = 206; int posX10 = 100; int posY10 = 68; int posX11 = 207; int posY11 = 68; public Ball(){ } public void setPosX1(int inX1){ this.posX1=inX1; } public void setPosY1(int inY1){ this.posY1=inY1; } public void setPosX2(int inX2){ this.posX2=inX2; } public void setPosY2(int inY2){ this.posY2=inY2; } public void setPosX3(int inX3){ this.posX3=inX3; } public void setPosY3(int inY3){ this.posY3=inY3; } public void setPosX4(int inX4){ this.posX4=inX4; } public void setPosY4(int inY4){ this.posY4=inY4; } public void setPosX5(int inX5){ this.posX5=inX5; }
public void setPosY5(int inY5){ this.posY5=inY5; } public void setPosX6(int inX6){ this.posX6=inX6; } public void setPosY6(int inY6){ this.posY6=inY6; } public void setPosX7(int inX7){ this.posX7=inX7; } public void setPosY7(int inY7){ this.posY7=inY7; } public void setPosX8(int inX8){ this.posX8=inX8; } public void setPosY8(int inY8){ this.posY8=inY8; } public void setPosX9(int inX9){ this.posX9=inX9; } public void setPosY9(int inY9){ this.posY9=inY9; } public void setPosX10(int inX10){ this.posX10=inX10; } public void setPosY10(int inY10){ this.posY10=inY10; } public void setPosX11(int inX11){ this.posX11=inX11; } public void setPosY11(int inY11){ this.posY11=inY11; } public int getPosX1(){ return posX1; } public int getPosY1(){ return posY1; } public int getPosX2(){ return posX2; } public int getPosY2(){ return posY2; } public int getPosX3(){ return posX3; }
public int getPosY3(){ return posY3; } public int getPosX4(){ return posX4; } public int getPosY4(){ return posY4; } public int getPosX5(){ return posX5; } public int getPosY5(){ return posY5; } public int getPosX6(){ return posX6; } public int getPosY6(){ return posY6; } public int getPosX7(){ return posX7; } public int getPosY7(){ return posY7; } public int getPosX8(){ return posX8; } public int getPosY8(){ return posY8; } public int getPosX9(){ return posX9; } public int getPosY9(){ return posY9; } public int getPosX10(){ return posX10; } public int getPosY10(){ return posY10; } public int getPosX11(){ return posX11; } public int getPosY11(){ return posY11; } public void coba(int pas1,int pas2,int pas3,int pas4,int pas5,int pas6, int pas7,int pas8,int pas9,int pas10,int pas11){ this.setPosX1(pas1); this.setPosX2(pas2);
this.setPosX3(pas3); this.setPosX4(pas4); this.setPosX5(pas5); this.setPosX6(pas6); this.setPosX7(pas7); this.setPosX8(pas8); this.setPosX9(pas9); this.setPosX10(pas10); this.setPosX11(pas11); } public void coba1(int pas1, int pas2,int pas3,int pas4, int pas5,int pas6, int pas7, int pas8,int pas9,int pas10,int pas11){ this.setPosY1(pas1); this.setPosY2(pas2); this.setPosY3(pas3); this.setPosY4(pas4); this.setPosY5(pas5); this.setPosY6(pas6); this.setPosY7(pas7); this.setPosY8(pas8); this.setPosY9(pas9); this.setPosY10(pas10); this.setPosY11(pas11); } }
MainMenu.Java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MainMenu extends JFrame{ private Container container; private JMenuBar menu; private JMenu subMenuFile,subMenuEdit,subMenuHelp; private JMenuItem formation,newPlayer,savePlayer,saveFormation,exit, updatePlayer, delPlayer, about; private JLabel pic; ImageIcon dot; public MainMenu() { container = getContentPane(); container.setLayout(null); menu = new JMenuBar(); setJMenuBar(menu); dot = new ImageIcon("D:/DOPUNIC'S/skripsi/punya GUEH" + "/program ta02 I Version/images/persib.jpg"); pic = new JLabel(dot); pic.setBounds(0,0,600,400); container.add(pic); subMenuFile = new JMenu("File"); subMenuFile.setMnemonic('F'); subMenuEdit = new JMenu("Edit"); subMenuEdit.setMnemonic('E'); subMenuHelp = new JMenu("Keterangan"); subMenuHelp.setMnemonic('K'); formation = new JMenuItem("Formasi",'o'); newPlayer = new JMenuItem("Tambah Pemain",'T'); saveFormation = new JMenuItem("Simpan Formasi",'S'); saveFormation.setEnabled(false); savePlayer = new JMenuItem("Simpan Profil Pemain",'P'); savePlayer.setEnabled(false); exit = new JMenuItem("Keluar",'K'); updatePlayer = new JMenuItem("Update Profil Pemain",'U'); updatePlayer.setEnabled(false);
delPlayer = new JMenuItem("Hapus Data Pemain",'H'); delPlayer.setEnabled(false); about = new JMenuItem("Perihal Odysseus 1.0",'i'); menu.add(subMenuFile); menu.add(subMenuEdit); menu.add(subMenuHelp); subMenuFile.add(formation); subMenuFile.add(newPlayer); subMenuFile.add(saveFormation); subMenuFile.add(savePlayer); subMenuFile.add(exit); subMenuEdit.add(updatePlayer); subMenuEdit.add(delPlayer); subMenuHelp.add(about); actionHandler act = new actionHandler(); formation.addActionListener(act); newPlayer.addActionListener(act); savePlayer.addActionListener(act); exit.addActionListener(act); about.addActionListener(act); menu.setVisible(true); setTitle("Odysseus 1.0"); setSize(600,400); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); int lebar = (screen.width - getSize().width) / 2; int tinggi = (screen.height - getSize().height) / 2; setLocation(lebar, tinggi); } public class actionHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource()==formation){ FormFormasi appli1 = new FormFormasi(); } else if(e.getSource()==newPlayer){ FormTambah appli2 = new FormTambah(); } else if(e.getSource()==about){ aboutPerformed(e); } else if(e.getSource()==exit){ } } } public void aboutPerformed(ActionEvent e){ FormAbout appli = new FormAbout(this,true); } public static void main(String[] args){ try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception exc){ System.err.println("Error loading L&F : " + exc); } MainMenu appli = new MainMenu(); }
}
FormFormasi.java import java.awt.*; import java.awt.event.*; import javax.swing.border.*; import javax.swing.*; public class FormFormasi extends JFrame implements ItemListener, WindowListener { private Container container; private ArcCanvas canvas; //the drawing area to display arcs private JPanel dftPemain, dispFormasi; private JMenuBar menu; private JMenu subMenuFile,subMenuEdit,subMenuHelp; private JMenuItem formation,newPlayer,openFormasi,savePlayer,saveFormation,exit, updatePlayer, delPlayer, about; private JToolBar tool; private JButton baru, simpan, lihat; private JTextField[] pickPos = new JTextField[0]; private JTextField[] fieldNama = null; private JTextField[] posisi = new JTextField[0]; private JTextField namaPosPemain,namaPemain, namaPosisi; String[] dataNama = null; String[] dataPosisi = null; String[] id_posisi = null; String in_form; String pemain = null; String idPosisi = null; private JMenuItem ItemView,ItemUpdate,ItemCompare; private JPopupMenu PopupPemain,PopupPosisi; JComboBox pilih; private Object formasi[] = { "4-4-2", "3-5-2"}; private Nama inputNama; String[] posi = new String[11]; String[] in_nama = new String[11]; float[] max_score = new float[11]; Playing bantu1 = new Playing(); PosisiFormasi bantu2 = new PosisiFormasi(); Posisi bantu3 = new Posisi(); Formasi bantu4 = new Formasi(); Pemain bantu5 = new Pemain(); public FormFormasi(ArcCanvas canvas){ this.canvas = canvas; } public FormFormasi(){ inputNama = new Nama(); container = getContentPane(); container.setLayout(null); PopupPemain = new JPopupMenu(); ItemView = new JMenuItem(); ItemUpdate = new JMenuItem(); ItemView.setText("Lihat Profil Pemain"); PopupPemain.add(ItemView); ItemUpdate.setText("Update Profil Pemain"); PopupPemain.add(ItemUpdate); MouseListener popupListener = new PopupListener(PopupPemain); PopupPosisi = new JPopupMenu(); ItemCompare = new JMenuItem();
ItemCompare.setText("Lihat Detail Perbandingan"); PopupPosisi.add(ItemCompare); MouseListener popupListener2 = new PopupListener2(PopupPosisi); dftPemain = new JPanel(); dispFormasi = new JPanel(); dftPemain.setBorder(new javax.swing.border.TitledBorder("Daftar Pemain")); dftPemain.setLayout(null); dftPemain.setBounds(10,35,300,355); dispFormasi.setBorder(new javax.swing.border.TitledBorder("Formasi")); dispFormasi.setLayout(null); dispFormasi.setBounds(320,35,370,510); pilih = new JComboBox(formasi); pilih.setBounds(10,20,50,20); pilih.addItemListener(this); dftPemain.add(pilih); canvas = new ArcCanvas(); //canvas.setBackground(new Color(0,128,64)); dispFormasi.add(canvas); canvas.setBounds(20,30,330,460); tool = new JToolBar(); tool.setBounds(0,0,830,30); baru = new JButton("Tambah"); baru.setToolTipText("Tambah Pemain"); tool.add(baru); simpan = new JButton("Simpan"); simpan.setEnabled(false); simpan.setToolTipText("Simpan Profil Pemain"); tool.add(simpan); lihat = new JButton("Lihat"); lihat.setBounds(70,20,60,20); lihat.setToolTipText("Lihat hasil proses penyeleksian"); dftPemain.add(lihat); namaPosPemain = new JTextField(); namaPosPemain.setBackground(new Color(236, 233, 216)); namaPosPemain.setHorizontalAlignment(JTextField.CENTER); namaPosPemain.setText("Stat"); namaPosPemain.setToolTipText("Status Posisi"); namaPosPemain.setBorder(new SoftBevelBorder(BevelBorder.RAISED)); namaPosPemain.setEditable(false); dftPemain.add(namaPosPemain); namaPosPemain.setBounds(10, 50, 50, 20); namaPemain = new JTextField(); namaPemain.setBackground(new Color(236, 233, 216)); namaPemain.setHorizontalAlignment(JTextField.CENTER); namaPemain.setText("Nama Pemain"); namaPemain.setBorder(new SoftBevelBorder(BevelBorder.RAISED)); namaPemain.setEditable(false); dftPemain.add(namaPemain); namaPemain.setBounds(60, 50, 100, 20); namaPosisi = new JTextField(); namaPosisi.setBackground(new Color(236, 233, 216)); namaPosisi.setHorizontalAlignment(JTextField.CENTER); namaPosisi.setText("Posisi"); namaPosisi.setBorder(new SoftBevelBorder(BevelBorder.RAISED)); namaPosisi.setEditable(false); dftPemain.add(namaPosisi);
namaPosisi.setBounds(160, 50, 100, 20); Pemain p = new Pemain(); dataNama = p.getNama(); pickPos = new JTextField[dataNama.length]; fieldNama = new JTextField[dataNama.length]; id_posisi = new String[pickPos.length]; int y = 75; for(int i=0;i<dataNama.length;i++){ pickPos[i] = new JTextField(); pickPos[i].setBounds(10,y,50,20); pickPos[i].addMouseListener(popupListener2); pickPos[i].setEditable(false); pickPos[i].setText(""); dftPemain.add(pickPos[i]); fieldNama[i] = new JTextField(); fieldNama[i].setText(dataNama[i]); fieldNama[i].setBounds(60,y,100,20); fieldNama[i].addMouseListener(popupListener); fieldNama[i].setEditable(false); dftPemain.add(fieldNama[i]); id_posisi[i] = ""; y=y+20; } String[] in_nama = null; String yuk = null; posisi = new JTextField[dataNama.length]; int y2 = 75; for(int i=0;i<dataNama.length;i++){ posisi[i] = new JTextField(); in_nama = p.getPosisi(fieldNama[i].getText()); if(in_nama.length==1) posisi[i].setText(in_nama[0]); else if(in_nama.length>1){ int j=1; do{ in_nama[j]=in_nama[j]+"/"+in_nama[j-1]; j++; }while(j<in_nama.length); posisi[i].setText(in_nama[j-1]); } posisi[i].setBounds(160,y2,100,20); posisi[i].setEditable(false); dftPemain.add(posisi[i]); y2=y2+20; } container.add(tool); container.add(dftPemain); container.add(dispFormasi); menu = new JMenuBar(); setJMenuBar(menu); subMenuFile = new JMenu("File"); subMenuFile.setMnemonic('F'); subMenuEdit = new JMenu("Edit"); subMenuEdit.setMnemonic('E'); subMenuHelp = new JMenu("Keterangan"); subMenuHelp.setMnemonic('K'); formation = new JMenuItem("Formasi",'o'); newPlayer = new JMenuItem("Tambah Pemain",'T'); openFormasi = new JMenuItem("Buka Formasi",'B');
saveFormation = new JMenuItem("Simpan Formasi",'S'); savePlayer = new JMenuItem("Simpan Profil Pemain",'P'); savePlayer.setEnabled(false); exit = new JMenuItem("Keluar",'K'); exit.setEnabled(false); updatePlayer = new JMenuItem("Update Profil Pemain",'U'); updatePlayer.setEnabled(false); delPlayer = new JMenuItem("Hapus Data Pemain",'H'); delPlayer.setEnabled(false); about = new JMenuItem("Perihal Odysseus 1.0",'i'); menu.add(subMenuFile); menu.add(subMenuEdit); menu.add(subMenuHelp); subMenuFile.add(formation); subMenuFile.add(newPlayer); subMenuFile.add(openFormasi); subMenuFile.add(saveFormation); subMenuFile.add(savePlayer); subMenuFile.add(exit); subMenuEdit.add(updatePlayer); subMenuEdit.add(delPlayer); subMenuHelp.add(about); actionHandler act = new actionHandler(); openFormasi.addActionListener(act); saveFormation.addActionListener(act); exit.addActionListener(act); newPlayer.addActionListener(act); baru.addActionListener(act); ItemView.addActionListener(act); ItemUpdate.addActionListener(act); ItemCompare.addActionListener(act); lihat.addActionListener(act); about.addActionListener(act); menu.setVisible(true); setTitle("Formasi"); setSize(730,650); addWindowListener(this); //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); int lebar = (screen.width - getSize().width) / 2; int tinggi = (screen.height - getSize().height) / 2; setLocation(lebar, tinggi); setVisible(true); } public void itemStateChanged(ItemEvent e){ Thread thread = new Thread(canvas); thread.start(); if(pilih.getSelectedIndex()==0){ for(int i=0;i<pickPos.length;i++){ if(id_posisi[i].compareTo("")!=0){ pickPos[i].setText(""); id_posisi[i] = ""; } } canvas.masukan = (String)pilih.getSelectedItem(); } else if(pilih.getSelectedIndex()==1){
for(int i=0;i<pickPos.length;i++){ if(id_posisi[i].compareTo("")!=0){ pickPos[i].setText(""); id_posisi[i] = ""; } } canvas.masukan = (String)pilih.getSelectedItem(); } } class PopupListener extends MouseAdapter { JPopupMenu popup; PopupListener(JPopupMenu popupMenu) { popup = popupMenu; } public void mousePressed(MouseEvent e) { for(int i=0;i<fieldNama.length;i++){ if(e.getSource() == fieldNama[i]) pemain = fieldNama[i].getText(); } maybeShowPopup(e); } public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger()) { popup.show(e.getComponent(), e.getX(), e.getY()); } } } class PopupListener2 extends MouseAdapter { JPopupMenu popup; PopupListener2(JPopupMenu popupMenu) { popup = popupMenu; } public void mousePressed(MouseEvent e) { for(int i=0;i<fieldNama.length;i++){ if(e.getSource() == pickPos[i]) idPosisi = id_posisi[i]; } maybeShowPopup(e); } public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger()) { popup.show(e.getComponent(), e.getX(), e.getY()); } } } public void saveFormationPerformed(ActionEvent e){ //System.out.println(in_nama[0]); String[] noPung = new String[11]; String id_formasi = bantu4.getIDFormasi((String)pilih.getSelectedItem());
//System.out.println(id_formasi); for(int i=0;i<11;i++){ if(in_nama[i]!=null) noPung[i] = bantu5.getNoPunggung(in_nama[i]); } if(noPung[0]!=null){ //System.out.println(noPung[0]); //System.out.println(max_score[0]); //System.out.println(posi[0]); FormSave appli = new FormSave(this,true,id_formasi,posi,noPung,max_score); } } public void openFormasiPerformed(ActionEvent e){ FormOpen appli = new FormOpen(this,true); String[] namaPem = appli.getNama(); String formasi = appli.getFormasi(); String[] posisi = appli.getPosisi(); canvas.inp_nama = namaPem; Thread thread = new Thread(canvas); thread.start(); canvas.masukan = formasi; canvas.view = true; for(int i=0;i<posisi.length;i++){ for(int j=0;j<fieldNama.length;j++){ if(fieldNama[j].getText().compareTo(namaPem[i])==0){ pickPos[j].setText(bantu3.getNamaPosisi(posisi[i])); id_posisi[j]=posisi[i]; } } } for(int i=0;i<pickPos.length;i++){ if(pickPos[i].getText().compareTo("")==0){ pickPos[i].setText("SUB"); id_posisi[i] = "SUB"; } } //canvas.repaint(); } public class actionHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource()==saveFormation){ saveFormationPerformed(e); } else if(e.getSource()==newPlayer||e.getSource()==baru){ FormTambah appli2 = new FormTambah(); } else if(e.getSource()==about){ aboutPerformed(e); } else if(e.getSource()==openFormasi){ openFormasiPerformed(e); } else if(e.getSource()==exit){ JOptionPane.showMessageDialog(null,"Keluar"); } else if(e.getSource()==ItemView){ FormTampil appli = new FormTampil(pemain); }
else if(e.getSource()==ItemUpdate){ FormUpdate appli = new FormUpdate(pemain); } else if(e.getSource()==ItemCompare){ FormCompare appli = new FormCompare(idPosisi); } else if(e.getSource()==lihat){ int baris = bantu1.CekTabel(); String[] pos = bantu2.getPosisi((String)pilih.getSelectedItem()); if(baris==0){ JOptionPane.showMessageDialog(null,"Untuk dapat menampilkan nama pemain,\n" + "Silahkan masukkan kriteria pemain pada\n" + "setiap posisi!!\nKlik dua kali pada lingkaran merah\n" + "untuk dapat memasukkan kriteria pemain\n" + "yang anda inginkan!!", "Info",JOptionPane.INFORMATION_MESSAGE); } else{ int counter = 0; for(int i=0;i<pos.length;i++){ String posisi = bantu1.CekPosisi(pos[i]); if(posisi==null){ JOptionPane.showMessageDialog(null,"Anda belum " + "memasukkan kriteria pemain pada posisi "+ bantu3.getNamaPosisi(pos[i])+" ","Info", JOptionPane.INFORMATION_MESSAGE); FormDss appli = new FormDss(bantu3.getNamaPosisi(pos[i]),pos[i]); i = pos.length; } else counter++; } if(counter==11){ setPickPos((String)pilih.getSelectedItem()); Thread thread = new Thread(canvas); thread.start(); if(pilih.getSelectedIndex()==0){ canvas.masukan = (String)pilih.getSelectedItem(); } else if(pilih.getSelectedIndex()==1){ canvas.masukan = (String)pilih.getSelectedItem(); } canvas.view = true; } } } } } public void aboutPerformed(ActionEvent e){ FormAbout appli = new FormAbout(this,true); } public void setPickPos(String masukan){ posi = bantu2.getPosisi(masukan); for(int i=0;i<posi.length;i++){ max_score[i] = bantu1.getNilaiMax(posi[i]); in_nama[i] = bantu1.getNamaPemain(max_score[i],posi[i]); }
String temp = " "; String namaSama = ""; int[] jum_nama = new int[11]; for(int i=0;i<11;i++){ jum_nama[i] = 0; } for(int i=0;i<11;i++){ temp = in_nama[i]; if(temp.compareTo(namaSama)!=0){ for(int j=0;j<11;j++){ if(temp.compareTo(in_nama[j])==0){ jum_nama[i] = jum_nama[i]+1; if(jum_nama[i]>1) namaSama = temp; } } } } String[] temp_posisi = new String[0]; int[] index = new int[0]; for(int i=0;i<11;i++){ if(jum_nama[i]>1){ int k=0; temp_posisi = new String[jum_nama[i]]; index = new int[jum_nama[i]]; for(int j=0;j<11;j++){ if(in_nama[i].compareTo(in_nama[j])==0){ temp_posisi[k]=posi[j]; index[k]=j; k++; } } FormPlus appli = new FormPlus(this,true,temp_posisi,index, in_nama[i]); int index2 = appli.getIndex(); max_score[index2] = bantu1.getNilaiMax2(posi[index2], in_nama[i]); in_nama[index2] = bantu1.getNamaPemain2(max_score[index2], posi[index2],in_nama[i]); } } canvas.inp_nama = in_nama; for(int i=0;i<posi.length;i++){ for(int j=0;j<fieldNama.length;j++){ if(fieldNama[j].getText().compareTo(in_nama[i])==0){ pickPos[j].setText(bantu3.getNamaPosisi(posi[i])); id_posisi[j]=posi[i]; } } } for(int i=0;i<pickPos.length;i++){ if(pickPos[i].getText().compareTo("")==0){ pickPos[i].setText("SUB"); id_posisi[i] = "SUB"; } } } public static void main(String[] args){ try { Class.forName("com.mysql.jdbc.Driver");}
catch (Exception exc){ System.err.println("Error: punyanya Main" + exc);} try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception exc){ System.err.println("Error loading L&F : " + exc); } //FormFormasi application = new FormFormasi(); } public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowClosing(WindowEvent e) { setVisible(false); } public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } } class ArcCanvas extends Canvas implements Runnable, MouseListener{ private Ball data; private Nama inputNama; String masukan=null; boolean view = false; int inX[][] = new int[0][0]; ImageIcon dot,lap; Image i_dot,i_lap; String[] inp_nama = new String[11]; public ArcCanvas(){ data = new Ball(); inputNama = new Nama(); addMouseListener(this); dot = new ImageIcon("D:/DOPUNIC'S/JAVA AREA" + "/Latihan/latmysql/images/bulet2_kcl.gif"); i_dot = dot.getImage(); lap = new ImageIcon("D:/DOPUNIC'S/JAVA AREA" + "/Latihan/latmysql/images/lapngan.gif"); i_lap = lap.getImage(); } public void paint(Graphics g){ g.drawImage(i_lap,0,0,this); int x1 = data.getPosX1(); int y1 = data.getPosY1(); g.drawImage(i_dot,x1,y1,this); int x2 = data.getPosX2(); int y2 = data.getPosY2(); g.drawImage(i_dot,x2,y2,this); int x3 = data.getPosX3();
int y3 = data.getPosY3(); g.drawImage(i_dot,x3,y3,this); int x4 = data.getPosX4(); int y4 = data.getPosY4(); g.drawImage(i_dot,x4,y4,this); int x5 = data.getPosX5(); int y5 = data.getPosY5(); g.drawImage(i_dot,x5,y5,this); int x6 = data.getPosX6(); int y6 = data.getPosY6(); g.drawImage(i_dot,x6,y6,this); int x7 = data.getPosX7(); int y7 = data.getPosY7(); g.drawImage(i_dot,x7,y7,this); int x8 = data.getPosX8(); int y8 = data.getPosY8(); g.drawImage(i_dot,x8,y8,this); int x9 = data.getPosX9(); int y9 = data.getPosY9(); g.drawImage(i_dot,x9,y9,this); int x10 = data.getPosX10(); int y10 = data.getPosY10(); g.drawImage(i_dot,x10,y10,this); int x11 = data.getPosX11(); int y11 = data.getPosY11(); g.drawImage(i_dot,x11,y11,this); g.setFont(new Font("arial",Font.BOLD,12)); int panjang1 = inputNama.getNama1().length(); int minus1 = 0; if(panjang1>4) minus1 = (panjang1/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama1(),x1-minus1,y1+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama1(),x1-(minus1+1),y1+31); int panjang2 = inputNama.getNama2().length(); int minus2 = 0; if(panjang2>4) minus2 = (panjang2/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama2(),x2-minus2,y2+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama2(),x2-(minus2+1),y2+31); int panjang3 = inputNama.getNama3().length(); int minus3 = 0; if(panjang3>4) minus3 = (panjang3/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama3(),x3-minus3,y3+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama3(),x3-(minus3+1),y3+31); int panjang4 = inputNama.getNama4().length(); int minus4 = 0; if(panjang4>4) minus4 = (panjang4/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama4(),x4-minus4,y4+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama4(),x4-(minus4+1),y4+31); int panjang5 = inputNama.getNama5().length(); int minus5 = 0; if(panjang5>4) minus5 = (panjang5/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama5(),x5-minus5,y5+30); g.setColor(new Color(244,244,0));
g.drawString(inputNama.getNama5(),x5-(minus5+1),y5+31); int panjang6 = inputNama.getNama6().length(); int minus6 = 0; if(panjang6>4) minus6 = (panjang6/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama6(),x6-minus6,y6+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama6(),x6-(minus6+1),y6+31); int panjang7 = inputNama.getNama7().length(); int minus7 = 0; if(panjang7>4) minus7 = (panjang7/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama7(),x7-minus7,y7+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama7(),x7-(minus7+1),y7+31); int panjang8 = inputNama.getNama8().length(); int minus8 = 0; if(panjang8>4) minus8 = (panjang8/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama8(),x8-minus8,y8+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama8(),x8-(minus8+1),y8+31); int panjang9 = inputNama.getNama9().length(); int minus9 = 0; if(panjang9>4) minus9 = (panjang9/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama9(),x9-minus9,y9+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama9(),x9-(minus9+1),y9+31); int panjang10 = inputNama.getNama10().length(); int minus10 = 0; if(panjang10>4) minus10 = (panjang10/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama10(),x10-minus10,y10+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama10(),x10-(minus10+1),y10+31); int panjang11 = inputNama.getNama11().length(); int minus11 = 0; if(panjang11>4) minus4 = (panjang11/3)*5; g.setColor(Color.BLACK); g.drawString(inputNama.getNama11(),x11-minus11,y11+30); g.setColor(new Color(244,244,0)); g.drawString(inputNama.getNama11(),x11-(minus11+1),y11+31); } public void run(){ if(view){ inputNama.setNama1(inp_nama[0]); inputNama.setNama2(inp_nama[1]); inputNama.setNama3(inp_nama[2]); inputNama.setNama4(inp_nama[3]); inputNama.setNama5(inp_nama[4]); inputNama.setNama6(inp_nama[5]); inputNama.setNama7(inp_nama[6]); inputNama.setNama8(inp_nama[7]); inputNama.setNama9(inp_nama[8]); inputNama.setNama10(inp_nama[9]); inputNama.setNama11(inp_nama[10]);
cobain(masukan); repaint(); view = false; } else if(masukan!=null){ setTampilanNama(); cobain(masukan); repaint(); } try{ Thread.sleep(200); } catch(Exception e){} } public void cobain(String input){ Formasi bantu1 = new Formasi(); String id_form = bantu1.getIDFormasi(input); Posisi bantu2 = new Posisi(); inX = bantu2.getXdanY(id_form); data.coba(inX[0][0],inX[1][0],inX[2][0],inX[3][0],inX[4][0], inX[5][0],inX[6][0],inX[7][0],inX[8][0],inX[9][0], inX[10][0]); data.coba1(inX[0][1],inX[1][1],inX[2][1],inX[3][1],inX[4][1], inX[5][1],inX[6][1],inX[7][1],inX[8][1],inX[9][1], inX[10][1]); } public void setTampilanNama(){ inputNama.setNama1(""); inputNama.setNama2(""); inputNama.setNama3(""); inputNama.setNama4(""); inputNama.setNama5(""); inputNama.setNama6(""); inputNama.setNama7(""); inputNama.setNama8(""); inputNama.setNama9(""); inputNama.setNama10(""); inputNama.setNama11(""); } public void pesan(String pos,String id_pos){ int jwb=0; Playing bantu1 = new Playing(); jwb = JOptionPane.showConfirmDialog(null, "Anda telah memasukkan kriteria pemain untuk posisi ini.\n" + "Apakah anda ingin mengubah kriteria yang telah anda masukkan ?", "Info",JOptionPane.YES_NO_OPTION); if(jwb==JOptionPane.YES_OPTION){ bantu1.delete(id_pos); FormDss applic = new FormDss(pos, id_pos);} } public void mouseClicked(MouseEvent e) { Pemain lagi = new Pemain(); Playing bantu1 = new Playing(); if(e.getClickCount()==2){ int x = e.getX(); int y = e.getY(); int x_range = data.posX1; int y_range = data.posY1; if(x>=data.posX1 && x<=data.posX1+20 &&
y>=data.posY1 && y<=data.posY1+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x,y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX2 && x<=data.posX2+20 && y>=data.posY2 && y<=data.posY2+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX3 && x<=data.posX3+20 && y>=data.posY3 && y<=data.posY3+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX4 && x<=data.posX4+20 && y>=data.posY4 && y<=data.posY4+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " +
"posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX5 && x<=data.posX5+20 && y>=data.posY5 && y<=data.posY5+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX6 && x<=data.posX6+20 && y>=data.posY6 && y<=data.posY6+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX7 && x<=data.posX7+20 && y>=data.posY7 && y<=data.posY7+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX8 && x<=data.posX8+20 && y>=data.posY8 && y<=data.posY8+20){ Posisi bantu = new Posisi();
String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX9 && x<=data.posX9+20 && y>=data.posY9 && y<=data.posY9+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX10 && x<=data.posX10+20 && y>=data.posY10 && y<=data.posY10+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); } else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } else if(x>=data.posX11 && x<=data.posX11+20 && y>=data.posY11 && y<=data.posY11+20){ Posisi bantu = new Posisi(); String pos = bantu.getPosisi(x, y); String id_pos = bantu.getIDPos(x,y); String posisi = bantu1.CekPosisi(id_pos); String cekPosisi = lagi.CekPosisiPemain(id_pos); if(cekPosisi == null){ JOptionPane.showMessageDialog(null,"Tidak ada pemain dengan " + "posisi ini!!"); }
else if(posisi!=null) pesan(pos,id_pos); else{ FormDss applic = new FormDss(pos, id_pos);} } } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } }
FormDSS.java import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Date; public class FormDss extends JFrame implements WindowListener{ private Container container; private JPanel profil, technical, mental, physical; private JMenuBar menu; private JMenu subMenu; private JMenuItem formation,saveForm,savePlay,exit; private JToolBar tool; private JButton baru, simpan, proses; JLabel lUmur = new JLabel("Umur"); JLabel ketUmur = new JLabel("Tahun"); JLabel lKaki = new JLabel("Kaki"); JLabel lBerat = new JLabel("Berat Badan"); JLabel ketBerat = new JLabel("kg"); JLabel lTinggi = new JLabel("Tinggi Badan"); JLabel ketTinggi = new JLabel("cm"); JLabel lKondisi = new JLabel("Kondisi"); JLabel ketKondisi = new JLabel("%"); JLabel lMoral = new JLabel("Moral"); JLabel lPosisi = new JLabel("Posisi"); JLabel lAttr[] = new JLabel[39]; JCheckBox chkAttr[] = new JCheckBox[39]; final JComboBox cmbPos, cmbFoot, cmbUmur, cmbBerat, cmbTinggi, cmbKondisi, cmbMoral, cmbOp1, cmbOp2, cmbOp3, cmbOp4; final JComboBox cmbAttr[] = new JComboBox[39]; private Object foot[] = { "N","Keduanya","Kiri","Kanan" }; private Object attr[] = { "1","2","3","4","5" }; private Object pos[] = { "GK","SW","DC","DL","DR","WBR","WBL","DMC", "MC","ML","MR","AMC","AMR","AML","FC"}; private Object age[] = { "N","17","18","19","20","21","22","23","24","25","26", "27","28","29","30" }; private Object weight[] = { "N","40","60","70","80" }; private Object height[] = { "N","150","160","170","180","190","200" }; private Object condit[] = { "N","70","80","90" }; private Object moral[] = { "N","Sangat Buruk","Buruk","Baik","Sangat Baik" }; private Object op1[] = { ">","<","=" }; private Object op2[] = { ">","<","=" }; private Object op3[] = { ">","<","=" }; private Object op4[] = { ">","<","=" }; String id_pos;
int umur, berat, tinggi, kondisi; int[] nilai = new int[cmbAttr.length]; int[] score = new int[chkAttr.length]; String[] in_profil = new String[chkAttr.length]; float skorTech,TotTech,BobotTech,skorMental,TotMental,BobotMental, skorPhysic,TotPhysic,BobotPhysic,skorTotal; public FormDss(String posisi, String id_pos) { this.id_pos = id_pos; container = getContentPane(); container.setLayout(null); profil = new JPanel(); technical = new JPanel(); mental = new JPanel(); physical = new JPanel(); tool = new JToolBar(); tool.setBounds(0,0,850,30); baru = new JButton("Tambah"); baru.setToolTipText("Tambah Pemain"); tool.add(baru); simpan = new JButton("Simpan"); simpan.setToolTipText("Simpan Profil Pemain"); tool.add(simpan); proses = new JButton("Proses"); proses.setToolTipText("Jalankan Proses Penyeleksian"); tool.add(proses); profil.setBorder(new javax.swing.border.TitledBorder("Atribut Umum")); profil.setLayout(null); profil.setBounds(10,35,230,250); technical.setBorder(new javax.swing.border.TitledBorder("Atribut Teknik")); technical.setLayout(null); technical.setBounds(250,35,200,505); mental.setBorder(new javax.swing.border.TitledBorder("Atribut Mental")); mental.setLayout(null); mental.setBounds(460,35,180,355); physical.setBorder(new javax.swing.border.TitledBorder("Atribut Fisik")); physical.setLayout(null); physical.setBounds(650,35,180,205); cmbFoot = new JComboBox(foot); cmbPos = new JComboBox(pos); cmbUmur = new JComboBox(age); cmbBerat = new JComboBox(weight); cmbTinggi = new JComboBox(height); cmbKondisi = new JComboBox(condit); cmbMoral = new JComboBox(moral); cmbOp1 = new JComboBox(op1); cmbOp2 = new JComboBox(op2); cmbOp3 = new JComboBox(op3); cmbOp4 = new JComboBox(op4); lPosisi.setBounds(15,20,80,20); lUmur.setBounds(15,45,80,20); lKaki.setBounds(15,70,80,20); lBerat.setBounds(15,95,80,20); lTinggi.setBounds(15,120,80,20); lKondisi.setBounds(15,145,80,20); lMoral.setBounds(15,170,80,20); cmbPos.setBounds(135,20,50,20); cmbPos.setEnabled(false);
cmbPos.setSelectedItem(posisi); cmbOp1.setBounds(100,45,30,20); cmbOp2.setBounds(100,95,30,20); cmbOp3.setBounds(100,120,30,20); cmbOp4.setBounds(100,145,30,20); cmbUmur.setBounds(135,45,50,20); ketUmur.setBounds(190,45,30,20); cmbFoot.setBounds(135,70,50,20); cmbBerat.setBounds(135,95,50,20); ketBerat.setBounds(190,95,30,20); cmbTinggi.setBounds(135,120,50,20); ketTinggi.setBounds(190,120,30,20); cmbKondisi.setBounds(135,145,50,20); ketKondisi.setBounds(190,145,30,20); cmbMoral.setBounds(135,170,70,20); chkAttr[0] = new JCheckBox("crossing"); chkAttr[1] = new JCheckBox("dribbling"); chkAttr[2] = new JCheckBox("finishing"); chkAttr[3] = new JCheckBox("shooting"); chkAttr[4] = new JCheckBox("heading"); chkAttr[5] = new JCheckBox("passing"); chkAttr[6] = new JCheckBox("marking"); chkAttr[7] = new JCheckBox("tackling"); chkAttr[8] = new JCheckBox("ball control"); chkAttr[9] = new JCheckBox("technique"); chkAttr[10] = new JCheckBox("throwing"); chkAttr[11] = new JCheckBox("aerial ability"); chkAttr[12] = new JCheckBox("command of area"); chkAttr[13] = new JCheckBox("communication"); chkAttr[14] = new JCheckBox("handling"); chkAttr[15] = new JCheckBox("one on ones"); chkAttr[16] = new JCheckBox("reflexes"); chkAttr[17] = new JCheckBox("rushing out"); chkAttr[18] = new JCheckBox("tendency to punch"); chkAttr[19] = new JCheckBox("aggresions"); chkAttr[20] = new JCheckBox("anticipation"); chkAttr[21] = new JCheckBox("bravery"); chkAttr[22] = new JCheckBox("composure"); chkAttr[23] = new JCheckBox("concentration"); chkAttr[24] = new JCheckBox("creativity"); chkAttr[25] = new JCheckBox("decisions"); chkAttr[26] = new JCheckBox("determination"); chkAttr[27] = new JCheckBox("influence"); chkAttr[28] = new JCheckBox("positioning"); chkAttr[29] = new JCheckBox("teamwork"); chkAttr[30] = new JCheckBox("workrate"); chkAttr[31] = new JCheckBox("off the ball"); chkAttr[32] = new JCheckBox("acceleration"); chkAttr[33] = new JCheckBox("agility"); chkAttr[34] = new JCheckBox("balance"); chkAttr[35] = new JCheckBox("jumping"); chkAttr[36] = new JCheckBox("pace"); chkAttr[37] = new JCheckBox("stamina"); chkAttr[38] = new JCheckBox("strength"); int y1 = 20; for(int i=0;i<19;i++){ chkAttr[i].setBounds(15,y1,120,20); y1 = y1 + 25; technical.add(chkAttr[i]); } int y2 = 20; for(int i=0;i<19;i++){ cmbAttr[i] = new JComboBox(attr); cmbAttr[i].setBounds(145,y2,40,20); cmbAttr[i].setEnabled(false); y2 = y2 + 25; technical.add(cmbAttr[i]); }
int y3 = 20; for(int i=19;i<32;i++){ chkAttr[i].setBounds(15,y3,100,20); y3 = y3 + 25; mental.add(chkAttr[i]); } int y4 = 20; for(int i=19;i<32;i++){ cmbAttr[i] = new JComboBox(attr); cmbAttr[i].setBounds(125,y4,40,20); cmbAttr[i].setEnabled(false); y4 = y4 + 25; mental.add(cmbAttr[i]); } int y5 = 20; for(int i=32;i<39;i++){ chkAttr[i].setBounds(15,y5,100,20); y5 = y5 + 25; physical.add(chkAttr[i]); } int y6 = 20; for(int i=32;i<39;i++){ cmbAttr[i] = new JComboBox(attr); cmbAttr[i].setBounds(125,y6,40,20); cmbAttr[i].setEnabled(false); y6 = y6 + 25; physical.add(cmbAttr[i]); } profil.add(lPosisi); profil.add(lUmur); profil.add(lKaki); profil.add(lBerat); profil.add(lTinggi); profil.add(lKondisi); profil.add(lMoral); profil.add(cmbOp1); profil.add(cmbOp2); profil.add(cmbOp3); profil.add(cmbOp4); profil.add(cmbPos); profil.add(cmbUmur); profil.add(ketUmur); profil.add(cmbFoot); profil.add(cmbBerat); profil.add(ketBerat); profil.add(cmbTinggi); profil.add(ketTinggi); profil.add(cmbKondisi); profil.add(ketKondisi); profil.add(cmbMoral); //proses2 = new JButton("Proses"); //proses2.setBounds(690,470,80,60); container.add(tool); container.add(profil); container.add(technical); container.add(mental); container.add(physical); //container.add(proses2); actionHandler act = new actionHandler(); ItemHandler item = new ItemHandler();
for (int i = 0; i<chkAttr.length ; i++) { chkAttr[i].addItemListener(item); } proses.addActionListener(act); //proses2.addActionListener(act); setTitle("Halaman SPPK"); setSize(850,605); setVisible(true); addWindowListener(this); //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); int lebar = (screen.width - getSize().width) / 2; int tinggi = (screen.height - getSize().height) / 2; setLocation(lebar, tinggi); } public class ItemHandler implements ItemListener{ public void itemStateChanged(ItemEvent e) { for (int i = 0; i<chkAttr.length ; i++){ if(chkAttr[i].isSelected()){ cmbAttr[i].requestFocus(); cmbAttr[i].setEnabled(true); } else cmbAttr[i].setEnabled(false); } } } public class actionHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource()==proses){ String oper1 = (String) cmbOp1.getSelectedItem(); String oper2 = (String) cmbOp2.getSelectedItem(); String oper3 = (String) cmbOp3.getSelectedItem(); String oper4 = (String) cmbOp4.getSelectedItem(); String position = (String) cmbPos.getSelectedItem(); String str_kaki = (String) cmbFoot.getSelectedItem(); String str_umur = (String) cmbUmur.getSelectedItem(); String str_berat = (String) cmbBerat.getSelectedItem(); String str_tinggi = (String) cmbTinggi.getSelectedItem(); String str_kondisi = (String) cmbKondisi.getSelectedItem(); if(str_kaki.compareTo("N")==0) str_kaki = "%"; if(str_umur.compareTo("N")==0) umur = 0; else umur = Integer.parseInt(str_umur); if(str_berat.compareTo("N")==0) umur = 0; else berat = Integer.parseInt(str_berat); if(str_tinggi.compareTo("N")==0) umur = 0; else tinggi = Integer.parseInt(str_tinggi); if(str_kondisi.compareTo("N")==0) umur = 0; else kondisi = Integer.parseInt(str_kondisi);
posisiPemain bantu1 = new posisiPemain(); DetailPlayerProfile bantu3 = new DetailPlayerProfile(); Playing bantu4 = new Playing(); String[] noPung = bantu1.getNoPunggungNama(position, str_kaki, umur,oper1,berat,oper2,tinggi,oper3,kondisi,oper4); //Posisi bantu5 = new Posisi(); //String in_pos = bantu5.getIDPosisi2(position); getIdProfil(); int jumAtribut = 0; for(int i=0;i<chkAttr.length;i++){ if(chkAttr[i].isSelected()) jumAtribut++; } if(jumAtribut==0) JOptionPane.showMessageDialog(null,"Anda belum memasukkan kriteria pemain \n" + "menurut Atribut Teknik atau Atribut Mental atau Atribut Fisik","Info", JOptionPane.INFORMATION_MESSAGE); else{ getBobot(); score = new int[in_profil.length]; for(int i = 0;i<noPung.length;i++){ for(int j=0;j<in_profil.length;j++){ if(in_profil[j]!=null) score[j] = bantu3.getScore(noPung[i], in_profil[j]); else score[j] = 0; } SkorTech(); SkorMental(); SkorPhysic(); SkorTotal(); bantu4.simpankeFilter(noPung[i], id_pos, skorTotal,skorTech, skorMental,skorPhysic); } setVisible(false); } } } } public void getIdProfil(){ int n=0; DetailProfil bantu2 = new DetailProfil(); for (int i = 0; i<chkAttr.length ; i++){ if(chkAttr[i].isSelected()){ in_profil[i] = bantu2.getIDProfil(chkAttr[i].getText()); } else in_profil[i] = null; } } public void getBobot(){ int incom = 0; for(int i = 0 ;i<cmbAttr.length;i++){ if(cmbAttr[i].isEnabled()){ String combo = (String) cmbAttr[i].getSelectedItem(); incom = Integer.parseInt(combo); nilai[i] = incom; } } }
public void SkorTech(){ TotTech = 0; BobotTech = 0; skorTech = 0; for(int i=0;i<19;i++){ TotTech = TotTech + (score[i]*nilai[i]); BobotTech = BobotTech + nilai[i]; } if(BobotTech!=0) skorTech = TotTech / BobotTech; else skorTech = 0; } public void SkorMental(){ TotMental = 0; BobotMental = 0; for(int i=19;i<32;i++){ TotMental = TotMental + (score[i]*nilai[i]); BobotMental = BobotMental + nilai[i]; } if(BobotMental!=0) skorMental = TotMental / BobotMental; else skorMental = 0; } public void SkorPhysic(){ TotPhysic = 0; BobotPhysic = 0; for(int i=32;i<39;i++){ TotPhysic = TotPhysic + (score[i]*nilai[i]); BobotPhysic = BobotPhysic + nilai[i]; } if(BobotPhysic!=0) skorPhysic = TotPhysic / BobotPhysic; else skorPhysic = 0; } public void SkorTotal(){ skorTotal = 0; skorTotal = (skorTech + skorMental + skorPhysic) / 3; } public static void main(String[] args){ try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception exc){ System.err.println("Error loading L&F : " + exc); } FormDss appli = new FormDss("MC","pos13"); } public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { FormFormasi appli = new FormFormasi(); appli.setVisible(true); } public void windowClosing(WindowEvent e) { setVisible(false);