29 BAB 3 PERANCANGAN PROGRAM 3.1
Analisis Kebutuhan Sistem Sistem yang akan dibangun adalah sistem basisdata fuzzy (fuzzy database system). Karena model yang digunakan adalah Model Tahani, maka relasi yang ada dalam basisdata masih bersifat standar, dengan penekanan fuzzy pada beberapa field dalam tabel yang ada pada basisdata tersebut. Sistem yang akan dibangun akan dibuat dengan menggunakan fungsi keanggotaan yang berupa kurva bahu. Input sistem digolongkan menjadi 2, yaitu input yang berupa fuzzy dan input yang berupa non fuzzy. •
Input fuzzy, terdiri dari: harga, berat, phonebook memory, Standby.
•
Input non fuzzy, terdiri dari data-data HP yang menyangkut ada tidaknya fasilitas WAP, GPRS, bluetooth, MMS, dan polyphonic. Outputnya akan berupa rekomendasi HP yang sesuai dengan kriteria yang
diinginan oleh pembeli. 3.2
State Transition Diagram (STD) State transition diagram menggambarkan jalannya suatu program dalam kondisi tertentu. Notasi yang digunakan adalah sebagai berikut.
State menunjukkan satu atau lebih kegiatan atau keadaan atau atribut yang menjelaskan bagian tertentu dari program.
30
kondisi/aksi
Anak panah berarah menunjukkan perubahan state yang disebabkan oleh aksi (action) terhadap kondisi (condition) tertentu. Kondisi merupakan suatu event pada lingkungan eksternal yang dapat dideteksi oleh suatu sistem, misalnya sinyal, interupsi, atau data. Hal ini akan menyebabkan perubahan dari suatu state ke state yang lainnya atau satu aktivitas ke aktivitas lainnya. Aksi merupakan hal yang dilakukan oleh sistem jika terjadi perubahan state atau merupakan reaksi terhadap kondisi. Aksi dapat menghasilkan output, tampilan pesan pada layar, kalkulasi atau kegiatan lainnya.
3.3
Pseudocode Pseudocode adalah suatu bahasa pemprograman yang informal dan sangat fleksibel, yang tidak dimaksudkan untuk dieksekusi pada mesin, tetapi hanya digunakan
untuk
mengatur
pemikiran
programer
sebelum
melakukan
pengkodean (Page-Jones.1980, p11). Pseudocode dapat merupakan alternatif lain dalam perancangan perangkat lunak di samping alat-alat bantu berupa diagram. Tidak ada standarisasi dalam hal penulisan pseudocode. Pemprogram dapat menulisnya dalam bahasa apa saja yang mereka suka, dipadukan dengan bahasa pemprograman tertentu. Pemprogram juga bebas menggunakan teknik dan aturannya sendiri. Aturan untuk menulis pseudocode sebagai berikut: •
Pernyataan ditulis dalam bahasa Inggris sederhana.
31 •
Setiap perintah ditulis pada baris tersendiri.
•
Kata kunci atau indentasi (penulisan yang menjorok ke dalam) digunakan untuk menandai struktur kontrol khusus.
•
Setiap bimbingan perintah ditulis dari atas ke bawah dengan hanya satu awal dan satu akhir program.
•
Kumpulan pernyataan-pernyataan dapat dibentuk dalam modul-modul yang diberi nama tertentu.
3.4
Perancangan Sistem Untuk merancang program pengambilan keputusan dengan menggunakan metode fuzzy query database ini digunakan borland delphi 7 dan microsoft office access 2003 yang akan dioperasikan dengan menggunakan windows XP. Untuk inputan program digunakan database yang berisikan data-data handphon(HP)e, dan inputan batasan yang akan dimasukkan oleh user program.
3.4.1
Perancangan Basisdata Untuk mendukung penulisan penyelesaian perancangan program pengambilan
keputusan
maka
perlu
dirancang
suatu
database
untuk
mempermudah pengaksesan data. Karena pada perancangan ini menggunakan basisdata model Tahani, maka struktur basisdata yang digunakan adalah struktur basisdata relasional. Berikut ini adalah tabel database yang akan digunakan untuk membantu penulisan program.Berikut ini adalah keterangan dari Tabel Handphone.
32 Nama Field
Tipe Data
Keterangan
ID
autonumber
Sebagai primary key
NamaHP
text
Sebagai Keterangan Merk HP
Tipe HP
text
Untuk menentukan no Seri dari HP
Harga
number
Berisi harga HP
Berat
number
Berisi berat HP
PhoneBook
number
Jumlah phonebook yang tersedia
Standby
number
Berapa lama standby batere HP
WAP
number
Ada tidaknya fasilitas WAP
GPRS
number
Ada tidaknya fasilitas GPRS
Bluetooth
umber
Ada tidaknya fasilitas bluetooth
MMS
number
Ada tidaknya fasilitas MMS
Polyhonic
number
Ada tidaknya fasilitas Polyphonic
Rekomendasi
number
Sebagai rekomendasi
Tabel 3.1 Tabel Handphone
penampungan
hasil
33 3.4.2 Perancangan STD Berikut ini adalah diagram transisi dari sistem yang akan dibuat Menu utama klik / ke layar batasan Batasan klik ke layar harga Harga
klik ke layar berat
klik klik Ke layar phonebook ke layar standby
Berat
PhoneBook Diagram 3.1 STD Menu Input
Menu utama klik/ ke layar cari kriteria Cari Kriteria Diagram 3.2 STD menu Cari Kriteria Menu utama klik/ ke layar hasil Hasil Diagram 3.3 STD menu Output
Standby
34 Menu utama klik ke layar batasan
klik ke layar cari kriteria
Batasan
Cari Kriteria
klik ke layar harga Harga
klik ke layar hasil
klik ke layar berat
Berat
klik ke layar phonebook
PhoneBook
Hasil klik ke layar standby
Standby
Diagram 3.4 STD Rancangan Menu Aplikasi 3.4.3
Perancangan tampilan layar Seperti yang terlihat pada gambar 3.1 tampilan layar yang akan dibuat dikelompokkan menjadi beberapa bagian, yaitu: 1.
Input Batasan Pada layar ini user harus mengisi batasan yang akan digunakan untuk
mencari berapa besar derajat keanggotaan masing-masing kriteria yang telah dipilih.
35 Main Menu
−
Batasan
Cari Kriteria
Harga
Berat
Hasil
□
X
Keluar
Phone Book
Standby
Batasan: Murah Minimum:
Tengah:
Maksimum:
Normal Minimum:
Tengah:
Maksimum:
Mahal Minimum:
Tengah:
Maksimum:
Batas Maksimum:
Minimum:
OK
Gambar 3.1 Menu input batasan Pada kolom batas akan diberikan batasan maksimum dan batasan minimum yang terdapat pada database, untuk fungsi keanggotaan akan ditampilkan sesuai dengan fungsi yang telah dipilih pada menu input kriteria. Sedangkan untuk input batasan menggunakan input box dan batasan ini harus di isi oleh user program untuk menentukan berapa besar nilai derajat keanggotaan. Tombol OK dapat di klik untuk melanjutkan ke bagian menu cari kriteria. 2.
Cari Kriteria Pada layar ini pembeli harus menentukan kriteria yang diinginkan untuk
menampilkan hasil dari program.
36 Main Menu Batasan
− Cari Kriteria
Hasil
□
X
Keluar
Cari Kriteria: Harga
Murah
▼
□ WAP
Berat
Ringan
▼
□ Bluetooth
Phone Book
Sedikit
▼
□ GPRS
Standby
Pendek
▼
□ MMS □ Polyphonic
Cari
Gambar 3.2 Menu input cari kriteria
Pada kolom cari kriteria pembeli akan menentukan harga, berat, phone book, dan standby handphone yang ingin dibeli, dengan menggunakan dibuat dengan combo box. Sedangkan WAP, bluetooth, GPRS, MMS, Polyphonic dibuat dengan menggunakan check box. Untuk melanjutkan ke menu hasil maka button cari harus di klik. 3.
Hasil Pada layar ini akan ditampilkan Nama HP, Harga HP, dan Besarnya Rekomendasi.
37 Main Menu Batasan
− Cari Kriteria
Hasil
□
X
Keluar
Hasil Nama HP Tipe HP Harga Rekomendasi Cari lagi
Ok
Gambar 3.3 Menu Hasil Hasil ini akan ditampilkan dalam bentuk tabel dengan urutan berdasarkan nilai rekomendasi tertinggi. Tombol OK digunakan untuk menutup menu hasil, dan tombol cari lagi digunakan untuk membuka kembali menu cari kriteria.
3.4.4
Perancangan FlowChart Proses penyelesaian masalah pengambilan keputusan dalam penjualan hanphone ini dapat dilihat dengan flowchart seperti yang ditunjukkan oleh gambar 3.1 ini.
38 START
Input data: nilai batasan untuk derajat keanggotaan(µ)
Hitung derajat keanggotaan(µ)
Input kriteria yang dicari
Hitung nilai rekomendasi ya Tampilkan hasil rekomendasi >0
ulangi
STOP Diagram 3.5 Flowchart program pengambilan keputusan 3.4.5
Perancangan Spesifikasi Proses Untuk memperjelas proses-proses yang terjadi pada setiap modul terdapat dalam program,maka akan diperinci dengan spesifikasi modul di bawah ini :
39 Modul input data
procedure TfrmBatasan.SpeedButton9Click(Sender: TObject); begin // cek input harga kosong if ( (EdtMuMin.Text = '') or (EdtMuMax.Text = '') or (EdtNoMin.Text = '') or (EdtNoT.Text = '') or (EdtNoMax.Text = '') or (EdtMaMin.Text = '') or (EdtMaMax.Text = '') ) then ShowMessage('input harga tidak boleh kosong');
// cek input berat kosong if ( (EdtBeMuMin.Text = '') or (EdtBeMuMax.Text = '') or (EdtBeNoMin.Text = '') or (EdtBeNoT.Text = '') or (EdtBeNoMax.Text = '') or (EdtBeMaMin.Text = '') or (EdtBeMaMax.Text = '') ) then ShowMessage('input berat tidak boleh kosong');
//cek input phone book kosong if ( (EdtPbMuMin.Text = '') or (EdtPbMuMax.Text = '') or (EdtPbNoMin.Text = '') or (EdtPbNoT.Text = '') or (EdtPbNoMax.Text = '') or (EdtPbMaMin.Text = '') or (EdtPbMaMax.Text = '') ) then ShowMessage('input phonebook tidak boleh kosong');
//cek input phone book kosong if ( (EdtStMuMin.Text = '') or (EdtStMuMax.Text = '')
40 or (EdtStNoMin.Text = '') or (EdtStNoT.Text = '') or (EdtStNoMax.Text = '') or (EdtStMaMin.Text = '') or (EdtStMaMax.Text = '') ) then ShowMessage('input standby tidak boleh kosong');
// cek input harga murah if (StrToInt(EdtMuMin.Text) < StrToInt(EdtMin.Text)) then ShowMessage('input harga murah salah'); if
((StrToInt(EdtMuMin.Text)
>
StrToInt(EdtMuMax.Text))
or
(StrToInt(EdtMuMin.Text) > StrToInt(EdtMax.Text)))then ShowMessage('input harga murah salah'); if (StrToInt(EdtMuMax.Text) > StrToInt(EdtMax.Text)) then ShowMessage ('input harga murah salah'); if
((StrToInt(EdtMuMax.Text)
<
StrToInt(EdtMuMin.Text))
or
(StrToInt(EdtMuMax.Text) < StrToInt(EdtMin.Text)))then ShowMessage('input harga murah salah');
//cek input harga normal if ( StrToInt(edtNoMin.Text) < StrToInt(EdtMin.Text)) then ShowMessage('input harga normal salah'); if (StrToInt(edtNoMin.Text) > StrToInt(EdtNoT.Text)) or (StrToInt(edtNoMin.Text) > StrToInt(EdtNoMax.Text)) or (StrToInt(edtNoMin.Text) > StrToInt(EdtMax.Text)) then ShowMessage('input harga normal salah');
41 if ( StrToInt(EdtNoT.Text) < StrToInt(edtNoMin.Text) ) or ( StrToInt(EdtNoT.Text) < StrToInt(EdtMin.Text) ) then ShowMessage('input harga normal salah'); if ( StrToInt(EdtNoT.Text) > StrToInt(edtNoMax.Text) ) or ( StrToInt(EdtNoT.Text) > StrToInt(EdtMax.Text) ) then ShowMessage('input harga normal salah'); if ( StrToInt(edtNoMax.Text) > StrToInt(EdtMax.Text) ) then ShowMessage('input harga normal salah'); if
(
StrToInt(edtNoMax.Text)
<
StrToInt(edtNoMin.Text))
or
(
StrToInt(edtNoMax.Text) < StrToInt(edtNoT.Text)) or ( StrToInt(edtNoMax.Text) < StrToInt(edtMin.Text)) then ShowMessage('input harga normal salah');
//cek input harga mahal if (StrToInt(EdtMaMin.Text) < StrToInt(EdtMin.Text)) then ShowMessage('input harga mahal salah'); if
((StrToInt(EdtMaMin.Text)
>
StrToInt(EdtMaMax.Text))
or
(StrToInt(EdtMaMin.Text) > StrToInt(EdtMax.Text)))then ShowMessage('input harga mahal salah'); if (StrToInt(EdtMaMax.Text) > StrToInt(EdtMax.Text)) then ShowMessage ('input harga mahal salah'); if
((StrToInt(EdtMaMax.Text)
<
StrToInt(EdtMaMin.Text))
(StrToInt(EdtMaMax.Text) < StrToInt(EdtMin.Text)))then ShowMessage('input harga mahal salah');
or
42
// cek input berat ringan if (StrToInt(EdtBeMuMin.Text) < StrToInt(EdtBeMin.Text)) then ShowMessage('input berat ringan salah'); if
((StrToInt(EdtBeMuMin.Text)
>
StrToInt(EdtBeMuMax.Text))
or
(StrToInt(EdtBeMuMin.Text) > StrToInt(EdtBeMax.Text)))then ShowMessage('input berat ringan salah'); if (StrToInt(EdtBeMuMax.Text) > StrToInt(EdtBeMax.Text)) then ShowMessage ('input berat ringan salah'); if
((StrToInt(EdtBeMuMax.Text)
<
StrToInt(EdtBeMuMin.Text))
or
(StrToInt(EdtBeMuMax.Text) < StrToInt(EdtBeMin.Text)))then ShowMessage('input berat ringan salah');
//cek input berat normal if ( StrToInt(edtBeNoMin.Text) < StrToInt(EdtBeMin.Text)) then ShowMessage('input berat normal salah'); if
(StrToInt(edtBeNoMin.Text)
(StrToInt(edtBeNoMin.Text)
>
>
StrToInt(EdtBeNoT.Text))
or
StrToInt(EdtBeNoMax.Text))
or
(StrToInt(edtBeNoMin.Text) > StrToInt(EdtBeMax.Text)) then ShowMessage('input berat normal salah'); if
(
StrToInt(EdtBeNoT.Text)
<
StrToInt(edtBeNoMin.Text)
StrToInt(EdtBeNoT.Text) < StrToInt(EdtBeMin.Text) ) then ShowMessage('input berat normal salah');
)
or
(
43 if
(
StrToInt(EdtBeNoT.Text)
>
StrToInt(edtBeNoMax.Text)
)
or
(
StrToInt(edtBeNoMin.Text))
or
(
StrToInt(EdtBeNoT.Text) > StrToInt(EdtBeMax.Text) ) then ShowMessage('input berat normal salah'); if ( StrToInt(edtBeNoMax.Text) > StrToInt(EdtBeMax.Text) ) then ShowMessage('input berat normal salah'); if
(
StrToInt(edtBeNoMax.Text)
StrToInt(edtBeNoMax.Text)
<
<
StrToInt(edtBeNoT.Text))
or
(
StrToInt(edtBeNoMax.Text) < StrToInt(edtBeMin.Text)) then ShowMessage('input berat normal salah');
//cek input berat berat if (StrToInt(EdtBeMaMin.Text) < StrToInt(EdtBeMin.Text)) then ShowMessage('input berat berat salah'); if
((StrToInt(EdtBeMaMin.Text)
>
StrToInt(EdtBeMaMax.Text))
or
(StrToInt(EdtBeMaMin.Text) > StrToInt(EdtBeMax.Text)))then ShowMessage('input berat berat salah'); if (StrToInt(EdtBeMaMax.Text) > StrToInt(EdtBeMax.Text)) then ShowMessage ('input berat berat salah'); if
((StrToInt(EdtBeMaMax.Text)
<
StrToInt(EdtBeMaMin.Text))
(StrToInt(EdtBeMaMax.Text) < StrToInt(EdtBeMin.Text)))then ShowMessage('input berat berat salah');
// cek input phonebook sedikit if (StrToInt(EdtPbMuMin.Text) < StrToInt(EdtPbMin.Text)) then
or
44 ShowMessage('input berat ringan salah'); if
((StrToInt(EdtPbMuMin.Text)
>
StrToInt(EdtPbMuMax.Text))
or
(StrToInt(EdtPbMuMin.Text) > StrToInt(EdtPbMax.Text)))then ShowMessage('input berat ringan salah'); if (StrToInt(EdtPbMuMax.Text) > StrToInt(EdtPbMax.Text)) then ShowMessage ('input berat ringan salah'); if
((StrToInt(EdtPbMuMax.Text)
<
StrToInt(EdtPbMuMin.Text))
or
(StrToInt(EdtPbMuMax.Text) < StrToInt(EdtPbMin.Text)))then ShowMessage('input berat ringan salah');
//cek input phonebook normal if ( StrToInt(edtPbNoMin.Text) < StrToInt(EdtPbMin.Text)) then ShowMessage('input phonebook normal salah'); if
(StrToInt(edtPbNoMin.Text)
(StrToInt(edtPbNoMin.Text)
>
>
StrToInt(EdtPbNoT.Text))
or
StrToInt(EdtPbNoMax.Text))
or
(StrToInt(edtPbNoMin.Text) > StrToInt(EdtBeMax.Text)) then ShowMessage('input phonebook normal salah'); if
(
StrToInt(EdtPbNoT.Text)
<
StrToInt(edtPbNoMin.Text)
)
or
(
)
or
(
StrToInt(EdtPbNoT.Text) < StrToInt(EdtPbMin.Text) ) then ShowMessage('input phonebook normal salah'); if
(
StrToInt(EdtPbNoT.Text)
>
StrToInt(edtPbNoMax.Text)
StrToInt(EdtPbNoT.Text) > StrToInt(EdtPbMax.Text) ) then ShowMessage('input phonebook normal salah'); if ( StrToInt(edtPbNoMax.Text) > StrToInt(EdtPbMax.Text) ) then
45 ShowMessage('input phonebook normal salah'); if
(
StrToInt(edtPbNoMax.Text)
StrToInt(edtPbNoMax.Text)
<
<
StrToInt(edtPbNoMin.Text))
StrToInt(edtPbNoT.Text))
or
or
( (
StrToInt(edtPbNoMax.Text) < StrToInt(edtBeMin.Text)) then ShowMessage('input phonebook normal salah');
//cek input phonebook banyak if (StrToInt(EdtPbMaMin.Text) < StrToInt(EdtPbMin.Text)) then ShowMessage('input phonebook banyak salah'); if
((StrToInt(EdtPbMaMin.Text)
>
StrToInt(EdtPbMaMax.Text))
or
(StrToInt(EdtPbMaMin.Text) > StrToInt(EdtPbMax.Text)))then ShowMessage('input phonebook banyak salah'); if (StrToInt(EdtPbMaMax.Text) > StrToInt(EdtPbMax.Text)) then ShowMessage ('input phonebook banyak salah'); if
((StrToInt(EdtPbMaMax.Text)
<
StrToInt(EdtPbMaMin.Text))
or
(StrToInt(EdtPbMaMax.Text) < StrToInt(EdtPbMin.Text)))then ShowMessage('input phonebook banyak salah');
// cek input standby pendek if (StrToInt(EdtStMuMin.Text) < StrToInt(EdtStMin.Text)) then ShowMessage('input standby pendek salah'); if
((StrToInt(EdtStMuMin.Text)
>
StrToInt(EdtStMuMax.Text))
(StrToInt(EdtStMuMin.Text) > StrToInt(EdtStMax.Text)))then ShowMessage('input standby pendek salah');
or
46 if (StrToInt(EdtStMuMax.Text) > StrToInt(EdtStMax.Text)) then ShowMessage ('input standby pendek salah'); if
((StrToInt(EdtStMuMax.Text)
<
StrToInt(EdtStMuMin.Text))
or
(StrToInt(EdtStMuMax.Text) < StrToInt(EdtStMin.Text)))then ShowMessage('input standby pendek salah');
//cek input standby normal if ( StrToInt(edtStNoMin.Text) < StrToInt(EdtStMin.Text)) then ShowMessage('input standby normal salah'); if
(StrToInt(edtStNoMin.Text)
(StrToInt(edtStNoMin.Text)
>
>
StrToInt(EdtStNoT.Text))
or
StrToInt(EdtStNoMax.Text))
or
(StrToInt(edtStNoMin.Text) > StrToInt(EdtStMax.Text)) then ShowMessage('input standby normal salah'); if
(
StrToInt(EdtStNoT.Text)
<
StrToInt(edtStNoMin.Text)
)
or
(
)
or
(
StrToInt(edtStNoMin.Text))
or
(
StrToInt(EdtStNoT.Text) < StrToInt(EdtStMin.Text) ) then ShowMessage('input standby normal salah'); if
(
StrToInt(EdtStNoT.Text)
>
StrToInt(edtStNoMax.Text)
StrToInt(EdtStNoT.Text) > StrToInt(EdtStMax.Text) ) then ShowMessage('input standby normal salah'); if ( StrToInt(edtStNoMax.Text) > StrToInt(EdtStMax.Text) ) then ShowMessage('input standby normal salah'); if
(
StrToInt(edtStNoMax.Text)
StrToInt(edtStNoMax.Text)
<
<
StrToInt(edtStNoT.Text))
StrToInt(edtStNoMax.Text) < StrToInt(edtStMin.Text)) then
or
(
47 ShowMessage('input standby normal salah');
//cek input standby lama if (StrToInt(EdtStMaMin.Text) < StrToInt(EdtStMin.Text)) then ShowMessage('input standby lama salah'); if
((StrToInt(EdtStMaMin.Text)
>
StrToInt(EdtStMaMax.Text))
or
(StrToInt(EdtStMaMin.Text) > StrToInt(EdtStMax.Text)))then ShowMessage('input standby lama salah'); if (StrToInt(EdtStMaMax.Text) > StrToInt(EdtStMax.Text)) then ShowMessage ('input standby lama salah'); if
((StrToInt(EdtStMaMax.Text)
<
StrToInt(EdtStMaMin.Text))
(StrToInt(EdtStMaMax.Text) < StrToInt(EdtStMin.Text)))then ShowMessage('input standby lama salah')
else frmBatasan.Close; end;
Modul Inisialisasi procedure TfrmBatasan.PageControl1Change(Sender: TObject); begin if PageControl1.TabIndex=0 then
or
48 begin QueryMaxMin('Harga',edtMax,edtMin); end else if PageControl1.TabIndex=1 then begin QueryMaxMin('Berat',edtBeMax,edtBeMin); end else if PageControl1.TabIndex=2 then begin QueryMaxMin('PhoneBook',edtPbMax,edtPbMin); end else begin QueryMaxMin('Standby',edtStMax,edtStMin); end; end;
procedure TfrmBatasan.QueryMaxMin(Kolom: String;Max: TEdit;Min: TEdit); begin With ADOQuery1 do begin Close; SQL.Text:='SELECT MAX('+Kolom+') AS Maximum FROM Handphone'; Open;
49 Max.Text:=ADOQuery1['Maximum'];
Close; SQL.Text:='SELECT MIN('+Kolom+') AS Minimum FROM Handphone'; Open; Min.Text:=ADOQuery1['Minimum']; end; end;
Modul penampungan data dari database procedure TfrmHasil.FormShow(Sender: TObject); var i,j :integer; begin //Kosongin Grid for i:=0 to StringGrid1.RowCount-1 do for j:=0 to StringGrid1.ColCount-1 do StringGrid1.Cells[j,i]:=''; StringGrid1.RowCount:=2;
ADOQuery1.Close; ADOQuery1.SQL.Text:='SELECT * FROM Handphone'; ADOQuery1.Open; SetLength(pointHarga, 3, ADOQuery1.RecordCount);
50 SetLength(pointBerat, 3, ADOQuery1.RecordCount); SetLength(pointPb, 3, ADOQuery1.RecordCount); SetLength(pointSt, 3, ADOQuery1.RecordCount); SetLength(minimum,4); SetLength(normal,4); SetLength(maximum,4); SetLength(rec,ADOQuery1.RecordCount);
GetKriteria;
for i:=0 to ADOQuery1.RecordCount-1 do begin
rec[i]:=MinValue([pointHarga[harga][i],pointBerat[berat][i],pointPb[phonebook][i],poin tSt[standby][i]]); ADOQuery1.Close; ADOQuery1.SQL.Text:='UPDATE
Handphone
SET
Rekomendasi='+FloatToStr(rec[i])+' WHERE ID='+IntToStr(i+1)+';'; ADOQuery1.ExecSQL; end; ADOQuery1.Close; ADOQuery1.SQL.Text:='SELECT * FROM Handphone ORDER BY Rekomendasi DESC'; ADOQuery1.Open;
51 j:=1; for i:=0 to ADOQuery1.RecordCount-1 do begin if (ADOQuery1['Rekomendasi']<>0) AND (ADOQuery1['WAP']=wap) AND (ADOQuery1['GPRS']=gprs) AND (ADOQuery1['MMS']=mms) AND (ADOQuery1['Bluetooth']=bluetooth) AND (ADOQuery1['PolyPhonic']=polyphonic) AND not ADOQuery1.Eof then begin StringGrid1.Cells[0,j]:=ADOQuery1['NamaHP']; StringGrid1.Cells[1,j]:=ADOQuery1['TipeHP']; StringGrid1.Cells[2,j]:=ADOQuery1['Harga']; StringGrid1.Cells[3,j]:=ADOQuery1['Rekomendasi']; StringGrid1.RowCount:=StringGrid1.RowCount+1; j:=j+1; ADOQuery1.Next; end else begin ADOQuery1.Next; continue; end; end;
52 StringGrid1.Cells[0,0]:='Nama HP'; StringGrid1.Cells[1,0]:='Tipe HP'; StringGrid1.Cells[2,0]:='Harga'; StringGrid1.Cells[3,0]:='Rekomendasi'; end; Modul perhitungan derajat keanggotaan minimum Procedure TfrmHasil.GetMinimum(x: Integer; temp: String; noRecord: Integer); var a,b: Integer; begin With frmBatasan do begin if temp='Harga' then begin a:=StrToInt(edtMuMin.Text); b:=StrToInt(edtMuMax.Text); if x
=a) then pointHarga[0][noRecord]:=(b-x)/(b-a) else pointHarga[0][noRecord]:=0; end else if temp='Berat' then
53 begin a:=StrToInt(edtBeMuMin.Text); b:=StrToInt(edtBeMuMax.Text); if x=a) then pointBerat[0][noRecord]:=(b-x)/(b-a) else pointBerat[0][noRecord]:=0; end else if temp='PhoneBook' then begin a:=StrToInt(edtPbMuMin.Text); b:=StrToInt(edtPbMuMax.Text); if x=a) then pointPb[0][noRecord]:=(b-x)/(b-a) else pointPb[0][noRecord]:=0; end else begin a:=StrToInt(edtStMuMin.Text);
54 b:=StrToInt(edtStMuMax.Text); if x=a) then pointSt[0][noRecord]:=(b-x)/(b-a) else pointSt[0][noRecord]:=0; end; end; end;
Modul perhitungan derajat keanggotaan normal Procedure TfrmHasil.GetNormal(x: Integer; temp: String; noRecord: Integer); var a,b,c: Integer; begin With frmBatasan do begin if temp='Harga' then begin a:=StrToInt(edtNoMin.Text); b:=StrToInt(edtNoT.Text); c:=StrToInt(edtNoMax.Text); if (xc) then
55 pointHarga[1][noRecord]:=0 else if (x<=b) and (x>=a) then pointHarga[1][noRecord]:=(x-a)/(b-a) else pointHarga[1][noRecord]:=(c-x)/(c-b); end else if temp='Berat' then begin a:=StrToInt(edtBeNoMin.Text); b:=StrToInt(edtBeNoT.Text); c:=StrToInt(edtBeNoMax.Text); if (xc) then pointBerat[1][noRecord]:=0 else if (x<=b) and (x>=a) then pointBerat[1][noRecord]:=(x-a)/(b-a) else pointBerat[1][noRecord]:=(c-x)/(c-b); end else if temp='PhoneBook' then begin a:=StrToInt(edtPbNoMin.Text); b:=StrToInt(edtPbNoT.Text); c:=StrToInt(edtPbNoMax.Text); if (xc) then
56 pointPb[1][noRecord]:=0 else if (x<=b) and (x>=a) then pointPb[1][noRecord]:=(x-a)/(b-a) else pointPb[1][noRecord]:=(c-x)/(c-b); end else begin a:=StrToInt(edtStNoMin.Text); b:=StrToInt(edtStNoT.Text); c:=StrToInt(edtStNoMax.Text); if (xc) then pointSt[1][noRecord]:=0 else if (x<=b) and (x>=a) then pointSt[1][noRecord]:=(x-a)/(b-a) else pointSt[1][noRecord]:=(c-x)/(c-b); end; end; end;
Modul perhitungan derajat keanggotaan maksimum Procedure TfrmHasil.GetMaximum(x: Integer; temp: String; noRecord: Integer); var
57 a,b: Integer; begin With frmBatasan do begin if temp='Harga' then begin a:=StrToInt(edtMaMin.Text); b:=StrToInt(edtMaMax.Text); if x=a) then pointHarga[2][noRecord]:=(x-a)/(b-a) else pointHarga[2][noRecord]:=1; end else if temp='Berat' then begin a:=StrToInt(edtBeMaMin.Text); b:=StrToInt(edtBeMaMax.Text); if x=a) then pointBerat[2][noRecord]:=(x-a)/(b-a) else
58 pointBerat[2][noRecord]:=1; end else if temp='PhoneBook' then begin a:=StrToInt(edtPbMaMin.Text); b:=StrToInt(edtPbMaMax.Text); if x=a) then pointPb[2][noRecord]:=(x-a)/(b-a) else pointPb[2][noRecord]:=1; end else begin a:=StrToInt(edtStMaMin.Text); b:=StrToInt(edtStMaMax.Text); if x=a) then pointSt[2][noRecord]:=(x-a)/(b-a) else pointSt[2][noRecord]:=1; end;
59 end; end;
Modul Output procedure TfrmHasil.GetKriteria(); var i:integer; begin With frmCariKriteria do begin harga:=cmbHarga.ItemIndex; berat:=cmbBerat.ItemIndex; phonebook:=cmbPhoneBook.ItemIndex; standby:=cmbStandby.ItemIndex; wap:=integer(chkWAP.Checked); gprs:=integer(chkGPRS.Checked); mms:=integer(chkMMS.Checked); bluetooth:=integer(chkBluetooth.Checked); polyphonic:=integer(chkPolyphonic.Checked); end; ADOQuery1.Close; ADOQuery1.SQL.Text:='SELECT * FROM Handphone'; ADOQuery1.Open; for i:=0 to ADOQuery1.RecordCount-1 do
60 begin GetMinimum(ADOQuery1['Harga'],'Harga',i); GetMinimum(ADOQuery1['Berat'],'Berat',i); if ADOQuery1['PhoneBook']=Null then GetMinimum(1,'PhoneBook',i) else GetMinimum(ADOQuery1['PhoneBook'],'PhoneBook',i); GetMinimum(ADOQuery1['Standby'],'Standby',i);
GetNormal(ADOQuery1['Harga'],'Harga',i); GetNormal(ADOQuery1['Berat'],'Berat',i); if ADOQuery1['PhoneBook']=Null then GetMinimum(1,'PhoneBook',i) else GetNormal(ADOQuery1['PhoneBook'],'PhoneBook',i); GetNormal(ADOQuery1['Standby'],'Standby',i);
GetMaximum(ADOQuery1['Harga'],'Harga',i); GetMaximum(ADOQuery1['Berat'],'Berat',i); if ADOQuery1['PhoneBook']=Null then GetMinimum(1,'PhoneBook',i) else GetMaximum(ADOQuery1['PhoneBook'],'PhoneBook',i); GetMaximum(ADOQuery1['Standby'],'Standby',i);
61 ADOQuery1.Next; end; end;