Tuesday, March 29, 2011

Aplikasi Perhitungan Transaksi Parkir menggunakan Java dan Oracle

BAB 1
PENDAHULUAN

1.1. Latar Belakang Masalah
Padatnya jadwal aktivitas masyarakat sekarang ini mendorong para pemerintahan setempat untuk membuat taman di tengah kota yang berguna sebagai sarana untuk rekreasi yang mudah dan murah. Taman kota yang besar membutuhkan lahan parkir yang luas untuk para pengunjung sehingga dibutuhkan suatu aplikasi berbasis database untuk memudahkan pekerjaan dalam hal sistem parkir kendaraan. Lamanya waktu pencatatan data kendaraan, biaya parkir kendaraan yang tidak pasti dan faktor keamanan yang menyebabkan sistem parkir secara manual tidak lagi dapat diandalkan. Maka dari itu, pemrograman database dalam sistem parkir kendaraan dapat digunakan untuk mempercepat dan mempermudah suatu pekerjaan dalam hal sistem parkir kendaraan.
Aplikasi ini akan berfungsi dengan baik dalam setiap daerah taman kota yang membutuhkan suatu sistem dalam parkir kendaraan. Waktu yang lebih efisien karena dapat memudahkan seorang petugas dalam pekerjaannya sehingga tidak perlu mencatat secara manual data kendaraan, biaya parkir kendaraan yang telah ditentukan secara pasti dan mempunyai sistem keamanan yang cukup baik, membuat aplikasi ini dibutuhkan dalam setiap sistem parkir kendaraan.
Berdasarkan hal tersebut, penulis membuat suatu aplikasi pada komputer yang berupa Aplikasi Perhitungan Transaksi Parkir menggunakan Java dan Oracle. Untuk pembuatan aplikasi ini penulis menggunakan bahasa pemrograman Java yang merupakan salah satu jenis bahasa pemograman terstruktur yang memiliki kemampuan untuk dapat berjalan diberbagai platform dan Oracle untuk pemrograman database.

1.2 Pembatasan Masalah.
Dalam penulisan ilmiah ini, penulis hanya membatasi ruang lingkup pembahasan seputar pembuatan Aplikasi Perhitungan Transaksi Parkir menggunakan Java NetBeans IDE 6.0 dan Oracle Database 10g Express Edition. Aplikasi Perhitungan Transaksi Parkir ini diterapkan pada sebuah taman kota, sehingga tipe kendaraan yang dapat masuk dibatasi hanya mobil dan motor. Gerbang masuk dan keluar kendaraan hanya disediakan 1 gerbang. Pada saat masuk dan keluar kendaraan tidak dilakukan pemeriksaan STNK. Di dalam aplikasi hanya petugas parkir yang mempunyai Username dan Password yang dapat mengakses aplikasi ini. Denda akan diberikan kepada semua tipe kendaraan yang kehilangan kartu parkir pada saat keluar area parkir dengan biaya denda Rp 20.000,00 per kendaraan. Biaya parkir yang dikenakan untuk setiap tipe kendaraan berbeda-beda, untuk jenis kendaraan mobil 1 jam pertama dikenakan Rp 2.000,00 dan untuk setiap jam berikutnya dikalikan Rp 1.000,00, sedangkan untuk tipe kendaraan motor 1 jam pertama dikenakan Rp 1.000,00 dan untuk setiap jam berikutnya dikalikan Rp 500,000.

1.3 Tujuan Penulisan.
Adapun tujuan daripada penulisan ilmiah ini adalah bahwa penulis ingin membuat program aplikasi yang berbasis database dengan tampilan GUI (Graphic User Interaface) yang membantu dalam sistem perhitungan transaksi parkir kendaraan menggunakan bahasa pemrograman Java dan pemrograman database Oracle.

1.4. Metode Penelitian.
Metode penulisan yang digunakan adalah dengan menggunakan metode studi kepustakaan dimana penulis mendapatkan bahan-bahan untuk penulisan ini dengan cara mengumpulkan berbagai referensi yang menunjang penulisan dan pembuatan program seperti, informasi dan teori-teori dasar pemrograman Java dan Oracle. Penulis juga menggunakan media elektronik seperti internet sebagai sumber kepustakaan di samping buku.

1.5. Sistematika Penulisan.
Dalam penulisan ilmiah ini penulis juga membuat sistematika penulisan keseluruhan yang tercantum sebagai berikut :

Bab 1 PENDAHULUAN
Bab ini berisikan mengenai Latar Belakang Masalah, Batasan Masalah, Tujuan Penulisan, Metode Penelitian yang dipakai dan Sistematika Penulisan.
Bab 2 LANDASAN TEORI
Bab ini berisikan landasan teori, menguraikan sejarah dan dasar-dasar pemograman Java dan Oracle, flowchart berikut simbol-simbolnya dan keterangannya, struktur navigasi berikut penjelasannya.
Bab 3 PEMBAHASAN MASALAH
Bab ini berisikan pembahasan dan analisa masalah, yang akan menjelaskan perancangan sistem kerja aplikasi database dengan menggunakan flowchart, struktur navigasi, rancangan database dan program rancangan aplikasi.
Bab 4 PENUTUP
Bab ini berisi kesimpulan dari bab yang ada sebelumnya serta saran mengenai aplikasi yang disajikan pada penulisan ilmiah ini.


BAB 2
LANDASAN TEORI

Gambaran Umum
Pada bab ini yang akan dibahas oleh penulis mengenai sekilas tentang Aplikasi Perhitungan Transaksi Parkir menggunakan Java dan Oracle. Berikut akan dibahas mengenai bahasa pemrograman Java, sejarah singkat Java, pengenalan bahasa pemrograman Java, kontrol-kontrol yang digunakan dan istilah-istilah yang digunakan dalam Java, pengenalan Oracle dan sintak-sintak dasar SQL.

2.1 Sejarah Singkat Perkembangan Java
Pada tahun 1991, sekelompok insinyur Sun dipimpin oleh Patrick Naughton dan James gosling ingin merancang bahasa komputer untuk perangkat konsumer seperti cable TV box. Karena perangkat itu tidak mempunyai banyak memori, bahasa harus berukuran kecil dan menghasilkan kode yang sulit. Juga karena manufaktur-manufaktur berbeda memilih pemroses-pemroses berbeda, maka bahasa harus bebas dari arsitektur manapun. Proyek diberi nama kode “ Green”. Bahasa berukuran kecil, sulit dan kode netral mengantarkan tim untuk menggunakan sebuah mesin yang menggunakan interpreter yang dapat membaca kode antara.
Karena orang-orang di Green berbasis C++ maka kebanyakan sintaks diambil dari C++ , serta mengadopsi orientasi objek bukan procedural. Mulanya bahasa yang diciptakan diberi nama “Oak”, kemudian diganti dengan “Java” karena telah ada bahasa pemrograman yang bernama “Oak”.
Pada tahun 1995, Netscape memutuskan membuat browser yang dilengkapi dengan Java. Setelah itu oleh IBM, Symantec, Insprise, bahkan Microsoft. Setelah itu gaung Java mulai terdengar ,berbagai industri telah meliriknya. Dengan statregi terbukanya, banyak industri yang menyambutnya. Bersamaan itu disusul berbagai universitas Amerika, Jepang dan Eropa yang mengubah pengenalan bahasa pemrograman komputer menjadi Java, meninggalkan C++. Java lebih sederhana dan telah mengakomodasikan hampir seluruh fitur penting bahasa-bahasa pemrograman yang ada semenjak perkembangan komputasi modern manusia. Bahasa Java telah disertai berton-ton pustaka kelas.

2.1.1 Rilis JAVA
Bahasa JAVA merupakan karya Sun Microsystem Inc. Rilis resmi level beta dilakukan pada November 1995. Dua bulan berikutnya Netscape menjadi perusahaan pertama yang memperoleh lisensi bahasa JAVA dari Sun. Dan Pada 1996, Sun mengeluarkan JSDK (Java Software Development Kit)

2.1.2 Edisi Java
Bahasa pemrograman modern berdiri diatas pustaka-pustaka kelas yang telah ada untuk mendukung fungsionalitas bahasanya. Pada bahasa Java, kelompok-kelompok kelas yang berkaitan erat dimasukkan dalam satu paket. Masing-masing paket tersebut mempuyai maksud tertentu : applet, aplikasi standart, skala enterprise dan produk konsumer. Java 2 Platform tersedia dalam tiga edisi untuk keperluan berbeda. Untuk beragam aplikasi yang dibuat dengan bahasa Java, Java dipaketkan dalam edisi-edisi be rikut :
1. Java Standard Edition (J2SE),
2. Java 2 Enterprise Edition (J2EE),
3. Java 2 Macro Edition (J2ME).

2.1.3 Mengenal Java 2 Software Development Kit (J2SDK)
Java merupakan suatu teknologi yang unik dan revolutioner dan merupakan teknologi pertama didunia software yang memiliki semboyan “write one, run anywhere”. Semboyan tersebut telah terbukti karena banyak pemrograman Java dapat dijalankan diberbagai platform atau sistem operasi, seperti Linux, Windows maupun Unix. Secara singkat, karakteristik Java adalah:
• Sederhana
Java tidak memiliki sintaks yang aneh tetapi banyak menggunakan sintaks C++ yang sudah banyak dikenal sehingga Java tidak menyulitkan bagi para programer. Bahkan Java memberikan banyak keunggulan dan kemudahan dibanding C++.
• Berorientasi object
Java merupakan pemrograman berorientasi object yang murni. Dalam pemrograman Java semua objek, terkecuali tipe data primiitif.
• Dapat didistribusikan dengan mudah
Sifat terdistribusi dari Java sangat tampak sebagai applet dan library yang mampu bekerja dalam jaringan dan bekerja dengan objek terdistribusi (RMI) dengan sangat baik. Saat ini Java juga memiliki kemampuan untuk server side processing, yaitu teknologi Java Servlet dan Java Server Pages.
• Aman
Aman karena program Java memiliki library security serta policy yang membatasi akses applet di computer client.
• Diinterpretasi oleh interpreter
Java memerlukan virtual machine yang bertindak sebagai interpreter yang menterjemahkan bytecode (file class) menjadi bahasa mesin yang dimengerti oleh komputer host.
• Portabel
Portabel karena Java dapat dijalankan di berbagai platform tanpa perubahan kode sama sekali.
• Multithreading
Java memiliki kemampuan untuk menangani dan menjalankan banyak thread sekaligus.
• Dinamis
Java merupakan teknologi yang terus berkembang dan hal ini tampak nyata sekali dengan library yang terus ditingkatkan kemampuan dan kelengkapannya. Bahkan Java saat ini telah menjadi teknologi handal untuk aplikasi mobile dengan adanya Java 2 Makro Edition.
• Netral terhadap arsitektur hardware
Java dapat dijalankan dengan baik pada komputer yang memiliki arsitektur berbeda-beda.
• Robust
Java merupakan teknologi yang mampu menolong programer untuk menghasilkan program secara cepat dan handal karena Java mencegah adanya memori leaking, meniadakan pointer (yang merupakan keharusan pada programmer C dan C++), serta mencegah berbagai error yang mungkin terjadi dengan adanya berbagai proses pengecekan awal pada kompilasi.

Java 2 Software Development Kit (J2SDK) merupakan bekal utama bagi developer untuk membuat suatu program dan menjalankan program Java. Secara garis besar Java 2 Software Development Kit (J2SDK) terdiri dari :
• Java Compiler (Javac)
• Java Virtual Machine / Runtime Environment (JRE)
• Java Class Libraries
• Java Applet Viewer
• Java Debugger
• Documentasi

2.1.4 Fasilitas Baru di Java 1.6.0
Java 2 dengan JDK versi 1.6.0 memiliki banyak perbaikan dan kemajuan dibandingkan dengan versi JDK sebelumnya baik dalam segi kelengkapan library maupun performance proses. Dibawah ini adalah beberapa contoh kemajuannya :
• JDBC
JDBC kependekan dari (Java DataBase Connectivity), yang merupakan sebuah API (Application Programming Interface) berisi sekumpulan class-class Java, interface dan exception. JDBC juga sebuah spesifikasi yang baik bagi vendor driver JDBC maupun Driver Manager bagi pengembang aplikasi yang memanfaatkan JDBC. JDBC sangat populer dilingkungan pemrograman Java sebagai standar pengaksesan database. Beberapa vendor RDBMS (Relational DataBase Management Systems), seperti MySQL, Oracle, PostgreSQL, menyediakan driver JDBC khusus untuk produk mereka.
• Fasilitas Assertion
Assertion adalah ekspressi boolean yang digunakan programmer untuk memastikan kondisi yang diinginkan dari program komputer yang dibuat . Fasilitas ini berguna bagi developer/programmer dalam melakukan debug dan membantu proses development program.
• Regular Expressions
Merupakan package baru Java.util.regex memiliki class-class untuk menemukan kesamaan urutan karakter atau string sesuai pola yang diinginkan dengan regular exspressions.

2.1.5 Tool Utama dari JDK
Java 2 SDK menyediakan tool-tool penting yang digunakan untuk kompilasi dan menjalankan program Java . Dua tool yang utama adalah :
• Java
Command ini digunakan untuk menjalankan program Java atau file .class atau file hasil kompilasi. Sebenarnya command ini adalah sebuah file java.exe yang terdapat pada folder bin di instalasi J2SDK 1.6.0.
• Javac
Command ini digunakan untuk mengkompilasi atau merupakan java compiler yang mengubah program Java menjadi bytecode (file berekstensi .class). Command ini sebenarnya merupakan file javac.exe yang juga terdapat di folder bin dari instalasi J2SDK 1.6.0.

2.2 Variabel dan Tipe Data
Telah diketahui Java dikenal sebagai bahasa pemrograman dengan sifat strongl tiped di mana artinya adalah harus mendeklarasikan tipe data dari semua variabel, disini sering terjadi error pada saat proses kompilasi. Java memiliki tipe data yang dapat dikategorikan menjadi dua, tipe data primitif dan referensi.

2.2.1 Tipe Data Primitif
Ada delapan macam tipe data primitif dalam pemrograman Java,yaitu :
Tipe integer :
1. byte
2. short
3. integer
4. long
Tipe floating point :
5. float
6. double
Tipe char :
7. char
Tipe boolean :
8. boolean

2.2.1.1 Integer
Secara singkat integer merupakan tipe data numerik yang digunakan apabila tidak berurusan dengan pecahan atau bilangan desimal. Berikut adalah beberapa tipe data numerik yang termasuk integer

Bilangan integer biasanya menggunakan int dan bukan byte, short maupun long. Tipe byte dan short hanya digunakan pada aplikasi khusus yang memperhatikan penggunaan memori. Sedangkan long jarang digunakan karena memang jarang memerlukan bilangan sebesar kapasitas long. Untuk bilangan oktal, diawali dengan angka 0. Misalnya, untuk bilangan desimal 8, berarti mendefinisikannya 0 1 0 0 untuk bilangan oktal. Sedangkan untuk bilangan heksadesimal, harus diawali dengan 0x (nol dan huruf x). Misalnya seperti 0xCFA. Bilangan integer juga mengenal positif dan negatif (signed number).

2.2.1.2 Floating Point
Floating point merupakan tipe data primitif dalam Java dan digunakan untuk menangani bilangan desimal atau perhitungan yang lebih detail dibanding integer. Ada dua macam foating point, yaitu :
• Float : Memiliki nilai -3.4 x 108 sampai +3.4 x 108 dan menempati 4 byte di memori .
• Double : Memiliki nilai -1.7 x 10308 sampai +1.7 x 10308

Semua bilangan pecahan atau desimal dalam Java tanpa diakhiri huruf f akan dianggap double. Sedangkan bilangan yang ingin dikategorikan sebagai float harus diakhiri dengan huruf F. Misalnya : 4.22F, 2.314f.
Sedangkan untuk bilangan double, dapat dipilih untuk menambah huruf D, karena secara default bilangan dengan koma atau pecahan atau desimal akan dianggap double.

2.2.1.3 Tipe Data Char
Char adalah karakter tunggal yang didefinisikan dengan diawali dan diakhiri dengan tanda petik ’ (petik tunggal). Char berbeda dengan string, karena string bukan merupakan tipe data primitif tetapi sudah merupakan objek. Tipe data mengikuti aturan unicode sehingga dapat digunakan kode untuk kemudian diikuti bilangan dari 0 sampai 65535, tetapi biasanya yang digunakan adalah bilangan heksadesimal dari 0000 sampai FFFF.
Selain karakter biasa juga terdapat karakter khusus yang didefinisikan dengan cara mengawalinya menggunakan tanda \ seperti tabel berikut :

2.2.1.4 Boolean
Dalam Java dikenal tipe data boolean yang terdiri dari dua nilai saja, yaitu true atau false. Boolean sangat penting dalam mengevaluasi suatu kondisi, dan sering digunakan untuk menentukan alur program.

2.2.2 Tipe Data Referensi
Kelebihan pemrograman berorientasi object adalah bahwa tipe data baru yang merupakan object dari class tertentu dapat didefinisikan. Tipe data ini digunakan untuk mereferensikan object atau class tertentu, seperti String.

2.2.3 Variabel
Untuk mendefinisikan variabel, dapat digunakan identifier untuk menamai variabel.

2.2.3.1 Identifier
Identifier adalah kumpulan karakter yang dapat digunakan untuk menamai variabel, method, class, interface, dan package. Sebagaimana bahasa pemrograman umumnya Java memiliki peraturan untuk identifier yang valid atau sah. Identifier tidak boleh menggunakan keyword atau kata-kata yang memiliki arti atau digunakan dalam pemrograman Java.

Selain menggunakan karakter biasa, dapat digunakan unicode sebagai identifier.

2.2.3.2 Mendeklarasikan Variabel
sintaks dasar :
[ tipe data ] [ nama variabel ]
Pertama-tama tuliskan tipe data dari variabel, misalnya:
Int variabelbilangan ; Char
karakterku;
Float
bildesimal;
Boolean
status;

setelah mendeklarasikan variabel dengan tipe data yang diinginkan, dapat diberi nilai variabel tersebut. Dengan tanda =.
Variabelbilangan = 10;
Karakterku = ‘f’;
Bildesimal = 44,2f;
Status = true;

2.2.3.3 Macam Variabel Menurut Fungsinya
Variabel dapat menjadi member variabel, static variabel dan local variabel. Karena di sini belum dijelaskan mengenai konsep objek, class maupun method maka saat ini hanya perlu diketahui bahwa member variable adalah variabel dari definisi class, sedangkan local variabel adalah variabel dalam method. Apabila variabel berlaku sebagai member variabel maka variabel akan memiliki nilai default. Perhatikan tabel berikut:

2.2.3.4 Membuat Konstanta
Variabel dapat dibuat menjadi konstanta yang tidak dapat diubah nilainya dengan menambahkan keyword sebelum tipe data dari variabel.
Contoh:
final int konstaninteger = 2;
final float pajak = 12.5;

Apabila konstanta ini ingin mendapat akses oleh class lain tanpa harus membuat objek terlebih dahulu maka dapat ditambahkan modifier public dan keyword static seperti:
public static final konstantainteger =10;

2.3 Operator
Operator yang dibahas pada bagian ini adalah operator aritmatika, assignment (penugasan), relasi, increment, decrement dan logical. Di sini akan dijelaskan satu persatu masing-masing operator.

2.3.1 Operator Aritmatika
Dalam Java dapat digunakan tanda (+) untuk penjumlahan, (-) untuk pengurangan, (*) untuk perkalian, (/) untuk pembagian, dan (%) untuk mendapatkan hasil sisa dari pembagian. Selain penggunaan secara umum, ada cara singkat dalam penulisan dengan operator aritmatika, yaitu:
b=b+5; dapat disingkat menjadi b+=5; lalu
c=c-2; dapat disingkat menjadi c-=2;

2.3.2 Operator Assignment
Operator assignment digunakan untuk melakukan operasi assignment atau pemberian nilai. Operator assignment yang utama adalah tanda = (sama dengan) yang berfungsi untuk memberikan nilai dari operan sebelah kiri dengan operan sebelah kanan. Selain tanda = terdapat beberapa operator assignment lain.

2.3.3 Operator Increment dan Decrement
Operator increment sebenarnya adalah tanda ++ yang digunakan untuk menaikkan nilai sebesar satu. Jadi apabila terdapat variabel integer a, maka ++a memiliki nilai yang sama dengan a = a+l. Ada dua versi operator increment maupun decrement, yaitu prefix dan postfix.
Prefix berarti operator digunakan sebelum variabel atau ekspresi, dan postfix berarti operator digunakan sesudahnya. Untuk prefix, operasi dilakukan baru kemudian nilai dihasilkan, sedangkan post menghasilkan nilai terlebih dahulu baru operasi (increment maupun decrement) dilakukan.

2.3.4 Operator Relasi
Operator ini digunakan untuk menghasilkan nilai Boolean, yang sering digunakan untuk mengatur alur jalannya program. Operator-operator relasi adalah sebagai berikut :
> : lebih dari
< : kurang dari
>= : lebih dari atau sama dengan
<= : kurang dari atau sama dengan
= =: sama dengan
!= : tidak sama dengan

Operator ini sering digunakan untuk kontrol program, misalnya untuk pengkondisian if. Sedangkan untuk String kita sebaiknya menggunakan method equals untuk melakukan operasi yang sama dengan operator = =.

2.3.5 Operator Logik
Operator ini digunakan untuk ekspresi logik • yang menghasilkan nilai Boolean. Operator-operator tipe ini adalah AND (&&), OR (| |) and NOT (!).

2.3.6 Hirarki Prioritas Operator
Urutan prioritas dari operator disebut juga operator precendence dalam bahasa Inggrisnya, di mana pada tabel berikut ditampilkan urutan hirarki prioritas di mana operator paling bawah adalah operator dengan prioritas terkecil. Kolom sebelah kanan merupakan keterangan hubungan asosiatif yang merupakan penjelasan urutan dari operator, misalnya ada dua operator + dengan hubungan asosiatif kiri maka operator + yang kiri akan dijalankan terlebih dahulu.

2.4 Kontrol Alur Eksekusi Program
Sebagai bahasa pemrograman, Java memiliki cara untuk mengontrol alur eksekusi program bergantung pada kondisi yang telah ditentukan. Secara garis besar, kontrol alur eksekusi ini dapat dikelompokkan ke dalam tiga bagian besar, yaitu seleksi, iterasi atau perulangan, dan jump. Berikut ini pembahasan secara lebih terperinci.

2.4.1 Seleksi
Terdapat dua kata kunci (keywords) yang dapat digunakan untuk melakukan seleksi dalam Java, yaitu if dan switch. Keduanya menentukan alur eksekusi program mana yang akan dijalankan pada suatu percabangan.

2.4.1.1 if
Secara umum, penggunaan if mengikuti ketentuan sebagai berikut:
if(kondisi)
pernyataanl;
else
pernyataan2;

Kondisi haruslah berupa ekspresi yang menghasilkan nilai boolean (true atau false), sedangkan pernyataanl dan pernyataan2 merupakan kode atau blok kode yang akan dieksekusi sesuai dengan nilai yang dihasilkan oleh kondisi. Jika kondisi bernilai true maka pernyataanl akan dieksekusi dan sebaliknya jika nilai kondisi adalah false maka pernyataan2-lah yang akan dieksekusi. Berikut ini diagram aktivitas yang menggambarkan alur eksekusi if..else:

Dalam penerapannya, penggunaan else bersifat opsional, dapat menggunakannya atau tidak sesuai dengan kebutuhan, seperti berikut ini:
if(kondisi)
pernyataan;

Dengan demikian pernyataan hanya akan dieksekusi jika kondisi bernilai true. Berikut ini diagram aktivitas yang menggambarkan alur eksekusi if:

• Penggunaan if yang bersarang (Nested if)
Selain itu juga dapat menggunakan if secara bersarang, seperti contoh berikut ini:
if yang bersarang ( nested if).
if(b>5) {
if(a==b)
System.out.println("if di dalam if"); }else
System.out.println("pasangan if terluar");

Perhatikan, penggunaan blok kode di sini memungkinkan program mengetahui pasangan if. .else yang sebenarnya. Secara sederhana, pasangan dari else adalah if yang terdekat dengannya, karena itu bila blok kode di atas dihilangkan maka else di atas adalah milik dari if (a==b) dan bukan milik dari if (b>5). Hal ini mungkin terlihat sepele tetapi terkadang dapat menimbulkan kesalahan logika program yang sangat sulit dicari penyebabnya.

• Penggunaan if.else bertingkat
Pada prinsipnya, penggunaan if..else adalah sama, namun dapat dikombinasikan penggunaannya menjadi bertingkat seperti berikut:
if(kondisil)
pernyataanl; else if(kondisi2)
pernyataan2; else if(kondisi3)
pernyataan3;
else if(kondisiN)
pernyataanN; else
pernyataanDefault;

Hanya if dengan kondisi yang bernilai true yang 'pertama' kali ditemukan yang pernyataannya akan dieksekusi oleh Java, dan jika tidak satu pun kondisi bernilai true maka pernyataan yang terdapat pada else terakhirlah yang akan dieksekusi. Sebagaimana penggunaan if. .else sebelumnya, penggunaan else adalah opsional.

2.4.1.2 Switch
Penggunaan switch sebenarnya mirip dengan penggunaan if bertingkat, dimana semua dapat menggunakannya untuk percabangan yang berjumlah lebih dari satu. Karena itu switch dapat dijadikan alternatif terbaik dibandingkan dengan menggunakan if bertingkat.
Perlu diperhatikan di sini bahwa ekspresi harus memiliki atau mengembalikan tipe data byte, short, int, atau char sementara nilail sampai dengan nilai N haruslah berupa nilai literal konstan, bukan berupa variabel dan tidak diizinkan ada lebih dari satu case dengan nilai yang sama. Penggunaan break adalah untuk memberitahu bahwa pernyataan di dalam blok switch ini telah selesai dieksekusi hingga baris perintah berikutnya di dalam blok switch tidak akan dieksekusi dan program akan langsung keluar dari blok switch, sedangkan penggunaan default mirip dengan penggunaan else dalam if. Berikut ini diagram aktivitas yang menggambarkan alur eksekusi switch:

2.4.2 Iterasi
Penggunaan iterasi dapat dilakukan di dalam setiap perulangan tehadap suatu perintah tanpa menulis perintah yang sama secara berulang. Ada tiga jenis pemyataan iterasi yang dapat digunakan dalam Java yang akan kita bahas secara mendetail berikut ini.

2.4.2.1 While
Penggunaan bentuk while mengikuti pola berikut ini:
while(kondisi)
pernyataan;

Kondisi dapat berupa ekspresi boolean apa pun yang mengembalikan nilai true atau false, sedangkan pernyataan adalah perintah pada saat eksekusi jika kondisi bernilai true. Bentuk while di atas hanya dapat digunakan untuk mengeksekusi satu buah perintah saja. Jika ingin mengeksekusi lebih darisatu perintah gunakan blok kode sebagai ganti dari pernyataan sehingga bentuknya menjadi:
while (kondisi) {
//blok perulangan
Berikut ini diagram aktivitas yang menggambarkan alur eksekusi while:

Perlu diperhatikan di sini bahwa, evaluasi terhadap kondisi dilakukan pada saat awal sehingga jika kondisi mengembalikan nilai false maka perintah di dalam while tidak akan dieksekusi. Dengan demikian ada kemungkinan perintah didalam while tidak akan dieksekusi sama sekali jika pada saat pertama kali kondisi telah bernilai false. Kita dapat bereksperimen dengan contoh program di atas dengan mengubah-ngubah nilai variabel n untuk mendapatkan nilai kondisi true atau false dan melihat hasil keluarannya.

2.4.2.2 do..while
Penggunaan bentuk do..while mengikuti pola berikut ini:
do {
//blok perulangan }while(kondisi);

Penggunaan bentuk do..while ini mirip dengan bentuk while di atas. Perbedaan utamanya hanyalah dua, yaitu:
• Pernyataan yang ingin dieksekusi harus diletakkan di dalam blok kode, sekalipun hanya ingin mengeksekusi satu buah pernyataan saja.
• Pengecekan kondisi (true atau false) dilakukan pada bagian akhir sehingga pernyataan yang ada di dalam blok perulangan akan dieksekusi minimal satu kali, sekalipun eksekusi do..while pertama kali menemukan kondisi bernilai false.
Berikut ini diagram aktivitas yang menggambarkan alur eksekusi do..while:

2.4.2.3 For
Penggunaan bentuk for mengikuti pola berikut ini:
for(inisialisasi;kondisi;iterasi) pernyataan;

Seperti biasa, pernyataan dalam bentuk di atas dapat diganti dengan blok kode sehingga kita dapat mengeksekusi lebih dari satu buah pernyataan. inisialisasi biasanya berupa pernyataan yang menginisialisasi variabel yang akan mengontrol jumlah perulangan, kondisi adalah pernyataan yang akan dieksekusi yang mengembalikan nilai boolean true atau false. Jika kondisi bernilai true maka perulangan akan terus dilanjutkan, sebaliknya jika kondisi bernilai false maka perulangan akan berhenti dan pernyataan selanjutnya setelah for akan dieksekusi. Sedangkan iterasi, biasanya adalah pernyataan yang akan mengubah nilai variabel pengontrol jumlah perulangan. Berikut ini adalah tiga tahap urutan eksekusi dari bentuk for ini:
1. pernyataan untuk inisialisasi akan dieksekusi di mana eksekusi ini hanya akan dilakukan sekali saja pertama kali.
2. kondisi akan dicek apakah bernilai true atau false, jika true maka pemyataan di dalam for akan dieksekusi.
3. pernyataan diikuti oleh iterasi dk ke tahap kedua di atas.

2.4.3 Jump
Java mengenal tiga buah perintah untuk memindahkan alur program ke bagian lain dari program, yaitu break, continue, dan return.

2.4.3.1 Break
Penggunaan break yang utama adalah untuk menghentikan proses perulangan di dalam while, do..while, atau di dalam for. Dan perlu diketahui disini bahwa break hanya akan menghentikan proses perulangan terhadap perintah perulangan ( while,do..while,for ) dimana perintah break tersebut berada, tanpa mempengaruhi proses perulangan yang mungkin ada diluar perulangan yang bersangkutan.

2.4.3.2 Continue
Terkadang dalam mengeksekusi suatu kode dalam perulangan dapat terus melakukan perulangan, tetapi karena kondisi tertentu sebagian kode setelah posisi tertentu tersebut, tidak dieksekusi pada perulangan yang sedang berjalan itu. Disinilah kita dapat menggunakan perintah continue. Dengan menggunakan perintah ini maka sisa kode yang terdapat setelah perintah continue tidak akan dieksekusi untuk perulangan yang sedang berjalan.

2.4.3.3 Return
Perintah Java terakhir yang dapat dikategorikan sebagai jump adalah perintah return yang digunakan di dalam method. Method dipanggil oleh bagian lain dari program. Dengan menggunakan perintah return, alur eksekusi dikembalikan ke bagian dari program yang memanggil method tersebut.

2.5 Class
Pada bab ini kita akan membahas bagian yang paling penting dalam Java, yaitu class. Dengan mendeklarasikan class, dapat menentukan sifat dari suatu objek apa saja.

2.5.1 Pengenalan Dasar Class
Dengan mendeklarasikan suatu class, kita mendeklarasikan suatu tipe data baru, di mana dengan menggunakan tipe data class tersebut, kita dapat membuat instancenya dan instance inilah yang akan menjadi objek sebenarnya. Dari bentuk umum class terbagi menjadi dua bagian besar yaitu deklarasi variabel dan deklarasi method. Variabel yang didefinisikan di dalam class dikenal juga dengan nama property. Setiap instance dari class ini masing-masing akan memiliki property yang telah dideklarasikan di dalam class tersebut, di mana perubahan terhadap nilai suatu property pada suatu instance tidak akan mempengaruhi nilai dari property yang sama yang ada di instance lainnya dan perlu diketahui method dan property adalah bagian dari class, karena itu method dan property juga disebut sebagai class member atau member saja.

2.5.1.1 Method
Method dalam banyak bahasa pemrograman dikenal juga sebagai function atau procedure. Dalam bahasa pemrograman procedural, method lebih digunakan untuk mengelompokkan beberapa instruksi yang sama, yang akan dieksekusi pada beberapa bagian yang berbeda dalam suatu program. Setiap method umumnya memiliki fungsi khusus tersendiri yang umumnya sering dipakai sehingga dengan menggunakan method, program yang dibuat dapat bersifat lebih modular. Dalam pemrograman berorientasi objek, semua fungsi dari method di atas lebih diperdalam lagi, di mana fungsi dari method lebih diutamakan sebagai suatu operasi atau kegiatan yang dapat dilakukan oleh objek.

2.5.1.2 Penggunaan Keyword 'this'
Terkadang dalam suatu method, pada saat ingin me-refer ke objek di mana method ini berada. Diperlukan keyword this untuk melakukannya. Keyword this juga dapat digunakan mirip seperti penggunaan method, di mana penggunaannya adalah untuk memanggil suatu konstruktor dari konstruktor lainnya.

2.5.1.3 Penggunaan Keyword 'static'
Bahwa dalam setiap instance dari suatu class memiliki propertynya masing-masing yang tidak saling berhubungan, di mana property tersebut baru dapat diakses setelah dibuat instancenya. Namun terkadang dapat digunakan suatu property secara langsung tanpa menunjuk ke suatu instance tertentu. Dengan kata lain dapat digunakannya property tersebut tanpa terlebih dahulu membuat instancenya.

2.5.1.4 Penggunaan Keyword 'final'
Keyword final dapat digunakan untuk menjadikan nilai suatu property tidak dapat diubah lagi sehingga dapat digunakan sebagai suatu konstanta. Oleh karena nilainya tidak akan dapat diubah lagi maka terlebih dahulu harus menset nilai property tersebut pada saat dideklarasikan.

2.5.2 Kontrol Akses dengan Access Specifier
Penggunaan kontrol akses merupakan cara Java menerapkan apa yang telah dibahas sebagai enkapsulasi. Dengan menggunakan kontrol akses, dapat diatur siapa saja yang dapat mengakses atau mengubah nilai dari suatu member dari objek. Dengan demikian semua dapat mencegah kemungkinan penyalahgunaan fungsi dari objek itu sendiri. Untuk menentukan kontrol akses dari suatu member class perlu ditambahkan access specifier setiap kali ingin mendeklarasikan suatu member class.

2.5.3 Inner Class

Dalam Java, diizinkan untuk mendeklarasikan suatu class di dalam class. Class yang dideklarasikan di dalam class ini disebut dengan inner class. Untuk memudahkan penjelasan, akan sebutkan class di mana inner class tersebut dideklarasikan sebagai outer class.

2.6 Pewarisan
Pada dasarnya, pewarisan dipergunakan untuk membuat class baru (class turunan atau subclass) yang masih memiliki sifat atau spesifikasi dari class dari mana ia diturunkan (superclass). Untuk melakukan ini, Java menyediakan keyword extends yang dapat dipakai pada waktu mendeklarasikan class. Beberapa aturan tentang pewarisan yang perlu perhatikan:
1. Java tidak mengizinkan pewarisan berganda, yaitu membuat suatu subclass yang diturunkan dari beberapa superclass sekaligus. Contoh: class Z hendak diturunkan dari class X dan juga sekaligus dari class Y. Hal yang memungkinkan dalam C++ tetapi tidak dalam Java.
2. Suatu subclass pada dasarnya juga adalah class biasa, maka tetap dapat melakukan pewarisan pada subclass.

2.7 The Java Library
Fungsi-fungsi yang disediakan oleh library Java ini sangatlah banyak, karena itu di sini hanya akan dibahas beberapa fungsi yang sangat umum atau sering dipakai saja. Untuk daftar lengkap fungsi atau operasi apa saja yang didukung oleh masing-masing library Java ini, dapat dilihat dokumentasi Java API (Application Programming Interface).

2.7.1 Penggunaan Class String
Seperti telah dijelaskan sebelumnya bahwa dalam Java, string bukan merupakan array dari karakter. Dalam Java, string diimplementasikan dalam bentuk objek dengan tipe data class String. Dengan mengimplementasikannya sebagai objek, memungkinkan Java untuk menyediakan berbagai macam fasilitas penanganan string yang lebih mudah digunakan, seperti membandingkan dua buah string, konkatenasi dua buah string, mengambil karakter yang menyusun string tersebut dan sebagainya.
Perlu diperhatikan bahwa objek dengan tipe data String yang digunakan untuk merepresentasikan string itu sendiri bersifat immutable, yang berarti sekali dalam membuat objek String, maka string yang ada di dalam objek tersebut tidak bisa diubah lagi. Mungkin ini terdengar sedikit mengejutkan dan kebanyakan orang cenderung berpikir bahwa penggunaan objek String akan sangat terbatas karena sifatnya ini. Salah satu alasan kenapa implementasi dari class String seperti ini adalah untuk efisiensi dan optimasi. Kita tidak dapat mengubah isi dari objek String namun bukan berarti tidak dapat mengubah referensi dari variabel yang memegang objek String tersebut.

2.7.2 Type Wrappers

Java mengenal delapan buah tipe data primitif yang bukan merupakan bagian dari objek hierarki. Tipe data tersebut tidak dapat dibuat referensinya sebagaimana layaknya objek. Tipe data ini hanya dapat dilewatkan sebagai parameter ke suatu method dengan cara pass by value dan tidak bisa dengan cara pass by reference. Pada saat-saat tertentu karena sifatnya ini, dapat mengakibatkan kesulitan dalam penggunaannya, karena beberapa objek standar Java library yang sering digunakan hanya dapat berinteraksi dengan objek melalui referensinya. Untuk mengatasi masalah ini maka Java menyediakan tipe data referensi untuk masing-masing tipe data primitif tersebut. Berikut adalah 8 buah tipe data primitif yang bukan merupakan bagian dari objek hierarki :
• Number
Number adalah class abstrak yang merupakan superclass dari semua class type wrappers yang membungkus tipe data numerik, seperti byte, short, int, long, float, dan double. Class ini mendefinisikan beberapa method yang mengembalikan nilai numerik dengan ukuran dan format yang bebeda-beda
• Byte, Short, Integer, dan Long
Class Byte, Short, Integer, dan Long merupakan class wrapper untuk tipe data primitif byte, short, int, dan long. Berikut ini konstruktor dari class wrappers yang dapat digunakan untuk membuat instancenya. Keempat class wrappers ini mengizinkan membuat nilai numerik dari objek String melalui konstruktornya. Namun jika objek String yang dilewatkan sebagai parameter ke konstruktornya bukan merupakan nilai numerik yang valid, maka konstruktor class ini akan melemparkan eksepsi bertipe NumberFormatException.
• Float dan Double
Class Float dan Double merupakan class wrapper untuk tipe data primitif float dan double. Beberapa konstanta (static final) yang juga dideklarasikan untuk setiap class wrappers adalah:
MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_IFINITY,POSITIVE_INFINITY
• Boolean
Class Boolean merupakan class wrapper untuk tipe data primitif boolean. Konstruktor dari class wrappers ini yang dapat digunakan untuk membuat instancenya Parameter s di sini harus berupa string "true" (tanpa melihat huruf besar kecil) untuk mendapatkan objek Boolean yang bernilai true. Selain itu objek Boolean akan bernilai false.

2.7.3 Utility Classes
Dalam package java.util terdapat banyak sekali class-class yang bersifat general purpose yang memiliki berbagai macam kegunaan. Namun karena jumlahnya yang terlalu banyak hanya akan dijelaskan empat buah utility classes.

2.7.3.1 Collection
Collection sendiri merupakan istilah umum yang dipakai untuk setiap objek yang berfungsi untuk mengelompokkan beberapa objek tertentu dengan menggunakan suatu teknik tertentu pula. Berdasarkan teknik pengelompokannya ini, terdapat dua buah jenis collection, yaitu set dan sequence.

2.7.3.2 Map
Perbedaan mendasar map dengan tipe collection terletak pada metode penyimpanannya. Untuk menambahkan isi dari suatu map, diperlukan sepasang objek, satu untuk key dan satu lagi adalah nilai yang ingin kita simpan. Dengan demikian, dapat mengakses nilai tersebut jika kita memiliki keynya. Map juga dikenal sebagai dictionary karena sifatnya yang mirip dengan kamus. Kita pasti memiliki suatu kata yang kita gunakan sebagai key untuk pencarian. Berdasarkan key tersebut diddapati deskripsi dari kata tersebut. Oleh karena pencariannya berdasarkan key maka objek yang digunakan sebagai key tersebut haruslah unik. Beberapa class Java yang termasuk dalam kategori ini antara lain Hashtable, HashMap, WeakHashMap, dan TreeMap. Sama halnya seperti collection, untuk map Java juga telah menyediakan interface Map yang diimplementasi oleh semua class map.

2.7.3.3 Hashing
Terkadang dalam menentukan posisi penyimpanan dari suatu anggota dalam map, digunakan suatu proses yang dikenal dengan nama hashing. Method hashCode () yang dideklarasikan oleh class Object dimiliki oleh setiap class yang ada. Method ini mengembalikan suatu nilai integer yang dikenal sebagai code hash. Kode hash inilah yang digunakan oleh objek map untuk menentukan posisi peletakan suatu anggotanya dalam tempat yang telah disediakan. Kode hash ini didapat dari objek yang digunakan sebagai key. Oleh karena itu pula kode hash yang dihasilkan oleh obyek key haruslah unik. Dengan menggunakan kode hash ini, posisi dari suatu anggota dalam map dapat ditentukan tanpa harus melakukan iterasi satu per satu sehingga waktu yang diperlukan untuk mendapatkan anggota yang dicari secara umum relatif sama.

2.7.3.4 Iterator
Terdapat berbagai cara untuk dapat mengakses anggota dari suatu collection. Salah satu caranya yaitu dengan menggunakan apa yang disebut sebagai iterator. Untuk itu Java memperkenalkan beberapa interface yang dapat digunakan untuk keperluan ini, yaitu Iterator, Listlterator, dan Enumeration.

2.7.4 File
Salah satu class standar Java yang berhubungan dengan file dan sering digunakan adalah class File yang terdapat pada package java.io. Perlu diketahui bahwa class ini tidak berhubungan dengan manipulasi file, seperti bagaimana menulis atau membaca isi dari file itu sendiri, melainkan lebih digunakan untuk menjelaskan properti yang berhubungan dengan file itu sendiri, seperti permission, last modified, lokasi file, direktori dan lain sebagainya. Berikut ini daftar method dari class File yang sering digunakan:

2.8 Membuat User Interface dengan Swing
Hingga saat ini, dalam pembuatan program berupa console based di mana interaksi dengan user selalu melalui command prompt dan menggunakan teks. Pada kenyataan sebenarnya, jika ingin membuat program yang terlihat profesional dan berkualitas, penggunaan graphical user interface (GUI) dapat dikatakan merupakan keharusan. User pada umumnya lebih senang berinteraksi dengan GUI dibandingkan dengan sekumpulan teks, karena dengan GUI, program akan terlihat lebih menarik dan lebih terkesan user friendly.

2.8.1 Pengenalan Swing
Untuk membuat program menggunakan GUI ini, akan digunakan Swing API yang merupakan bagian dari JFC (Java Foundation Classes), di mana JFC sendiri sebenarnya sekumpulan fitur yang dibuat untuk memudahkan programmer dalam membuat GUI. Berikut ini adalah beberapa fitur yang didukung oleh JFC:
• Komponen Swing, termasuk di dalamnya hampir semua komponen GUI yang kita kenal seperti button, list box, combo box dan lain sebagainya.
• Dukungan terhadap Pluggable Look and Feel, di mana Anda dapat mengubah tampilan dari GUI yang Anda buat. Misalnya Anda dapat membuat Windows yang memiliki tampilan Windows XP di dalam Windows 2000 atau bahkan di Linux sekalipun.
• Accessibility API.
• Java 2D API, memberikan dukungan berupa seperangkat library untuk memanipulasi grafis 2 dimensi, teks, dan gambar.
• Dukungan fasilitas drag and drop, menyediakan fasilitas drag and drop antara program Java dengan program native.

Ketiga fitur yang disebutkan paling atas, dibuat dengan tanpa menggunakan native code dan hanya mengandalkan standard library Java. Oleh karena itu, ketiga fasilitas tersebut umumnya bersifat independent atau cross platform, tidak bergantung pada sistem operasi di mana program Java yang menggunakannya dieksekusi. Baik menggunakan sistem operasi Windows, Unix, ataupun Sun Solaris sekalipun, tampilan GUI -nya tidak akan jauh berbeda. Dan semua komponen yang terdapat pada package javax.swing memiliki nama dimulai dengan huruf J, seperti JButton, JList dan sebagainya. Java AWT (Abstract Window Toolkit) merupakan komponen GUI yang pertama kali diperkenalkan oleh Java sebelum Swing.

2.8.2 Komponen Dasar Swing
Secara umum terdapat lima bagian Swing yang akan sering digunakan, yaitu:
• Top-level Container, merupakan container dasar dimana komponen lainnya akan diletakkan. Contoh dari container seperti ini yaitu Frame, Dialog, dan Applet yang diimplementasikan berupa class JFrame, Jdialog, dan JApplet.
• Intermediate Container, merupakan container perantara dimana komponen lainnya akan diletakkan, salah satu contohnya adalah Panel yang diimplementasikan berupa class JPanel. Umumnya hanya digunakan sebagai tempat untuk meletakkan atau mengelompokkan komponen-komponen yang akan digunakan, baik yang berupa kontainer juga atau berupa atomic component. Atomic Component, menciptakan komponen yang memiliki fungsi yang spesifik, di mana umumnya user langsung berinteraksi dengan komponen jenis ini. Contoh komponen jenis ini yaitu button, label, text field, dan text area. Secara konkrit diimplemetasikan berupa class JButton, JLabel, JTextField, dan JTextArea.

2.8.3 Implementasi Swing dalam Program

2.8.3.1 Top Level Container
Terdapat tiga buah class yang dapat digunakan untuk membuat top-level container ini, yaitu JFrame, JDialog, dan JApplet. Saat ini hanya akan dibahas penggunaan JFrame dan JDialog saja karena penggunaan JApplet akan membutuhkan penjelasan tentang applet. Oleh karena itu dengan mengerti penggunaan salah satu saja dari ketiga top-level container ini akan sangat mudah untuk mempelajari cara menggunakan top-level container lainnya.
• Frame
Untuk membuat frame dalam Java, Anda dapat menggunakan class Jframe dengan menggunakan kedua konstruktor berikut ini:
JFrame()
JFrame(String title)

Bentuk konstruktor pertama membuat frame (window dengan frame) yang tidak memiliki title sedangkan bentuk konstruktor kedua memungkinkan Anda langsung menset title yang akan ditampilkan. Berikut ini contoh penggunaannya dalam program:
import javax.swing.*; class TestFrame {
public static void main(String[] args) { JFrame frame =
new JFrame("Contoh Tampilan Frame di Java");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,150); frame.show();

Berikut ini tampilan window yang didapat dengan mengeksekusi program di atas.

2.8.3.2 Penanganan Event

Event merupakan suatu peristiwa atau kejadian yang dilakukan oleh user terhadap user interface. Biasanya menggunakan alat berupa mouse dan keyboard, seperti mengetik sesuatu, mengklik mouse dan sebagainya. Setiap objek dapat dinotifikasi jika sesuatu event terjadi sehingga objek tersebut dapat memutuskan apa yang harus dilakukan untuk menanggapi event yang bersangkutan. Dalam Swing, agar suatu objek dapat dinotifikasi tentang suatu event maka objek tersebut harus mengimplementasi interface yang sesuai dan mendaftarkan dirinya sebagai event listener ke sumber yang menghasilkan event tersebut yang dalam hal ini adalah komponen Swing. Beberapa contoh event yang dapat dihasilkan oleh komponen Swing ini antara lain:

Oleh karena cara implementasi penanganan event ini, di mana objek yang ingin dinotifikasi harus mendaftarkan dirinya ke sumber event tersebut, maka dapat terjadi lebih dari satu objek mendaftarkan diri untuk mendapatkan notifikasi dari suatu sumber event yang sama.

2.8.3.3 Intermediate Container

• JPanel
Merupakan intermediate container yang paling sederhana, namun paling sering digunakan. Pada dasarnya intermediate container digunakan untuk mengelompokkan beberapa komponen lainnya dengan menggunakan layout manager tertentu. Secara default layout manager yang digunakan berupa FlowLayout, namun kita dapat mengubahnya sesuai dengan keinginan.

• JScrollPane
Intermediate container jenis ini biasanya untuk menampilkan yang ukurannya lebih besar dari daerah tampilannya, atau komponen tersebut ukurannya dapat berubah secara dinamis. Contohnya text area, saat pertama kali ditampilkan, mungkin dapat langsung melihat semua isinya. Namun begitu dapat mulai mengetik di dalam text area tersebut, teks yang diketikkan mungkin tidak dapat lagi ditampilkan semuanya ke layar dengan ukuran text area yang sekarang sehingga harus memperbesar tampilan text area tersebut agar dapat melihat semua isinya. Atau solusi lainnya yang lebih baik adalah dengan menyediakan scroll bar sehingga bagian yang tidak terlihat dapat ditampilkan dengan menggeser scroll bar tersebut Untuk keperluan ini dapat digunakan scroll pane yang diimplementasikan berupa class JScrollPane.

2.8.3.4 Atomic Component


• Button, Check Box, dan Radio Button

Button, check box, dan radio button sebenarnya sama-sama merupakan button yang dibedakan berdasarkan tampilan dan cara penggunaannya. Ketiga jenis button ini dalam Java diimplementasikan berupa class JButton, JCheckBox, dan JRadioButton. Ketiga jenis button di sini karena ketiganya merupakan turunan (subclass) dari class AbstractButton sehingga pada dasarnya cara penggunaannya adalah sama.
• Button

Button merupakan bentuk yang paling sederhana dan sering digunakan. Biasanya hanya digunakan untuk menerima input dari user berupa penekanan button tersebut. Pada contoh-contoh sebelumnya kita sudah sering menggunakan implementasi dari button ini, yaitu class JButton sehingga paling tidak sudah tahu bagaimana tampilannya di layar. Dalam membuat sebuah objek event listener untuk setiap button sebenarnya sangatlah rumit, namun Java menyediakan satu cara yang memungkinkan melakukan penggunaan sebuah objek event listener untuk menangani event dari objek JButton yang berbeda.
• Radio Button

Radio button diimplementasikan berupa class JRadioButton, berfungsi untuk menyediakan pilihan kepada user, namun user dibatasi boleh memilih maksimum satu saja dari pilihan yang disediakan. Karena sifatnya ini maka biasanya sejumlah radio button dikelompokkan dalam suatu grup tertentu di mana di dalam grup tersebut hanya satu saja yang boleh dipilih. Untuk keperluan ini maka Java menyediakan sebuah class yang dapat kita gunakan untuk mengelompokkan sejumlah radio button sesuai keinginan kita, yaitu class ButtonGroup. Untuk menambahkan radio button ke dalam grup, gunakan method add() dari objek ButtonGroup
• Label
Merupakan komponen GUI sederhana yang umumnya hanya digunakan untuk menampilkan teks atau gambar statis. Dalam Java, Label diimplementasikan berupa class JLabel.
• Menu
Sudah merupakan standar bahwa terdapat dua jenis menu yang biasanya digunakan sebagai komponen GUI, yaitu menu yang ditampilkan sebagai menu bar dan menu yang ditampilkan sebagai pop-up menu. Menu bar biasanya diletakkan pada bagian atas frame sama seperti tool bar. Sedangkan pop-up menu biasanya hanya ditampilkan jika user melakukan aktivitas tertentu pada keyboard atau mouse.

2.9 Pengenalan Oracle
Oracle adalah produk database server yang banyak dipakai di perusahaan-perusahaan besar diseluruh dunia saat ini. Software ini juga banyak diminati oleh para konsultan pembuat aplikasi yang berkaitan dengan database. Sistem keamanannya yang handal membuat para profesional yan berkecimpung dalam dunia database lebih memilih Oracle sebagai perangkat untuk menunjang kegiatan bisnis mereka.
Disamping sistem security yang handal, Oracle merupakan software database yang bisa menampung serta mengelola data dengan kapasitas yang sangat besar serta dapat mengaksesnya dengan sangat cepat pula. Sintak SQL nya yang hampir seluruhnya telah memenuhi standart ANSI-92 lebih memudahkan para programmer database dalam membangun aplikasi baik dari sisi ‘back end’ maupun dari sisi ‘front end’. Demikian pula bagi seorang administrator yang berkecimpung dalam menangani administrasi database serta bertanggung jawab terhadap keamanan database akan merasa diuntungkan serta dimudahkan dengan software Oracle yang lebih ‘establish’ ini. Namun demikian karena harganya yang relatif mahal maka Oracle kebanyakan hanya bisa dibeli oleh perusahan ataupun konsultan yang mempunyai dana cukup besar pula.
Produk Oracle yag penulis gunakan untuk aplikasi Security Parking ini adalah Oracle 10G XE (Express Edition) yang bersifat freeware dari Oracle Corp. Dengan produk ini, para pemakai Oracle XE dapat menggunakannya tidak hanya untuk pengembangan dan deployment system. Oracle XE bisa dikatakan sebagai sebuah produk database server portable yang menyediakan teknologi inti database server yang diambil dari Oracle 10g (10.2.0) versi profesional ataupun Enterprise. Ada beberapa alasan mengapa Oracle menjadi program database yang sangat populer dan digunakan oleh banyak orang. Alasan-alasan tersebut diantaranya ialah :
a. Oracle merupakan database yang memiliki kecepatan yang tinggi dalam melakukan pemrosesan data, dapat diandalkan, dan mudah digunakan serta mudah dipelajari. Mengapa mudah digunakan? Sebab Oracle telah banyak digunakan di belahan bumi manapun.
b. Oracle mendukung banyak bahasa pemrograman seperti C, C++, Perl, Phyton, Java, Ruby on Rails dan PHP. Bahasa pemrograman tersebut dapat digunakan untuk berinteraksi maupun berkomunikasi dengan Oracle server, atau dapat juga digunakan sebagai komponen pembentuk antarmuka (interface) dari suatu database Oracle.
c. Koneksi, kecepatan, dan keamanan membuat Oracle sangat cocok diterapkan untuk pengaksesan database melalui internet, dengan menggunakan bahasa pemrograman Perl atau PHP sebagai interface-nya.
d. Oracle dapat melakukan koneksi dengan client menggunakan protocol TCP/IP, Unix socket (Unix), atau Named Pipes (NT).
e. Oracle dapat menangani database dengan skala yang sangat besar dengan jumlah record mencapai lebih dari 50 juta, dapat menampung 60 ribu tabel, dan juga bisa menampung 5 milyar baris data. Selain itu, batas indeks pada tiap tabel dapat menampung hingga 32 index.
f. Dalam hal relasi antar table pada suatu database, Oracle menerapkan metode yang sangat cepat, yaitu dengan menggunakan metode one-sweep multijoin. Oracle sangat efisien dalam mengelola informasi yang diminta yang berasal dari banyak tabel sekaligus.
g. Multiuser, yaitu dalam satu database server pada Oracle dapat diakses oleh beberapa user dalam waktu yang sama tanpa mengalami konflik atau crash.
h. Security yang dimiliki database Oracle dikenal baik, karena memiliki lapisan sekuritas seperti level subnetmask, nama host dan izin akses user dengan sistem perizinan yang khusus serta password yang dimiliki setiap user dalam bentuk data terenkripsi. Keunggulan dalam hal keamanan yang ditawarkan oleh Oracle adalah bagaimana mengontrol sebuah database diakses dan digunakan. Dalam hal ini, mencakup kekonsistenan dan proteksi data melalui mekanisme Locking.
i. Adanya PL/SQL, PL/SQL (Procedural Language extensions to SQL) adalah kombinasi dari SQL dan merupakan pemrograman bahasa prosedural yang didalamnya diletakkan sintak-sintak SQL. PL/SQL merupakan teknologi dari Oracle yang memperbolehkan anda untuk membuat sebuah blok program dalam Oracle sebagaimana layaknya bahasa pemrograman prosedural seperti C, Fortran, COBOL dan lainnya.
j. Platform Internet Oracle, Oracle menawarkan banyak platform internet yang memiliki unjuk kerja yang tinggi untuk e-commerce dan data warehousing. Platform yang terintegrasi ini mencakup segala yang diperlukan untuk pengembangan, penyebaran dan pengelolaan aplikasi internet. Platform internet Oracle dibangun berdasarkan tiga bagian penting yakni :
• Browser-based clients untuk tampilan proses
• Server aplikasi untuk menjalankan database logika bisnis dan menyajikan logika tampilan ke browser-based clients.
• Database untuk menjalankan database logika bisnis secara intensif dan menyajikan data.

2.9.1 Pengenalan SQL
Structured Query Language yang disingkat SQL adalah bahasa standar yang digunakan dalam database management system (DBMS) untuk berkomunikasi dengan basis data atau database, yang meliputi perintah-perintah untuk melakukan hal-hal berikut :
1. Mengganti isi atau memodifikasi struktur database.
2. Mengganti setting dan membuat sistem security data.
3. Memberi dan menentukan wewenang user pada database atau tabel.
4. Mentransfer data dari satu database ke database lain.
5. Menangani proses transaksi dalam suatu aplikasi program.

Database itu sendiri dapat dianggap sebagai suatu penyusunan data agar dapat diakses dengan mudah dan cepat, yang disimpan secara terstruktur dalam suatu media pengingat yang sering disebut dengan harddisk. Jika istilah dari database itu didefinisikan, pendefinisiannya dapat beraneka ragam. Database merupakan sekumpulan data yang terdiri atas satu atau lebih tabel yang terintegrasi satu sama lain dan disimpan dengan beberapa cara pengorganisasian, dimana setiap pemakai diberi wewenang (otorisasi) untuk dapat mengakses (mengubah, menghapus, menganalisis, menambah, serta memperbaiki) data dalam tabel-tabel tersebut.
DBMS dapat dikatakan sebagai pelayan yang selalu mendengar dan melakukan pekerjaan-pekerjaan seperti menambah, menghapus, memanipulasi serta memperoleh data atau informasi berdasarkan perintah SQL yang diberikan melalui sebuah aplikasi yang berupa program yang di-develope menggunakan Visual Studio.NET, Java, Phyton, Borland, dan bahasa program lainnya. Misalkan saat ini seseorang membutuhkan suatu data dari database, maka permintaan akan data yang diinginkan ditulis dalam perintah SQL pada aplikasi database. Perintah-perintah SQL tersebut akan diteruskan ke DBMS untuk diproses. Pada saat DBMS melakukan tugasnya, DBMS tersebut akan mengambil atau memanipulasi data-data dalam database sesuai perintah SQL yang diterimanya, dan kemudian memberikan atau mengembalikan data yang telah diproses dan didapatnya kepada yang meminta. Proses mulai dari permintaan, pemrosesan, dan pengiriman data hasil oleh DBMS ini disebut query database, yang biasa disebut Structured Query Language (SQL).

2.9.2 Perintah-perintah SQL
Data Definition Language (DDL) adalah perintah SQL yang digunakan untuk menjelaskan objek dari database. Dengan kata lain, DDL digunakan untuk mendefinisikan kerangka database. Perintah-perintah yang termasuk ke dalam DDL adalah :
1. Create digunakan untuk membuat database, tabel, field, atau indeks.
Syntax :
CREATE [GLOBAL TEMPORARY] TABLE [schema] table (column datatype [DEFAULT expr],[…]);
2. Alter digunakan untuk membuat definisi tabel atau mengubah tabel dengan menambahkan field-nya.
Syntax :
ALTER TABLE table
3. Drop digunakan untuk membuang atau menghapus tabel, indeks, atau pandangan.
Syntax :
DROP TABLE table_name;

Data Manipulation Language (DML) adalah perintah yang digunakan untuk mengoperasikan atau memanipulasikan isi database. Perintah-perintah yang termasuk ke dalam DML adalah :
1. Select digunakan untuk mendefinisikan data apa yang akan diambil dari database.
Syntax :
SELECT [DISTINCT] {*,column[alias],…} FROM table;
2. Delete digunakan untuk menghapus record pada suatu database.
Syntax :
DELETE [FROM] table [WHERE condition];
3. Insert digunakan untuk menyisipkan data.
Syntax :
INSERT INTO table [(column[,column…])] VALUES (value [,value…]);
4.Update digunakan untuk mengedit atau mengubah data-data yang diberi parameter.
Syntax :
UPDATE table SET column=value [,column=value,…] [WHERE condition];

2.9.3 Fungsi-fungsi pada SQL
Ada 2 tipe berbeda pada fungsi :
1. Fungsi baris tunggal ( Single-row functions).
Fungsi ini dijalankan hanya pada satu baris dan menghasilkan satu hasil per baris.
Ada tipe yang berbeda dari single-row functions. Fungsi ini mencakup :
• Karakter
Menerima masukkan karakter dan dapat menghasilkan nilai karakter dan bilangan
• Angka
Menerima masukkan numerik dan menghasilkan nilai numerik. Seksi ini menggambarkan beberapa fungi number:
1. Fungsi ROUND
Fungsi ROUND membulatkan kolom, ekspresi atau nilai ke n desimal. Jika argumen kedua 0 atau hilang, nilai dibulatkan ke desimal nol. Jika argumen kedua 2, nilai dibulatkan ke dua desimal. Sebaliknya, jika ragumen kedua -2, nilai dibulatkan ke dua desimal ke kiri. Fungsi ROUND juga dapat digunakan dengan fungsi tanggal.
2. Fungsi TRUNC
Fungsi TRUNC memotong kolom, ekspresi atau nilai ke n desimal. Fungsi TRUNC bekerja dengan argumen yang mirip dengan fungsi ROUND. Jika argumen kedua 0 atau hilang, nilai dipotong ke nol desimal. Jika argumen kedua 2, nilai dipotong ke dua desimal. Kebalikkannya, jika argumen kedua -2, nilai dipotong ke dua desimal ke kiri. Seperti fungsi ROUND, fungsi TRUNC dapat digunakan dengan fungsi tanggal.
3. Fungsi MOD
Fungsi MOD menemukan sisa nilai1 dibagi nilai2
• Tanggal
Dijalankan pada nilai tipe data (semua fungsi tanggal menghasilkan nilai tipe data tanggal kecuali fungsi MONTHS_BETWEEN, yang menghasilkan bilangan)
• Konversi
Mengubah nilai dari satu tipe data ke lainnya
• Umum
1. Fungsi NVL
Mengubah null ke nilai aktual
• Tipe data yang dapat digunakan adalah tanggal, karakter, dan bilangan.
• Tipe data harus cocok
- NVL(comm,0)
- NVL(hiredate,’01-JAN-97’)
- NVL(job,’No Job Yet’)
Untuk mengubah nilai null ke nilai aktual, gunakan fungsi NVL
Syntax
NVL (expr1,expr2)
2. Fungsi DECODE
Memudahkan penyelidikan bersyarat dengan mengerjakan perkerjaan statemen CASE atau IF-THEN-ELSE
Syntax
DECODE(col/expression,search1,result1[,search2,result2,...,][,default])S
Cara fungsi DECODE menguraikan kode ekspresi mirip dengan logika IF-THEN-ELSE yang digunakan di bermacam bahasa. Fungsi DECODE menguraikan kode expression setelah membandingkannya ke tiap nilai search. Jika ekspresi sama dengan search, dihasilkan result.
2. Fungsi baris ganda (Multiple-row Functions)
Fungsi ini menggunakan kelompok baris untuk memberi satu hasil setiap kelompok baris.

2.10 Pengenalan Diagram Alur (Flowchart)
Flowchart adalah gambar atau bagian yang memperlihatkan urutan dan hubungan antar proses beserta instruksinya dan sebagai langkah awal dari pembuatan program. Gambaran ini dinyatakan dengan simbol. Terdapat dua macam flowchart yang menggambarkan proses dengan komputer :

• Sistem Flowchart
Adalah gambar yang memperlihatkan prosedur dan proses dari beberapa file di dalam media tertentu.
• Program Flowchart
Adalah bagian yang memperlihatkan urutan dan hubungan di dalam program.

2.10.1. Simbol – Simbol Flowchart
Berikut ini merupakan simbol-simbol flowchart yang sering digunakan dalam pembuatan sebuah program.

SIMBOL Keterangan

Simbol Arus / Flow digunakan sebagai simbol penghubung antar procedure atau proses.

Simbol Connector digunakan sebagai simbol untuk masuk / keluar prosedur dalam lembar

Simbol Off-Page connector digunakan sabagai simbol untuk masuk / keluar prosedur dalam lembar

Simbol proses menunjukkan pengolahan dilakukan oleh komputer

Simbol Decision yaitu simbol yang menghasilkan beberapa kemungkinan jawaban aksi

Simbol Terminal yaitu simbol untuk permulaan dan akhir suatu program

Simbol input / output yaitu simbol yang menyatakan proses input dan output.

Simbol Display yaitu simbol yang menyatakan peralatan output yang digunakan.

Simbol awal

Simbol Akhir

Fork, menggambarkan proses pararel atau penggabungan proses pararel menjadi tunggal

2.11 Pengenalan Struktur Navigasi
Struktur navigasi merupakan rancangan dan hubungan kerja dari berbagai area atau tempat dan dapat mengorganisasikan seluruh elemen dengan memberikan perintah dan kesan. Struktur ini dapat juga memberikan kemudahan dalam menganalisa keseluruhan obyek dalam elemen dan pengaruh bagi penggunanya.

2.11.1 Navigasi Linier
Struktur yang hanya mempunyai satu rangkaian cerita berurut dan biasanya digunakan untuk presentasi. Struktur navigasi linier hanya mempunyai satu rangkaian cerita yang berurut, yang menampilkan satu demi satu tampilan layar secara berurut menurut urutannya. Tampilan yang dapat ditampilkan pada struktur jenis ini adalah satu halaman sebelumnya atau satu halaman sesudahnya, tidak dapat dua halaman sebelumnya atau dua halaman sesudahnya.

Gambar 2.8 Navigasi Linier

2.11.2 Navigasi Non Linier
Struktur navigasi non-linier atau ini tidak terurut merupakan pengembangan dari struktur navigasi linier. Pada struktur ini diperkenankan membuat navigasi bercabang. Percabangan yang dibuat pada struktur navigasi non-linier ini berbeda dengan percabangan pada struktur hierarki, karena pada percabangan non-linier ini walaupun terdapat percabangan, tetapi tiap-tiap tampilan mempunyai kedudukan yang sama yaitu dimana dan tiap elemen mempunyai kedudukan yang sama yaitu tidak ada Master Page (halaman utama pertama) dan Slave Page (halaman pendukung).



Gambar 2.9 Navigasi Non Linier

2.11.3 Navigasi Hierarki
Struktur ini menggunakan percabangan dalam menampilkan data berdasarkan kriteria tertentu. Tampilan pertama akan disebut sebagai Master Page dimana halaman ini mempunyai percabangan yang selanjutnya disebut sebagai Slave Page. Apabila salah satu Slave Page diaktifkan maka tampilan tersebut akan berfungsi sebagai Master Page dan seterusnya. Pada struktur navigasi ini tidak diperkenankan adanya tampilan secara linier.

2.11.4 Navigasi Composite
Struktur yang biasa disebut dengan penjejakan bebas ini merupakan navigasi gabungan dari navigasi linier, non linier dan hierarki. Struktur ini sangat baik digunakan untuk pembuatan rangkaian elemen karena integrasi antar page lebih tinggi dan banyak digunakan dalam pembuatan multimedia karena struktur ini dapat digunakan dalam pembuatan multimedia sehingga dapat memberikan ke-interaksian yang lebih tinggi, contohnya ini paling sering digunakan untuk pembuatan website.


BAB 3
PEMBAHASAN MASALAH

Dalam bab 3 ini akan dijelaskan cara pembuatan Aplikasi Perhitungan Transaksi Parkir menggunakan Java dan Oracle dimulai dari pembuatan flowchart, struktur navigasi, skema parkir, rancangan database, program rancangan aplikasi, implementasi dan uji coba program. Aplikasi ini dibuat menggunakan bahasa pemrograman Java dan pemrograman database Oracle. Berikut ini beberapa hal yang diperlukan untuk membuat aplikasi ini, yaitu :

3.1 Gambaran Umum Aplikasi Perhitungan Transaksi Parkir
Sebelum dibahas lebih lanjut, ada baiknya diketahui gambaran umum dari aplikasi Perhitungan Transaksi Parkir ini. Tampilan GUI yang pertama tampil adalah menu utama, pada menu utama ini tedapat 2 tombol pilihan menuju ke masing-masing proses, yaitu: Parkir Input dan Transaksi Parkir. Proses parkir Input adalah pada saat kendaraan masuk, yang berguna sebagai inputan data kendaraan seperti tipe kendaraan dan nomor polisi. Aplikasi ini bisa dijalankan jika proses login berhasil dilakukan, jika tidak, tampilan GUI akan tetap ditampilkan tetapi user akan diminta untuk melakukan login dan tidak dapat menjalankan aplikasi ini sebagaimana mestinya. Pada saat login berhasil, user diminta untuk memeriksa kapasitas kendaraan yang ada di area parkir, jika belum penuh maka user memilih tipe kendaraan yang masuk dan memasukkan nomor polisi kendaraan. Untuk waktu masuk kendaraan akan tersimpan secara otomatis sesuai dengan waktu yang valid pada saat itu. Proses selanjutnya adalah menyimpan data tersebut kedalam database tabel transaksi_parkir dan akan dicetak tampilan dari karcis masuk parkir kendaraan.
Tampilan GUI yang terakhir adalah pada saat kendaraan keluar, yang berguna untuk melakukan proses perhitungan biaya parkir kendaraan. Pada proses ini hampir sama seperti Parkir Input, user tetap diminta melakukan login. Jika login berhasil, user memeriksa kapasitas kendaraan di area parkir, jika area parkir kosong, maka user tidak perlu melanjutkan proses Transaksi Parkir, jika tidak, kendaraan yang akan keluar, dicatat nomor polisi kendaraannya, dan secara otomatis waktu masuk, waktu keluar, lama waktu dan biaya parkir akan tampil sesuai dengan data yang telah disimpan dalam database tabel transaksi_parkir. Setelah selesai maka bukti transaksi akan ditampilkan, dan lanjut ke transaksi berikutnya.
Biaya parkir yang dikenakan untuk setiap tipe kendaraan berbeda-beda, untuk tipe kendaraan mobil 1 jam pertama dikenakan Rp 2.000,00 dan untuk setiap jam berikutnya dikalikan Rp 1.000,00, sedangkan untuk tipe kendaraan motor 1 jam pertama dikenakan Rp 1.000,00 dan untuk setiap jam berikutnya dikalikan Rp 500,000. Denda karcis yang hilang adalah Rp 20.000,00 untuk semua tipe kendaraan. Pembulatan perhitungan lama waktu parkir untuk setiap tipe kendaraan adalah sebagai berikut; jika lama waktu parkir kendaraan 1 jam 10 menit, 1 jam 15 menit, atau misalnya 1 jam 20 maka waktu lebih 10, 15, dan 20 menit tersebut akan dihitung menjadi 1 jam. Sebagai contoh, untuk tipe kendaraan mobil, lama waktu parkir adalah 1 jam 25 menit maka biaya yang dikenakan adalah Rp 3.000,00. Hasilnya diperoleh dari Rp 2.000,00 untuk 1 jam pertama dan Rp 1.000,00 untuk 1 jam berikutnya karena lebih waktu 25 menit dibulatkan menjadi 1 jam.

3.1.1 Struktur Navigasi
Struktur navigasi adalah struktur atau alur dari suatu program yang merupakan rancangan hubungan dan rantai kerja dari beberapa area yang berbeda dan dapat membantu mengorganisasikan seluruh elemen pembuatan program. Struktur navigasi digunakan untuk membuat rangkaian hubungan setiap halaman dengan halaman lain di dalam suatu aplikasi. Struktur navigasi yang digunakan dalam pembuatan aplikasi ini adalah struktur navigasi hierarki.

3.2 Pembuatan Aplikasi Perhitungan Transaksi Parkir
Pada sub ini akan dijelaskan bagaimana mengimplementasikan rancangan aplikasi Perhitungan Transaksi Parkir hingga menghasilkan sebuah sistem database dan program aplikasi yang memudahkan pengguna akhir. Adapun perangkat lunak yang digunakan untuk membuat sistem ini adalah Oracle 10g Express Edition sebagai perangkat lunak untuk membuat dan memanajemen database dan Java (J2SDK) versi 1.6.0 sebagai program untuk membuat dan menjalankan aplikasi ini.

3.2.1 Rancangan Database dengan Oracle

CREATE TABLE Transaksi_Parkir
( TGL DATE,
TIPE VARCHAR2(5),
NOPOL VARCHAR2(8) PRIMARY KEY,
WAKTUIN DATE,
WAKTUOUT DATE,
LAMAWAKTU VARCHAR2(8),
BIAYA NUMBER,
NO_TRANSAKSI NUMBER,
STATUS CHAR(3),
KET VARCHAR(10));

Berdasarkan proses database yang digunakan, dihasilkan sebuah tabel yang struktur datanya diuraikan sebagai berikut :

Tabel 3.1 Tabel Struktur Data pada Tabel Transaksi_Parkir
Field Tipe Width Keterangan
tgl Date dd-mm-yy
Tanggal masuk kendaraan yang diparkir
tipe Varchar2 5 Tipe kendaraan yang diparkir
nopol* Varchar2 8 Nomor Polisi untuk kendaraan
waktu_in Date/Time dd-mm-yy
mm:hh Waktu masuk kendaraan yang diparkir
waktu_out Date/Time dd-mm-yy
mm:hh Waktu keluar kendaraan yang diparkir
lamawaktu Date/Time dd-mm-yy
mm:hh Lama waktu kendaraan yang parkir, dengan rumus
lamawaktu=waktuout-waktuin.
biaya Number Biaya yang dikenakan pada kendaraan yang diparkir
no_transaksi Number Nomor transaksi kendaraan yang parkir atau nomor parker
status Char 3 Status kendaraan yang diparkir
ket Varchar 10 Keterangan untuk kendaraan yang dikenakan denda karcis hilang
Keterangan : * primary key

Adapun langkah-langkah konfigurasi Java dengan Oracle adalah sebagai berikut :
1. Setelah menginstall java platform, jdk-6-windows-i586 secara default, directory Java berada di C:\Program Files\Java\jdk1.6.0, hal ini tergantung dari directory operasi sistem, kemudian untuk editor atau platform untuk Java, instal NetBeans IDE 6.0, editor ini bersifat pilihan(optional). Setelah itu, untuk program manajemen database, instal Oracle 10g Express Edition, directory OracleXE berada di C:\oraclexe.
2. Membuat koneksiDatabase properties
HostName = 127.0.0.1
Port = 1521
UserName = system
Password = riandini
Database = XE

/**
* KONEKSI KE DATABASE ORACLE
*/
public void koneksiDatabase() {
hapusTabel();
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); }
catch (ClassNotFoundException cnf) {}
String server = "127.0.0.1";
String port = "1521";
String sid = "XE";
String url = "jdbc:oracle:thin:@"+server+":"+port+ ":" + sid;
String username = "system";
String password = "riandini";
try {
con = DriverManager.getConnection(url,username,password);
System.out.println("Koneksi Sukses"); }
catch (SQLException se) {
System.out.println("Koneksi gagal : " + se); }
catch (Exception e) {} }

3.2.2 Program Rancangan Aplikasi Perhitungan Transaksi Parkir

3.2.2.1 Program Pembuatan Form Menu

• Langkah pembuatan Form Menu (menu.java)
Form menu merupakan menu utama menuju proses-proses selanjutnya seperti: MASUK untuk proses Parkir Input dan KELUAR untuk proses Transaksi Parkir. Class menu.java merupakan Main Class sehingga coding yang ada di dalam Class ini di running terlebih dahulu baru lanjut ke Class berikutnya. Berikut adalah penjelasan pendeklarasian komponen-komponen yang digunakan pada form Menu:

public class Menu extends JFrame {
JLabel tanggal = new JLabel();
JLabel Njam = new JLabel();
JButton masuk = new JButton();
JButton keluar = new JButton();
JLabel label1 = new JLabel();

1 dan 2. JLabel tanggal, JLabel Njam, untuk menampilkan tanggal dan jam yang valid pada saat ini.
Pengaturan letak, ukuran, dan warna komponen tanggal dan Njam.

tanggal.setFont(new java.awt.Font("Dialog",Font.BOLD, 14));
tanggal.setForeground(Color.red);
tanggal.setText("Day - MM - YYYY");
tanggal.setBounds(new Rectangle(20, 5, 120, 15));

Njam.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
Njam.setForeground(Color.red);
Njam.setText("HH : MM : SS");
Njam.setBounds(new Rectangle(130, 5, 80, 15));

Menampilkan dan memfungsikan tanggal dan jam pada form.

/**
* FUNGSI MENAMPILKAN JAM PADA FORM APLIKASI
*/
public void Jam() {
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String nol_bulan = "";
String nol_hari = "";
String nol_jam = "";
String nol_menit = "";
String nol_detik = "";
// Membuat Date
Calendar dt = Calendar.getInstance();
// Mengambil nilai JAM, MENIT, dan DETIK Sekarang
int nilai_tahun = dt.get(dt.YEAR);
int nilai_bulan = dt.get(dt.MONTH) + 1;
int nilai_hari = dt.get(dt.DAY_OF_MONTH);
int nilai_jam = dt.get(dt.HOUR_OF_DAY);
int nilai_menit = dt.get(dt.MINUTE);
int nilai_detik = dt.get(dt.SECOND);
// Jika nilai JAM lebih kecil dari 10 (hanya 1 digit)
if (nilai_bulan <= 9) {
// Tambahkan "0" didepannya
nol_bulan = "0"; }
if (nilai_hari <= 9) {
// Tambahkan "0" didepannya
nol_hari = "0"; }
if (nilai_jam <= 9) {
// Tambahkan "0" didepannya
nol_jam = "0"; }
// Jika nilai MENIT lebih kecil dari 10 (hanya 1 digit)
if (nilai_menit <= 9) {
// Tambahkan "0" didepannya
nol_menit = "0"; }
// Jika nilai DETIK lebih kecil dari 10 (hanya 1 digit)
if (nilai_detik <= 9) {
// Tambahkan "0" didepannya
nol_detik = "0"; }
// Membuat String JAM, MENIT, DETIK
String bulan = nol_bulan + Integer.toString(nilai_bulan);
String hari = nol_hari + Integer.toString(nilai_hari);
String jam = nol_jam + Integer.toString(nilai_jam);
String menit = nol_menit + Integer.toString(nilai_menit);
String detik = nol_detik + Integer.toString(nilai_detik);
// Menampilkan pada Layar
//tanggal.setText(hari + " - " + bulan + " - " + nilai_tahun);
Njam.setText(jam + " : " + menit + " : " + detik);
//waktuIn.setText( jam + " : " + menit + " : " + detik);
tanggal.setText(DateFormat.getDateInstance(DateFormat.LONG,Locale.UK).format(dt.getTime()));}};
// Timer
new javax.swing.Timer(1000, taskPerformer).start();}}

3. JButton masuk, tombol menuju proses Parkir Input.
Pengaturan letak, ukuran dan warna komponen masuk.

masuk.setText("MASUK");
masuk.setBounds(new Rectangle(60,60,100,32));
masuk.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
masuk.setForeground(Color.BLUE);

Menambahkan action listener pada tombol masuk yang bekerja pada saat tombol masuk ditekan. Proses yang terjadi adalah memanggil class Transaksi_Parkir_Input2, yang berfungsi memasukkan nilai kedalam database tabel transaksi_parkir. Ukuran dari frame class Transaksi_Parkir_Input adalah panjang=805 dan lebar=620.

masuk.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
Transaksi_Parkir_Input2 b = new Transaksi_Parkir_Input2();
b.setSize(805,620);
b.setVisible(true);
dispose();}});

4. JButton keluar, tombol menuju proses Transaksi Parkir.
Pengaturan letak, ukuran dan warna komponen keluar.

keluar.setText("KELUAR");
keluar.setBounds(new Rectangle(240,60,100,32));
keluar.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
keluar.setForeground(Color.BLUE);

Menambahkan action listener pada tombol keluar yang bekerja pada saat tombol keluar ditekan. Proses yang terjadi adalah memanggil class Transaksi_Parkir_Hitung2, yang berfungsi memproses data yang telah dimasukkan kedalam database table transaksi_parkir dan menampilkan hasil akhirnya. Ukuran dari frame class Transaksi_Parkir_Hitung2 adalah panjang=805 dan lebar=620.

keluar.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
Transaksi_Parkir_Hitung2 c = new Transaksi_Parkir_Hitung2();
c.setSize(805,620);
c.setVisible(true);
dispose();}});

3.2.2.2 Program Pembuatan Form Login User

• Langkah Pembuatan Form Login User
Form Login User merupakan proses autentifikasi user dengan memasukkan username dan password. Jika login user valid maka user bisa menggunakan aplikasi, jika tidak tampilan GUI tetap ditampilkan tetapi tidak dapat digunakan sebagaimana mestinya. Tampilan GUI yang dibuat terdiri dari frame utama yang berfungsi menampilkan pesan apakah proses login user berhasil atau tidak, dan sebuah kotak dialog yang berfungsi sebagai tempat memasukkan data user dan password dari user, yang kemudian digunakan untuk proses autentifikasi dengan data yang telah disimpan di dalam program. Pada kotak dialog terdapat sebuah tombol yang apabila ditekan akan melakukan proses autentifikasi data user dan password. Berikut adalah penjelasan pendeklarasian komponen-komponen yang digunakan pada form login user :

private JTextField user = new JTextField();
private JPasswordField pass = new JPasswordField();
private JLabel jLabelP1 = new JLabel();
private JLabel jLabelP2 = new JLabel();
private JButton tombol_OK = new JButton();
JDialog dialog = new JDialog();

1. JDialog dialog, untuk mencetak ‘Masukkan User dan Password’.
Pengaturan letak dan ukuran komponen dialog.

dialog.setTitle("Masukkan User dan Password");
dialog.setModal(true);
dialog.setSize(265, 125);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int lebar = (screen.width - dialog.getSize().width) / 2;
int tinggi = (screen.height - dialog.getSize().height) / 2;
dialog.setLocation(lebar, tinggi);
dialog.getContentPane().add(panel);
dialog.setVisible(true);

2. JTextField user, untuk memasukkan login username.
Pengaturan letak dan ukuran komponen user.

user.setText("");
user.setBounds(new Rectangle(88, 5, 150, 20));

3. JTextField pass, untuk memasukkan login password.
Pengaturan letak dan ukuran komponen user.

pass.setText("");
pass.setBounds(new Rectangle(88, 30, 150, 20));

4. JLabel jLabelP1, label untuk mencetak ‘User Name :’.
Pengaturan alignment, letak dan ukuran komponen jLabelP1.
jLabelP1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabelP1.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabelP1.setText("User Name :");
jLabelP1.setBounds(new Rectangle(0, 5, 80, 26));

5. JLabel jLabelP2, label untuk mencetak ‘Password :’.
Pengaturan alignment, letak dan ukuran komponen jLabelP2.

jLabelP2.setHorizontalAlignment(SwingConstants.RIGHT);
jLabelP2.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabelP2.setText("Password :");
jLabelP2.setBounds(new Rectangle(0, 30, 80, 22));

6. JButton tombol_OK, tombol untuk login user.
Pengaturan letak dan ukuran komponen tombol_OK.

tombol_OK.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
tombol_OK.setText("Login");
tombol_OK.setBounds(new Rectangle(88, 60, 65, 25));

Menambahkan key listener pada tombol tombol_OK yang bekerja pada saat tombol ENTER ditekan. Proses yang terjadi adalah memanggil method checkLogin(), yang berfungsi untuk autentifikasi user dan password.

// Menambahkan ActionListener pada tombol OK
tombol_OK.addActionListener(new java.awt.event.ActionListener() {
// Proses saat tombol OK ditekan
public void actionPerformed(ActionEvent e) {
// Memanggil methode untuk Autentifikasi User dan Password
checkLogin();}});

Proses yang dilakukan pada method ini adalah membuat kotak dialog login menggunakan komponen JDialog. Tampilan ini terdiri dari dua buah kotak teks yang berfungsi sebagai tempat memasukkan data user, dan sebuah tombol yang berfungsi memulai proses autentifikasi data.

/** Methode kotakDialog
* Untuk membuat tampilan kotak dialog dan melakukan Autentifikasi data User
* dan Password saat tombol OK ditekan
*/
public void kotakDialog(){
user.setText("");
user.setBounds(new Rectangle(88, 5, 150, 20));
pass.setText("");
pass.setBounds(new Rectangle(88, 30, 150, 20));
jLabelP1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabelP1.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabelP1.setText("User Name :");
jLabelP1.setBounds(new Rectangle(0, 5, 80, 26));
jLabelP2.setHorizontalAlignment(SwingConstants.RIGHT);
jLabelP2.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabelP2.setText("Password :");
jLabelP2.setBounds(new Rectangle(0, 30, 80, 22));
tombol_OK.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
tombol_OK.setText("Login");
tombol_OK.setBounds(new Rectangle(88, 60, 65, 25));

Mengatur layout manager panel (setLayout()) dan menambahkan komponen-komponen login panel dengan menggunakan method add().

panel.setLayout(null);
panel.add(jLabelP1);
panel.add(user);
panel.add(jLabelP2);
panel.add(pass);
panel.add(tombol_OK);
setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);

Mengatur tampilan kotak dialog login berupa judul, ukuran, tata letak jendela di layar monitor, menambahkan komponen panel dan lain-lain.

dialog.setTitle("Masukkan User dan Password");
dialog.setModal(true);
dialog.setSize(265, 125);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int lebar = (screen.width - dialog.getSize().width) / 2;
int tinggi = (screen.height - dialog.getSize().height) / 2;
dialog.setLocation(lebar, tinggi);
dialog.getContentPane().add(panel);
dialog.setVisible(true);
/*addWindowListener(
new dialog.PenanganKejadian());*/}

Pada method ini, proses yang dilakukan adalah menentukan atau menyimpan data user dan password yang valid. Data ini akan digunakan sebagai parameter proses autentifikasi atau pencocokan dengan data user dan password yang dimasukkan user melalui kotak dialog.

/** Methode checkLogin
* Proses Auntetifikasi User dan Password, data User dan Password yang valid
* sudah dimasukkan di dalam program
*/
public void checkLogin() {
try{
String correctUser = "admin";
String correctPassword = "1234";

Mengambil data user dan data password yang dimasukkan pengguna pada kotak teks yang tersedia pada tampilan dialog login. Untuk data user method yang digunakan adalah method getText(), karena komponen yang digunakan adalah JTextField. Sedangkan untuk data password, method yang digunakan adalah getPassword(), karena komponen yang digunakan adalah JPasswordField.

String inputUser = user.getText();
String inputPassword = new String(pass.getPassword());

Apabila data yang dimasukkan user sesuai dengan data yang tersimpan dalam program, proses selanjutnya adalah memanggil method isLoginCorrect() yang berfungsi menampilkan frame dengan pemberitahuan bahwa proses login berhasil. Namun, apabila data yang dimasukkan user tidak sesuai dengan data yang tersimpan di dalam program, proses selanjutnya adalah memanggil method isLoginWrong() yang berfungsi menampilkan frame dengan pemberitahuan bahwa proses login gagal dan menghilangkan kotak dialog login menggunakan method dispose().

if (inputUser.equals(correctUser) && inputPassword.equals(correctPassword)) {
isLoginCorrect();}
else {
isLoginWrong();}}
catch (Exception ie) {
JOptionPane.showMessageDialog(null,
"gagal\nCoba Diulangi lagi");}
dialog.dispose();}

Method ini berfungsi mengatur tampilan frame, yaitu menampilkan pesan bahwa login yang dilakukan berhasil. Adapun proses yang dilakukan adalah mengatur teks dari label menjadi
‘Login Sukses...!!!’
‘Tekan tombol Logout untuk Exit...’

/** Methode isLoginCorrect
* Proses yang dilakukan Apabila User dan Password valid
* (Proses Autentifikasi berhasil)
*/
public void isLoginCorrect() {
noPol.setEnabled(true);
tombolUrut.setEnabled(true);
tombol_Login.setText("LOGOUT !!!");
pilihKolom.setEnabled(true);
dialog.dispose();
JOptionPane.showMessageDialog(null,
"Login Sukses...!!!\nTekan tombol Logout untuk Exit...");
noPol.requestFocus();}

Method ini berfungsi mengatur tampilan frame, yaitu menampilkan pesan bahwa login yang dilakukan gagal. Adapun proses yang dilakukan adalah mengatur teks dari label menjadi
‘Login Gagal...!!!’
‘Coba Login Kembali...’
Dan menghilangkan kotak dialog login menggunakan method dispose().

/** Methode isLoginWrong
* Proses yang dilakukan Apabila User dan Password tidak valid
* (Proses Autentifikasi gagal)
*/
public void isLoginWrong() {
JOptionPane.showMessageDialog(null,
"Login Gagal...!!!\nCoba Login kembali...");
dialog.dispose();}


• Langkah Pembuatan Form Parkir Input (Transaksi_Parkir_Input2.java)
Form Parkir Input merupakan proses masukkan data. Dimana data seperti nomor polisi, tipe kendaraan, waktu masuk akan disimpan kedalam database tabel transaksi_parkir yang kemudian akan digunakan untuk proses Transaksi Parkir. Berikut adalah penjelasan pendeklarasian komponen-komponen yang digunakan pada form Parkir Input:

public class Transaksi_Parkir_Input2 extends JFrame {
//PENDEKLARASIAN ITEM-ITEM DALAM APLIKASI
private JTextField user = new JTextField();
private JPasswordField pass = new JPasswordField();
private JLabel jLabelP1 = new JLabel();
private JLabel jLabelP2 = new JLabel();
private JLabel jLabelC1 = new JLabel();
JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
private JButton tombol_OK = new JButton();
private JButton tombol_Cari = new JButton();
JDialog dialog = new JDialog();
JDialog dialog2 = new JDialog();
JDialog dialog3 = new JDialog();
private JButton masuk = new JButton();
private JButton tombol_Login = new JButton();
private JButton Help = new JButton();
private Choice pilihKolom = new Choice();
private JButton tombolUrut = new JButton();
private JLabel jLabelX = new JLabel();
private CheckboxGroup checkboxGroup = new CheckboxGroup();
private Checkbox dariAZ = new Checkbox();
private Checkbox dariZA = new Checkbox();
JTextPane jTextPane1=new JTextPane();
JTextPane jTextPane2=new JTextPane();
JLabel Nopol1 = new JLabel();
JTextField Nopol2 = new JTextField();
JTextField noPol = new JTextField();
JTextField waktuIn = new JTextField();
JTextField dCari = new JTextField();
JButton simpan = new JButton();
JButton edit = new JButton();
JButton update = new JButton();
JButton cari = new JButton();
JLabel tanggal = new JLabel();
JLabel Njam = new JLabel();
JLabel judul = new JLabel();
Connection con = null;
Choice tipe = new Choice();
private JLabel jLabel1 = new JLabel();
private JLabel jLabel2 = new JLabel();
private JLabel jLabel3 = new JLabel();
JTable tabel = new JTable();
DefaultTableModel tabMode;
JScrollPane jScrollPane1 = new JScrollPane();
JTable tabel2 = new JTable();
DefaultTableModel tabMode2;
JScrollPane jScrollPane2 = new JScrollPane();
JButton bCetak = new JButton();

1 dan 2. JLabel tanggal, JLabel Njam, untuk menampilkan tanggal dan jam yang valid pada saat ini.
Pengaturan letak, ukuran dan warna komponen tanggal dan Njam.

tanggal.setFont(new java.awt.Font("Dialog",Font.BOLD, 14));
tanggal.setForeground(Color.red);
tanggal.setText("Day - MM - YYYY");
tanggal.setBounds(new Rectangle(11, 4, 120, 15));
Njam.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
Njam.setForeground(Color.red);
Njam.setText("HH : MM : SS");
Njam.setBounds(new Rectangle(110, 4, 106, 15));

Menampilkan dan memfungsikan tanggal dan jam pada form.

/**
* FUNGSI MENAMPILKAN JAM PADA FORM APLIKASI
*/
public void Jam() {
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String nol_bulan = "";
String nol_hari = "";
String nol_jam = "";
String nol_menit = "";
String nol_detik = "";
// Membuat Date
Calendar dt = Calendar.getInstance();
// Mengambil nilai JAM, MENIT, dan DETIK Sekarang
int nilai_tahun = dt.get(dt.YEAR);
int nilai_bulan = dt.get(dt.MONTH) + 1;
int nilai_hari = dt.get(dt.DAY_OF_MONTH);
int nilai_jam = dt.get(dt.HOUR_OF_DAY);
int nilai_menit = dt.get(dt.MINUTE);
int nilai_detik = dt.get(dt.SECOND);
// Jika nilai JAM lebih kecil dari 10 (hanya 1 digit)
if (nilai_bulan <= 9) {
// Tambahkan "0" didepannya
nol_bulan = "0"; }
if (nilai_hari <= 9) {
// Tambahkan "0" didepannya
nol_hari = "0"; }
if (nilai_jam <= 9) {
// Tambahkan "0" didepannya
nol_jam = "0"; }
// Jika nilai MENIT lebih kecil dari 10 (hanya 1 digit)
if (nilai_menit <= 9) {
// Tambahkan "0" didepannya
nol_menit = "0"; }
// Jika nilai DETIK lebih kecil dari 10 (hanya 1 digit)
if (nilai_detik <= 9) {
// Tambahkan "0" didepannya
nol_detik = "0"; }
// Membuat String JAM, MENIT, DETIK
String bulan = nol_bulan + Integer.toString(nilai_bulan);
String hari = nol_hari + Integer.toString(nilai_hari);
String jam = nol_jam + Integer.toString(nilai_jam);
String menit = nol_menit + Integer.toString(nilai_menit);
String detik = nol_detik + Integer.toString(nilai_detik);
// Menampilkan pada Layar
//tanggal.setText(hari + " - " + bulan + " - " + nilai_tahun);
Njam.setText(jam + " : " + menit + " : " + detik);
//waktuIn.setText( jam + " : " + menit + " : " + detik);
tanggal.setText(DateFormat.getDateInstance(DateFormat.LONG,Locale.UK).format(dt.getTime()));}};
// Timer
new javax.swing.Timer(1000, taskPerformer).start();}}

3. JLabel jLabel1, label untuk mencetak ‘Tipe Kend. :’
Pengaturan alignment, letak dan ukuran komponen jLabel1.

jLabel1.setHorizontalAlignment(SwingConstants.LEFT);
jLabel1.setFont(new java.awt.Font("Dialog",Font.BOLD, 12));
jLabel1.setText("Tipe Kend. :");
jLabel1.setBounds(new Rectangle(15, 39, 82, 22));

4. JLabel jLabel2, label untuk mencetak ‘No. Polisi :’
Pengaturan alignment, letak dan ukuran komponen jLabel2.

jLabel2.setBounds(new Rectangle(15, 70, 82, 22));
jLabel2.setHorizontalAlignment(SwingConstants.LEFT);
jLabel2.setFont(new java.awt.Font("Dialog",Font.BOLD, 12));
jLabel2.setText("No. Polisi :");

5. JLabel jLabel3, label untuk mencetak ‘Waktu In :’
Pengaturan alignment, letak dan ukuran komponen jLabel3.

jLabel3.setBounds(new Rectangle(15, 104, 82, 22));
jLabel3.setHorizontalAlignment(SwingConstants.LEFT);
jLabel3.setFont(new java.awt.Font("Dialog",Font.BOLD, 12));
jLabel3.setText("Waktu In :");

6. JLabel Nopol1 , label untuk mencetak ‘NO. Pol :’
Pengaturan alignment, letak dan ukuran komponen Nopol1.

Nopol1.setFont(new java.awt.Font("Dialog", Font.BOLD, 30));
Nopol1.setHorizontalAlignment(SwingConstants.RIGHT);
Nopol1.setText("NO. Pol : ");
Nopol1.setBounds(new Rectangle(180, 65, 191, 44));

7. JLabel jLabelX , label untuk mencetak ‘Urutkan Data Tabel :’
Pengaturan letak dan ukuran komponen jLabelX.

jLabelX.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabelX.setText("Urutkan Data Tabel :");
jLabelX.setBounds(new Rectangle(640, 39, 130, 24));

8. Checkbox dariAZ , untuk mengurutkan data dari A ke Z dengan memberi label ‘Urutkan dari A ke Z :’
Pengaturan letak dan ukuran dari komponen dariAZ. Jika checkbox dariAZ dipilih maka data akan terurut secara ASCENDING.

dariAZ.setCheckboxGroup(checkboxGroup);
dariAZ.setLabel("Urutkan dari A ke Z");
dariAZ.setBounds(new Rectangle(640, 89, 130, 24));

9. Chechkbox dariZA , untuk mengurutkan data dari Z ke A dengan memberi label ‘Urutkan dari Z ke A :’
Pengaturan letak dan ukuran dari komponen dariZA. Jika checkbox dariZA dipilih maka data akan terurut secara DESCENDING.

dariZA.setCheckboxGroup(checkboxGroup);
dariZA.setLabel("Urutkan dari Z ke A");
dariZA.setBounds(new Rectangle(640, 109, 130, 24));

10. JLabel judul , label untuk mencetak ‘Parking Park Taman Kota BSD City ’
Pengaturan alignment, border, letak dan ukuran komponen judul.

judul.setBorder(new BevelBorder(BevelBorder.LOWERED));
judul.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
judul.setHorizontalAlignment(SwingConstants.CENTER);
judul.setText("Parking Park Taman Kota BSD City ");
judul.setBounds(new Rectangle(5, 550, 780, 24));

11. JButton Help, untuk panduan aplikasi berupa cara menggunakan aplikasi Parkir Input.
Pengaturan letak, ukuran dan warna komponen Help. Tombol Help tetap bisa dijalankan tanpa harus melakukan proses login user.

Help.setForeground(Color.BLUE);
Help.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
Help.setText("HELP");
Help.setEnabled(true);
Help.setBounds(new Rectangle(500, 4, 130, 24));

Menambahkan action listener pada tombol Help yang bekerja pada saat tombol Help ditekan. Proses yang terjadi adalah memanggil method Help(), yang berfungsi sebagai panduan dalam menjalankan aplikasi Parkir Input ini.

Help.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Help_actionPerformed(e);}});

Aksi yang terjadi bila tombol Help ditekan maka akan muncul kotak dialog yang berisi panduan menjalankan aplikasi Parkir Input untuk user.

/**
* METODE YANG DIJALANKAN BILA BUTTON Help DI KLIK MOUSE
*/
public void Help_actionPerformed(ActionEvent e) {
dialog2.setTitle("Guide's Line Untuk User ");
dialog2.setModal(true);
dialog2.setSize(500, 500);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int lebar = (screen.width - dialog2.getSize().width) / 2;
int tinggi = (screen.height - dialog2.getSize().height) / 2;
dialog2.setLocation(lebar, tinggi);
dialog2.setBackground(Color.WHITE);
jTextPane1.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jTextPane1.setText("Panduan untuk menjalankan Aplikasi Parkir Input : \n"+
"1. Jalankan Aplikasi tersebut dari Komputer anda.\n\n"+
"2. Setelah itu akan muncul suatu dialog Password untuk Login,"+
" dimana aplikasi tersebut meminta anda untuk memasukkan user"+
" name dan password yang benar.\n\n"+
"3. Setelah anda berhasil Login, akan muncul tampilan GUI dari "+
" Aplikasi Transaksi_Parkir_Input2. Bila anda gagal Login, tampilan"+
" GUI tersebut akan tetap ditampilkan, tetapi anda diminta untuk"+
" Login kembali dengan menekan tombol Login didalam aplikasi."+
" Bila anda belum Login, maka aplikasi tersebut tidak bisa digunakan"+
" sebagaimana semestinya.\n\n"+
"4. Untuk kegiatan input dari aplikasi ini, pertama anda harus menentukan"+
" tipe dari kendaraan yang masuk dengan menekan tombol List tipe, kemudian"+
" masukkan No.Polisi kendaraan lalu tekan tombol enter.\n\n"+
"5. Kemudian aplikasi akan merujuk ke tombol simpan, yang berfungsi menyimpan"+
" data yang telah anda masukkan kedalam database. Kemudian tekan enter atau"+
" klik dengan Mouse."+
"(Catatan : waktu masuk kendaraan akan dimasukkan secara"+
" otomatis oleh aplikasi kedalam database).\n\n"+
"6. Lakukan kembali langkah 4 dan langkah 5 untuk melakukan input data kendaraan"+
" yang lainnya.\n\n"+
"7. Untuk keluar dari aplikasi ini, anda tingal mengklik tombol silang di pojok"+
" kanan atas tampilan GUI, ataupun anda bisa menekan tombol Logout yang ada"+
" dalam Form. dengan menekan tombol Logout, anda akan melihat suatu dialog"+
" yang dikeluarkan oleh aplikasi tersebut." );
jTextPane1.setContentType("text/plain");
dialog2.getContentPane().add(jTextPane1);
dialog2.setVisible(true);}

12. JButton tombol_Login, untuk login user.
Pengaturan letak, ukuran dan warna komponen tombol_Login. Tombol tombol_Login selalu dapat dijalankan untuk melakukan proses login user.

tombol_Login.setForeground(Color.blue);
tombol_Login.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
tombol_Login.setText("LOGIN !!!");
tombol_Login.setEnabled(true);
tombol_Login.setBounds(new Rectangle(640, 4, 130, 24));

Menambahkan action listener pada tombol tombol_Login yang bekerja pada saat tombol tombol_Login ditekan. Proses yang terjadi adalah memanggil method tombol_Login(), yang berfungsi sebagai proses autentifikasi user dan password jika user belum login.

tombol_Login.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tombol_Login_actionPerformed(e);}});

Bila tombol=’LOGIN !!!’ ditekan maka proses autentifikasi user dijalankan, jika tombol=’LOGOUT !!!’ yang ditekan maka akan muncul pesan ‘Anda yakin Ingin Keluar dari Aplikasi ini...???’, jika YES, maka user keluar dari aplikasi Parkir Input, jika NO maka aplikasi Parkir Input tetap dijalankan.

/**
* METODE YANG DIJALANKAN BILA BUTTON LOGIN DI KLIK MOUSE
*/
public void tombol_Login_actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
if (s.equals("LOGIN !!!"))
kotakDialog();
else {
int ok = JOptionPane.showConfirmDialog(null,"Anda yakin Ingin Keluar dari Aplikasi ini...???","konfirmasi",JOptionPane.YES_NO_OPTION);
if(ok==0){
JOptionPane.showMessageDialog(null,
"Thank You bye-bye...");
System.exit(0);}}}

13. JButton simpan, untuk menyimpan data yang dimasukkan kedalam database tabel transaksi_parkir.
Pengaturan letak, ukuran dan warna komponen simpan. Tombol simpan tidak bisa digunakan jika login user belum valid atau sah.

simpan.setBounds(new Rectangle(20, 145, 140, 30));
simpan.setEnabled(false);
simpan.setForeground(Color.blue);
simpan.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
simpan.setText("SIMPAN");

Menambahkan key listener pada tombol simpan yang bekerja pada saat tombol simpan dan tombol ENTER ditekan. Proses yang terjadi adalah memanggil method simpan(), yang berfungsi untuk menyimpan data yang dimasukkan kedalam database tabel transaksi_parkir.

simpan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
simpan_actionPerformed(e);}});

simpan.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
simpan_keyPressed(e);}});

Button simpan akan bekerja bila JTextField noPol tidak kosong, jika kosong maka akan muncul pesan yang berisi ‘No.Polisi Belum Dimasukkan...!!!’

/**
* METODE YANG DIJALANKAN BILA BUTTON SIMPAN DI KLIK MOUSE
*/
public void simpan_actionPerformed(ActionEvent e) {
/*if (noPol.getText().equalsIgnoreCase("") || tipe.getSelectedItem().equalsIgnoreCase("")) {
JOptionPane.showMessageDialog(null,
"No.Polisi Belum dimasukkan...!!!");
noPol.requestFocus();}
else {
simpanData();}
*/
simpanData();}

14. JButton bCetak, untuk mencetak karcis/tanda masuk parkir.
Pengaturan letak, ukuran dan warna komponen bCetak. Tombol bCetak tidak bisa digunakan jika login user belum valid atau sah.

bCetak.setForeground(Color.blue);
bCetak.setBounds(new Rectangle(200, 145, 140, 30));
bCetak.setEnabled(false);
bCetak.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
bCetak.setText("C E T A K");

Menambahkan key listener pada tombol bCetak yang bekerja pada saat tombol bCetak dan tombol ENTER ditekan. Proses yang terjadi adalah memanggil method bCetak(), yang berfungsi untuk menampilkan karcis masuk kendaraan yang parkir.

bCetak.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bCetak_actionPerformed(e);}});

bCetak.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
Cetak_keyPressed(e);}});

Berikut adalah metode yang dijalankan bila button CETAK diklik mouse dan ditekan ENTER.

/**
* METODE YANG DIJALANKAN BILA BUTTON CETAK DIKLIK MOUSE
*/
public void bCetak_actionPerformed(ActionEvent e) {
cetak_hasil();
bCetak.setEnabled(false);
simpan.setEnabled(true);
tipe.setEnabled(true);
tipe.requestFocus();
tipe.select("");
noPol.setEnabled(true);
noPol.setText("");}

/**
* METODE YANG DIJALANKAN BILA BUTTON CETAK DITEKAN ENTER
*/
public void bCetak_keyPressed(KeyEvent e) {
int ascii = e.getKeyCode();
if (ascii == 10) {
cetak_hasil();
bCetak.setEnabled(false);
simpan.setEnabled(true);
tipe.setEnabled(true);
tipe.requestFocus();
tipe.select("");
noPol.setEnabled(true);
noPol.setText("");
Nopol2.setText("--Empty--");}}

Berikut adalah pengaturan objek tampilan GUI karcis parkir, seperti ukuran dan posisi frame pada layar dimana hasil yang telah dimasukkan yang ditampilkan dalam bentuk kotak dialog.

/**
* METODE YANG DILAKUKAN DARI BUTTON CETAK
*/
public void cetak_hasil() {
dialog.setTitle("Karcis Masuk");
dialog.setModal(true);
dialog.setSize(300, 150);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int lebar = (screen.width - dialog.getSize().width) / 2;
int tinggi = (screen.height - dialog.getSize().height) / 2;
dialog.setLocation(lebar, tinggi);
dialog.setBackground(Color.WHITE);
CanvasKu kanvas = new CanvasKu();
kanvas.setBackground(Color.WHITE);
dialog.getContentPane().add(kanvas);
dialog.setVisible(true);}

class CanvasKu extends Canvas{
public void paint(Graphics g){
Object kod = noPol.getText();
String np = kod.toString();
String sql = "select to_char(waktuin,'fmHH24:mi:ss') as wktin from transaksi_parkir where noPol= '" + np + "' and status ='In'";
String wktIn_b = "null";

try {
PreparedStatement stat = con.prepareStatement(sql);
ResultSet set = stat.executeQuery();
while (set.next()) {
waktuIn.requestFocus();
wktIn_b = set.getString("wktin");}}
catch (Exception ie) {
JOptionPane.showMessageDialog(null,
" Nilai Tidak Ditemukan !!!");}
g.setFont(new Font("Dialog", 1, 11));
g.drawString("PARKING PARK Taman Kota BSD City ", 30, 20);
g.drawString("Jl. BSD City N0. 100", 30, 30);
g.drawString("0857-1053-1047", 30, 40);
g.drawString(tanggal.getText() + " / " + Njam.getText()+" IN", 30, 50);
g.drawLine(30, 60, 250, 60);
g.setFont(new Font("Dialog", 0, 11));
String data_noPol = noPol.getText();
String data_tipeKol = tipe.getSelectedItem();
String data_waktuIn = wktIn_b;
g.drawString("Tipe : " + data_tipeKol, 30, 80);
g.drawString("No.polisi : " + data_noPol, 30, 90);
g.drawString("Waktu IN : " + data_waktuIn,30,100 );}}
15. JButton cari, untuk mencari data dalam database tabel transaksi_parkir.
Pengaturan letak, ukuran dan warna komponen cari. Tombol cari tetap bisa dijalankan tanpa harus melakukan proses login user.

cari.setForeground(Color.blue);
cari.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
cari.setText("CARI");
cari.setEnabled(true);
cari.setBounds(new Rectangle(470, 145, 140, 30));

Menambahkan key listener pada tombol cari yang bekerja pada saat tombol ENTER ditekan. Proses yang terjadi adalah memanggil method cari(), yang berfungsi untuk mencari data dalam database tabel transaksi_parkir dengan memasukkan nomor polisi kendaraan

cari.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cari_actionPerformed(e);}});

Berikut merupakan method untuk mencari data dalam database tabel transaksi_parkir berdasarkan nomor polisi yang ditampilkan dalam kotak dialog.

/**
* Methode Cari Dialog
*/
public void cari_actionPerformed(ActionEvent e){
Object[] row2 = { "noPol","tipe","In","Out","status","ket"};
tabMode2 = new DefaultTableModel(null, row2);
tabel2.setBorder(null);
tabel2.setModel(tabMode2);
jScrollPane2.setViewportBorder(null);
jScrollPane2.setBorder(null);
jScrollPane2.setBounds(new Rectangle(8,80, 425, 100));
jScrollPane2.getViewport().add(tabel2);
dCari.setText("");
dCari.setBounds(new Rectangle(88, 5, 130, 20));
jLabelC1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabelC1.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabelC1.setText("No. Polisi :");
jLabelC1.setBounds(new Rectangle(0, 5, 80, 26));
tombol_Cari.setText("Cari");
tombol_Cari.setBounds(new Rectangle(88, 40, 80, 24));
tombol_Cari.setForeground(Color.blue);
tombol_Cari.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
// Menambahkan ActionListener pada tombol OK
tombol_Cari.addActionListener(new java.awt.event.ActionListener(){
// Proses saat tombol cari ditekan
public void actionPerformed(ActionEvent e) {
// Memanggil methode untuk Autentifikasi User dan Password
hapusTabel2();
checkNopol();}});
panel2.setLayout(null);
panel2.add(jLabelC1);
panel2.add(dCari);
panel2.add(tombol_Cari);
panel2.add(jScrollPane2);
setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
dialog3.setTitle("Cari Kendaraan");
dialog3.setModal(true);
dialog3.setSize(450, 230);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int lebar = (screen.width - dialog3.getSize().width) / 2;
int tinggi = (screen.height - dialog3.getSize().height) / 2;
dialog3.setLocation(lebar, tinggi);
dialog3.getContentPane().add(panel2);
dialog3.setVisible(true);}

/** Methode cari Kendaraan (checkNopol)
* Untuk membuat tampilan kotak dialog dan melakukan Autentifikasi data User
* dan Password saat tombol OK ditekan
*/
public void checkNopol(){
Object kod = dCari.getText();
String find = kod.toString();
try{
String sql= "SELECT NOPOL,tipe,to_char(waktuin,'DD/MM/YY HH24:mi:ss') as wktin, "+"to_char(waktuout,'DD/MM/YY HH24:mi:ss') as wktout, STATUS,ket FROM TRANSAKSI_PARKIR"+" WHERE nopol='"+find+"'";
Statement stat = con.createStatement();
ResultSet set = stat.executeQuery(sql);
String npl="null";
String tp="null";
String waktu_in="null";
String waktu_out="null";
String st="null";
String ket="null";
while (set.next()) {
npl = set.getString("NOPOL");
tp = set.getString("tipe");
waktu_in = set.getString("wktin");
waktu_out = set.getString("wktout");
st = set.getString("STATUS");
ket = set.getString("ket");
String[] data2 = {npl,tp,waktu_in,waktu_out,st,ket};
tabMode2.addRow(data2);}
stat.close();}
catch (Exception e) {}}

16. JButton tombolUrut, untuk mengurutkan data yang ada pada tabel.
Pengaturan letak, ukuran dan warna komponen tombolUrut. Tombol tombolUrut tidak bisa digunakan jika login user belum valid atau sah.

tombolUrut.setForeground(Color.BLUE);
tombolUrut.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
tombolUrut.setText("URUTKAN");
tombolUrut.setEnabled(false);
tombolUrut.setBounds(new Rectangle(640, 145, 140, 30));

Menambahkan action listener pada tombol tombolUrut yang bekerja pada saat tombol tombolUrut ditekan. Proses yang terjadi adalah memanggil method prosesTombolUrutkan(), yang berfungsi untuk mengurutkan data yang ada di dalam database tabel transaksi_parkir berdasarkan kolom yang dipilih.

tombolUrut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
prosesTombolUrutkan();}});

Apabila checkbox yang dipilih adalah ‘Urutkan dari A sampai Z’, maka kondisi ORDER BY adalah ASC, sedangkan bila checkbox yang dipilih adalah ‘Urutkan dari Z sampai A’, maka kondisi ORDER BY adalah DESC.

/**
* Metode prosesTombolUrutkan
* Untuk melakukan proses saat tombol URUTKAN ditekan
*/
void prosesTombolUrutkan() {
// Apabila memilih pilihan Mengurutkan dari A sampai Z
if (checkboxGroup.getSelectedCheckbox().getLabel().endsWith("Z")){
prosesUrutkan("ASC");}
// Apabila memilih pilihan Mengurutkan dari Z sampai A
else {
prosesUrutkan("DESC");}}

Dalam method ini, proses yang terjadi adalah mengurutkan data berdasarkan nama kolom yang dipilih pada komponen pilihKolom. Kolom dengan kondisi pengurutan ORDER BY adalah nilai checkbox yang dipilih.

/**
* Metode Urutkan Data tabel
* Untuk melakukan proses pengurutan Data
* @param urut = nilai kondisi ORDER BY
*/
public void prosesUrutkan(String urut) {
hapusTabel();
try {
String sql = "select noPol,tipe,to_char(waktuin,'DD/MM/YY HH24:mi:ss') as wktin,to_char(waktuout,'DD/MM/YY HH24:mi:ss') as wktout,lamaWaktu, biaya, no_transaksi, status, ket from transaksi_parkir ORDER BY " +
pilihKolom.getSelectedItem() + " " + urut;
Statement stat = con.createStatement();
ResultSet set = stat.executeQuery(sql);
while (set.next()) {
String noPol = set.getString("noPol");
String tipe = set.getString("tipe");
String waktuIn = set.getString("wktin");
String waktuOut = set.getString("wktout");
String lamawaktu = set.getString("lamaWaktu");
String biaya = set.getString("biaya");
String no_transaksi = set.getString("no_transaksi");
String status = set.getString("status");
String ket = set.getString("ket");
String[] data = {noPol,tipe, waktuIn, waktuOut,lamawaktu, biaya,no_transaksi, status, ket};
tabMode.addRow(data);}
stat.close();}
catch (Exception e) {}}

17. JButton masuk, tombol menuju menu utama.
Pengaturan letak, ukuran dan warna komponen masuk. Tombol masuk tidak bisa digunakan jika login user belum valid atau sah.

masuk.setText("MENU");
masuk.setBounds(new Rectangle(380,4,120,24));
masuk.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
masuk.setForeground(Color.BLUE);
masuk.setEnabled(false);

Menambahkan action listener pada tombol masuk yang bekerja pada saat tombol masuk ditekan. Proses yang terjadi adalah memanggil class Menu.java, yang berfungsi untuk kembali ke menu utama.

masuk.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
Menu x = new Menu();
x.setVisible(true);}});

18. JTextField noPol, untuk memasukkan nomor polisi kendaraan pada saat kendaraan masuk area parkir.
Pengaturan letak komponen noPol. Pada textfield noPol, user tidak bisa memasukkan nomor polisi kendaraan jika login user belum valid atau sah.

noPol.setBounds(new Rectangle(76, 74, 130, 21));
noPol.setEnabled(false);

Menambahkan key listener pada textfield noPol yang bekerja pada saat tombol ENTER ditekan. Proses yang terjadi adalah memanggil method noPol(), yang berfungsi untuk memasukkan nomor polisi kendaraan yang masuk area parkir.

noPol.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
noPol_keyPressed(e);}});

Jika textfield noPol ditekan ENTER maka akan langsung menuju tombol simpan dan data akan tersimpan kedalam database tabel transaksi_parkir.

/**
* METODE YANG DIJALANKAN BILA TEXTFIELD NOPOL DITEKAN TOMBOR ENTER
*/
public void noPol_keyPressed(KeyEvent e) {
int ascii = e.getKeyCode();
if (ascii == 10) {
if (noPol.getText().equalsIgnoreCase("")) {
noPol.requestFocus();}
else {
simpan.requestFocus();
simpan.setEnabled(true);}}}

19. JTextField waktuIn, untuk menampilkan waktu masuk kendaraan ke area parkir.
Pengaturan alignment, letak dan ukuran komponen waktuIn. Textfield waktuIn berfungsi untuk menampilkan waktu masuk kendaraan, waktu masuk kendaraan tidak perlu dimasukkan karena telah disesuaikan dengan waktu pada saat itu (disesuaikan dengan waktu pada komputer).

waktuIn.setHorizontalAlignment(SwingConstants.LEFT);
waktuIn.setBounds(new Rectangle(76, 106, 130, 24));
waktuIn.setEnabled(false);

20. JTextField Nopol2, untuk mencetak nomor polisi yang dimasukkan.
Pengaturan alignment, border, letak dan ukuran komponen Nopol2. Textfield Nopol2 tidak dapat diubah karena hanya berfungsi mencetak nomor polisi yang dimasukkan.

Nopol2.setBorder(new BevelBorder(BevelBorder.LOWERED));
Nopol2.setFont(new java.awt.Font("Dialog", Font.BOLD, 30));
Nopol2.setEditable(false);
Nopol2.setHorizontalAlignment(SwingConstants.CENTER);
Nopol2.setText("--Empty--");
Nopol2.setBounds(new Rectangle(380, 70, 169, 44));

Jika nomor polisi kendaraan dimasukkan pada textfield noPol maka langsung tercetak pada textfield nopol2.

/**
* METODE YANG DIJALANKAN TERHADAP Nopol2
* BILA TEXTFIELD Nopol1 DIKETIKKAN NILAI DITEKAN TOMBOR ENTER
*/
public void noPol_caretUpdate(CaretEvent e) {
if (noPol.getText().equals("")) {
Nopol2.setText("--Empty--");}
else {
String nilai = noPol.getText();
String format;
StringTokenizer token = new StringTokenizer(nilai);
format = token.nextToken();
Nopol2.setText(format);}}

21. Choice tipe, list menu untuk memilih tipe kendaraan.
Pengaturan letak dan pilihan komponen tipe. Choice tipe tidak bisa digunakan jika login user belum valid atau sah.

tipe.add("--- Pilih tipe Kend. ---");
tipe.addItem("Mobil");
tipe.addItem("Motor");
tipe.setBounds(new Rectangle(76, 39, 130, 24));
tipe.setEnabled(false);

22. Choice pilihKolom, list menu untuk memilih urutan data sesuai kolom.
Pengaturan letak dan pilihan komponen pilihKolom. Choice pilihKolom tidak bisa digunakan jika login user belum valid atau sah.

pilihKolom.add("-- Pilih Salah Satu --");
pilihKolom.addItem("nopol");
pilihKolom.addItem("tipe");
pilihKolom.addItem("waktuin");
pilihKolom.addItem("waktuout");
pilihKolom.addItem("lamawaktu");
pilihKolom.addItem("biaya");
pilihKolom.addItem("no_transaksi");
pilihKolom.addItem("ket");
pilihKolom.setEnabled(false);
pilihKolom.setBounds(new Rectangle(640, 69, 130, 24));

23. JTable tabel, membuat tampilan tabel yang terhubung dengan database tabel transaksi_parkir.
Method yang berfungsi untuk menampilkan semua data yang telah tersimpan di dalam database ke tabel adalah method tampilDataKeTabel(). Di dalam method ini, proses pertama yang dilakukan adalah menghapus semua data yang ada pada tabel dengan memanggil method hapusTabel(). Proses selanjutnya adalah mengambil semua data yang telah tersimpan dengan menggunakan perintah SQL ‘SELECT * FROM TRANSAKSI_PARKIR’, dan kemudian menampilkan data yang ditemukan ke tabel. Statement yang digunakan untuk mengirim perintah SQL adalah STATEMENT karena perintah SQL yang digunakan tidak berparameter. Bisa juga mengganti STATEMENT dengan PREPAREDSTATEMENT untuk pengiriman perintah SQL.

/**
* TAMPIL DATA KE TABEL YANG ADA PADA FORM APLIKASI
*/
public void tampilDataKeTabel() {
hapusTabel();
try {
//String sql = "select * from transaksi_parkir";
String sql = "select noPol,tipe,to_char(waktuin,'DD/MM/YY HH24:mi:ss')"+" as wktin,to_char(waktuout,'DD/MM/YY HH24:mi:ss') as wktout,lamaWaktu,"+" biaya, no_transaksi, status, ket from transaksi_parkir order by tipe";
Statement stat = con.createStatement();
ResultSet set = stat.executeQuery(sql);
while (set.next()) {
//String tgl = set.getString("tanggal");
String noPol = set.getString("noPol");
String tipe = set.getString("tipe");
String waktuIn = set.getString("wktin");
String waktuOut = set.getString("wktout");
String lamawaktu = set.getString("lamaWaktu");
String biaya = set.getString("biaya");
String no_transaksi = set.getString("no_transaksi");
String status = set.getString("status");
String ket = set.getString("ket");
String[] data = {noPol,tipe, waktuIn, waktuOut,lamawaktu, biaya,no_transaksi, status, ket};
tabMode.addRow(data);}}
catch (Exception e) {}}

• Langkah Pembuatan Form Transaksi Parkir (Transaksi_Parkir_Hitung2.java)
Form Transaksi Parkir merupakan proses penghitungan biaya parkir. Dimana data seperti nomor polisi, tipe kendaraan, waktu masuk diambil dari proses Parkir Input yang telah tersimpan di dalam database tabel transaksi_parkir. Pada proses ini user hanya perlu memasukkan nomor polisi kendaraan, maka data-data mengenai kendaraan tersebut akan langsung diambil dari database tabel transaksi_parkir dan selanjutnya biaya akan diproses melalui tipe kendaraan dan perhitungan lama waktu kendaraan parkir yaitu lamawaktu=waktuout-waktuin. Berikut adalah penjelasan pendeklarasian komponen-komponen yang digunakan pada form Transaksi Parkir:

public class Transaksi_Parkir_Hitung2 extends JFrame {

String biaya;
String status;

//PENDEKLARASIAN ITEM-ITEM DALAM APLIKASI
private JTextField user = new JTextField();
private JPasswordField pass = new JPasswordField();
private JLabel jLabelP1 = new JLabel();
private JLabel jLabelP2 = new JLabel();
private JLabel jLabelC1 = new JLabel();
JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
private JButton tombol_OK = new JButton();
JDialog dialog = new JDialog();
JDialog dialog2 = new JDialog();
JDialog dialog3 = new JDialog();
private JButton masuk = new masuk();
private JButton tombol_Login = new JButton();
private JButton tombol_Cari = new JButton();
private Choice pilihKolom = new Choice();
private JButton tombolUrut = new JButton();
private JLabel jLabelX = new JLabel();
private CheckboxGroup checkboxGroup = new CheckboxGroup();
private Checkbox dariAZ = new Checkbox();
private Checkbox dariZA = new Checkbox();
JTextPane jTextPane1=new JTextPane();
JTextPane jTextPane2=new JTextPane();
JTextField dCari = new JTextField();
JTextField noPol = new JTextField();
JTextField waktuIn = new JTextField();
JTextField waktuOut = new JTextField();
JTextField lamaWaktu = new JTextField();
JButton next = new JButton();
JButton cari = new JButton();
JScrollPane jScrollPane1 = new JScrollPane();
JLabel total = new JLabel();
JTable tabel = new JTable();
DefaultTableModel tabMode;

JTable tabel2 = new JTable();
DefaultTableModel tabMode2;
JScrollPane jScrollPane2 = new JScrollPane();

JLabel tanggal = new JLabel();
JLabel Njam = new JLabel();
JLabel jLabel4 = new JLabel();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
JLabel jLabel7 = new JLabel();
JLabel jLabel8 = new JLabel();
JLabel judul = new JLabel();
JTextField bayar_2 = new JTextField();
JTextField kembalian = new JTextField();
JTextField bayar = new JTextField();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JButton bCetak = new JButton();
Connection con;
JLabel jLabel3 = new JLabel();
JLabel no_tran = new JLabel();
private JButton Help = new JButton();

1 dan 2. JLabel tanggal, JLabel Njam, untuk menampilkan tanggal dan jam yang valid pada saat ini.
Pengaturan letak, ukuran dan warna komponen tanggal dan Njam.

tanggal.setForeground(Color.red);
tanggal.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
tanggal.setText("DD - MM - YYYY");
tanggal.setBounds(new Rectangle(11, 4, 120, 15));

Njam.setForeground(Color.red);
Njam.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
Njam.setText("HH : MM : SS");
Njam.setBounds(new Rectangle(110, 4, 106, 15));

Menampilkan dan memfungsikan tanggal dan jam pada form.

/**
* FUNGSI MENAMPILKAN JAM PADA FORM APLIKASI
*/
public void Jam() {
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String nol_bulan = "";
String nol_hari = "";
String nol_jam = "";
String nol_menit = "";
String nol_detik = "";
// Membuat Date
Calendar dt = Calendar.getInstance();
// Mengambil nilaj JAM, MENIT, dan DETIK Sekarang
int nilai_tahun = dt.get(dt.YEAR);
int nilai_bulan = dt.get(dt.MONTH) + 1;
int nilai_hari = dt.get(dt.DAY_OF_MONTH);
int nilai_jam = dt.get(dt.HOUR_OF_DAY);
int nilai_menit = dt.get(dt.MINUTE);
int nilai_detik = dt.get(dt.SECOND);
// Jika nilai JAM lebih kecil dari 10 (hanya 1 digit)
if (nilai_bulan <= 9) {
// Tambahkan "0" didepannya
nol_bulan = "0";}
if (nilai_hari <= 9) {
// Tambahkan "0" didepannya
nol_hari = "0";}
if (nilai_jam <= 9) {
// Tambahkan "0" didepannya
nol_jam = "0";}
// Jika nilai MENIT lebih kecil dari 10 (hanya 1 digit)
if (nilai_menit <= 9) {
// Tambahkan "0" didepannya
nol_menit = "0";}
// Jika nilai DETIK lebih kecil dari 10 (hanya 1 digit)
if (nilai_detik <= 9) {
// Tambahkan "0" didepannya
nol_detik = "0";}
// Membuat String JAM, MENIT, DETIK
String bulan = nol_bulan + Integer.toString(nilai_bulan);
String hari = nol_hari + Integer.toString(nilai_hari);
String jam = nol_jam + Integer.toString(nilai_jam);
String menit = nol_menit + Integer.toString(nilai_menit);
String detik = nol_detik + Integer.toString(nilai_detik);
// Menampilkan pada Layar
//tanggal.setText(hari + " - " + bulan + " - " + nilai_tahun);
Njam.setText(jam + " : " + menit + " : " + detik);
waktuIn.setText( jam + " : " + menit + " : " + detik);
tanggal.setText(DateFormat.getDateInstance(DateFormat.LONG,
Locale.UK).format(dt.getTime()));}};
// Timer
new javax.swing.Timer(1000, taskPerformer).start();}

3. JLabel jLabel3, label untuk mencetak ‘Nomor Transaksi :’
Pengaturan alignment, letak dan ukuran komponen jLabel3.

jLabel3.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel3.setText("Nomor Transaksi : ");
jLabel3.setFont(new java.awt.Font("Dialog", Font.BOLD, 11));
jLabel3.setBounds(new Rectangle(185 ,1, 114, 20));

Method ini berfungsi untuk mencetak nomor transaksi parkir. Nama method ini adalah ambilNoTran() dengan modifier public dan nilai kembalian void. Method ini berfungsi mengambil nilai maksimal dari nomor transaksi pada kolom no_transaksi yang telah tersimpan pada tabel transaksi_parkir pada kolom no_transaksi dan kemudian ditambah dengan 1 yang nantinya akan menjadi nomor transaksi yang sedang dilakukan. Nomor transaksi parkir akan memproses secara urut ketika menjalankan aplikasi Transaksi Parkir.

/**
* FUNGSI UNTUK ambilNoTran
*/
public void ambilNoTran() {
boolean ada_no_tran = false;
try {
String sql = "Select Max(no_transaksi) as no from transaksi_parkir";
Statement stat = con.createStatement();
ResultSet set = stat.executeQuery(sql);
while (set.next()) {
String nomor = set.getString("no");
int no_t = Integer.parseInt(nomor) + 1;
String dt_tran = Integer.toString(no_t);
int panjang = dt_tran.length();
for (int i = 1; i <= (6 - panjang); i++) {
dt_tran = "0" + dt_tran;}
no_tran.setText(dt_tran);
ada_no_tran = true;}}
catch (Exception es) {}
if (ada_no_tran == false) {
no_tran.setText("000001");}}

4. JLabel jLabel4, label untuk mencetak ‘No. Polisi’
Pengaturan alignment, letak dan ukuran komponen jLabel4.

jLabel4.setHorizontalAlignment(SwingConstants.CENTER);
jLabel4.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabel4.setText("No. Polisi");
jLabel4.setBounds(new Rectangle(8, 50, 80, 20));

5. JLabel jLabel5, label untuk mencetak ‘Waktu In’
Pengaturan alignment, letak dan ukuran komponen jLabel5.

jLabel5.setHorizontalAlignment(SwingConstants.CENTER);
jLabel5.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabel5.setText("Waktu In");
jLabel5.setBounds(new Rectangle(144, 51, 80, 20));

6. JLabel jLabel6, label untuk mencetak ‘Waktu Out’
Pengaturan alignment, letak dan ukuran komponen jLabel6.

jLabel6.setHorizontalAlignment(SwingConstants.CENTER);
jLabel6.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabel6.setText("Waktu Out");
jLabel6.setBounds(new Rectangle(230, 51, 80, 20));

7. JLabel jLabel8, label untuk mencetak ‘Lama Waktu’
Pengaturan alignment, letak dan ukuran komponen jLabel8.
jLabel8.setHorizontalAlignment(SwingConstants.CENTER);
jLabel8.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabel8.setText("Lama Waktu");
jLabel8.setBounds(new Rectangle(320, 51, 80, 20));

8. JLabel jLabelX , label untuk mencetak ‘Urutkan Data Tabel :’
Pengaturan letak dan ukuran komponen jLabelX.

jLabelX.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabelX.setText("Urutkan Data Tabel :");
jLabelX.setBounds(new Rectangle(640, 39, 130, 24));

9. Checkbox dariAZ , untuk mengurutkan data dari A ke Z dengan memberi label ‘Urutkan dari A ke Z :’
Pengaturan letak dan ukuran dari komponen dariAZ. Jika checkbox dariAZ dipilih maka data akan terurut secara ASCENDING.

dariAZ.setCheckboxGroup(checkboxGroup);
dariAZ.setLabel("Urutkan dari A ke Z");
dariAZ.setBounds(new Rectangle(640, 89, 130, 24));

10. Chechkbox dariZA , untuk mengurutkan data dari Z ke A dengan memberi label ‘Urutkan dari Z ke A :’
Pengaturan letak dan ukuran dari komponen dariZA. Jika checkbox dariZA dipilih maka data akan terurut secara DESCENDING.

dariZA.setCheckboxGroup(checkboxGroup);
dariZA.setLabel("Urutkan dari Z ke A");
dariZA.setBounds(new Rectangle(640, 109, 130, 24));

11. JLabel jLabel7 , label untuk mencetak ‘TOTAL : Rp.’
Pengaturan alignment, letak dan ukuran komponen jLabel7.

jLabel7.setFont(new java.awt.Font("Dialog", Font.BOLD, 30));
jLabel7.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel7.setText("TOTAL : Rp.");
jLabel7.setBounds(new Rectangle(8, 120, 191, 44));

12. JLabel total , label untuk mencetak total biaya parkir.
Pengaturan alignment, letak dan ukuran komponen total. Label total berfungsi untuk mencetak total biaya parkir kendaraan.

total.setFont(new java.awt.Font("Dialog", Font.BOLD, 30));
total.setHorizontalAlignment(SwingConstants.CENTER);
total.setText("0");
total.setBounds(new Rectangle(211, 127, 169, 35));

Berikut adalah perhitungan total biaya parkir kendaraan sesuai dengan tipe kendaraan dan perhitungan lama waktu parkir.

//TAMPILKAN BIAYA
try {
String sql3 = "SELECT DECODE(TIPE,'Motor',(DECODE(TRUNC((WAKTUOUT-WAKTUIN)*1440/60),0,0,1,1000,((TRUNC((WAKTUOUT-WAKTUIN)*1440/60)-1)*500+1000)) + "+"( DECODE(TRUNC((WAKTUOUT-WAKTUIN)*1440/60),0,(DECODE(MOD((WAKTUOUT-WAKTUIN)*1440,60),0,0,1000)),(DECODE(MOD((WAKTUOUT-WAKTUIN)*1440,60),0,0,500)))) )"+",(DECODE(TRUNC((WAKTUOUT-WAKTUIN)*1440/60),0,0,1,2000,((TRUNC((WAKTUOUT-WAKTUIN)*1440/60)-1)*1000+2000)) + ( DECODE(TRUNC((WAKTUOUT-WAKTUIN)*1440/60),0,(DECODE(MOD((WAKTUOUT-WAKTUIN)*1440,60),0,0,2000))"+",(DECODE(MOD((WAKTUOUT-WAKTUIN)*1440,60),0,0,1000)))) )) as B FROM TRANSAKSI_PARKIR where nopol ='"+np+"' and status ='In'";
Statement stat3 = con.createStatement();
ResultSet set3 = stat3.executeQuery(sql3);
while (set3.next()) {
biaya = set3.getString("B");
double money = Double.parseDouble(biaya);
String format = NumberFormat.getNumberInstance(Locale.ENGLISH).format(money);
StringTokenizer token = new StringTokenizer(format, ".");
format = token.nextToken();
format = format.replace(',', '.');
total.setText(format);}}
catch (Exception ie) { JOptionPane.showMessageDialog(null,
"BIAYA GAGAL DITAMPILKAN\nCoba Diulangi lagi");}
tampilDataKeTabel();
//waktuIn.requestFocus();
//next.setEnabled(true);
bayar.requestFocus();}
set.close();}
catch (Exception ie) {}}}
else if (ascii == 27) {
bayar.requestFocus();}}

13. JLabel jLabel1, label untuk mencetak ‘Bayar :’
Pengaturan alignment, letak, ukuran dan warna komponen jLabel1.

jLabel1.setFont(new java.awt.Font("Dialog", Font.BOLD, 20));
jLabel1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel1.setForeground(Color.black);
jLabel1.setText("Bayar :");
jLabel1.setBounds(new Rectangle(374, 432, 110, 29));

14. JLabel jLabel2, label untuk mencetak ‘Kembali :’
Pengaturan alignment, letak, ukuran dan warna komponen jLabel2.

jLabel2.setFont(new java.awt.Font("Dialog", Font.BOLD, 20));
jLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel2.setForeground(Color.black);
jLabel2.setText("Kembali :");
jLabel2.setBounds(new Rectangle(492, 470, 135, 30));

15. JLabel judul , label untuk mencetak ‘Parking Park Taman Kota BSD City ’
Pengaturan alignment, border, letak dan ukuran komponen judul.

judul.setBorder(new BevelBorder(BevelBorder.LOWERED));
judul.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
judul.setHorizontalAlignment(SwingConstants.CENTER);
judul.setText("Parking Park Taman Kota BSD City ");
judul.setBounds(new Rectangle(5, 550, 780, 24));

16. JButton Help, untuk panduan aplikasi berupa cara menggunakan aplikasi Transaksi Parkir.
Pengaturan letak, ukuran dan warna komponen Help. Tombol Help tetap bisa dijalankan tanpa harus melakukan proses login user.

Help.setForeground(Color.BLUE);
Help.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
Help.setText("HELP");
Help.setEnabled(true);
Help.setBounds(new Rectangle(500, 4, 130, 24));

Menambahkan action listener pada tombol Help yang bekerja pada saat tombol Help ditekan. Proses yang terjadi adalah memanggil method Help(), yang berfungsi sebagai panduan dalam menjalankan aplikasi Transaksi Parkir ini.

Help.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Help_actionPerformed(e);}});

Aksi yang terjadi bila tombol Help ditekan maka akan muncul pesan yang berisi panduan menjalankan aplikasi Transaksi Parkir untuk user.

/**
* METODE YANG DIJALANKAN BILA BUTTON Help DI KLIK MOUSE
*/
public void Help_actionPerformed(ActionEvent e) {
dialog2.setTitle("Guide's Line Untuk User ");
dialog2.setModal(true);
dialog2.setSize(500, 500);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int lebar = (screen.width - dialog2.getSize().width) / 2;
int tinggi = (screen.height - dialog2.getSize().height) / 2;
dialog2.setLocation(lebar, tinggi);
dialog2.setBackground(Color.WHITE);
jTextPane1.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jTextPane1.setText("Panduan untuk menjalankan Aplikasi Parkir Hitung : \n"+
"1. Jalankan Aplikasi tersebut dari Komputer anda.\n\n"+
"2. Setelah itu akan muncul suatu dialog Password untuk Login,"+
" dimana aplikasi tersebut meminta anda untuk memasukkan user"+
" name dan password yang benar.\n\n"+
"3. Setelah anda berhasil Login, akan muncul tampilan GUI dari"+
" Aplikasi Transaksi_Parkir_Hitung2. Bila anda gagal Login,"+
" tampilan GUI tersebut akan tetap ditampilkan, tetapi anda"+
" diminta untuk Login kembali dengan menekan tombol Login didalam"+
" aplikasi. Bila anda belum Login, maka aplikasi tersebut tidak bisa"+
" digunakan sebagaimana semestinya.\n\n"+
"4. Untuk kegiatan perhitungan biaya dari aplikasi ini, pertama"+
" anda harus memasukkan No. Polisi dari kendaraan yang masuk"+
" kemudian tekan tombol enter.\n\n"+
"5. Setelah anda tekan tombol enter, maka semua data tentang waktu"+
" masuk, waktu keluar, lama waktu, dan biaya dari kendaraan"+
" tersebut. kemudian aplikasi akan merujuk tombol cetak untuk"+
" mencetak bukti transaksi kendaraan. (Dalam aplikasi ini akan"+
" digunakan suatu dialog untuk memberikan gambaran dari bukti transaksi"+
" tersebut).\n\n"+
"6. Setelah bukti transaksi tercetak, maka aplikasi akan mengaktifkan"+
" tombol Next dan merujuk ketombol Next untuk melakukan transaksi"+
" berikutnya. kemudian tekan enter pada tombol next dan lakukanlah"+
" kembali langkah 4, 5, dan 6.\n\n"+
"7. Untuk keluar dari aplikasi ini, anda tingal mengklik tombol silang"+
" di pojok kanan atas tampilan GUI, ataupun anda bisa menekan tombol"+
" Logout yang ada dalam Form. dengan menekan tombol Logout, anda akan"+
" melihat suatu dialog yang dikeluarkan oleh aplikasi tersebut.");
jTextPane1.setContentType("text/plain");
dialog2.getContentPane().add(jTextPane1);
dialog2.setVisible(true);}

17. JButton tombol_Login, untuk login user.
Pengaturan letak, ukuran dan warna komponen tombol_Login. Tombol tombol_Login selalu dapat dijalankan untuk melakukan proses login user.
tombol_Login.setForeground(Color.blue);
tombol_Login.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
tombol_Login.setText("LOGIN !!!");
tombol_Login.setEnabled(true);
tombol_Login.setBounds(new Rectangle(640, 4, 130, 24));

Menambahkan action listener pada tombol tombol_Login yang bekerja pada saat tombol tombol_Login ditekan. Proses yang terjadi adalah memanggil method tombol_Login(), yang berfungsi sebagai proses autentifikasi user dan password jika user belum login.

tombol_Login.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tombol_Login_actionPerformed(e);}});

Bila tombol=’LOGIN !!!’ ditekan maka proses autentifikasi user dijalankan, jika tombol=’LOGOUT !!!’ yang ditekan maka akan muncul pesan ‘Thank You bye-bye...’, yang berarti user keluar dari aplikasi Transaksi Parkir.

/**
* METODE YANG DIJALANKAN BILA BUTTON LOGIN DI KLIK MOUSE
*/
public void tombol_Login_actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
if (s.equals("LOGIN !!!"))
kotakDialog();
else {
JOptionPane.showMessageDialog(null,
"Thank You bye-bye...");
System.exit(0);}}

18. JButton next, untuk melanjutkan ke transaksi berikutnya.
Pengaturan letak, ukuran dan warna komponen next. Tombol next tidak bisa digunakan jika login user belum valid atau sah.

next.setBackground(SystemColor.controlHighlight);
next.setForeground(Color.blue);
next.setBounds(new Rectangle(420, 71, 80, 20));
next.setEnabled(false);
next.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
next.setText("Next");

Menambahkan key listener pada tombol next yang bekerja pada saat tombol next dan tombol ENTER ditekan. Proses yang terjadi adalah memanggil method next(), yang berfungsi untuk melanjutkan ke transaksi berikutnya.

next.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
next_actionPerformed(e);}});

next.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
next_keyPressed(e);}});

19. JButton cari, untuk mencari data yang ada dalam database tabel transaksi_parkir.
Pengaturan letak, ukuran dan warna komponen cari. Tombol cari tetap bisa dijalankan tanpa harus melakukan proses login user.

cari.setForeground(Color.blue);
cari.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
cari.setText("CARI");
cari.setEnabled(true);
cari.setBounds(new Rectangle(500, 135, 130, 24));

Menambahkan key listener pada tombol cari yang bekerja pada saat tombol cari ditekan. Proses yang terjadi adalah memanggil method cari(), yang berfungsi untuk mencari data dalam database tabel transaksi_parkir dengan memasukkan nomor polisi kendaraan.

cari.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cari_actionPerformed(e);}});

Berikut merupakan method untuk mencari data dalam database tabel transaksi_parkir berdasarkan nomor polisi yang ditampilkan dalam kotak dialog.

/**
* Methode Cari Dialog
*/
public void cari_actionPerformed(ActionEvent e){
Object[] row2 = { "noPol","tipe","In","Out","status","ket"};
tabMode2 = new DefaultTableModel(null, row2);
tabel2.setBorder(null);
tabel2.setModel(tabMode2);
jScrollPane2.setViewportBorder(null);
jScrollPane2.setBorder(null);
jScrollPane2.setBounds(new Rectangle(8,80, 425, 100));
jScrollPane2.getViewport().add(tabel2);
dCari.setText("");
dCari.setBounds(new Rectangle(88, 5, 130, 20));
jLabelC1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabelC1.setFont(new java.awt.Font("Dialog", Font.BOLD, 12));
jLabelC1.setText("No. Polisi :");
jLabelC1.setBounds(new Rectangle(0, 5, 80, 26));
tombol_Cari.setText("Cari");
tombol_Cari.setBounds(new Rectangle(88, 40, 80, 24));
tombol_Cari.setBackground(Color.BLUE);
tombol_Cari.setForeground(Color.blue);
tombol_Cari.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
// Menambahkan ActionListener pada tombol OK
tombol_Cari.addActionListener(new java.awt.event.ActionListener(){
// Proses saat tombol cari ditekan
public void actionPerformed(ActionEvent e) {
// Memanggil methode untuk Autentifikasi User dan Password
hapusTabel2();
checkNopol();}});
panel2.setLayout(null);
panel2.add(jLabelC1);
panel2.add(dCari);
panel2.add(tombol_Cari);
panel2.add(jScrollPane2);
setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
dialog3.setTitle("Cari Kendaraan");
dialog3.setModal(true);
dialog3.setSize(450, 230);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int lebar = (screen.width - dialog3.getSize().width) / 2;
int tinggi = (screen.height - dialog3.getSize().height) / 2;
dialog3.setLocation(lebar, tinggi);
dialog3.getContentPane().add(panel2);
dialog3.setVisible(true);}

/** Methode cari Kendaraan (checkNopol)
* Untuk membuat tampilan kotak dialog dan melakukan Autentifikasi data User
* dan Password saat tombol OK ditekan
*/
public void checkNopol(){
Object kod = dCari.getText();
String find = kod.toString();
try{
String sql= "SELECT NOPOL,tipe,to_char(waktuin,'DD/MM/YY HH24:mi:ss') as wktin, "+"to_char(waktuout,'DD/MM/YY HH24:mi:ss') as wktout, STATUS, ket FROM TRANSAKSI_PARKIR"+" WHERE nopol='"+find+"'";
Statement stat = con.createStatement();
ResultSet set = stat.executeQuery(sql);
String npl="null";
String tp="null";
String waktu_in="null";
String waktu_out="null";
String st="null";
String ket="null";
while (set.next()) {
npl = set.getString("NOPOL");
tp = set.getString("tipe");
waktu_in = set.getString("wktin");
waktu_out = set.getString("wktout");
st = set.getString("STATUS");
ket = set.getString("ket");
String[] data2 = {npl,tp,waktu_in,waktu_out,st,ket};
tabMode2.addRow(data2);}
stat.close();}
catch (Exception e) {}}

20. JButton tombolUrut, untuk mengurutkan data yang ada pada tabel.
Pengaturan letak, ukuran dan warna komponen tombolUrut. Tombol tombolUrut tidak bisa digunakan jika login user belum valid atau sah.

tombolUrut.setForeground(Color.blue);
tombolUrut.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
tombolUrut.setText("URUTKAN");
tombolUrut.setEnabled(false);
tombolUrut.setBounds(new Rectangle(640, 135, 130, 24));

Menambahkan action listener pada tombol tombolUrut yang bekerja pada saat tombol tombolUrut ditekan. Proses yang terjadi adalah memanggil method prosesTombolUrutkan(), yang berfungsi untuk mengurutkan data yang ada di dalam database tabel transaksi_parkir berdasarkan kolom yang dipilih.

tombolUrut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
prosesTombolUrutkan();}});

Apabila checkbox yang dipilih adalah ‘Urutkan dari A sampai Z’, maka kondisi ORDER BY adalah ASC, sedangkan bila checkbox yang dipilih adalah ‘Urutkan dari Z sampai A’, maka kondisi ORDER BY adalah DESC.

/**
* Methode prosesTombolUrutkan
* Untuk melakukan proses saat tombol URUTKAN ditekan
*/
void prosesTombolUrutkan() {
// Apabila memilih pilihan Mengurutkan dari A sampai Z
if (checkboxGroup.getSelectedCheckbox().getLabel().endsWith("Z")){
prosesUrutkan("ASC");}
// Apabila memilih pilihan Mengurutkan dari Z sampai A
else {
prosesUrutkan("DESC");}}

Dalam method ini, proses yang terjadi adalah mengurutkan data berdasarkan nama kolom yang dipilih pada komponen pilihKolom. Kolom dengan kondisi pengurutan ORDER BY adalah nilai checkbox yang dipilih.

/**
* Methode prosesCari
* Untuk melakukan proses pengurutan Data
* @param urut = nilai kondisi ORDER BY
*/
public void prosesUrutkan(String urut) {
hapusTabel();
try {
String sql = "select noPol,tipe,to_char(waktuin,'DD/MM/YY HH24:mi:ss') as wktin,to_char(waktuout,'DD/MM/YY HH24:mi:ss') as wktout,lamaWaktu, biaya, no_transaksi, status, ket from transaksi_parkir ORDER BY " +
pilihKolom.getSelectedItem() + " " + urut;
Statement stat = con.createStatement();
ResultSet set = stat.executeQuery(sql);
while (set.next()) {
String noPol = set.getString("noPol");
String tipe = set.getString("tipe");
String waktuIn = set.getString("wktin");
String waktuOut = set.getString("wktout");
String lamawaktu = set.getString("lamaWaktu");
String biaya = set.getString("biaya");
String no_transaksi = set.getString("no_transaksi");
String status = set.getString("status");
String ket = set.getString("ket");
String[] data = {noPol,tipe, waktuIn, waktuOut,lamawaktu, biaya,no_transaksi, status, ket};
tabMode.addRow(data);}
stat.close();}
catch (Exception e) {}}

21. JButton bCetak, untuk mencetak bukti transaksi parkir.
Pengaturan letak, ukuran dan warna komponen bCetak. Tombol bCetak tidak bisa digunakan jika login user belum valid atau sah.

bCetak.setForeground(Color.blue);
bCetak.setBounds(new Rectangle(672, 512, 101, 31));
bCetak.setEnabled(false);
bCetak.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
bCetak.setText("C E T A K");

Menambahkan key listener pada tombol bCetak yang bekerja pada saat tombol bCetak dan tombol ENTER ditekan. Proses yang terjadi adalah memanggil method bCetak(), yang berfungsi untuk menampilkan karcis masuk kendaraan yang parkir.
bCetak.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bCetak_actionPerformed(e);}});

bCetak.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
bCetak_keyPressed(e);}});

Berikut adalah metode yang dijalankan bila button CETAK diklik mouse dan ditekan ENTER.

/**
* METODE YANG DIJALANKAN BILA BUTTON CETAK DIKLIK MOUSE
*/
public void bCetak_actionPerformed(ActionEvent e) {
cetak_hasil();
next.requestFocus();
next.setEnabled(true);
bCetak.setEnabled(false);
noPol.setEnabled(false);
bayar.setEnabled(false);
tombol_Login.setEnabled(false);}

/**
* METODE YANG DIJALANKAN BILA BUTTON CETAK DITEKAN ENTER
*/
public void bCetak_keyPressed(KeyEvent e) {
int ascii = e.getKeyCode();
if (ascii == 10) {
cetak_hasil();
next.requestFocus();
next.setEnabled(true);
bCetak.setEnabled(false);
noPol.setEnabled(false);
bayar.setEnabled(false);
tombol_Login.setEnabled(false);}}

Berikut adalah pengaturan objek tampilan GUI bukti transaksi parkir, seperti ukuran dan posisi frame pada layar dimana hasil yang telah dimasukkan, ditampilkan dalam bentuk kotak dialog.

/**
* METODE YANG DILAKUKAN DARI BUTTON CETAK
*/
public void cetak_hasil() {
dialog.setTitle("Bukti Pembayaran Parkir");
dialog.setModal(true);
dialog.setSize(300, 150);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int lebar = (screen.width - dialog.getSize().width) / 2;
int tinggi = (screen.height - dialog.getSize().height) / 2;
dialog.setLocation(lebar, tinggi);
dialog.setBackground(Color.WHITE);
CanvasKu kanvas = new CanvasKu();
kanvas.setBackground(Color.WHITE);
dialog.getContentPane().add(kanvas);
dialog.setVisible(true);}

class CanvasKu extends Canvas{
public void paint(Graphics g){
Object kod = noPol.getText();
String np = kod.toString();
String sql = "select to_char(waktuin,'fmHH24:mi:ss') as wktin, to_char(waktuout,'fmHH24:mi:ss') as wktout from transaksi_parkir where noPol= '" + np + "' and status ='In'";
String wktIn_b = "null";
String wktOut_b = "null";

try {
PreparedStatement stat = con.prepareStatement(sql);
ResultSet set = stat.executeQuery();
while (set.next()) {
waktuIn.requestFocus();
wktIn_b = set.getString("wktin");
wktOut_b = set.getString("wktout");}}
catch (Exception ie) {
JOptionPane.showMessageDialog(null,
" Nilai Tidak Ditemukan !!!");}

g.setFont(new Font("Dialog", 1, 11));
g.drawString("PARKING PARK Taman Kota BSD City", 30, 20);
g.drawString("Jl. BSD City N0. 100", 30, 30);
g.drawString("0857-1053-1047", 30, 40);
g.drawString(tanggal.getText() + " / " + Njam.getText() + " / No." + no_tran.getText()+" OUT", 30, 50);
g.drawLine(30, 60, 250, 60);
g.setFont(new Font("Dialog", 0, 11));
String data_noPol = noPol.getText();
String data_waktuOut = waktuOut.getText();
String data_waktuIn = waktuIn.getText();
String data_lamaWaktu = lamaWaktu.getText();
String data_total = total.getText();
g.drawString("No.polisi : " + data_noPol, 30, 80);
g.drawString("Waktu IN : " + wktIn_b,30,90 );
g.drawString("Waktu OUT : " + wktOut_b,30, 100);
g.drawString("Lama Waktu : " + data_lamaWaktu,30, 110);
g.drawString("Biaya : Rp." + data_total,30, 120);}}

22. JButton masuk, tombol menuju menu utama.
Pengaturan letak, ukuran dan warna komponen masuk. Tombol masuk tidak bisa digunakan jika login user belum valid atau sah.

masuk.setText("MENU");
masuk.setBounds(new Rectangle(378,4,120,24));
masuk.setFont(new java.awt.Font("Dialog", Font.BOLD, 14));
masuk.setForeground(Color.BLUE);
masuk.setEnabled(false);

Menambahkan action listener pada tombol masuk yang bekerja pada saat tombol masuk ditekan. Proses yang terjadi adalah memanggil class Menu.java, yang berfungsi untuk kembali ke menu utama.

masuk.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
Menu x = new Menu();
x.setVisible(true);}});

23. JTextField noPol, untuk memasukkan nomor polisi kendaraan pada saat kendaraan masuk area parkir.
Pengaturan letak komponen noPol. Pada textfield noPol, user tidak bisa memasukkan nomor polisi kendaraan jika login user belum valid atau sah.

noPol.setBounds(new Rectangle(8, 71, 120, 20));
noPol.setEnabled(false);

Menambahkan key listener pada textfield noPol yang bekerja pada saat tombol ENTER ditekan. Proses yang terjadi adalah memanggil method noPol(), yang berfungsi untuk mencetak data dan memasukkan nomor polisi kendaraan yang masuk area parkir.

noPol.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
noPol_keyPressed(e);}});

Aksi yang terjadi jika textfield noPol diisi, maka akan mencari dan mencetak data yang ada dalam database tabel transaksi_parkir berupa tipe kendaraan, tanggal masuk, waktu masuk, lama waktu kendaraan yang parkir. Jika nomor polisi yang dimasukkan tidak ada dalam database tabel transaksi_parkir maka akan muncul kotak dialog ‘Kendaraan Tidak Ditemukan !!!’, yang berarti kendaraan tersebut tidak ada dalam area parkir. Textfield noPol harus diisi, jika textfield belum diisi maka akan muncul kotak dialog ‘No. Polisi Belum Dimasukkan !!!!’ dan tombol next untuk lanjut ke transaksi berikutnya tidak bisa digunakan.


/**
* FUNGSI JIKA TEXTFIELD NOPOL DI TEKAN TOMBOL ENTER
*/
public void noPol_keyPressed(KeyEvent e) {
int ascii = e.getKeyCode();
Object kod = noPol.getText();
String np = kod.toString();
if (ascii == 10) {
if (np.equalsIgnoreCase("")) {
JOptionPane.showMessageDialog(null, "No. Polisi Belum Dimasukkan !!!!",
"ERROR", JOptionPane.OK_OPTION);
waktuIn.setText("");}
else{
String sql = "select to_char(waktuin,'fmHH24:mi:ss') as wktin from transaksi_parkir where noPol= '" + np + "' and status ='In'";
String wktIn_b = "null";
try {
PreparedStatement stat = con.prepareStatement(sql);
ResultSet set = stat.executeQuery();
while (set.next()) {
waktuIn.requestFocus();
wktIn_b = set.getString("wktin");
waktuIn.setText(wktIn_b);}
if (wktIn_b.equalsIgnoreCase("null")) {
JOptionPane.showMessageDialog(null," Kendaraan Tidak Ditemukan !!!");
noPol.requestFocus();
noPol.setText("");
next.setEnabled(false);}
else {

24. JTextField waktuIn, untuk menampilkan waktu masuk kendaraan ke area parkir.
Pengaturan letak, ukuran dan alignment komponen waktuIn. Textfield waktuIn berfungsi untuk menampilkan waktu masuk kendaraan. Waktu masuk kendaraan tidak perlu dimasukkan karena telah disesuaikan dengan waktu masuk pada aplikasi Parkir Input yang telah disimpan dalam database.

waktuIn.setBounds(new Rectangle(144, 71, 80, 20));
waktuIn.setEnabled(false);
waktuIn.setDisabledTextColor(Color.black);

25. JTextField waktuOut, untuk menampilkan waktu keluar kendaraan dari area parkir.
Pengaturan alignment, letak, ukuran dan warna komponen waktuOut. Textfield waktuOut berfungsi untuk menampilkan waktu keluar kendaraan, waktu keluar kendaraan tidak perlu dimasukkan karena telah disesuaikan dengan waktu pada saat itu (disesuaikan dengan waktu pada komputer).
waktuOut.setEnabled(false);
waktuOut.setDisabledTextColor(Color.black);
waktuOut.setHorizontalAlignment(SwingConstants.CENTER);
waktuOut.setBounds(new Rectangle(230, 71, 80, 20));

26. JTextField lamaWaktu, untuk menampilkan lama waktu kendaraan yang parkir.
Pengaturan alignment, letak, ukuran dan warna objek lamaWaktu. Textfield lamaWaktu berfungsi untuk menampilkan lama waktu kendaraan yang parkir. Lama waktu kendaraan didapat dari perhitungan lamawaktu=waktuout-waktuin.

lamaWaktu.setEnabled(false);
lamaWaktu.setDisabledTextColor(Color.black);
lamaWaktu.setBounds(new Rectangle(320, 71, 80, 20));
lamaWaktu.setHorizontalAlignment(SwingConstants.CENTER);

Berikut adalah proses menampilkan lama waktu parkir kendaraan.

//TAMPILKAN LAMA WAKTU
try {
String sql2= "SELECT TO_CHAR(TRUNC((WAKTUOUT-WAKTUIN)*24) ||':'|| TRUNC(MOD(((WAKTUOUT-WAKTUIN)*24),1)*60) ||':'|| TRUNC(MOD((MOD(((WAKTUOUT-WAKTUIN)*24),1)*60),1)*60) )as A FROM TRANSAKSI_PARKIR WHERE NOPOL ='"+np+"' and status ='In'";
Statement stat2 = con.createStatement();
String lamawaktu = "null";
ResultSet set2 = stat2.executeQuery(sql2);
while (set2.next()) {
lamaWaktu.requestFocus();
lamawaktu = set2.getString("A");
lamaWaktu.setText(lamawaktu);}}
catch (Exception ie) { JOptionPane.showMessageDialog(null,
"LAMAWAKTU GAGAL DITAMPILKAN\nCoba Diulangi lagi");}

27. JTextField bayar, untuk memasukkan pembayaran biaya parkir kendaraan.
Pengaturan alignment, letak dan ukuran komponen bayar.

bayar.setFont(new java.awt.Font("Dialog", Font.BOLD, 20));
bayar.setText("");
bayar.setHorizontalAlignment(SwingConstants.RIGHT);
bayar.setBounds(new Rectangle(494, 433, 134, 30));

Menambahkan key listener pada textfield bayar bekerja pada saat textfield bayar ditekan ENTER. Proses yang terjadi adalah memanggil method bayar(), yang berfungsi untuk memasukkan dan menampilkan pembayaran biaya parkir kendaraan.

bayar.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
bayar_keyPressed(e);}});

Fungsi berikut adalah aksi yang terjadi bila textfield bayar ditekan ENTER maka ada proses kembalian. Jika pembayaran lebih besar dari biaya parkir maka kembali=bayar-biaya. Jika pembayaran lebih kecil dari biaya parkir maka uang yang dibayarkan kurang.

/**
* METODE YANG DIJALANKAN BILA TEXTFIELD BAYAR DITEKAN TOMBOR ENTER
*/
public void bayar_keyPressed(KeyEvent e) {
int hasil_kembalian = 0;
int ascii = e.getKeyCode();
if (ascii == 10) {
if (bayar.getText().equalsIgnoreCase("")) {
bayar.requestFocus();}
else {
Object kod = noPol.getText();
String np = kod.toString();
try {
hasil_kembalian = Integer.parseInt(biaya) -
Integer.parseInt(bayar.getText());}
catch (Exception ie) {
//System.out.println(ie);
JOptionPane.showMessageDialog(null,
"PERHITUNGAN GAGAL !!!!!");}
if (hasil_kembalian > 0) {
JOptionPane.showMessageDialog(null,
"Uang Yang Dibayarkan Kurang !!!!!");
kembalian.setText("0");
bayar.requestFocus();}
else {
String format = NumberFormat.getNumberInstance(Locale.ENGLISH).format(
hasil_kembalian);
StringTokenizer token = new StringTokenizer(format, ".");
format = token.nextToken();
format = format.replace(',', '.');
kembalian.setText(format);
bCetak.setEnabled(true);
bCetak.requestFocus();
tombol_Login.setEnabled(true);}}}}

28. JTextField bayar_2, untuk mencetak pembayaran yang telah dimasukkan dari textfield bayar.
Pengaturan alignment, letak dan ukuran komponen bayar. Textfield bayar_2 tidak dapat diubah karena hanya berfungsi mencetak pembayaran biaya parkir kendaraan.

bayar_2.setFont(new java.awt.Font("Dialog", Font.BOLD, 20));
bayar_2.setEditable(false);
bayar_2.setText("0");
bayar_2.setHorizontalAlignment(SwingConstants.RIGHT);
bayar_2.setBounds(new Rectangle(640, 433, 134, 29));

Fungsi dibawah ini terjadi bila pada textfield bayar ditekan ENTER maka pembayaran biaya akan tercetak atau tampil pada textfield bayar_2.

/**
* METODE YANG DIJALANKAN TERHADAP TEXTFIELD BAYAR2
* BILA TEXTFIELD BAYAR DIKETIKKAN NILAI DITEKAN TOMBOR ENTER
*/
public void bayar_caretUpdate(CaretEvent e) {
if (bayar.getText().equals("")) {
bayar_2.setText("0");}
else {
double money = Double.parseDouble(bayar.getText());
String format = NumberFormat.getNumberInstance(Locale.ENGLISH).format(
money);
StringTokenizer token = new StringTokenizer(format, ".");
format = token.nextToken();
format = format.replace(',', '.');
bayar_2.setText(format);

29. JTextField kembalian, untuk mencetak kembalian.
Pengaturan alignment, letak dan ukuran komponen kembalian. Textfield kembalian tidak dapat diubah karena hanya berfungsi mencetak kembalian dari pembayaran parkir kendaraan.

kembalian.setFont(new java.awt.Font("Dialog", Font.BOLD, 20));
kembalian.setEditable(false);
kembalian.setText("0");
kembalian.setHorizontalAlignment(SwingConstants.RIGHT);
kembalian.setBounds(new Rectangle(640, 469, 133, 31));

30. Choice pilihKolom, list menu untuk memilih urutan data sesuai kolom.
Pengaturan letak dan pilihan komponen pilihKolom. Choice pilihKolom tidak bisa digunakan jika login user belum valid atau sah.

pilihKolom.add("-- Pilih Salah Satu --");
pilihKolom.addItem("nopol");
pilihKolom.addItem("tipe");
pilihKolom.addItem("waktuin");
pilihKolom.addItem("waktuout");
pilihKolom.addItem("lamawaktu");
pilihKolom.addItem("biaya");
pilihKolom.addItem("no_transaksi");
pilihKolom.addItem("ket");
pilihKolom.setEnabled(false);
pilihKolom.setBounds(new Rectangle(640, 69, 130, 24));

31. JTable tabel, membuat tampilan tabel yang terhubung dengan database tabel transaksi_parkir.
Method yang berfungsi untuk menampilkan semua data yang telah tersimpan di dalam database ke tabel adalah method tampilDataKeTabel(). Di dalam method ini, proses pertama yang dilakukan adalah menghapus semua data yang ada pada tabel dengan memanggil method hapusTabel(). Proses selanjutnya adalah mengambil semua data yang telah tersimpan dengan menggunakan perintah SQL ‘SELECT * FROM TRANSAKSI_PARKIR’, dan kemudian menampilkan data yang ditemukan ke tabel. Statement yang digunakan untuk mengirim perintah SQL adalah STATEMENT karena perintah SQL yang digunakan tidak berparameter. Bisa juga mengganti STATEMENT dengan PREPAREDSTATEMENT untuk pengiriman perintah SQL.

/**
* TAMPIL DATA KETABEL YANG ADA PADA FORM APLIKASI
*/
public void tampilDataKeTabel() {
hapusTabel();
try {
//String sql = "select * from transaksi_parkir";
String sql = "select noPol,tipe,to_char(waktuin,'DD/MM/YY HH24:mi:ss') as wktin,to_char(waktuout,'DD/MM/YY HH24:mi:ss') as wktout,lamaWaktu, biaya, no_transaksi, status, ket from transaksi_parkir";
Statement stat = con.createStatement();
ResultSet set = stat.executeQuery(sql);
while (set.next()) {
String noPol = set.getString("noPol");
String tipe = set.getString("tipe");
String waktuIn = set.getString("wktin");
String waktuOut = set.getString("wktout");
String lamawaktu = set.getString("lamaWaktu");
String biaya = set.getString("biaya");
String no_transaksi = set.getString("no_transaksi");
String status = set.getString("status");
String ket = set.getString("ket");
String[] data = {noPol,tipe, waktuIn, waktuOut,lamawaktu, biaya,no_transaksi, status, ket};
tabMode.addRow(data);}}
catch (Exception e) {}}

32. JTextPane jTextPane2, membuat tampilan keterangan mengenai biaya parkir.
Pengaturan alignment, border, letak, ukuran dan warna komponen jTextPane2.

jTextPane2.setContentType("text/plain");
jTextPane2.setBackground(Color.orange);
jTextPane2.setBounds(new Rectangle(8, 425, 300,120));
jTextPane2.setBorder(new BevelBorder(BevelBorder.LOWERED));

Berikut merupakan tampilan keterangan biaya parkir yang ada pada form Transaksi Parkir.

jTextPane2.setText("Keterangan : \n"+
"1. Mobil \n"+
" -- 1 jam pertama = Rp 2000,00\n"+
" -- Untuk setiap jam berikutnya x Rp 1000,00\n"+
"2. Motor\n"+
" -- 1 jam pertama = Rp 1000,00\n"+
" -- Untuk setiap jam berikutnya x Rp 500,00");

3.3 Implementasi Program

Setelah program selesai di-build, maka file akan berbentuk jar file. Untuk menjalankan aplikasi ini. Cari file Main.jar yang berada di C:\Users\METHA RIANDINI\Documents\NetbeansProject\Main\dist\Main.jar. Klik pada Main.jar.

Pada proses ini, pilih tipe kendaraan dan masukkan nomor polisi kendaraan yang masuk kedalam area parkir, tekan enter atau klik tombol SIMPAN, maka data-data tentang kendaraan akan tersimpan kedalam database. Setelah itu klik tombol CETAK maka karcis masuk kendaraan akan ditampilkan.

Pada proses ini, masukkan nomor polisi kendaraan, maka data-data tentang kendaraan tersebut seperti waktu masuk, waktu keluar, lama waktu, dan biaya parkir kendaraan akan ditampilkan. Jika total biaya parkir kendaraan telah diketahui, maka masukkan jumlah uang yang dibayarkan oleh penggguna kendaraan yang parkir. Jika uang yang dibayarkan lebih besar daripada biaya parkir, maka akan tercetak uang kembalian yang harus diberikan. Setelah proses pembayaran selesai, cetak tampilan bukti pembayaran parkir.


Penulisan PI diatas adalah contoh dari PI mahasiswa Universitas Gunadarma, dengan nama :
Nama : Metha Riandini
NPM : 50405465
Fakultas: : Teknologi Industri
Jurusan : Teknik Informatika

36 comments:

Anonymous said...

boleh minta projectnya ga sis ??

Anonymous said...

Boleh minta project nya sist saya pengen mempelajarinya...

Anonymous said...

Boleh minta project nya sist saya pengen mempelajarinya...(Bisa hubngi saya di 085220277011 ya sist kalau boleh...saya newbie java... salam kenal...

Anonymous said...

boleh minta project nya?
klo boleh kirim ke email ya,
email nya satrio.rendy.kasenda@gmail.com(085659091427)
terima kasih sebelumnya :D
butuh nih scpat nya ya heheehe ^_^

awan said...

WAH BGS BGT NI SIS,,
blh mnta projectnya?? hehehe
kirim ke email gw ya enrico_childboy@yahoo.com(08976865069)

Unknown said...

sist... boleh minta file projectnya nggak ?
krim ke email
rintocahyo@gmail.com
^^

Anonymous said...

boleh bagi project nya gak sis ??
kirim email ke ifenkwanglin@gmail.com maksih lo...

Iroel.fastmove said...

mau belajar dong... :)
boleh minta projectnya ?
email iroelfastmove@gmail.com

tks sist...

moviesanak said...

saya juga sis mnta progjectnya buat tugas thanks ya
kirim ke email indzya@gmail.com

Unknown said...

wah bagus ini sis,, boleh minta file projectnya ga !? tolong di emailkan ke visnewnotes@gmail.com .. ditunggu ya,, Maksi :)

iendrazz said...

kirim project ke indrawan.dwi@gmail.com ya

junz said...

aku juga mau dong gmail. Junzfiunz@gmail.com
pliase

Unknown said...

tolong jika boleh say juga mau mempelajarinya:) jika berkenan untuk mengirimkan kirim ke arrafiq3d@gmail.com terimakasih

Unknown said...

q minta juga lah belh g
kirim aja ke e-mail qw
ahmadassive@gmail.com

Anonymous said...

java yang menggunakan OOP.,.DONG

Anonymous said...

Assalammualaikum.. admin boleh mnta project ny..?
kirim ke yunitaazmi30@gmail.com
thx.. :)

Unknown said...

Aqu juga mauuu
rianvirgo522@yahoo.co.id

Yah bang

muh.rizal.jalu@gmail.com said...

sis boleh minta projectnya g?? kirim ke email ini ya muh.rizal.jalu@gmail.com
makasih sis
salam anak IT :)

Faizal Oktaman said...

Pak.. sy boleh minta juga gak? tolong kirim ke foktman@yahoo.com. Terima kasih bnyak..

Anonymous said...

admin boleh minta projectnya juga donk..^-^
kirimin ke lzm2267@gmail.com
makasih sebelumnya

Jimmy_Sergill said...

tertarik banget nih gan dengan programnya...... sama hal nya dengan yang lain,,,bolehkah minta file nya??? nih alamat email ane ineedsomething_fromyou@hotmail.com

Unknown said...

bisa mnta projectnya gk sis?
mw pelajarin....
bagushadiw@gmail.com

Unknown said...

mba saya boleh minta? mau saya pelajari lebih detail :D nih email saya : mayangsari.tkj@gmail.com
makasih mbakyuu, ditunggu

Unknown said...
This comment has been removed by the author.
Unknown said...

mba boleh minta kirimin projecknya ke email saya joviaristian23@gmail.com

gbskies said...

kk boleh minta projectnya?mau dipelajarin
wildanh66@gmail.com kirim kesitu kl blh mksh

Anonymous said...

Boleh minta projectnya mba? kalo boleh kirim ke email saya nurochmanadi@gmail.com. mau saya analisis mba. terima kasih atas kerjasamanya.

Unknown said...

kak, boleh minta contoh project nya g, bwt dipelajari. kirim ke emali ssaya ya kak...
vaqotlie@yahoo.com atau lhyiefahasb@gmail.com
makasih kakak....

Unknown said...

mau dong gan, buat referensi zhekeen90@gmail.com

Unknown said...

ikut antri kk, bisa ke novi_cahya29@yahoo.com :) makasih

alvalizaqi said...

keren sist, boleh minta project lengkapnya engga sist untuk referensi soalnya ane juga lagi belajar oracle database. trima kasih

ini email saya bisa di kirim ke alvalizaqi@gmail.com trima kasih banyak sist sukses selalu

Unknown said...

boleh minta projecnya ga email ahsanbz05@gmail.com

Unknown said...

kalo boleh aku juga minta di kirim ya buat referensi (pratamaku95@gmail.com)
makasih

Unknown said...

minta project nya sis buat di pelajari .. proboadigunaw111@gmail.com

btama said...

boleh minta projecnya ga email azwaranshori@gmail.com

Anonymous said...

minta projeknya dong gAN SAYA PENGEN BELAJAR kirim via email gan jopi.mulyadi09gmail.com