Top Banner
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
42
Welcome message from author
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
Page 1: Circular Double Linked List

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

Page 2: Circular Double Linked List

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)

Page 3: Circular Double Linked List

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)

Page 4: Circular Double Linked List

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,

Page 5: Circular Double Linked List

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

Page 6: Circular Double Linked List

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 :

Page 7: Circular Double Linked List

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

Page 8: Circular Double Linked List

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

Page 9: Circular Double Linked List

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,

Page 10: Circular Double Linked List

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,

Page 11: Circular Double Linked List

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 }

Page 12: Circular Double Linked List

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

Page 13: Circular Double Linked List

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

Page 14: Circular Double Linked List

IF-2/S1/2 – UNIKOM 2012

endwhile

endprogram

Page 15: Circular Double Linked List

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

Page 16: Circular Double Linked List

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;

Page 17: Circular Double Linked List

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

Page 18: Circular Double Linked List

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;

Page 19: Circular Double Linked List

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

Page 20: Circular Double Linked List

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;

Page 21: Circular Double Linked List

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');

Page 22: Circular Double Linked List

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;

Page 23: Circular Double Linked List

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;

Page 24: Circular Double Linked List

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;

Page 25: Circular Double Linked List

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;

Page 26: Circular Double Linked List

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);

Page 27: Circular Double Linked List

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

Page 28: Circular Double Linked List

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;

Page 29: Circular Double Linked List

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.

Page 30: Circular Double Linked List

IF-2/S1/2 – UNIKOM 2012

Tampilan Awal :

Validasi Isi Data dan Tambah Data :

Tampilan Input Data :

Page 31: Circular Double Linked List

IF-2/S1/2 – UNIKOM 2012

Tampilan Tambah Data :

Tampilan ‘Tampil Data’ Terurut berdasarkan Nama :

Tampilan ‘Tampil Data’ Terurut berdasarkan Kamar :

Page 32: Circular Double Linked List

IF-2/S1/2 – UNIKOM 2012

Tampilan ‘Tampil Data’ Terurut berdasarkan Alamat:

Tampilan ‘Pencarian Data’ Terurut berdasarkan Nomor Kamar :

Page 33: Circular Double Linked List

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.