• Tidak ada hasil yang ditemukan

Circular Double Linked List

N/A
N/A
Protected

Academic year: 2021

Membagikan "Circular Double Linked List"

Copied!
33
0
0

Teks penuh

(1)

TUGAS V

TUGAS V

IMPLEMENT

IMPLEMENTASI CIRCULAR ASI CIRCULAR DOUBLE LINKED LISTDOUBLE LINKED LIST CONTOH KASUS RESERVASI KAMAR HOTEL CONTOH KASUS RESERVASI KAMAR HOTEL

Diajukan untuk memenuhi salah satu tugas

Diajukan untuk memenuhi salah satu tugas

mata kuliah Struktur Data

mata kuliah Struktur Data

Oleh: Oleh: Try Fathur Rachman

Try Fathur Rachman ( 1011101( 10111015 )5 )  Nurhu

 Nurhusein ( 1sein ( 101011111018 )018 ) Restu Hendrik Saputr

Restu Hendrik Saputra ( a ( 101110111023 )1023 ) Gilang Luthfi

Gilang Luthfi ( 1011( 10111037 )1037 ) Dede Mandela (10107356) Dede Mandela (10107356) Azmi Najib Mahfoz (10109218) Azmi Najib Mahfoz (10109218)

Dosen:

Dosen:

Tati Harihayati M., S.T., M.T.

Tati Harihayati M., S.T., M.T.

TEKNIK INFORMATIKA TEKNIK INFORMATIKA F

FAKULAKULTTAS TEKNAS TEKNIK DAIK DAN ILMU N ILMU KOMPUTER KOMPUTER  UNIVERSITAS KOMPUTER INDONESIA UNIVERSITAS KOMPUTER INDONESIA

2011 2011

(2)

ALG

ALGORORITITMA UTAMA MA UTAMA :: program

program Ibis_HotelIbis_Hotel

KAMUS : KAMUS : const const tarifInap = 250000 tarifInap = 250000 type type dataTamu =

dataTamu = recordrecord nama,alama

nama,alamat,kamar t,kamar :: stringstring,,

umur,jmlKamar,jmlOrg,lamaInap,telp :

umur,jmlKamar,jmlOrg,lamaInap,telp : integer integer ,, endrecord

endrecord

pointer = ↑tamu, pointer = ↑tamu,

tamu =

tamu = recordrecord info : dataTamu, info : dataTamu, prev,next : pointer, prev,next : pointer, endrecord endrecord

awal, akhir, baru : pointer, awal, akhir, baru : pointer, data : dataTamu,

data : dataTamu,

biaya,harga,menu,plhSisip,plhHps :

biaya,harga,menu,plhSisip,plhHps : integer integer ,, selesai :

selesai : char char ,, isi :

isi : booleanboolean;;

{ Prototype Program } { Prototype Program }

{ Prosedur checkIn digunakan untuk user memasukan data tamu } { Prosedur checkIn digunakan untuk user memasukan data tamu } procedure

procedure checkIn (checkIn (inputinput data : dataTamu;data : dataTamu; outputoutput isi :isi : booleanboolean))

{ Prosedur sisispDpn digunakan untuk menyisipkan data di bagian depan } { Prosedur sisispDpn digunakan untuk menyisipkan data di bagian depan } procedure

procedure sisipDpn(sisipDpn(inputinput data : dataTamu;data : dataTamu; I/OI/O awal,akhir : pointer)awal,akhir : pointer)

{ Prosedur sisispBlkg digunakan untuk menyisipkan data di bagian belakang } { Prosedur sisispBlkg digunakan untuk menyisipkan data di bagian belakang } procedure

(3)

ALG

ALGORORITITMA UTAMA MA UTAMA :: program

program Ibis_HotelIbis_Hotel

KAMUS : KAMUS : const const tarifInap = 250000 tarifInap = 250000 type type dataTamu =

dataTamu = recordrecord nama,alama

nama,alamat,kamar t,kamar :: stringstring,,

umur,jmlKamar,jmlOrg,lamaInap,telp :

umur,jmlKamar,jmlOrg,lamaInap,telp : integer integer ,, endrecord

endrecord

pointer = ↑tamu, pointer = ↑tamu,

tamu =

tamu = recordrecord info : dataTamu, info : dataTamu, prev,next : pointer, prev,next : pointer, endrecord endrecord

awal, akhir, baru : pointer, awal, akhir, baru : pointer, data : dataTamu,

data : dataTamu,

biaya,harga,menu,plhSisip,plhHps :

biaya,harga,menu,plhSisip,plhHps : integer integer ,, selesai :

selesai : char char ,, isi :

isi : booleanboolean;;

{ Prototype Program } { Prototype Program }

{ Prosedur checkIn digunakan untuk user memasukan data tamu } { Prosedur checkIn digunakan untuk user memasukan data tamu } procedure

procedure checkIn (checkIn (inputinput data : dataTamu;data : dataTamu; outputoutput isi :isi : booleanboolean))

{ Prosedur sisispDpn digunakan untuk menyisipkan data di bagian depan } { Prosedur sisispDpn digunakan untuk menyisipkan data di bagian depan } procedure

procedure sisipDpn(sisipDpn(inputinput data : dataTamu;data : dataTamu; I/OI/O awal,akhir : pointer)awal,akhir : pointer)

{ Prosedur sisispBlkg digunakan untuk menyisipkan data di bagian belakang } { Prosedur sisispBlkg digunakan untuk menyisipkan data di bagian belakang } procedure

(4)

{ Prosedur sisispTengah digunakan untuk menyisipkan data di bagian tengah } { Prosedur sisispTengah digunakan untuk menyisipkan data di bagian tengah } procedure

procedure sisipTengah(sisipTengah(inputinput data : dataTamu;data : dataTamu; I/OI/O awal,akhir : pointer)awal,akhir : pointer)

{ Prosedur urutData digunakan untuk mengurutkan data sebelum di tampilkan } { Prosedur urutData digunakan untuk mengurutkan data sebelum di tampilkan } procedure

procedure urutData(urutData(I/OI/Oawal,akhir : pointer,awal,akhir : pointer,inputinput jenis : integer)jenis : integer)

{ Prosedur lihatData digunakan untuk menampilkan data yang terdapat pada rekord } { Prosedur lihatData digunakan untuk menampilkan data yang terdapat pada rekord } procedure

procedure lihatData(lihatData(I/OI/O awal,akhir : pointer)awal,akhir : pointer)

{ Prosedur hpsBlkg digunakan untuk menghapus data di bagian belakang } { Prosedur hpsBlkg digunakan untuk menghapus data di bagian belakang } procedure

procedure hpsBlkg(hpsBlkg(inputinput data : data : dataTdataTamu,amu, I/OI/O awal,akhir awal,akhir : : pointer)pointer)

{ Prosedur hpsDpn digunakan untuk menghapus data di bagian depan } { Prosedur hpsDpn digunakan untuk menghapus data di bagian depan } procedure

procedure hpsDpn(hpsDpn(I/OI/O backup : dataTamu,backup : dataTamu, I/OI/O awal,akhir : pointer)awal,akhir : pointer)

{ Prosedur hpsTengah digunakan untuk menghapus data di bagian tengah } { Prosedur hpsTengah digunakan untuk menghapus data di bagian tengah } procedure

procedure hpsTengah(hpsTengah(inputinput data : dataTamu,data : dataTamu, I/OI/O awal,akhir : pointer)awal,akhir : pointer)

{ Prosedur menuSisip digunakan untuk menampilkan menu sisip depan,tengah dan blkg } { Prosedur menuSisip digunakan untuk menampilkan menu sisip depan,tengah dan blkg } procedure

procedure menuSisip(menuSisip(I/OI/O awal,akhir : pointer,awal,akhir : pointer, I/OI/O isi :isi : BooleanBoolean,, inputinput data : dataTamu)data : dataTamu)

{ Prosedur menuHapus digunakan untuk menampilkan menu hapus depan,tengah dan { Prosedur menuHapus digunakan untuk menampilkan menu hapus depan,tengah dan blkg }

blkg }

procedure

procedure menuHapus(menuHapus(I/OI/O plhHps :integer)plhHps :integer)

{ Prosedur cariData digunakan untuk mencari data berdasarkan nomor kamar } { Prosedur cariData digunakan untuk mencari data berdasarkan nomor kamar } procedure

procedure cariData(cariData(inputinput awal:pointer;awal:pointer; I/OI/O data : dataTamu)data : dataTamu)

{ Prosedur penghancuran digunakan untuk membebaskan memori dari proses senarai} { Prosedur penghancuran digunakan untuk membebaskan memori dari proses senarai} procedure

(5)

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 

end procedure

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,

(6)

akhir↑.next ← awal, awal↑.prev ← akhir, end procedure

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

(7)

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}

(8)

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

(9)

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), wh ile (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

(10)

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,

(11)

akhir ← nil, else awal ← phapus↑.next, awal↑.prev ← akhir, akhir↑.next ← awal, endif  dealloc(phapus) end procedure

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,

(12)

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)

(13)

{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 

(14)

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

(15)

endwhile endprogram

(16)

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

(17)

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

(18)

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 

(19)

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;

(20)

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;

(21)

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

(22)

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

(23)

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;

(24)

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;

(25)

//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

(26)

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;

(27)

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

(28)

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

(29)

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;

(30)

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.

(31)

Tampilan Awal :

Validasi Isi Data dan Tambah Data :

(32)

Tampilan Tambah Data :

Tampilan ‘Tampil Data’ Terurut berdasarkan Nama :

(33)

Tampilan ‘Tampil Data’ Terurut berdasarkan Alamat:

Referensi

Dokumen terkait

Ukuran secara kualitatif dan kuantitatif yang menunjukkan tingkatan pencapaian suatu sasaran atau tujuan yang telah ditetapkan adalah merupakan sesuatu yang dapat dihitung

Abstrak- Aplikasi Pelayanan Surat Kelahiran dan Kematian merupakan sistem yang dibuat untuk mengolah, medokumentasikan data- data kelahiran dan kematian masyarakat

Jika melihat pada tabel perkiraan pertumbuhan kendaraan maka dengan kondisi saat ini diperkirakan hanya bisa mengakomodasi kebutuhan transportasi penyeberangan

Guru menyampaikan aspek yang dinilai atau tujuan yang diharapkan pada pembelajaran hari ini yaitu agar siswa mampu mengetahui berbagai penyakit yang mempengaruhi organ

Berdasarkan hasil analisis unit aktivitas yang dilakukan terhadap lipase yang dihasilkan, didapatkan hasil pada konsentrasi induser, olive oil, 2%, dedak padi

Laporan penelitian ini mendeskripsikan pengaruh penambahan bahan pengikat berupa karaginan diantara dua bahan pengikat yang lain (gelatin dan albumen) dan suplementasi

Sejalan dengan semangat otonomi daerah dan implementasi dari kebijakan-kebijakan tersebut, dibentuklah Dinas Perpustakaan dan Kearsipan Daerah Kabupaten Luwu Utara

Dalam peraturan Rektor Universitas Negeri Semarang Nomor 22 Tahun 2008 tentang “Pedoman Praktik Pengalaman Lapangan Bagi Mahasiswa Program Kependidikan Universitas Negeri