Rabu, 30 April 2014

STRUKTUR DATA

Contoh Program Perpustakaan 
Antrian menggunakan stack dan Quen

uses wincrt;
const max=10;
type buku=record
     kode,judul:string;
     jb:byte;
     end;
     larik1=array[1..max] of buku;
type antrian=record
     nomor,nama:array[1..max] of string;
     head,tail:0..max;
     end;
type transaksi=record
     no_ang,nama_ang,kodeb,jdl,tgl_p,tgl_k:string;
     end;
     larik2=array[1..max] of transaksi;
var book:larik1;
    antri:antrian;
    transak:larik2;
    i,j,m,n,pil,pil2:byte;
    nomasuk,namamasuk:string;
    nokeluar,namakeluar:string;

procedure tambah_buku(var x:larik1);
var kod,ya:string; 
label ul;

begin
repeat
      writeln('Memasukkan judul buku baru');
      ul:
      write('masukkan kode buku baru : ');readln(kod);
      {cek}
      for i:=1 to n do
      begin
          if x[i].kode=kod then
          begin writeln('Kode sudah digunakan,ulang');goto ul; end;
      end;
      inc(n);
      x[n].kode :=kod;
      write('Masukkan judul buku baru    : ');readln(x[n].judul);
      write('Masukkan berapa jumlah buku : ');readln(x[n].jb);
      writeln;
      write('Tambah lagi<y/t> ? ');readln(ya);
until(ya<>'y');
end;

procedure push(var x:antrian);
var no:string;
label ul;

begin
ul:
write('masukkan nomor anggota : ');readln(no);
{cek diantrian}
for i:=1 to x.tail do
begin
     if x.nomor[i]=no then begin writeln('nomor sudah antri di posisi ',i);goto ul;end;
end;
inc(x.tail);
x.nomor[x.tail]:=no;
write('masukkan nama anggota : ');readln(x.nama[x.tail]);
end;

  
procedure pinjam_buku(var x:antrian;var Y:larik1;var Z:larik2);
var kod:string; pos:byte;
    ada:boolean;

begin
{pop dari queue dulu}
nokeluar:=x.nomor[x.head];namakeluar:=x.nama[x.head];
writeln('melayani peminjaman dari nomor anggota :',nokeluar,'   Nama  : ',namakeluar);
for i:=1 to x.tail-1 do {geser antrian}
begin
     x.nomor[i]:=x.nomor[i+1];
     x.nama[i]:=x.nama[i+1];
end;
dec(x.tail);
write('masukkan judul kode buku yang akan dipinjam : ');readln(kod);
{cek}
for i:=1 to n do
begin if (y[i].kode=kod) and (y[i].jb>0) then begin pos:=i;ada:=true;end;end;
if ada then
begin
     {catat peminjaman di transaksi}
     dec(y[pos].jb);{stok buku dikurangi}
     inc(m);
     z[m].no_ang:=nokeluar;
     z[m].nama_ang:=namakeluar;
     z[m].kodeb:=kod;
     z[m].jdl:= y[pos].judul;
     write('masukkan tanggal pinjam : ');readln(z[m].tgl_p);
end
else writeln('maaf buku saat ini tidak tersedia');
end;


procedure kembali_buku(var x:antrian;var y:larik1;var z:larik2);
var kod: string;pos:byte;
ada:boolean;

begin
{pop dari queue dulu}
nokeluar:=x.nomor[x.head];namakeluar:=x.nama[x.head];
writeln('melayani peminjaman dari nomor anggota :',nokeluar,'   Nama  : ',namakeluar);
for i:=1 to x.tail-1 do {geser antrian}
begin
     x.nomor[i]:=x.nomor[i+1];
     x.nama[i]:=x.nama[i+1];
end;
dec(x.tail);
write('masukkan kode buku yang akan dikembalikan : ');readln(kod);
{cek}
for i:=1 to m do         {mengecek buku yang dipinjam di larik transaksi}
begin if (z[i].kodeb=kod) and (z[i].nama_ang=namakeluar)  then begin pos:=i;ada:=true;end;end;
if ada then
begin
     {cek di larik buku diposisi mana buku tsb dan kembalikan stoknya}
     for j:=1 to n do if y[j].kode=kod then inc(y[j].jb);
     {catat pengembalian di transaksi}
     write('masukkan tanggal kembali : ');readln(z[pos].tgl_k);
     writeln('Terimakasih sudah mengembalikan buku');
end
else writeln('maaf kode buku salah atau nama pengantre tidak cocok dengan data di perpustakaan');
end;

procedure cetak_buku(var x:larik1);
begin
writeln(' DAFTAR BUKU DI PERPUSTAKAAN MANDIRI');writeln;
writeln('-------------------------------------------------');
writeln('No   Kode      Judul                Jumlah');
writeln('-------------------------------------------------');
for i:=1 to n do writeln(i:2,'    ',x[i].kode:4,'       ',x[i].judul:15,'    ',x[i].jb:3);
writeln('-------------------------------------------------');
end;

procedure cetak_antrian(var x:antrian);
begin
writeln(' DAFTAR ANTRIAN PERPUSTAKAAN MANDIRI');writeln;
writeln('-------------------------------------------------');
writeln('POSISI      NO ANGGOTA      NAMA');
writeln('-------------------------------------------------');
for i:=1 to x.tail do writeln(i:4,'        ',x.nomor[i]:4,'         ',x.nama[i]);
writeln('-------------------------------------------------');
end;

procedure cetak_transaksi(var x:larik2);
begin
writeln(' DAFTAR BUKU DI PERPUSTAKAAN MANDIRI');writeln;
writeln('----------------------------------------------------------------------------');
writeln('No   No Anggota  Nama Anggota   Judul Buku       Tgl Pinjam   Tgl Kembali');
writeln('----------------------------------------------------------------------------');
for i:=1 to m do writeln(i:2,'   ',x[i].no_ang:4,'  ',x[i].nama_ang:10,'   ',x[i].jdl:12,
'       ',x[i].tgl_p:10,'    ',x[i].tgl_k:10);
writeln('----------------------------------------------------------------------------');
end;


begin
antri.head:=1;antri.tail:=0;
repeat
begin
     clrscr;
     writeln('    PELAYANAN PERPUSTAKAAN MANDIRI');
     writeln('1. Menambah judul buku baru');
     writeln('2. Masuk Antrean');                        
     writeln('3. Layanan Pinjam dan Pengembalian');
     writeln('4. Cetak daftar buku');
     writeln('5. Cetak antrean');
     writeln('6. Cetak transaksi peminjaman/pengembalian');
     writeln('7. Selesai');
     write('Pilih 1-7 : ');readln(pil);
     case pil of
     1: tambah_buku(book);
     2: if antri.tail=max then writeln('antrian penuh saat ini')
        else  push(antri);
     3: begin
        if antri.tail=0 then writeln('antrian kosong, tidak ada yang perlu dilayani')
        else
            begin
                 writeln('Anda akan melakukan apa? 1. Pinjam Buku 2. Mengembalikan buku');
                 readln(pil2);
                 if pil2=1 then pinjam_buku(antri,book,transak) else
                 if pil2=2 then kembali_buku(antri,book,transak) else
                 writeln('Pilihan salah');
            end;
          end;
     4: if n=0 then writeln('Buku blm dientri') else cetak_buku(book);
     5: if antri.tail=0 then writeln('Tidak ada antrian') else cetak_antrian(antri);
     6: if m=0 then writeln('Tidak ada transaksi') else cetak_transaksi(transak);
     7: writeln('Terimakasih');
     end;
     readln;
end
until(pil=7);
end.

0 komentar:

Posting Komentar

Popular Posts

 
Copyright © . peace love unity respect - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger