IF-2/S1/2 – UNIKOM 2012 TUGAS V IMPLEMENTASI CIRCULAR DOUBLE LINKED LIST CONTOH KASUS RESERVASI KAMAR HOTEL Diajukan untuk memenuhi salah satu tugas mata kuliah Struktur Data Oleh: Try Fathur Rachman ( 10111015 ) Nurhusein ( 10111018 ) Restu Hendrik Saputra ( 10111023 ) Gilang Luthfi ( 10111037 ) Dede Mandela (10107356) Azmi Najib Mahfoz (10109218) Dosen: Tati Harihayati M., S.T., M.T. TEKNIK INFORMATIKA
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
IF-2/S1/2 – UNIKOM 2012
TUGAS V
IMPLEMENTASI CIRCULAR DOUBLE LINKED LIST
CONTOH KASUS RESERVASI KAMAR HOTEL
Diajukan untuk memenuhi salah satu tugas
mata kuliah Struktur Data
Oleh:
Try Fathur Rachman ( 10111015 )
Nurhusein ( 10111018 )
Restu Hendrik Saputra ( 10111023 )
Gilang Luthfi ( 10111037 )
Dede Mandela (10107356)
Azmi Najib Mahfoz (10109218)
Dosen:
Tati Harihayati M., S.T., M.T.
TEKNIK INFORMATIKA
FAKULTAS TEKNIK DAN ILMU KOMPUTER
UNIVERSITAS KOMPUTER INDONESIA
2011
IF-2/S1/2 – UNIKOM 2012
ALGORITMA UTAMA :
program Ibis_Hotel
KAMUS :
const
tarifInap = 250000
type
dataTamu = record
nama,alamat,kamar : string,
umur,jmlKamar,jmlOrg,lamaInap,telp : integer,
endrecord
pointer = ↑tamu,
tamu = record
info : dataTamu,
prev,next : pointer,
endrecord
awal, akhir, baru : pointer,
data : dataTamu,
biaya,harga,menu,plhSisip,plhHps : integer,
selesai : char,
isi : boolean;
{ Prototype Program }
{ Prosedur checkIn digunakan untuk user memasukan data tamu }
procedure checkIn (input data : dataTamu; output isi : boolean)
{ Prosedur sisispDpn digunakan untuk menyisipkan data di bagian depan }
procedure sisipDpn(input data : dataTamu; I/O awal,akhir : pointer)
{ Prosedur sisispBlkg digunakan untuk menyisipkan data di bagian belakang }
procedure sisipBlkg(input data : dataTamu; I/O awal,akhir : pointer)
IF-2/S1/2 – UNIKOM 2012
{ Prosedur sisispTengah digunakan untuk menyisipkan data di bagian tengah }
procedure sisipTengah(input data : dataTamu; I/O awal,akhir : pointer)
{ Prosedur urutData digunakan untuk mengurutkan data sebelum di tampilkan }
procedure urutData(I/Oawal,akhir : pointer,input jenis : integer)
{ Prosedur lihatData digunakan untuk menampilkan data yang terdapat pada rekord }
procedure lihatData(I/O awal,akhir : pointer)
{ Prosedur hpsBlkg digunakan untuk menghapus data di bagian belakang }
procedure hpsBlkg(input data : dataTamu, I/O awal,akhir : pointer)
{ Prosedur hpsDpn digunakan untuk menghapus data di bagian depan }
procedure checkIn (input data : dataTamu; output isi : boolean)
{I.S :User memasukan data, kondisi isi false}
{F.S : Data tamu masuk ke dalam rekord, kondisi isi true}
KAMUS :
ALGORITMA :
if (isi = false) then
input(data)
harga ← tarifInap,
biaya ← harga * data.lamaInap * data.jmlOrg,
output(harga),
output(biaya),
isi ← true,
else
output(‘Data sudah ada, tetapi belum disisipkan’),
endif
endprocedure
procedure sisipDpn(input data : dataTamu; I/O awal,akhir : pointer)
{I.S : Rekord data sudah terisi, user memilih menu sisip depan}
{F.S : Data disisipkan di depan}
KAMUS :
baru : pointer
ALGORITMA :
begin
alloc(baru),
baru↑.info ← data,
if (awal = nil) then
akhir ← baru,
else
baru↑.next ← awal,
akhir↑.prev ← baru,
endif
awal ← baru,
IF-2/S1/2 – UNIKOM 2012
akhir↑.next ← awal,
awal↑.prev ← akhir,
endprocedure
procedure sisipBlkg(input data : dataTamu; I/O awal,akhir : pointer)
{I.S : Rekord data sudah terisi, user memilih menu sisip belakang}
{F.S : Data disisipkan di belakang}
KAMUS :
baru : pointer
ALGORITMA
begin
alloc(baru),
baru↑.info ← data,
if (awal = nil) then
sisipDpn(data,awal,akhir)
else
akhir↑.next ← baru,
baru↑.prev ← akhir,
akhir↑.next ← awal,
awal↑.prev ← akhir,
endif
endprocedure
procedure sisipTengah(input data : dataTamu; I/O awal,akhir : pointer);
{I.S : Rekord data sudah terisi, user memilih menu sisip tengah}
{F.S : Data disisipkan di tengah}
KAMUS :
baru, bantu : pointer,
ketemu : Boolean,
sisipData : string,
ALGORITMA :
if (awal = nil) then
IF-2/S1/2 – UNIKOM 2012
alloc(baru)
baru↑.info ← data,
awal ← baru,
akhir ← baru,
else
input (sisipData),
bantu ← awal,
ketemu ← false,
while (not ketemu) and (bantu ≠ nil) do
if (bantu↑.info.nama = sisipData) then
ketemu ← true,
else
bantu ← bantu↑.next,
endif
if (ketemu) then
alloc(baru);
baru↑.info ← data,
if (bantu = akhir) then
sisipBlkg(data,awal,akhir)
else
if (bantu = awal) then
sisipDpn(data,awal,akhir)
else
baru↑.next ← bantu,
baru↑.prev ← bantu↑.prev,
bantu↑.prev↑.next ← baru,
bantu↑.prev ← baru,
endif
endwhile
endprocedure
procedure urutData(I/Oawal,akhir : pointer, input jenis : integer)
{I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam record }
{F.S : Data ditamplikan secara berurut}
KAMUS :
IF-2/S1/2 – UNIKOM 2012
temp : dataTamu,
i,j,min : pointer,
ALGORITMA :
i← awal,
while (I ≠ akhir) do
min ← i,
j ← i↑.next,
while (j ≠ akhir) do
case jenis of
1 :if (upcase(j↑.info.nama) < upcase(min↑.info.nama)) then
min ← j,
2 :if (upcase(j↑.info.alamat) < upcase(min↑.info.alamat)) then
min ← j,
3 : if (upcase(j↑.info.kamar) < upcase(min↑.info.kamar)) then
min ← j,
endcase
j ← j↑.next,
case jenis of
1 :if (upcase(j↑.info.nama) < upcase(min↑.info.nama)) then
min ← j,
2 :if (upcase(j↑.info.alamat) < upcase(min↑.info.alamat)) then
min ← j,
3 : if (upcase(j↑.info.kamar) < upcase(min↑.info.kamar)) then
min ← j,
endcase
endwhile
temp ← i↑.info,
i↑.info ← min↑.info,
min↑.info ← temp,
I ← i↑.next,
endwhile
endprocedure
IF-2/S1/2 – UNIKOM 2012
procedure lihatData(I/O awal,akhir : pointer)
{I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam record }
{F.S : Data ditampilkan}
KAMUS :
i : integer,
bantu : pointer,
opt2 : integer
ALGORITMA :
if (awal = nil) then
output('Pesan : Data Kosong. Tekan Enter Untuk Kembali !'),
else
opt2 ← 0,
urutData(awal,akhir,1),
while (opt2≠4) do
bantu ← awal,
i ← 1,
while bantu ≠ akhir do
output (bantu↑.info)
i← i+1,
bantu ← bantu↑.next,
output (bantu↑.info)
i← i+1,
bantu ← bantu↑.next,
endwhile
input(opt2),
if (opt2 < 1) or (opt2 > 4) then
output('Option salah. tekan Enter untuk mengulang'),
else
if (opt2≠4) then
urutData(awal,akhir,opt2);
endif
endif
endwhile
endprocedure
IF-2/S1/2 – UNIKOM 2012
procedure hpsBlkg(input data : dataTamu, I/O awal,akhir : pointer)
{I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam rekord }
{F.S : Data paling belakang dihapus}
KAMUS :
phapus : pointer;
backup : dataTamu;
ALGORITMA :
phapus ← akhir,
backup ← phapus↑.info,
if (awal = akhir) then
awal ← nil,
akhir ← nil,
else
akhir ← phapus↑.prev,
awal↑.prev ← akhir,
akhir↑.next ← awal,
endif
dealloc(phapus);
endprocedure
procedure hpsDpn(I/O backup : dataTamu, I/O awal,akhir : pointer){I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam record }
{F.S : Data paling depan dihapus}
KAMUS :
phapus : pointer,
backup : dataTamu,
ALGORITMA :
phapus ← awal,
backup ← phapus↑.info,
if (awal = akhir) then
awal ← nil,
IF-2/S1/2 – UNIKOM 2012
akhir ← nil,
else
awal ← phapus↑.next,
awal↑.prev ← akhir,
akhir↑.next ← awal,
endif
dealloc(phapus)
endprocedure
procedure hpsTengah(input data : dataTamu, I/O awal,akhir : pointer){I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam rekord }
{F.S : Data ditengah dihapus}
KAMUS :
phapus,bantu : pointer,
X,i : integer,
ALGORITMA :
if (awal = nil) then
output('Data Masih Kosong')
else
input(X)
endif
if (awal = akhir) or (x =1) then
hpsDpn(data,awal,akhir)
else
bantu← awal,
I ← 1,
endif
while (i < x-1) and (bantu↑.next ≠ nil) do
bantu ← bantu↑.next,
phapus ← bantu↑.next,
bantu↑.next ← phapus↑.next,
IF-2/S1/2 – UNIKOM 2012
phapus↑.next ← nil,
dealloc(phapus)
endwhile
endprocedure
procedure menuSisip(I/O awal,akhir : pointer, I/O isi : Boolean, input data : dataTamu){I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam record }
{F.S : Data disisipkan sesuai input user}
KAMUS :
menu2 : integer,
ALGORITMA :
if isi = true then
menu2← 0,
while (menu2 ≠ 4) do
input(menu2),
case menu2 of
1 : sisipDpn(data,awal,akhir),
2 : sisipTengah(data,awal,akhir),
3 : sisipBlkg(data,awal,akhir),
endcase
if ( menu2 < 1) or (menu2 > 4 ) then
output('Input Salah. Tekan Enter Untuk Mengulang'),
endif
if (menu2 > 0) and (menu2 < 4) then
isi ← false,
menu2 ← 4,
endif
endwhile
else
output('Pesan : Anda harus ISI DATA terlebih dahulu!'),
endif
endprocedure
procedure menuHapus(I/O plhHps :integer){I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam record }
IF-2/S1/2 – UNIKOM 2012
{F.S : Data dihapus sesuai input user}
KAMUS :
ALGORITMA :
if (awal = nil) then
output(‘Data Kosong’)
else
input(plhHps);
case plhHps of
1 : hpsDpn(data,awal,akhir),
2 : hpsTengah(data,awal,akhir),
3 : hpsBlkg(data,awal,akhir),
endcase
endif
endprocedure
procedure cariData(input awal:pointer; I/O data : dataTamu){I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam record }
{F.S : Menampilkan data yang dicari ada atau tidak}
KAMUS :
bantu : pointer,
dataCari : integer,
ketemu : Boolean,
ALGORITMA :
ketemu ← false,
bantu ← awal,
input(dataCari),
while (ketemu = false) and (bantu ≠ nil) do
if (bantu↑.info.kamar = dataCari) then
ketemu ← true,
else
bantu ← bantu↑.next,
endif
IF-2/S1/2 – UNIKOM 2012
endwhile
if (ketemu = true) then
output (dataCari,' Ditemukan!')
else
output (dataCari,' Tidak ditemukan!'),
endif
endprocedure
procedure penghancuran(I/O backup : dataTamu, I/O awal,akhir : pointer){I.S : Pointer Awal sudah terdefinisi, Data sudah ada dalam record }
{F.S : Data dihapus satu per satu dengan metode hapus depan}