Atribut Tipe data
Panjang Primary key
Not null KodeWaktu
Varchar2 10
Jam Varchar2
50
5. Tabel Ruang.
Atribut Tipe data
Panjang Primary key
Not null KodeRuang
Varchar2 10
Ruang Varchar2
100
Kapasitas Number
10
Jenis Varchar2
50
6. Tabel KelasMataKuliah.
Atribut Tipe data
Panjang Primary key
Foreign Key Not null
KodeKM Varchar2
10
IDMatKul
Varchar2 10
NIP Varchar2
10
Kelas
Varchar2 5
Semester
Varchar2 10
7. Tabel Timeslot.
Atribut Tipe data
Panjang Primary key
Foreign Key Not null
KodeTS Varchar2
10
KodeHari
Varchar2 10
KodeWaktu Varchar2
10
8. Tabel Jadwal.
Atribut Tipe data
Panjang Primary key
Foreign Key Not null
KodeJadwal Varchar2
10
KodeKM
Varchar2 10
KodeTS Varchar2
10
KodeRuang
Varchar2 10
9. Tabel Permintaan.
Atribut Tipe data
Panjang Primary key
Foreign Key Not null
KodeJadwal Varchar2
10
KodeKM
Varchar2 10
KodeTS Varchar2
10
KodeRuang
Varchar2 10
10. Tabel Pelanggaran.
Atribut Tipe data
Panjang Primary key Foreign Key
Not null KodePelanggaran Varchar2
10
KodeJadwal
Varchar2 10
JenisPelanggaran Varchar2 10
3.5.4. Desain Model Interaksi Antar Kelas.
Interaksi antar kelas merupakan bagan yang menjelaskan secara rinci langkah-langkah dari proses program secara logika. Berikut ini
adalah Interaksi antar kelas dari program aplikasi Penjadwalan yang dibuat :
1. Tambah Matakuliah
Pengguna
Data Matakuliah Interface
:Tampilan Data MataKuliah
Kontrol :KontrolMataKuliah
MataKuliah
Tambah Matakuiah
tambahMatakuliah Matakuliah tambahMatakuliahMatakuliah
Data Matakuliah ditambah Data tidak lengkap
2. Edit MataKuliah
3. Hapus MataKuliah
4. Lihat MataKuliah
Pengguna Pengguna
Data Matakuliah Interface
:Tampilan Data MataKuliah
Kontrol :KontrolMataKuliah
MataKuliah
updateMatakuiah
updateMatakuiah Matakuliah updateMatakuliah Matakuliah
Data Matakuliah ter-Update Data tidak lengkap
Data Matakuliah Interface
:Tampilan Data MataKuliah
Kontrol :KontrolMataKuliah
MataKuliah
HapusMatakuiah
hapusMatakuiah Kodematkul hapusMatakuliah Kodematkul
Data Matakuliah terhapus Kodematkul tidak ada
5. Tambah Dosen
6. Edit Dosen Pengguna
Pengguna
Data Matakuliah Interface
:Tampilan Data MataKuliah
Kontrol :KontrolMataKuliah
MataKuliah
Lihat Matakuliah
getAllMataKuliah getAllMataKuliah
Data Matakuliah Data masih Kosong
Data Dosen
Interface :Tampilan Data Dosen
Kontrol :KontrolDosen
Dosen
Tambah Dosen
tambahDosenDosen tambahDosenDosen
Data Dosen ditambah Data tidak lengkap
7. Hapus Dosen
8. Lihat Dosen
Pengguna Pengguna
Data Dosen
Interface :Tampilan Data Dosen
Kontrol :KontrolDosen
Dosen
Edit Dosen
updateDosenDosen updateDosenDosen
Data Dosen ter-Update Data tidak lengkap
Data Dosen
Interface :Tampilan Data Dosen
Kontrol :KontrolDosen
Dosen
Hapus Dosen
hapusDosen NIP hapusDosenNIP
Data Dosen terhapus NIP tidak ada
9. Tambah Ruang
10. Edit Ruang
Pengguna Pengguna
Data Dosen
Interface :Tampilan Data Dosen
Kontrol :KontrolDosen
Dosen
Lihat Dosen
getAllDosen getAllDosen
Data Dosen Data masih Kosong
Data Ruang
Interface :Tampilan Data Ruang
Kontrol :KontrolRuang
Ruang
Tambah Ruang
tambahRuangRuang tambahRuangRuang
Data Ruang ditambah Data tidak lengkap
11. Hapus Ruang
12. Lihat Ruang
Pengguna Pengguna
Data Ruang
Interface :Tampilan Data Ruang
Kontrol :KontrolRuang
Ruang
Edit Ruang
updateRuangRuang updateRuangRuang
Data Ruang ter-Update Data tidak lengkap
Data Ruang
Interface :Tampilan Data Ruang
Kontrol :KontrolRuang
Ruang
Hapus Ruang
hapusRuangKodeRuang hapusRuangKodeRuang
Data Ruang terhapus KodeRuang tidak ada
13. Lihat Waktu dan Hari
Pengguna Pengguna
Data Ruang
Interface :Tampilan Data Ruang
Kontrol :KontrolRuang
Ruang
Lihat Ruang
getAllRuangSemua getAllRuangSemua
Data Ruang Data masih Kosong
Data Waktu
Interface :Tampilan Data Waktu
Kontrol :KontrolWaktu
Waktu
Lihat Waktu
getAllWaktu getAllWaktu
Data Waktu Data masih Kosong
14. Buat Jadwal Kuliah
Pengguna
Data Hari
Interface :Tampilan Data Waktu
Kontrol :KontrolHari
Hari
Lihat Hari
getAllHari getAllHari
Data Hari Data masih Kosong
88 Pengguna
Interface :Beranda
Buat Jadwal Interface
:Buat_jadwal_tahap_ 1
Interface
:Buat_jadwal_tahap_ 2_1
Interface
:Buat_jadwal_tahap_ 2_2
Buat jadwal kuliah
Isi Semester dan tahun
ajaran Pemilihan
matakuliah semester 1
atau 2
Mengisi dosen pegampu matakuliah semester 1 atau 2 kontrol
:KontrolKelasMataku liah
tambahKMsemeste r,jumlah kelas
KelasMatakuliah
Data matakuliah semester 1 atau 2
Data matakuliah
semester 1 atau 2
Sambung
89 Pengguna
Sambungan Interface
:Buat_jadwal_tahap_ 2_2
Interface
:Buat_jadwal_tahap_ 3 1
Mengisi dosen
pegampu
Memilih matakuliah semester 3 atau 4 kontrol
:KontrolKelasMataku liah
Updatekelasmataku liah
kelasmatakuliah KelasMatakuliah
Data matakuliah semester 1 atau 2
Data matakuliah
semester 1 atau 2
Pemilihan matakuliah
semester 3 atau 4
kontrol
:KontrolKelasMataku liah
Updatekelasmataku liah
kelasmatakuliah KelasMatakuliah
Data matakuliah semester 3 atau 4
Data matakuliah
semester 3 atau 4
Sambung Mengisi dosen pegampu semester 3 atau 4
90 Pengguna
Sambungan Interface
:Buat_jadwal_tahap_ 3_2
Interface
:Buat_jadwal_tahap_ 4 1
Mengisi dosen
pegampu
Memilih matakuliah semester 5 atau 6 kontrol
:KontrolKelasMataku liah
Updatekelasmataku liah
kelasmatakuliah KelasMatakuliah
Data matakuliah semester 3 atau 4
Data matakuliah
semester 3 atau 4
Pemilihan matakuliah
semester 5 atau 6
kontrol
:KontrolKelasMataku liah
Updatekelasmataku liah
kelasmatakuliah KelasMatakuliah
Data matakuliah semester 5 atau 6
Data matakuliah
semester 5 atau 6
Sambung Mengisi dosen pegampu semester 5 atau 6
91 Pengguna
Sambungan Interface
:Buat_jadwal_tahap_ 4_2
Interface
:Buat_jadwal_tahap_ 5 1
Mengisi dosen
pegampu
Memilih matakuliah semester 7 atau 8 kontrol
:KontrolKelasMataku liah
Updatekelasmataku liah
kelasmatakuliah KelasMatakuliah
Data matakuliah semester 5 atau 6
Data matakuliah
semester 5 atau 6
Pemilihan matakuliah
semester 7 atau 8
kontrol
:KontrolKelasMataku liah
Updatekelasmataku liah
kelasmatakuliah KelasMatakuliah
Data matakuliah semester 7 atau 8
Data matakuliah
semester 7 atau 8
Sambung Mengisi dosen pegampu semester 7 atau 8
92 Pengguna
Sambungan Interface
:Buat_jadwal_tahap_ 5_2
Interface
:Buat_jadwal_tahap_ 6 1
Mengisi dosen
pegampu
Mengisi jadwal permintaan kontrol
:KontrolKelasMataku liah
Updatekelasmataku liah
kelasmatakuliah KelasMatakuliah
Data matakuliah semester 7 atau 8
Data matakuliah
semester 7 atau 8
Mengisi jadwal
permintaan kontrol
:KontrolPermintaan
Tambah Permintaanjadwal
Jadwal
Data jadwal Data jadwal
Sambung Membuatmen-create jadwal dengan algortima SA
93 Pengguna
Sambungan Interface
:Buat_jadwal_tahap_ 6_2
Interface
:Penjadwalan
Mengklik tombol buat
Jadwal Kelas matakuliah kontrol
:KontrolSA
SimulatedEngine Jadwal
Data jadwal Data jadwal
94 15. Lihat Jadwal Kuliah
16. Menu Bantuan.
Pengguna Pengguna
PDF file
Interface :Beranda
Kontrol :KontrolMenuBantuan
PDF File
Lihat bantuan
LihatBantuan LihatBantuan
PDF file File tidak ditemukan
Data Jadwal
Interface :Penjadwalan
Kontrol :KontrolSolusi
Solusi
Lihat Jadwal
getAllJadwal getAllJadwal
Data jadwal Data masih Kosong
95
3.6 Perancangan Menu Antar Muka
Dalam merancang sebuah sistem aplikasi tentu memiliki desain antar muka untuk mengetahui informasi-informasi apa saja yang akan
terlibat didalamnya. Dalam rancangan antar muka aplikasi penjadwalan ini diharapkan mampu memenuhi aspek-aspek, seperti mudah
dimengerti dan sederhana. Rancangan yang akan dibuat adalah sebagai berikut :
A. Tampilan Halaman Utama
Gambar 3. 4 Tampilan Halaman Utama
Halaman utama terdiri dari 4 tombol utama yaitu Kelola DataBase, Buat Jadwal Kuliah, Lihat Jadwal Kuliah, dan menu bantuan. Dalam
setiap tombol akan memiliki informasi yang berbeda. B.
Kelola DataBase.
Pada halaman Kelola Database terdapat 4 pengelolaan yang dilakukan yaitu ; pengelolaan data matakuliah, Dosen, Ruang, Waktu dan Hari.
96
1. Pengelolaan Matakuliah. Pada halaman ini dilakukan 4 proses yaitu ; tambah, edit, hapus dan lihat
Matakuliah. Berikut ini rancangan untuk pengelolaan Matakuliah :
Gambar 3. 5 Tampilan Pengelolaan Matakuliah
2. Pengelolaan Dosen. Pada halaman ini dilakukan 4 proses yaitu ; tambah, edit, hapus dan lihat
Dosen. Berikut
ini rancangan
untuk pengelolaan
Dosen :
97
Gambar 3. 6 Tampilan Pengelolaan Dosen
3. Pengelolaan Ruang. Pada halaman ini dilakukan 4 proses yaitu ; tambah, edit, hapus dan lihat
Ruang. Berikut ini rancangan untuk pengelolaan Ruang :
Gambar 3. 7 Tampilan Pengelolaan Ruang
98
4. Pengelolaan Waktu dan Hari. Pada halaman hanya terdapat lihat Waktu dan Hari, berikut ini
rancangan untuk pengelolaan Waktu dan Hari :
Gambar 3. 8 Tampilan Pengelolaan Waktu dan Hari
C. Buat Jadwal Kuliah.
Pada halaman inilah proses pembuatan jadwal kelas matakuliah dilakukan. Akan terdapat 11 proses yang harus dilakukan. Berikut ini
rancangan proses yang dilakukan :
1. Proses Tahap 1 “Penentuan Semester ganjilgenap dan Tahun Ajaran”.
99
Gambar 3. 9 Tampilan Proses tahap 1
2. Proses Tahap 2,4,6,8 “Penentuan matakuliah yang digunakan dan
Jumlah Kelas”. Pada proses ini akan otomatis mengambil matakuliah sesuai pilihan
diatas, jika ganjil maka akan di ambil matakuliah semester 1,3,5,7 dan jika genap 2,4,6,8. Kemudian jika matakuliah belum ada disemester
tersebut maka
bisa ditambah.
100
Gambar 3. 10 Tampilan Proses tahap 2,4,6,8
Jika ada penambahan maka akan muncul rancangan seperti berikut :
Gambar 3. 11 Tampilan tambah matakuliah
101
Jika sudah sesuai matakuliah yang digunakan, maka akan dibagi keberapa kelas. Berikut rancangannya:
Gambar 3. 12 Tampilan konfirmasi pembagian kelas
3. Proses Tahap 3,5,7,9 “Penentuan Dosen Pegampu”.
Pada proses ini adalah penentuan dosen pegampu matakuliah dari matakuliah yang sudah dipilih diatas. Berikut ini rancangannya:
102
Gambar 3. 13 Tampilan Proses Tahap 3,5,7,9
Jika diklik pada baris table maka akan muncul rancangan seperti berikut ini :
Gambar 3. 14 Tampilan memilih Dosen pegampu
103
4. Proses Tahap 10 “Mengisi Jadwal Permintaan”.
Pada proses ini dilakukan pengisian jadwal permintaan. Berikut ini rancanganya:
Gambar 3. 15 Tampilan Proses tahap 10
5. Proses Tahap 11 “Buat Jadwal Kuliah”.
Ini adalah proses tahap akhir, akan ada satu tombol untuk membuat jadwal beserta progress bar yang akan menunjukan proses pembuatan.
Berikut ini
rancangananya:
104
Gambar 3. 16 Tampilan Proses tahap 11
D. Lihat Jadwal Kuliah.
Setelah jadwal terbuat pada bagian halaman ini akan menampilkan
jadwal-jadwal tersebut. Berikut ini rancangannya;
Gambar 3. 17 Tampilan Lihat Jadwal Kuliah
105
E. Lihat Menu Bantuan.
Pada menu bantuan ini akan muncul file berektensi pdf saat tombol bantuan diklik.
106
BAB IV IMPLEMENTASI DAN ANALISA HASIL
4.1. Implementasi.
Implementasi program adalah penerapan dari analisa dan desain sistem yang telah dibuat sebelumnya pada bab 3. Sehingga dengan adanya
implementasi ini dapat dipahami jalannya aplikasi pembuatan jadwal kelas matakuliah menggunakan algoritma Simulated Annealing pada Program
Studi PGSD.
4.1.1. Implementasi Kelas. 4.1.1.1.Implementasi Kelas Model.
No Nama Kelas Model Nama File Fisik
Nama File Executable
1 Dosen
Dosen.java Dosen.class
2 Hari
Hari.java Hari.class
3 Waktu
Waktu.java Waktu.class
4 Ruang
Ruang.java Ruang.class
5 Matakuliah
Matakuliah.java Matakuliah.class
6 KelasMatakuliah
KelasMatakuliah.java KelasMatakuliah.class
7 TimeSlot
TimeSlot.java TimeSlot.class
8 Jadwal
Jadwal.java Jadwal.class
9 Pelanggaran
Pelanggaran.java Pelanggaran.class
Tabel 4. 1 Implementasi Kelas Model
4.1.1.2.Implementasi Kelas View.
No Nama Kelas View
Nama File Fisik Nama File
Executable
1 Beranda
Beranda.java Beranda.class
2 Tampilan_Data_Dosen
Tampilan_Data_Dosen.java Tampilan_Data_Dosen.class
3 Tampilan_Data_Matakuliah Tampilan_Data_Matakuliah.java Tampilan_Data_Matakuliah.class
4 Tampilan_Data_Ruang
Tampilan_Data_Ruang .java Tampilan_Data_Ruang.class
5 Tampilan_Data_Waktu
Tampilan_Data_Waktu .java Tampilan_Data_Waktu.class
6 Buat_jadwal_tahap_1
Buat_jadwal_tahap_1 .java Buat_jadwal_tahap_1 .class
7 Buat_jadwal_tahap_2_1
Buat_jadwal_tahap_2_1.java Buat_jadwal_tahap_2_1.class
8 Buat_jadwal_tahap_2_2
Buat_jadwal_tahap_2_2.java Buat_jadwal_tahap_2_2.class
9 Buat_jadwal_tahap_3_1
Buat_jadwal_tahap_3_1.java Buat_jadwal_tahap_3_1.class
10 Buat_jadwal_tahap_3_2 Buat_jadwal_tahap_3_2.java
Buat_jadwal_tahap_3_2.class 11 Buat_jadwal_tahap_4_1
Buat_jadwal_tahap_4_1.java Buat_jadwal_tahap_4_1.class
12 Buat_jadwal_tahap_4_2 Buat_jadwal_tahap_4_2.java
Buat_jadwal_tahap_4_2.class 13 Buat_jadwal_tahap_5_1
Buat_jadwal_tahap_5_1.java Buat_jadwal_tahap_5_1.class
14 Buat_jadwal_tahap_5_2 Buat_jadwal_tahap_5_2.java
Buat_jadwal_tahap_5_2.class 15 Buat_jadwal_tahap_6_1
Buat_jadwal_tahap_6_1.java Buat_jadwal_tahap_6_1.class
16 Buat_jadwal_tahap_6_2 Buat_jadwal_tahap_6_2.java
Buat_jadwal_tahap_6_2.class 17 Penjadwalan
Penjadwalan.java Penjadwalan.class
Tabel 4. 2 Implementasi kelas View
4.1.1.3.Implementasi Kelas Kontrol. No
Nama Kelas Kontrol Nama File Fisik
Nama File Executable
1 Kontrol Dosen
KontrolDosen.java KontrolDosen.class
2 Kontrol Hari
KontrolHari.java KontrolHari.class
3 Kontrol KelasMatakuliah
KontrolKelasMatakuliah.java KontrolKelasMatakuliah.class
4 Kontrol Matakuliah
KontrolMatakuliah.java KontrolMatakuliah.class
5 Kontrol Menu Bantuan
KontrolMenuBantuan.java KontrolMenuBantuan.class
6 Kontrol Pelanggaran
KontrolPelanggaran.java KontrolPelanggaran.class
7 Kontrol Permintaan
KontrolPermintaan.java KontrolPermintaan.class
8 Kontrol Ruang
KontrolRuang.java KontrolRuang.class
9 Kontrol Jadwal
KontrolJadwal.java KontrolJadwal.class
10 Kontrol TimeSlot KontrolTimeSlot.java
KontrolTimeSlot.class 11 Kontrol Waktu
KontrolWaktu.java KontrolWaktu.class
12 Kontrol Simulated Annealing Engine
Kontrol Simulated Annealing Engine.java
Kontrol Simulated Annealing Engine.class
13 Pelanggaran Permintaan Pelanggaran_Permintaan.java
Pelanggaran_Permintaan.class
Tabel 4. 3 Implementasi Kelas Kontrol
4.1.2. Implementasi Algoritma Simulated Annealing SA.
Implementasi algoritma SA untuk membuat jadwal kelas matakuliah. Dalam algoritma ini, ada beberapa tahap atau proses untuk
membuat jadwal kelas matakuliah adalah sebagai berikut :
public static void Simulated_EngineJProgressBar progres, JTextField jumPelangaran throws SQLException {
Tahap pertama
MenetapkanJadwalAwal; hitung jumlah pelanggaran jadwal awal
int f_jadwalAwal = fungsiBiaya_jadwal_Awal; jika jadwal awal bukan goal atau fungsi biaya jadwal awal 0
if f_jadwalAwal 0 {
Tahap kedua
Inisialisasi_jadwalSkrg_dgn_jadwalAwal; Inisialisasi_jadwalTerbaik_dgn_jadwalSkrg;
suhu awal dan nilai alpha reduksi suhu, ditetapkan double suhu_awal = 5000
;suhu awal double alpha = 0.99
;nilai reduksi huhu int iterasi = 3;
jumlah iterasi 3
Tahap ketiga
ulangi sampai solusi ditemukan atau suhu awal mencapai 0.01 while suhu_awal 0.01 {
for int i = 0; i iterasi; i++ { aturan produksi untuk proses menghasilkan jadwal baru
ProsesPencarianJadwalBaru; Evaluasi jadwal baru
int f_jadwalbaru = fungsibiaya_jadwalBaru;
hitung delta evaluation dengan membandingkan fungsi biaya jadwal baru dengan jadwal sekarang
apakah jadwal baru goal atau f_jadwalBaru = 0 if f_jadwalbaru == 0 {
ganti jadwal terbaik dengan jadwal terbaru Update_jadwalTerbaik_dgn_jadwalBaru;
Keluar dari program suhu_awal = 0.01;
break; } else {
jika jadwal baru bukan goal int f_jadwalSkrg = fungsiBiaya_jadwal_sekarang.size;
int delta_evaluation = f_jadwalbaru - f_jadwalSkrg; cek apakah jadwal baru membaik atau 0, artinya jumlah
pelanggaran jadwal baru lebih kecil dari jadwal sekarang if delta_evaluation 0 {
System.out.printlnMembaik; ganti jadwal sekarang dengan jadwal baru
Update_jadwalSkrg_dgn_jadwalBaru; cek apakah fungsi biaya jadwal baru lebih baik dari fungsi biaya
jadwal terbaik sementara if fungsiBiaya_jadwal_baru.size
fungsiBiaya_jadwal_terbaik.size { System.out.printlnJadwal terbaik;
simpan jadwal terbaik Update_jadwalTerbaik_dgn_jadwalBaru;
} Hapus fungsi biaya jadwal baru dari larik, karena akan dicari ulang.
fungsiBiaya_jadwal_baru.removeAllfungsiBiaya_jadwal_baru; } else {
jika jadwal baru lebih buruk dari jadwal sekarang double p = Math.exp-delta_evaluation suhu_awal;
double r = Math.random;membangkitkan nilai random dalam interval 0 sampai 1
if rp { ganti jadwal sekarang dengan jadwal baru, dengan probabilitas
System.out.printlnTidak membaik, diterima dengan probalitas = + r + + p;
ganti jadwal sekarang dengan jadwal baru Update_jadwalSkrg_dgn_jadwalBaru;
} else { System.out.printlntidak diterima;
pencarian jadwal baru dikembalikan lagi dari jadwal sekarang karena jadwal baru sudah diubah dan tidak diterima.
cariSolusi_kembali_dari_jadwalSkrg;} Hapus fungsi biaya jadwal baru dari larik, karena akan dicari ulang.
fungsiBiaya_jadwal_baru.removeAllfungsiBiaya_jadwal_baru; } }
} selesai iterasi lakukan update suhu
update nilai suhu suhu_awal = alpha suhu_awal;
System.out.printlnSuhu sekarang : + suhu_awal;}
Tahap ke empat
System.out.printlnSelesai ; SimpanDatabase;
kosongkanSemuaLarik; } else {
System.out.printlnSelesai tanpa proses SA ; SimpanDatabaseJadwalAwal;
}}
Keterangan : 1. Tahap pertama adalah menetapkan inisialisasi jadwal awal menetapkan
jadwal awal, menghitung fungsi biaya jumlah pelanggaran jadwal awal. Jika jadwal awal masih ada pelanggaran, maka masuk ke tahap kedua.
2. Tahap kedua adalah inisialisasi jadwal sekarang dari jadwal awal, fungsi biaya jadwal sekarang dari fungsi biaya jadwal awal, inisialisasi jadwal
terbaik dari jadwal sekarang, fungsi biaya jadwal terbaik dari fungsi biaya jadwal sekarang. Dan menetapkan nilai-nilai parameter algoritma SA yaitu
suhu awal, alpha, dan jumlah iterasi. 3. Tahap ketiga adalah ulangi sampai solusi baru ditemukan atau sampai suhu
awal sudah mencapai 0 lakukan, pencariaan jadwal baru new_state dari jadwal sekarang, evaluasi nilai jadwal baru dan jadwal sekarang. Jika jadwal
baru sudah goal jumlah pelanggaran=0 maka keluar program set jadwal baru ke jadwal terbaik. Jika tidak goal, maka cek apakah jadwal baru lebih
baik dari jadwal sekarang, jika membaik maka ganti jadwal sekarang dengan jadwal baru. Jika jadwal baru labih buruk maka akan diterima jika memenuhi
rumus exponent. Jika tidak memenuhi rumus exponent maka dikembalikan mencari jadwal baru dari jadwal sekarang. Setelah 3 kali iterasi selesai maka
update suhu. 4. Simpan jadwal terbaik kedatabase sebagai jadwal.
4.1.3. Implementasi User Interface.
Tahap-tahap yang harus dilakukan oleh pengguna sebelum membuat penjadwalan yaitu kelola data penjadwalan, buat jadwal kuliah,
lihat jadwal. 4.1.4.1.Kelola DataBase.
Langkah pertama yang harus dilakukan penguna adalah masuk ke halaman awalberanda. Kemudian pilih Kelola Database Kelola data
Penjadwalan. Aplikasi akan menampilkan halaman kelola data matakuliah, dosen, dan ruang kepada pengguna.
Gambar 4. 1 Halaman AwalBeranda
A. Kelola Data Matakuliah.
Kelola Data Matakuliah yaitu sebuah halaman yang terdapat proses tambah, edit, hapus, dan lihat data matakuliah. Data matakuliah terdiri dari
: kode matakuliah, nama matakuliah, jumlah SKS, jumlah Jam Pertemuan, semester, dan jenis matakuliah teoripraktikum.
1. Cara menambah matakuliah. Isi data matakuliah secara lengkap. Kemudian klik tombol simpan.
Gambar 4. 2 menambah matakuliah
Kode program yang digunakan untuk menambah matakuliah :
Jika berhasil tersimpan maka akan muncul pemberitahuan berhasil tersimpan.
Gambar 4. 3 pemberitahuan berhasil.
2. Cara mengedit matakuliah.
public void tambahMataKuliahMatakuliah matkul throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = insert into matakuliah
id_matkul,kode_matakuliah,nama_matakuliah,jumlah_sks,semester,jenis,jp values?,?,?,?,?,?,?;
statement = PreparedStatement connection.prepareStatementsql; statement.setString1, matkul.getIdMatKul;
statement.setString2, matkul.getKodeMatKul; statement.setString3, matkul.getNamaMatKul;
statement.setInt4, matkul.getJumlahSKS; statement.setInt5, matkul.getSemester;
statement.setString6, matkul.getJenis; statement.setInt7, matkul.getJp;
statement.executeUpdate; connection.commit;
}
Pilih tombol lihat table, terus pilih matakuliah yang ingin di edit dengan mengklik pada baris table, setelah itu silahkan ubah data,
kemudian klik tombol update. - Lihat table.
Gambar 4. 4 list matakuliah
- Update.
Gambar 4. 5 update matakuliah
Kode program yang digunakan untuk edit matakuliah :
- Pemberitahuan telah ter-update
Gambar 4. 6 pemberitahuan ter- update
3. Cara menghapus matakuliah.
public void updateMataKuliahMatakuliah matkul throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = update matakuliah set nama_matakuliah
=?,jumlah_sks=?,jp=?, semester=?,jenis=? where id_matkul=?; statement = PreparedStatement connection.prepareStatementsql;
statement.setString6, matkul.getIdMatKul; statement.setString1, matkul.getNamaMatKul;
statement.setInt2, matkul.getJumlahSKS; statement.setInt3, matkul.getJp;
statement.setInt4, matkul.getSemester; statement.setString5, matkul.getJenis;
statement.executeUpdate; connection.commit;
}
Pilih tombol lihat table, terus pilih matakuliah yang ingin di hapus dengan mengklik pada baris table, kemudian klik tombol hapus.
- Lihat table.
Gambar 4. 7 list matakuliah
- Klik tombol hapus.
Gambar 4. 8 hapus matakuliah
Kode program yang digunakan untuk hapus matakuliah :
- Pemberitahuan berhasil dihapus.
Gambar 4. 9 pemberitahuan terhapus
4. Cara melihat matakuliah. Klik tombol lihat table, maka akan muncul seluruh data matakuliah.
public void hapusMataKuliahString kode_makul throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = delete from
+ matakuliah where id_matkul=?; statement = PreparedStatement connection.prepareStatementsql;
statement.setString1, kode_makul; statement.executeUpdate;
connection.commit; connection.close;
}
Gambar 4. 10 list matakuliah
Kode program yang digunakan untuk lihat matakuliah :
public ListMatakuliah getAllMataKuliah throws SQLException { PreparedStatement psmt = null;
ResultSet rset = null; connection.setAutoCommitfalse;
String sql = select from matakuliah; psmt = PreparedStatement connection.prepareStatementsql;
rset = psmt.executeQuery; ListMatakuliah matkul = new ArrayList;
int no = 1; while rset.next {
Matakuliah mk = new Matakuliah; mk.setIdno;
mk.setIdMatKulrset.getString1; mk.setKodeMatKulrset.getString2;
mk.setNamaMatKulrset.getString3; mk.setJumlahSKSrset.getInt4;
mk.setJprset.getInt5; mk.setSemesterrset.getInt6;
5. Cara import Excel data matakuliah. Klik tombol import excel, kemudian pilih file excel 20032007.
Dengan syarat file excel yang dipilih telah ditelah memenuhi dengan format yang telah dibuat.
- Memilih file excel, klik tombol open.
Gambar 4. 11 import excel matakuliah
Kode program yang digunakan untuk import matakuliah :
mk.setJenisrset.getString7; matkul.addmk;
no++; }
connection.commit; return matkul;
}
private void jButton1ActionPerformedjava.awt.event.ActionEvent evt { TODO add your handling code here:
JFileChooser chooser = new JFileChooser; chooser.setFileSelectionModeJFileChooser.FILES_ONLY;
chooser.setMultiSelectionEnabledfalse; FileNameExtensionFilter JExcelFilter = new
FileNameExtensionFilterExcel 20032007, xls; chooser.setFileFilterJExcelFilter;
chooser.setAcceptAllFileFilterUsedfalse; ListMatakuliah mk = new ArrayList;
if chooser.showOpenDialogthis == JFileChooser.APPROVE_OPTION { try {
File files = chooser.getSelectedFile; File fileExcel = new Filefiles.getPath;
System.out.printlnfileExcel; Workbook w = Workbook.getWorkbookfileExcel;
Ambil sheet pertama, nomer 0 menandakan sheet ke 1 Sheet sheet = w.getSheets[0];
String idMatkul = ; String KodeMatkul = ;
String namaMatkul = ; int jumlahSKS = 0;
int jp = 0; int sem = 0;
String jenis = ; int kolom = 0;
int cekJum = KontrolMataKuliah.getKoneksi.kodeotomatisSolusi; for int baris = 1; baris sheet.getRows; baris++ {
idMatkul = M + cekJum + baris; KodeMatkul = sheet.getCellkolom, baris.getContents;
namaMatkul = sheet.getCellkolom + 1, baris.getContents; jumlahSKS = new Integersheet.getCellkolom + 2,
baris.getContents; jp = new Integersheet.getCellkolom + 3, baris.getContents;
sem = new Integersheet.getCellkolom + 4, baris.getContents;
jenis = sheet.getCellkolom + 5, baris.getContents; Matakuliah m = new MatakuliahidMatkul, KodeMatkul,
namaMatkul, jumlahSKS, jp, sem, jenis; mk.addm;
} if CekKodeMatkulmk = true {
for int i = 0; i mk.size; i++ { idMatkul = mk.geti.getIdMatKul;
KodeMatkul = mk.geti.getKodeMatKul; namaMatkul = mk.geti.getNamaMatKul;
jumlahSKS = new Integermk.geti.getJumlahSKS; jp = new Integermk.geti.getJp;
sem = new Integermk.geti.getSemester; jenis = mk.geti.getJenis;
Matakuliah m = new MatakuliahidMatkul, KodeMatkul, namaMatkul, jumlahSKS, jp, sem, jenis;
KontrolMataKuliah.getKoneksi.tambahMataKuliahm; }
JOptionPane.showMessageDialogrootPane, Berhasil diImport; }} catch SQLException ex {
ex.printStackTrace; } catch IOException | BiffException ex {
}}}
Pemberitahuan jika berhasil diimport.
Gambar 4. 12 pemberitahuan berhasil di import.
- Format excel data matakuliah.
Gambar 4. 13 format excel matakuliah
Catatan : Mengisi data dimulai dari baris ke 2. Kolom tetap seperti gambar diatas.
B. Kelola Data Dosen. Kelola Data Dosen yaitu sebuah halaman yang terdapat proses
tambah, edit, hapus, dan lihat data Dosen. Data Dosen terdiri dari : NIP dosen, nama dosen, dan status tetaptidak.
1. Cara menambah data dosen.
Isi data dosen secara lengkap. Kemudian klik tombol simpan.
Gambar 4. 14 menambah dosen
Kode program yang digunakan untuk tambah dosen :
Jika berhasil tersimpan maka akan muncul pemberitahuan berhasil tersimpan.
public void tambahDosenDosen dsn throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = insert into Dosen values?,?,?;
statement = PreparedStatement connection.prepareStatementsql; statement.setString1, dsn.getNIP;
statement.setString2, dsn.getNamaDosen; statement.setString3, dsn.getStatus;
statement.executeUpdate; connection.commit;
}
Gambar 4. 15 pemberitahuan berhasil ditambah
2. Cara mengedit data dosen. Pilih tombol lihat table, terus pilih data dosen yang ingin di edit
dengan mengklik pada baris table, setelah itu silahkan ubah data, kemudian klik tombol update.
- Lihat table.
Gambar 4. 16 list dosen
- Update.
Gambar 4. 17 update dosen
Kode program yang digunakan untuk edit dosen :
- Pemberitahuan telah ter-update
public void updateDosenDosen dsn throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = update dosen set nama_dosen =?,status=? where nip=?;
statement = PreparedStatement connection.prepareStatementsql; statement.setString3, dsn.getNIP;
statement.setString1, dsn.getNamaDosen; statement.setString2, dsn.getStatus;
statement.executeUpdate; connection.commit;
}
Gambar 4. 18 pemberitahuan dosen ter- update
3. Cara menghapus data dosen. Pilih tombol lihat table, terus pilih data dosen yang ingin di hapus
dengan mengklik pada baris table, kemudian klik tombol hapus. - Lihat table.
Gambar 4. 19 list dosen
- Klik tombol hapus.
Gambar 4. 20 hapus dosen
Kode program yang digunakan untuk hapus dosen :
- Pemberitahuan berhasil dihapus.
Gambar 4. 21 pemberitahuan terhapus
public void hapusDosenDosen dsn throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = delete from
+ dosen where nip=?; statement = PreparedStatement connection.prepareStatementsql;
statement.setString1, dsn.getNIP; statement.executeUpdate;
connection.commit; }
4. Cara melihat data dosen. Klik tombol lihat table, maka akan muncul seluruh data dosen.
Gambar 4. 22 list dosen
Kode program yang digunakan untuk lihat dosen :
5. Cara import Excel data dosen. Klik tombol import excel, kemudian pilih file excel 20032007.
Dengan syarat file excel yang dipilih telah ditelah memenuhi dengan format yang telah dibuat.
public ListDosen getAllDosen throws SQLException { PreparedStatement psmt = null;
ResultSet rset = null; connection.setAutoCommitfalse;
String sql = select Nip, nama_dosen, status, substringNip,2 1 as urut from dosen order by urut asc;
psmt = PreparedStatement connection.prepareStatementsql; rset = psmt.executeQuery;
ListDosen dsn = new ArrayList; int no = 1;
while rset.next { Dosen ds = new Dosen;
ds.setIdno; ds.setNIPrset.getString1;
ds.setNamaDosenrset.getString2; ds.setStatusrset.getString3;
dsn.addds; no++; }
connection.commit; return dsn; }
- Memilih file excel, klik tombol open.
Gambar 4. 23 import excel dosen.
Kode program yang digunakan untuk import dosen :
private void jToggleButton1ActionPerformedjava.awt.event.ActionEvent evt {
JFileChooser chooser = new JFileChooser; chooser.setFileSelectionModeJFileChooser.FILES_ONLY;
chooser.setMultiSelectionEnabledfalse; FileNameExtensionFilter JExcelFilter = new
FileNameExtensionFilterExcel 20032007, xls; chooser.setFileFilterJExcelFilter;
chooser.setAcceptAllFileFilterUsedfalse; ListDosen dsn = new ArrayList;
if chooser.showOpenDialogthis == JFileChooser.APPROVE_OPTION {
try { File files = chooser.getSelectedFile;
File fileExcel = new Filefiles.getPath; System.out.printlnfileExcel;
Workbook w = Workbook.getWorkbookfileExcel; Ambil sheet pertama, nomer 0 menandakan sheet ke 1
Sheet sheet = w.getSheets[0]; String nip = ;
String dosen = ; String status = ;
int kolom = 0; for int baris = 1; baris sheet.getRows; baris++ {
nip = sheet.getCellkolom, baris.getContents; dosen = sheet.getCellkolom + 1, baris.getContents;
status = sheet.getCellkolom + 2, baris.getContents; Dosen d = new Dosennip, dosen, status;
dsn.addd; }
if CekNIpdsn = true { for int i = 0; i dsn.size; i++ {
Dosen d = new Dosendsn.geti.getNIP, dsn.geti.getNamaDosen, dsn.geti.getStatus;
KontrolDosen.getKoneksi.tambahDosend; }
JOptionPane.showMessageDialogrootPane, Berhasil diImport; } } catch SQLException ex {
ex.printStackTrace; } catch IOException | BiffException ex {
} } }
Pemberitahuan jika berhasil diimport.
Gambar 4. 24 pemberitahuan berhasil di import.
- Format excel data dosen.
Gambar 4. 25 format excel dosen
Catatan : Mengisi data dimulai dari baris ke 2. Kolom tetap seperti gambar diatas.
C. Kelola Data Ruang. Kelola Data Ruang adalah proses tambah, edit, hapus, dan lihat
data Ruang. Data ruang terdiri dari : kode ruang, nama ruang, kapasitas, dan jenis ruang teoripraktikum.
1. Cara menambah data ruang. Isi data ruang secara lengkap. Kemudian klik tombol simpan.
Gambar 4. 26 menambah ruang
Kode program yang digunakan untuk tambah ruang :
Jika berhasil tersimpan maka akan muncul pemberitahuan berhasil tersimpan.
Gambar 4. 27 pemberitahuan berhasil ditambah
2. Cara mengedit data ruang. Pilih tombol lihat table, terus pilih data ruang yang ingin di edit dengan
mengklik pada baris table, setelah itu silahkan ubah data, kemudian klik tombol update.
- Lihat table.
public void tambahRuangRuang r throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = insert into ruang values?,?,?,?;
statement = PreparedStatement connection.prepareStatementsql; statement.setString1, r.getKodeRuang;
statement.setString2, r.getRuang; statement.setInt3, r.getKapasitas;
statement.setString4, r.getJenis; statement.executeUpdate;
connection.commit; }
Gambar 4. 28 list ruang
- Update.
Gambar 4. 29 update ruang
Kode program yang digunakan untuk edit ruang :
- Pemberitahuan telah ter-update
Gambar 4. 30 pemberitahuan ter- update
3. Cara menghapus matakuliah. Pilih tombol lihat table, terus pilih matakuliah yang ingin di hapus
dengan mengklik pada baris table, kemudian klik tombol hapus. - Lihat table.
public void updateRuangRuang r throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = update ruang set nama_ruang =?,kapasitas=?,jenis=? where
kode_ruang=?; statement = PreparedStatement connection.prepareStatementsql;
statement.setString4, r.getKodeRuang; statement.setString3, r.getJenis;
statement.setString1, r.getRuang; statement.setInt2, r.getKapasitas;
statement.executeUpdate; connection.commit;
}
Gambar 4. 31 list ruang
- Klik tombol hapus.
Gambar 4. 32 hapus ruang
Kode program yang digunakan untuk hapus ruang :
- Pemberitahuan berhasil dihapus.
Gambar 4. 33 pemberitahuan terhapus
4. Cara melihat data ruang. Klik tombol lihat table, maka akan muncul seluruh data ruang.
Gambar 4. 34 list ruang
Kode program yang digunakan untuk lihat ruang :
public void hapusRuangRuang r throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; String sql = delete from
+ ruang where kode_ruang=?; statement = PreparedStatement connection.prepareStatementsql;
statement.setString1, r.getKodeRuang; statement.executeUpdate;
connection.commit; }
5. Cara import Excel data ruang. Klik tombol import excel, kemudian pilih file excel 20032007.
Dengan syarat file excel yang dipilih telah ditelah memenuhi dengan format yang telah dibuat.
- Memilih file excel, klik tombol open.
public ListRuang getAllRuangSemua throws SQLException { PreparedStatement psmt = null;
ResultSet rset = null; connection.setAutoCommitfalse;
String sql = select from ruang order by nama_ruang ; psmt = PreparedStatement connection.prepareStatementsql;
rset = psmt.executeQuery; ListRuang rg = new ArrayList;
int no = 1; while rset.next {
Ruang r = new Ruang; r.setIdno;
r.setKodeRuangrset.getString1; r.setRuangrset.getString2;
r.setKapasitasrset.getInt3; r.setJenisrset.getString4;
rg.addr; no++; } connection.commit; return rg; }
Gambar 4. 35 import excel ruang
Kode program yang digunakan untuk import ruang :
private void jToggleButton1ActionPerformedjava.awt.event.ActionEvent evt {
JFileChooser chooser = new JFileChooser; chooser.setFileSelectionModeJFileChooser.FILES_ONLY;
chooser.setMultiSelectionEnabledfalse; FileNameExtensionFilter JExcelFilter = new
FileNameExtensionFilterExcel 20032007, xls; chooser.setFileFilterJExcelFilter;
chooser.setAcceptAllFileFilterUsedfalse; ListRuang rg = new ArrayList;
if chooser.showOpenDialogthis == JFileChooser.APPROVE_OPTION {
try { File files = chooser.getSelectedFile;
File fileExcel = new Filefiles.getPath; System.out.printlnfileExcel;
Workbook w = Workbook.getWorkbookfileExcel; Ambil sheet pertama, nomer 0 menandakan sheet ke 1
Sheet sheet = w.getSheets[0]; String kode = ;
String ruang = ; int kapasitas = 0;
String jenis = ; int kolom = 0;
for int baris = 1; baris sheet.getRows; baris++ { kode = sheet.getCellkolom, baris.getContents;
ruang = sheet.getCellkolom + 1, baris.getContents; kapasitas = new Integersheet.getCellkolom + 2,
baris.getContents; jenis = sheet.getCellkolom + 3, baris.getContents;
Ruang r = new Ruangkode, ruang, kapasitas, jenis; rg.addr;
} if CekKodeRuangrg = true {
for int i = 0; i rg.size; i++ { Ruang r = new Ruangrg.geti.getKodeRuang,
rg.geti.getRuang, rg.geti.getKapasitas, rg.geti.getJenis; KontrolRuang.getKoneksi.tambahRuangr;
} JOptionPane.showMessageDialogrootPane, Berhasil diImport;
}
Pemberitahuan jika berhasil diimport.
Gambar 4. 36 pemberitahuan berhasildi import
- Format excel data ruang.
Gambar 4. 37 format excel ruang
Catatan : Mengisi data dimulai dari baris ke 2. Kolom tetap seperti gambar diatas.
D. Kelola Data Waktu dan Hari. Kelola Data Waktu adalah proses lihat data waktu dan hari. Tidak
bisa ditambah ataupun diedit dan dihapus. Karena data tersebut sudah pasti yaitu waktu dibagi menjadi 4 slot yaitu slot 1 07.00-10.00, slot 2 10.00-
13.00, slot 3 13.00-16.00, dan slot 4 16.00-19.00. kemudian hari yang digunakan senin sampai jumat hanya 5 hari.
Gambar 4. 38 waktu dan hari
Kode program yang digunakan untuk lihat waktu dan hari :
public ListHari getAllHari throws SQLException { PreparedStatement psmt = null;
ResultSet rset = null; connection.setAutoCommitfalse;
String sql = select from Hari; psmt = PreparedStatement connection.prepareStatementsql;
rset = psmt.executeQuery; ListHari hr = new ArrayListHari;
while rset.next { Hari h = new Hari;
h.setKodeHarirset.getString1; h.setHarirset.getString2;
public ListWaktu getAllWaktu throws SQLException { PreparedStatement psmt = null;
ResultSet rset = null; connection.setAutoCommitfalse;
String sql = select from Waktu; psmt = PreparedStatement connection.prepareStatementsql;
rset = psmt.executeQuery; ListWaktu wkt = new ArrayList;
while rset.next { Waktu w = new Waktu;
w.setKodeWakturset.getString1; w.setJamrset.getString2;
wkt.addw; }
connection.commit; return wkt;
} h.setHarirset.getString2;
hr.addh; }
connection.commit; return hr;
}
4.1.4.2.Buat Jadwal Kuliah. Dalam membuat jadwal kuliah ada beberapa tahap yang harus
dipenuhi. Pemilihan semester ganjilgenap, pemilihan matakuliah pada tingkat semester, pembagian kelas, pemilihan dosen pegampu, dan mengisi
jadwal permintaan. 1. Proses Tahap 1.
Proses Tahap 1 adalah proses pemilihan semester ganjil atau genap dan tahun ajarannya. Jika ganjil maka akan ditampilkan semester
1,3,5,7 dan jika genap 2,4,6,8.
Gambar 4. 39 Proses Tahap 1
2. Proses Tahap 2. Proses Tahap 2 adalah proses pemilihan matakuliah apa saja yang
akan digunakan pada semester 1 atau 2. jika belum ada maka bisa ditambah dan akan dibagi kedalam berapa kelas. Jika tidak digunakan
maka bisa dihapus.
Gambar 4. 40 Proses Tahap 2
Kode program yang digunakan untuk mengambil matakuliah berdasarkan semester :
public ListMatakuliah getAllMataKuliahSemesterString semester throws SQLException {
PreparedStatement psmt = null; ResultSet rset = null;
connection.setAutoCommitfalse; String sql = select from matakuliah where semester=?;
psmt = PreparedStatement connection.prepareStatementsql; psmt.setString1, semester;
rset = psmt.executeQuery; ListMatakuliah matkul = new ArrayList;
int no = 1; while rset.next {
Matakuliah mk = new Matakuliah; mk.setIdno;
mk.setIdMatKulrset.getString1;
Jika ditambah, maka akan muncul halaman penambahan matakuliah seperti berikut.
Gambar 4. 41 penambahan matakuliah
mk.setKodeMatKulrset.getString2; mk.setNamaMatKulrset.getString3;
mk.setJumlahSKSrset.getInt4; mk.setJprset.getInt5;
mk.setSemesterrset.getInt6; mk.setJenisrset.getString7;
matkul.addmk; no++;
} connection.commit;
return matkul; }
Jika sudah selesai dan matakuliah sudah terpilih. Pada menu selanjutnya akan ada konfirmasi untuk menyakinkan pengguna.
Gambar 4. 42 konfirmasi matakuliah
Setelah melewati konfirmasi, akan muncul halaman pembagian kelas.
Gambar 4. 43 pembagian kelas
Kode program yang digunakan untuk menambah kelas matakuliah :
Kemudian akan muncul konfirmasi untuk pembagian kelas untuk memastikan pengguna.
String tahunAjaran = matkul.getTahunAjaran; String sql = insert into kelasmatakuliah
kodekm,id_matkul,kelas,kodedosen,tahun_ajaran values?,?,?,?,?; statement = PreparedStatement connection.prepareStatementsql;
statement.setString1, matkul.getKodeKM; statement.setString2, makul;
statement.setString3, matkul.getKelas; statement.setString4, kodedsn;
statement.setString5, tahunAjaran; statement.executeUpdate;
connection.commit; }
public void tambahKelasMataKuliahKelasMatakuliah matkul throws SQLException {
PreparedStatement statement = null; connection.setAutoCommitfalse;
Matakuliah mk = matkul.getId_matkul; String makul = mk.getIdMatKul;
Dosen ds = matkul.getKodeDosen; String kodedsn = ds.getNIP;
Gambar 4. 44 konfirmasi pembagian kelas
3. Proses Tahap 3. Proses Tahap 3 adalah proses penentuan dosen pegampu kelas
matakuliah dari semester 1 atau 2. Dalam memilih pegampu langsung klik dibaris tabel kelas matakuliah tersebut. Setelah selesai maka dapat
melanjutkan ke selanjutnya dengan syarat semua kelas matakuliah sudah memiliki dosen pegampu.
Gambar 4. 45 Proses Tahap 3
Kode program yang digunakan untuk mengambil kelas matakuliah :
public ListKelasMatakuliah getAllKelasMataKuliahSemesterString semester throws SQLException {
PreparedStatement psmt = null; ResultSet rset = null;
connection.setAutoCommitfalse; String sql = select km.kodekm,m.id_matkul,km.kelas,km.kodedosen,
+ m.nama_matakuliah,m.semester,m.jenis from kelasmatakuliah km,matakuliah m
+ where km.id_matkul=m.id_matkul and m.semester=? order by m.id_matkul,km.kelas;
psmt = connection.prepareStatementsql; psmt.setString1, semester;
rset = psmt.executeQuery;
ListKelasMatakuliah km = new ArrayList; int no = 1;
while rset.next { KelasMatakuliah kelasmatkul = new KelasMatakuliah;
Matakuliah matkul = new Matakuliah; matkul.setIdMatKulrset.getString2;
matkul.setNamaMatKulrset.getString5; matkul.setSemesterrset.getInt6;
matkul.setJenisrset.getString7; Dosen dosen = new Dosen;
dosen.setNIPrset.getString4; Dosen dsn =
KontrolDosen.getKoneksi.getAllDosenKodedosen.getNIP; dosen.setNamaDosendsn.getNamaDosen;
kelasmatkul.setIdno; kelasmatkul.setKodeKMrset.getString1;
kelasmatkul.setId_matkulmatkul; kelasmatkul.setKelasrset.getString3;
kelasmatkul.setKodeDosendosen; km.addkelasmatkul;
no++; }
connection.commit; return km;
}
Pada saat baris table diklik maka akan muncul halaman pemilihan dosen seperti berikut ini.
Gambar 4. 46 Memilih Dosen Pegampu
4. Proses Tahap 4. Proses Tahap 3 adalah proses pemilihan matakuliah apa saja yang
akan digunakan pada semester 3 atau 4. jika belum ada maka bisa ditambah dan akan dibagi kedalam berapa kelas. Jika tidak digunakan
maka bisa dihapus.
Gambar 4. 47 Proses Tahap 4
Jika ditambah, maka akan muncul halaman penambahan matakuliah seperti berikut.
Gambar 4. 48 Penambahan Matakuliah
Jika sudah selesai dan matakuliah sudah terpilih. Pada menu selanjutnya akan ada konfirmasi untuk menyakinkan pengguna.
Gambar 4. 49 Konfirmasi matakuliah
Setelah melewati konfirmasi, akan muncul halaman pembagian kelas.
Gambar 4. 50 Pembagian Kelas
Kemudian akan muncul konfirmasi untuk pembagian kelas untuk memastikan pengguna.
Gambar 4. 51 Konfirmasi pembagian kelas
5. Proses Tahap 5. Proses Tahap 5 adalah proses penentuan dosen pegampu kelas
matakuliah dari semester 3 atau 4. Dalam memilih pegampu langsung klik dibaris tabel kelas matakuliah tersebut. Setelah selesai maka dapat
melanjutkan ke selanjutnya dengan syarat semua kelas matakuliah sudah memiliki dosen pegampu.
Gambar 4. 52 Proses Tahap 5
Pada saat baris table diklik maka akan muncul halaman pemilihan dosen seperti berikut ini.
Gambar 4. 53 Memilih Dosen Pegampu
6. Proses Tahap 6. Proses Tahap 6 adalah proses pemilihan matakuliah apa saja yang
akan digunakan pada semester 5 atau 6. jika belum ada maka bisa ditambah dan akan dibagi kedalam berapa kelas. Jika tidak digunakan
maka bisa dihapus.
Gambar 4. 54 Proses Tahap 6
Jika ditambah, maka akan muncul halaman penambahan matakuliah seperti berikut.
Gambar 4. 55 Penambahan Matakuliah
Jika sudah selesai dan matakuliah sudah terpilih. Pada menu selanjutnya akan ada konfirmasi untuk menyakinkan pengguna.
Gambar 4. 56 Konfirmasi matakuliah
Setelah melewati konfirmasi, akan muncul halaman pembagian kelas.
Gambar 4. 57 Pembagian Kelas
Kemudian akan muncul konfirmasi untuk pembagian kelas untuk memastikan pengguna.
Gambar 4. 58 Konfirmasi pembagian kelas
7. Proses Tahap 7. Proses Tahap 7 adalah proses penentuan dosen pegampu kelas
matakuliah dari semester 5 atau 6. Dalam memilih pegampu langsung klik dibaris tabel kelas matakuliah tersebut. Setelah selesai maka dapat
melanjutkan ke selanjutnya dengan syarat semua kelas matakuliah sudah memiliki dosen pegampu.
Gambar 4. 59 Proses tahap 7
Pada saat baris table diklik maka akan muncul halaman pemilihan dosen seperti berikut ini.
Gambar 4. 60 Memilih Dosen Pegampu
8. Proses Tahap 8. Proses Tahap 8 adalah proses pemilihan matakuliah apa saja yang
akan digunakan pada semester 7 atau 8. jika belum ada maka bisa
ditambah dan akan dibagi kedalam berapa kelas. Jika tidak digunakan maka bisa dihapus.
Gambar 4. 61 Proses tahap 8
Jika ditambah, maka akan muncul halaman penambahan matakuliah seperti berikut.
Gambar 4. 62 Penambahan Matakuliah
Jika sudah selesai dan matakuliah sudah terpilih. Pada menu selanjutnya akan ada konfirmasi untuk menyakinkan pengguna.
Gambar 4. 63 Konfirmasi matakuliah
Setelah melewati konfirmasi, akan muncul halaman pembagian kelas.
Gambar 4. 64 Pembagian Kelas
Kemudian akan muncul konfirmasi untuk pembagian kelas untuk memastikan pengguna.
Gambar 4. 65 Konfirmasi pembagian kelas
9. Proses Tahap 9. Proses Tahap 9 adalah proses penentuan dosen pegampu kelas
matakuliah dari semester 7 atau 8. Dalam memilih pegampu langsung klik dibaris tabel kelas matakuliah tersebut. Setelah selesai maka dapat
melanjutkan ke selanjutnya dengan syarat semua kelas matakuliah sudah memiliki dosen pegampu.
Gambar 4. 66 proses tahap 9
Pada saat baris table diklik maka akan muncul halaman pemilihan dosen seperti berikut ini.
Gambar 4. 67 Memilih Dosen Pegampu
10. Proses Tahap 10.
Pada proses tahap 10 ini akan diminta mengisikan jadwal permintaan. Pada tahap ini juga bisa dikosongkan jika tidak ada jadwal
permintaan. Dalam mengisi jadwal permintaan ada 3 hal yang harus diperhatikan yaitu kelas matakuliah, permintaan waktu, dan ruang yang
akan digunakan.
Gambar 4. 68 Proses tahap 10
Kode program yang digunakan untuk tambah permintaan :
public void tambahPermintaanJadwal solusi throws SQLException { PreparedStatement statement = null;
connection.setAutoCommitfalse; KelasMatakuliah KM = solusi.getKodeKm;
String kodeKM = KM.getKodeKM; TimeSlot ts = solusi.getKodeTimeSlot;
String kodeTS = ts.getKodeTs; String kodesolusi = solusi.getKodeJadwal;
Ruang rg = solusi.getKoderuang;
1. Dalam memilih kelas matakuliah maka pertama yang akan dipilih adalah siapa dosen pegampu matakuliah tersebut. Maka untuk
selanjutnya akan memilih kelas matakuliah tersebut.
Gambar 4. 69 Memilih Dosen pegampu kelas matakuliah
Kemudian akan ditampilkan kelas mmatakuliah yang diampu oleh dosen tersebut.
String sql = insert into permintaan kodesolusi,kelasmatakuliah, TimeSlot,ruang values?,?,?,?;
statement = connection.prepareStatementsql; statement.setString1, kodesolusi;
statement.setString2, kodeKM; statement.setString3, kodeTS;
statement.setString4, koderuang; statement.executeUpdate;
connection.commit; }
Gambar 4. 70 Memilih kelas matakuliah
2. Memilih waktu permintaan.
Gambar 4. 71 Memilih waktu permintaan
3. Memilih ruang yang akan digunakan.
Gambar 4. 72 Memilih Ruang
Setelah selesai mengisi ketiga hal tersebut maka selanjutnya tinggal meng- klik tombol tambah, maka jadwal permintaan telah tersimpan.
Gambar 4. 73 penambahan jadwal permintaan
Kemudian setelah semua permintaan sudah terisi, maka dapat melanjutkan ketahap berikutnya. Sebelum melanjutkan akan terdapat konfirmasi
kepada pengguna.
Gambar 4. 74 Konfirmasi jadwal permintaan
11. Proses Tahap 11. Ini adalah tahap akhir yaitu proses pembuatan jadwal kuliah, pada
tahap ini pengguna hanya meng-klik tombol buat dan menunggu proses.
Gambar 4. 75 Proses Tahap 11
Kode program yang digunakan untuk buat jadwal :
public static void Simulated_EngineJProgressBar progres, JTextField jumPelangaran throws SQLException {
MenetapkanJadwalAwal; int f_jadwalAwal = fungsiBiaya_jadwal_Awal;
if f_jadwalAwal 0 { Inisialisasi_jadwalSkrg_dgn_jadwalAwal;
Inisialisasi_jadwalTerbaik_dgn_jadwalSkrg; double suhu_awal = 5000;
double alpha = 0.99; int iterasi = 3;
while suhu_awal 0.01 { for int i = 0; i iterasi; i++ {
ProsesPencarianJadwalBaru; int f_jadwalbaru = fungsibiaya_jadwalBaru;
if f_jadwalbaru == 0 { Update_jadwalTerbaik_dgn_jadwalBaru;
suhu_awal = 0.01; break;
} else { int f_jadwalSkrg = fungsiBiaya_jadwal_sekarang.size;
int delta_evaluation = f_jadwalbaru - f_jadwalSkrg; if delta_evaluation 0 {
System.out.printlnMembaik; Update_jadwalSkrg_dgn_jadwalBaru;
if fungsiBiaya_jadwal_baru.size fungsiBiaya_jadwal_terbaik.size {
System.out.printlnSolusi terbaik; Update_jadwalTerbaik_dgn_jadwalBaru;
}
fungsiBiaya_jadwal_baru.removeAllfungsiBiaya_jadwal_baru; } else {
double p = Math.exp-delta_evaluation suhu_awal; double r = Math.random;
if rp { System.out.printlnTidak membaik, diterima dengan
probalitas = + r + + p; Update_jadwalSkrg_dgn_jadwalBaru;
} else { System.out.printlntidak diterima;
cariSolusi_kembali_dari_jadwalSkrg; }
fungsiBiaya_jadwal_baru.removeAllfungsiBiaya_jadwal_baru; } }
} suhu_awal = alpha suhu_awal;
System.out.printlnSuhu sekarang : + suhu_awal; membuat progress bar
progres.setValue100 - fungsiBiaya_jadwal_terbaik.size; }
System.out.printlnSelesai ; SimpanDatabase;
System.out.printlnTersimpan dalam database; kosongkanSemuaLarik;
} else { System.out.printlnSelesai tanpa proses SA ;
SimpanDatabaseJadwalAwal; } }
Setelah selesai maka akan muncul jendela pemberitahuan bahwa proses telah selesai.
Gambar 4. 76 pemberitahuan pembuatan telah selesai
4.1.4.3.Lihat Jadwal Kuliah. Setelah proses pembuatan jadwal kuliah selesai maka jadwal
kelas matakuliah dapat dilihat.
Gambar 4. 77 Jadwal Kuliah
Kode program yang digunakan untuk lihat jadwal :
public ListSolusi getAllSolusi throws SQLException { PreparedStatement psmt = null;
ResultSet rset = null; connection.setAutoCommitfalse;
String sql = SELECT DISTINCTs.kodesolusi,km.kodekm,km.kelas, +
m.id_matkul,m.kode_matakuliah,m.nama_matakuliah,m.jumlah_sks,M.JP, M.semester,m.jenis,
+ ts.kodets,hr.kode_hari,hr.hari,wkt.kode_waktu,wkt.jam,r.kode_ruang,r.nam
a_ruang,dsn.nip,dsn.nama_dosen
+ FROM solusi s, kelasmatakuliah km, matakuliah m, dosen dsn, timeslot ts, waktu wkt,hari hr, ruang r
+ WHERE s.kelasmatakuliah=km.kodekm AND s.timeslot=ts.kodets AND s.ruang=r.kode_ruang AND km.id_matkul= m.id_matkul AND
km.kodedosen=dsn.nip AND ts.kodewaktu=wkt.kode_waktu AND ts.kodehari=hr.kode_hari order by M.semester,m.id_matkul,km.kelas asc;
psmt = connection.prepareStatementsql; rset = psmt.executeQuery;
ListJadwal st = new ArrayList; int no = 1;
while rset.next { Jadwal solusi = new Jadwal ;
KelasMatakuliah kodeKm = new KelasMatakuliah; kodeKm.setKodeKMrset.getString2;
kodeKm.setKelasrset.getString3; Matakuliah mk = new Matakuliah;
mk.setIdMatKulrset.getString4; mk.setKodeMatKulrset.getString5;
mk.setNamaMatKulrset.getString6; mk.setJumlahSKSrset.getInt7;
mk.setJprset.getInt8;
mk.setSemesterrset.getInt9; mk.setJenisrset.getString10;
Dosen dsn = new Dosen; dsn.setNIPrset.getString18;
dsn.setNamaDosenrset.getString19; kodeKm.setId_matkulmk;
kodeKm.setKodeDosendsn; TimeSlot kodeTs = new TimeSlot;
kodeTs.setKodeTsrset.getString11; Hari hr = new Hari;
hr.setKodeHarirset.getString12; hr.setHarirset.getString13;
Waktu wktu = new Waktu; wktu.setKodeWakturset.getString14;
String W1SKS2 = 07.00-09.00 WIB; String W1SKS3 = 07.00-10.00 WIB;
String W2SKS2 = 10.00-12.00 WIB; String W2SKS3 = 10.00-13.00 WIB;
String W3SKS2 = 13.00-15.00 WIB; String W3SKS3 = 13.00-16.00 WIB;
String W4SKS2 = 16.00-18.00 WIB; String W4SKS3 = 16.00-19.00 WIB;
if rset.getString14.equalsIgnoreCaseW1 rset.getInt7 == 1 { wktu.setJamW1SKS2;
} if rset.getString14.equalsIgnoreCaseW1 rset.getInt7 == 2 {
wktu.setJamW1SKS2; }
if rset.getString14.equalsIgnoreCaseW1 rset.getInt7 2 {
wktu.setJamW1SKS3; }
if rset.getString14.equalsIgnoreCaseW2 rset.getInt7 == 1 { wktu.setJamW2SKS2;
} if rset.getString14.equalsIgnoreCaseW2 rset.getInt7 == 2 {
wktu.setJamW2SKS2; }
if rset.getString14.equalsIgnoreCaseW2 rset.getInt7 2 { wktu.setJamW2SKS3;
} if rset.getString14.equalsIgnoreCaseW3 rset.getInt7 == 1 {
wktu.setJamW3SKS2; }
if rset.getString14.equalsIgnoreCaseW3 rset.getInt7 == 2 { wktu.setJamW3SKS2;
} if rset.getString14.equalsIgnoreCaseW3 rset.getInt7 2 {
wktu.setJamW3SKS3; }
if rset.getString14.equalsIgnoreCaseW4 rset.getInt7 == 1 { wktu.setJamW4SKS2;
} if rset.getString14.equalsIgnoreCaseW4 rset.getInt7 == 2 {
wktu.setJamW4SKS2; }
if rset.getString14.equalsIgnoreCaseW4 rset.getInt7 2 { wktu.setJamW4SKS3;
}
4.1.4.4.Menu Bantuan.
Gambar 4. 78 menu bantuan
kodeTs.setKodeHarihr; kodeTs.setKodeWaktuwktu;
Ruang ruang = new Ruang; ruang.setKodeRuangrset.getString16;
ruang.setRuangrset.getString17; solusi.setKodeJadwalrset.getString1;
solusi.setKodeTimeSlotkodeTs; solusi.setKodeKmkodeKm;
solusi.setKoderuangruang; solusi.setIdno;
st.addsolusi; no++;
} connection.commit;
return st; }
4.2. Pengujian. A. Data Pengujian.
Pengujian menggunakan jadwal Semester Ganjil 20142015 Prodi S1 PGSD Universitas Sanata Dharma. Terdapat 32 Matakuliah teori yang
digunakan, semester 1 terdapat 11 matakuliah, semester 3 terdapat 10 matakuliah, semester 5 terdapat 10 matakuliah, dan semester 7 terdapat 1
matakuliah. Untuk semester 1,3,5 masing-masing dibagi kedalam 5 kelas dan semester 7 di bagi kedalam 6 kelas 55+50+50+6=161 kelas. Jadi
terdapat 161 calon kelas matakuliah teori yang akan dijadwalkan. Dari 161 terdapat 36 kelas matakuliah permintaan. Dari 161 terdapat 5 kelas
matakuliah dengan permintaan tidak menggunakan ruang. Di PGSD terdapat 13 ruang teori yang digunakan. Dalam 1 hari akan mendapat 4 sesi
waktu, jadi 5 hari 4 sesi 13 ruang = 260 total slot yang disediakan untuk menjadwalkan kelas matakuliah.
1. Data Jadwal Semester Ganjil 20142015 lihat di lampiran pada tabel 5.10 halaman 246.
2. Data Matakuliah lihat di lampiran pada tabel 5.5 halaman 196. 3. Data Kelas Matakuliah lihat di lampiran pada tabel 5.6 halaman 197.
4. Data Permintaan lihat di lampiran pada tabel 5.7 halaman 202. 5. Data Hari dan Waktu lihat di lampiran pada tabel 5.1 halaman 193.
6. Data Ruang teori lihat di lampiran pada tabel 5.3 halaman 194. 7. Data Dosen lihat di lampiran pada tabel 5.4 halaman 195.
B. Penetapan Nilai parameter Suhu Awal, Nilai Reduksi Penurunan Suhu Alpha, dan Jumlah Iterasi pada algoritma SA.
Sesuai dengan analisis pada Bab 3 yaitu 3.2.2, nilai-nilai yang ditetapkan
sebagai berikut : 1. TemperaturSuhu awal T=5000.
2. Alpha α=0.99.
3. Jumlah iterasi L=3.
4.2.1. Hasil Pengujian Terhadap Penggunaan Ruang .
Pengujian dilakukan dengan menerapkan seluruh contraints, 36 kelas matakuliah permintaan dan sebanyak 10 kali percobaan. Berikut pengujian
untuk 13,12,11,10,9,dan 8 Ruang :
1. Pengujian dengan menggunakan 13 ruang. Hasil pengujian disajikan dalam tabel 4.4 berikut :
Bentrok Solusi Awal Waktu
Hasil akhir dari SA Sukses
Hard Soft
Penyelesaian Hard
Soft 100
A B
C E
D Total
Jam:menit:detik A B C E
D Total
01
PEN G
UJ IAN
1
0 18 36 3 32
89 0:00:03
0 0 0 0 1
2 0 22 36 6
25 89
0:00:04 0 0 0 0
1
3
0 19 35 9 33
96 0:00:03
0 0 0 0 1
4 0 17 44 7
35 103
0:00:03 0 0 0 0
1
5
0 20 44 5 31
100 0:00:04
0 0 0 0 1
6 0 19 36 4
27 86
0:00:04 0 0 0 0
1
7
0 25 37 7 33
102 0:00:04
0 0 0 0 1
8 0 19 36 9
32 96
0:00:03 0 0 0 0
1
9
0 18 41 8 29
96 0:00:04
0 0 0 0 1
10 0 17 40 6
28 91
0:00:04 0 0 0 0
1
Persentasi tingkat keberhasilan dari 10 kali pengujian
100
Dengan rata-rata waktu penyelsaian 0:00:04
Tabel 4. 4 Hasil pengujian dengan 13 ruang
Keterangan :
1. A
adalah Tidak terjadi bentrok ruang. 2.
B adalah Tidak terjadi bentrok dosen.
3. C
adalah Tidak terjadi bentrok rombongan dalam tingkat semester yang sama.
4. D
adalah Mahasiswa tidak dijadwalkan lebih 3 kali perkuliahan dalam 1 hari.
5. E
adalah Dosen tidak dijadwalkan lebih dari 3 kali pertemuan dalam 1 hari. 6. Sukses 100 dilihat dari Total hasil akhir dari SA. Jika Total = 0 semua
constraint teratasi maka di beri nilai 1. Jika Total lebih besar dari 0 maka diberi nilai 0 karena constraint tidak semua teratasi.
Cara membaca tabel : Diambil sampel pada pengujian
1 .
1. Pada pengujian 1
, bentrok solusi awal hard constraint yaitu A
=0, B
=18, C
=36, E
=3 dan soft constraint yaitu D
=32 total = 89. Kemudian diselesaikan dalam waktu 3 detik 0:00:03. Hasil akhir dari bentrok solusi
awal diselesaikan menggunakan SA yaitu A
=0, B
=0, C
=0, D
=0, E
=0, total =0. Tidak ada pelanggaran lagi, baik hard constraint maupun soft constraint
sukses diberi nilai 1.
2. Pengujian menggunakan 12 ruang. Hasil pengujian disajikan dalam tabel 4.6 di lampiran :