Post on 23-Nov-2021
PENERAPAN ALGORITMA ADALINE UNTUK MENENTUKAN JENIS
PENYAKIT DAN RAMUAN OBAT CINA (PRODUK TIANSHI) YANG
DIGUNAKAN UNTUK MENGOBATINYA
SKRIPSI
Diajukan untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Teknik
Jurusan Teknik Informatika
Disusun Oleh :
Andri Ridya Putra
015314014
JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2007
APPLYING OF ALGORITHM OF ADALINE TO DETERMINE THE
TYPE OF DISEASE AND THE INGREDIENT OF CHINESSE MEDICINE
(TIANSHI PRODUCT)
A THESIS
To Fulfill One of The Condition Obtain Get College Degree
Technique Majors Technique of Information
By:
Andri Ridya Putra
015314014
INFORMATICS ENGINEERING STUDY PROGRAM
DEPARTEMENT OF INFORMATICS ENGINEERING
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2007
HALAMAN PERSETUJUAN
Judul : PENERAPAN ALGORITMA ADALINE UNTUK
MENENTUKAN JENIS PENYAKIT DAN RAMUAN OBAT
CINA (PRODUK TIANSHI) YANG DIGUNAKAN UNTUK
MENGOBATINYA
Nama : Andri Ridya Putra
NIM : 015314014
Mata Kuliah : Tugas Akhir Kode : TIF 402
Semester : Ganjil Tahun Akademik: 2006/2007
Fakultas : Teknik
Program Studi : Teknik Informatika
Telah diperiksa dan disetujui
Di Yogyakarta
Pada tanggal : 21 Mei 2007
Dosen Pembimbing
Drs. J.J. Siang, M.Sc
PERNYATAAN
Dengan ini saya sebagai penulis tugas akhir menyatakan dengan
sesungguhnya bahwa skripsi yang saya tulis ini tidak memuat karya atau bagian
karya orang lain, kecuali pemikiran, metode atau hasil penelitian orang lain yang
diambil disebutkan dengan jelas sebagai acuan.
Yogyakarta, Mei 2007
Andri Ridya Putra
Penulis
HALAMAN PERSEMBAHAN
Karya ini kupersembahkan untuk :
...
Yesus-ku yang selalu memberikan anugerah yang terindah dan berkat
yang luar biasa dalam suka dan duka,
...
Kedua orang tuaku yang telah membesarkan dan mendidik aku,
...
Semua keluarga besarku yang banyak memeberikan bimbingan dan
motovasi,
...
Dan seluruh teman-temanku yang memberikan Sukacita dalam hari-
hariku.
HALAMAN MOTTO
Do it now, what you can do now
( Lakukanlah apa yang dapat kau lakukan
sekarang )
Life is Serving
( Hidup adalah Melayani )
ABSTRAKSI
Salah satu cabang dari AI (Artificial Intelligence) adalah Artificial Neural
Networks (ANN) atau jaringan syaraf tiruan. Jaringan syaraf tiruan merupakan
sistem komputasi dimana arsitektur dan operasi diilhami dari pengetahuan tentang
sel syaraf biologi di dalam otak. Dalam hal ini dapat digambarkan sebagai model
matematis dan komputasi untuk fungsi aproksimasi nonlinier, klasifikasi data,
cluster dan regresi non parametrik atau sebagai sebuah simulasi dari korelasi
model syaraf biologi. Salah satu bidang terapan AI (Artificial Intelligence)
merupakan bidang kedokteran dan khusus dalam hal ini adalah dalam pengobatan
penyakit, kemampuan untuk mendeteksi jenis penyakit tertentu untuk kemudian
ditentukan jenis obat Cina (ramuan Tianshi) yang digunakan pada manusia.
Hasil terapan ini dapat dipergunakan untuk membantu mempercepat memilih
jenis obat bagi pasien yang membutuhkan ramuan Tianshi ini dengan cara
mengembangkan jaringan syaraf tiruan dengan ADALINE (Adaptive Linier
Neuron). Aturan pembelajaran akan meminimalisasi rata-rata kesalahan yang
terjadi antara aktivasi dengan nilai target. Dengan demikian algoritma ini dapat
digunakan untuk menentukan jenis-jenis ramuan Obat Cina (Produk Tianshi) dari
suatu gejala-gejala penyakit yang telah ditentukan. Input yang menuju ke jaringan
ADALINE ini adalah berupa gejala-gejala penyakit dan outputnya adalah berupa
ramuan apa yang harus digunakan untuk mengobatinya.
ABSTRACT
I One of the branch of AI (Artificial Intelligence) is Artificial Neural
Networks (ANN) or artificial nerve network. Artificial Nerve network is
computing system where operation and architecture inspired from knowledge
concerning biological nerve cell in brain. In this case can be described as by
mathematical model and computing for the function of non linier aproksimasi,
data classification, and cluster of regresi the non parametrik or as a simulations of
correlation model biological nerve. One of the area of terapan AI ( Artificial
Intelligence) is doctor area and special in this case is in medication of disease,
ability to detect selected disease type to is later; then determined by type medicine
Chinese ( ingredient of Tianshi) used at human being.
Result of this terapan can be utilized to assist to to quicken to choose
type medicine for patient requiring ingredient of Tianshi this by developing
artificial nerve network with ADALINE (Linear Adaptive of Neuron).Order Study
of mistake mean minimal that happened among activation with goals value.
Thereby this algorithm can be used to determine ingredient type Medicine
Chinese (Product of Tianshi) from an disease symptom which have been
determined. Input going to network of ADALINE this is in the form of the disease
symptom and him of is in the form of what ingredient which must be used to cure
it.
KATA PENGANTAR
Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Kuasa
yang telah melimpahkan berkat-Nya sehingga penulis dapat menyelesaikan
Laporan Tugas Akhir ini. Penulisan tugas akhir ini ditujukan untuk memenuhi
salah satu syarat memperoleh gelar Sarjana Teknik Jurusan Teknik Informatika.
Terselesaikannya penulisan tugas akhir ini tidak lepas dari peran serta
beberapa pihak, baik secara langsung maupun secara tidak langsung. Oleh karena
itu, penulis ingin menyampaikan terima kasih kepada pihak-pihak yang telah ikut
membantu dalam penulisan tugas akhir ini, baik dalam memberikan bimbingan,
petunjuk, kerjasama, kritikan, maupun saran, antara lain kepada:
1. Bapak Drs. J.J, Siang,M.Sc, selaku Dosen Pembimbing, yang telah banyak
membantu terutama dalam memberikan bimbingan, dukungan, dan
penyediaan sarana yang mendukung, sehingga penulis dapat menyelesaikan
laporan tugas akhir ini.
2. Ibu Agnes Maria Polina, S.Kom., M.Sc., selaku Ketua Jurusan Teknik
Informatika Universitas Sanata Dharma.
3. Ibu Ridowati Gunawan, S.Kom., M.T., dan Bapak H.Agung Hernawan, S.T,
selaku panitia penguji pada ujian pendadaran penulis.
4. Pak Bele, Mas Danang, Mas Catur, Mbak Sri, dan seluruh Laboran, yang telah
memberikan bantuannya terutama dalam proses penelitian penulis. Untuk Pak
Bele, terima kasih atas seluruh bantuannya menjelang dan pada saat
pendadaran.
5. Kedua orang tua penulis, budhe penulis serta kakak dan adik penulis, yang
selalu mendoakan, memberikan semangat dan dorongan kepada penulis untuk
dapat menyelesaikan penulisan laporan tugas akhir ini.
6. Teman-teman Jurusan Teknik Informatika Angkatan 2001 (A dan B) yang
telah berjuang bersama.
7. Teman-teman di Fakultas Ilmu Budaya Universitas Gadjah Mada Yogyakarta
yang banyak memberikan motifasi (Dr.Ida Rochani Adi, S.U., Mas Erwin,
Mas Hananto, Mbak Tutik, Mbak Jatu, Agit dan Sari).
8. Mas Erwin dan Mas Hananto yang banyak memberikan ilmu nya yang sangat
berharga bagi penulis terutama dalam hal Teknologi Komputer.
9. Rosanto Adi selaku Asisten Direktur Utama Rosalia Indah Group yang
memberikan kesempatan bagi penulis dalam menyelesaikan tulisan ini.
10. Teman-teman kerja di Rosalia Indah Tour and Travel Solo yang banyak
membantu dalam memberikan dorongan dalam menyelesaikan tulisan ini.
11. Dan seluruh pihak yang telah ikut ambil bagian dalam penyelesaian laporan
tugas akhir ini yang tidak dapat penulis sebutkan satu-persatu.
Seperti kata pepatah, “Tak ada gading yang tak retak”, maka penulis
menyadari segala keterbatasan dalam menyelesaikan laporan tugas akhir ini. Oleh
karena itu, penulis ingin menyampaikan mohon maaf apabila terdapat kesalahan
dan kekurangan. Untuk itu, penulis mengharapkan kritik dan saran yang
membangun dari seluruh pihak yang membutuhkan laporan tugas akhir ini.
Semoga laporan tugas akhir ini dapat memberikan manfaat bagi siapa
saja yang membutuhkannya. Atas segala perhatiannya dan kerjasamanya, penulis
ucapkan terima kasih.
Yogyakarta, 31 Mei 2007
Andri Ridya Putra
( Penulis )
DAFTAR ISI
Halaman Judul.........................................................................................................ii
Halaman Persetujuan……………………………………………………………..iii
Halaman Pengesahan……………………………………………………………..iv
Halaman Pernyataan……………………………………………………………....v
Halaman Persembahan……………………………………………………………vi
Halaman Motto……………………………………………………………..........vii
Abstraksi...............................................................................................................viii
Abstract...................................................................................................................ix
Kata Pengantar……………………….....................................................................x
Daftar isi...............................................................................................................xiii
Daftar Gambar......................................................................................................xvi
Daftat Tabel.........................................................................................................xvii
BAB I Pendahuluan ……………………………………………………………….1
1.1 Latar Belakang Masalah………………………………………………....1
1.2 Rumusan Masalah..……………………………………………………...2
1.3 Batasan Masalah.……………………………….………………………..3
1.4 Tujuan Penulisan...………………………………………………………4
1.5 Manfaat Penuliasan...................................................................................5
1.6 Metodologi Penelitian .………………………………………………….5
1.7 Sistematika Penulisan…………………………………………………....7
BAB II Landasan Teori……………………………………………………………9
2.1 Jaringan Syaraf Biologis.…...…………………………………………9
2.2 Jaringan Syaraf Tiruan..…..………………………………………….13
2.3 ADALINE (Adaptive Linier Neuron)..................................................17
2.4 MADALINE ( Many Adaptive Linier Neuron) ...................................21
2.5 PENYAKIT PADA MANUSIA..........................................................26
2.6 DFD (Data Flow Diagram).................................................................31
2.7 Bagan Alir (Flowchart)...........……………………………………….32
BAB III Analisa dan Perancangan Sistem.............................................................35
3.1 Metoda Analisis......................................................................................35
3.2 Sistem Deteksi Penyakit.........................................................................35
3.3 Analisis Kebutuhan ................................................................................35
3.4 Metoda Perancangan sistem ...................................................................42
BAB IV Implementasi Sistem dan Analisa Hasil……….....................................59
4.1 Lingkungan Implementasi Perangkat Lunak.........................................59
4.2 Lingkungan Implementasi Perangkat Keras..........................................59
4.3 Implementasi Data Base........................................................................60
4.4 Implementasi Antarmuka ......................................................................63
BAB V Penutup....................................................................................................73
5.1 Kesimpulan.............................................................................................73
5.2 Saran.......................................................................................................73
DAFTAR PUSTAKA...........................................................................................74
LAMPIRAN..........................................................................................................75
DAFTAR GAMBAR
Gambar Keterangan Halaman
2.1. Syaraf Biologi 12 2.2. Arsitektur ADALINE 19
2.3. Arsitektur MADALINE 21
3.1. Diagram Konteks Sistem Deteksi Penyakit 44
3.2 Flowchart proses Pelatihan 45
3.3. Rancangan Antar Muka Menu Utama 52
3.4. Rancangan Antar Muka Login 53
3.5. Rancangan Antar Muka Server Conection 53
3.6. Rancangan Antar Muka Daftar Gejala 54
3.7. Rancangan Antar Muka Daftar Penyakit 55
3.8. Rancangan Antar Muka Konfigurasi Jaringan Neuron 56
3.9. Rancangan Antar Muka Proses Pembelajaran 56
3.10. Rancangan Antar Muka Pengujian 57
3.11. Rancangan Antar Muka Manajemen User 58
4.1. Relasi Antar Tabel 62
4.2. Tampilan Halaman User Interface 63
4.3. Tampilan Halaman Login 64
4.4. Tampilan Halaman Server Conection 65
4.5. Tampilan Halaman Login tidak berhasil 65
4.6. Tampilan Halaman Daftar Gejala 66
4.7. Tampilan Pesan Peringatan Hapus Data 67
4.8. Tampilan Halaman Daftar Penyakit 67
4.9. Tampilan Halaman Konfigurasi Jaringan Neuron 69
4.10. Tampilan Halaman Proses Pembelajaran 70
4.11. Tampilan Halaman Management User 71
4.12. Tampilan Halaman Pengujian Diagnosa 72
DAFTAR TABEL
Tabel Keterangan Halaman
2.1. Notasi DFD Dasar 31
2.2. Simbol-simbol pada bagan alir program 33
2.3 Lanjutan Simbol-simbol pada bagan alir program 34
3.1. Struktur Tabel Bobot 47
3.2. Struktur Tabel Gejala 48
3.3. Struktur Tabel Pemodelan 48
3.4. Struktur Tabel Penyakit 49
3.5. Struktur Tabel User 50
3.6. Struktur Tabel User Group 50
BAB I
PENDAHULUAN
1.1. Latar Belakang Masalah
Di era perkembangan teknologi informasi sekarang ini komputer bukan lagi
digunakan untuk membantu pekerjaan manusia, tetapi sudah merupakan pengganti
peran manusia dalam pekerjaan rutinitasnya, sehingga diharapkan peran sumber
daya manusia dapat terbatas dalam menyelesaikan suatu pekerjaan tertentu.
Dalam perkembangannya banyak pakar melakukan uji coba untuk menciptakan
suatu sistem komputer yang dapat diakui lebih cepat, teliti, dan akurat
dibandingkan dengan manusia, hal inilah yang mendorong lahirnya teknologi AI
(Artificial Intelligence).
Salah satu cabang dari AI (Artificial Intelligence) adalah Artificial Neural
Networks (ANN) atau jaringan syaraf tiruan. Jaringan syaraf tiruan merupakan
sistem komputasi dimana arsitektur dan operasi diilhami dari pengetahuan tentang
sel syaraf biologi di dalam otak. Dalam hal ini dapat digambarkan sebagai model
matematis dan komputasi untuk fungsi aproksimasi nonlinier, klasifikasi data,
cluster dan regresi non parametrik atau sebagai sebuah simulasi dari korelasi
model syaraf biologi. Salah satu bidang terapan AI (Artificial Intelligence)
merupakan bidang kedokteran dan khusus dalam hal ini adalah dalam pengobatan
penyakit, kemampuan untuk mendeteksi jenis penyakit tertentu untuk kemudian
ditentukan jenis obat Cina (ramuan Tianshi) yang digunakan pada manusia.
Hasil terapan ini dapat dipergunakan untuk membantu mempercepat memilih
jenis obat bagi pasien yang membutuhkan ramuan Tianshi ini dengan cara
mengembangkan jaringan syaraf tiruan dengan ADALINE (Adaptive Linier
Neuron). Jaringan syaraf tiruan dengan ADALINE dicetuskan oleh Widrow dan
Hoff(1960), pada dasarnya menggunakan aktivasi bipolar (1 atau -1) untuk sinyal
input dan target output dimana bobot dalam koneksi yang berasal dari unit input
ke ADALINE mempunyai bias, bobot yang ada dalam suatu koneksi di suatu
jaringan dapat diatur dan fungsi aktivasinya selalu 1.1 Aturan pembelajaran akan
meminimalisasi rata-rata kesalahan yang terjadi antara aktivasi dengan nilai
target. Dengan demikian algoritma ini dapat digunakan untuk menentukan jenis-
jenis ramuan Obat Cina (Produk Tianshi) dari suatu gejala-gejala penyakit yang
telah ditentukan. Input yang menuju ke jaringan ADALINE ini adalah berupa
gejala-gejala penyakit dan outputnya adalah berupa ramuan apa yang harus
digunakan untuk mengobatinya.
1.2. Rumusan Masalah
Berdasarkan latar belakang masalah di atas maka permasalahan dalam
penelitian ini dapat dirumuskan sebagai pengembangan sistem jaringan syaraf
tiruan yang dapat mendeteksi jenis penyakit berdasarkan gejala-gejala klinis yang
ada sehingga dapat diketahui jenis ramuan Tianshi apa saja yang digunakan untuk
mengobati penyakit tersebut.
1 Kristanto, Andri (2004). Jaringan Syaraf Tiruan (konsep dasar, Algoritma dan aplikasi).
Gava Media, Yogyakarta.
1.3. Batasan Masalah
Batasan masalah yang digunakan dalam tugas akhir ini adalah :
1. Penelitian ini hanya membahas proses deteksi beberapa jenis penyakit pada
manusia untuk semua usia pasien.
2. Adapun jenis penyakit yang akan dideteksi antara lain: asma, asam urat,
diabetes, hipertensi (darah tinggi), anemia, malaria, TBC, stroke, maag dan
migren.
3. Input yang diperlukan dalam proses ini adalah gejala-gejala klinis yang
dominan dalam penegakan diagnosis.
4. Variabel yang digunakan sebagai input untuk mendeteksi penyakit infeksi
pada manusia adalah :
a. Alergi
b. Batuk.
c. Pilek/bersin.
d. Berkeringat
e. Lemas.
f. Napsu makan berkurang.
g. Mual dan atau muntah.
h. Kaki/tangan Kesemutan
i. Pegal/ngilu.
j. Sakit kepala/pusing
k. Nyeri
l. Demam
m. Mudah lelah .
5. Arsitektur jaringan syaraf yang digunakan adalah ADALINE (Adaptive Linier
Element). Data yang digunakan untuk pelatihan input adalah data catatan
medis pasien yang menderita penyakit asma, asam urat, diabetes, hipertensi
(darah tinggi), anemia, malaria, TBC, stroke, maag dan migren di RSU Brayat
Minulya Solo.
6. Bahasa pemrograman yang dipakai untuk mendeteksi penyakit pada manusia
dengan penerapan model jaringan syaraf tiruan adalah dengan menggunakan
Borland Delphi 7.0 dan MySQL sebagai databasenya.
1.4. Tujuan Penelitian
Tujuan penelitian dalam tugas akhir ini adalah:
1. Merancang dan membangun sistem jaringan syaraf tiruan untuk mendeteksi
beberapa jenis penyakit pada manusia serta obat apa saja yang diperlukan
untuk mengobati penyalit tersebut berdasarkan data medis yang ada.
2. Mengetahui apakah jaringan syaraf tiruan dapat menerima input selain data
pelatihan dan melihat bagaimana hasilnya.
3. Mampu membantu masyarakat umum agar dapat secara dini mengetahui
penyakit yang sedang dideritanya sehingga mampu mengambil tindakan
preventif sebelum ditangani oleh ahlinya.
4. Dapat membantu dokter yang bertugas dalam melakukan pemeriksaan dan
diagnosa khususnya terhadap jenis penyakit tersebut diatas.
1.5. Manfaat Penelitian
Adapun manfaat yang diperoleh dari penelitian ini antara lain :
1. Dengan jaringan syaraf tiruan dapat dikembangkan suatu alternatif dalam
menentukan diagnosa penyakit, seperti : asma, asam urat, diabetes, hipertensi
(darah tinggi), anemia, malaria, TBC, stroke, maag dan migren, sehingga
dapat segera diketahui langkah pencegahannya.
2. Mengetahui perancangan jaringan syaraf tiruan untuk penyakit asma, asam
urat, diabetes, hipertensi (darah tinggi), anemia, malaria, TBC, stroke, maag
dan migren.
3. Memudahkan untuk menentukan diagnosa penyakit-penyakit tersebut diatas.
1.6. Metodologi Penelitian
1.6.1. Metodologi Pengumpulan Data
Dalam menunjang pencarian fakta dan pengumpulan data guna mendapatkan
pemecahan masalah yang berkaitan dengan sistem deteksi penyakit, diperlukan
pemahaman tentang bagaimana sistem berjalan. Untuk mengetahui bagaimana
sistem berjalan diperlukan beberapa metode untuk memperoleh data antara lain :
1. Pengamatan (Observasi).
Yaitu suatu metode dimana penyusun mengadakan pengamatan langsung
berdasarkan sumber-sumber umum yang ada yaitu pada sub. bagian catatan
rekam medis RSU Brayat Minulya Solo
2. Wawancara (interview).
Metode ini dilakukan dengan melakukan tanya jawab langsung pada dokter
atau narasumber lain dengan berlandaskan pada tujuan penelitian
3. Literatur / Kepustakaan.
Merupakan pengumpulan data melalui studi literatur (kepustakaan) yang ada
hubungannya dengan penyusunan laporan tugas akhir ini.
1.6.2. Metodologi Pengembangan Sistem
Metode yang digunakan pada pengembangan sistem atau perangkat lunak
adalah :
1. Analisis dan Rekayasa Sistem.
Dalam menganalisis sistem secara efektif maka perlu ditetapkan tujuan
perancangan dan segala sesuatu yang dibutuhkan dalam perancangan.
2. Analisis Kebutuhan.
Analisis kebutuhan yang dilakukan untuk mengetahui segala sesuatu yang
dibutuhkan baik dalam pembuatan perangkat lunak, perangkat keras dan
bahasa pemrograman yang digunakan.
3. Perancangan (design).
Perancangan yang dilakukan untuk mendesain model yang diinginkan, yaitu
perancangan arsitektur jaringan syaraf, perancangan proses aliran data,
perancangan basis data dan perancangan antarmuka.
4. Implementasi.
Implementasi yang dilakukan untuk menerjemahkan perancangan ke dalam
bahasa pemrograman, dalam hal ini Borland Delphi 7.0.
5. Testing (uji coba).
Uji coba terhadap sistem dilakukan secara keseluruhan.
1.7. Sistematika Penulisan
Adapun sistematika dalam penulisan tugas akhir ini adalah sebagai berikut:
BAB I : PENDAHULUAN
Meliputi Latar Belakang Masalah, Perumusan Masalah, Batasan
Masalah, Tujuan Penelitian, Manfaat Penelitian, Metodologi
Penelitian yang dilakukan serta Sistematika Penulisan dalam
penyusunan laporan.
BAB II : LANDASAN TEORI
Dalam bab ini menjelaskan mengenai teori - teori yang menjadi
dasar di dalam penelitian, yaitu Jaringan Syaraf Biologis,
Jaringan Syaraf Tiruan, ADALINE, Pengertian Penyakit dan
pembagiannya, Diagram Alir Data / Data Flow Diagram (DFD),
Bagan alir (flowchart) dan Borland Delphi 7.0.
BAB III : ANALISIS DAN PERANCANGAN.
Dalam bab ini menjelaskan mengenai Metode Analisis, Sistem
Deteksi Penyakit, Analisis Kebutuhan, dan Metode Perancangan
Sistem.
BAB IV : IMPLEMENTASI.
Bab ini berisi pembahasan dari hasil pembuatan program sistem
deteksi jenis penyakit infeksi tropis pada manusia, kemudian
dianalisis untuk diambil kesimpulan.
BAB V : PENUTUP.
Bab ini berisi kesimpulan berdasarkan hasil analisa yang telah
dilakukan dan saran bagi pembaca serta semua pihak yang
berminat mengembangkan sistem deteksi penyakit serta
pengobatannya.
BAB II
LANDASAN TEORI
2.1. Jaringan Syaraf Biologis
Sistem syaraf, bersama-sama dengan sistem endokrin, mengurus atau
memelihara sebagian besar pengaturan fungsi tubuh. Sejak pembentukannya,
sistem syaraf ini mempunyai sifat-sifat mengatur yang sangat kompleks dan
khusus. Sistem syaraf menerima berjuta-juta rangsangan informasi yang berasal
dari bermacam-macam organ sensorik dan kesemuanya ini bersatu untuk dapat
menentukan respon yang akan diberikan oleh tubuh. Disamping sebagai inspirasi
awal dari jaringan syaraf tiruan, sistem syaraf biologis memberikan ciri-ciri yang
memiliki keuntungan komputasi yang jelas. Pengalaman sensorik ini dapat
menimbulkan reaksi yang berlangsung dengan segera, atau ingatan yang terbentuk
dapat disimpan di dalam otak dan selanjutnya dapat membantu menentukan reaksi
tubuh yang bagaimana yang akan dikeluarkan di masa yang akan datang (Santoso,
2000).
Syaraf biologis memiliki tiga jenis komponen yang merupakan perhatian
khusus dalam memahami tentang jaringan syaraf tiruan, yaitu dendrit, soma dan
akson. Dendrit adalah bagian yang menerima banyak sinyal dari syaraf lainnya.
Sinyal ini adalah impuls elektris yang dikirimkan melalui sebuah sypnatic gap
dengan memakai proses kimia. Aksi pengiriman secara kimia ini memodifikasi
sinyal-sinyal yang baru saja masuk dengan cara yang sama seperti aksi bobot pada
sebuah jaringan syaraf tiruan.
Soma atau badan sel, menjumlahkan sinyal-sinyal yang baru saja masuk.
Ketika input yang cukup diterima, selnya disulut (fired) inilah yang mengirimkan
sinyal atas akson ke sel lainnya. Sering diperkirakan bahwa sebuah sel, baik
disulut atau tidak, pada waktu sesaat, sinyal yang dikirimkan dapat diperlakukan
sebagai biner (berpasangan). Akan tetapi frekuensi penyulutan berbeda-beda dan
dapat dipandang sebagai sinyal dengan magnitude yang lebih besar atau lebih
kecil. Ini disesuaikan dengan melihat pada setiap tahap atau langkah waktu yang
berlainan dan menjumlahkan semua aktifitas (sinyal diterima atau sinyal
dikirimkan) pada titik khusus pada waktu tertentu.
Pengiriman sinyal dari syaraf khusus dikerjakan oleh aksi potensial yang
dihasilkan dari kosentrasi ion-ion yang berbeda pada salah satu sisi dari lapisan
akson syaraf (“white matter” dari otak). Ion-ion yang paling banyak dilibatkan
secara langsung adalah potassium, sodium dan chloride.
Syaraf biologis umum digambarkan pada gambar 2.1, bersama dengan
akson dari dua syaraf lainnya (syaraf yang dapat menerima sinyal) dan dendrit
untuk dua syaraf lainnya (syaraf yang dapat mengirimkan sinyal). Beberapa ciri-
ciri elemen pemrosesan dari jaringan syaraf tiruan diberikan dari sifat syaraf
biologis, yaitu (Fausett, 1994) :
1. Elemen pemrosesan menerima banyak sinyal.
2. Sinyal mungkin dapat dimodifikasi oleh bobot pada dendrit.
3. Elemen pemrosesan menjumlahkan input bobot.
4. Dalam keadaan yang tepat (input yang cukup), syaraf mentransmisikan sebuah
output tunggal.
5. Output dari syaraf khusus mungkin menuju ke banyak syaraf lainnya (cabang-
cabang akson).
Ciri-ciri lainnya dari jaringan syaraf tiruan yang diberikan oleh syaraf biologis
adalah :
1. Pemrosesan informasi adalah lokal/setempat (meskipun pengertian lain dari
transmisi, seperti aksi dari hormon, mungkin memberikan pengertian kontrol
proses keseluruhan).
2. Memori dibagi atas :
a. Memori jangka panjang terletak pada sinapsis syaraf atau bobot.
b. Memori jangka pendek disesuaikan untuk sinyal yang dikirim oleh syaraf.
3. Kekuatan sipnasis (sypnase strength) mungkin dapat dimodifikasi oleh
pengalaman.
4. Neurotransmitters untuk sipnasis dapat menjadi pemicu/pembangkit atau
penghalang.
Karakteristik lain yang penting dari jaringan syaraf tiruan, yang sama dengan
sistem syaraf biologis adalah toleransi kesalahan (fault tolerance). Sistem syaraf
biologis memberikan toleransi kesalahan dalam dua hal. Pertama, dapat mengenali
banyak sinyal input yang agak berbeda dengan sembarang sinyal input lain yang
pernah dilihat sebelumnya. Sebuah contoh dari hal ini adalah kemampuan
manusia untuk mengenali seseorang setelah periode waktu yang lama. Kedua,
dapat memberi toleransi kerusakan untuk sistem syaraf itu sendiri. manusia
dilahirkan dengan syaraf sebanyak 100 milyar. Sebagian besar berada dalam otak,
dan banyak yang tidak dapat digantikan ketika sel-sel syaraf tersebut telah mati.
Walaupun syaraf biologis terus-menerus hilang, manusia tetap berlanjut untuk
belajar. Bahkan dalan kasus kehilangan sel syaraf yang parah, syaraf-syaraf lain
dapat sewaktu-waktu dilatih untuk mengambil alih fungsi dari sel-sel yang rusak.
Dengan cara yang sama, jaringan syaraf tiruan dapat didesain untuk mengabaikan
kerusakan kecil pada jaringan, dan jaringan dapat dilatih kembali dalam kasus-
kasus kerusakan yang berarti (misalnya kehilangan data dan beberapa hubungan).
Gambar 2.1. Syaraf biologi
Walaupun bagi penggunaan jaringan syaraf tiruan tidak diharapkan untuk
dapat memodelkan sistem syaraf biologis, namun mencoba untuk mencapai
kemungkinan memodelkan jaringan syaraf biologis secara lebih logis/masuk akal
dapat membawa kepada perbaikan ciri-ciri komputasional. Satu contoh adalah
penggunaan planar array dari syaraf, sebagaimana ini ditemukan pada syaraf
visual cortex untuk peta organisasi sendiri (Self-Organizing Maps) dari Kohonen.
Sifat dasar secara topologi dari peta ini mempunyai keuntungan komputasional,
bahkan dalam aplikasi dimana struktur unit output sendiri tidak signifikan.
Para peneliti lain telah menemukan bahwa pengelompokkan dari syaraf tiruan
optimal secara komputasional dapat disamakan dengan kumpulan syaraf biologis.
2.2. Jaringan Syaraf Tiruan
Jaringan syaraf tiruan disebut juga “Brain Metaphor”, “Computational
Neuroscience” atau “Parallel Distributed Processing” serta “Connection”.
Sistem ini merupakan suatu model komputer yang mengambil prinsip kerja syaraf
otak manusia. Jaringan syaraf tiruan tersusun dari sejumlah besar elemen yang
melakukan kegiatan analog dengan fungsi-fungsi biologis neuron yang paling
elementer. Elemen-elemen ini terorganisasir sebagaimana layaknya anatomi otak,
walaupun tidak persis. Jaringan syaraf tiruan dapat belajar dari pengalaman,
melakukan generalisasi dari contoh-contoh yang diperoleh dan mengabstraksi
karakteristik esensial input bahkan data yang tidak relevan (Fausett, 1994).
Jaringan syaraf tiruan beroperasi secara langsung dengan angka sehingga data
yang tidak numerik harus diubah menjadi data numerik. Jaringan syaraf tiruan
dikenal sebagai model free estimator karena tidak memerlukan model matematis
dari permasalahan yang dihadapi, dikenal juga sebagai kotak hitam (Black Box
Technology) atau tidak transparan (Opaque) karena tidak dapat menerangkan
bagaimana suatu hasil didapatkan. Hal ini membuat jaringan syaraf tiruan mampu
digunakan untuk menyelesaikan persoalan yang tidak terstruktur dan sulit
didefinisikan.
Jaringan syaraf tiruan diimplementasikan untuk pemecahan masalah
komputasi seperti yang dilakukan oleh otak manusia seperti pengenalan pola,
pengambilan keputusan, kendali penggerak dan banyak lagi seperti prediksi
kebangkrutan pada perusahaan, sebagai suatu mekanisme untuk mengakusisi
pengetahuan untuk sistem pakar seperti pada peramalan stok market dengan hasil
yang akurat. Pada dasarnya, kebanyakan aplikasi jaringan syaraf tiruan termasuk
ke dalam 5 kategori berikut (Haykin, 1994) :
1. Prediksi, menggunakan nilai input untuk memprediksi beberapa output.
Contohnya memilih barang terbaik dalam market, peramalan cuaca,
identifikasi seorang penderita penyakit kanker, dan lain sebagainya.
2. Klasifikasi, menggunakan nilai input untuk menentukan klasifikasi.
Contohnya, adalah input dari huruf ‘A’.
3. Asosiasi data, pada dasarnya seperti klasifikasi, tetapi juga dapat mengenali
data yang berisikan kesalahan. Contohnya, tidak hanya identifikasi karakter
yang di scan tetapi identifikasi kapan scanner tidak bekerja sebagaimana
mestinya.
4. Data Conseptualization, menganalisa input-input sehingga pengelompokkan
hubungan dapat di simpulkan.
5. Data Filtering, menghaluskan sebuah sinyal input. Contohnya,
menghilangkan bunyi pada sinyal telepon.
Jaringan syaraf tiruan memiliki sejumlah besar kelebihan dibandingkan
dengan metode perhitungan lainnya (sistem pakar, statistik), yaitu (Haykin,1994) :
1. Kemampuan mengakusisi pengetahuan walaupun dalam kondisi adanya
gangguan dan ketidakpastian. Hal ini dikarenakan jaringan syaraf tiruan
mampu melakukan generalisasi, abstraksi, dan ekstrasi terhadap properti
statistik dari data.
2. Kemampuan merepresentasikan pengetahuan secara fleksibel. Jaringan syaraf
tiruan dapat menciptakan sendiri representasi melalui pengaturan diri sendiri
atau kemampuan belajar (self organizing).
3. Kemampuan mentolerir suatu distorsi (error/fault). Dimana gangguan kecil
pada data dapat dianggap hanya noise (guncangan) belaka.
4. Kemampuan memproses pengetahuan secara efisien karena memakai sistem
paralel, maka waktu yang diperlukan untuk mengoperasikannya menjadi lebih
singkat.
5. Kemampuan untuk memperoleh pengetahuan melalui pembelajaran dari
pengalaman.
Walaupun dengan banyak kelebihan yang dimiliki, jaringan syaraf tiruan tetap
mempunyai sejumlah keterbatasan. Misalnya kekurangmampuannya dalam
melakukan operasi-operasi numerik dengan presisi tinggi, operasi algoritma
aritmatik, operasi logika, dan oprasi simbolis dan lamanya proses pelatihan yang
kadang-kadang membutuhkan waktu berhari-hari untuk jumlah data yang besar.
Hal itu terjadi karena sulitnya mengukur performansi sebenarnya dari jaringan
syaraf tiruan itu sendiri.
2.2.1. Konsep Dasar Jaringan Syaraf Tiruan.
Ide dasar jaringan syaraf tiruan adalah konsep belajar. Jaringan-jaringan
belajar melakukan generalisasi karakteristik tingkah laku obyek. Jika dilihat dari
sudut pandang manusia, hal ini sama seperti bagaimana manusia belajar sesuatu.
Manusia mengenal obyek dengan mengatur otak untuk menggolongkan atau
melakukan generalisasi terhadap obyek-obyek tersebut. Manusia menyimpan ilmu
pengetahuannya ke dalam otak yang berisikan sinapsis, neuron, dan lainnya.
Jaringan syaraf menyimpan ilmu pengetahuannya dalam nilai bobot sambungan
(seperti sinapsis dalam otak manusia) dan elemen-elemen (neuron) yang
menghasilkan keluaran.
Untuk dapat menyelesaikan suatu permasalahan, jaringan syaraf tiruan
memerlukan algoritma belajar, yaitu bagaimana sebuah konfigurasi jaringan
syaraf tiruan dapat dilatih untuk mempelajari data historis yang ada. Dengan
pelatihan ini, pengetahuan yang terdapat pada data dapat diserap dan
direpresentasikan oleh harga-harga bobot koneksinya. Ada dua jenis algoritma
belajar :
a. Pembelajaran Terawasi (Supervised Learning)
Metode pembelajaran pada jaringan syaraf disebut terawasi jika output yang
diharapkan telah diketahui sebelumnya. Contoh : Delta Rule, Generalised
Delta Rule (GDR) atau algoritma backpropagation, dan algoritma Learning
Vector Quantization (LVQ).
b. Pembelajaran Tak Terawasi (Unsupervised Learning)
Metode pembelajaran yang tak terawasi ini tidak memerlukan target output.
Contoh : Kohonen dan Carpenter-Grossberg Adaptive Resonance Theory
(ART), dan Competitive Learning Algorthm.
2.2.2. Konfigurasi Jaringan Syaraf Tiruan
Menurut strukturnya, jaringan syaraf dapat dibagi kedalam 2 jenis :
1. Feedforward networks.
Sinyal mengalir dari lapisan masukan, lapisan tersembunyi sampai lapisan
luaran. Setiap simpul dihubungkan dengan simpul lainnya yang berada di atas
dan di bawahnya, tetapi tidak dengan simpul yang berada pada lapisan yang
sama. Contoh : Multi Layer Perceptron (MLP), Learning Vector Quantization
(LVQ) Network, Carebellar Model Artculation Control (CMAC) Network,
Group Method of Data Handling (GMDH) Network.
2. Recurrent networks.
Sinyal mengalir dua arah: maju dan mundur. Recurrent network memiliki
memori dinamik: luaran-luaran yang berasal dari masukan, sama baiknya
seperti masukan dan luaran sebelumnya. Contoh : Hopfield network, Elman
network, dan Jordan network.
2.3. ADALINE
ADALINE (Adaptive Linear Neuron) merupakan algoritma pembelajaran yang
terawasi dan pada dasarnya menggunakan aktivasi bipolar (1 atau -1) untuk sinyal
input dan target output. Bobot dalam koneksi yang berasal dari unit input ke
ADALINE dapat diatur. ADALINE mempunyai bias, dimana bobot yang ada
dalam suatu koneksi di suatu jaringan dapat diatur dan fungsi aktivasinya selalu 1.
Secara umum, ADALINE dapat dilatih dengan menggunakan delta rule
seperti LMS (Least Mean Square) atau aturan Widrow dan Hoff. Aturan atau
algoritma ADALINE juga digunakan untuk jaringan satu lapisan dengan beberapa
unit input. ADALINE hanya mempunyai satu unit output.
Aturan pembelajaran akan meminimalisasi rata-rata kesalahan yang terjadi
dengan nilai target. Hal ini akan mengijinkan jaringan untuk melanjutkan
pembelajaran pada semua pelatihan, bahkan sesudah nilai output yang benar
dihasilkan (jika sebuah fungsi threshold diterapkan) untuk beberapa pola.
Sesudah pelatihan, jika jaringan itu sedang digunakan untuk klasifikasi pola,
dimana output yang dikehendaki, baik +1 atau -1, sebuah fungsi threshold dapat
diterapkan kedalam jaringan input untuk memperoleh aktivasi. Jika input jaringan
ke ADALINE lebih besar daripada atau sama dengan 0, nilai aktivasinya akan
diset menjadi 1, dan jika tidak, nilai aktivasinya sama dengan -1.
ADALINE adalah unit tunggal neuron yang menerima input dari beberapa
unit. ADALINE juga menerima input dari sebuah unit yang sinyalnya selalu +1,
untuk bobot bias dilatih oleh proses yang sama, sedangkan delta rule digunakan
untuk melatih bobot yang lain. ADALINE tunggal ditunjukkan pada gambar 2.2.
diberikut ini :
Gambar 2.2. Arsitektur ADALINE
Beberapa ADALINE yang menerima input yang sama dapat dikombinasikan
dalam jaringan satu lapisan, dideskripsikan untuk perceptron. Jika ADALINE
dalam jaringan satu lapisan ini dikombinasikan, maka output dari ADALINE akan
berubah menjadi input untuk ADALINE yang lain, sehingga jaringan akan
berubah menjadi jaringan banyak lapisan. Kondisi semacam ini akan
mempengaruhi dalam penentuan sebuah bobot, karena didalam menentukan bobot
akan sangat sulit.
2.3.1. Algoritma Pelatihan
Sebuah algoritma untuk pelatihan ADALINE adalah sebagai berikut :
Langkah 1 : inisialisasi bobot (biasanya menggunakan nilai acak). Set learning
rate α
Langkah 2 : selama kondisi berhenti bernnilai salah, maka lakukan langkah-
langkah berikut :
a. Untuk pelatihan masing-masing pasangan s dan t, kerjakan :
(1) Set aktivasi untuk unit input, i = 1….n
ii sx =
(2) Hitung input jaringan ke unit output
∑−=i
iiwxbiny _
(3) Perbaharui bias (b) dan bobot (w), i = 1,….,n
iii xinylamawbaruw
inylamabbarub
)_1()()(
)_1()()(
−+=
−+=
αα
b. Tes untuk kondisi berhenti. Jika bobot yang paling besar
berubah pada langkah a, lebih kecil dibandingkan pada
toleransi yang ditetapkan, maka perhitungan bobot bias bisa
dihentikan, kalau tidak, dilanjutkan.
2.3.2. Aplikasi
Sesudah pelatihan, sebuah unit ADALINE dapat digunakan untuk
mengklasifikasikan pola input. Jika nilai target bersifat bivalen (polar atau biner),
fungsi step dapat diterapkan pada fungsi aktivasi untuk unit bipolar. Prosedur
dariu fungsi step yang diterapkan pada target bipolar adalah sebagai berikut:
Langkah 1 : inisialisasi bobot
Langkah 2 : untuk masing-masing vector input bipolar x, lakukan langkah-
langkah berikut ini :
a. Set aktivasi unit input untuk x
∑+=i
iiwxbiny _
b. Fungsi aktivasi yang berlaku adalah
−=
1
1y jika
0_
0_
<
≥
iny
iny
2.4. MADALINE
MADALINE (Many Adaptive Linear Neurons) diatur dalam jaringan banyak
lapisan. Contoh yang diberikan oleh PERCEPTION dan DELTA RULE untuk
beberapa unit output, keduanya mengindikasikan tidak ada perubahan dalam
proses pelatihan jika beberapa unit ADALINE dikombinasikan dalam jaringan
satu lapisan. Arsitektur MADALINE dapat pada gambar 2.3. berikut :
Gambar 2.3. Arsitektur MADALINE dengan 2 ADALINE yang tersembunyi
dan satu output ADALINE
Dari gambar diatas dapat dijelaskan bahwa 2 unit output yang tersembunyi
dari ADALINE, yaitu z1 dan z2 yang ditentukan dengan sinyal yang berasal dari
unit input yang sama, yaitu x1 dan x2. Masing-masing sinyal output adalah hasil
penerapan sebuah fungsi threshold ke unit input jaringan. Kemudian y adalah
fungsi nonlinear dari input vector (x1 , x2). Penggunaan unit yang tersembunyi
yaitu z1 dan z2 adalah untuk memberikan kemampuan komputansi yang tidak
ditemukan pada jaringan satu lapisan, tetapi juga mempersulit proses pelatihan.
2.4.1. Algoritma Pelatihan
Algoritma yang digunakan untuk pelatihan MADALINE ada 2, yaitu MRI dan
MRII. Dalam algoritma MRI, ditentukan bobot adalah v1 dan v2. Unit output y
akan bernilai 1 bila sinyal yang diterima dari z1 dan z2 adalah 1dan unit output y
akan bernilai -1 bila sinyal yang diterima dari z1 dan z2 adalah -1. dengan kata
lain, unit y melakukan fungsi logika OR pada suatu sinyal yang diterima dari z1
dan z2. Bobot pada y adalah 2
11 =V dan
2
12 =V , dengan bias adalah
2
13 =b .
Bobot pada ADALINE pertama yang tersembunyi yaitu w11 dam w21, dan bobot
pada ADALINE kedua yang tersembunyi yaitu w12 dam w22 disesuaikan dengan
algoritmanya. Algoritma pelatihan pada MADALINE MRI adalah sebagai
berikut:
Langkah 0 : Tentukan fungsi aktivasi untuk masing-masing unit z1,z2 dan y
yaitu :
−=
1
1y jika
0
0
<
≥
x
x
Langkah 1 : inisialisasi bobot (biasanya menggunakan nilai atau angka yang
kecil dan acak). Set learning rate α dengan nilai kecil
Langkah 2 : selama kondisi berhenti bernnilai salah, maka lakukan langkah-
langkah berikut :
a. Untuk masing-masing pasangan bipolar s dan t,
b. Set aktivasi unit input : ii sx =
c. Hitung input jaringan untuk masing-masing unit ADALINE
yang tersembunyi
22212222
21211111
_
_
wxwxbinz
wxwxbinz
++=
++=
d. Tentukan output dari masing-masing unit ADALINE yang
)_(
)_(
1
1
inzfz
inzfz
=
=
e. Tentukan output jaringan
)_(
_ 22113
inyfy
vzvzbiny
=
++=
f. Tentukan kesalahan dan perbaiki bobot:
Jika t = y, tidak ada perubahan perbaikan bobot
Jika tidak, kerjakan :
Jika t – 1, maka perbaiki bobot pada zi
Unit input terdekat 0
)_(
)_1()()(
inyfy
inzlamabbarub jjj
=
−+= α
Jika t = -1, maka perbaiki bobot semua unit zkbernilai positif
ikikik
kkk
xinzlamawbaruw
inzlamabbarub
)_1()()(
)_1()()(
−+=
−+=
α
α
g. Tes kondisi berhenti. Jika perubahan bobot telah berhenti atau
jika angka maksimum pada literasi perbaikan bobot telah
dilakukan, kondisi berhenti bernilai benar, kalau tidak,
lanjutkan.
Dalam algoritma MR II, ditentukan bobot adalah v1 dan v2, sedangkan bias
adalah b3 dan unit output yaitu y. Unit output y akan bernilai 1 bila sinyal yang
diterima dari z1 dan z2 adalah 1dan unit output y akan bernilai -1 bila sinyal yang
diterima dari z1 dan z2 adalah -1. dengan kata lain, unit y melakukan fungsi logika
OR pada suatu sinyal yang diterima dari z1 dan z2.
Bobot pada y adalah 2
11 =V dan
2
12 =V , dengan bias adalah
2
13 =b .
Bobot pada ADALINE pertama yang tersembunyi yaitu w11 dam w21, dan
bobot pada ADALINE kedua yang tersembunyi yaitu w12 dam w22 disesuaikan
dengan algoritmanya. Algoritma pelatihan pada MADALINE MRI adalah sebagai
berikut:
Langkah 0 : Tentukan fungsi aktivasi untuk masing-masing unit z1,z2 dan y
yaitu :
−=
1
1y jika
0
0
<
≥
x
x
Langkah 1 : inisialisasi bobot (biasanya menggunakan nilai atau angka yang
kecil dan acak). Set learning rate α dengan nilai kecil
Langkah 2 : selama kondisi berhenti bernnilai salah, maka lakukan langkah-
langkah berikut :
a. Untuk masing-masing pasangan bipolar s dan t,
b. Set aktivasi unit input : ii sx =
c. Hitung input jaringan untuk masing-masing unit ADALINE
yang tersembunyi
22212222
21211111
_
_
wxwxbinz
wxwxbinz
++=
++=
d. Tentukan output dari masing-masing unti ADALINE yang
tersembunyi :
)_(
)_(
12
11
inzfz
inzfz
=
=
e. Tentukan output jaringan
)_(
_ 22113
inyfy
vzvzbiny
=
++=
f. Tentukan kesalahan dan perbaiki bobot:
Jika t ≠ y, lakukan langkah 1 dan langkah 2 untuk masing-
masing unit tersembunyi, dimana input jaringan terdekat sama
dengan 0 (misalnya antara -0,25 sampai 0,25)
(1) Ubahlah unit output (dari _1 menjadi -1)
(2) Hitung ulang respon jaringan (gunakan delta rule untuk
menghitung ulang)
Tes kondisi berhenti. Jika perubahan bobot telah berhenti atau jika angka
maksimum pada literasi perbaikan bobot telah dilakukan, kondisi berhenti bernilai
benar, kalau tidak, lanjutkan.
2.5. Penyakit Pada Manusia
2.5.1. Asma
Asma adalah suatu gejala yang ditimbulkan oleh kelainan saluran pernapasan
yang menyebabkan peningkatan kepekaan terhadap rangsangan dari lingkungan.
Pemicu kejadian ini dapat berupa kelelahan pikiran (gangguan emosi), kelelahan
jasmani, perubahan lingkungan hidup yang tidak diharapkan (cuaca, temperature,
dan lain sebagainya), infeksi saluran pernapasan dan reaksi alergi dari bahan yang
terhirup atau dimakan. Tingkat kepekaan saluran pernapasanini diawali dari gejala
ringan (pilek/bersin atau batuk yang sering berulang/kambuh) sampai dengan
gejala yang berat, berupa serangan asma.
Sekitar 50% gejala ini akan sembuh dengan sendirinya, walaupun pada suatu
saat gejala ini akan muncul lagi pada tingkat yang lebih berat. Keadaan ini dikenal
sebagai asma.
2.5.2. Diabetes
Nama lengkap penyakit ini adalah diabetes mellitus, yaitu suatu gangguan dari
kelenjar pankreas. Menurut perkiraan medis, diabetes tidak bisa disembuhkan,
tetapi bias dikontrol dengan pengobatan seumur hidup (Medi Media, 1999).
Penyakit diabetes dibagi menjadi 2. Tipe I adalah diabetes yang tergantung
kepada insulin (insulin dependen) yang biasa terjadi pada anak-anak, dan
pengobatannya memerlukan suntikan insulin. Tipe II (non insulin dependen)
adalah diabetes yang tidak tergantung insulin. Ini biasa terjadi pada orang dewasa
dan biasanya bisa dikontrol dengan olah raga, diet, dan obat anti diabetes.
Penyebab penyakit ini belum bias dipastikan, namun biasanya disebabkan oleh
faktor keturunan serta rusaknya kelenjar pankreas.
2.5.3. Hipertensi
Hipertensi atau tekanan darah tinggi adalah tekanan darah yang terbaca
dimana sistolik/distolik diatas 140/90 mmHg. Menurut kalangan kedokteran,
keadaan ini tidak bias disembuhkan, tetapi dapat dikontrol dengan pola hidup
sehat dan obat-obatan. Namun menurut Clifford C. Andersin MD, obat-obatan
untuk hipertensi pada hakikatnya hanya sekedar meringankan, bukan
menyembuhkan.
2.5.4. Anemia
Anemia adalah keadaan yang disebabkan oleh rendahnya kadar hemoglobin
(Hb) darah. Semua Hb yang terdapat didalam eritrosit mengalami penurunan
konsentrasi dibawah nilai normal, sehingga penderita mengalami sakit kepala,
pusing, mudah lelah, dan mata berkunang-kunang. Selain karena penurunan
konsentrasi Hb, penyakit ini bisa juga disebabkan oleh faktor keturunan, ataupun
sel asal rusak karena pengaruh obat-obatan tipe tertentu.
2.5.5. Malaria
Malaria adalah suatu infeksi sel darah merah oleh plasmodium. Malaria
disebabkan melalui gigitan nyamuk betina anopheles, transfusi darah yang
terkontaminasi, dan suntikan dengan jarum yang sebelumnya telah digunakan oleh
penderita. Setelah digunakan obat-obatan dan insektisida, malaria jarang
ditemukan di Amerika dan negara berkembang lainnya, tetapi infeksi ini masih
sering terjadi di negara-negara tropis. Terdapat 4 spesies parasit malaria, yaitu :
(1) Plasmodium vivax, (2) Plasmodium Ovale, (3) Plasmodium Falciparum, dan
(4) Palsmodium Malariae. Semuanya dapat menginfeksi manusia dan
menyebabkan malaria. Plasmodium Falciparum merupakan penyebab infeksi
terbanyak dan paling berbahaya. Gejala biasanya mulai timbul dalam waktu 10-35
hari setelah parasit masuk ke dalam tubuh manusia melalui gigitan nyamuk.
Gejala awal seringkali berupa demam ringan yang hilang timbul, sakit kepala,
sakit otot dan mengigil, bersamaan dengan perasaan tidak enak badan (malaise).
Gejala ini berlangsung selama 2-3 hari dan sering diduga sebagai gejala flu.
Gejala berikutnya dan pola penyakitnya pada keempat jenis malaria ini berbeda.
Pada malaria falciparum bisa terjadi kelainan fungsi otak, yaitu suatu komplikasi
yang disebut malaria serebral. Malaria serebral bisa berakibat fatal. Pada malaria
vivax, mengigau bisa terjadi jika demam tinggi, sedangkan gejala otak lainnya
tidak ada. Pada semua jenis malaria, jumlah sel darah putih total biasanya normal
tetapi jumlah limfosit dan monosit meningkat. Jika tidak diobati, biasanya akan
timbul jaundice ringan (sakit kuning) serta pembesaran hati dan limpa. Kadar gula
darah rendah dan hal ini lebih berat pada penderita yang di dalam darahnya
mengandung lebih banyak parasit. Jika sejumlah kecil parasit menetap di dalam
darah, kadang malaria bersifat menetap.
2.5.6. TBC
TBC adalah penyakit menular yang disebabkan oleh mycobacterium
tumbercolosis. Selain terdapat di paru-paru, bakteri ini juga dijumpai di beberapa
organ diseluruh tubuh, antara lain : usus dan kelenjar limfa (kelenjar getah bening,
tulang kulit, otak, ginjal, dan lain-lain) kemungkinan seseorang tertular sangat
tinggi, terutama pada daerah yang berpenduduk padat. Gejala umum pada
penderita TBC adalah suhu badan naik hingga 390 – 410C, kehilangan nafsu
makan, batuk yang berkepanjangan, berat badan menurun, dan lain sebagainya.
Bagi penderita dianjurkan minumm susu dan makanan bergizi setiap hari, istirahat
yang cukup, melakukan pernapasan di tempat yang bersih dan segar serta
menghindari hal-hal yang dapat menimbulkan stress.
2.5.7. Stroke (Pendarahan Otak)
Merupakan penyakit yang disebabkan karena aliran darah yang mengaliri otak
terputus sehingga menyebabkan hilangnya fungsi bagian tubuh yang diatur oleh
daerah yang terkena stroke. Stroke biasanya terjadi pada orang lanjut usia. Derajat
berat ringannya stroke sangat bervariasi. Bila aliran darah terputus untuk
sementara atau hanya sebagian kecil otak yang terkena, maka efeknya juga ringan
dan sementara. Sebaliknya, bila aliran darah terputus cukup luas atau bagian otak
yang terkena cukup besar, maka akibatnya berat dan cukup luas.
2.5.8. Maag
Dalam keadaan normal, dinding lambung biasanya dilindungi oleh lapisan
mukosa terhadap pengaruh asam dan enzim yang biasanya terdapat didalam cairan
lambung. Bila karena suatu sebab lapisan selaput lender (mukosa) robek, maka
asam lambung akan merusak lapisan dinding lambung dan menyebabkan tukak
(luka) dengan garis tengan beberapa sentimeter. Keadaan inilah yang disebut
dengan maag/sakit lambung.
Penyebab penyakit ini belum diketahui secara pasti, namun kebiasaan
merokok, minum minuman keras, tekanan batin, makan tidak teratur serta stress
diduga dapat menyebabkan pembentukan luka pada lambung.
2.5.9. Migren
Migren diduga akibat fenomena dari pembuluh darah yang tidak normal.
Mekanisme yang sebenarnya belum diketahui dengan jelas. Biasanya, wanita
lebih banyak mengalami migren bila dibandingkan dengan pria. Gejala umum
yang umum adalah kepala berdenyut dan biasanya hanya pada satu sisi, mual,
ingin muntah, serta sensitif terhadap cahaya dan bunyi.
Untuk mencegah, biasanya penderita dianjurkan untuk mengkonsumsi buah
dan sayuran segar, menghindari makanan dan minuman yang mengandung
alkohol, coklat, keju, kacang-kacangan, kafein dan kopi, serta menghindari
minum es atau cairan dingin.
2.6. Diagram Alir Data / Data Flow Diagram (DFD)
Diagram Alir Data / Data Flow Diagram (DFD) adalah sebuah teknik grafis
yang menggambarkan aliran informasi dan trnsformasi yang diaplikasikan pada
saat data bergerak dari input menjadi output. DFD juga dikenal sebagai grafik
aliran data atau bubble chart (Pressman, 2002). DFD tingkat 0 yang disebut juga
dengan model sistem fundamentasi atau diagram konteks, merepresentasikan
seluruh elemen sistem sebagai sebuah bubble tunggal dengan data input dan
output yang ditunjukkan oleh anak panah yang masuk dan keluar secara
berurutan. Proses tambahan (bubble) dan jalur aliran informasi direpresentasikan
pada saat DFD tingkat 0 dipartisi untuk mengungkapkan detail yang lebih. Setiap
proses yang direpresentasikan pada tingkat 1 merupakan subfungsi dari seluruh
sistem yang digambarkan di dalam model konteks. Notasi dasar yang digunakan
untuk menciptakan suatu DFD adalah sebagai berikut :
Tabel 2.1 Notasi DFD Dasar
No Notasi / Simbol Keterangan
1
Untuk merepresentasikan sebuah entitas eksternal,
yaitu sebuah elemen sistem (misalnya perangkat
keras, seseorang, program yang lainnya) atau
sistem yang lain yang menghasilkan informasi bagi
transformasi oleh perangkat lunak atau menerima
informasi yang dihasilkan perangkat lunak
2
Sebuah proses atau transformasi yang
diaplikasikan ke data (atau kontrol) dan
mengubahnya dengan berbagai macam cara.
3
Melambangkan satu atau lebih data
4 Penyimpanan data atau informasi tersimpan yang
digunakan oleh perangkat lunak
2.7. Bagan Alir (Flowchart)
Bagan alir (flowchart) adalah bagan (chart) yang menunjukkan alir (flow) di
dalam program atau prosedur sistem secara logika (Jogiyanto, 1990). Pada waktu
akan menggambarkan suatu bagan alir, analis sistem atau pemrogram dapat
mengikuti pedoman-pedoman sebagai berikut :
1. Bagan alir sebaiknya digambarkan dari atas ke bawah dan mulai dari bagian
kiri dari suatu halaman.
2. Kegiatan di dalam bagan alir harus ditunjukkan dengan jelas.
3. Harus ditunjukkan dari mana kegiatan akan dimulai dan dimana akan berakhir.
4. Masing-masing kegiatan di dalam bagan alir sebaiknya digunakan suatu kata
yang mewakili suatu pekerjaan, misalnya : “persiapkan” dokumen, “hitung”
gaji.
5. Masing-masing kegiatan di dalam bagan alir harus di dalam urutan yang
semestinya.
6. Kegiatan yang terpotong dan akan disambung di tempat lain harus ditunjukkan
dengan jelas menggunakan simbol penghubung.
7. Gunakanlah simbol-simbol bagan alir yang standar.
8.
Tabel 2.2. Simbol-simbol pada bagan alir program
No Notasi / Simbol Keterangan
1
Simbol input / output
Digunakan untuk mewakili data
input/output.
2
Simbol Proses
Digunakan untuk mewakili suatu proses.
3
Simbol Penghubung
Digunakan untuk menunjukkan sambungan
dari bagan alir yang terputus dihalaman
yang masih sama atau halaman lainnya.
4
Simbol garis alir.
Digunakan untuk menunjukkan arus dari
proses.
5
Simbol keputusan
Digunakan untuk suatu penyelesaian
kondisi di dalam program.
Tabel 2.3. Lanjutan Simbol-simbol pada bagan alir program
No Notasi / Simbol Keterangan
6
Simbol keputusan
Digunakan untuk menunjukkan suatu
operasi yang rinciannya ditunjukkan
ditempat lain
7
Simbol persiapan
Digunakan untuk memberikan nilai awal
suatu besaran
8
Simbol titik terminal
Digunakan untuk menunjukkan awal dan
akhir dari suatu proses
9
Simbol Display
Digunakan untuk menampilkan output pada
layar tampilan /monitor
2.8.Borland Delphi 7.0
Borland Delphi 7.0 merupakan program aplikasi desktop yang berbasis
Object Basic dan merupakan cara yang paling sederhana untuk membangun
aplikasi desktop. Lingkungan Delphi ditata dalam bentuk yang sangat menarik.
Integrated Development Environment (IDE) adalah sebuah lingkungan di mana
tools yang diperlukan untuk desain, menjalankan dan mengetes sebuah aplikasi
disajikan dan terhubung dengan baik sehingga memudahkan pengembangan
program. IDE terdiri dari Main Window, Component Palette, Toolbar, Form
Designer, Code Editor dan Code Explorer. Integrasi ini memberikan kemudahan
dalam mengembangkan aplikasi yang kompleks.
1. Main Window
Main window adalah bagian utama dari IDE. Main window mempunyai
semua fungsi utama dari program-program Windows lainnya. Main window
dibagi menjadi tiga bagian yaitu menu utama, toolbar, component palette.
Menu utama dipakai untuk membuka dan menyimpan file, memanggil wizard,
menampilkan jendela lain, mengubah option dan lain sebagainya. Toolbar
dipakai untuk melakukan beberapa operasi pada menu utama dengan sebuah
klik tunggal. Component palette adalah toolbar dengan ketinggian ganda,
yang berisi page control dengan semua komponennya.
2. Form Designer
Form designer memungkinkan untuk merancang aplikasi windows dengan
cara memilih komponen dari component palette dan meletakkannya dalam
form.
3. Object Inspector
Object inspector untuk mengubah property dari setiap item, disamping itu
untuk mengontrol tindakan yang diambil jika terjadi event.
4. Code Editor
Jendela ini dipakai untuk menuliskan program. VB mempunyai fasilitas
highlight untuk memudahkan menemukan kesalahan, kerangka program
sehingga tidak perlu menuliskan seluruh program.
5. Code Explorer
Code explorer dipakai untuk memudahkan navigasi di dalam file unit.
BAB III
ANALISIS DAN PERANCANGAN
3.1. Metode Analisis
Metode analisis yang akan digunakan pada sistem deteksi penyakit adalah
metode analisis dengan pendekatan terstruktur (structured approach) lengkap
dengan alat (tools) yang berupa jenis komponen yang dibutuhkan dan teknik yaitu
metode dan fungsi-fungsi yang dibutuhkan dalam pengembangan sistem sehingga
hasil analisis akan menghasilkan sistem yang terstrukturnya dapat didefinisikan
dengan baik dan jelas.
Sistem ini menggunakan diagram alir data (Data Flow Diagram / DFD) untuk
menggambarkan aliran datanya dan bagan alir data (flowchart) untuk representasi
grafis yang menggambarkan setiap langkah yang akan dilakukan dalam suatu
proses yaitu proses pelatihan dan proses pengujian pada sistem deteksi penyakit
pada manusia.
3.2. Sistem Deteksi Penyakit
Sistem deteksi penyakit pada manusia merupakan sistem yang digunakan
untuk mendeteksi berbagai jenis penyakit. Perhitungan deteksi penyakit pada
sistem deteksi ini dilakukan setelah pengguna memasukkan input. Sistem ini
dapat digunakan untuk masyarakat umum, sebagai pengganti seorang dokter
untuk membantu kecepatan diagnosa jenis penyakit, maupun seorang dokter untuk
membantu dalam proses diagnosa jenis penyakit. Proses pendeteksian jenis
penyakit ini didasarkan pada gejala-gejala klinis yang ada.
3.3. Analisis Kebutuhan
Analisis kebutuhan merupakan analisis yang dibutuhkan dalam membuat
sistem deteksi jenis penyakit pada manusia yang berupa input, output, fungsi-
fungsi yang dibutuhkan dan antarmuka yang diinginkan.
3.3.1. Input
Input atau masukan dari sistem deteksi jenis penyakit pada manusia harus
memperhatikan inisialisasi data input dan penetapan input.
1. Inisialisasi Data Input
Pada tahap ini, data yang dibutuhkan adalah catatan gejala penyakit yang
dirasakan pasien. Data dari catatan pasien tersebut sebelum diimplementasikan
menjadi sebuah masukan/input yang dapat dimengerti oleh program maka harus
diinisialisasi terlebih dahulu. Dari hasil pengambilan data pada catatan medis
pasien RSU Brayat Minulya Solo, diambil 13 variabel yang mampu menegakkan
diagnosa asma, diabetes, hipertensi (darah tinggi), anemia, malaria, TBC, stroke,
maag dan migren adalah :
1. Alergi.
2. Batuk.
3. Pilek/bersin.
4. Berkeringat.
5. Lemas/badan lemah.
6. Napsu makan berkurang.
7. Mual dan atau muntah
8. Kesemutan.
9. Pegal/ngilu.
10. Sakit kepala/pusing.
11. Nyeri.
12. Demam.
13. Mudah lelah
Setelah ditentukan variabel-variabel yang dominan dalam penegakan diagnosa
asma, diabetes, hipertensi (darah tinggi), anemia, malaria, TBC, stroke, maag dan
migren, maka harus ditentukan nilai dari variabel-variabel tersebut. Untuk
pemberian nilai dari masing-masing variabel digunakan derajat dari tiap variabel
jika dimungkinkan. Nilai yang diberikan berkisar antara -1 sampai 1, tergantung
dari kasusnya per variabel. Hasil selengkapnya :
1. Alergi, nilai -1 jika tidak alergi, jika alergi diberi nilai
a. Nilai -0,5 jika mengalami alergi pada debu.
b. Nilai 0 jika mengalami alergi pada udara.
c. Nilai 0,5 jika alergi pada makanan tertentu.
2. Batuk. Angka -1 jika tidak batuk, jika batuk diberi nilai :
a. Nilai -0,5 jika batuk dalam waktu 1 – 2 hari.
b. Nilai 0 jika batuk selama 3 – 5 hari.
c. Nilai 0,5 jika batuk selama 6 – 7 hari.
d. Nilai 1 jika batuk lebih dari seminggu.
3. Pilek/bersin., angka -1 jika tidak pilek/bersin, jika pilek/bersin diberi nilai :
a. Nilai -0,5 jika kadang-kadang bersin.
b. Nilai 0 jika bersin-bersin selama 1 – 2 hari (kadang-kadang).
c. Nilai 0,5 jika pilek/bersin selama lebih dari 3 hari.
4. Berkeringat. Angka -1 jika tidak berkeringat, jika berkeringat diberi nilai :
a. Nilai -0,5 jika kadang-kadang berkeringat.
b. Nilai 0 jika sering berkeringat.
5. Lemas/badan lemah, angka -1 jika tidak lemas, jika lemas, diberi nilai :
a. Nilai -0,5 jika kadang-kadang lemas.
b. Nilai 0 jika mendadak badan terasa lemas.
c. Nilai 0,5 jika badan sering lemas.
6. Nafsu makan berkurang angka -1 jika napsu makan tetap (tidak berkurang,
jika berkurang, diberi nilai:
a. Nilai -0,5 jika napsu makan berkurang.
b. Nilai 0,5 jika napsu makan sering berkurang.
c. Nilai 1 jika napsu makan hilang.
7. Mual dan atau muntah, angka -1 jika tidak mual/muntah. Jika mual/muntah,
diberi nilai :
a. Nilai -0,25 jika kadang-kadang mual.
b. Nilai 0 jika sering merasa mual.
c. Nilai 0,5 jika kadang muntah.
d. Nilai 1 jika sering muntah.
8. Kesemutan, angka -1 jika tidak kesemutan. Jika kesemutan, diberi nilai :
a. Nilai -0,5 jika kesemutan pada bagian kaki.
b. Nilai 0 jika kesemutan pada bagian tangan.
c. Nilai 0,5 jika kesemutan pada bagian tubuh.
9. Pegal/ngilu, angka -1 jika tidak pegal/ngilu. Jika pegal/ngilu, diberi angka :
a. Nilai -0,5 jika kadang terasa pegal/ngilu.
b. Nilai 0,5 jika sering teraa pegal/ngilu.
10. Sakit kepala/pusing. Angka -1 jika tidak sakit kepala/pusing. Jika pusing,
diberi angka :
a. Nilai -0,5 jika kadang-kadang pusing.
b. Nilai 0,5 jika sering pusing.
c. Nilai 1 jika sakit kepala tak tertahankan.
11. Nyeri. Angka -1 jika tidak nyeri, jika nyeri, diberi angka :
a. Nilai -0,25 jika nyeri pada tubuh bagian bawah.
b. Nilai 0 jika nyeri pada perut.
c. Nilai 0,75 jika nyeri pada kepala.
d. Nilai 1 jika nyeri pada seluruh bagian rubuh.
12. Demam. Diberi nilai -1 jika tidak demam, jika demam diberi nilai :
a. Nilai -0,5 jika kadang-kadang demam (hilang-timbul).
b. Nilai 0 jika agak demam (demam tetapi temperatur tidak terlalu tinggi).
c. Nilai 0,75 jika demam (disertai panas badan sampai keluar keringat tanpa
adanya aktivitas).
d. Nilai 1 jika demam tinggi (kadang sampai mengalami kejang-kejang).
13. Mudah lelah. Jika tidak mudah lelah diberi nilai -1, jika mudah lelah diberi
nilai :
a. Nilai -0,5 jika kadang merasa lelah.
b. Nilai 0 jika dengan kegiatan berat, badan terasa lelah.
c. Nilai 0,75 jika dengan kegiatan ringan, badan terasa lelah.
d. Nilai 1 jika sering merasa lelah tanpa sebab.
Setelah ditentukan nilai untuk tiap variabel, selanjutnya gejala-gejala klinis
yang terdapat pada semua variabel diganti dengan nilai-nilai yang telah
ditentukan.
2. Penetapan Input
Dalam masalah ini, untuk mendeteksi jenis penyakit diperlukan data yang
diambil dari catatan rekam medis pasien yang didalamnya terdapat gejala-gejala
klinis yang dapat menegakkan diagnosa asma, diabetes, hipertensi (darah tinggi),
anemia, malaria, TBC, stroke, maag dan migren
Data-data dari catatan rekam medis pasien ini kemudian dinormalisasikan agar
dapat diolah oleh program. Setelah itu terdapat 13 variabel input (masing-masing
mewakili gejala klinis tiap gangguan) setelah melalui normalisasi data. Dari 13
variabel inilah yang menjadi input. Variabel input selengkapnya :
X1 = Alergi.
X2 = Batuk.
X3 = Pilek/bersin.
X4 = Berkeringat
X5 = Badan lemah/mudah lemah
X6 = Napsu makan berkurang
X7 = Mual/muntah
X8 = Pegal/ngilu
X9 = Kesemutan
X10 = Sakit kepala/pusing
X11 = Nyeri
X12 = Demam
X13 = Mudah Lelah
3.3.2. Output
Output yang dihasilkan pada tahap ini adalah jenis penyakit pada manusia
yaitu seperti Asma, diabetes, hipertensi (darah tinggi), anemia, malaria, TBC,
stroke, maag dan migren.
3.3.3. Fungsi-fungsi yang Dibutuhkan
Fungsi-fungsi yang harus ditangani oleh sistem deteksi jenis penyakit ini
adalah menerima masukan data gejala, masukan data pelatihan, melakukan
pelatihan dan pengujian.
3.3.4. Antarmuka yang Diinginkan
Sistem deteksi jenis penyakit pada manusia ini akan diakses oleh user dengan
tingkat kemampuan menggunakan komputer yang berbeda. Untuk itu diperlukan
antarmuka yang dapat dimengerti dan mudah digunakan oleh pengguna dengan
berbagai tingkat kemampuan dalam menggunakan komputer. Kriteria tersebut
dapat dipenuhi dengan menggunakan antarmuka berbasis windows yaitu sistem
menu yang diharapkan dapat menjadi lebih mudah dimengerti oleh semua
pengguna baik pemula maupun mahir dalam menggunakan sistem ini.
3.4. Metode Perancangan Sistem
Perancangan perangkat lunak merupakan tahap selanjutnya dalam pembuatan
perangkat lunak setelah tahap analisa. Tujuan perancangan sistem deteksi jenis
penyakit ini adalah untuk membangun suatu sistem sederhana yang memiliki
kemampuan untuk memproses data diagnosa penyakit dengan menggunakan
sistem jaringan syaraf tiruan.
Metode perancangan sistem deteksi jenis penyakit menerapkan metode top
down dengan mengunakan alat-alat pengembangan sistem yaitu diagram alir data
(data flow diagram/DFD). Untuk proses perhitungan pelatihan dan pengujian
menggunakan bagan alir (flowchart) dalam perancangannya.
3.4.1. Diagram Alir Data (Data Flow Diagram)
Pada tahap perancangan sistem, penggunaan sistem notasi sangat membantu
dalam komunikasi dengan pemakai sistem untuk memahami secara logika.
Diagram yang menggunakan notasi untuk menggambarkan arus data sistem
adalah diagram arus data (data flow diagram). Dengan menggunakan alat desain
data flow diagram ini akan dimungkinkan untuk menggambarkan sistem dari
level yang paling tinggi menjadi level yang lebih rendah (dekomposisi).
Perancangan ini dimulai dari bentuk yang paling global yaitu dengan diagram
konteks (context diagram) atau bisa disebut juga dengan DFD Pada gambar 3.1
dapat dilihat DFD diagram konteks dengan satu proses saja yaitu proses yang
terjadi dalam sistem secara keseluruhan.
Gambar 3.1. Diagram Konteks Sistem Deteksi Penyakit
3.4.2. Bagan alir (flowchart)
Bagan alir (flowchart) merupakan representasi grafik yang menggambarkan
setiap langkah yang akan dilakukan dalam suatu proses seperti proses
perhitungan. Dalam penelitian ini bagan alir (flowchart) akan menjelaskan
langkah-langkah kerja dari perhitungan pelatihan. Flowchart proses perhitungan
pelatihan seperti pada gambar 3.2.
Gambar 3.2. Flowchart proses pelatihan
3.4.3. Algoritma Pelatihan
Dalam pelatihan, digunakan algoritma MADALINE karena system yang
dirancang merupakan kumpulan dari banyak ADALINE. Dalam algoritma
MADALINE, mula-mula bobot dan bias yang diteruskan ke Y diatur sedemikian
rupa sehingga keluaran Y akan 1 jika salah satu atau kedua keluaran dari unit
tersembunyi (z) bernilai 1. Sebaliknya, jika salah satu atau keduanya bernilai -1
maka keluarannya (Y) akan bernilai -1. Dengan kata lain, unit Y membentuk
fungsi logika “atau” dengan masukan dari unit tersembunyi (z). Algoritma
pelatihan ADALINE mula-mula untuk pola masukan dan target bipolar adalah
sebagai berikut :
1. Inisialisasi semua bobot dan bias dengan bilangan acak kecil
2. Inisialisasi laju pemahaman (α) dengan bilangan kecil
3. Jika perubahan bobot < toleransi, tampilkan hasil. Namun jika perubahan
bobot > toleransi, lakukan :
a) Set aktivasi unit masukan ii sx = untuk semua i
b) Hitung net input untuk setiap unit tersembunyi ADALINE ( nzzz ,......,, 21 )
ji
i
ijin wxbjz ∑+=_
c) Hitung keluaran setiap unit tersembunyi dengan menggunakan fungsi
aktivasi bipolar
( )0
0
1
1
_
_
_ <
≥
−==
jz
jzjikajzfz
in
in
inj
d) Tentukan keluaran jaringan
∑+=j
jjkin vzby _
( )0
0
1
1
_
_
_ <
≥
−==
jz
jzjikajzfz
in
in
inj
e) Hitung error dan perubahan bobot
Jika y = target, maka tidak dilakukan perubahan bobot
Jika y ≠ target lakukan perubahan bobot
3.4.4. Perancangan Basis Data
Basis Data merupakan himpunan kelompok data yang saling berhubungan
yang diorganisasi sedemikian rupa tanpa pengulangan (redudancy) yang tidak
perlu agar kelak dapat dimanfaatkan kembali dengan cepat dan mudah untuk
memenuhi berbagai kebutuhan. Perancangan basis data disebut juga sebagai
pemetaan model data. Pada tahap pengembangan (development) setiap tabel
diletakkan satu field cadangan (reserved) yang sewaktu-waktu dapat digunakan
apabila diperlukan. Perancangan basis data pada Sistem Deteksi Jenis Penyakit
Pada Manusia adalah sebagai berikut :
1. Tabel Bobot
Tabel bobot berfungsi untuk menyimpan bobot hasil training untuk setiap
gejala penyakit.
Tabel 3.1. Struktur Tabel Bobot
No Nama Field Tipe Data Ukuran Keterangan
1 bbtId bigint 20 ID Bobot
2 bbtIdPenyakit bigint 20 ID Bobot
Penyakit
3 bbtNilai text Nilai Bobot
4 reserved bigint 20
2. Tabel Gejala
Tabel gejala berfungsi untuk menyimpan gejala penyakit serta keterangan
penyakitnya.
Tabel 3.2. Struktur Tabel Gejala
No Nama Field Tipe Data Ukuran Keterangan
1 gjId bigint 20 ID Gejala
2 gjNama varchar 100 Nama Gejala
3 gjKeterangan text Keterangan
Gejala
4 reserved bigint 20
3. Tabel Pemodelan
Pada tabel pemodelan ini disimpan id penyakit, nilai penyakit (bernilai -1
atau 1) dan config bipolar yang berisi nilai gejala-gejala (bernilai -1 atau
1).
Tabel 3.3. Struktur Tabel Pemodelan
No Nama Field Tipe Data Ukuran Keterangan
1 pmId bigint 20 ID Gejala
Detail
2 pmIdPenyakit bigint 20 Nama Gejala
Detail
3 pmNilaiPenyakit bigint 20 Nilai Gejala
4 pmConfigBipolar text ID Gejala
5 reserved bigint 20
4. Tabel Penyakit
Tabel penyakit ini berfungsi untuk menyimpan nama-nama penyakit yang
disertai dangan data obat, pencegahan dan ramuan Tianshi.
Tabel 3.4. Struktur Tabel Penyakit
No Nama Field Tipe Data Ukuran Keterangan
1 penyId bigint 20 ID Penyakit
2 penyNama varchar 100 Nama
Penyakit
3 penyObat text Nama Obat
4 penyPencegahan text Cara
Pencegahan
5 penyRamuanTianshi text Nama
Ramuan
Tianshi
6 reserved bigint 20
5. Tabel User
Tabel user berfungsi untuk menyimpan nama lengkap, user login, user
password, status aktif serta group dari seorang user.
Tabel 3.5. Struktur Tabel User
No Nama Field Tipe Data Ukuran Keterangan
1 usrId bigint 20 ID User
2 usrNamaDetil varchar 100 Nama Detail
User
3 usrNamaLogin varchar 50 Login User
4 usrPassword varchar 100 Password User
5 usrStatusAktif tinyint 1 Status Aktif
6 usrIdGroupUser bigint 20 Id Group User
7 reserved1 bigint 20
8 reserved2 bigint 20
6. Tabel User_Group
Tabel user_group berfungsi untuk menyimpan nama group dan keterangan
dari user untuk kemudahan hak akses.
Tabel 3.6. Struktur Tabel User_Group
No Nama Field Tipe Data Ukuran Keterangan
1 usrgId bigint 20 ID User Group
2 usrgNama varchar 100 Nama User
Group
3 usrgKeterangan text Keterangan
User Group
4 reserved1 bigint 20
5 reserved2 bigint 20
3.4.5. Perancangan Antarmuka Sistem
Antarmuka sistem merupakan perantara komunikasi antara sistem dengan
user, antarmuka harus sesuai dengan sistem yang akan dijalankan oleh user.
Rancangan antarmuka masukan pada sistem deteksi jenis penyakit pada manusia
adalah terdiri dari login user, menu utama, deteksi penyakit yang meliputi
pelatihan dan pengujian, perubahan data pelatihan, ganti password pakar.
1. Rancangan Antarmuka Menu Utama
Rancangan antarmuka menu utama merupakan antarmuka untuk memilih
menu mana yang akan dijalankan. Kategori pengguna sangat berpengaruh dalam
menggunakan fasilitas menu dalam sistem ini. Jika login sebagai pengguna umum
maka hanya dapat melakukan deteksi penyakit, jika login sebagai pakar selain
dapat melakukan deteksi penyakit juga dapat melihat jenis obat yang digunakan
untuk mengobati penyakit, serta melakukan perubahan data pelatihan. Sedangkan
administrator merupakan pengguna dengan level tertinggi, yaitu mempunyai
wewenang melakukan deteksi penyakit, perubahan data pelatihan dan menambah
pengguna pakar. Rancangan antarmuka menu utama seperti terlihat pada gambar
3.3.
Gambar 3.3. Rancangan Antarmuka Menu Utama
2. Rancangan Antarmuka Login
Rancangan antarmuka login merupakan kotak isian sebagai autentifikasi
pengguna ke dalam sistem. Hal ini dilakukan agar terjadi pemilahan yang jelas
antar para pengguna yang masuk ke sistem. Pemilihan ini biasanya dilakukan
dengan menggunakan kategori pengguna, user name dan password. Rancangan
antarmuka login terdiri dari 2 edit text dan 2 button masing-masing untuk user
login dan cancel. Rancangan antarmuka login seperti terlihat pada gambar 3.4.
Gambar 3.4. Rancangan Antarmuka Login
Rancangan antarmuka server connection merupakan kotak isian sebagai fungsi
untuk mengeset database dan protocol yang dipilih. Dan juga untuk melakukan
pengesetan username dan password untuk koneksinya. Hal ini perlu dilakukan
untuk pengaksesan ke database. Rancangan antarmuka server connection seperti
terlihat pada gambar 3.5.
Gambar 3.5. Rancangan Antarmuka Server Connection
3. Rancangan Antarmuka Daftar Gejala
Rancangan antarmuka daftar gejala merupakan antarmuka untuk melakukan
penambahan gejala penyakit dan keterangannya. Rancangan antarmuka daftar
gejala seperti terlihat pada gambar 3.6.
Gambar 3.6. Rancangan Antarmuka Daftar Gejala
4. Rancangan Antarmuka Daftar Penyakit
Rancangan antarmuka daftar penyakit merupakan antarmuka untuk melakukan
manipulasi data (tambah, edit, hapus) penyakit, cara pencegahan serta obat yang
digunakan. Rancangan antarmuka daftar penyakit seperti terlihat pada gambar 3.7.
Gambar 3.7. Rancangan Antarmuka Daftar Penyakit
5. Rancangan Antarmuka Konfigurasi Jaringan Neuron
Rancangan antarmuka konfigurasi jaringan neuron merupakan antarmuka
untuk melakukan manipulasi data terhadap penyakit yang kemudian penyakit
tersebut diberi nilai gejala-gejalanya. Rancangan antarmuka konfigurasi jaringan
neuron seperti terlihat pada gambar 3.8.
Gambar 3.8. Rancangan Antarmuka Konfigurasi Jaringan Neuron
6. Rancangan Antarmuka Proses Pembelajaran
Rancangan antarmuka training atau pelatihan merupakan antarmuka untuk
melakukan pelatihan jaringan syaraf tiruan. Rancangan antarmuka training atau
pelatihan seperti terlihat pada gambar 3.9.
Gambar 3.9. Rancangan Antarmuka Proses Pembelajaran
7. Rancangan Antarmuka Pengujian Diagnosa
Rancangan antarmuka pengujian digunakan untuk memasukkan gejala yang
dirasakan pengguna kemudian melakukan pengujian untuk mengetahui jenis
penyakit yang diderita. Rancangan antarmuka pengujian terdiri dari 13 combobox
untuk gejala penyakit, 13 label untuk gejala penyakit, 1 label hasil nama penyakit
& kemungkinan menderita (Y/T), dan 3 label nama penyakit, obat dan
pencegahan. Rancangan antarmuka pengujian seperti terlihat pada gambar 3.10.
Gambar 3.10. Rancangan Antarmuka Pengujian
8. Rancangan Antarmuka Manajemen User
Rancangan antarmuka manajemen user digunakan untuk menambah, mengedit
dan menghapus user. Dalam hal ini diatur dalam tiga level, yaitu user, pakar, dan
administrator. Rancangan antarmuka manajemen user seperti terlihat pada gambar
3.11.
Gambar 3.11. Rancangan Antarmuka Manajemen User.
BAB IV
IMPLEMENTASI
Implementasi merupakan tahap pengkodean dari hasil perancangan. Pada
bab ini akan dilakukan pengimplementasian sistem berdasarkan analisa dan
rancangan yang telah dibuat pada bab-bab sebelumnya.
4.1. Lingkungan Implementasi Perangkat Lunak
Perangkat lunak yang digunakan dalam implementasi sistem adalah
sebagai berikut:
a. Sistem Operasi : Windows XP
b. Database : MySQL
c. Tools Pengembangan Perangkat Lunak :
Main Sofware : Borland Delphi 7.0
Delphi Components : GridPack 7, SuiPack 5.2, TMS Sofware 2,
Zeos DBO 6.1.5.
4.2. Lingkungan Implementasi Perangkat Keras
Perangkat keras yang digunakan dalam implementasi sistem adalah
sebagai berikut:
a. PC dengan prosessor Intel Pentium 4 1,7 GHz.
b. Memory 256 MB.
c. Hardisk 40 GB.
d. Monitor SVGA dengan resolusi 800 x 600.
4.3. Implementasi Database
Database yang digunakan dalam pengimplementasian sistem ini adalah
dengan menggunakan MySQL.
Pembuatan database pada MySQL dapat dilakukan dengan dua cara. Cara
pertama dengan menggunakan console DOS dan cara kedua dengan menggunakan
SQLYog. Dalam sistem ini database dibuat dengan menggunakan SQLYog.
Adapun sintaks dalam pembuatan tabel-tabel tersebut adalah :
create database if not exists `jst_adaline`; USE `jst_adaline`; SET FOREIGN_KEY_CHECKS=0; /*Table structure for table `bobot` */ DROP TABLE IF EXISTS `bobot`; CREATE TABLE `bobot` ( `bbtId` bigint(20) NOT NULL auto_increment, `bbtIdPenyakit` bigint(20) default NULL, `bbtNilai` text, `reserved` bigint(20) default '0', PRIMARY KEY (`bbtId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*Table structure for table `gejala` */ DROP TABLE IF EXISTS `gejala`; CREATE TABLE `gejala` ( `gjId` bigint(20) NOT NULL auto_increment, `gjNama` varchar(100) NOT NULL default '', `gjKeterangan` text, `reserved` bigint(20) default '0', PRIMARY KEY (`gjId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*Table structure for table `pemodelan` */ DROP TABLE IF EXISTS `pemodelan`; CREATE TABLE `pemodelan` ( `pmId` bigint(20) NOT NULL auto_increment, `pmIdPenyakit` bigint(20) NOT NULL default '0', `pmNilaiPenyakit` bigint(20) default NULL, `pmConfigBipolar` text, `reserved` bigint(20) default '0', PRIMARY KEY (`pmId`), KEY `FK_pemodelan_penyakit` (`pmIdPenyakit`), CONSTRAINT `pemodelan_ibfk_1` FOREIGN KEY (`pmIdPenyakit`) REFERENCES `penyakit` (`penyId`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*Table structure for table `penyakit` */ DROP TABLE IF EXISTS `penyakit`; CREATE TABLE `penyakit` ( `penyId` bigint(20) NOT NULL auto_increment, `penyNama` varchar(100) NOT NULL default '', `penyObat` text, `penyPencegahan` text, `penyRamuanTianshi` text, `reserved` bigint(20) default '0', PRIMARY KEY (`penyId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*Table structure for table `user` */ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `usrId` bigint(20) NOT NULL auto_increment, `usrNamaDetil` varchar(100) default NULL, `usrNamaLogin` varchar(50) NOT NULL default '', `usrPassword` varchar(100) default NULL, `usrStatusAktif` tinyint(1) default '0', `usrIdGroupUser` bigint(20) default NULL, `reserved1` bigint(20) default '0', `reserved2` bigint(20) default '0', PRIMARY KEY (`usrId`), KEY `FK_user_id_group` (`usrIdGroupUser`), CONSTRAINT `user_ibfk_1` FOREIGN KEY (`usrIdGroupUser`) REFERENCES `user_group` (`usrgId`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Relasi antar tabel dalam database tersebut seperti tampilan berikut :
Gambar 4.1. Relasi Antar Tabel
/*Table structure for table `user_group` */ DROP TABLE IF EXISTS `user_group`; CREATE TABLE `user_group` ( `usrgId` bigint(20) NOT NULL auto_increment, `usrgNama` varchar(100) NOT NULL default '', `usrgKeterangan` text, `reserved1` bigint(20) default '0', `reserved2` bigint(20) default '0', PRIMARY KEY (`usrgId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; SET FOREIGN_KEY_CHECKS=1;
4.4. Implementasi Antarmuka
Antarmuka merupakan tampilan yang nantinya akan berinteraksi langsung
dengan pengguna. Antar-muka Sistem Deteksi Jenis Penyakit Pada Manusia
sebagai berikut:
Halaman Menu Utama
Antarmuka menu utama merupakan antarmuka untuk memilih menu mana
yang akan dijalankan. Kategori pengguna sangat berpengaruh dalam
menggunakan fasilitas menu dalam sistem ini. Halaman antarmuka menu utama
seperti terlihat pada gambar 4.2.
Gambar 4.2. Tampilan Halaman User Interface
Halaman Administrasi
Pada halaman administrasi ini hanya dapat diakses oleh admin dan pakar,
yang memiliki hak untuk manipulasi data gejala penyakit, manipulasi data
penyakit, mengkonfigurasi jaringan neuron, melakukan training terhadap data
gejala dan penyakit, melakukan pengujian diagnosa serta melakukan manajemen
user. Untuk halaman pengujian diagnosa bisa diakses oleh semua pengguna
(admin, pakar dan user).
1. Tampilan Halaman Login & Server Connection
Halaman login merupakan halaman pertama untuk dapat mengakses ke
halaman sesuai dengan hak penggunanya. Ada tiga tingkatan untuk hak
akses pengguna, yaitu : user, pakar, dan admin. Tampilan dari halaman login
adalah sebagai berikut :
Gambar 4.3. Tampilan Halaman Login
Halaman server connection adalah halaman untuk melakukan pengesetan
database, protokol yang digunakan, username dan password database. Hal
ini perlu dilakukan apabila terjadi perubahan pada database.
Gambar 4.4. Tampilan Halaman Server Connection (Data Base)
Apabila dalam proses login tidak berhasil dilakukan, karena ada kesalahan
username atau password atau setting data base connection yang salah, maka
akan keluar pesan peringatan untuk kembali mengulang login. Tampilan
pesan peringatan seperti gambar berikut ini :
Gambar 4.5. Tampilan Halaman Login Tidak Berhasil
2. Tampilan Halaman Daftar Gejala
Pada halaman daftar gejala ini, data gejala penyakit dapat diberi keterangan
gejala lebih lengkap. Dapat juga melakukan penambahan dan penghapusan
data gejala. Halaman ini hanya untuk hak akses pakar dan admin. Tampilan
halaman daftar gejala sebagai berikut :
Gambar 4.6. Tampilan Halaman Daftar Gejala
Seorang pakar atau admin dapat melakukan manipulasi data gejala. Untuk
melakukan pengeditan dan penghapusan data, dapat melakukan klik kanan
untuk mengubah atau menghapus data gejala tersebut. Akan muncul pesan
peringatan apabila terjadi penghapusan data gejala. Tampilan pesan
peringatan seperti tampilan berikut :
Gambar 4.7. Tampilan Pesan Peringatan Hapus Data
3. Tampilan Halaman Daftar Penyakit
Halaman daftar penyakit berfungsi untuk melakukan manipulasi
(menambah, mengubah dan menghapus) data penyakit dan juga mendata
pencegahan penyakit serta obat untuk penyakit tersebut. Tampilan halaman
daftar penyakit sebagai berikut :
Gambar 4.8. Tampilan Halaman Daftar Penyakit
Seorang pakar atau admin dapat melakukan manipulasi data penyakit. Untuk
melakukan pengeditan dan penghapusan data, dapat melakukan klik kanan
untuk mengubah atau menghapus data penyakit tersebut. Akan muncul
pesan peringatan apabila terjadi penghapusan data penyakit. Tampilan pesan
peringatan dapat dilihat pada gambar 4.7.
4. Tampilan Halaman Konfigurasi Jaringan Neuron
Halaman konfigurasi jaringan neuron ini berfungsi untuk melakukan
konfigurasi pada jenis-jenis gejala pada penyakit yang diberi nilai bipolar
(1 dan -1).
Pada halaman ini, seorang pakar atau admin dapat melakukan manipulasi
data. Setelah data daftar penyakit dan data daftar gejala tersedia, maka pakar
atau admin dapat menentukan konfigurasi bipolar. Yaitu menentukan
konfigurasi penyakit dengan kemungkinan gejala-gejala yang ada, yang
diberi nilai 1 untuk nilai true, dan nilai -1 untuk nilai false. Tampilan
halaman konfigurasi dapat dilihat pada tampilan berikut :
Gambar 4.9. Tampilan Halaman Konfigurasi Jaringan Neuron
5. Tampilan Halaman Proses Pembelajaran
Pada halaman proses training atau pembelajaran ini, terjadi iterasi dari
proses training untuk mendapatkan bobot masukan suatu penyakit. Variabel
input pada proses pembelajaran ini yaitu : nama penyakit, learning rate,
batas iterasi, dan toleransi. Hasil output dari proses training ini untuk
menentukan nilai inputan suatu bobot penyakit. Tampilan halaman proses
pembelajaran adalah sebagai berikut :
Gambar 4.10. Tampilan Halaman Proses Pembelajaran
6. Tampilan Halaman Manajemen User
Halaman manajemen berfungsi untuk menambah, mengedit, menghapus
serta memberikan hak akses untuk user. Role pengguna dalam aplikasi ini
ada tiga, yaitu user, pakar dan admin.
Untuk user hanya dapat melakukan aktivitas diagnosa penyakit.
Untuk pakar dan admin dapat melakukan semua aktivitas, seperti mendata
gejala, mendata penyakit, melakukan konfigurasi neuron, melakukan
training serta melakukan diagnosa.
Tampilan halaman manajemen user dapat dilihat sebagai berikut :
Gambar 4.11. Tampilan Halaman Manajemen User
Halaman User
Halaman untuk user hanya meliputi halaman login, halaman daftar
pengguna, serta halaman pengujian diagnosa. Administrator masih meliputi
halaman user.
7. Tampilan Halaman Pengujian Diagnosa
Halaman pengujian diagnosa berfungsi untuk melakukan diagnosa dari
gejala-gejala penyakit sebagai inputan. Sehingga didapatkan hasil diagnosa
kemungkinan seseorang tersebut apakah menderita suatu penyakit tertentu.
Halaman ini dapat diakses oleh semua pengguna. Tampilan halaman
pengujian diagnosa adalah sebagai berikut :
Gambar 4.12. Tampilan Halaman Pengujian Diagnosa
BAB V
PENUTUP
7.1. Kesimpulan
Berdasarkan pembahasan perancangan Sistem Deteksi Jenis Penyakit Pada
Manusia ini, maka secara garis besar dapat ditarik kesimpulan sebagai berikut:
1. Dengan menggunakan sistem ini maka seseorang dapat mengetahui
jenis-jenis penyakit dengan memasukkan data-data gejala penyakitnya.
2. Sistem ini dapat membantu seseorang dalam mendiagnosa banyak
penyakit, karena dalam sistem ini memiliki kemampuan menyimpan
jenis dan gejala penyakit dalam jumlah yang banyak.
3. Aplikasi ini diharapkan dapat membantu dalam memberikan keputusan
kepada seseorang berupa obat alternatif yang harus dilakukannya.
7.2. Saran
Masukan maupun saran untuk pengembangan lebih lanjut untuk sistem ini
sangat dibutuhkan, berikut beberapa masukan dan saran yang dapat
dipertimbangkan :
1. Untuk arahan kedepannya, sistem aplikasi ini memiliki data-data jenis
dan gejala penyakit yang lebih lengkap, sehingga kemanfaatan sistem
ini dapat berlangsung secara berkelanjutan.
2. Sistem aplikasi ini untuk kedepannya dapat bermanfaat, untuk itu dari
segi tampilan, untuk dikembangkan selanjutnya, dapat lebih
mempermudah para pengguna yang masih awam terhadap aplikasi
komputer.
3. Pada sistem aplikasi ini untuk tujuan ke depannya diharapkan dapat
berintegrasi dengan sistem aplikasi lain, seperti aplikasi berbasiskan
web, sehingga interaksi para pengguna tidak dibatasi oleh ruang.
4. Metode yang dikembangkan pada sistem ini masih bersifat dasar,
sehingga masih diperlukan fitur-fitur lain yang dapat ditambahkan agar
lebih lengkap dan tidak monoton.
DAFTAR PUSTAKA
[KRI04] Kristanto, A. Jaringan Syarat Tiruan (Konsep Dasar, Algoritma
dan Aplikasi). Yogyakarta: Gava Media, 2004.
[JEN05] Jenny, Sr. Belajar Pada Penyakit. Yogyakarta: Sahabat Setia,
2005.
[UTO05] Utomo, P. Apresiasi Penyakit – Pengobatan Secara Tradisional
dan Modern. Jakarta: Rineka Cipta, 2005.
[KUS04] Kusumadewi, Sri. Membangun Jarngan Syarat Tiruan
Menggunakan MATLAB dan EXCEL LINK. Yogyakarta: Graha
Ilmu, 2004.
[SIA04] Siang, J. J. Jaringan Syaraf Tiruan & Pemrogramannya
Menggunakan MATLAB. Yogyakarta: Penerbit Andi, 2004.
[KUS03] Kusumadewi, Sri. Artificial Intelligence (Teknik dan Aplikasinya).
Yogyakarta: Graha Ilmu, 2003.
LAMPIRAN
unit ufrmConfNeuron; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, SUIForm, ufraFooter, StdCtrls, SUIButton, DBCtrls, SUIDBCtrls, SUISideChannel, Grids, BaseGrid, AdvGrid, JvLabel, uGejala, uPenyakit, SUIComboBox, uPemodelan, Menus, SUIPopupMenu, SUIEdit; type TfrmConfNeuron = class(TForm) suiForm1: TsuiForm; Panel1: TPanel; Label1: TLabel; fraFooter1: TfraFooter; suiSideChannel1: TsuiSideChannel; Label2: TLabel; Label3: TLabel; btnTambah: TsuiButton; btnCancel: TsuiButton; lblRefresh: TJvLabel; cbPenyakit: TsuiComboBox; grid: TAdvStringGrid; gridGejala: TAdvStringGrid; suiPopupMenu1: TsuiPopupMenu; ubah1: TMenuItem; Delete1: TMenuItem; Label4: TLabel; edtNilai: TsuiEdit; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure fraFooter1btnCloseClick(Sender: TObject); procedure lblRefreshClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure gridGejalaCheckBoxClick(Sender: TObject; ACol, ARow: Integer; State: Boolean); procedure btnTambahClick(Sender: TObject); procedure btnCancelClick(Sender: TObject); procedure Delete1Click(Sender: TObject); private { Private declarations }
procedure TampilListGejala(); procedure SetComboPenyakit(); procedure TampilListPemodelan(); public { Public declarations } end; var frmConfNeuron: TfrmConfNeuron; gejala: TGejala; penyakit: TPenyakit; pemodelan: TPemodelan; implementation uses udmMain, uGTSUICommonDlg; {$R *.dfm} procedure TfrmConfNeuron.FormClose(Sender: TObject; var Action: TCloseAction); begin action := caFree; end; procedure TfrmConfNeuron.FormDestroy(Sender: TObject); begin frmConfNeuron := nil; end; procedure TfrmConfNeuron.fraFooter1btnCloseClick(Sender: TObject); begin Close; end; procedure TfrmConfNeuron.TampilListGejala; var i: integer; begin i := 0; gridGejala.Clear; if not assigned(gejala) then gejala := TGejala.Create; gejala.GetListGejala; with dmMain.qrSelect do begin
First; gridGejala.ColCount := 3; gridGejala.Cells[0,i] := 'No.'; gridGejala.Cells[2,i] := 'Nama Gejala'; i := 1; while not Eof do begin gridGejala.RowCount := i + 1; gridGejala.Cells[0,i] := inttostr(i); gridGejala.AddCheckBox(1,i,false,false); gridGejala.Cells[2,i] := FieldByName('namagejala').AsString; gridGejala.Cells[5,i] := FieldByName('idgejala').AsString; gridGejala.Cells[6,i] := ''; i := i + 1; Next; end; gridGejala.AutoSize := true; end; end; procedure TfrmConfNeuron.lblRefreshClick(Sender: TObject); begin SetComboPenyakit; TampilListGejala; end; procedure TfrmConfNeuron.SetComboPenyakit; begin cbPenyakit.Clear; if not assigned(penyakit) then penyakit := TPenyakit.Create; penyakit.GetListPenyakit; with dmMain.qrSelect do begin while not Eof do begin cbPenyakit.AddItem(FieldByName('namapenyakit').AsString, self); Next; end; end;
edtNilai.Text := ''; end; procedure TfrmConfNeuron.FormCreate(Sender: TObject); begin TampilListPemodelan; lblRefreshClick(self); end; procedure TfrmConfNeuron.gridGejalaCheckBoxClick(Sender: TObject; ACol, ARow: Integer; State: Boolean); begin if (ACol = 1) then begin if (gridGejala.Cells[6,ARow] = 'Y') then begin gridGejala.SetCheckBoxState(1,ARow,FALSE); gridGejala.Cells[6,ARow] := ''; end else begin gridGejala.SetCheckBoxState(1,ARow,TRUE); gridGejala.Cells[6,ARow] := 'Y'; end; end; end; procedure TfrmConfNeuron.TampilListPemodelan; var i: integer; begin i := 0; grid.Clear; if not assigned(pemodelan) then pemodelan := TPemodelan.Create; pemodelan.GetListPemodelan; with dmMain.qrSelect do begin First; grid.ColCount := 4; grid.Cells[0,i] := 'No.'; grid.Cells[1,i] := 'Nama Penyakit'; grid.Cells[2,i] := 'Nilai Penyakit'; grid.Cells[3,i] := 'Config Bipolar'; i := 1;
while not Eof do begin grid.RowCount := i + 1; grid.Cells[0,i] := inttostr(i); grid.Cells[1,i] := FieldByName('namapenyakit').AsString; grid.Cells[2,i] := FieldByName('nilaipenyakit').AsString; grid.Cells[3,i] := FieldByName('configbipolar').AsString; grid.Cells[4,i] := FieldByName('idpemodelan').AsString; grid.Cells[5,i] := FieldByName('idpenyakit').AsString; i := i + 1; Next; end; grid.AutoSize := true; end; end; procedure TfrmConfNeuron.btnTambahClick(Sender: TObject); var i, idPenyakit: integer; bipolar: string; success: boolean; begin if (Trim(cbPenyakit.Text) <> '') and (edtNilai.Text <> '') then begin // get idpenyakit if not assigned(penyakit) then penyakit := TPenyakit.Create; idPenyakit := penyakit.GetIdPenyakit(cbPenyakit.Text); // create configurasi bipolar bipolar := ''; for i := 1 to gridGejala.RowCount-1 do begin if (gridGejala.Cells[6,i] = 'Y') then begin if (i=1) then bipolar := bipolar + '1' else bipolar := bipolar + ' 1'; end else begin if (i=1) then bipolar := bipolar + '-1'
else bipolar := bipolar + ' -1'; end; end; // insert pemodelan if not assigned(pemodelan) then pemodelan := TPemodelan.Create; success := pemodelan.AddPemodelan(inttostr(idPenyakit), edtNilai.Text, bipolar); if (success) then begin lblRefreshClick(self); TampilListPemodelan; end; end else CommonDlg.ShowError('Nama penyakit harus diisi.'); end; procedure TfrmConfNeuron.btnCancelClick(Sender: TObject); begin lblRefreshClick(Self); TampilListPemodelan; end; procedure TfrmConfNeuron.Delete1Click(Sender: TObject); var isHapus: TModalResult; iRowSelect: integer; begin isHapus := CommonDlg.Confirm('Apakah anda yakin ingin menghapus data?'); if (isHapus = mrOk) then begin iRowSelect := grid.GetRowEx; if not assigned(pemodelan) then pemodelan := TPemodelan.Create; pemodelan.DeletePemodelan(grid.Cells[4,iRowSelect]); end; TampilListPemodelan; end; end.
unit ufrmDaftarGejalaDetail; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, SUIForm, ufraFooter, StdCtrls, SUIMemo, SUIButton, SUIEdit, Grids, BaseGrid, AdvGrid, SUIComboBox, uGejala, Menus, SUIPopupMenu; type TfrmDaftarGejalaDetail = class(TForm) suiForm1: TsuiForm; Panel1: TPanel; Label1: TLabel; Panel2: TPanel; Label2: TLabel; Label4: TLabel; edtNamaGejalaDetail: TsuiEdit; btnTambah: TsuiButton; btnRefresh: TsuiButton; btnUbah: TsuiButton; fraFooter1: TfraFooter; grid: TAdvStringGrid; Label3: TLabel; edtNilai: TsuiEdit; cbGejala: TsuiComboBox; suiPopupMenu1: TsuiPopupMenu; Ubah1: TMenuItem; Delet1: TMenuItem; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure fraFooter1btnCloseClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure btnUbahClick(Sender: TObject); procedure btnTambahClick(Sender: TObject); procedure btnRefreshClick(Sender: TObject); procedure Ubah1Click(Sender: TObject); procedure Delet1Click(Sender: TObject); private { Private declarations } FCurrentIdGejalaDetail: string; procedure RefreshGejalaDetail; public { Public declarations } end;
var frmDaftarGejalaDetail: TfrmDaftarGejalaDetail; gejala: Tgejala; implementation uses udmMain, DB, uGTSUICommonDlg; {$R *.dfm} procedure TfrmDaftarGejalaDetail.FormClose(Sender: TObject; var Action: TCloseAction); begin action := caFree; end; procedure TfrmDaftarGejalaDetail.FormDestroy(Sender: TObject); begin frmDaftarGejalaDetail := nil; end; procedure TfrmDaftarGejalaDetail.fraFooter1btnCloseClick(Sender: TObject); begin Close; end; procedure TfrmDaftarGejalaDetail.FormActivate(Sender: TObject); begin RefreshGejalaDetail; end; procedure TfrmDaftarGejalaDetail.RefreshGejalaDetail; var i: integer; begin if not assigned(gejala) then gejala := TGejala.Create; gejala.GetListGejala; with dmMain.qrSelect do begin cbGejala.Clear; while not eof do begin cbGejala.AddItem(Fieldbyname('namagejala').AsString, self); Next;
end; end; i := 0; grid.Clear; gejala.GetListGejalaDetail; with dmMain.qrSelect do begin First; grid.ColCount := 4; grid.Cells[0,i] := 'No.'; grid.Cells[1,i] := 'Nama Gejala'; grid.Cells[2,i] := 'Nama Gejala Detail'; grid.Cells[3,i] := 'Nilai'; i := 1; while not Eof do begin grid.RowCount := i + 1; grid.Cells[0,i] := inttostr(i); grid.Cells[1,i] := FieldByName('namagejala').AsString; grid.Cells[2,i] := FieldByName('namagejaladetail').AsString; grid.Cells[3,i] := FieldByName('nilaigejaladetail').AsString; grid.Cells[4,i] := FieldByName('idgejaladetail').AsString; grid.Cells[5,i] := FieldByName('idgejala').AsString; i := i + 1; Next; end; grid.AutoSize := true; end; end; procedure TfrmDaftarGejalaDetail.btnUbahClick(Sender: TObject); var success: boolean; begin if not assigned(gejala) then gejala := TGejala.Create; if (Trim(cbGejala.Text) <> '') then success := gejala.UpdateGejalaDetail(FCurrentIdGejalaDetail, cbGejala.Text, edtNamaGejalaDetail.Text, edtNilai.Text); if (success) then begin
cbGejala.ItemIndex := -1; edtNamaGejalaDetail.Text := ''; edtNilai.Text := ''; end; RefreshGejalaDetail; btnTambah.Visible := true; btnUbah.Visible := false; end; procedure TfrmDaftarGejalaDetail.btnTambahClick(Sender: TObject); var success: boolean; begin if not assigned(gejala) then gejala := TGejala.Create; if (Trim(cbGejala.Text) <> '') then success := gejala.AddGejalaDetail(cbGejala.Text ,edtNamaGejalaDetail.Text, edtNilai.Text); if (success) then begin RefreshGejalaDetail; cbGejala.ItemIndex := -1; edtNamaGejalaDetail.Text := ''; edtNilai.Text := ''; end; end; procedure TfrmDaftarGejalaDetail.btnRefreshClick(Sender: TObject); begin cbGejala.ItemIndex := -1; edtNamaGejalaDetail.Text := ''; edtNilai.Text := ''; btnTambah.Visible := true; btnUbah.Visible := false; RefreshGejalaDetail; end; procedure TfrmDaftarGejalaDetail.Ubah1Click(Sender: TObject); var iRowSelect: integer; begin if not assigned(gejala) then gejala := TGejala.create;
iRowSelect := grid.GetRowEx; gejala.GetGejalaDetailById(grid.Cells[4,iRowSelect]); with dmMain.qrSelect do begin cbGejala.Text := FieldByName('namagejala').AsString; edtNamaGejalaDetail.Text := FieldByName('namagejaladetail').AsString; edtNilai.Text := FieldByName('nilaigejaladetail').AsString; FCurrentIdGejalaDetail := FieldByName('idgejaladetail').AsString; end; btnUbah.Visible := true; btnTambah.Visible := false; end; procedure TfrmDaftarGejalaDetail.Delet1Click(Sender: TObject); var isHapus: TModalResult; iRowSelect: integer; begin isHapus := CommonDlg.Confirm('Apakah anda yakin ingin menghapus data?'); if (isHapus = mrOk) then begin iRowSelect := grid.GetRowEx; if not assigned(gejala) then gejala := TGejala.Create; gejala.DeleteGejalaDetail(grid.Cells[4,iRowSelect]); end; RefreshGejalaDetail; end; end.
unit ufrmDaftarPenyakit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, SUIForm, StdCtrls, Grids, BaseGrid, AdvGrid, SUIButton, SUIEdit, ufraFooter, uPenyakit, Menus, SUIPopupMenu, SUIMemo; type TfrmDaftarPenyakit = class(TForm) suiForm1: TsuiForm; Panel1: TPanel; Label1: TLabel; Panel2: TPanel; Panel3: TPanel; grid: TAdvStringGrid; Label2: TLabel; edtNamaPenyakit: TsuiEdit; btnTambah: TsuiButton; Frame11: TfraFooter; suiPopupMenu1: TsuiPopupMenu; Ubah1: TMenuItem; Delete1: TMenuItem; edtObat: TsuiMemo; Label3: TLabel; Label4: TLabel; edtPencegahan: TsuiMemo; btnRefresh: TsuiButton; btnUbah: TsuiButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure Frame11btnCloseClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnTambahClick(Sender: TObject); procedure btnRefreshClick(Sender: TObject); procedure Ubah1Click(Sender: TObject); procedure Delete1Click(Sender: TObject); procedure btnUbahClick(Sender: TObject); private { Private declarations } FCurrentIdPenyakit: string; procedure TampilDaftarPenyakit(); public { Public declarations } end;
var frmDaftarPenyakit: TfrmDaftarPenyakit; penyakit: TPenyakit; implementation uses udmMain, DB, ZAbstractRODataset, uGTSUICommonDlg; {$R *.dfm} procedure TfrmDaftarPenyakit.FormClose(Sender: TObject; var Action: TCloseAction); begin action := caFree; end; procedure TfrmDaftarPenyakit.FormDestroy(Sender: TObject); begin frmDaftarPenyakit := nil; penyakit := nil; end; procedure TfrmDaftarPenyakit.Frame11btnCloseClick(Sender: TObject); begin Close; end; procedure TfrmDaftarPenyakit.TampilDaftarPenyakit; var i: integer; begin i := 0; grid.Clear; if not assigned(penyakit) then penyakit := TPenyakit.Create; penyakit.GetListPenyakit; with dmMain.qrSelect do begin First; grid.ColCount := 4; grid.Cells[0,i] := 'No.'; grid.Cells[1,i] := 'Nama Penyakit'; grid.Cells[2,i] := 'Pencegahan'; grid.Cells[3,i] := 'Obat';
i := 1; while not Eof do begin grid.RowCount := i + 1; grid.Cells[0,i] := inttostr(i); grid.Cells[1,i] := FieldByName('namapenyakit').AsString; grid.Cells[2,i] := FieldByName('pencegahan').AsString; grid.Cells[3,i] := FieldByName('obat').AsString; grid.Cells[5,i] := FieldByName('idpenyakit').AsString; i := i + 1; Next; end; grid.AutoSize := true; end; end; procedure TfrmDaftarPenyakit.FormCreate(Sender: TObject); begin TampilDaftarPenyakit; end; procedure TfrmDaftarPenyakit.btnTambahClick(Sender: TObject); var success: boolean; begin if not assigned(penyakit) then penyakit := TPenyakit.Create; if (Trim(edtNamaPenyakit.Text) <> '') then success := penyakit.AddPenyakit(edtNamaPenyakit.Text, edtPencegahan.Text, edtObat.Text); if (success) then begin TampilDaftarPenyakit; edtNamaPenyakit.Text := ''; edtPencegahan.Text := ''; edtObat.Text := ''; edtNamaPenyakit.SetFocus; end; end; procedure TfrmDaftarPenyakit.btnRefreshClick(Sender: TObject); begin TampilDaftarPenyakit;
edtNamaPenyakit.Text := ''; edtPencegahan.Text := ''; edtObat.Text := ''; edtNamaPenyakit.SetFocus; btnTambah.Visible := true; btnUbah.Visible := false; end; procedure TfrmDaftarPenyakit.Ubah1Click(Sender: TObject); var iRowSelect: integer; begin if not assigned(penyakit) then penyakit := TPenyakit.create; iRowSelect := grid.GetRowEx; penyakit.GetPenyakitById(grid.Cells[5,iRowSelect]); with dmMain.qrSelect do begin edtNamaPenyakit.Text := FieldByName('namapenyakit').AsString; edtPencegahan.Text := FieldByName('pencegahan').AsString; edtObat.Text := FieldByName('obat').AsString; FCurrentIdPenyakit := FieldByName('idpenyakit').AsString; end; btnUbah.Visible := true; btnTambah.Visible := false; end; procedure TfrmDaftarPenyakit.Delete1Click(Sender: TObject); var isHapus: TModalResult; iRowSelect: integer; begin isHapus := CommonDlg.Confirm('Apakah anda yakin ingin menghapus data?'); if (isHapus = mrOk) then begin iRowSelect := grid.GetRowEx; if not assigned(penyakit) then penyakit := TPenyakit.Create; penyakit.DeletePenyakit(grid.Cells[5,iRowSelect]); end; TampilDaftarPenyakit;
end; procedure TfrmDaftarPenyakit.btnUbahClick(Sender: TObject); var success: boolean; begin if not assigned(penyakit) then penyakit := TPenyakit.Create; if (Trim(edtNamaPenyakit.Text) <> '') then success := penyakit.UpdatePenyakit(FCurrentIdPenyakit,edtNamaPenyakit.Text, edtPencegahan.Text, edtObat.Text); if (success) then begin TampilDaftarPenyakit; edtNamaPenyakit.Text := ''; edtPencegahan.Text := ''; edtObat.Text := ''; edtNamaPenyakit.SetFocus; end; TampilDaftarPenyakit; btnTambah.Visible := true; btnUbah.Visible := false; end; end. unit ufrmDiagnosa; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, SUIForm, ufraFooter, StdCtrls, SUIComboBox, DBCtrls, SUIDBCtrls, SUIButton, Grids, BaseGrid, AdvGrid, SUIMemo, SUIEdit, uGejala, uTraining, JclStrings, uPenyakit; type TInput = array of integer; TWeight = array of double; TfrmDiagnosa = class(TForm) suiForm1: TsuiForm;
fraFooter1: TfraFooter; Panel1: TPanel; Label1: TLabel; pnlBody: TPanel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Label25: TLabel; Label26: TLabel; Label27: TLabel; Label28: TLabel; cbAlergi: TsuiComboBox; cbBatuk: TsuiComboBox; cbPilek: TsuiComboBox; cbBerkeringat: TsuiComboBox; cbLemas: TsuiComboBox; cbNapsu: TsuiComboBox; cbMual: TsuiComboBox; cbKesemutan: TsuiComboBox; cbPegal: TsuiComboBox; cbPusing: TsuiComboBox; cbNyeri: TsuiComboBox; cmdDemam: TsuiComboBox; cbLelah: TsuiComboBox; btnPengujian: TsuiButton; Panel2: TPanel;
grid: TAdvStringGrid; Label29: TLabel; Label30: TLabel; Label31: TLabel; edtNamaPenyakit: TsuiEdit; memoObat: TsuiMemo; memoPencegahan: TsuiMemo; Panel3: TPanel; Label32: TLabel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure fraFooter1btnCloseClick(Sender: TObject); procedure btnPengujianClick(Sender: TObject); procedure gridClickCell(Sender: TObject; ARow, ACol: Integer); private { Private declarations } procedure StartPengujian; function GetInputValue: TInput; function ExtractWeightValue(AWeight: string): TWeight; function HitungNilaiY_in(AInput: TInput; AWeight: TWeight): double; public { Public declarations } end; var frmDiagnosa: TfrmDiagnosa; gejala: TGejala; training: TTraining; penyakit: TPenyakit; implementation uses udmMain, DB; {$R *.dfm} procedure TfrmDiagnosa.FormClose(Sender: TObject; var Action: TCloseAction); begin action := caFree; end; procedure TfrmDiagnosa.FormDestroy(Sender: TObject); begin frmDiagnosa := nil; end;
procedure TfrmDiagnosa.fraFooter1btnCloseClick(Sender: TObject); begin Close; end; procedure TfrmDiagnosa.btnPengujianClick(Sender: TObject); begin StartPengujian; end; procedure TfrmDiagnosa.StartPengujian; var i, t: integer; x: TInput; w: TWeight; wString: string; y_in: double; begin // nilai input. x := GetInputValue; if not assigned(training) then training := TTraining.Create; training.GetListBobot; i := 0; with dmMain.qrSelect do begin First; grid.ColCount := 5; grid.Cells[0,i] := 'No.'; grid.Cells[1,i] := 'Nama Penyakit'; grid.Cells[2,i] := 'Y_in'; grid.Cells[3,i] := 'Aktivasi'; grid.Cells[4,i] := 'Kemungkinan menderita(Y/T)'; i := 1; while not Eof do begin grid.RowCount := i + 1; grid.Cells[0,i] := inttostr(i); grid.Cells[1,i] := FieldByName('namapenyakit').AsString; grid.Cells[6,i] := FieldByName('idpenyakit').AsString; wString := FieldByName('nilaibobot').AsString;
// nilai bobot. w := ExtractWeightValue(wString); // nilai y_in. y_in := HitungNilaiY_in(x, w); grid.Cells[2,i] := FloatToStr(y_in); // set aktivasi. if (y_in >= 0) then begin t := 1; grid.Cells[4,i] := 'Ya'; end else begin t := -1; grid.Cells[4,i] := 'Tidak'; end; grid.Cells[3,i] := inttostr(t); i := i + 1; Next; end; grid.AutoSize := true; end; end; function TfrmDiagnosa.GetInputValue: TInput; var i: integer; x: TInput; begin i := 0; if not assigned(gejala) then gejala := TGejala.Create; // get input value. SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbAlergi.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbBatuk.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbPilek.Text);
i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbBerkeringat.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbLemas.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbNapsu.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbMual.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbKesemutan.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbPegal.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbPusing.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbNyeri.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cmdDemam.Text); i := i + 1; SetLength(x, i+1); x[i] := gejala.GetNilaiGejalaDetail(cbLelah.Text); Result := x; end; function TfrmDiagnosa.ExtractWeightValue(AWeight: string): TWeight; var strNode: string; first: boolean; w: TWeight; i: integer; begin first := true; i := 0; while (AWeight <> '') do begin
strNode := StrBefore('|', AWeight); SetLength(w, i+1); w[i] := StrToFloat(strNode); AWeight := StrAfter('|', AWeight); i := i + 1; end; Result := w; end; function TfrmDiagnosa.HitungNilaiY_in(AInput: TInput; AWeight: TWeight): double; var i: integer; y_in: double; begin y_in := 0; for i:=0 to length(AWeight)-1 do begin if (i = 0) then y_in := y_in + AWeight[i] else y_in := y_in + (AInput[i-1]*AWeight[i]); end; Result := y_in; end; procedure TfrmDiagnosa.gridClickCell(Sender: TObject; ARow, ACol: Integer); begin if not assigned(penyakit) then penyakit := TPenyakit.Create; penyakit.GetPenyakitById(grid.Cells[6,ARow]); with dmMain.qrSelect do begin edtNamaPenyakit.Text := Fieldbyname('namapenyakit').AsString; memoObat.Text := Fieldbyname('obat').AsString; memoPencegahan.Text := Fieldbyname('pencegahan').AsString; end; end; end. unit ufrmMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, SUIForm, ComCtrls, SUIStatusBar, SUIPageControl, ExtCtrls, SUITabControl, JvPageScroller, Menus, SUIMainMenu, ActnList, pngimage; type TGroupUser = (guNone, guAdmin, guPakar, guUser); TfrmMain = class(TForm) suiMDIForm1: TsuiMDIForm; stbMain: TsuiStatusBar; mmMainMenu: TsuiMainMenu; mmAkses: TMenuItem; Login1: TMenuItem; LogOut1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; SwitchUser1: TMenuItem; mmProses: TMenuItem; mmHelp: TMenuItem; mmSetting: TMenuItem; About1: TMenuItem; pnlHeader: TPanel; imgHeader: TImage; actlMain: TActionList; actFormClose: TAction; actFormDestroy: TAction; actFormCreate: TAction; actFormShow: TAction; actFormActive: TAction; actLogin: TAction; actLogout: TAction; actExit: TAction; actGantiAkses: TAction; raining1: TMenuItem; DiagnosaPenyakit1: TMenuItem; DaftarPenyakit1: TMenuItem; DaftarGejala1: TMenuItem; ConfigurasiNeuron1: TMenuItem; actTraining: TAction; actDiagnosa: TAction; actDaftarPenyakit: TAction; actDaftarGejala: TAction;
actConfNeuron: TAction; DaftarGejalaDetail1: TMenuItem; actDaftarGejalaDetail: TAction; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure actExitExecute(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure actLoginExecute(Sender: TObject); procedure FormCreate(Sender: TObject); procedure actConfNeuronExecute(Sender: TObject); procedure actDaftarGejalaExecute(Sender: TObject); procedure actDaftarPenyakitExecute(Sender: TObject); procedure actDiagnosaExecute(Sender: TObject); procedure actTrainingExecute(Sender: TObject); procedure actLogoutExecute(Sender: TObject); procedure actGantiAksesExecute(Sender: TObject); procedure actDaftarGejalaDetailExecute(Sender: TObject); private { Private declarations } procedure SetEnabledMenu(AGroupUser: TGroupUser; AEnabled: Boolean); public { Public declarations } end; var frmMain: TfrmMain; implementation uses uGTSUICommonDlg, ufrmLogin, ufrmDaftarPenyakit, ufrmDaftarGejala, ufrmConfNeuron, ufrmTraining, ufrmDiagnosa, ufrmDaftarGejalaDetail; {$R *.dfm} procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin action := caFree; end; procedure TfrmMain.FormDestroy(Sender: TObject); begin frmMain := nil; end; procedure TfrmMain.actExitExecute(Sender: TObject); begin
Close; end; procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var isExit: TModalResult; begin isExit := CommonDlg.Confirm('Apakah anda yakin ingin keluar aplikasi?'); if (isExit = mrOk) then CanClose := true else CanClose := false; end; procedure TfrmMain.actLoginExecute(Sender: TObject); var user, password: string; groupId: integer; successLogin: boolean; begin successLogin := false; if not assigned(frmLogin) then frmLogin := TfrmLogin.Create(Application); frmLogin.ShowUserLogin(user, password, groupId, successLogin); if (successLogin) then begin SetEnabledMenu(guAdmin, true); with stbMain do begin Panels[0].Text := 'Username: ' + user; Panels[1].Text := 'Role User: ' + frmLogin.GroupUser; Panels[2].Text := 'Database: ' + frmLogin.Database; end; end; end; procedure TfrmMain.FormCreate(Sender: TObject); begin {if not maximize} //frmMain.Height := 619; //frmMain.Width := 877; {maximize} WindowState := wsMaximized;
{set default menu} SetEnabledMenu(guNone, false); end; procedure TfrmMain.actConfNeuronExecute(Sender: TObject); begin if not assigned(frmConfNeuron) then frmConfNeuron := TfrmConfNeuron.Create(Application); frmConfNeuron.Show; end; procedure TfrmMain.actDaftarGejalaExecute(Sender: TObject); begin if not assigned(frmDaftarGejala) then frmDaftarGejala := TfrmDaftarGejala.Create(Application); frmDaftarGejala.Show; end; procedure TfrmMain.actDaftarPenyakitExecute(Sender: TObject); begin if not assigned(frmDaftarPenyakit) then frmDaftarPenyakit := TfrmDaftarPenyakit.Create(Application); frmDaftarPenyakit.Show; end; procedure TfrmMain.actDiagnosaExecute(Sender: TObject); begin if not assigned(frmDiagnosa) then frmDiagnosa := TfrmDiagnosa.Create(Application); frmDiagnosa.Show; end; procedure TfrmMain.actTrainingExecute(Sender: TObject); begin if not assigned(frmTraining) then frmTraining := TfrmTraining.Create(Application); frmTraining.Show; end; procedure TfrmMain.SetEnabledMenu(AGroupUser: TGroupUser; AEnabled: Boolean); begin case AGroupUser of guNone: begin actLogin.Enabled := true;
actLogout.Enabled := false; actGantiAkses.Enabled := false; actTraining.Enabled := AEnabled; actDiagnosa.Enabled := AEnabled; actDaftarPenyakit.Enabled := AEnabled; actDaftarGejala.Enabled := AEnabled; actDaftarGejalaDetail.Enabled := AEnabled; actConfNeuron.Enabled := AEnabled; mmAkses.Enabled := true; //mmProses.Enabled := false; //mmSetting.Enabled := false; mmHelp.Enabled := true; end; guAdmin: begin actLogin.Enabled := false; actLogout.Enabled := true; actGantiAkses.Enabled := true; actTraining.Enabled := AEnabled; actDiagnosa.Enabled := AEnabled; actDaftarPenyakit.Enabled := AEnabled; actDaftarGejala.Enabled := AEnabled; actDaftarGejalaDetail.Enabled := AEnabled; actConfNeuron.Enabled := AEnabled; mmAkses.Enabled := true; mmProses.Enabled := true; mmSetting.Enabled := true; mmHelp.Enabled := true; end; guPakar: begin actLogin.Enabled := false; actLogout.Enabled := true; actGantiAkses.Enabled := true; actTraining.Enabled := AEnabled; actDiagnosa.Enabled := AEnabled; actDaftarPenyakit.Enabled := AEnabled; actDaftarGejala.Enabled := AEnabled; actDaftarGejalaDetail.Enabled := AEnabled; actConfNeuron.Enabled := AEnabled;
mmAkses.Enabled := true; mmProses.Enabled := true; mmSetting.Enabled := true; mmHelp.Enabled := true; end; guUser: begin actLogin.Enabled := false; actLogout.Enabled := true; actGantiAkses.Enabled := true; actTraining.Enabled := false; actDiagnosa.Enabled := AEnabled; actDaftarPenyakit.Enabled := AEnabled; actDaftarGejala.Enabled := AEnabled; actDaftarGejalaDetail.Enabled := AEnabled; actConfNeuron.Enabled := false; mmAkses.Enabled := true; mmProses.Enabled := true; mmSetting.Enabled := true; mmHelp.Enabled := true; end; end; end; procedure TfrmMain.actLogoutExecute(Sender: TObject); var isLogout: TModalResult; i: integer; begin isLogout := CommonDlg.Confirm('Apakah anda yakin ingin logout user?'); if (isLogout = mrOk) then begin for i:=0 to MDIChildCount-1 do MDIChildren[i].Close; SetEnabledMenu(guNone, false); with stbMain do begin Panels[0].Text := 'Username: '; Panels[1].Text := 'Role User: '; Panels[2].Text := 'Database: '; end; end;
end; procedure TfrmMain.actGantiAksesExecute(Sender: TObject); begin // end; procedure TfrmMain.actDaftarGejalaDetailExecute(Sender: TObject); begin if not assigned(frmDaftarGejalaDetail) then frmDaftarGejalaDetail := TfrmDaftarGejalaDetail.Create(Application); frmDaftarGejalaDetail.Show; end; end. unit uGejala; interface uses Windows, SysUtils, Variants, Classes; type TGejala = class private { Private Declaration } public function GetListGejala(): boolean; function GetGejalaById(AIdGejala: string): boolean; function AddGejala(ANama, AKeterangan: string): boolean; function UpdateGejala(AIdGejala, ANama, AKeterangan: string): boolean; function DeleteGejala(AIdGejala: string): boolean; function GetIdGejala(ANamaGejala: string): integer; function GetNilaiGejalaDetail(ANama: string): integer; function GetListGejalaDetail(): boolean; function GetGejalaDetailById(AIdGejalaDetail: string): boolean; function AddGejalaDetail(ANamaGejala, ANamaGejalaDetail, ANilai: string): boolean; function UpdateGejalaDetail(AIdGejalaDetail, ANamaGejala, ANamaGejalaDetail, ANilai: string): boolean; function DeleteGejalaDetail(AIdGejalaDetail: string): boolean; end; implementation
uses udmMain, ZDataset, DB, ZAbstractRODataset; { TGejala } function TGejala.AddGejala(ANama, AKeterangan: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrInsert do begin Close; SQL.Clear; SQL.Text := 'insert into gejala(gjNama, gjKeterangan) values(' + QuotedStr(ANama) + ', ' + QuotedStr(AKeterangan) + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TGejala.AddGejalaDetail(ANamaGejala, ANamaGejalaDetail, ANilai: string): boolean; var idGejala: integer; begin result := false; try dmMain.dbCon.StartTransaction; idGejala := GetIdGejala(ANamaGejala); with dmMain.qrInsert do begin Close; SQL.Clear; SQL.Text := 'insert into gejala_detail(gjdNama, gjdNilai, gjdIdGejala) values(' +
QuotedStr(ANamaGejalaDetail) + ', ' + QuotedStr(ANilai) + ', ' + QuotedStr(IntToStr(idGejala)) + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TGejala.DeleteGejala(AIdGejala: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrDelete do begin Close; SQL.Clear; SQL.Text := 'delete from gejala ' + 'where (gjId = ' + AIdGejala + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TGejala.DeleteGejalaDetail(AIdGejalaDetail: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrDelete do begin Close;
SQL.Clear; SQL.Text := 'delete from gejala_detail ' + 'where (gjdId = ' + AIdGejalaDetail + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TGejala.GetGejalaById(AIdGejala: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select gjId as idgejala, gjNama as namagejala, gjKeterangan as keterangan '+ 'from gejala ' + 'where (gjId = ' + AIdGejala + ')'; Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TGejala.GetGejalaDetailById(AIdGejalaDetail: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do
begin Close; SQL.Clear; SQL.Text := 'select gjdId as idgejaladetail, gjdNama as namagejaladetail, gjdNilai as nilaigejaladetail, ' + 'g.gjId as idgejala, g.gjNama as namagejala ' + 'from gejala_detail gd ' + 'left join gejala g on g.gjId = gd.gjdIdGejala ' + 'where (gd.gjdId = ' + AIdGejalaDetail + ')'; Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TGejala.GetIdGejala(ANamaGejala: string): integer; begin result := 0; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select gjId as idgejala '+ 'from gejala ' + 'where (gjNama = ' + QuotedStr(ANamaGejala) + ')'; Open; if IsEmpty then result := -1 else result := dmMain.qrSelect.FieldByName('idgejala').AsInteger; end; dmMain.dbCon.Commit; except dmMain.dbCon.Rollback; end; end;
function TGejala.GetListGejala: boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select gjId as idgejala, gjNama as namagejala, gjKeterangan as keterangan '+ 'from gejala'; Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TGejala.GetListGejalaDetail: boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select gjdId as idgejaladetail, gjdNama as namagejaladetail, gjdNilai as nilaigejaladetail, ' + 'g.gjId as idgejala, g.gjNama as namagejala ' + 'from gejala_detail gd ' + 'left join gejala g on g.gjId = gd.gjdIdGejala'; Open; end; dmMain.dbCon.Commit; result := true;
except dmMain.dbCon.Rollback; end; end; function TGejala.GetNilaiGejalaDetail(ANama: string): integer; begin result := 0; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select gjdNilai as nilaigejala '+ 'from gejala_detail ' + 'where (gjdNama = ' + QuotedStr(ANama) + ')'; Open; if IsEmpty then result := -1 else result := dmMain.qrSelect.FieldByName('nilaigejala').AsInteger; end; dmMain.dbCon.Commit; except dmMain.dbCon.Rollback; end; end; function TGejala.UpdateGejala(AIdGejala, ANama, AKeterangan: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrUpdate do begin Close; SQL.Clear; SQL.Text := 'update gejala set gjNama = ' +
QuotedStr(ANama) + ', ' + 'gjKeterangan = ' + QuotedStr(AKeterangan) + ' ' + 'where (gjId = ' + AIdGejala + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TGejala.UpdateGejalaDetail(AIdGejalaDetail, ANamaGejala, ANamaGejalaDetail, ANilai: string): boolean; var idGejala: integer; begin result := false; try dmMain.dbCon.StartTransaction; idGejala := GetIdGejala(ANamaGejala); with dmMain.qrUpdate do begin Close; SQL.Clear; SQL.Text := 'update gejala_detail set gjdNama = ' + QuotedStr(ANamaGejalaDetail) + ', ' + 'gjdNilai = ' + QuotedStr(ANilai) + ', ' + 'gjdIdGejala = ' + QuotedStr(IntToStr(idGejala)) + ' ' + 'where (gjdId = ' + AIdGejalaDetail + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; end.
unit uPemodelan; interface uses Windows, SysUtils, Variants, Classes; type TPemodelan = class private { Private Declaration } public function GetListPemodelan(): boolean; function GetPemodelanById(AIdPenyakit: string): boolean; function AddPemodelan(AIdPenyakit, ANilai, AConfiBipolar: string): boolean; function UpdatePemodelan(AIdPemodelan, AIdPenyakit, AConfiBipolar: string): boolean; function DeletePemodelan(AIdPemodelan: string): boolean; end; implementation uses udmMain, ZDataset, DB, ZAbstractRODataset; { TPemodelan } function TPemodelan.AddPemodelan(AIdPenyakit, ANilai, AConfiBipolar: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrInsert do begin Close; SQL.Clear; SQL.Text := 'insert into pemodelan(pmIdPenyakit, pmNilaiPenyakit, pmConfigBipolar) values(' + QuotedStr(AIdPenyakit) + ', ' + ANilai + ', ' + QuotedStr(AConfiBipolar) + ')'; ExecSQL; end;
dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TPemodelan.DeletePemodelan(AIdPemodelan: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrDelete do begin Close; SQL.Clear; SQL.Text := 'delete from pemodelan ' + 'where (pmId = ' + AIdPemodelan + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TPemodelan.GetListPemodelan: boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select pm.pmId as idpemodelan, p.penyId as idpenyakit, p.penyNama as namapenyakit, ' + 'pm.pmNilaiPenyakit as nilaipenyakit, pm.pmConfigBipolar as configbipolar '+ 'from pemodelan pm ' +
'left join penyakit p on p.penyId = pm.pmIdPenyakit'; Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TPemodelan.GetPemodelanById(AIdPenyakit: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select pm.pmId as idpemodelan, p.penyId as idpenyakit, p.penyNama as namapenyakit, ' + 'pm.pmNilaiPenyakit as nilaipenyakit, pm.pmConfigBipolar as configbipolar '+ 'from pemodelan pm ' + 'left join penyakit p on p.penyId = pm.pmIdPenyakit ' + 'where (p.penyId = ' + AIdPenyakit + ')';; Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TPemodelan.UpdatePemodelan(AIdPemodelan, AIdPenyakit, AConfiBipolar: string): boolean; begin end; end.
unit uPenyakit; interface uses Windows, SysUtils, Variants, Classes; type TPenyakit = class private { Private Declaration } public function GetListPenyakit(): boolean; function GetPenyakitById(AIdPenyakit: string): boolean; function GetIdPenyakit(ANamaPenyakit: string): integer; function AddPenyakit(ANama, APencegahan, AObat: string): boolean; function UpdatePenyakit(AIdPenyakit, ANamaPenyakit, APencegahan, AObat: string): boolean; function DeletePenyakit(AidPenyakit: string): boolean; end; implementation uses udmMain, ZDataset, DB, ZAbstractRODataset; { TPenyakit } function TPenyakit.AddPenyakit(ANama, APencegahan, AObat: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrInsert do begin Close; SQL.Clear; SQL.Text := 'insert into penyakit(penyNama, penyPencegahan, penyObat) values(' + QuotedStr(ANama) + ', ' + QuotedStr(APencegahan) + ', ' + QuotedStr(AObat) + ')'; ExecSQL; end;
dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TPenyakit.DeletePenyakit(AidPenyakit: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrDelete do begin Close; SQL.Clear; SQL.Text := 'delete from penyakit ' + 'where (penyId = ' + AIdPenyakit + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TPenyakit.GetIdPenyakit(ANamaPenyakit: string): integer; begin try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select penyId as idpenyakit from penyakit '+ 'where (penyNama = ' + QuotedStr(ANamaPenyakit) + ')'; Open; if not (IsEmpty) then result := FieldByName('idpenyakit').AsInteger; end;
dmMain.dbCon.Commit; except dmMain.dbCon.Rollback; end; end; function TPenyakit.GetListPenyakit: boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select penyId as idpenyakit, penyNama as namapenyakit, penyPencegahan as pencegahan, penyObat as obat '+ 'from penyakit'; Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TPenyakit.GetPenyakitById(AIdPenyakit: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select penyId as idpenyakit, penyNama as namapenyakit, penyPencegahan as pencegahan, penyObat as obat '+ 'from penyakit ' + 'where (penyId = ' + AIdPenyakit + ')';
Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TPenyakit.UpdatePenyakit(AIdPenyakit, ANamaPenyakit, APencegahan, AObat: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrUpdate do begin Close; SQL.Clear; SQL.Text := 'update penyakit set penyNama = ' + QuotedStr(ANamaPenyakit) + ', ' + 'penyPencegahan = ' + QuotedStr(APencegahan) + ', ' + 'penyObat = ' + QuotedStr(AObat) + ' ' + 'where (penyId = ' + AIdPenyakit + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; end. unit uTraining; interface uses Windows, SysUtils, Variants, Classes;
type TTraining = class private { Private Declaration } public { Public Declaration } function GetListPenyakitModel(): boolean; function AddBobot(AIdPenyakit, ANilai: string): boolean; function DeleteBobot(AIdPenyakit: string): boolean; function GetBobot(AIdPenyakit: string): string; function GetListBobot(): boolean; end; implementation uses udmMain, ZDataset, DB, ZAbstractRODataset; { TTraining } function TTraining.AddBobot(AIdPenyakit, ANilai: string): boolean; begin result := false; try DeleteBobot(AIdPenyakit); dmMain.dbCon.StartTransaction; with dmMain.qrInsert do begin Close; SQL.Clear; SQL.Text := 'insert into bobot(bbtIdPenyakit, bbtNilai) values(' + AIdPenyakit + ', ' + QuotedStr(ANilai) + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end;
function TTraining.DeleteBobot(AIdPenyakit: string): boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrDelete do begin Close; SQL.Clear; SQL.Text := 'delete from bobot ' + 'where (bbtIdPenyakit = ' + AIdPenyakit + ')'; ExecSQL; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TTraining.GetBobot(AIdPenyakit: string): string; begin result := ''; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select bbtNilai as nilaibobot '+ 'from bobot ' + 'where (bbtIdPenyakit = ' + AIdPenyakit + ')'; Open; end; dmMain.dbCon.Commit; result := dmMain.qrSelect.FieldByName('nilaibobot').AsString; except dmMain.dbCon.Rollback; end; end; function TTraining.GetListBobot: boolean; begin result := false; try
dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select b.bbtIdPenyakit as idpenyakit, p.penyNama as namapenyakit, b.bbtNilai as nilaibobot ' + 'from bobot b ' + 'left join penyakit p on p.penyId = b.bbtIdPenyakit'; Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; function TTraining.GetListPenyakitModel: boolean; begin result := false; try dmMain.dbCon.StartTransaction; with dmMain.qrSelect do begin Close; SQL.Clear; SQL.Text := 'select distinct(p.penyId) as idpenyakit, p.penyNama as namapenyakit ' + 'from pemodelan pm ' + 'left join penyakit p on p.penyId = pm.pmIdPenyakit'; Open; end; dmMain.dbCon.Commit; result := true; except dmMain.dbCon.Rollback; end; end; end.