uses crt;
const max=10;
type buku=record
judul,pengarang:string;
stok:byte;
end;
larik_buku=array[1..max] of buku;
type pinjam=record
nama,judulb,pengarangb,blnb:string;
tglb,thnb:integer;
end;
larik_pinjam=array[1..max] of pinjam;
type kembali=record
nam,jb,pb,bulanb:string;
tanggalb,tahunb:integer;
end;
larik_kembali=array[1..max] of kembali;
var buk:larik_buku;
pinj:larik_pinjam;
m,n,i,j,pil:byte;
ketemu:boolean;
procedure isi_buku(var x:larik_buku);
var ya:char;
label lagi;
begin
lagi:
inc(n);
write('masukkan judul buku baru : ');readln(x[n].judul);
write('masukkan pengarangnya : ');readln(x[n].pengarang);
write('berapa exemplar : ');readln(x[n].stok);
begin
write('apakah akan menambah buku lagi ?<y/t> ');readln(ya);
if ya='y' then goto lagi;
end;
end;
procedure tambah_buku(var x:larik_buku);
var baru1,baru2:string;
ya:char;
label lagi,ulang;
begin
lagi:
writeln('menambah buku baru');
ulang:
write('masukkan judul buku baru : ');readln(baru1);
write('masukkan pengarangnya : ');readln(baru2);
for i:=1 to n do
begin
if (x[i].judul=baru1)and (x[i].pengarang=baru2) then
begin
ketemu:=true;
writeln('Judul tersebut sudah ada di perpus');goto ulang;
end;
end;
begin
inc(n);
x[n].judul:=baru1;
x[n].pengarang:=baru2;
write('berapa exemplar : ');readln(x[n].stok);
end;
begin
write('apakah akan menambah buku lagi ?<y/t> ');readln(ya);
if ya='y' then goto lagi;
end;
end;
procedure cetak_buku(var x:larik_buku);
begin
writeln('DAFTAR BUKU YANG ADA DI PERPUSTAKAAN ');
writeln('------------------------------------------------');
writeln('No Judul Pengarang Stok');
writeln('------------------------------------------------');
for i:=1 to n do
writeln(i,' ',x[i].judul:8,' ',x[i].pengarang:12,' ',x[i].stok:10);
writeln('------------------------------------------------');
end;
procedure cetak_pinjam(var x:larik_pinjam);
begin
writeln('DAFTAR PEMINJAM BUKU YANG PERPUSTAKAAN ');
writeln('-------------------------------------------------------------------------------');
writeln('No Peminjam Judul Buku Pengarang Tanggal pinjam');
writeln('-------------------------------------------------------------------------------');
for i:=1 to m do
writeln(i:3,' ',x[i].nama:10,' ',x[i].judulb:20,' ',x[i].pengarangb:10,' ',x[i].tglb:10,' ',x[i].blnb,' ',x[i].thnb);
writeln('-------------------------------------------------------------------------------');
end;
procedure pinjam_buku(var x:larik_buku);
var cari,cari2:string;
nb,ya,bln:string;
tgl,thn:integer;
pos:byte;
label lagi;
begin
cetak_buku(buk);
lagi:
write('masukkan judul buku yang akan dipinjam : ');readln(cari);
write('masukkan pengarang buku nya : ');readln(cari2);
{cek}
ketemu:=false;
for i:=1 to n do
if (x[i].judul=cari)and(x[i].pengarang=cari2) then begin pos:=i;ketemu:=true;end;
{jika judul ditemukan}
if (ketemu) and (x[pos].stok>0) then
begin
write('buku tersedia, masukkan nama anda : ');readln(nb);
write('masukkan tanggal pinjam : ');readln(tgl);
write('masukkan bulan pinjam : ');readln(bln);
write('masukkan tahun pinjam : ');readln(thn);
{memasukkan ke array pinjam}
inc(m);
dec(x[pos].stok);
pinj[m].nama:=nb;
pinj[m].judulb:=cari;
pinj[m].pengarangb:=cari2;
pinj[m].tglb:=tgl;
pinj[m].blnb:=bln;
pinj[m].thnb:=thn;
end
else
begin
writeln('maaf buku yang anda cari tidak ada');
write('apakah akan meminjam buku lain ?<y/t> ');readln(ya);
if ya='y' then goto lagi;
end;
end;
procedure kembali_buku(var x:larik_buku);
var kembali,nm,bulan:string;
tanggal,tahun:integer;
pos:byte;
label selesai;
begin
if m=0 then
begin writeln('Maaf tidak ada yang meminjam buku');goto selesai;end;
pos:=0;
writeln('Selamat datang di pengembalian buku ');
write('masukkan nama peminjam ');readln(nm);
write('masukkan judul buku yg kembali '); readln(kembali);
{menambahkan stok buku dg judul tsb}
for i:=1 to n do
begin
if (x[i].judul)=kembali then inc(x[i].stok);
end;
{menghapus record di daftar peminjam buku}
for i:=1 to m do
if (pinj[i].judulb=kembali) and (pinj[i].nama=nm) then pos:=i;
if pos<>0 then
begin
write('masukkan tanggal kembali : ');readln(tanggal);
write('masukkan bulan kembali : ');readln(bulan);
write('masukkan tahun kembali : ');readln(tahun);
writeln('judul ',kembali ,' dipinjam oleh ',nm,' sudah dikembalikan pada tanggal : ',tanggal,' ',bulan,' ',tahun);
{hapus dan geser}
for j:=pos to m-1 do pinj[j]:=pinj[j+1];
dec(m);
end
else writeln('maaf nama peminjam atau buku yang dikembalikan tidak benar');
selesai: end;
begin{utama}
repeat
begin
clrscr;
writeln('Pengelolaan buku Perpustakaan IST AKPRIND YOGYAKARTA');
writeln('0. Isi buku');
writeln('1. Tambah judul buku');
writeln('2. Cetak buku');
writeln('3. Pinjam buku');
writeln('4. Cetak peminjaman');
writeln('5. Pengembalian buku');
writeln('6. Selesai');
write('Pilihan anda ==> ');readln(pil);
case pil of
0: isi_buku(buk);
1: tambah_buku(buk);
2: if n=0 then writeln('daftar buku masih kosong') else cetak_buku(buk);
3: if n=0 then writeln('anda belum bisa meminjam buku') else pinjam_buku(buk);
4: if m=0 then writeln('tidak ada yang meminjam') else cetak_pinjam(pinj);
5: if m>0 then kembali_buku(buk) else writeln('maaf saat ini tidak ada yang sedang meminjam buku') ;
6: writeln('Terimakasih ');
end;
readln;
end
until(pil=6);
end.