Implementasi Antar Muka dengan Pengguna

} else if userEnkripsi.equalsuserHasil passenkripsi.equalspassHasil status.equalsAdministrator { adminMainFrame adm = new adminMainFrame; adm.show; return true; this.dispose; } else { JOptionPane.showMessageDialognull, Username dan pasword yang Anda \n masukkan salah silahkan sek kembali; return false; } } Apabila nama user dan password salah akan ada pesan kesalahan, dan bila sudah benar akan langsung masuk halaman Administrator ataupun halaman Staff bagian Distribusi. Gambar 4.2 Tampilan Jika Login Salah

2. Halaman Utama Staff Bagian Distribusi

Gambar dibawah ini merupakan halaman utama pengguna setelah login sebagai Staff Bagian Distribusi. Pada halaman ini terdapat 3 buah menu yaitu menu File, Akun dan About. Menu File mempunyai submenu Pengirim dan Penerima untuk pengolahan data pengirim dan penerima yang akan mengirimkan paket, Daftar Pengiriman untuk pengolahan data pengiriman yang akan diproses untuk pembentukan rute jalan, dan Logout. Sedangkan Menu Akun mempunyai submenu Ubah Akun untuk ubah akun user name dan password pada Staff Bagian Distribusi. Berikut gambar 4.3 merupakan halaman utama staff bagian distribusi. Gambar. 4.3 Halaman Utama Staff Bagian Distribusi

3. Halaman Pengirim dan Penerima

Gambar dibawah ini merupakan halaman pengolahan data pengirim dan penerima. Pada halaman ini terdapat daftar data pengirim dan penerima yang telah diinputkan. Fungsi-fungsi yang ada pada halaman ini adalah input, update, delete dan search by kategori. Berikut gambar 4.4 merupakan halaman pengirim dan penerima. Gambar 4.4 Halaman Pengirim dan Penerima Adapun proses inputkan data baru maka klik pengirim dan penerima baru, isikan semua data-data pengirim dan penerima kemudian klik simpan. Kemudian jika ingin mengubah data yang sudah ada adalah klik dahulu daftar data yang akan diubah kemudian klik ubah dan ganti kolom isian yang akan di perbaharui. Untuk menghapus data pilih data yang akan dihapus kemudian klik hapus maka data akan terhapus. Proses- proses tersebut berada pada kode program pengirimPenerimaData.java sebagai berikut: public boolean hapusDataint idhapus { Connection con = kon.getKon; String query = delete from pengirim_penerima where id_pengirimpenerima= + idhapus; try { PreparedStatement pre = con.prepareStatementquery; int j = pre.executeUpdate; return true; } catch Exception e { System.out.printlne; return false; } } public void insertDataPengirimPenerimaString nmPenerima, String node, String telpfPenerima, String alamatPenerima, int koorX, int koorY, String namaJalan, String kelurahan, String nmPengirim, String telpfPengirim, String alamatPengirim, String tglKirim, String status { String query = call insertPengirimPenerima?,?,?,?,?,?,?,?,?,?,?,?,?; Connection con = kon.getKon; try { CallableStatement clls = con.prepareCallquery; clls.setString1, nmPenerima; clls.setString2, node; clls.setString3, telpfPenerima; clls.setString4, alamatPenerima; clls.setInt5, koorX; clls.setInt6, koorY; clls.setString7, namaJalan; clls.setString8, kelurahan; clls.setString9, nmPengirim; clls.setString10, telpfPengirim; clls.setString11, alamatPengirim; clls.setString12, tglKirim; clls.setString13, status; clls.execute; } catch Exception e { System.out.printlne; } } public boolean updateDataPengirimPenerimaint idPP, String nmPenerima, String node, String telpfPenerima, String alamatPenerima, int koorX, int koorY, String namaJalan, String kelurahan, String nmPengirim, String telpfPengirim, String alamatPengirim, String tglKirim, String status { String query = call updatePengirimPenerima?,?,?,?,?,?,?,?,?,?,?,?,?,?; Connection con = kon.getKon; try { CallableStatement clls = con.prepareCallquery; clls.setInt1, idPP; clls.setString2, nmPenerima; clls.setString3, node; clls.setString4, telpfPenerima; clls.setString5, alamatPenerima; clls.setInt6, koorX; clls.setInt7, koorY; clls.setString8, namaJalan; clls.setString9, kelurahan; clls.setString10, nmPengirim; clls.setString11, telpfPengirim; clls.setString12, alamatPengirim; clls.setString13, tglKirim; clls.setString14, status; clls.execute; return true; } catch Exception e { System.out.printlne; return false; } }

4. Halaman Daftar Pengiriman

Gambar dibawah ini merupakan halaman pengolahan daftar pengiriman. Pada halaman ini terdapat daftar data pengirim dan penerima yang telah diinputkan berdasarkan tanggal. Fungsi-fungsi yang ada pada halaman ini adalah proses untuk tampil jalur pengiriman. Sebelum nya ubah dulu mode status belum menjadi kirim untuk data pengirim dan penerima yang akan diproses. Kemudian inputkan parameter yang sesuai dengan perhitungan algoritma semut yaitu parameter q, t , q , p, b, a . Berikut gambar 4.5 merupakan halaman daftar pengiriman. Gambar 4.5 Halaman Daftar Pengiriman Jika ingin mengubah kondisi paket yang akan dikirimkan dari pengirim ke penerima makan klik kolom yang akan di ubah, kemudian ganti status belum menjadi kirim kemudian simpan. Kode program tersebut ada pada pengirimPenerimaData.java. public boolean updateStatusString stts,int idPP{ Connection con = kon.getKon; String query = update pengirim_penerima set status=? where id_pengirimpenerima=?; try { PreparedStatement pre = con.prepareStatementquery; pre.setString1, stts; pre.setInt2, idPP; int a = pre.executeUpdate; return true; } catch Exception e { System.out.printlne; return false; } return false; } Kemudian setelah dipastikan paket tersebut akan dikirim maka klik tampil jalur pengiriman. Untuk menghasilkan peta secara visual dan jalur yang akan dilewati serta waktu tempuh. Kode program ini terbagi atas pathSearchDestination.java, graph.java, graphTengah.java.

5. Halaman Ubah Akun

Gambar dibawah ini merupakan halaman ubah akun. Pada halaman ini berfungsi untuk mengganti username dan password sebelumnya. Untuk mengganti password inputkan username, password baru, dan ulangi password baru kemudian klik setuju. Perlu di ingat ini hanyak untuk mengubah akun Staff Bagian Distribusi. Berikut gambar 4.6 merupakan halaman ubah akun. Gambar 4.6 Halaman Ubah Akun Adapun untuk ubah akun akan melewati proses updateAccountControl.java dengan kode program sebagai berikut: public void updateAccountString username,String pass1,String pass2,String loginas{ ifpass1.equalspass2{ userData ud=new userData; ud.updateUserDatausername, pass2, loginas; JOptionPane.showMessageDialognull, Username dan password telah diubah,INFORMASI,JOptionPane.INFORMATION_MESSAGE; } else { JOptionPane.showMessageDialognull, Password pada field satu berbeda dengan \n pada field dua silahkan ulangi lagi,Peringatan,JOptionPane.ERROR_MESSAGE; } }

6. Halaman Utama Administrator

Gambar dibawah ini merupakan halaman utama pengguna setelah login sebagai Administrator. Pada halaman ini terdapat 3 buah menu yaitu menu File, Ubah dan About. Menu File mempunyai submenu Logout. Sedangkan Menu Ubah mempunyai submenu Ubah Bobot untuk ubah bobot kecepatan dan Ubah Kondisi Jalan untuk mengubah kondisi jalan baik atau buruk serta Ubah Akun sebagai Administrator. Berikut gambar 4.7 merupakan halaman utama administrator. Gambar 4.7 Halaman Utama Administrator

7. Halaman Ubah Bobot

Gambar dibawah ini merupakan halaman ubah nilai bobot kecepatan pagi, pagi menjelang siang, siang, siang menjelang sore dan sore. Pada halaman ini terdapat daftar bobot kecepatan tersebut. Untuk ubah pilih daftar bobot kecepatan kemudian klik ubah kemudian isikan kecepatan pagi, pagi menjelang siang, siang, siang menjelang sore dan sore dan klik simpan. Setelah di ubah klik simpan ke text supaya nilai yang telah diubah dapat dieksport ke text supaya dapat diproses pembentukan peta. Berikut gambar 4.8 merupakan halaman ubah bobot. Gambar 4.8 Halaman Ubah Bobot Adapun untuk ubah bobot kecepatan proses dari klik simpan tersebut akan melewati proses updateKecWaktu pada adminControl.java dengan kode program sebagai berikut: public void updateKecWaktudouble kec1, double kec2, double kec3, double kec4, double kec5, int kondisi { hitungKepadatanData hit = new hitungKepadatanData; boolean ck = hit.updateDataHitungkec1, kec2, kec3, kec4, kec5, kondisi; if ck == true { jalanData jd = new jalanData; ResultSet nilJarak = jd.cariHitungJalankondisi; try { while nilJarak.next { int idJl = nilJarak.getInt1; double jrk = nilJarak.getDouble2; double wkt1 = jrk kec1; double wkt2 = jrk kec2; double wkt3 = jrk kec3; double wkt4 = jrk kec4; double wkt5 = jrk kec5; jd.updateJalanidJl, wkt1, wkt2, wkt3, wkt4, wkt5; } } catch Exception e { System.out.printlne; JOptionPane.showMessageDialognull, Data Gagal disimpan , Peringatan, JOptionPane.ERROR_MESSAGE; } } else { JOptionPane.showMessageDialognull, Data Gagal disimpan , Peringatan, JOptionPane.ERROR_MESSAGE; } } Dari updateKecWaktu akan melakukan kueri updateDataHitung dari hitungKepadatanData.java, cariHitungJalan dan updateJalan pada JalanData.java . public boolean updateDataHitungdouble kec1,double kec2,double kec3,double kec4,double kec5,int kondisi{ boolean stts=false; String query = update hitungkepadatan set kecepatan_pagi=?, + kecepatan_pagi_siang=?,kecepatan_siang=?, + kecepatan_siang_sore=?,kecepatan_sore=? where idHitungKepadatan=?; Connection con = kon.getKon; try { PreparedStatement state = con.prepareStatementquery; state.setDouble1, kec1; state.setDouble2, kec2; state.setDouble3, kec3; state.setDouble4, kec4; state.setDouble5, kec5; state.setInt6, kondisi; int a = state.executeUpdate; stts=true; } catch Exception e { System.out.printlne; stts=false; } return stts; } public ResultSet cariHitungJalanint fkIdHit{ ResultSet hasil=null; String query=select idJalan,jarak from jalan where idHitungKepadatan=+fkIdHit; Connection con=kon.getKon; try { Statement state=con.createStatement; ResultSet rst=state.executeQueryquery; hasil=rst; } catch Exception e { System.out.printlne; } return hasil; } public void updateJalanint kondisi, double waktu1, double waktu2, double waktu3, double waktu4, double waktu5 { String query = update jalan set waktu_pagi=?, + waktu_pagi_siang=?,waktu_siang=?,waktu_siang_sore=?, + waktu_sore=? where idJalan=?; Connection con = kon.getKon; try { PreparedStatement state = con.prepareStatementquery; state.setDouble1, waktu1; state.setDouble2, waktu2; state.setDouble3, waktu3; state.setDouble4, waktu4; state.setDouble5, waktu5; state.setInt6, kondisi; int a = state.executeUpdate; } catch Exception e { System.out.printlne; } }

8. Halaman Ubah Kondisi Jalan

Gambar dibawah ini merupakan halaman ubah kondisi jalan baik atau buruk. Pada halaman ini terdapat daftar nama jalan serta kondisi nya. Untuk ubah pilih daftar kondisi jalan kemudian ganti kondisi ke baik atau buruk kemudian klik simpan. Berikut gambar 4.9 merupakan halaman ubah kondisi jalan. Gambar 4.9 Halaman Ubah Kondisi Jalan Adapun untuk ubah kondisi jalan akan melalui proses updateKondisiJalan pada kode program jalanData.java sebagai berikut: public void updateKondisiJalanint id,String kondisi{ Connection con=kon.getKon; String query=update jalan set kondisi=? where idJalan=?; try { PreparedStatement prep=con.prepareStatementquery; prep.setString1, kondisi; prep.setInt2, id; int i=prep.executeUpdate; } catch Exception e { System.out.printlne; } }

9. Halaman Ubah Akun Administrator

Gambar dibawah ini merupakan halaman ubah akun administrator. Pada halaman ini berfungsi untuk mengganti username dan password sebelumnya. Untuk mengganti password inputkan username, password baru, dan ulangi password baru kemudian klik setuju. Perlu di ingat ini hanya untuk mengubah akun Administrator. Berikut gambar 4.10 merupakan halaman ubah akun. Gambar 4.10 Halaman Ubah Akun Administrator Adapun untuk ubah akun akan melewati proses updateAccountControl.java dengan kode program sebagai berikut: public void updateAccountString username,String pass1,String pass2,String loginas{ ifpass1.equalspass2{ userData ud=new userData; ud.updateUserDatausername, pass2, loginas; JOptionPane.showMessageDialognull, Username dan password telah diubah,INFORMASI,JOptionPane.INFORMATION_MESSAGE; } else { JOptionPane.showMessageDialognull, Password pada field satu berbeda dengan \n pada field dua silahkan ulangi lagi,Peringatan,JOptionPane.ERROR_MESSAGE; } }

4.4. Implementasi Diagram Kelas

Sistem dibangun dengan berbasis objek, sehingga dalam implementasi dibutuhkan kelas – kelas untuk mendefinisikan objek yang akan dipakai untuk membangun sistem. Dalam sistem yang dibangun ini kelas-kelas yang dibentuk dibagi dalam 4 package yaitu package Entity, Boundary, Controller dan Tools. Karena banyaknya metode dalam pembuatan sistem, maka yang disajikan pada penelitian ini hanya metode yang berperan penting dalam penelitian yaitu metode Ants Colony System ACS, Sedangkan untuk penyajian metode secara lengkap terlampir pada lampiran 1. Berikut ini disajikan penjabaran metode ACS yang dibangun dalam penelitian. Nama Paket : Control Nama Kelas : pathSearchDestination Nama Metode : cariRuteTerpendekint waktuMulai, double to, double qo, double p, double b, double a, double q, int nSemut Fungsi Metode : Berfungsi untuk melakukan proses algoritma ants colony system. Hasil dari metode ini berupa rute peta pengiriman. Listing Program : mencari bobot waktu yang sesuai dengan inputan waktu mulai ======== List waktu = preJalurTerpendekwaktuMulai; int zone = Integer waktu.get0; List wktuZona = List urutanWaktu.getzone; mancari urutan vertexlist yang akan di cari node nya terlebih dahulu=== List baru = new ArrayList; List hrf = mencariUrutanClustervertexlist3, to, q, qo, b, p; mengubah dari nama cluster menjadi id di Object nameMap ========= System.out.println Urutan Cluster dalam Angka; for int i = 0; i hrf.size; i++ { int angTmp = Integer ubahKeAngkaString hrf.geti; baru.addangTmp; System.out.printbaru.geti + ; } System.out.println; for int semut = 0; semut nSemut; semut++ { gabungPath = new ArrayList; mengubah matriks dan invers pada Urutan Cluster ke – 0 ============ vertex[] vr = vertex[] listVertexPerMap.getInteger baru.get0; double[][] amNew = double[][] wktuZona.getInteger baru.get0; List vNew = ubahMatrikgetNodeAwal, amNew, vr; vertex[] vrTmp = vertex[] vNew.get0; double[][] amNewTmp = double[][] vNew.get1; double[][] amBobot = double[][] vNew.get2; if semut == 0 { pheromone awal dalam bentuk matriks ================== List tMatrik = ubahMatrikPheromoneto, amNewTmp; tMatAwal = double[][] tMatrik.get0; } if semut 0 { tMatAwal = finalTau; } pencarian graph Cluster ke – 0 =========================== graph gpCluster = new graphvrTmp, amNewTmp, vrTmp.length, vrTmp.length, tMatAwal, q, qo, b, p, Integer baru.get1, amBobot; List hsl = gpCluster.ssnJalan; finalPath = new ArrayList; finalPath = List hsl.get0; finalBobot = Double hsl.get1; finalTau = double[][] hsl.get2; menambahkan final tau pada gabung final tau untuk di bandingkan pada update pheromone global ============================== gabungFT.addfinalTau; gabungFP.addfinalPath; gabungVerUrut.addvrTmp; tampil jalur vertex cluster 0 ============================ System.out.printlnCoba tampil jalur vertex Awal : + Integer baru.get0; for int i = 0; i finalPath.size-1; i++ { System.out.printfinalPath.geti.toString+ ---; gabungPath.addfinalPath.geti; }