TUGAS V
TUGAS V
IMPLEMENTIMPLEMENTASI 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 FFAKULAKULTTAS TEKNAS TEKNIK DAIK DAN ILMU N ILMU KOMPUTER KOMPUTER UNIVERSITAS KOMPUTER INDONESIA UNIVERSITAS KOMPUTER INDONESIA
2011 2011
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
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
{ 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
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,
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
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}
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
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
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,
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,
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)
{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
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
endwhile endprogram
{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;
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);
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
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; 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;
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
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(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 (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;
//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
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;
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);
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
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;
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.
Tampilan Awal :
Validasi Isi Data dan Tambah Data :
Tampilan Tambah Data :
Tampilan ‘Tampil Data’ Terurut berdasarkan Nama :
Tampilan ‘Tampil Data’ Terurut berdasarkan Alamat: