Pemrograman Visual II by Amiruddin, M.Kom 2021
87 | P a g e17. Tambahkan Form baru dengan nama frmHitungAkurasi.vb, Desain dengan layout sbb :
Atur Properties yang dibutuhkan:
Obyek Properties Nilai
Form
FileName frmHitungAkurasi.vb Name frmHitungAkurasi
BackColor Pilih warna yg diinginkan ForeColor Pilih warna yg diinginkan MaximizeBox False
MinimizeBox False
StartPosition CenterScreen
Text Hitung Kesalahan MAPE
ComboBox1 Name cboProdi
DataGridView1 Name DGV
Button1 Name btnHitungMape
Text Hitung MAPE
Pemrograman Visual II by Amiruddin, M.Kom 2021
88 | P a g eObyek Properties Nilai
Button2 Name btnTutup
Text Tutup
TextBox1 Name txtMape
PictureBox1 Image Isi gambar Rumus MAPE
Lengkapi Coding sbb :
Klik Menu View Code, sehingga muncul seperti berikut :
Imports System.Data.Odbc
Public Class frmSettingDataset
Dim NilaiA, NilaiB, nNilaiX, nNilaiY As Single Dim cAkurasi_AWal, cAkurasi_Akhir, cKet As String Dim Akurasi As Boolean
Dim cTitikPeriode, cKetPeriode As String Dim nilai_X, cPeriode As Integer
End Class
Ketik Imports System.Data.Odbc di atas Public Class, kemudian ketik perintah 4 baris Dim seperti di atas
PASTIKAN CODING BERIKUT DIBUAT ANTARA PUBLIC CLASS dan END CLASS
Buat Sub Procedure Kosongkan sbb :
Sub Kosongkan()
dg2.Columns.Clear() txtNilaiA.Text = ""
txtNilaiB.Text = ""
txtNilaiX.Text = ""
txtHasil.Text = ""
cboPeriode.Text = ""
lblY.Text = ""
btnPrediksi.Enabled = False txtNilaiX.Enabled = False cboPeriode.Enabled = False End Sub
Buat sub Procedure TampilProdi sbb :
Sub TampilProdi()cboProdi.Items.Clear()
cmd = New OdbcCommand("select distinct nama_prodi from tbprogram_studi " & _ " order by kode_prodi", Conn)
rd = cmd.ExecuteReader While rd.Read
cboProdi.Items.Add(rd.Item(0)) End While
End Sub
Pemrograman Visual II by Amiruddin, M.Kom 2021
89 | P a g e Buat sub Procedure TampilPeriode sbb :
Sub TampilPeriode()cboPeriode.Items.Clear()
cmd = New OdbcCommand("select distinct nama_periode from tbperiode order by id_periode", Conn)
rd = cmd.ExecuteReader While rd.Read
cboPeriode.Items.Add(rd.Item(0)) End While
End Sub
Buat sub Procedure CekSettingDataset sbb :
Sub CekSettingDataset()cmd = New OdbcCommand("Select * from tbsetting_dataset where kode_prodi='" &
cKode_Prodi & "' ", Conn) rd = cmd.ExecuteReader rd.Read()
If rd.HasRows Then
cAkurasi_AWal = rd.Item("akurasi_awal") cAkurasi_Akhir = rd.Item("akurasi_akhir") NilaiA = rd.Item("nilai_a")
NilaiB = rd.Item("nilai_b") Call HitungDatasetAkurasi() Else
DGV.Columns.Clear() txtMape.Text = ""
MsgBox("Maaf, Setting Dataset untuk Prodi tsb Belum Diatur...", ,
"Perhatian...!")
cboProdi.Text = ""
Exit Sub End If End Sub
Pada Form HitungAkurasi bagian yg kosong double klik agar muncul di view code sbb
Private Sub frmHitungAkurasi_LoadPrivate Sub frmHitungAkurasi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cKode_Prodi = ""
Call TampilProdi() DGV.Columns.Clear()
btnHitungMAPE.Enabled = False Akurasi = True
End Sub
Pilih Event KeyPress
Pemrograman Visual II by Amiruddin, M.Kom 2021
90 | P a g e Private Sub frmHitungAkurasi_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress If Asc(e.KeyChar) = Keys.Enter Then
SendKeys.Send("{tab}") End If
End Sub
Double Klik pada combo Prodi
Private Sub cboProdi_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboProdi.SelectedIndexChanged
If cboProdi.Text = "" Then Exit Sub
cmd = New OdbcCommand("Select kode_prodi from tbProgram_studi where nama_prodi='" & cboProdi.Text & "'", Conn)
rd = cmd.ExecuteReader rd.Read()
If rd.HasRows Then
cKode_Prodi = rd.Item("kode_prodi") Call CekSettingDataset()
Else
MsgBox("Maaf, Nama Prodi salah isi...", , "Perhatian...!") cboProdi.Text = ""
cboProdi.Focus() Exit Sub
End If End Sub
Buat sub procedure
CekNilaiX_PrediksiSub CekNilaiX_Prediksi()
cmd = New OdbcCommand("Select * from tbsetting_dataset where kode_prodi ='" &
cKode_Prodi & "' ", Conn) rd2 = cmd.ExecuteReader rd2.Read()
If rd2.HasRows Then
cTitikPeriode = rd2.Item("titik_periode") cKet = rd2.Item("ket")
If cKet = "Genap" Then
If cKetPeriode = "1" Then
nilai_X = ((cPeriode - cTitikPeriode) + (cPeriode - cTitikPeriode))
* 2 - 1
Else
nilai_X = ((cPeriode - cTitikPeriode) + (cPeriode - cTitikPeriode))
* 2 + 1
End If
Else
If cKetPeriode = "1" Then
nilai_X = (cPeriode - cTitikPeriode) * 2
Pemrograman Visual II by Amiruddin, M.Kom 2021
91 | P a g e Elsenilai_X = (cPeriode - cTitikPeriode) * 2 + 1 End If
End If
End If rd2.Close() End Sub
Buat sub Procedure
CekDataPrediksi Sub CekDataPrediksi()DGV.Columns.Clear()
DGV.Columns.Add("kode", "Periode")
DGV.Columns.Add("kode", "Data Aktual (y)") DGV.Columns.Add("kode", "Data Prediksi (y')") DGV.Columns.Add("kode", "Error MAPE (%)")
Dim sql As String = "Select id_periode,jml_mhs from tbdataset " & _ "where no_indeks >='" & cAkurasi_AWal & "' and no_indeks <='" &
cAkurasi_Akhir & "' " & _
"and kode_prodi='" & cKode_Prodi & "' order by id_dataset "
cmd = New OdbcCommand(sql, Conn) rd = cmd.ExecuteReader
Dim i As Integer = 0 While rd.Read
DGV.Rows.Add()
DGV.Item(0, i).Value = rd(0)
DGV.Item(1, i).Value = rd(1) 'Data Aktual (y)
i += 1 End While rd.Close()
For j As Integer = 0 To DGV.RowCount - 2 cId_Periode = DGV.Rows(j).Cells(0).Value
sql = "select prediksi_y from tbprediksi where kode_prodi ='" &
cKode_Prodi & "' and id_periode ='" & cId_Periode & "' "
cmd = New OdbcCommand(sql, Conn) rd = cmd.ExecuteReader
rd.Read()
If rd.HasRows = True Then
DGV.Item(2, j).Value = rd.Item(0) 'Data Prediksi (y') Else
DGV.Item(2, j).Value = ""
Akurasi = False 'bila masih ada data prediksi yg kosong End If
Next rd.Close()
DGV.ReadOnly = True
DGV.Columns(0).Width = 100 DGV.Columns(1).Width = 110 DGV.Columns(2).Width = 120 DGV.Columns(3).Width = 120 DGV.GridColor = Color.Blue
DGV.DefaultCellStyle.ForeColor = Color.Blue
Pemrograman Visual II by Amiruddin, M.Kom 2021
92 | P a g e DGV.RowHeadersDefaultCellStyle.BackColor = Color.DeepPinkDGV.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray DGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect DGV.ColumnHeadersDefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleCenter
DGV.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
DGV.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
DGV.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
DGV.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
DGV.Columns(2).DefaultCellStyle.Format = "#,##0.#0"
DGV.Columns(3).DefaultCellStyle.Format = "##0.0#"
If Akurasi = True Then
btnHitungMAPE.Enabled = True btnHitungMAPE.Focus()
Else
MsgBox("Maaf, Hasil Prediksi untuk Perhitungan Akurasi Belum Lengkap", ,
"Perhatian...!")
btnHitungMAPE.Enabled = False cboProdi.Focus()
Exit Sub End If End Sub
Buat sub Procedure
HitungDatasetAkurasi Sub HitungDatasetAkurasi()Dim Hasil As Single
Dim sql As String = "Select id_dataset,kode_prodi,id_periode,jml_mhs,no_indeks from tbdataset " & _
"where no_indeks >='" & cAkurasi_AWal & "' and no_indeks <='" &
cAkurasi_Akhir & "' " & _
"and kode_prodi='" & cKode_Prodi & "' order by id_dataset "
cmd = New OdbcCommand(sql, Conn) rd = cmd.ExecuteReader
Dim i As Integer = 0 While rd.Read
cId_Dataset = rd("id_dataset") cId_Periode = rd("id_periode") nNilaiY = rd("jml_mhs")
cPeriode = Microsoft.VisualBasic.Left(cId_Periode, 4) cKetPeriode = Microsoft.VisualBasic.Right(cId_Periode, 1)
CekNilaiX_Prediksi()
Hasil = Int(NilaiA + NilaiB * nilai_X)
cmd = New OdbcCommand("Select * from tbprediksi where id_dataset = '" &
cId_Dataset & "' ", Conn)
rd2 = cmd.ExecuteReader rd2.Read()
If Not rd2.HasRows Then
Pemrograman Visual II by Amiruddin, M.Kom 2021
93 | P a g e Dim sqltambah As String = "Insert into tbprediksi(id_dataset,kode_prodi,id_periode,nilai_x,prediksi_y) values " & _
"('" & cId_Dataset & "','" & cKode_Prodi & "','" & cId_Periode & "','"
& nilai_X & "','" & Hasil & "')"
cmd = New OdbcCommand(sqltambah, Conn)
Else
Dim sqledit As String = "Update tbprediksi set " & _ "nilai_x='" & nilai_X & "', " & _
"prediksi_y='" & Hasil & "' " & _
"where id_dataset = '" & cId_Dataset & "' "
cmd = New OdbcCommand(sqledit, Conn)
End If
cmd.ExecuteNonQuery() End While
Call CekDataPrediksi() End Sub
Buat sub Procedure
Hitung_MAPE Sub Hitung_MAPE()Dim TotSelisih, nMAPE As Single Dim nBaris, nData As Integer
For brs As Integer = 0 To DGV.RowCount - 2 'Hitung Error MAPE (%)
If DGV.Item(1, brs).Value = 0 Then
DGV.Item(3, brs).Value = Math.Abs(DGV.Item(1, brs).Value - DGV.Item(2, brs).Value)
Else
DGV.Item(3, brs).Value = (Math.Abs(DGV.Item(1, brs).Value - DGV.Item(2, brs).Value) / DGV.Item(1, brs).Value) * 100
End If
TotSelisih = TotSelisih + DGV.Item(3, brs).Value Next
nBaris = DGV.RowCount - 1 rd.Close()
nData = DGV.RowCount - 1 DGV.Rows.Add("")
DGV.Rows.Add("Total")
DGV.Item(1, nBaris + 1).Value = "n = " + Microsoft.VisualBasic.Str(nData) DGV.Item(3, nBaris + 1).Value = TotSelisih
nMAPE = TotSelisih / nData
txtMape.Text = FormatNumber(nMAPE, 2) & "%"
End Sub
Pemrograman Visual II by Amiruddin, M.Kom 2021
94 | P a g e Double klik pada tombol Hitung MAPE :
Private Sub btnHitungMAPE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHitungMAPE.Click
Call Hitung_MAPE()
btnHitungMAPE.Enabled = False End Sub
Double klik pada tombol Tutup :
Private Sub btnTutup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTutup.Click
Me.Dispose() End Sub
Pada Form MenuAdmin, Double Klik pada Sub Menu Hitung Akurasi
Private Sub mnHitungAkurasi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnHitungAkurasi.Click
frmHitungAkurasi.Show()
frmHitungAkurasi.MdiParent = Me End Sub