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