Penyusunan Jadwal Praktikum Mahasiswa Menggunakan Metode Best First Search.
i
Universitas Kristen Maranatha
PENYUSUNAN JADWAL PRAKTIKUM MAHASISWA
MENGGUNAKAN METODE
BEST FIRST SEARCH
Jerry Wiyono (0827003)
Jurusan Sistem Komputer, Fakultas Teknik,
Universitas Kristen Maranatha
Jalan Prof. drg. Suria Sumantri, MPH. No 65
Bandung 40164, Indonesia
ABSTRAK
Dengan semakin berkembangnya dunia Teknologi Informasi maka segala
proses maupun kegiatan dapat dipercepat.
Demikian pula dengan penyusunan
jadwal di suatu jurusan Universitas Kristen Maranatha, salah satunya penyusunan
jadwal praktikum secara manual di jurusan Sistem Komputer yang menghabiskan
banyak waktu dan belum lagi jika terjadi kesalahan karena faktor ketidaktelitian
manusia.
Untuk mengatasi masalah tersebut, maka pada Tugas Akhir ini dibuatlah
suatu
software
berbasis
Artificial Intelligence
dengan metode
Best-First Search
yang dapat menganalisa jadwal-jadwal kuliah mahasiswa dan mengambil suatu
hasil yang paling terbaik dalam menentukan jadwal praktikum dengan waktu yang
lebih singkat.
Software
ini telah berhasil mendapatkan jadwal praktikum yang
memiliki nilai bentrok terendah dan jadwal tersebut merupakan jadwal yang
paling optimal dari pencarian yang sudah dilakukan.
(2)
ii
Universitas Kristen Maranatha
STUDENT LABORATORY CLASS'S SCHEDULING
USING BEST FIRST SEARCH METHOD
Jerry Wiyono / 0827003
Department of Computer Engineering, Faculty of Engineering,
Maranatha Christian University
Prof. drg. Suria Sumantri, MPH. No 65
Bandung 40164, Indonesia
ABSTRACT
With the growth of Information Technology, all processes or activities can
be accelerated. Likewise the scheduling in a department of Maranatha Christian
University, such as the manually student laboratory class's scheduling in
Computer Engineering Department which takes a lot of time and not to mention if
something goes wrong due to human inaccuracy factor.
To overcome this problem, in this Final Project an Artificial Intelligence
based software with Best-First Search method that can analyze student subject's
schedules and get the best result in determining student laboratory class's
schedule with a shorter time has been created. This software has managed to get
the student laboratory class's schedule with the lowest clashed value and that
schedule is the most optimal schedule from the searches that have been done.
(3)
iii
Universitas Kristen Maranatha
DAFTAR ISI
ABSTRAK
... i
ABSTRACT ... ii
DAFTAR ISI
... iii
DAFTAR GAMBAR
... v
DAFTAR TABEL
... vii
BAB I
PENDAHULUAN ... 1
1.1 Latar Belakang ... 1
1.2 Rumusan Masalah ... 2
1.3 Tujuan ... 2
1.4 Pembatasan Masalah ... 3
1.5 Sistematika Penulisan... 4
BAB II
LANDASAN TEORI ... 6
2.1
Database
... 6
2.2 Microsoft Visual Studio ... 7
2.3 Microsoft Visual Basic ... 9
2.4
Structured Query Language
... 9
2.4.1
Data Definition Language
... 10
2.4.2
Data Manipulation Language
... 11
2.5 MySQL ... 13
2.6
Artificial Intelligence
... 17
2.6.1 Definisi
AI
... 18
2.6.2 Perbandingan
AI
dan Program Konvensional ... 20
2.6.3 Pemecahan masalah dengan metode pencarian... 21
BAB III
PERANCANGAN
DATABASE
DAN
SOFTWARE
... 27
3.1 Perancangan Tabel ... 27
(4)
iv
Universitas Kristen Maranatha
3.3 Perancangan
Software
... 30
3.4 Diagram Alir (
Flowchart
) ... 35
BAB IV
HASIL DAN DATA PENGAMATAN ... 38
4.1 Pengujian
Software
Bagian
Form
... 38
4.1.1
Main Menu Form
... 38
4.1.2
Form
Mata Kuliah ... 39
4.1.3
Form
Mata Kuliah Peserta ... 44
4.1.4
Form
Praktikum ... 49
4.1.5
Form
Peserta Praktikum ... 54
4.2 Pengujian
Software
Bagian Proses Jadwal Praktikum .... 59
BAB V
KESIMPULAN DAN SARAN ... 63
5.1 Kesimpulan ... 63
5.2 Saran ... 63
DAFTAR PUSTAKA
... 64
(5)
v
Universitas Kristen Maranatha
DAFTAR GAMBAR
Gambar 2.1
Microsoft Visual Studio ... 8
Gambar 3.1
Relasi Tabel ... 30
Gambar 3.2
Rancangan
Main Menu Form
... 31
Gambar 3.3
Rancangan
Form
Mata Kuliah ... 32
Gambar 3.4
Rancangan
Form
Mata Kuliah Peserta ... 32
Gambar 3.5
Rancangan
Form
Praktikum ... 33
Gambar 3.6
Rancangan
Form
Peserta Praktikum ... 34
Gambar 3.7
Rancangan
Form
Hasil Proses ... 34
Gambar 3.8
Flowchart
Utama ... 36
Gambar 3.9
Flowchart
Proses Jadwal Praktikum ... 37
Gambar 4.1
Main Menu Form
... 38
Gambar 4.2
Form
Mata Kuliah ... 39
Gambar 4.3
Penyimpanan
Form
Mata Kuliah ... 40
Gambar 4.4 Hasil penyimpanan
Form
Mata Kuliah ... 40
Gambar 4.5
Pengubahan
Form
Mata Kuliah (masukkan
ID
) ... 41
Gambar 4.6
Pengubahan
Form
Mata Kuliah (mengubah data) ... 42
Gambar 4.7
Hasil pengubahan
Form
Mata Kuliah ... 42
Gambar 4.8
Penghapusan
Form
Mata Kuliah (masukkan
ID
)... 43
Gambar 4.9
Hasil penghapusan
Form
Mata Kuliah ... 43
Gambar 4.10
Form
Mata Kuliah Peserta ... 44
Gambar 4.11 Penyimpanan
Form
Mata Kuliah Peserta ... 45
Gambar 4.12 Hasil penyimpanan
Form
Mata Kuliah Peserta ... 45
Gambar 4.13 Pengubahan
Form
Mata Kuliah Peserta (masukkan
ID
)... 46
Gambar 4.14 Pengubahan
Form
Mata Kuliah Peserta (mengubah data) ... 47
Gambar 4.15 Hasil pengubahan
Form
Mata Kuliah Peserta ... 47
Gambar 4.16 Penghapusan
Form
Mata Kuliah Peserta (masukkan
ID
) ... 48
Gambar 4.17 Hasil penghapusan
Form
Mata Kuliah Peserta ... 48
Gambar 4.18
Form
Praktikum ... 49
(6)
vi
Universitas Kristen Maranatha
Gambar 4.20 Hasil penyimpanan
Form
Praktikum ... 50
Gambar 4.21 Pengubahan
Form
Praktikum (masukkan
ID
)... 51
Gambar 4.22 Pengubahan
Form
Praktikum (mengubah data) ... 52
Gambar 4.23 Hasil pengubahan
Form
Praktikum ... 52
Gambar 4.24 Penghapusan
Form
Praktikum (masukkan
ID
) ... 53
Gambar 4.25 Hasil penghapusan
Form
Praktikum ... 53
Gambar 4.26
Form
Peserta Praktikum ... 54
Gambar 4.27 Penyimpanan
Form
Peserta Praktikum ... 55
Gambar 4.28 Hasil penyimpanan
Form
Peserta Praktikum ... 55
Gambar 4.29 Pengubahan
Form
Peserta Praktikum (masukkan
ID
) ... 56
Gambar 4.30 Pengubahan
Form
Peserta Praktikum (mengubah data) ... 57
Gambar 4.31 Hasil pengubahan
Form
Peserta Praktikum ... 57
Gambar 4.32 Penghapusan
Form
Peserta Praktikum (masukkan
ID
) ... 58
Gambar 4.33 Hasil penghapusan
Form
Peserta Praktikum ... 58
Gambar 4.34 Pemilihan praktikum yang akan dicari jadwal optimalnya ... 59
Gambar 4.35 Jadwal mata kuliah tambahan pengujian ketiga ... 60
Gambar 4.36 Notice jadwal yang memiliki nilai bentrok 0(nol) ... 60
Gambar 4.37 Jadwal mata kuliah tambahan pengujian keempat ... 61
Gambar 4.38 Notice jadwal yang memiliki nilai bentrok minimum ... 61
Gambar 4.39 Jadwal yang akan disimpan dalam database ... 62
(7)
vii
Universitas Kristen Maranatha
DAFTAR TABEL
Tabel 2.1
Perbandingan
AI
dan Program Konvensional ... 21
Tabel 3.1
Tabel Mata Kuliah... 27
Tabel 3.2
Tabel Mata Kuliah Peserta ... 28
Tabel 3.3
Tabel Praktikum ... 28
Tabel 3.4
Tabel Peserta Praktikum ... 29
(8)
LAMPIRAN A
(9)
A-1
Module ModConnection
Imports MySql.Data.MySqlClient Module ModConnection
Public Function conString() As String
conString = ("server=localhost;user id=root;database=db_jadwalpraktikum;pooling=false;connection timeout=5") ' Setting string buat koneksi ke database
End Function
Public Function testcon() As Boolean Try
Dim Conn As New MySqlConnection Conn.ConnectionString = conString() Conn.Open()
If Conn.State = ConnectionState.Open Then testcon = True
Conn.Close() Else
testcon = False
MsgBox("Tidak Terhubung", MsgBoxStyle.Critical, "Warning!!") End If
Catch ex As Exception testcon = False
MsgBox("Tidak Terhubung", MsgBoxStyle.Critical, "Warning!!") End Try
End Function
Public Function SQLTable(ByVal Source As String) As DataTable 'buat select data2 pada tabel Try
Dim conn As New MySqlConnection
conn.ConnectionString = ("server=localhost;user id=root;database=db_jadwalpraktikum") 'bikin data adapter....
Dim Adapter As New MySqlDataAdapter(Source, conn.connectionString) Dim DT As New DataTable
Adapter.Fill(DT) SQLTable = DT
Catch ex As MySqlException MsgBox(ex.Message) SQLTable = Nothing End Try
End Function
Public Function ExecSQL(ByVal SQLCommand As String) As Boolean 'perintah simpan, ubah, hapus Dim Con As New MySqlConnection
Dim Cmd As New MySqlCommand Try
Con.ConnectionString = ("server=localhost;user id=root;database=db_jadwalpraktikum") Con.Open()
Cmd.CommandText = SQLCommand Cmd.Connection = Con
Cmd.ExecuteNonQuery() Con.Close()
ExecSQL = True
Catch ex As MySqlException MsgBox(ex.Message) ExecSQL = False
If Con.State = ConnectionState.Open Then Con.Close() End Try
End Function End Module
(10)
A-2
Form Main Menu
Public Class frmMainMenuPrivate Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click frmMataKuliah.Show()
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click frmMataKuliahPeserta.Show()
End Sub
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click frmPraktikum.Show()
End Sub
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click frmPesertaPraktikum.Show()
End Sub
Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click frmHasilProses.Show()
End Sub End Class
Form
Mata Kuliah
Public Class frmMataKuliah
Dim kodemk, matakuliah, kelas, hari, jammasuk, jamkeluar As String Dim masukkanID As Integer
Private Sub frmMataKuliah_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
gridMataKuliah.DataSource = SQLTable("SELECT * FROM `mata kuliah`") End Sub
Private Sub btSimpan_Click(sender As System.Object, e As System.EventArgs) Handles btSimpan.Click
kodemk = txtKodeMataKuliah.Text matakuliah = txtNamaMataKuliah.Text hari = cmbHari.SelectedItem
kelas = txtKelas.Text
jammasuk = cmbJamMasuk.SelectedItem jamkeluar = cmbJamKeluar.SelectedItem Try
If String.IsNullOrEmpty(kodemk) Then
MsgBox("Anda Belum Mengisi Kode Mata Kuliah!!") Else
ExecSQL("Insert Into `mata kuliah` Values('" & "','" & kodemk & "','" & matakuliah & "', '" & hari & "','" & kelas & "','" & jammasuk & "','" & jamkeluar & "')")
gridMataKuliah.DataSource = SQLTable("SELECT * FROM `mata kuliah`") txtKodeMataKuliah.Text = Nothing
txtNamaMataKuliah.Text = Nothing cmbHari.Text = Nothing
txtKelas.Text = Nothing
cmbJamMasuk.SelectedItem = Nothing cmbJamKeluar.SelectedItem = Nothing End If
Catch ex As Exception MsgBox(ex.Message)
(11)
A-3
End TryEnd Sub
Private Sub btUbah_Click(sender As System.Object, e As System.EventArgs) Handles btUbah.Click If btUbah.Text = "&Ubah" Then 'Proses pemanggilan data (ubah)
Dim i As Integer
masukkanID = InputBox("Masukkan ID Mata Kuliah", "Ubah Data", "") masukkanID = masukkanID - 1 'Decrement
txtKodeMataKuliah.Text = gridMataKuliah.Item(1, masukkanID).Value txtNamaMataKuliah.Text = gridMataKuliah.Item(2, masukkanID).Value txtKelas.Text = gridMataKuliah.Item(4, masukkanID).Value
'loop untuk penyamaan pilihan hari, jam masuk, dan jam keluar For i = 0 To (cmbHari.Items.Count - 1)
If gridMataKuliah.Item(3, masukkanID).Value = cmbHari.Items(i).ToString Then cmbHari.SelectedIndex = i
End If Next i
For i = 0 To (cmbJamMasuk.Items.Count - 1)
If (gridMataKuliah.Item(5, masukkanID).Value.ToString) = cmbJamMasuk.Items(i).ToString Then
cmbJamMasuk.SelectedIndex = i End If
Next i
For i = 0 To (cmbJamKeluar.Items.Count - 1)
If (gridMataKuliah.Item(6, masukkanID).Value.ToString) = cmbJamKeluar.Items(i).ToString Then
cmbJamKeluar.SelectedIndex = i End If
Next i
btSimpan.Enabled = False btHapus.Enabled = False btUbah.Text = "Simpan" Else
'proses simpan
kodemk = txtKodeMataKuliah.Text matakuliah = txtNamaMataKuliah.Text hari = cmbHari.SelectedItem
kelas = txtKelas.Text
jammasuk = cmbJamMasuk.SelectedItem jamkeluar = cmbJamKeluar.SelectedItem Try
If String.IsNullOrEmpty(kodemk) Then
MsgBox("Anda Belum Mengisi Kode Mata Kuliah!!") Else
ExecSQL("Update `mata kuliah` SET `Nama Mata Kuliah`= '" & matakuliah & "', `Hari`= '" & hari & "', `Kelas`= '" & kelas _
& "', `Jam Masuk`= '" & jammasuk & "', `Jam Keluar`= '" & jamkeluar & "' WHERE `ID` = '" & (masukkanID + 1) & "'")
gridMataKuliah.DataSource = SQLTable("SELECT * FROM `mata kuliah`") txtKodeMataKuliah.Text = Nothing
txtNamaMataKuliah.Text = Nothing cmbHari.Text = Nothing
txtKelas.Text = Nothing
cmbJamMasuk.SelectedItem = Nothing cmbJamKeluar.SelectedItem = Nothing btSimpan.Enabled = True
btHapus.Enabled = True btUbah.Text = "&Ubah" End If
(12)
A-4
MsgBox(ex.Message)End Try End If End Sub
Private Sub btHapus_Click(sender As System.Object, e As System.EventArgs) Handles btHapus.Click Try
masukkanID = InputBox("Masukkan ID Mata Kuliah", "Hapus Data", "") ExecSQL("Delete FROM `mata kuliah` WHERE `ID` = '" & masukkanID & "'") gridMataKuliah.DataSource = SQLTable("SELECT * FROM `mata kuliah`") Dim i As Integer
For i = 0 To (gridMataKuliah.RowCount - 1)
ExecSQL("UPDATE `mata kuliah` SET `ID` = '" & (i + 1) & "' WHERE `Kode Mata Kuliah` = '" & (gridMataKuliah.Item(1, i).Value) & "' and `Kelas` = '" & (gridMataKuliah.Item(4, i).Value) & "'") gridMataKuliah.DataSource = SQLTable("SELECT * FROM `mata kuliah`")
Next i
'Update Auto Increment untuk kolom ID
ExecSQL("ALTER TABLE `mata kuliah` AUTO_INCREMENT = " & (gridMataKuliah.RowCount))
gridMataKuliah.DataSource = SQLTable("SELECT * FROM `mata kuliah`") Catch ex As Exception
MsgBox(ex.Message) End Try
End Sub End Class
Form
Mata Kuliah Peserta
Public Class frmMataKuliahPeserta Dim masukkanID, IDmk As Integer Dim NRP, Kode, Nama, Kelas As String
Private Sub frmMataKuliahPeserta_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'gridMataKuliahPeserta.DataSource = SQLTable("SELECT * FROM `peserta_mk`")
gridMataKuliahPeserta.DataSource = SQLTable("SELECT `peserta_mk`.*, `mata kuliah`.`Kode Mata Kuliah`, `mata kuliah`.`Nama Mata Kuliah` FROM `peserta_mk` INNER JOIN `mata kuliah` ON `mata kuliah`.ID = `peserta_mk`.ID_MK ORDER BY `ID` ")
gridBaca.DataSource = SQLTable("Select * FROM `mata kuliah`") Dim i, j As Integer
Dim Ada As Boolean
For i = 0 To (gridBaca.RowCount - 2) Kode = gridBaca.Item(1, i).Value
'Mengecek apakah kode mata kuliah sudah ada atau belum di cmbKodeMataKuliah (jangan sampai ada pengulangan)
Ada = False
For j = 0 To cmbKodeMataKuliah.Items.Count - 1 If Kode = cmbKodeMataKuliah.Items(j).ToString Then Ada = True
End If Next j
If Ada = False Then
cmbKodeMataKuliah.Items.Add(Kode) End If
Next i End Sub
Private Sub cmbKodeMataKuliah_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbKodeMataKuliah.SelectedIndexChanged
(13)
A-5
Dim i As IntegerIf cmbKodeMataKuliah.SelectedIndex = -1 Then cmbKelas.SelectedIndex = -1
Label4.Text = "Tampilan Nama Mata Kuliah" Else
cmbKelas.Items.Clear()
For i = 0 To (gridBaca.RowCount - 2) Kode = gridBaca.Item(1, i).Value
If Kode = cmbKodeMataKuliah.SelectedItem.ToString Then
Label4.Text = gridBaca.Item(2, i).Value 'menampilkan nama mata kuliah dari kode mata kuliah yang dipilih
cmbKelas.Items.Add(gridBaca.Item(4, i).Value) End If Next i End If End Sub
Private Sub btSimpan_Click(sender As System.Object, e As System.EventArgs) Handles btSimpan.Click
Dim i As Integer
If cmbKodeMataKuliah.SelectedIndex > -1 Then 'mengecek apakah cmbkodematakuliah sudah dipilih atau belum
For i = 0 To (gridBaca.RowCount - 2) Kode = gridBaca.Item(1, i).Value Kelas = gridBaca.Item(4, i).Value
If cmbKodeMataKuliah.SelectedItem.ToString = Kode And cmbKelas.SelectedItem.ToString = Kelas Then
IDmk = i + 1 End If Next i
NRP = txtNRP.Text Try
If String.IsNullOrEmpty(NRP) Then MsgBox("Anda Belum Mengisi NRP!!") Else
ExecSQL("Insert Into `peserta_mk` Values('" & "','" & NRP & "','" & IDmk & "')") 'gridMataKuliahPeserta.DataSource = SQLTable("SELECT * FROM `peserta_mk`") gridMataKuliahPeserta.DataSource = SQLTable("SELECT `peserta_mk`.*, `mata
kuliah`.`Kode Mata Kuliah`, `mata kuliah`.`Nama Mata Kuliah` FROM `peserta_mk` INNER JOIN `mata kuliah` ON `mata kuliah`.ID = `peserta_mk`.ID_MK ORDER BY `ID`")
txtNRP.Text = Nothing
cmbKodeMataKuliah.SelectedIndex = -1 'cmbKelas.SelectedIndex = 0
End If
Catch ex As Exception MsgBox(ex.Message) End Try
Else
MsgBox("Kode Mata Kuliah Belum Terpilih") End If
End Sub
Private Sub btUbah_Click(sender As System.Object, e As System.EventArgs) Handles btUbah.Click If btUbah.Text = "&Ubah" Then 'Proses pemanggilan data (ubah)
Dim i As Integer
masukkanID = InputBox("Masukkan ID Mata Kuliah", "Ubah Data", "") masukkanID = masukkanID - 1 'Decrement
txtNRP.Text = gridMataKuliahPeserta.Item(1, masukkanID).Value IDmk = gridMataKuliahPeserta.Item(2, masukkanID).Value IDmk = IDmk - 1
(14)
A-6
Nama = gridBaca.Item(2, IDmk).Value Kelas = gridBaca.Item(4, IDmk).Value Label4.Text = NamaFor i = 0 To (cmbKodeMataKuliah.Items.Count - 1) 'loop untuk penyamaan Kode Mata Kuliah If Kode = cmbKodeMataKuliah.Items(i).ToString Then
cmbKodeMataKuliah.SelectedIndex = i End If
Next i
For i = 0 To (cmbKelas.Items.Count - 1) 'loop untuk penyamaan Kode Mata Kuliah If Kelas = cmbKelas.Items(i).ToString Then
cmbKelas.SelectedIndex = i End If
Next i
btSimpan.Enabled = False btHapus.Enabled = False btUbah.Text = "Simpan" Else
' Proses Simpan (Update)
For i = 0 To (gridBaca.RowCount - 2) Kode = gridBaca.Item(1, i).Value Kelas = gridBaca.Item(4, i).Value
If cmbKodeMataKuliah.SelectedItem.ToString = Kode And cmbKelas.SelectedItem.ToString = Kelas Then
IDmk = i + 1 End If Next i
NRP = txtNRP.Text Try
If String.IsNullOrEmpty(NRP) Then MsgBox("Anda Belum Mengisi NRP!!") Else
ExecSQL("Update `peserta_mk` SET `NRP`= '" & NRP & "', `ID_MK`= '" & IDmk & "' WHERE `ID` = '" & (masukkanID + 1) & "'")
'gridMataKuliahPeserta.DataSource = SQLTable("SELECT * FROM `peserta_mk`") gridMataKuliahPeserta.DataSource = SQLTable("SELECT `peserta_mk`.*, `mata
kuliah`.`Kode Mata Kuliah`, `mata kuliah`.`Nama Mata Kuliah` FROM `peserta_mk` INNER JOIN `mata kuliah` ON `mata kuliah`.ID = `peserta_mk`.ID_MK ORDER BY `ID`")
txtNRP.Text = Nothing
cmbKodeMataKuliah.SelectedIndex = 0 cmbKelas.SelectedIndex = 0
btSimpan.Enabled = True btHapus.Enabled = True btUbah.Text = "&Ubah" End If
Catch ex As Exception MsgBox(ex.Message) End Try
End If End Sub
Private Sub btHapus_Click(sender As System.Object, e As System.EventArgs) Handles btHapus.Click Try
masukkanID = InputBox("Masukkan ID Peserta", "Hapus Data", "")
ExecSQL("Delete FROM `peserta_mk` WHERE `ID` = '" & masukkanID & "'") 'gridMataKuliahPeserta.DataSource = SQLTable("SELECT * FROM `peserta_mk`")
gridMataKuliahPeserta.DataSource = SQLTable("SELECT `peserta_mk`.*, `mata kuliah`.`Kode Mata Kuliah`, `mata kuliah`.`Nama Mata Kuliah` FROM `peserta_mk` INNER JOIN `mata kuliah` ON `mata kuliah`.ID = `peserta_mk`.ID_MK ORDER BY `ID`")
Dim i As Integer 'Memperbaiki urutan ID
(15)
A-7
ExecSQL("UPDATE `peserta_mk` SET `ID` = '" & (i + 1) & "' WHERE `NRP` = '" & (gridMataKuliahPeserta.Item(1, i).Value) & "' and `ID_MK` = '" & (gridMataKuliahPeserta.Item(2, i).Value) & "'")
'gridMataKuliahPeserta.DataSource = SQLTable("SELECT * FROM `peserta_mk`") gridMataKuliahPeserta.DataSource = SQLTable("SELECT `peserta_mk`.*, `mata
kuliah`.`Kode Mata Kuliah`, `mata kuliah`.`Nama Mata Kuliah` FROM `peserta_mk` INNER JOIN `mata kuliah` ON `mata kuliah`.ID = `peserta_mk`.ID_MK ORDER BY `ID`")
Next i
'Update Auto Increment untuk kolom ID
ExecSQL("ALTER TABLE `peserta_mk` AUTO_INCREMENT = " & (gridMataKuliahPeserta.RowCount))
'gridMataKuliahPeserta.DataSource = SQLTable("SELECT * FROM `peserta_mk`")
gridMataKuliahPeserta.DataSource = SQLTable("SELECT `peserta_mk`.*, `mata kuliah`.`Kode Mata Kuliah`, `mata kuliah`.`Nama Mata Kuliah` FROM `peserta_mk` INNER JOIN `mata kuliah` ON `mata kuliah`.ID = `peserta_mk`.ID_MK ORDER BY `ID`")
Catch ex As Exception MsgBox(ex.Message) End Try
End Sub End Class
Form
Praktikum
Public Class frmPraktikum Dim namaprak As String Dim masukkanID As Integer
Private Sub frmPraktikum_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
gridPraktikum.DataSource = SQLTable("SELECT `ID`,`NAMA PRAKTIKUM` FROM `praktikum`")
End Sub
Private Sub btSimpan_Click(sender As System.Object, e As System.EventArgs) Handles btSimpan.Click
namaprak = txtNamaPraktikum.Text Try
If String.IsNullOrEmpty(namaprak) Then
MsgBox("Anda Belum Mengisi Nama Praktikum!!") Else
ExecSQL("Insert Into `praktikum` Values('" & "','" & namaprak & "','" & "','" & "','" & "')") gridPraktikum.DataSource = SQLTable("SELECT `ID`,`NAMA PRAKTIKUM` FROM `praktikum`")
txtNamaPraktikum.Text = Nothing End If
Catch ex As Exception MsgBox(ex.Message) End Try
End Sub
Private Sub btUbah_Click(sender As System.Object, e As System.EventArgs) Handles btUbah.Click If btUbah.Text = "&Ubah" Then 'Proses pemanggilan data (ubah)
masukkanID = InputBox("Masukkan ID Mata Kuliah", "Ubah Data", "") masukkanID = masukkanID - 1 'Decrement
txtNamaPraktikum.Text = gridPraktikum.Item(1, masukkanID).Value btSimpan.Enabled = False
btHapus.Enabled = False btUbah.Text = "Simpan" Else
(16)
A-8
namaprak = txtNamaPraktikum.Text TryIf String.IsNullOrEmpty(namaprak) Then
MsgBox("Anda Belum Mengisi Nama Praktikum!!") Else
ExecSQL("Update `praktikum` SET `Nama Praktikum`= '" & namaprak & "' WHERE `ID` = '" & (masukkanID + 1) & "'")
gridPraktikum.DataSource = SQLTable("SELECT `ID`,`NAMA PRAKTIKUM` FROM `praktikum`")
txtNamaPraktikum.Text = Nothing btSimpan.Enabled = True
btHapus.Enabled = True btUbah.Text = "&Ubah" End If
Catch ex As Exception MsgBox(ex.Message) End Try
End If End Sub
Private Sub btHapus_Click(sender As System.Object, e As System.EventArgs) Handles btHapus.Click Try
masukkanID = InputBox("Masukkan ID Praktikum", "Hapus Data", "") ExecSQL("Delete FROM `praktikum` WHERE `ID` = '" & masukkanID & "'") gridPraktikum.DataSource = SQLTable("SELECT `ID`,`NAMA PRAKTIKUM` FROM `praktikum`")
Dim i As Integer
For i = 0 To (gridPraktikum.RowCount - 1)
ExecSQL("UPDATE `praktikum` SET `ID` = '" & (i + 1) & "' WHERE `Nama Praktikum` = '" & (gridPraktikum.Item(1, i).Value) & "' ")
gridPraktikum.DataSource = SQLTable("SELECT `ID`,`NAMA PRAKTIKUM` FROM `praktikum`")
Next i
'Update Auto Increment untuk kolom ID
ExecSQL("ALTER TABLE `praktikum` AUTO_INCREMENT = " & (gridPraktikum.RowCount))
gridPraktikum.DataSource = SQLTable("SELECT `ID`,`NAMA PRAKTIKUM`FROM `praktikum`")
Catch ex As Exception MsgBox(ex.Message) End Try
End Sub End Class
Form
Peserta Praktikum
Public Class frmPesertaPraktikum Dim masukkanID, IDPrak As Integer Dim NRP, Prak As String
Dim Namaprak As String
Private Sub frmPesertaPraktikum_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'gridPesertaPraktikum.DataSource = SQLTable("SELECT * FROM `peserta_prak`") gridPesertaPraktikum.DataSource = SQLTable("SELECT peserta_prak.*, `praktikum`.`Nama Praktikum` FROM `peserta_prak` INNER JOIN `praktikum` ON `praktikum`.`ID` =
`peserta_prak`.`ID_Prak` ORDER BY `ID`")
gridBaca.DataSource = SQLTable("SELECT `ID`,`NAMA PRAKTIKUM` FROM `praktikum`") Dim i, j As Integer
(17)
A-9
For i = 0 To (gridBaca.RowCount - 2)Namaprak = gridBaca.Item(1, i).Value
'Mengecek apakah nama praktikum sudah ada atau belum di cmbPraktkikum (jangan sampai ada pengulangan)
Ada = False
For j = 0 To (cmbPraktikum.Items.Count - 1)
If Namaprak = cmbPraktikum.Items(j).ToString Then Ada = True
End If Next j
If Ada = False Then
cmbPraktikum.Items.Add(Namaprak) End If
Next i End Sub
Private Sub btSimpan_Click(sender As System.Object, e As System.EventArgs) Handles btSimpan.Click
Dim i As Integer
For i = 0 To (gridBaca.RowCount - 2) prak = gridBaca.Item(1, i).Value
If cmbPraktikum.SelectedItem.ToString = prak Then IDPrak = i + 1
End If Next i
NRP = txtNRP.Text Try
If String.IsNullOrEmpty(NRP) Then MsgBox("Anda Belum Mengisi NRP!!") Else
ExecSQL("Insert Into `peserta_prak` Values('" & "','" & NRP & "','" & IDPrak & "')") 'gridPesertaPraktikum.DataSource = SQLTable("SELECT * FROM `peserta_prak`")
gridPesertaPraktikum.DataSource = SQLTable("SELECT peserta_prak.*, `praktikum`.`Nama Praktikum` FROM peserta_prak INNER JOIN praktikum ON praktikum.ID = peserta_prak.ID_Prak ORDER BY `ID`")
txtNRP.Text = Nothing
cmbPraktikum.SelectedItem = Nothing End If
Catch ex As Exception MsgBox(ex.Message) End Try
End Sub
Private Sub btUbah_Click(sender As System.Object, e As System.EventArgs) Handles btUbah.Click If btUbah.Text = "&Ubah" Then 'Proses pemanggilan data (ubah)
Dim i As Integer
masukkanID = InputBox("Masukkan ID Praktikum", "Ubah Data", "") masukkanID = masukkanID - 1 'Decrement
txtNRP.Text = gridPesertaPraktikum.Item(1, masukkanID).Value IDPrak = gridPesertaPraktikum.Item(2, masukkanID).Value IDPrak = IDPrak - 1
Namaprak = gridBaca.Item(1, IDPrak).Value
For i = 0 To (cmbPraktikum.Items.Count - 1) 'loop untuk penyamaan nama praktikum If Namaprak = cmbPraktikum.Items(i).ToString Then
cmbPraktikum.SelectedIndex = i End If
Next i
btSimpan.Enabled = False btHapus.Enabled = False btUbah.Text = "Simpan" Else
(18)
A-10
For i = 0 To (gridBaca.RowCount - 2) Prak = gridBaca.Item(1, i).ValueIf cmbPraktikum.SelectedItem.ToString = Prak Then IDPrak = i + 1
End If Next i
NRP = txtNRP.Text Try
If String.IsNullOrEmpty(NRP) Then MsgBox("Anda Belum Mengisi NRP!!") Else
ExecSQL("Update `peserta_prak` SET `NRP`= '" & NRP & "', `ID_Prak`= '" & IDPrak & "' WHERE `ID` = '" & (masukkanID + 1) & "'")
'gridPesertaPraktikum.DataSource = SQLTable("SELECT * FROM `peserta_prak`") gridPesertaPraktikum.DataSource = SQLTable("SELECT peserta_prak.*,
`praktikum`.`Nama Praktikum` FROM peserta_prak INNER JOIN praktikum ON praktikum.ID = peserta_prak.ID_Prak ORDER BY `ID`")
txtNRP.Text = Nothing
cmbPraktikum.SelectedItem = Nothing btSimpan.Enabled = True
btHapus.Enabled = True btUbah.Text = "&Ubah" End If
Catch ex As Exception MsgBox(ex.Message) End Try
End If End Sub
Private Sub btHapus_Click(sender As System.Object, e As System.EventArgs) Handles btHapus.Click Try
masukkanID = InputBox("Masukkan ID Peserta Praktikum", "Hapus Data", "") ExecSQL("Delete FROM `peserta_prak` WHERE `ID` = '" & masukkanID & "'") 'gridPesertaPraktikum.DataSource = SQLTable("SELECT * FROM `peserta_prak`")
gridPesertaPraktikum.DataSource = SQLTable("SELECT peserta_prak.*, `praktikum`.`Nama Praktikum` FROM `peserta_prak` INNER JOIN `praktikum` ON `praktikum`.ID =
`peserta_prak`.ID_Prak ORDER BY `ID`") Dim i As Integer
' Memperbaiki Urutan ID
For i = 0 To (gridPesertaPraktikum.RowCount - 1)
ExecSQL("UPDATE `peserta_prak` SET `ID` = '" & (i + 1) & "' WHERE `NRP` = '" & (gridPesertaPraktikum.Item(1, i).Value) & "' and `ID_Prak` = '" & (gridPesertaPraktikum.Item(2, i).Value) & "'")
'gridPesertaPraktikum.DataSource = SQLTable("SELECT * FROM `peserta_prak`") gridPesertaPraktikum.DataSource = SQLTable("SELECT peserta_prak.*, `praktikum`.`Nama Praktikum` FROM peserta_prak INNER JOIN praktikum ON praktikum.ID = peserta_prak.ID_Prak ORDER BY `ID`")
Next i
'Update Auto Increment untuk kolom ID
ExecSQL("ALTER TABLE `peserta_prak` AUTO_INCREMENT = " & (gridPesertaPraktikum.RowCount))
'gridPesertaPraktikum.DataSource = SQLTable("SELECT * FROM `peserta_prak`")
gridPesertaPraktikum.DataSource = SQLTable("SELECT peserta_prak.*, `praktikum`.`Nama Praktikum` FROM `peserta_prak` INNER JOIN `praktikum` ON `praktikum`.ID =
`peserta_prak`.ID_Prak ORDER BY `ID`") Catch ex As Exception
MsgBox(ex.Message) End Try
End Sub End Class
(19)
A-11
Form
Hasil Proses
Public Class frmHasilProses
Const Max_Possibility = 101 Const Max_Child = 101
Dim arr_bentrok(Max_Child) As Integer
Dim arr_hari(Max_Child), arr_jammasuk(Max_Child), arr_jamkeluar(Max_Child) As String Dim arr_table_hari(Max_Possibility), arr_table_jammasuk(Max_Possibility),
arr_table_jamkeluar(Max_Possibility) As String
Dim arr_open_indeks(Max_Possibility), arr_close_indeks(Max_Possibility) As Integer Dim tmp As Integer 'sebagai tempat penyimpanan sementara (TEMPORARY)
Private Function CekBentrok(IDprak As String, hari_prak As String, strjammasuk_prak As String, strjamkeluar_prak As String) As Integer
Dim i, j, k, total_bentrok As Integer
Dim IDCek, IDPrakCek, hari_mk, strjammasuk_mk, strjamkeluar_mk As String 'hasil pembacaan databse
Dim wktjammasuk_mk, wktjamkeluar_mk, wktjammasuk_prak, wktjamkeluar_prak As Date 'Hasil Konversi ke waktu
Dim dtkjammasuk_mk, dtkjamkeluar_mk, dtkjammasuk_prak, dtkjamkeluar_prak As Long ' sebagai satuan detik
Dim bentrok As Boolean Dim debug1, debug2 As String debug2 = "" 'inisialisasi hari_mk = ""
strjamkeluar_mk = "" strjammasuk_mk = ""
'ambil ID_Prak
For i = 0 To gridBacaPraktikum.RowCount - 1
If cmbNamaPraktikum.SelectedItem = gridBacaPraktikum.Item(1, i).Value Then IDprak = gridBacaPraktikum.Item(0, i).Value
End If Next i
'MsgBox("ID Prak adalah : " & IDprak) tmp = IDprak
'proses jadwal
gridBacaPesertaPrak.DataSource = SQLTable("SELECT * FROM `peserta_prak`") gridBacaPesertaMK.DataSource = SQLTable("SELECT * FROM `peserta_mk`") gridBacaMataKuliah.DataSource = SQLTable("SELECT * FROM `mata kuliah`") For i = 0 To (gridBacaPesertaPrak.RowCount - 2) ' for NRP
If IDprak = gridBacaPesertaPrak.Item(2, i).Value Then bentrok = False
'ListBox1.Items.Add(gridBacaPesertaPrak.Item(1, i).Value) debug1 = gridBacaPesertaPrak.Item(1, i).Value
For j = 0 To (gridBacaPesertaMK.RowCount - 2) 'For ID_MK
If gridBacaPesertaPrak.Item(1, i).Value = gridBacaPesertaMK.Item(1, j).Value Then 'ListBox2.Items.Add(gridBacaPesertaMK.Item(2, j).Value)
IDCek = gridBacaPesertaMK.Item(2, j).Value
For k = 0 To (gridBacaMataKuliah.RowCount - 2) 'For mata kuliah If IDCek = gridBacaMataKuliah.Item(0, k).Value Then
hari_mk = gridBacaMataKuliah.Item(3, k).Value.ToString strjammasuk_mk = gridBacaMataKuliah.Item(5, k).Value.ToString strjamkeluar_mk = gridBacaMataKuliah.Item(6, k).Value.ToString
wktjammasuk_mk = CDate(strjammasuk_mk) 'mengubah dari string ke format date wktjamkeluar_mk = CDate(strjamkeluar_mk)
(20)
A-12
wktjammasuk_prak = CDate(strjammasuk_prak) wktjamkeluar_prak = CDate(strjamkeluar_prak)
dtkjammasuk_mk = (Hour(wktjammasuk_mk) * 3600 + Minute(wktjammasuk_mk) * 60 + Second(wktjammasuk_mk)) 'mengubah semuanya ke detik
dtkjamkeluar_mk = (Hour(wktjamkeluar_mk) * 3600 + Minute(wktjamkeluar_mk) * 60 + Second(wktjamkeluar_mk))
dtkjammasuk_prak = (Hour(wktjammasuk_prak) * 3600 + Minute(wktjammasuk_prak) * 60 + Second(wktjammasuk_prak))
dtkjamkeluar_prak = (Hour(wktjamkeluar_prak) * 3600 + Minute(wktjamkeluar_prak) * 60 + Second(wktjamkeluar_prak))
End If Next k
If hari_mk = hari_prak Then ' pengecekkan bentrok atau tidak pada harinya terlebih dahulu, jika bentrok dilanjutkan pengecekkan jam masuk dan jam keluar
If ((dtkjammasuk_mk <= dtkjammasuk_prak) And (dtkjamkeluar_mk > dtkjammasuk_prak)) Or ((dtkjammasuk_mk > dtkjammasuk_prak) And (dtkjamkeluar_prak > dtkjammasuk_mk)) Then
bentrok = True debug2 = IDCek End If
End If End If Next j
'---mengecek tabel praktikum dan mana yang diambil oleh peserta (jika dia ada 2 praktikum)---
For j = 0 To gridBacaPesertaPrak.RowCount - 1 ' Cari praktikum lainnya yang dia ambil
If (gridBacaPesertaPrak.Item(1, j).Value = gridBacaPesertaPrak.Item(1, i).Value) And (gridBacaPesertaPrak.Item(2, j).Value <> IDprak) Then ' NRP sama dan ID_PRAK tidak boleh sama dengan yg diproses!
' Benar, ini adalah praktikum lainnya yang dia ambil IDPrakCek = gridBacaPesertaPrak.Item(2, j).Value For k = 0 To gridBacaPraktikum.RowCount - 1 ' Ambil jadwalnya, apabila ID_PRAKnya = yg_dicek If gridBacaPraktikum.Item(0, k).Value = IDPrakCek Then hari_mk = gridBacaPraktikum.Item(2, k).Value strjammasuk_mk = gridBacaPraktikum.Item(3, k).Value strjamkeluar_mk = gridBacaPraktikum.Item(4, k).Value wktjammasuk_mk = CDate(strjammasuk_mk)
wktjamkeluar_mk = CDate(strjamkeluar_mk) wktjammasuk_prak = CDate(strjammasuk_prak) wktjamkeluar_prak = CDate(strjamkeluar_prak)
dtkjammasuk_mk = (Hour(wktjammasuk_mk) * 3600 + Minute(wktjammasuk_mk) * 60 + Second(wktjammasuk_mk))
dtkjamkeluar_mk = (Hour(wktjamkeluar_mk) * 3600 + Minute(wktjamkeluar_mk) * 60 + Second(wktjamkeluar_mk))
dtkjammasuk_prak = (Hour(wktjammasuk_prak) * 3600 + Minute(wktjammasuk_prak) * 60 + Second(wktjammasuk_prak))
dtkjamkeluar_prak = (Hour(wktjamkeluar_prak) * 3600 + Minute(wktjamkeluar_prak) * 60 + Second(wktjamkeluar_prak))
(21)
A-13
Next kIf hari_mk = hari_prak Then ' pengecekkan bentrok atau tidak pada harinya terlebih dahulu, jika bentrok dilanjutkan pengecekkan jam masuk dan jam keluar
If ((dtkjammasuk_mk <= dtkjammasuk_prak) And (dtkjamkeluar_mk > dtkjammasuk_prak)) Or ((dtkjammasuk_mk > dtkjammasuk_prak) And (dtkjamkeluar_prak > dtkjammasuk_mk)) Then
bentrok = True debug2 = IDPrakCek End If
End If End If Next j
'---
'jika NRP ini memiliki Mata Kuliah yang bentrok, maka terhitung bentrok If bentrok = True Then
total_bentrok = total_bentrok + 1
ListBox1.Items.Add(debug1 & " : " & debug2) End If
End If Next i
Return total_bentrok End Function
Private Function ubahkehari(indeks As Integer) As String Dim hasil As String
hasil = ""
Select Case indeks Case 0
hasil = "Senin" Case 1
hasil = "Selasa" Case 2
hasil = "Rabu" Case 3
hasil = "Kamis" Case 4
hasil = "Jumat" Case 5
hasil = "Sabtu" End Select Return hasil End Function
Private Function ubahkejam(nilai As Double) As String Dim jam, menit, detik As Integer
Dim hasil As String hasil = ""
jam = Int(nilai) 'pembulatan nilai
menit = Int((nilai - jam) * 60) ' hitung sisa koma, 1 jam = 60 mnt detik = 0
hasil = Format(jam, "00") & ":" & Format(menit, "00") & ":" & Format(detik, "00") Return hasil
End Function
Private Sub Resetarray() Dim i As Integer
(22)
A-14
For i = 0 To Max_Possibilityarr_table_hari(i) = "" arr_table_jammasuk(i) = "" arr_table_jamkeluar(i) = "" Next i
For i = 0 To Max_Child arr_bentrok(1) = 0
arr_hari(i) = "" arr_jammasuk(i) = "" arr_jamkeluar(i) = "" arr_open_indeks(i) = 0 arr_close_indeks(i) = 0 Next i
End Sub
Private Sub Isiopenlist() Dim i, j, indeks As Integer
Dim offset, durasi, periode As Double For i = 0 To 5 'Untuk hari
For j = 0 To 16 'Untuk jam, tiap j mewakili 1/2 jam indeks = (i * 17) + j
offset = 7 periode = (j / 2) durasi = 2.5
arr_open_indeks(indeks) = indeks arr_table_hari(indeks) = ubahkehari(i)
arr_table_jammasuk(indeks) = ubahkejam(offset + periode) arr_table_jamkeluar(indeks) = ubahkejam(offset + periode + durasi) Next j
Next i 'Clear List Box lbOpen.Items.Clear() lbClose.Items.Clear()
'isi listbox open list For i = 0 To Max_Child lbOpen.Items.Add(i) Next
End Sub
Private Sub btProses_Click(sender As System.Object, e As System.EventArgs) Handles btProses.Click Dim i As Integer
Dim acakindeks As Integer Dim Sudahada As Boolean Dim hariBaca As String Dim jammasukBaca As String Dim jamkeluarBaca As String Dim bentrok As Integer Dim goal As Boolean
Dim indeksgoal As Integer 'penyimpan nilai indeks yg ditemukan goal Resetarray()
Isiopenlist() goal = False
(23)
A-15
'---ALGORITMA BEST FIRST SEARCH--- While ((lbOpen.Items.Count > 0) And (goal = False)) 'Selama OPEN masih ada peluang DAN Goal masih false
acakkembali:
'Bangkitkan Nilai Acak untuk memilih jadwal Randomize()
acakindeks = Int(Rnd() * 102) ' 0-101
'Check di dalam close list, apakah sudah ada? Sudahada = False ' asumsi awal
For i = 0 To lbClose.Items.Count - 1
If lbClose.Items(i) = CStr(acakindeks) Then Sudahada = True
End If Next i
'Jika masih ada, ulangi, acak lagi If Sudahada = True Then GoTo acakkembali End If
'Tambahkan kedalam Close List lbClose.Items.Add(CStr(acakindeks)) 'Buang dari open list
lbOpen.Items.Remove(acakindeks)
'ambil hari dan jam dari tabel open kemungkinan berdasarkan indeks yg telah diacak hariBaca = arr_table_hari(acakindeks)
jammasukBaca = arr_table_jammasuk(acakindeks) jamkeluarBaca = arr_table_jamkeluar(acakindeks) 'Kalkulasi dan hitung nilai bentrok
bentrok = CekBentrok(cmbIDPrak.Items(cmbNamaPraktikum.SelectedIndex).ToString, hariBaca, jammasukBaca, jamkeluarBaca)
'Masukkan ke dalam array asli
'Indeks diset menggunakan lbClose.Items.Count arr_hari(lbClose.Items.Count - 1) = hariBaca
arr_jammasuk(lbClose.Items.Count - 1) = jammasukBaca arr_jamkeluar(lbClose.Items.Count - 1) = jamkeluarBaca arr_bentrok(lbClose.Items.Count - 1) = bentrok
'Tentukan GOAL If bentrok = 0 Then goal = True
indeksgoal = lbClose.Items.Count - 1 End If
End While If goal = True Then
'Jadwal optimal telah ditemukan
MsgBox("Jadwal Optimal telah ditemukan", vbInformation)
'Me.Text = arr_hari(lbClose.Items.Count - 1) & " , " & arr_jammasuk(lbClose.Items.Count - 1) & " ~ " & arr_jamkeluar(lbClose.Items.Count - 1)
txtHariPraktikum.Text = arr_hari(lbClose.Items.Count - 1) txtJamMasuk.Text = arr_jammasuk(lbClose.Items.Count - 1) txtJamkeluar.Text = arr_jamkeluar(lbClose.Items.Count - 1) Else
'Gunakan Best First Search untuk mencari suksesor, nilai bentrok terendah Dim record_bentrok As Integer 'sebagai acuan
(24)
A-16
Dim succesor As Integer 'sebagai penyimpan indeks record_bentrok = 10000For i = 0 To Max_Child baca_bentrok = arr_bentrok(i) If baca_bentrok < record_bentrok Then 'update record
record_bentrok = baca_bentrok 'simpan indeksnya
succesor = i End If Next i
MsgBox("Jadwal telah ditemukan dengan nilai bentrok minimum", vbInformation) 'Me.Text = arr_hari(succesor) & " , " & arr_jammasuk(succesor) & " ~ " & arr_jamkeluar(succesor)
txtHariPraktikum.Text = arr_hari(succesor) txtJamMasuk.Text = arr_jammasuk(succesor) txtJamkeluar.Text = arr_jamkeluar(succesor) End If
btSimpan.Enabled = True btProses.Enabled = False End Sub
Private Sub frmHasil_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim i As Integer
Dim combonamapraktikum, comboidprak As String btSimpan.Enabled = False
gridBacaPraktikum.DataSource = SQLTable("SELECT `ID`,`NAMA PRAKTIKUM` FROM `praktikum` WHERE `JAM MASUK` = '00:00:00' ")
For i = 0 To (gridBacaPraktikum.RowCount - 2)
combonamapraktikum = gridBacaPraktikum.Item(1, i).Value comboidprak = gridBacaPraktikum.Item(0, i).Value
cmbNamaPraktikum.Items.Add(combonamapraktikum) cmbIDPrak.Items.Add(comboidprak)
Next i End Sub
Private Sub btSimpan_Click(sender As System.Object, e As System.EventArgs) Handles btSimpan.Click
Dim hasilhari, hasiljammasuk, hasiljamkeluar As String hasilhari = txtHariPraktikum.Text
hasiljammasuk = txtJamMasuk.Text hasiljamkeluar = txtJamkeluar.Text
ExecSQL("Update `praktikum` SET `Hari`= '" & hasilhari & "', `Jam Masuk`= '" & hasiljammasuk & "', `Jam Keluar`= '" & hasiljamkeluar & "' WHERE `ID` = '" & tmp & "'")
btSimpan.Enabled = False End Sub
(25)
1
Universitas Kristen Maranatha
BAB I
PENDAHULUAN
1.1
Latar Belakang
Dengan semakin berkembangnya dunia Teknologi Informasi atau
yang dikenal dengan sebutan dunia
IT
, maka segala proses maupun
kegiatan dapat dipercepat dengan bantuan teknologi tersebut. Contoh,
adanya suatu perangkat lunak (
software
) pada komputer yang dapat dibuat
oleh seorang
programmer
yang dapat berguna untuk suatu aktivitas seperti
Faktur Penjualan Toko, Stok Barang, dan lainnya.
Dalam dunia pendidikan, penyusunan suatu jadwal merupakan
salah satu masalah yang sangat penting untuk diperhatikan, karena jika
terjadi kesalahan dalam penyusunannya, maka seluruh proses
belajar-mengajar akan tidak berjalan dengan lancar. Demikian pula dengan
penyusunan jadwal di suatu jurusan Universitas Kristen Maranatha, salah
satunya penyusunan jadwal praktikum di jurusan Sistem Komputer.
Penyusunan jadwal praktikum yang biasanya dilakukan secara manual,
yaitu dengan mempertimbangkan bentrok tidaknya jadwal mata kuliah
yang diambil peserta praktikum dengan jadwal praktikum yang diambil
oleh peserta praktikum tersebut. Selain dari jadwal mata kuliah, jadwal
(26)
2
Universitas Kristen Maranatha
responsi dan jadwal praktikum lainnya juga termasuk dalam pertimbangan.
Dengan cara manual seperti ini, maka akan menghabiskan banyak waktu
dan belum lagi jika terjadi kesalahan karena faktor ketidaktelitian manusia.
Untuk mengatasi masalah tersebut, maka dirancang suatu
software
yang dapat menganalisa jadwal-jadwal kuliah mahasiswa dan mengambil
suatu hasil yang paling terbaik dalam menentukan jadwal praktikum
dengan waktu yang lebih singkat.
Software
tersebut berbasis
Artificial
Intelligence
dengan metode pencarian yang bernama
Best-First Search
.
1.2
Rumusan masalah
Beberapa masalah yang akan dibahas pada Tugas Akhir ini adalah:
1.
Bagaimana membuat
input
berupa
database
jadwal mahasiswa yang
mengambil praktikum pada semester yang dijalankan?
2.
Bagaimana membuat program untuk mengolah
input
tersebut menjadi
output
berupa jadwal praktikum dengan metode
Best First Search
?
1.3
Tujuan
Tujuan dari Tugas Akhir ini adalah :
1.
Membuat
input
berupa
database
jadwal mahasiswa yang mengambil
praktikum pada semester yang dijalankan.
2.
Membuat program untuk mengolah
input
tersebut menjadi
output
(27)
3
Universitas Kristen Maranatha
1.4
Pembatasan Masalah
Beberapa pembatasan masalah pada Tugas Akhir ini adalah :
1.
Software
yang digunakan adalah Visual Studio 2010.
2.
Database
yang digunakan adalah MySQL.
3.
Tidak terhubung dengan S.A.T. Maranatha.
4.
Durasi praktikum diasumsikan 2 jam 30 menit.
5.
Periode jadwal adalah 30 menit.
6.
Jadwal ujian praktikum harus sama dengan jadwal praktikum.
7.
Tidak ada jadwal kuliah tambahan atau pengganti.
8.
Jadwal mata kuliah tidak boleh ada perubahan setelah jadwal
dikeluarkan.
9.
Ketersediaan ruangan praktikum, dosen pengawas, dan asisten
praktikum diabaikan.
10.
Parameter - parameter
Heuristic
yang digunakan adalah:
a.
Jadwal suatu praktikum tidak boleh sama dengan jadwal praktikum
lainnya yang diambil oleh peserta praktikum tersebut.
b.
Jadwal suatu praktikum tidak boleh sama dengan jadwal kuliah
peserta praktikum.
(28)
4
Universitas Kristen Maranatha
1.5
Sistematika Penulisan
BAB I
PENDAHULUAN
Bab ini membahas mengenai latar belakang, rumusan
masalah, tujuan, pembatasan masalah, dan sistematika
penulisan.
BAB II
LANDASAN TEORI
Bab ini membahas mengenai teori - teori yang
menunjang Tugas Akhir ini. Dimulai dari
Database
,
Microsoft Visual Studio, Microsoft Visual Basic, SQL,
MySQL, dan inti dari Tugas Akhir ini, yaitu
Artificial
Intelligence
.
BAB III
PERANCANGAN
Bab ini membahas mengenai perancangan dari
perangkat lunak berbasis
Artificial Intelligence
. Dimulai
dari pembuatan
database
,
form
, dan lainnya.
BAB IV PENGAMATAN DATA DAN ANALISA
Bab ini membahas mengenai hasil-hasil analisa dan
pengujian dari
software
yang telah dibuat.
(29)
5
Universitas Kristen Maranatha
BAB V
KESIMPULAN DAN SARAN
Bab ini membahas mengenai kesimpulan dan saran dari
hasil Tugas Akhir yang penulis peroleh.
(30)
63
Universitas Kristen Maranatha
BAB V
KESIMPULAN DAN SARAN
5.1
Kesimpulan
Dengan pengujian yang sudah dilakukan, maka kesimpulan dari
Tugas Akhir ini adalah :
1.
Program untuk
input
berupa
database
jadwal mahasiswa yang
mengambil praktikum pada semester yang dijalankan telah berhasil
dibuat.
2.
Program untuk mengolah
input
tersebut menjadi
output
berupa jadwal
praktikum dengan metode
Best First Search
telah berhasil dibuat.
5.2
Saran
Software
ini dapat ditambah dengan informasi jadwal pemakaian
ruangan praktikum dan juga jadwal dosen dan jadwal asisten. Dan juga
untuk ke depannya,
Software
ini dapat dihubungkan dengan S.A.T.
Maranatha.
(31)
64
Universitas Kristen Maranatha
DAFTAR PUSTAKA
Darmawan, Aan dan Novie Theresia. 2009.
Diktat Kuliah Pengantar Sistem
Cerdas
. Bandung: Fakultas Teknik Universitas Kristen Maranatha.
KOMPUTER, WAHANA. 2011.
Microsoft
VISUAL BASIC 2010 & MySQL untuk
Aplikasi Point of Sales
. Yogyakarta: ANDI.
Kurniawan, Erick. 2011.
Cepat Mahir Visual Basic 2010
. Yogyakarta: ANDI.
Sadeli, Muhammad. 2011.
VISUAL BASIC 2010 untuk Orang Awam
. Palembang:
Maxikom.
Suprianto, Dodit. 2010.
Membuat Aplikasi Desktop Menggunakan MySQL &
VB.NET Secara Profesional
. Jakarta: mediakita.
Suyanto. 2011.
Artificial Intelligence Searching, Reasoning, Planning, dan
Learning
. Bandung: INFORMATIKA.
http://en.wikipedia.org/wiki/SQL, 2 Januari 2012
http://en.wikipedia.org/wiki/Unique_key, 4 Februari 2012
http://id.wikipedia.org/wiki/Basis_data, 1 Januari 2012
http://id.wikipedia.org/wiki/Microsoft_Visual_Studio, 1 Januari 2012.
http://id.wikipedia.org/wiki/MySQL, 2 Januari 2012
http://id.wikipedia.org/wiki/SQL, 2 Januari 2012
http://id.wikipedia.org/wiki/Visual_Basic, 1 Januari 2012
http://ijongblue.blogspot.com/2009/10/pengertian-primary-key-dan-foreign-key.html, 4 Februari 2012
(1)
responsi dan jadwal praktikum lainnya juga termasuk dalam pertimbangan. Dengan cara manual seperti ini, maka akan menghabiskan banyak waktu dan belum lagi jika terjadi kesalahan karena faktor ketidaktelitian manusia. Untuk mengatasi masalah tersebut, maka dirancang suatu software
yang dapat menganalisa jadwal-jadwal kuliah mahasiswa dan mengambil suatu hasil yang paling terbaik dalam menentukan jadwal praktikum dengan waktu yang lebih singkat. Software tersebut berbasis Artificial Intelligence dengan metode pencarian yang bernama Best-First Search.
1.2 Rumusan masalah
Beberapa masalah yang akan dibahas pada Tugas Akhir ini adalah: 1. Bagaimana membuat input berupa database jadwal mahasiswa yang
mengambil praktikum pada semester yang dijalankan?
2. Bagaimana membuat program untuk mengolah input tersebut menjadi
output berupa jadwal praktikum dengan metode Best First Search?
1.3 Tujuan
Tujuan dari Tugas Akhir ini adalah :
(2)
3
1.4 Pembatasan Masalah
Beberapa pembatasan masalah pada Tugas Akhir ini adalah : 1. Software yang digunakan adalah Visual Studio 2010.
2. Database yang digunakan adalah MySQL. 3. Tidak terhubung dengan S.A.T. Maranatha. 4. Durasi praktikum diasumsikan 2 jam 30 menit. 5. Periode jadwal adalah 30 menit.
6. Jadwal ujian praktikum harus sama dengan jadwal praktikum. 7. Tidak ada jadwal kuliah tambahan atau pengganti.
8. Jadwal mata kuliah tidak boleh ada perubahan setelah jadwal dikeluarkan.
9. Ketersediaan ruangan praktikum, dosen pengawas, dan asisten praktikum diabaikan.
10.Parameter - parameter Heuristic yang digunakan adalah:
a. Jadwal suatu praktikum tidak boleh sama dengan jadwal praktikum lainnya yang diambil oleh peserta praktikum tersebut.
b. Jadwal suatu praktikum tidak boleh sama dengan jadwal kuliah peserta praktikum.
(3)
1.5 Sistematika Penulisan
BAB I PENDAHULUAN
Bab ini membahas mengenai latar belakang, rumusan masalah, tujuan, pembatasan masalah, dan sistematika penulisan.
BAB II LANDASAN TEORI
Bab ini membahas mengenai teori - teori yang menunjang Tugas Akhir ini. Dimulai dari Database, Microsoft Visual Studio, Microsoft Visual Basic, SQL, MySQL, dan inti dari Tugas Akhir ini, yaitu Artificial Intelligence.
BAB III PERANCANGAN
Bab ini membahas mengenai perancangan dari perangkat lunak berbasis Artificial Intelligence. Dimulai dari pembuatan database, form, dan lainnya.
(4)
5
BAB V KESIMPULAN DAN SARAN
Bab ini membahas mengenai kesimpulan dan saran dari hasil Tugas Akhir yang penulis peroleh.
(5)
BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Dengan pengujian yang sudah dilakukan, maka kesimpulan dari Tugas Akhir ini adalah :
1. Program untuk input berupa database jadwal mahasiswa yang mengambil praktikum pada semester yang dijalankan telah berhasil dibuat.
2. Program untuk mengolah input tersebut menjadi output berupa jadwal praktikum dengan metode Best First Search telah berhasil dibuat.
5.2 Saran
Software ini dapat ditambah dengan informasi jadwal pemakaian ruangan praktikum dan juga jadwal dosen dan jadwal asisten. Dan juga untuk ke depannya, Software ini dapat dihubungkan dengan S.A.T.
(6)
DAFTAR PUSTAKA
Darmawan, Aan dan Novie Theresia. 2009. Diktat Kuliah Pengantar Sistem Cerdas. Bandung: Fakultas Teknik Universitas Kristen Maranatha.
KOMPUTER, WAHANA. 2011. MicrosoftVISUAL BASIC 2010 & MySQL untuk Aplikasi Point of Sales. Yogyakarta: ANDI.
Kurniawan, Erick. 2011. Cepat Mahir Visual Basic 2010. Yogyakarta: ANDI. Sadeli, Muhammad. 2011. VISUAL BASIC 2010 untuk Orang Awam. Palembang:
Maxikom.
Suprianto, Dodit. 2010. Membuat Aplikasi Desktop Menggunakan MySQL & VB.NET Secara Profesional. Jakarta: mediakita.
Suyanto. 2011. Artificial Intelligence Searching, Reasoning, Planning, dan Learning. Bandung: INFORMATIKA.
http://en.wikipedia.org/wiki/SQL, 2 Januari 2012
http://en.wikipedia.org/wiki/Unique_key, 4 Februari 2012 http://id.wikipedia.org/wiki/Basis_data, 1 Januari 2012
http://id.wikipedia.org/wiki/Microsoft_Visual_Studio, 1 Januari 2012. http://id.wikipedia.org/wiki/MySQL, 2 Januari 2012
http://id.wikipedia.org/wiki/SQL, 2 Januari 2012
http://id.wikipedia.org/wiki/Visual_Basic, 1 Januari 2012