SISTEM PENDUKUNG PENGAMBILAN KEPUTUSAN ...

159
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

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

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

xx

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

LAMPIRAN

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

} public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } }