4.1. Implementasi
4.1.3. Implementasi User Interface
4.1.4.2. Buat Jadwal Kuliah
Dalam membuat jadwal kuliah ada beberapa tahap yang harus
dipenuhi. Pemilihan semester (ganjil/genap), 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
Gambar 4. 40 Proses Tahap 2
Kode program yang digunakan untuk mengambil matakuliah berdasarkan semester :
public List<Matakuliah> getAllMataKuliahSemester(String semester) throws SQLException {
PreparedStatement psmt = null; ResultSet rset = null;
connection.setAutoCommit(false);
String sql = "select * from matakuliah where semester=?"; psmt = (PreparedStatement) connection.prepareStatement(sql); psmt.setString(1, semester);
rset = psmt.executeQuery();
List<Matakuliah> matkul = new ArrayList<>(); int no = 1;
while (rset.next()) {
Matakuliah mk = new Matakuliah(); mk.setId(no);
Jika ditambah, maka akan muncul halaman penambahan matakuliah
seperti berikut.
Gambar 4. 41 penambahan matakuliah mk.setKodeMatKul(rset.getString(2)); mk.setNamaMatKul(rset.getString(3)); mk.setJumlahSKS(rset.getInt(4)); mk.setJp(rset.getInt(5)); mk.setSemester(rset.getInt(6)); mk.setJenis(rset.getString(7)); matkul.add(mk); 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
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.prepareStatement(sql); statement.setString(1, matkul.getKodeKM()); statement.setString(2, makul); statement.setString(3, matkul.getKelas()); statement.setString(4, kodedsn); statement.setString(5, tahunAjaran); statement.executeUpdate(); connection.commit(); }
public void tambahKelasMataKuliah(KelasMatakuliah matkul) throws SQLException {
PreparedStatement statement = null; connection.setAutoCommit(false); 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
public List<KelasMatakuliah> getAllKelasMataKuliahSemester(String semester) throws SQLException {
PreparedStatement psmt = null; ResultSet rset = null;
connection.setAutoCommit(false);
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.prepareStatement(sql); psmt.setString(1, semester);
List<KelasMatakuliah> km = new ArrayList<>(); int no = 1;
while (rset.next()) {
KelasMatakuliah kelasmatkul = new KelasMatakuliah(); Matakuliah matkul = new Matakuliah();
matkul.setIdMatKul(rset.getString(2)); matkul.setNamaMatKul(rset.getString(5)); matkul.setSemester(rset.getInt(6)); matkul.setJenis(rset.getString(7)); Dosen dosen = new Dosen(); dosen.setNIP(rset.getString(4)); Dosen dsn = KontrolDosen.getKoneksi().getAllDosenKode(dosen.getNIP()); dosen.setNamaDosen(dsn.getNamaDosen()); kelasmatkul.setId(no); kelasmatkul.setKodeKM(rset.getString(1)); kelasmatkul.setId_matkul(matkul); kelasmatkul.setKelas(rset.getString(3)); kelasmatkul.setKodeDosen(dosen); km.add(kelasmatkul); 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.
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.
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.
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.
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
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
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
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
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
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 tambahPermintaan(Jadwal solusi) throws SQLException { PreparedStatement statement = null;
connection.setAutoCommit(false);
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.prepareStatement(sql); statement.setString(1, kodesolusi); statement.setString(2, kodeKM); statement.setString(3, kodeTS); statement.setString(4, 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.
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
Gambar 4. 75 Proses Tahap 11
public static void Simulated_Engine(JProgressBar 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.println("Membaik"); Update_jadwalSkrg_dgn_jadwalBaru(); if (fungsiBiaya_jadwal_baru.size() < fungsiBiaya_jadwal_terbaik.size()) { System.out.println("Solusi terbaik"); Update_jadwalTerbaik_dgn_jadwalBaru(); }
fungsiBiaya_jadwal_baru.removeAll(fungsiBiaya_jadwal_baru); } else {
double p = Math.exp((-delta_evaluation) / suhu_awal); double r = Math.random();
if (r<p) {
System.out.println("Tidak membaik, diterima dengan probalitas = " + r + " < " + p); Update_jadwalSkrg_dgn_jadwalBaru(); } else { System.out.println("tidak diterima"); cariSolusi_kembali_dari_jadwalSkrg(); } fungsiBiaya_jadwal_baru.removeAll(fungsiBiaya_jadwal_baru); } } }
suhu_awal = alpha * suhu_awal;
System.out.println("Suhu sekarang : " + suhu_awal); //membuat progress bar
progres.setValue((100 - fungsiBiaya_jadwal_terbaik.size())); }
System.out.println("Selesai !!! "); SimpanDatabase();
System.out.println("Tersimpan dalam database"); kosongkanSemuaLarik();
} else {
System.out.println("Selesai tanpa proses SA !!! "); SimpanDatabaseJadwalAwal();
Setelah selesai maka akan muncul jendela pemberitahuan bahwa proses telah selesai.
Gambar 4. 76 pemberitahuan pembuatan telah selesai