} 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; }