4.2 Proses Generate Data
Untuk otomatisasi database menggunakan beberapa prosedure. Untuk prosedure pertama ditampilkan dalam potongan listing program berikut :
Listing 4.10 Generate Kereta_Berangkat
create or replace procedure gen_kereta_berangkat is
v_berangkat kereta_template.JAM_BERANGKATtype; v_tiba kereta_template.JAM_TIBAtype;
cursor berangkat is select nomor_template, jam_berangkat, jam_tiba from kereta_template
where tanggal_awal_berlaku = select from sekarang and tanggal_akhir_berlaku =select from sekarang;
berangkat_record berangkatROWTYPE; begin
open berangkat; loop
fetch berangkat into berangkat_record; exit when berangkatNOTFOUND;
select jam_berangkat
into v_berangkat from kereta_template where
nomor_template=berangkat_record.nomor_template; select
jam_tiba into
v_tiba from
kereta_template where
nomor_template=berangkat_record.nomor_template; if v_berangkat v_tiba then
insert into kereta_berangkatnomor_berangkat,tanggal_berangkat,tanggal_tiba values berangkat_record.nomor_template, select tgl_sekarang from sekarang,
select tgl_sekarang+1 from sekarang; else
insert into kereta_berangkatnomor_berangkat,tanggal_berangkat,tanggal_tiba values berangkat_record.nomor_template, select tgl_sekarang from sekarang,
select tgl_sekarang from sekarang;
end if; end loop;
commit; close berangkat;
end gen_kereta_berangkat;
Penjelasan Listing 4.10 Generate Kereta_Bertangkat
Prosedure ini akan melakukan insert data dengan membaca data dari tabel kereta_template kemudian mengisikannya ke dalam tabel
kereta_berangkat. Prosedure ini dimulai dengan perintah yang ditunjukan oleh baris program berikut :
create or replace procedure gen_kereta_berangkat is
v_berangkat kereta_template.JAM_BERANGKATtype; v_tiba kereta_template.JAM_TIBAtype;
Perintah create or replace untuk membuat prosedure sedangkan gen_kereta_berangkat merupakan nama prosedur yang dibuat. Dua baris di
bawahnya merupakan variabel, v_berangkat kereta bertipe data seperti tipe data pada JAM_BERANGKAT pada tabel kereta template. Sedangkan v_tiba
bertipe JAM_TIBA pada kereta_template. Perintah selanjutnya adalah pendeklarasian sebuah kursor. Kursor merupakan sebuah mekanisme untuk
dapat melakukan pembacaan sebuah record per baris. Ditunjukan pada baris berikut :
cursor berangkat is select nomor_template, jam_berangkat, jam_tiba from kereta_template
where tanggal_awal_berlaku = select from sekarang and tanggal_akhir_berlaku =select from sekarang;
berangkat_record berangkatROWTYPE; berangkat merupakan nama dari kursor ini, isinya untuk mengambil data
nomor_template, jam_berangkat, dan jam_tiba dari tabel kereta_template menggunakan perintah select. Pengambilan data ini memiliki ketentuan untuk data
yang diambil memiliki tanggal_awal_berlaku sama atau lebih dari tanggal sekarang dan tanggal akhir_berlakunya sama atau kurang dari tanggal sekarang. Ini untuk
memilih bahwa data yang di generate sesuai dengan tanggal berlakunya. Data ini akan disimpan dalam berangkat_record.
Untuk memulai prosedure ini dengan perintah pada baris berikut : begin
Untuk membuka kursor digunakan baris berikut : open berangkat;
Setelah kursor dibuka maka akan melakukan perulangan untuk memasukkan data ke dalam berangkat_record, sampai semua data habis. Ditunjukan pada
perintah berikut :
loop fetch berangkat into berangkat_record;
exit when berangkatNOTFOUND;
Setiap memasukkan data, dilakukan juga perintah untuk mengambil data jam_berangkat dan jam_tiba. Ditunjukan pada baris berikut :
select jam_berangkat into v_berangkat from kereta_template where nomor_template=berangkat_record.nomor_template;
select jam_tiba into v_tiba from kereta_template where nomor_template=berangkat_record.nomor_template;
Jam berangkat dan jam tiba dipakai untuk menentukan tanggal tiba, jika jam tiba lebih kecil dari jam berangkat berarti sudah berada di hari berikutnya.
Maka tanggal tiba harus ditambahkan satu. Ditunjukan pada baris berikut :
if v_berangkat v_tiba then insert into kereta_berangkatnomor_berangkat,tanggal_berangkat,tanggal_tiba
values berangkat_record.nomor_template, select tgl_sekarang from sekarang, select tgl_sekarang+1 from sekarang;
else insert into
kereta_berangkatnomor_berangkat,tanggal_berangkat,tanggal_tiba values berangkat_record.nomor_template, select tgl_sekarang from
sekarang, select tgl_sekarang from sekarang;
end if;
Untuk mengahiri prosedur ini, ditunjukan pada baris berikut :
end loop; commit;
close berangkat; end gen_kereta_berangkat;
end loop dipakai untuk mengakhiri perulangan, kemudian commit untuk menyatakan bahwa perintah eksekusi data selesai. Close berangkat untuk
menutup kursor dan end untuk mengahiri prosedur ini. Untuk prosedur yang kedua ditunjukan pada listing 4.11 berikut :
Listing 4.11 Generate Gebong
create or replace procedure gen_gerbong is
v_jml_gerbong kereta_template.JUMLAH_GERBONGtype; v_counter number2:=1;
cursor gerbong is select nomor_berangkat, tanggal_berangkat, tanggal_tiba from kereta_berangkat
where tanggal_berangkat like select tgl_sekarang from sekarang; gerbong_record gerbongROWTYPE;
begin open gerbong;
loop fetch gerbong into gerbong_record;
exit when gerbongNOTFOUND; select
jumlah_gerbong into
v_jml_gerbong from
kereta_template where
nomor_template=gerbong_record.nomor_berangkat; loop
insert into
gerbongnomor_berangkat,nomor_gerbong,tanggal_berangkat,tanggal_tiba values
gerbong_record.nomor_berangkat,v_counter,gerbong_record.tanggal_berangkat,gerbong_re cord.tanggal_tiba;
v_counter:=v_counter+1;
exit when v_counter v_jml_gerbong; end loop;
v_counter:=1; end loop;
commit; close gerbong;
end gen_gerbong;
Penjelasan Listing 4.11 Generate Gerbong.
Prosedur ini dipakai untuk melakukan insert data gerbong secara otomatis sesuai dengan jumlah gerbong yang terdapat dalam kereta_template.
Prosedure ini juga memakai kursor untuk membaca data tiap baris, kemudian melakukan insert ke dalam tabel gerbong.
Untuk prosedur yang ketiga ditunjukan pada listing 4.12 berikut : Listing 4.12 Generate Kursi
create or replace procedure gen_kursi
is v_jml_kursi kereta_template.JUMLAH_KURSI_TIAP_GERBONGtype;
v_kursi kursi_temp.NOMOR_KURSItype; v_counter number2:=1;
v_nomer_kereta number2:=null; v_stasiun has_stasiun.NO_STASIUNtype;
cursor kursi is select nomor_kereta, nomor_gerbong, tanggal_berangkat, tanggal_tiba from gerbong
where tanggal_berangkat like select tgl_sekarang from sekarang order by nomor_kereta;
kursi_record kursiROWTYPE; cursor stas
is select no_stasiun from has_stasiun where nomor_kereta=v_nomer_kereta; stasiun_record stasROWTYPE;
begin open kursi;
loop fetch kursi into kursi_record;
exit when kursiNOTFOUND; select jumlah_kursi_tiap_gerbong into v_jml_kursi from kereta_template where
nomor_kereta=kursi_record.nomor_kereta; loop
if v_counter 14 then v_nomer_kereta :=kursi_record.nomor_kereta;
dbms_output.PUT_LINEnilai||v_nomer_kereta; open stas;
loop fetch stas into stasiun_record;
exit when stasNOTFOUND; dbms_output.PUT_LINEhasil : ||A||v_counter||stasiun :||stasiun_record.no_stasiun;
insert into kursi_tempnomor_kereta, nomor_gerbong, nomor_kursi, tanggal_berangkat, tanggal_tiba, stasiun
values kursi_record.nomor_kereta, kursi_record.nomor_gerbong,A||v_counter, kursi_record.tanggal_berangkat, kursi_record.tanggal_tiba, stasiun_record.no_stasiun;
end loop; commit;
close stas;
elsif v_counter 28 then v_nomer_kereta :=kursi_record.nomor_kereta;
dbms_output.PUT_LINEnilai||v_nomer_kereta; open stas;
loop fetch stas into stasiun_record;
exit when stasNOTFOUND; dbms_output.PUT_LINEhasil : ||B||v_counter||stasiun :||stasiun_record.no_stasiun;
insert into kursi_tempnomor_kereta, nomor_gerbong, nomor_kursi, tanggal_berangkat, tanggal_tiba, stasiun
values kursi_record.nomor_kereta, kursi_record.nomor_gerbong,B||v_counter, kursi_record.tanggal_berangkat, kursi_record.tanggal_tiba, stasiun_record.no_stasiun;
end loop; commit;
close stas; elsif v_counter 39 then
v_nomer_kereta :=kursi_record.nomor_kereta; dbms_output.PUT_LINEnilai||v_nomer_kereta;
open stas; loop
fetch stas into stasiun_record; exit when stasNOTFOUND;
dbms_output.PUT_LINEhasil : ||C||v_counter||stasiun :||stasiun_record.no_stasiun; insert into kursi_tempnomor_kereta, nomor_gerbong, nomor_kursi, tanggal_berangkat,
tanggal_tiba, stasiun values kursi_record.nomor_kereta, kursi_record.nomor_gerbong,C||v_counter,
kursi_record.tanggal_berangkat, kursi_record.tanggal_tiba, stasiun_record.no_stasiun; end loop;
commit; close stas;
els if v_counter 50 then v_nomer_kereta :=kursi_record.nomor_kereta;
dbms_output.PUT_LINEnilai||v_nomer_kereta; open stas;
loop fetch stas into stasiun_record;
exit when stasNOTFOUND; dbms_output.PUT_LINEhasil : ||D||v_counter||stasiun :||stasiun_record.no_stasiun;
insert into kursi_tempnomor_kereta, nomor_gerbong, nomor_kursi, tanggal_berangkat, tanggal_tiba, stasiun
values kursi_record.nomor_kereta, kursi_record.nomor_gerbong,D||v_counter, kursi_record.tanggal_berangkat, kursi_record.tanggal_tiba, stasiun_record.no_stasiun;
end loop; commit;
close stas; end if;
v_counter:=v_counter+1; exit when v_counter v_jml_kursi;
end loop; v_counter:=1;
end loop; commit;
close kursi; end gen_kursi;
Penjelasan Listing 4.12 Generate Kursi
Prosedur ini dipakai untuk melakukan insert data secara otomatis ke dalam tabel kursi. Pada prosedur ini juga menggunakan kursor, tetapi lebih dari satu,
yaitu kursor kursi dan kurso stas. Ditunjukan dalam baris berikut :
cursor kursi is select nomor_kereta, nomor_gerbong, tanggal_berangkat, tanggal_tiba
from gerbong where tanggal_berangkat like select tgl_sekarang from sekarang order by
nomor_kereta; kursi_record kursiROWTYPE;
cursor stas is select no_stasiun from has_stasiun where
nomor_kereta=v_nomer_kereta; stasiun_record stasROWTYPE;
Kursor kursi untuk mendapatkan data dari gerbong yang nantinya akan dimasukkan kedalam tabel kursi. Sedangkan kursor stas dipakai untuk
mengambil stasiun dari tabel has_stasiun. Cara kerja prosedur ini adalah, dengan membaca data pada tabel gerbong satu per satu sampai selesai. Tiap
data gerbong dicari berapa kursi untuk tiap gebongnya, dan stasiun yang dimiliki menggunakan kursor stas. Selanjutnya, dilakukan insert data ke
dalam tabel kursi sebanyak kursi dan stasiun yang dimiliki. Untuk memulai prosedur ditunjukan pada baris berikut :
open kursi; loop
fetch kursi into kursi_record; exit when kursiNOTFOUND;
select jumlah_kursi_tiap_gerbong into v_jml_kursi from kereta_template where nomor_kereta=kursi_record.nomor_kereta;
Untuk melakukan insert data ditunjukan pada baris berikut :
v_nomer_kereta :=kursi_record.nomor_kereta; dbms_output.PUT_LINEnilai||v_nomer_kereta;
open stas; loop
fetch stas into stasiun_record; exit when stasNOTFOUND;
dbms_output.PUT_LINEhasil : ||A||v_counter||stasiun :||stasiun_record.no_stasiun;
insert into kursi_tempnomor_kereta, nomor_gerbong, nomor_kursi, tanggal_berangkat, tanggal_tiba, stasiun
values kursi_record.nomor_kereta, kursi_record.nomor_gerbong,A||v_counter,
kursi_record.tanggal_berangkat, kursi_record.tanggal_tiba, stasiun_record.no_stasiun;
end loop;
Untuk mengakhiri prosedure ini ditunjukan pada baris berikut :
end if; v_counter:=v_counter+1;
exit when v_counter v_jml_kursi; end loop;
v_counter:=1; end loop;
commit; close kursi;
end gen_kursi;
BAB V ANALISIS HASIL
5.1 Analisis Hasil Perangkat Lunak
Aplikasi Pencarian Jalur Alternatif ini telah berhasil dibangun. Untuk menggunakan aplikasi ini pengguna hanya perlu memasukkan beberapa
inputan yaitu ; tanggal berangkat, stasiun asal, stasiun tujuan dan jumlah kursi yang diinginkan, dan aplikasi akan menampilkan hasilnya. Setiap hasil yang
keluar adalah kereta yang memiliki kursi yang kosong, sesuai dengan input yang telah dimasukkan. Untuk dapat melakukan pemesanan pengguna harus
melakukan login terlebih dahulu. Selain itu login ini juga berguna untuk menentukan hak akses atau wewenang terhadap aplikasi ini, apakah user biasa
atau sebagai admin. Untuk admin memiliki menu yang lebih banyak, yaitu untuk melakukan pengelolaan aplikasi. Seperti melakukan perubahan data
kereta, pengguna, dan lain-lain. Setelah dicobakan ke beberapa pengguna, aplikasi ini mendapat
beberapa tanggapan. Dari enam responden, empat orang menyatakan setuju bahwa aplikasi ini membantu melakukan pencarian jalur alternatif dengan
secara cepat dan efisien. Dua orang menyatakan sangat setuju bahwa aplikasi ini dapat melakukan pencarian jalur alternatif secara efisien.. Dua orang
menyatakan sangat setuju bahwa aplikasi ini dapat melakukan pemesanan kursi dengan mudah, dua orang setuju dan sisanya ragu-ragu. Untuk tampilan
aplikasi ini lima orang setuju dan satu orang menyatakan ragu-ragu bahwa aplikasi pencarian jalur alternatif ini memiliki tampilan yang menarik dan
user friendly. Beberapa responden juga memberikan saran dan kritik terhadap aplikasi pencarian jalur alternatif ini. Tiga orang responden menyarankan
untuk menambah jumlah pemesanan kursi dan detail pemesanan. Seorang
78