Implementasi Metode Simple Additive Weighting (SAW) pada Visual Basic .Net 2005 - Konsultasi Algoritma dan Bahasa Pemograman

Tuesday, February 6, 2018

Implementasi Metode Simple Additive Weighting (SAW) pada Visual Basic .Net 2005



Langkah-langkah Implementasi Metode Simple Additive Weighting (SAW) dengan Menggunakan VB. Net 2005 dan MySql
1. Buat Database Mysql nya dengan struktur terlihat seperti gambar dibawah ini:

atau gunakan script nya
-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Feb 06, 2018 at 07:33 PM
-- Server version: 5.1.30
-- PHP Version: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `spk_sensus_saw`
--

-- --------------------------------------------------------

--
-- Table structure for table `hasil`
--

CREATE TABLE IF NOT EXISTS `hasil` (
  `ndaftar` char(10) NOT NULL,
  `nhasil` double NOT NULL,
  PRIMARY KEY (`ndaftar`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `hasil`
--

INSERT INTO `hasil` (`ndaftar`, `nhasil`) VALUES
('170001', 1.03),
('170002', 0.865),
('170003', 1.06);

-- --------------------------------------------------------

--
-- Table structure for table `kriteria`
--

CREATE TABLE IF NOT EXISTS `kriteria` (
  `kode` char(5) NOT NULL,
  `kriteria` text NOT NULL,
  `nilai` double NOT NULL,
  `ket` enum('Benefit','Cost') NOT NULL,
  PRIMARY KEY (`kode`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `kriteria`
--

INSERT INTO `kriteria` (`kode`, `kriteria`, `nilai`, `ket`) VALUES
('K001', 'Usia', 50, 'Cost'),
('K002', 'Pendidikan', 100, 'Benefit'),
('K003', 'Test Tulis', 75, 'Benefit'),
('K004', 'Test Wawancara', 75, 'Benefit'),
('K005', 'Pengalaman', 75, 'Benefit');

-- --------------------------------------------------------

--
-- Table structure for table `login`
--

CREATE TABLE IF NOT EXISTS `login` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(200) NOT NULL,
  `ket` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `login`
--

INSERT INTO `login` (`id`, `username`, `password`, `ket`) VALUES
(1, 'admin', '1', 'Admin'),
(2, 'admin', '1', 'Admin');

-- --------------------------------------------------------

--
-- Table structure for table `nilai_kriteria_ahp`
--

CREATE TABLE IF NOT EXISTS `nilai_kriteria_ahp` (
  `kode` char(5) NOT NULL,
  `nilai` double NOT NULL,
  PRIMARY KEY (`kode`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `nilai_kriteria_ahp`
--

INSERT INTO `nilai_kriteria_ahp` (`kode`, `nilai`) VALUES
('K001', 0.13),
('K002', 0.27),
('K003', 0.2),
('K004', 0.2),
('K005', 0.2);

-- --------------------------------------------------------

--
-- Table structure for table `nilai_pelamar`
--

CREATE TABLE IF NOT EXISTS `nilai_pelamar` (
  `ndaftar` char(10) NOT NULL,
  `kode` char(5) NOT NULL,
  `nilai` double NOT NULL,
  PRIMARY KEY (`ndaftar`,`kode`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `nilai_pelamar`
--

INSERT INTO `nilai_pelamar` (`ndaftar`, `kode`, `nilai`) VALUES
('170001', 'K001', 0.5),
('170001', 'K002', 0.5),
('170001', 'K003', 1),
('170001', 'K004', 0.75),
('170001', 'K005', 0.75),
('170002', 'K001', 0.25),
('170002', 'K002', 0.25),
('170002', 'K003', 1),
('170002', 'K004', 1),
('170002', 'K005', 1),
('170003', 'K001', 0.75),
('170003', 'K002', 0.5),
('170003', 'K003', 0.75),
('170003', 'K004', 0.75),
('170003', 'K005', 0.5);

-- --------------------------------------------------------

--
-- Table structure for table `parameter`
--

CREATE TABLE IF NOT EXISTS `parameter` (
  `kode` char(5) NOT NULL,
  `kodep` char(7) NOT NULL,
  `parameter` varchar(100) NOT NULL,
  `bobot` double NOT NULL,
  PRIMARY KEY (`kode`,`kodep`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `parameter`
--

INSERT INTO `parameter` (`kode`, `kodep`, `parameter`, `bobot`) VALUES
('K001', '01', '18 - 20', 1),
('K001', '02', '21-24', 0.75),
('K001', '03', '25-29', 0.5),
('K001', '04', '30-34', 0.25),
('K001', '05', '35-50', 0),
('K002', '01', 'S3', 1),
('K002', '02', 'S2', 0.75),
('K002', '03', 'S1', 0.5),
('K002', '04', 'SMA', 0.25),
('K002', '05', 'SMP', 0),
('K003', '01', '90-100', 1),
('K003', '02', '70-89', 0.75),
('K003', '03', '55-69', 0.5),
('K003', '04', '45-54', 0.25),
('K003', '05', '01-44', 0),
('K004', '01', '90-100', 1),
('K004', '02', '70-89', 0.75),
('K004', '03', '55-79', 0.5),
('K004', '04', '45-54', 0.25),
('K004', '05', '01-44', 0),
('K005', '01', '4 Tahun atau Lebih', 1),
('K005', '02', '3 Tahun', 0.75),
('K005', '03', '2 Tahun', 0.5),
('K005', '04', '1 Tahun', 0.25),
('K005', '05', '0 Tahun', 0);

-- --------------------------------------------------------

--
-- Table structure for table `pelamar`
--

CREATE TABLE IF NOT EXISTS `pelamar` (
  `ndaftar` char(10) NOT NULL,
  `nama` varchar(150) NOT NULL,
  `jekel` char(1) NOT NULL,
  `tplh` varchar(250) NOT NULL,
  `tglh` char(10) NOT NULL,
  `alamat` varchar(200) NOT NULL,
  `kecamatan` varchar(100) NOT NULL,
  `kabupaten` varchar(100) NOT NULL,
  PRIMARY KEY (`ndaftar`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `pelamar`
--

INSERT INTO `pelamar` (`ndaftar`, `nama`, `jekel`, `tplh`, `tglh`, `alamat`, `kecamatan`, `kabupaten`) VALUES
('170001', 'Suheri', 'L', 'Tanjong Siron', '0000-00-00', 'Tanjong Siron', 'Kuta Blang', 'Bireuen'),
('170002', 'Asriadi', 'L', 'Alue Iet', '11/11/1984', 'Alue Iet', 'Peusangan Siblah Krueng', 'Bireuen'),
('170003', 'Noni Karlina Sari', 'P', 'Paya Cut', '11/11/2006', 'Paya Cut', 'Peusangan', 'Bireuen');


2. Buat Form yang terdiri dari

a. Form Kriteria
b. Form Parameter
c. Form Alternatif
d. Form Nilai Alternatif
e. Form Proses SAW

3. pada Form Proses Metode Simple Additive Weighting (SAW) gunakan script sebagai berikut:

Imports MySql.Data.MySqlClient
Imports System.Math
Public Class FProsesSAW
    Dim db, db1 As New MySql.Data.MySqlClient.MySqlConnection
    Dim cmd, cmd1 As MySqlCommand
    Dim rs, rs1 As MySqlDataReader
    Dim sql, sql1 As String
    Sub bukadatabase()
        sql = "server=localhost;uid=root;pwd=;database=spk_sensus_saw"
        Try
            db.ConnectionString = sql
            db.Open()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        sql1 = "server=localhost;uid=root;pwd=;database=spk_sensus_saw"
        Try
            db1.ConnectionString = sql1
            db1.Open()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
    Sub cekkriteria()
        sql = "select * from kriteria ORDER BY kode ASC"
        cmd = New MySqlCommand(sql, db)
        rs = cmd.ExecuteReader
        Try
            Dim index As Integer
            While rs.Read
                index = datakriteria.Rows.Add
                datakriteria.Rows(index).Cells(0).Value = datakriteria.Rows.Count
                datakriteria.Rows(index).Cells(1).Value = rs("kode")
                datakriteria.Rows(index).Cells(2).Value = rs("kriteria")
                datakriteria.Rows(index).Cells(3).Value = rs("nilai")
                datakriteria.Rows(index).Cells(4).Value = rs("ket")
                ' index += 1

            End While
        Finally
            If rs IsNot Nothing Then rs.Close()
        End Try

    End Sub
    Sub cekpelamar()
        sql = "select * from pelamar ORDER BY ndaftar ASC"
        cmd4 = New MySqlCommand(sql, db)
        rs = cmd.ExecuteReader
        Try
            Dim index As Integer
            While rs.Read
                index = dgpelamar.Rows.Add

                dgpelamar.Rows(index).Cells(0).Value = dgpelamar.Rows.Count
                dgpelamar.Rows(index).Cells(1).Value = rs("ndaftar")
                dgpelamar.Rows(index).Cells(2).Value = rs("nama")
                dgpelamar.Rows(index).Cells(3).Value = rs("jekel")
                dgpelamar.Rows(index).Cells(4).Value = rs("alamat")
                ' index += 1

            End While
        Finally
            If rs IsNot Nothing Then rs.Close()
        End Try
    End Sub
    Sub datahasilakhir()
        sql = "select pelamar.*,hasil.* from pelamar,hasil where hasil.ndaftar=pelamar.ndaftar ORDER BY nhasil DESC"
        cmd = New MySqlCommand(sql, db)
        rs = cmd.ExecuteReader
        Try
            Dim index As Integer
            While rs.Read
                index = dghasil.Rows.Add

                dghasil.Rows(index).Cells(0).Value = dghasil.Rows.Count
                dghasil.Rows(index).Cells(1).Value = rs("ndaftar")
                dghasil.Rows(index).Cells(2).Value = rs("nama")
                dghasil.Rows(index).Cells(3).Value = rs("jekel")
                dghasil.Rows(index).Cells(4).Value = rs("alamat")
                dghasil.Rows(index).Cells(5).Value = rs("nhasil")
                dghasil.Rows(index).Cells(6).Value = dghasil.Rows.Count
                ' index += 1

            End While
        Finally
            If rs IsNot Nothing Then rs.Close()
        End Try
    End Sub
    Sub ceknilaipelamar()
        sql = "select * from nilai_pelamar ORDER BY ndaftar,kode ASC'"
        cmd = New MySqlCommand(sql, db)
        rs = cmd.ExecuteReader
        Try
            Dim index As Integer
            While rs.Read
                index = dgnilai.Rows.Add
                dgnilai.Rows(index).Cells(0).Value = rs("ndaftar")
                dgnilai.Rows(index).Cells(1).Value = rs("kode")
                dgnilai.Rows(index).Cells(2).Value = rs("nilai")
                ' index += 1

            End While
        Finally
            If rs IsNot Nothing Then rs.Close()
        End Try
    End Sub
    Private Sub FProsesSAW_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        bukadatabase()
        cekkriteria()
        cekpelamar()
        ceknilaipelamar()
        ambildata()
        'dgv.Enabled = False
        'dgv2.Enabled = False
        'dgv3.Enabled = False
    End Sub

    Sub ambildata()

        With dgv

            .ColumnCount = datakriteria.RowCount + 2
            .Rows.Add()
        End With
        With dgv2

            .ColumnCount = datakriteria.RowCount + 2

        End With
        With dgv3

            .ColumnCount = datakriteria.RowCount + 2

        End With
        With dgpelamar

            .ColumnCount = 6

        End With

        Dim cl, br As Integer
        dgv.Rows.Clear()
        dgv.Rows.Add(dgpelamar.Rows.Count - 1)
        dgv2.Rows.Add(2)
        dgv3.Rows.Add(dgpelamar.Rows.Count - 1)
        For i As Integer = 0 To dgpelamar.Rows.Count - 1

            dgv.Rows(i).Cells(0).Value = dgpelamar.Rows(i).Cells(1).Value
            dgv.Rows(i).Cells(1).Value = dgpelamar.Rows(i).Cells(2).Value
            dgv3.Rows(i).Cells(0).Value = dgpelamar.Rows(i).Cells(1).Value
            dgv3.Rows(i).Cells(1).Value = dgpelamar.Rows(i).Cells(2).Value

        Next i
        cl = 1

        Dim index As Integer
        Dim Max As Double
        For ii As Integer = 1 To datakriteria.Rows.Count


            dgv.Columns(ii + 1).Name = datakriteria.Rows(ii - 1).Cells(1).Value
            dgv2.Rows(0).Cells(ii + 1).Value = datakriteria.Rows(ii - 1).Cells(4).Value

            Dim tcari As String

            tcari = datakriteria.Rows(ii - 1).Cells(1).Value
            'MessageBox.Show(tcari)
            sql = "select * from nilai_kriteria_ahp where kode='" + tcari + "' "
            cmd = New MySqlCommand(sql, db)
            rs = cmd.ExecuteReader
            Try

                If rs.Read Then
                    ' For i As Integer = 0 To dgpelamar.Rows.Count - 1
                    'MessageBox.Show(rs("nilai"))
                    dgv2.Rows(2).Cells(ii + 1).Value = rs("nilai")


                    ' index += 1
                    ' Next i
                End If
            Finally
                If rs IsNot Nothing Then rs.Close()
            End Try
            For i As Integer = 0 To dgpelamar.Rows.Count - 1

                sql = "select * from nilai_pelamar  where kode='" + tcari + "' and ndaftar='" + dgv.Rows(i).Cells(0).FormattedValue + "' "
                cmd = New MySqlCommand(sql, db)
                rs = cmd.ExecuteReader
                Try

                    If rs.Read Then
                        ' For i As Integer = 0 To dgpelamar.Rows.Count - 1
                        'MessageBox.Show(rs("nilai"))
                        dgv.Rows(i).Cells(ii + 1).Value = rs("nilai")

                      
                        ' index += 1
                        ' Next i
                    End If
                Finally
                    If rs IsNot Nothing Then rs.Close()
                End Try
             

            Next i

        Next ii
        For ii As Integer = 1 To datakriteria.Rows.Count
            dgv3.Rows(0).Cells(ii + 1).Value = dgv.Rows(0).Cells(ii + 1).Value


        Next
        ' dgv.Rows.Add(dgpelamar.Rows.Count - 1)
        Dim vmax As Double

        For ii As Integer = 1 To datakriteria.Rows.Count
            vmax = dgv.Rows(0).Cells(ii + 1).Value
            ' MsgBox(Max)
            For Each row As DataGridViewRow In dgv.Rows
                If dgv2.Rows(0).Cells(ii + 1).Value = "Benefit" Then
                    If vmax < row.Cells(ii + 1).Value Then vmax = row.Cells(ii + 1).Value
                ElseIf dgv2.Rows(0).Cells(ii + 1).Value = "Cost" Then
                    If vmax > row.Cells(ii + 1).Value Then vmax = row.Cells(ii + 1).Value
                End If

            Next
            'MsgBox(Max)
            'dgv2.Rows(0).Cells(ii + 1).Value = Max
            dgv2.Rows(1).Cells(ii + 1).Value = vmax
            'Maximum Value


            ' MsgBox(Max)




        Next ii
        dgv2.Rows(2).Cells(1).Value = "Bobot W"

        For ii As Integer = 1 To datakriteria.Rows.Count
            For i As Integer = 0 To dgpelamar.Rows.Count - 1
                dgv3.Rows(i).Cells(ii + 1).Value = (dgv.Rows(i).Cells(ii + 1).Value / dgv2.Rows(1).Cells(ii + 1).Value) * dgv2.Rows(2).Cells(ii + 1).Value

            Next i

        Next ii
        proses_akhir()
    End Sub

    Sub proses_akhir()
        hapus()
        Dim b(dgv3.Rows.Count - 1) As Double
        Dim hs As Decimal
        For i As Integer = 0 To dgpelamar.Rows.Count - 1

            For ii As Integer = 1 To datakriteria.Rows.Count
                b(i) += dgv3.Rows(i).Cells(ii + 1).Value
            Next ii
            ' MsgBox(b(i))
            dgpelamar.Rows(i).Cells(5).Value = b(i)
            sql = "INSERT INTO hasil VALUES('" & dgpelamar.Rows(i).Cells(1).Value & "','" & dgpelamar.Rows(i).Cells(5).Value & "')"

            Try
                cmd = New MySqlCommand(sql, db)
                cmd.ExecuteNonQuery()
                'MessageBox.Show("Penyimpanan Data Sukses" & MessageBoxIcon.Information)
                'kosong()
            Catch ex As Exception
                ' MessageBox.Show("Penyimpanan Data Gagal" & MessageBoxIcon.Warning)
            End Try
            cmd.Dispose()
        Next i
        datahasilakhir()
    End Sub
    Sub hapus()
        sql = "delete from hasil "
        Try
            cmd = New MySqlCommand(sql, db)
            cmd.ExecuteNonQuery()
            ' MessageBox.Show("Hapus Data Sukses" & MessageBoxIcon.Information)
            'kosong()
        Catch ex As Exception
            'MessageBox.Show("Hapus Data Gagal" & MessageBoxIcon.Warning)
        End Try
        cmd.Dispose()
    End Sub
End Class

Sehingga hasilnya akan tampak seperti gambar dibawah ini.


Untuk Script lengkapnya dapat anda unduh disini

No comments:

Post a Comment