Penyusunan Jadwal Praktikum Mahasiswa Menggunakan Metode Best First Search.

(1)

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 frmMainMenu

Private 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 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 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 Integer

If 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 = Nama

For 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 Try

If 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).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("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 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 = 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_Possibility

arr_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 = 10000

For 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