Tuesday, 23 October 2012
Strukdat Program Double_Linked_list(PASCAL)
Program Data_Buku_Perpstakaan;
uses crt;
type
buku = record
kode : string;
judul : string;
penulis : string;
penerbit : string;
end;
point = ^Data;
Data = record
info : buku;
next, prev : point;
end;
var
N, menu : integer;
awal, akhir : point;
{--------------------------------------------------------------------------}
Procedure MenuPilihan (var menu : integer);
begin
writeln('Menu Utama Perpustakaan');
writeln('============');
writeln('1. Isi Data Buku');
writeln('2. Tambah Data Buku');
writeln('3. Hapus Data');
writeln('4. Cari Data');
writeln('5. Tampil Data Buku');
writeln('6. Keluar');
write('Pilihan Anda [1-6] : ');readln(menu);
{validasi menu pilihan}
while (menu < 1) or (menu>6) do
begin
gotoxy(25,8);textcolor(GREEN);
write('Salah Memilih Menu, Ulangi! (Tekan Enter)');
readln;gotoxy(22,8);clreol;textcolor(15);
readln(menu);
end;
end;
{---------------------------------------------------------------}
procedure createlist(var awal, akhir : point);
begin
awal := nil;
akhir := nil;
end;
{---------------------------------------------------------------}
function CountElement (var awal : point): integer;
var
hasil : integer;
info : point;
begin
hasil := 0;
if awal <> nil then
begin
{list tidak kosong}
{inisialisasi}
info := awal;
while info <> nil do
begin
hasil := hasil + 1;
{iterasi}
info := info^.next;
end;
end;
CountElement := hasil;
end;
{---------------------------------------------------------------}
Procedure Isidata(kode : string ; judul : string ; penulis : string ; penerbit : string ; var awal : point ; var N : integer);
var
i : integer;
baru : Point;
begin;
i := 0;
clrscr;
textcolor(15);
new(baru);
i := i+1;
writeln('Memasukkan Data Buku ke-',i);
writeln('============================');
write('Kode Buku : ');readln(kode);
baru^.info.kode := kode;
write('Judul Buku : ');readln(judul);
baru^.info.judul := judul;
write('Penulis :');readln(penulis);
baru^.info.penulis := penulis;
write('penerbit:');readln(penerbit);
baru^.info.penerbit := penerbit;
baru^.prev := nil;
baru^.next := nil;
akhir := baru;
awal := baru;
writeln;
N := i;
end;
{------------------------------------------------------------------------}
Procedure Menutambah (var menu : integer);
begin
writeln('Menu Tambah data');
writeln('============');
writeln('1. Tambah Data Buku sebagai data Awal');
writeln('2. Tambah Data Buku ditengah setelah data ke-n');
writeln('3. Tambah Data Buku sebagai data Akhir');
writeln('4. Keluar');
write('Pilihan Anda [1-3] : ');readln(menu);
{validasi menu pilihan}
while (menu < 1) or (menu>4) do
begin
gotoxy(25,8);textcolor(GREEN);
write('Salah Memilih Menu, Ulangi! (Tekan Enter)');
readln;gotoxy(22,8);clreol;textcolor(15);
readln(menu);
end;
end;
{--------------------------------------------------------------------------}
procedure addfirst( kode : string ; judul : string ; penulis : string ; penerbit : string ; var awal : point);
var
baru : point;
begin
new(baru);
writeln('Masukkan kode buku tambahan:');readln(kode);
baru^.info.kode := kode;
writeln ('Masukkan judul buku tambahan :');readln(judul);
baru^.info.judul := judul;
writeln ('Masukkan nama penulis buku:'); readln(penulis);
baru^.info.penulis := penulis;
writeln('masukkan nama penerbit buku :');readln(penerbit);
baru^.info.penerbit := penerbit;
awal^.prev := baru;
baru^.next := awal;
awal:= baru;
awal^.prev := nil
end;
{------------------------------------------------------------------------}
Procedure addlast( kode : string; judul : string;
penulis : string;
penerbit : string; var akhir : point);
var
baru : point;
begin
new(baru);
write('masukkan kode buku tambahan:');readln(kode);
baru^.info.kode := kode;
write('masukkan judul buku tambahan:');readln(judul);
baru^.info.judul := judul;
write('masukkan nama penulis:');readln(penulis);
baru^.info.penulis := penulis;
write('masukkan penerbit buku:');readln(penerbit);
baru^.info.penerbit := penerbit;
baru^.next := nil;
baru^.prev := akhir;
akhir^.next := baru;
akhir := baru;
end;
{------------------------------------------------------------------------}
Procedure addaftersingle(kode : string ; judul : string;
penulis : string;
penerbit : string; var awal : point);
var
baru : point;
begin
new (baru);
writeln('Masukkan kode buku tambahan:');readln(kode);
baru^.info.kode := kode;
writeln ('Masukkan judul buku tambahan :');readln(judul);
baru^.info.judul := judul;
writeln ('Masukkan nama penulis buku:'); readln(penulis);
baru^.info.penulis := penulis;
writeln('masukkan nama penerbit buku :');readln(penerbit);
baru^.info.penerbit := penerbit;
baru^.next := nil;
baru^.prev := nil;
awal := baru;
akhir := baru;
end ;
{------------------------------------------------------------------------}
procedure addAfter (kode : string ; judul : string;
penulis : string;
penerbit : string; var awal : point);
var
baru, bantu : point;
ketemu : boolean;
datasisip : string;
begin
if awal = nil then
begin
addaftersingle(kode,judul,penulis,penerbit,awal);
end
else
begin
writeln ('data akan disisipkan setelah kode buku ke- :'); readln(datasisip);
bantu := awal;
ketemu := False;
while (not ketemu ) do
begin
if ( datasisip = bantu^.info.kode) then
ketemu := true
else
bantu := Bantu^.next;
end;
end;
if (ketemu) then
begin
new (baru);
writeln('Masukkan kode buku tambahan:');readln(kode);
baru^.info.kode := kode;
writeln ('Masukkan judul buku tambahan :');readln(judul);
baru^.info.judul := judul;
writeln ('Masukkan nama penulis buku:'); readln(penulis);
baru^.info.penulis := penulis;
writeln('masukkan nama penerbit buku :');readln(penerbit);
baru^.info.penerbit := penerbit;
baru^.next := bantu^.next;
bantu^.next^.prev := baru;
baru^.prev := bantu;
bantu^.next := baru;
end
else
begin
writeln('data yg disisipkan tidak ada');
readln;
end;
end;
{--------------------------------------------------------------------------}
{------------------------------------------------------------------------}
Procedure MenuHapus (var menu : integer);
begin
writeln('Menu Hapus data Buku');
writeln('============');
writeln('1. Hapus Data Buku Pertama');
writeln('2. Hapus Data Buku Tengah');
writeln('3. hapus Data Buku AKhir');
writeln('4. Keluar');
write('Pilihan Anda [1-3] : ');readln(menu);
{validasi menu pilihan}
while (menu < 1) or (menu>4) do
begin
gotoxy(25,8);textcolor(GREEN);
write('Salah Memilih Menu, Ulangi! (Tekan Enter)');
readln;gotoxy(22,8);clreol;textcolor(15);
readln(menu);
end;
end;
{---------------------------------------------------------------------------}
procedure delFirst(var awal : point);
var
phapus: point;
begin
if awal <> nil then
begin
{jika list bukan list kosong}
phapus := awal;
awal := awal^.next;
awal^.prev := nil ;
phapus^.next := nil;
dispose(phapus);
end;
end;
{------------------------------------------------------------------------}
procedure DelLast(var awal : point);
var
akhir : point;
bantu : point;
begin
if awal <> nil then
begin
{jika list tidak kosong}
if countelement(awal) = 1 then
begin
{list terdiri dari satu elemen}
delFirst(awal);
end
else
begin
{mencari elemen terakhir list}
akhir := awal;
while Akhir^.next <> nil do
begin
{iterasi}
bantu := akhir;
akhir := akhir^.next;
end;
bantu^.next := nil;
akhir^.prev := nil;
dispose(akhir);
end;
end;
end;
{---------------------------------------------------------------------------}
procedure delAfter( var awal,akhir: point);
var
bantu : point;
phapus : point;
kodehapus : string;
ketemu : boolean;
begin
writeln('masukkan kode buku yang akan dihapus:');readln(kodehapus);
bantu := awal;
phapus := awal;
ketemu := false;
while (not ketemu ) do
begin
if ( kodehapus = phapus^.info.kode) then
ketemu := true
else
phapus := phapus^.next;
end;
if (ketemu) then
begin
if (phapus = akhir)
then DelLast(awal)
else
bantu := phapus^.prev;
bantu^.next := phapus^.next;
phapus^.next^.prev := bantu;
dispose (phapus)
end
else
begin
writeln('kode yang akan dihapus tidak ditemukan');
end;
end;
{----------------------------------------------------------------------------}
procedure delAll( var awal : point);
var
i : integer;
begin
if countelement(awal) <> 0 then
begin
for i := countelement (awal) downto 1 do
begin
{proses menghapus elemen list}
delLast(awal)
end;
end;
end;
{----------------------------------------------------------------------------}
Procedure Cari_Data(var awal : point);
var
Bantu : point ;
DataCari : string ;
Ketemu : Boolean;
begin
write ('masukkan judul, buku yg anda cari:'); readln(DataCari);
Ketemu := False;
Bantu := awal;
While (Not Ketemu) and (Bantu <> Nil) do
begin
If (Bantu^.info.judul = DataCari)
Then
Ketemu := True
Else
Bantu := Bantu^.Next;
End ;
If (Ketemu)
Then
Writeln(DataCari,'Ditemukan')
Else
writeln(DataCari,'Tidak Ditemukan');
End;
{----------------------------------------------------------------------------}
procedure printElement( var awal : pointer);
var
bantu : point;
i : integer;
begin
if awal <> nil then
begin
{jika list tidak kosong}
{inisialisasi}
bantu := awal;
i := 1;
while bantu <> nil do
begin
{proses}
writeln('Buku ke : ', i);
writeln('kode:', bantu^.info.kode);
writeln('judul:', bantu^.info.judul);
writeln('penulis:', bantu^.info.penulis);
writeln('penerbit:', bantu^.info.penerbit);
writeln('----------------------------------------');
{iterasi}
bantu := bantu^.next;
i := i + 1;
end;
end
else
begin
{proses jika list kosong}
writeln('list kosong');
end;
end;
{---------------------------------------------------------------------------}
begin
repeat
clrscr; textcolor(15);
MenuPilihan(menu);
case (menu) of
1 : begin
clrscr;
createlist(awal, akhir);
countelement( awal);
Isidata('123', 'judul', 'penulis', 'penerbit',awal,n);
end;
2 : begin
clrscr;
if(N=0)
then
writeln('Data Masih Kosong (Tekan Enter Untuk Melanjutkan!)')
else
begin
repeat
clrscr; textcolor(15);
Menutambah(menu);
case (menu) of
1 : begin
clrscr;
addfirst('123' ,'judul' ,'penulis', 'penerbit' , awal );
end;
2 : begin
clrscr;
addAfter('123', 'judul', 'penulis','penerbit', awal);
end;
3 : begin
clrscr;
addlast( '123' , 'judul' ,'penulis' ,'penerbit' , akhir);
end;
end;
until(menu=4);
end;
end;
3 : begin
clrscr;
if(N=0)
then
writeln('Data Masih Kosong (Tekan Enter Untuk Melanjutkan!)')
else
begin
repeat
clrscr; textcolor(15);
MenuHapus(menu);
case (menu) of
1 : begin
clrscr;
writeln('data Pertama telah Dihapus');
readln;
delFirst(awal);
end;
2 : begin
clrscr;
delAfter(awal,akhir);
end;
3 : begin
clrscr;
writeln('data Akhir telah Dihapus');
readln;
DelLast(awal);
end;
end;
until(menu=4);
end;
readln;
end;
4 : begin
clrscr;
if(N=0)
then
writeln('Data Masih Kosong (Tekan Enter Untuk Melanjutkan!)')
else
begin
cari_data(awal);
end;
readln;
end;
5 : begin
clrscr;
if(N=0)
then
writeln('Data Masih Kosong (Tekan Enter Untuk Melanjutkan!)')
else
begin
printElement(awal);
end;
readln;
end;
end;
until(menu=6);
delAll(awal);
end.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment