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 hpsDpn(I/O backup : dataTamu, I/O awal,akhir : pointer)
{ Prosedur hpsTengah digunakan untuk menghapus data di bagian tengah }
procedure hpsTengah(input data : dataTamu, I/O awal,akhir : pointer)
{ Prosedur menuSisip digunakan untuk menampilkan menu sisip depan,tengah dan blkg }
procedure menuSisip(I/O awal,akhir : pointer, I/O isi : Boolean, input data : dataTamu)
{ Prosedur menuHapus digunakan untuk menampilkan menu hapus depan,tengah dan
blkg }
procedure menuHapus(I/O plhHps :integer)
{ Prosedur cariData digunakan untuk mencari data berdasarkan nomor kamar }
procedure cariData(input awal:pointer; I/O data : dataTamu)
{ Prosedur penghancuran digunakan untuk membebaskan memori dari proses senarai}
procedure penghancuran(I/O backup : dataTamu, I/O awal,akhir : pointer)
IF-2/S1/2 – UNIKOM 2012
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}
KAMUS :
ALGORITMA :
while (awal≠nil) do
hpsDpn(backup,awal,akhir)
endwhile
endprocedure
ALGORITMA {Algoritma Utama}
awal ← nil,
akhir ← nil,
isi ← false,
while menu ≠ 6 do
input(menu)
case (menu) of
1 : checkIn(data,isi),
2 : menuSisip(awal,akhir,isi,data),
3 : menuHapus(plhHps),
4 : cariData(awal,data),
5 : lihatData(awal,akhir),
6 : input(selesai),
selesai← upcase(selesai),
endcase
IF-2/S1/2 – UNIKOM 2012
endwhile
endprogram
IF-2/S1/2 – UNIKOM 2012
{Dalam Bahasa Pascal - Program}
program Ibis_Hotel;
uses crt;
const
tarifInap = 250000;
type
dataTamu = record
nama,alamat,kamar : string;
umur,jmlKamar,jmlOrg,lamaInap,telp : integer;
end;
pointer = ^tamu;
tamu = record
info : dataTamu;
prev, next : pointer;
end;
var //variable global
awal, akhir, baru : pointer;
data : dataTamu;
biaya,harga,menu,
plhSisip,plhHps : integer;
selesai : char;
isi : boolean;
procedure ibis_header;
begin
writeln('-----------------------------------------');
writeln('| Selamat Datang di Ibis Hotel |');
writeln('| Jl. Gatot Subroto Bandung |');
writeln('-----------------------------------------');
write();
end;
//Prosedur Isi Data
IF-2/S1/2 – UNIKOM 2012
procedure checkIn (var data : dataTamu; var isi : boolean);
begin
if (isi = false) then
begin
ibis_header();
write('Nama : '); readln(data.nama);
write('Alamat : '); readln(data.alamat);
write('No. Telpon : '); readln(data.telp);
write('Umur : '); readln(data.umur);
write('Jumlah Tamu : '); readln(data.jmlOrg);
write('Kamar : '); readln(data.kamar);
write('Lama Menginap (hari): '); readln(data.lamaInap);
//hitung tarif
harga := tarifInap;
biaya := harga * data.lamaInap * data.jmlOrg;
writeln('-----------------------------------');
writeln('Biaya perOrang (hari) : Rp. ',harga);
writeln('Total Biaya : Rp. ',biaya);
writeln('-----------------------------------');
write('Pastikan Anda Memilih Menu TAMBAH DATA setelah memasukan data !');
isi := true;
end
else
write ('Maaf Data sudah di input, tetapi belum di sisipkan.');
readln();
end;
//Prosedur Sisip Data Depan
procedure sisipDpn(data : dataTamu; var awal,akhir : pointer);
var
baru : pointer;
begin
new(baru);
baru^.info := data;
IF-2/S1/2 – UNIKOM 2012
if (awal = nil) then
begin
akhir := baru;
end
else
begin
baru^.next := awal;
akhir^.prev := baru;
end;
awal := baru;
akhir^.next := awal;
awal^.prev := akhir;
end;
//Prosedur Sisip Data Belakang
procedure sisipBlkg(data : dataTamu; var awal,akhir : pointer);
var
baru : pointer;
begin
new(baru);
baru^.info := data;
if (awal = nil) then
sisipDpn(data,awal,akhir)
else
begin
akhir^.next := baru;
baru^.prev := akhir;
akhir := baru;
akhir^.next := awal;
awal^.prev := akhir;
end;
end;
//Prosedur Sisip Data Tengah
procedure sisipTengah(data : dataTamu; var awal,akhir : pointer);
var
IF-2/S1/2 – UNIKOM 2012
baru, bantu : pointer;
ketemu : boolean;
sisipData : string;
begin
if (awal = nil) then
sisipDpn(data,awal,akhir)
else
write('Sisip Sebelum Rekord Apa (Ketik Nama) '); readln(sisipData);
bantu := awal;
ketemu := false;
while (not ketemu) and (bantu <> nil) do
begin
if (bantu^.info.nama = sisipData) then
ketemu := true
else
bantu := bantu^.next
end;
if (ketemu) then
begin
new(baru);
baru^.info := data;
if (bantu = akhir) then
sisipBlkg(data,awal,akhir)
else
begin
if (bantu = awal) then
sisipDpn(data,awal,akhir)
else
begin // Proses Sisip Tengah
baru^.next := bantu;
baru^.prev := bantu^.prev;
bantu^.prev^.next := baru;
bantu^.prev := baru;
end;
IF-2/S1/2 – UNIKOM 2012
end;
end
else
writeln('Maaf ! Data Tidak Ditemukan');
end;
//Procedure pengurutan data
procedure urutData(var awal,akhir : pointer; jenis : integer);
var
temp : dataTamu;
i,j,min : pointer;
begin
i:=awal;
while (i <> akhir) do
begin
min := i;
j := i^.next;
while (j <> akhir) do
begin
case jenis of
1 :begin
if (upcase(j^.info.nama) < upcase(min^.info.nama)) then
min:=j;
end;
2 :begin
if (upcase(j^.info.alamat) < upcase(min^.info.alamat)) then
min:=j;
end;
3 :begin
if (upcase(j^.info.kamar) < upcase(min^.info.kamar)) then
min:=j;
end;
end;
j:=j^.next;
end;
case jenis of
IF-2/S1/2 – UNIKOM 2012
1 :begin
if (upcase(j^.info.nama) < upcase(min^.info.nama)) then
min:=j;
end;
2 :begin
if (upcase(j^.info.alamat) < upcase(min^.info.alamat)) then
min:=j;
end;
3 :begin
if (upcase(j^.info.kamar) < upcase(min^.info.kamar)) then
min:=j;
end;
end;
temp := i^.info;
i^.info:= min^.info;
min^.info:=temp;
i:=i^.next;
end;
end;
//Prosedur Lihat Data
procedure lihatData(var awal,akhir : pointer);
var
i : integer;
bantu : pointer;
opt2 : integer;
begin
clrscr;
if (awal = nil) then
begin
write('Pesan : Data Kosong. Tekan Enter Untuk Kembali !');
end
else
begin
opt2:=0;
IF-2/S1/2 – UNIKOM 2012
urutData(awal,akhir,1);
while (opt2 <> 4) do
begin
clrscr;
bantu := awal;
writeln('|Ibis Hotel - Gatot Subroto Bandung
-----|------|-------------|-------|------|');
writeln('|NO| NAMA | ALAMAT | TELEPON | UMUR | JUMLAH
TAMU | KAMAR | INAP |');
writeln('|--|------------|-----------|------------|------|-------------|-------|------|');
i:=1;
while bantu <> akhir do
//Menampilkan Data Dari Simpul awal sampai simpul akhir -
1
begin
gotoxy(1,i+3); write('|',i);
gotoxy(4,i+3); write('|',bantu^.info.nama);
gotoxy(17,i+3); write('|',bantu^.info.alamat);
gotoxy(29,i+3); write('|','(022)',bantu^.info.telp);
gotoxy(42,i+3); write('|',bantu^.info.umur,' thn');
gotoxy(49,i+3); write('|',bantu^.info.jmlOrg,' orang');
gotoxy(63,i+3); write('|',bantu^.info.kamar);
gotoxy(71,i+3); write('|',bantu^.info.lamaInap,' hari');
gotoxy(78,i+3); write('|');
i:=i+1;
bantu:=bantu^.next;
end;
//Menampilkan sisa data
gotoxy(1,i+3); write('|',i);
gotoxy(4,i+3); write('|',bantu^.info.nama);
gotoxy(17,i+3); write('|',bantu^.info.alamat);
gotoxy(29,i+3); write('|','(022)',bantu^.info.telp);
gotoxy(42,i+3); write('|',bantu^.info.umur,' thn');
gotoxy(49,i+3); write('|',bantu^.info.jmlOrg,' orang');
gotoxy(63,i+3); write('|',bantu^.info.kamar);
gotoxy(71,i+3); write('|',bantu^.info.lamaInap,' hari');
IF-2/S1/2 – UNIKOM 2012
gotoxy(78,i+3); write('|');
i:=i+1;
bantu:=bantu^.next;
writeln;
writeln('|--|------------|-----------|------------|------|-------------|-------|-
-----|');
writeln;
writeln('1. Urut Berdasarkan Nama');
writeln('2. Urut Berdasarkan Alamat');
writeln('3. Urut Berdasarkan Kamar');
writeln('4. Kembali');
write('Pilih Menu : ');read(opt2);
if (opt2<1) or(opt2>4) then
begin
writeln('Option salah. Tekan ''Enter'' untuk
mengulang');
readln;
end
else
begin
if (opt2<>4) then
urutData(awal,akhir,opt2);
end;
end;
end;
end;
//Prosedur Hapus Data Belakang
procedure hpsBlkg(data : dataTamu; var awal,akhir : pointer);
var
phapus : pointer;
backup : dataTamu;
begin
phapus := akhir;
backup := phapus^.info;
IF-2/S1/2 – UNIKOM 2012
if (awal = akhir) then
begin
awal := nil;
akhir := nil;
end
else
begin
akhir := phapus^.prev;
awal^.prev := akhir;
akhir^.next := awal;
end;
dispose(phapus);
end;
//Prosedur Hapus Data Depan
procedure hpsDpn(var backup : dataTamu;var awal,akhir : pointer);
var
phapus : pointer;
begin
phapus := awal;
backup := phapus^.info;
if (awal = akhir) then
begin
awal := nil;
akhir := nil;
end
else
begin
phapus^.next := awal;
awal^.prev := akhir;
akhir^.next := awal;
end;
dispose(phapus);
end;
IF-2/S1/2 – UNIKOM 2012
//Prosedur Hapus Data Tengah
procedure hpsTengah(data : dataTamu; var awal,akhir : pointer);
var
phapus,bantu : pointer;
X,i : integer;
begin
if (awal = nil) then
writeln('Data Masih Kosong')
else
begin
write('Hapus Data Yang ke - ? ');readln(X);
if (awal = akhir) or (x = 1) then
hpsDpn(data,awal,akhir)
else
begin
bantu := awal;
i:=1;
while (i < x-1) and (bantu^.next <> akhir) do
bantu := bantu^.next;
phapus := bantu^.next;
bantu^.next:=phapus^.next;
phapus^.next:=nil;
dispose(phapus);
end;
end;
end;
//Prosedur Menu Sisip
procedure menuSisip(var awal,akhir : pointer; var isi:boolean; data : dataTamu);
var
menu2 : integer;
begin
if isi = true then
begin
menu2:= 0;
IF-2/S1/2 – UNIKOM 2012
while (menu2 <> 4) do
begin
clrscr;
ibis_header;
writeln('Tambah Data');
writeln();
writeln('1. Tambah Data Depan ');
writeln('2. Tambah Data Tengah ');
writeln('3. Tambah Data Belakang');
writeln('4. Kembali ');
writeln;
write('Input Pilihan Anda [1/2/3/4] : '); readln(menu2);
case menu2 of
1 : sisipDpn(data,awal,akhir);
2 : sisipTengah(data,awal,akhir);
3 : sisipBlkg(data,awal,akhir);
end;
if ( menu2 < 1) or (menu2 > 4 ) then
begin
Writeln('Input Salah. Tekan Enter Untuk Mengulang');
readln;
end;
if (menu2 > 0) and (menu2 < 4) then
begin
isi:=false;
menu2:=4;
end;
end;
end
else
begin
write('Pesan : Anda harus ISI DATA terlebih dahulu!'); readln;
clrscr;
IF-2/S1/2 – UNIKOM 2012
end;
end;
//procedure menu hapus
procedure menuHapus(var plhHps :integer);
begin
clrscr;
if (awal = nil) then
begin
writeln('PESAN : ');
writeln('Tidak Ada Rekord yang Tersimpan.');
write('Tekan Enter Untuk Kembali.');
readln;
end
else
begin
ibis_header;
writeln('Hapus Data ');
writeln();
writeln('1. Hapus Depan ');
writeln('2. Hapus Tengah ');
writeln('3. Hapus Belakang');
writeln('4. Kembali ');
writeln;
write('Input Pilihan Anda [1/2/3/4] : '); readln(plhHps);
case plhHps of
1 : hpsDpn(data,awal,akhir);
2 : hpsTengah(data,awal,akhir);
3 : hpsBlkg(data,awal,akhir);
end;
end;
end;
//Procedure Cari Data berdasarkan nomer kamar
procedure cariData(awal:pointer; var data : dataTamu);
IF-2/S1/2 – UNIKOM 2012
var
bantu : pointer;
dataCari : shortstring;
ketemu : boolean;
begin
ketemu := false;
bantu := awal;
ibis_header();
write('Cari Berdasarkan Nomor Kamar : '); readln(dataCari);
while (ketemu = false) and (bantu <> akhir) do
if (bantu^.info.kamar = dataCari) then
ketemu := true
else
bantu := bantu^.next;
if (ketemu = true) then
begin
writeln();
writeln('Kamar dengan nomor ',dataCari,' Ditemukan!');
writeln();
writeln('Berikut adalah data lengkapnya :');
writeln();
writeln('Nama : ',bantu^.info.nama);
writeln('Alamat : ',bantu^.info.alamat);
writeln('No.Telp : ',bantu^.info.telp);
writeln('Umur : ',bantu^.info.umur);
writeln('Jumlah Tamu : ',bantu^.info.jmlOrg);
writeln('Kamar : ',bantu^.info.kamar);
writeln('Lama Inap : ',bantu^.info.lamaInap);
writeln('-------------------------------------');
write('Ibis Hotel - Gatot Subroto Bandung --');
readln;
end
else
begin
IF-2/S1/2 – UNIKOM 2012
write('Maaf ! Kamar dengan nomor ',dataCari,' Tidak ditemukan!');
readln;
end;
end;
//prosedur penghancuran
procedure penghancuran(var backup:dataTamu; var awal,akhir : pointer);
begin
while (awal<>nil) do
hpsDpn(backup,awal,akhir);
end;
//Program Utama
begin
awal := nil;
akhir := nil;
isi := false;
while menu <> 6 do
begin
clrscr;
ibis_header;
gotoxy(1,6); writeln('1. Isi Data |');
gotoxy(1,7); writeln('2. Tambah Data |');
gotoxy(1,8); writeln('3. Hapus Data |');
gotoxy(22,6);writeln('4. Cari Data |');
gotoxy(22,7);writeln('5. Tampil Data |');
gotoxy(22,8);writeln('6. Keluar |');
gotoxy(1,9); writeln; write('Input Pilihan Anda [1/2/3/4/5/6] : '); readln(menu);
clrscr();
case (menu) of
1 : begin
clrscr;
checkIn(data,isi);
end;
IF-2/S1/2 – UNIKOM 2012
2 : begin
clrscr;
menuSisip(awal,akhir,isi,data);
end;
3 : begin
clrscr;
menuHapus(plhHps);
end;
4 : begin;
clrscr;
cariData(awal,data);
end;
5 : begin
clrscr;
lihatData(awal,akhir);
readln;
end;
6 : begin
write('Pesan : Keluar dari program Ibis Hotel ? [Y/T] ');readln(selesai);
selesai:=upcase(selesai);
end;
end;
end;
end.
IF-2/S1/2 – UNIKOM 2012
Tampilan Awal :
Validasi Isi Data dan Tambah Data :
Tampilan Input Data :
IF-2/S1/2 – UNIKOM 2012
Tampilan Tambah Data :
Tampilan ‘Tampil Data’ Terurut berdasarkan Nama :
Tampilan ‘Tampil Data’ Terurut berdasarkan Kamar :
IF-2/S1/2 – UNIKOM 2012
Tampilan ‘Tampil Data’ Terurut berdasarkan Alamat:
Tampilan ‘Pencarian Data’ Terurut berdasarkan Nomor Kamar :
IF-2/S1/2 – UNIKOM 2012
DAFTAR PUSTAKA
[1] Jogiyanto, “Turbo Pascal Versi 5.0”, AndiPublisher, Yogyakarta, 1992
[2] Santosa, Insap. “Struktur Data Menggunakan Turbo Pascal 6” ,AndiPublisher,
Yogyakarta, 2006.
[3] Tim Struktur Data Unikom,”Single Linked List”, Unikom, Bandung.