52 BAB 4 IMPLEMENTASI DAN PEMBAHASAN PROGRAM 4.1 Implementasi Sistem Implementasi sistem merupakan tahap dari penerapan sistem dengan tujuan agar sistem siap untuk dioperasikan. Pada tahapan ini, Sistem Monitoring Biaya Parkir dibangun berbasis Java ,di mana pemasukan data dilakukan dengan menggunakan pemrograman jdk-1.5. Hal ini dilakukan berdasarkan analisa dan desain yang merupakan langkah awal sebelum pembentukan suatu sistem dilaksanakan pada bab 3. Penulisan program yang sesuai dengan desain tentunya akan menghasilkan program aplikasi yang sesuai dengan kebutuhan pemakai (user). Untuk itu program harus ditulis dengan bahasa pemrograman yang sesuai dengan permasalahan yang ditangani. 4.2 Spesifikasi Program Aplikasi “Sistem Monitoring Biaya Parkir Di Hotel Quality Berbasis Jaringan Menggunakan Java” terdiri dari induk utama yaitu org.admin yang dikembangkan secara terintegrasi dan terdiri dari class-class sebagai berikut : 1. DbConfig.java, berisi program untuk konfigurasi awal database dengan melakukan koneksi antara driver JDBC dengan Java. 2. DataModelParkir.java, berfungsi untuk membuat model data parkir dimana tiap record database parkir dirincikan satu-satu kedalam bahasa Java. 53 3. DataModelPetugas.java, berfungsi untuk membuat model data petugas dimana tiap record dari database petugas dirincikan satu-satu kedalam bahasa Java. 4. GrafikJenisKendaraan.java, berfungsi untuk mebuat panel grafik jenis kendaraan. 5. LaporanKendaraan.java, berfungsi untuk membuat panel laporan parkir harian kendaraan berdasarkan jenis kendaraan.. 6. LaporanParkirHarian.java, berfungsi untuk membuat panel laporan parkir harian kendaraan keseluruhan. 7. LaporanParkirPeriodik.java, berfungsi untuk membuat panel laporan parkir kendaraan secara periodick. 8. LaporanPendapatan.Java, berfungsi untuk untuk membuat panel laporan pendapatan parkir yang nanti kemudian diset kedalam bentuk grafik pendapatan. 9. LaporanPertumbuhan.Java, berfungsi untuk untuk membuat panel laporan pertumbuhan parkir yang nanti kemudian diset kedalam bentuk grafik pertumbuhan. 10. LaporanPetugas.Java, berfungsi untuk membuat panel laporan daftar petugas. 11. LoginAdminFrame.Java, berfungsi untuk membuat Java Frame login untuk admin. 12. LoginMasukFrame.java, berfungsi untuk membuat Java Frame login untuk petugas masuk. 13. LoginKeluarFrame.java, berfungsi untuk membuat Java Frame login untuk petugas keluar. 54 14. MultiLineHeaderRenderer.java, berfungsi untuk membuat Renderer untuk tabel pada panel pintu keluar. Renderer ini dapat membuat header tabel menjadi multiline. Jika pada nama kolom ditemukan escape character\n maka kata berikutnya akan dirender pada baris berikutnya. 15. PanelAdmin.java, berfungsi untuk membuat panel Administrasi. 16. PanelMasuk.Java, berfungsi untuk membuat user interface untuk pintu masuk. 17. PanelKeluar.Java, berfungsi untuk membuat user Interface untuk pintu keluar. 18. PanelPetugas.java, berfungsi untuk membuat user Interface untuk petugas. 19. ParkirDAO.Java, berfungsi untuk membuat program yang mengakses data objek untuk tabel parkir. 20. PetugasDAO.Java, berfungsi untuk membuat program yang mengakses data objek untuk tabel petugas. 21. PetugasTableModel.java, berfungsi untuk Tabel Model untuk tabel pada panel petugas dan program untuk menampilkan data pada tabel. 22. PintuMasukModel.java, berfungsi untuk Tabel Model untuk tabel pada panel Pintu Masuk dan program untuk menampilkan data pada tabel. 23. PintuKeluarModel.java, berfungsi untuk Tabel Model untuk tabel pada panel Pintu Keluar dan program untuk menampilkan data pada tabel. 24. StrukParkirDialog.java, berfungsi untuk membuat dialog untuk mencetak struk parkir. 25. Util.java, berfungsi untuk membuat utilitas untuk mengambil icon dan image dan membuang spasi. 55 4.2.1 Program Pengolah Data Untuk Admin Pengolahan data dalam “Sistem Monitoring Biaya Parkir Di Hotel Quality Berbasis Jaringan Menggunakan Java” untuk penginputan data petugas dilakukan oleh Admin pada halaman login Admin. Fungsi dari halaman ini adalah untuk menjaga keamanan data yang ada, di mana setiap admin yang bertugas untuk melakukan pemasukan, pengeditan atau pun penghapusan data harus login terlebih dahulu. Sehingga tidak setiap orang berhak untuk masuk tanpa melewati proses login ini baik petugas masuk maupun keluar. Dalam halaman tersebut terdapat form login administrator dengan tampilan seperti pada gambar 4.1 : Gambar 4.1 Login Administrator Setelah admin mengisikan nama dan password dengan benar, maka kita akan masuk ke halaman menu utama admin dengan tampilan seperti pada gambar 4.2. 56 Gambar 4.2 Menu Utama Admin Pada menu utama untuk admin dari pengolahan data “Sistem Monitoring Biaya Parkir Di Hotel Quality Berbasis Jaringan Menggunakan Java ” ini terdiri dari beberapa program untuk penginputan data, pengeditan data, penghapusan data petugas dan juga laporan-laporan parkir. Program-program tersebut antara lain: 4.2.1.1 Program Pemasukan Data Petugas Nama File : PetugasDAO.java Fungsi : untuk memasukan seluruh daftar nama-nama petugas . 57 Gambar 4.3 Halaman Input Data Petugas Parkir Prosedure yang digunakan untuk memasukkan data petugas adalah sebagai berikut: public static int insertPetugas(DataModelPetugas model) throws SQLException { PreparedStatement query = con.prepareStatement("INSERT INTO petugas "VALUES (?, ?, ?, ?, ?, ?)"); query.setString(1, model.getNomorPetugas()); query.setString(2, model.getNamaPetugas()); query.setString(3, model.getAlamat()); query.setString(4, String.valueOf(model.getJenisKelamin())); query.setString(5, model.getLevel()); query.setString(6, model.getPassword()); return query.executeUpdate(); Metode diatas dapat diakses ke semua kelas karena bersifst public dimana insertPetugas dipanggil dari class DataModelPetugas. Static merupakan metode kelas. Int merupakan nilai return value yang merupakan metode untuk mengembalikan nilai integer. PreparedStatement merupakan bahasa java untuk mengubah query yang telah terkoneksi dengan database. Isi dari statement berupa bahasa query. Pada query diatas terdapat variable “?” yang nantinya 58 akan diisi dengan nomor petugas, nama petugas seperti pada perintah query.setstring. Perintah setstring mengubah karakter menjadi string. Nomor 1, 2, 3 pada perintah query.setstring berdasarkan urutan pada database. Pada query.setString(4, String.valueOf(model.getJenisKelamin)) untuk jenis kelamin bertipe data karakater karena itu harus diubah ke string dengan pernyataan String.valueOf. Jika semua variabel “?” telah diisi (update) maka query di eksekusi jika belum diisi maka akan error. 4.2.1.2 Program Laporan 4.2.1.2.1 Program Laporan Daftar Petugas Nama File : LaporanPetugas.java Fungsi : untuk menampilkan seluruh daftar nama-nama petugas baik petugas masuk maupun petugas keluar. 4.2.1.2.2 Program Laporan Kendaraan Parkir Harian Secara Keseluruhan Nama File : LaporanParkirHarian.java Fungsi : untuk menampilkan seluruh data parkir kendaraan parkir selama satu hari baik yang sudah keluar maupun yang masih parkir didalam. 4.2.1.2.3 Program Laporan Harian Kendaraan Yang Masih Parkir Nama File : LaporanParkirHarian.java Fungsi : untuk menampilkan seluruh data parkir kendaraan parkir selama satu hari baik hanya khusus kendaraan yang masih parkir didalam. 59 4.2.1.2.4 Program Laporan Kendaraan Berdasarkan Jenis Kendaraan Nama File : LaporanKendaraan.java Fungsi : untuk menampilkan data kendaraan berdasarkan jenis kendaraan baik kendaraan roda dua maupun kendaraan roda dua. 4.2.1.2.5 Program Laporan Parkir Kendaraan Secara Periodik Nama File : LaporanParkirPeriodik.java Fungsi : untuk menampilkan seluruh parkir kendaraan parkir selama periode tertentu. 4.2.2 Program Pengolah Data Parkir 4.2.2.1 Halaman Login Petugas Sebelum masuk ke Interface parkir masuk dan keluar petugas masuk dan keluar harus melakukan login. Fungsi dari halaman ini adalah untuk menjaga keamanan data yang ada, di mana tidak setiap orang berhak untuk masuk tanpa melewati proses login. Gambar 4.4 Login Petugas 60 4.2.2.2 Program Pemasukan Data Parkir Masuk Nama File : ParkirDAO.java Fungsi : untuk memasukan data parkir masuk, meliputi NoCatat, TglParkir, NoPlat, JenisKendaraan, Jam Masuk dan NoPetugas Masuk. Data akan disimpan dalam tabel parkir. Gambar 4.5 Halaman Input Data Parkir Masuk Prosedure yang digunakan untuk memasukkan data parkir masuk adalah sebagai berikut: public static int insertParkirMasuk(DataModelParkir model) throws SQLException { PreparedStatement query = con.prepareStatement("INSERT INTO parkir " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); query.setString(1, model.getNoCatat()); query.setDate(2, new Date(model.getTglParkir().getTime())); query.setNull(3, Types.DATE); query.setString(4, model.getNoPlat()); query.setString(5, String.valueOf(model.getJeniKendaraan())); query.setString(6, model.getNoPetugasMasuk()); query.setString(7, model.getJamMasuk() + ":00"); query.setNull(8, Types.VARCHAR); query.setNull(9, Types.DATE); query.setNull(10, Types.INTEGER); return query.executeUpdate(); Pada variable “?” nantinya akan diisi dengan nomor petugas, nama petugas seperti pada perintah query.setstring. Perintah query.setString(1, 61 model.getNoCatat()) mengubah karakter menjadi string. Setstring nomor 2 diset dengan tipe data Date menjadi new date dengan mengambil tanggal dari system. Pada query dengan setnull berarti belum ditampilkan dan kosong. Pada query.setString(7, model.getJamMasuk() + ":00") untuk jam masuk diset dengan menambahkan detik. Jika semua variabel “?” telah diisi (update) maka query di eksekusi jika belum diisi maka akan error. 4.2.2.3 Program Struk untuk Pengguna Parkir Nama File : StrukParkirDialog.java Fungsi : untuk menampilkan struk parkir dan sekaligus untuk mencetaknya. Gambar 4.6 Halaman Struk untuk pengguna parkir Prosedure yang digunakan untuk menghitung biaya kembali parkir adalah sebagai berikut: public void actionPerformed(ActionEvent e) { int bayar = Integer.parseInt(cashField.getText()); int kembali = bayar - model.getBiaya(); kembaliField.setText(String.valueOf(kembali)); Metode diatas dapat diakses disemua kelas karena bersifat public. Bayar bertipe integer dan ditampilkan pada TextField cash. Int kembali = bayar – total 62 biaya dan ditampilkan pada TextField Kembali. 4.2.3 Program Pengeditan Data 4.2.3.1 Program Ubah Data Petugas Nama File : PetugasDAO.java Fungsi : untuk mengubah data petugas sesuai dengan data petugas yang dipilih. Data pada tabel petugas akan berubah. Gambar 4.7 Halaman Ubah Data Petugas Prosedure yang digunakan untuk mengubah data petugas adalah sebagai berikut: public static int updatePetugas(DataModelPetugas model) throws SQLException { PreparedStatement query = con.prepareStatement("UPDATE petugas SET NoPetugas = ?, " NamaPetugas = ?, Alamat = ?, JenisKelamin = ?, Level = ?, " Password = ? WHERE NoPetugas = ?"); query.setString(1, model.getNomorPetugas()); query.setString(2, model.getNamaPetugas()); query.setString(3, model.getAlamat()); query.setString(4, String.valueOf(model.getJenisKelamin())); query.setString(5, model.getLevel()); query.setString(6, model.getPassword()); query.setString(7, model.getNomorPetugas()); return query.executeUpdate(); Metode diatas dapat diakses ke semua kelas karena bersifst public dimana updatePetugas dipanggil dari class DataModelPetugas. Static 63 merupakan metode kelas. Pada variable “?” yang telah terisi dengan nomor petugas, nama petugas seperti pada perintah query.setstring. Pada perintah update diatas data tidak perlu ditampilkan semua cukup menampilkan NoPetugas dengan query where. Jika where telah diisi maka query di eksekusi. 4.2.3.2 Program Ubah Data Parkir Masuk Nama File : ParkirDAO.java Fungsi : untuk mengubah data parkir masuk sesuai dengan data parkir masuk yang dipilih. Data pada tabel parkir akan berubah. Gambar 4.8 Halaman Ubah Data Parkir Masuk Prosedure yang digunakan untuk mengubah data parkir masuk adalah sebagai berikut: public static int updateParkirMasuk(DataModelParkir model) throws SQLException { PreparedStatement query = con.prepareStatement("UPDATE parkir SET NoCatat = ?, "TglParkir = ?, TglKeluar = ?, NoPlat = ?, JenisKendaraan = ?, "NoPetugasM = ?, JamMasuk = ?, NoPetugasK = ?, JamKeluar = ?, "Biaya = ? WHERE NoCatat = ?"); query.setString(1, model.getNoCatat()); query.setDate(2, new Date(model.getTglParkir().getTime())); query.setNull(3, Types.DATE); query.setString(4, model.getNoPlat()); query.setString(5, String.valueOf(model.getJeniKendaraan())); query.setString(6, model.getNoPetugasMasuk()); query.setString(7, model.getJamMasuk() + ":00"); query.setNull(8, Types.VARCHAR); query.setNull(9, Types.DATE); query.setNull(10, Types.INTEGER); query.setString(11, model.getNoCatat()); 64 return query.executeUpdate(); Metode diatas dapat diakses ke semua kelas karena bersifst public dimana updateParkirMasuk dipanggil dari class DataModelParkirMasuk. Pada variable “?” nantinya akan diisi dengan NoCatat, TglParkir seperti pada perintah query.setstring. Pada perintah update diatas data tidak perlu ditampilkan semua cukup menampilkan NoCatat dengan query where. Jika where telah diisi maka query di eksekusi. 4.2.3.3 Program Update Data Parkir Keluar Nama File : ParkirDAO.java Fungsi : data yang ada pada parkir masuk di update pada parkir keluar yang kemudian disimpan pada table parkir. Data pada tabel parkir akan berubah. Gambar 4.9 Halaman Update Data Parkir Keluar 65 Prosedure yang digunakan untuk mengupdate data parkir keluar adalah sebagai berikut: public static int updateParkirKeluar(DataModelParkir model) throws SQLException { PreparedStatement query = con.prepareStatement("UPDATE parkir SET NoCatat = ?, " +"TglParkir = ?, TglKeluar = ?, NoPlat = ?, JenisKendaraan = ?, " +"NoPetugasM = ?, JamMasuk = ?, NoPetugasK = ?, JamKeluar = ?, " + "Biaya = ? WHERE NoCatat = ?"); query.setString(1, model.getNoCatat()); query.setDate(2, new Date(model.getTglParkir().getTime())); query.setDate(3, new Date(model.getTglKeluar().getTime())); query.setString(4, model.getNoPlat()); query.setString(5, String.valueOf(model.getJeniKendaraan())); query.setString(6, model.getNoPetugasMasuk()); query.setString(7, model.getJamMasuk()); query.setString(8, model.getNoPetugasKeluar()); query.setString(9, model.getJamKeluar()); query.setInt(10, model.getBiaya()); query.setString(11, model.getNoCatat()); return query.executeUpdate(); Perintah UpdateParkirKeluar diatas bukan merupakan perintah untuk edit data. Karena pada pintu keluar hanya mengambil data dari database parkir untuk data masuk yang masih null akan du update. Pada perintah update diatas data jika diisikan nomor plat dengan query where maka semua data parkir keluar akan tampil. Jika where telah diisi maka query di eksekusi. 4.2.3.4 Program Penghapusan Data Petugas Nama File : PetugasDAO.java Fungsi : untuk menghapus data petugas sesuai dengan data petugas yang dipilih. Data akan terhapus dari tabel petugas. 66 Gambar 4.10 Halaman Hapus Data Petugas Prosedure yang digunakan untuk menghapus data petugas adalah sebagai berikut: public static int deletePetugas(DataModelPetugas model) throws SQLException { PreparedStatement query = con.prepareStatement("DELETE FROM petugas " "WHERE NoPetugas = ?"); query.setString(1, model.getNomorPetugas()); Metode ini bersifat public. Untuk menjalankan perintah deletePetugas maka NoPetugas yang akan dihapus ditampilkan dengan perintah where dimana pada query setstring di isis dengan nomorpetugas. 67 4.3 Koneksi Antara Database Parkir Masuk Dan Database Pintu Keluar Koneksi antara pintu masuk dan pintu keluar dilakukan dengan cara input data dari pintu masuk akan dimasukan kedalam database parkir dimana sebelumnya telah dilakukan koneksi antara database dengan program yang ditulis oleh program java. Data Parkir masuk yang telah pada database parkir di panggil kembali oleh pintu keluar. Jadi sebenarnya pintu masuk dan pintu keluar tidak berhubungan secara langsung. Prosedure yang digunakan untuk Koneksi antara database dengan program Java yang dilakukan JDBC terletak pada class dbconfig.java sebagai berikut: Class.forName(namaKelas); } catch (ClassNotFoundException cx) { System.err.println("Driver database tidak ditemukan"); } try { con = DriverManager.getConnection(url, nama, password); } catch (SQLException sx) { System.err.println("DriverManager gagal membuat koneksi dengan database"); } } Selanjutnya data pada database parkir di koneksikan ke program Java terletak pada class ParkirDAO.java sebagai berikut : public class ParkirDAO { // koneksi ke DBMS private static Connection con; static { con = DBConfig.getConnection(); Metode public class PArkirDAO di atas telah di koneksikan dengan perintah con = DBConfig.getConnection(). 68 4.4 Aplikasi Laporan Grafik Program “Sistem Monitoring Biaya Parkir Di Hotel Quality Berbasis Jaringan Menggunakan Java” ini memiliki beberapa aplikasi laporan berupa grafik yang akan menyajikan berbagai informasi secara menyeluruh atau detail dari laporan yang ada. Hanya Admin yang mempunyai hak akses untuk membuka program aplikasi tersebut . 4.4.1 Grafik Parkir Harian Berdasarkan Jenis Kendaraan Nama File : GrafikJenisKendaraan.java Fungsi : untuk membuat grafik berdasarkan laporan jenis kendaraan. Gambar 4.11 Halaman Grafik Jenis Kendaraan 69 Prosedure yang digunakan untuk membuat grafik jenis kendaraan adalah sebagai berikut: private JFreeChart buatGrafik(PieDataset dataset) { JFreeChart chart = ChartFactory.createPieChart3D("Grafik Parkir Harian " Berdasarkan Jenis Kendaraan", dataset, true, false, false); PiePlot3D plot = (PiePlot3D)chart.getPlot(); Metode diatas bersifat private sehingga hanya dapat diakses oleh kelas JFreeChart yang merupakn panel untuk membuat grafik dengan datasetnya adalah PieDataset. Untuk membuat PieChart digunakan perintah CreatePieChart dengan judul “ Grafik Parkir Harian Berdasarkan Jenis Kendaraan” dengan keterangan ditampilkan (true) dan tooltips bernilai false. 4.4.2 Grafik Pertumbuhan Jumlah Kendaraan Parkir Periodik Nama File : LaporanPertumbuhan.java Fungsi : untuk membuat laporan pertumbuhan jumlah kendaraan parkir berbasis grafik berdasarkan laporan parkir periodik kendaraan. Gambar 4.12 Halaman Grafik Pertumbuhan Jumlah Kendaraan 70 Prosedure yang digunakan untuk membuat grafik pertumbuhan jumlah kendaraan adalah sebagai berikut: private JFreeChart buatGrafik(XYDataset dataset) { JFreeChart chart = ChartFactory.createTimeSeriesChart("Grafik Pertumbuhan Jumlah Kendaraan Parkir Periodik", "Tanggal", "Jumlah", dataset, true, true, false); chart.setBackgroundPaint(Color.WHITE); Metode diatas bersifat private sehingga hanya dapat diakses oleh kelas JFreeChart yang merupakn panel untuk membuat grafik dengan datasetnya adalah XYDataset. Untuk membuat XYChart digunakan perintah ChartFactory.createTimeSeriesChart dengan judul “Grafik Pertumbuhan Jumlah Kendaraan Parkir Periodik” dengan tanggal sebagai sumbu X, Jumlah sebagai sumbu Y dan keterangan ditampilkan (true). 4.4.3 Grafik Pertumbuhan Jumlah Pendapatan Parkir Periodik Nama File : LaporanPendapatan.java Fungsi : untuk membuat laporan pertumbuhan jumlah pendapatan parkir kendaraan yang berbasis grafik berdasarkan laporan parkir periodik kendaraan. 71 Gambar 4.13 Halaman Grafik Pertumbuhan Jumlah Pendapatan Parkir Periodik Prosedure yang digunakan untuk membuat grafik pertumbuhan jumlah pendapatan parkir kendaraan adalah sebagai berikut: private JFreeChart buatGrafik(XYDataset dataset) { JFreeChart chart = ChartFactory.createTimeSeriesChart("Grafik Pertumbuhan Jumlah Pendapatan" +" Periodik", "Tanggal", "Jumlah Pendapatan", dataset, true, true, false); chart.setBackgroundPaint(Color.WHITE); Metode diatas bersifat private sehingga hanya dapat diakses oleh kelas JFreeChart yang merupakn panel untuk membuat grafik dengan datasetnya adalah XYDataset. Untuk membuat XYChart digunakan perintah ChartFactory.createTimeSeriesChart dengan judul “Grafik Pertumbuhan Jumlah Pendapatan” dengan tanggal sebagai sumbu X, Jumlah Pendapatan sebagai sumbu Y dan keterangan ditampilkan (true).