program persewaan_Komik;
    {jangan lupa titik koma dan nama file tidak boleh pakai space}
    
    {library yang digunakan}
    uses crt, dos; {mengatur tampilan}
    
    {deklarasi record transaksi}
    type
    transaksi = record
     nama:string;
     nim:real;
     kodeBuku:integer;
     dP:word;
     mP:word;
     yP:word;
     dK:word;
     mK:word;
     yK:word;
     status:string;
    end;
    
    {deklarasi record buku komik}
     buku = record
     kodeBuku:integer;
     edisi:string;
     judul:string;
     tahun:integer;
     hargaSewa:integer;
     stok:integer;
    end;
    
    {deklarasi array}
    dataPelanggan = array [1..20] of transaksi;
    dataBuku = array[1..20] of buku;
    
    {dekarasi variable global}
    var
     p:dataPelanggan;
     b:dataBuku;
     lastBuku:integer;
     lastTransaksi:integer;
     indexBuku:integer;
     pilih:integer;
     i:integer;
    
    {daftar koleksi buku default}
    procedure daftarKomik();
    begin
     b[1].judul := 'Naruto Shipudden';
     b[1].kodeBuku := 310;
     b[1].tahun := 2011;
     b[1].edisi := '1-5';
     b[1].hargaSewa:=1000;
     b[1].stok:=1;
    
    b[2].judul := 'Samurai X';
     b[2].kodeBuku := 311;
     b[2].tahun := 2012;
     b[2].edisi := '6-10';
     b[2].hargaSewa:=1500;
     b[2].stok:=1;
    
    b[3].judul := 'Doremon';
     b[3].kodeBuku := 312;
     b[3].tahun := 2012;
     b[3].edisi := '11-20';
     b[3].hargaSewa:=1000;
     b[3].stok:=2;
    
    b[4].judul := 'fireTail';
     b[4].kodeBuku := 313;
     b[4].tahun := 2011;
     b[4].edisi := '51-60';
     b[4].hargaSewa:=1500;
     b[4].stok:=1;
    
    b[5].judul := 'Dragon Ball Z';
     b[5].kodeBuku := 314;
     b[5].tahun := 2012;
     b[5].edisi := '61-70';
     b[5].hargaSewa:=1000;
     b[5].stok:=2;
    
     b[6].judul := 'EX-men';
     b[6].kodeBuku := 315;
     b[6].tahun := 2012;
     b[6].edisi := '71-80';
     b[6].hargaSewa:=1000;
     b[6].stok:=1;
    
    b[7].judul := 'Kapten Stubasa';
     b[7].kodeBuku := 316;
     b[7].tahun := 2010;
     b[7].edisi := '41-60';
     b[7].hargaSewa:=2000;
     b[7].stok:=0;
    
    b[8].judul := 'Betmen';
     b[8].kodeBuku := 317;
     b[8].tahun := 2010;
     b[8].edisi := '61-80';
     b[8].hargaSewa:=1500;
     b[8].stok:=1;
    
    b[9].judul := 'One Piace';
     b[9].kodeBuku := 318;
     b[9].tahun := 2011;
     b[9].edisi := '90-100';
     b[9].hargaSewa:=2000;
     b[9].stok:=1;
    
    b[10].judul := 'Ben 10';
     b[10].kodeBuku := 319;
     b[10].tahun := 2011;
     b[10].edisi := '101-110';
     b[10].hargaSewa:=1000;
     b[10].stok:=2;
    end;
    
{daftar transaksi pelanggan dafault}
procedure daftarPelanggan();
begin
 p[1].nama:='Ariska';
 p[1].nim:=10030092;
 p[1].kodeBuku:=311;
 p[1].dP:=13;
 p[1].mP:=4;
 p[1].yP:=2012;
 p[1].dK:=16;
 p[1].mK:=4;
 p[1].yK:=2012;
 p[1].status:='Sdh Dikembalikn';
    
 p[2].nama:='Ahmad';
 p[2].nim:=10080023;
 p[2].kodeBuku:=313;
 p[2].dP:=16;
 p[2].mP:=4;
 p[2].yP:=2012;
 p[2].dK:=19;
 p[2].mK:=4;
 p[2].yK:=2012;
 p[2].status:='Sdh Dikembalikn';
 p[3].nama:='Imam Mahdi';
 p[3].nim:=10080011;
 p[3].kodeBuku:=314;
 p[3].dP:=18;
 p[3].mP:=4;
 p[3].yP:=2012;
 p[3].dK:=21;
 p[3].mK:=4;
 p[3].yK:=2012;
 p[3].status:='Blm Dikembalikn';
 p[4].nama:='Hanifah';
 p[4].nim:=10080001;
 p[4].kodeBuku:=319;
 p[4].dP:=24;
 p[4].mP:=4;
 p[4].yP:=2012;
 p[4].dK:=27;
 p[4].mK:=4;
 p[4].yK:=2012;
 p[4].status:='Blm Dikembalikn';
 p[5].nama:='Bambang';
 p[5].nim:=10080099;
 p[5].kodeBuku:=316;
 p[5].dP:=23;
 p[5].mP:=4;
 p[5].yP:=2012;
 p[5].dK:=26;
 p[5].mK:=04;
 p[5].yK:=2012;
 p[5].status:='Blm Dikembalikn';
 p[6].nama:='Muttaqin';
 p[6].nim:=10030021;
 p[6].kodeBuku:=315;
 p[6].dP:=25;
 p[6].mP:=4;
 p[6].yP:=2012;
 p[6].dK:=28;
 p[6].mK:=04;
 p[6].yK:=2012;
 p[6].status:='Blm Dikembalikn';
    
 p[7].nama:='Suryan';
 p[7].nim:=10030004;
 p[7].kodeBuku:=312;
 p[7].dP:=26;
 p[7].mP:=4;
 p[7].yP:=2012;
 p[7].dK:=29;
 p[7].mK:=04;
 p[7].yK:=2012;
 p[7].status:='Blm Dikembalikn';
end;
{input data transaksi}
procedure inputTransaksi();
var
 nama:string;
 nim:real;
 y,m,d,hari:word;
 yK,mK,dK:word;
 jumlah:integer;
 kodeBuku:integer;
 ulangi, ketemu, pernahPinjam : Boolean;
 n:integer;
begin
 getdate(y,m,d,hari); {input tanggal hari ini}
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' Transaksi Peminjaman Komik ');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln();
 write(' Masukkan nama : '); readln(nama);
 write(' NIM : '); readln(nim);
 writeln();
 writeln(' Tanggal pinjam : ',d,'/',m,'/',y);
 dK:= d + 3; {batas pinjam cuma tiga hari}
 if dk >= 30 then {jika pinjam di akhir bulan}
 begin
 dk := dk-30+1;
 mK := m+1;
 end;
 yK := y;{ tahun peminjaman dan tahun sekarang sama}
 writeln(' Tanggal kembali: ',dK,'/',mK,'/',yK);
 writeln();
 write('Berapa banyak buku yang dipinjam : ');readln(jumlah);
 writeln();
 {Buku - buku yang akan dipijam}
 for i:= 1 to jumlah do
 begin
 repeat
 ulangi := false;
 ketemu := false;
 pernahPinjam:= false;
 {Input kode buku}
 write(i,'. Kode buku : ');readln(kodeBuku);
 {mengecek apakah buku pernah dipijam}
 for n:= 1 to (lastTransaksi-1) do
 begin
 if p[n].nim = nim then
 begin
 if p[n].kodeBuku = kodeBuku then
 begin
 pernahPinjam := true;
 end
 end
 end;
 {mengecek apakah buku yang dipinjam ada}
     for n:= 1 to (lastBuku-1) do
 begin
 if (b[n].kodeBuku = kodeBuku) and (b[n].stok <> 0) then
 begin
 p[lastTransaksi].kodeBuku := kodeBuku;
 b[n].stok := b[n].stok - 1;
 ketemu := true;
 end
 end;
 {jika buku tidak ada di data base atau stok buku habis}
 if ketemu <> true then
 begin
 ulangi := true;
 writeln(' Kode Buku Tidak Dikenali atau Stok Habis!! ');
 writeln();
 end;
 {jika sebelumnya pernah transaksi buku}
 if pernahPinjam = true then
 begin
 ulangi := true;
 writeln(' Pelanggan Pernah Pinjam Sebelumnya!!');
 writeln();
 end;
 until ulangi = false;
 {penyalinan nama, nim, tanggal pinjam dan tanggal ke database transaksi}
 p[lastTransaksi].nama := nama;
 p[lastTransaksi].nim := nim;
 p[lastTransaksi].dP:=d;
 p[lastTransaksi].mP:=m;
 p[lastTransaksi].yP:=y;
 p[lastTransaksi].dK:=dK;
 p[lastTransaksi].mK:=mK;
 p[lastTransaksi].yK:=yK;
 p[lastTransaksi].status:='Blm Dikembalikn';
 lastTransaksi := lastTransaksi + 1;
 end;
 writeln();
 writeln(' Transaksi Berhasil!! ');
 writeln();
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
end;
{tampilkan data}
procedure tampilkanData();
var
 {variable local}
 pilih2:integer;
 baris:integer;
begin
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' Data yang Akan Dilihat ');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' 1. Persediaan Buku');
 writeln(' 2. Daftar Transaksi Pelanggan');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 write(' Pilih[1/2]: '); readln(pilih2);
 {jika yang dipiliha adalah persediaan buku}
 if pilih2 = 1 then
 begin
 clrscr;
 writeln(' Daftar Semua Buku');
 writeln('+---------------------------------------------------------------+');
 writeln('| Kode Buku | Judul Buku | Edisi | Tahun | harga sewa | stok |');
 writeln('+---------------------------------------------------------------+');
 {mencetak semua data yang ada di database koleksi buku}
 for i:= 1 to (lastBuku-1) do
 begin
 write('| ',b[i].kodeBuku);
 write('| ',b[i].judul);
 write('| ',b[i].edisi);
 write('| ',b[i].tahun);
 writeln('| ',b[i].hargaSewa);
 writeln('| ',b[i].stok);
 writeln('|');
 baris := baris+1;
 end;
 writeln('+---------------------------------------------------------------+');
 {jika tidak memilih 1 }
 end else
 begin
 clrscr;
 writeln(' Daftar Semua Transaksi ');
 writeln('+-----------------------------------------------------------------------------+');
 writeln('| Nim | Nama | K. Buku | Tgl Pinjam | Tgl Kembali | Status |');
 writeln('+-----------------------------------------------------------------------------+');
 {mencetak semua data uang ada di database transaksi}
 for i:= 1 to (lastTransaksi-1) do
 begin
 gotoxy(1,baris); write('| ',p[i].nim:0:0);
 gotoxy(12,baris); write('| ',p[i].nama);
 gotoxy(24,baris);write('| ',p[i].kodeBuku);
 gotoxy(34,baris);write('| ',p[i].dP,'/',p[i].mP,'/',p[i].yP);
 gotoxy(47,baris);write('| ',p[i].dK,'/',p[i].mK,'/',p[i].yK);
 gotoxy(61,baris);write('| ',p[i].status);
 gotoxy(79,baris);writeln('|');
 baris := baris+1;
 end;
 writeln('+-----------------------------------------------------------------------------+');
 end;
 end;
{pemgembalian buku}
procedure pengembalianBuku();
var
 pilih2:integer;
 nim:real;
 nama:string;
 indexTemu:integer;
 ketemu:Boolean;
 temu:array[1..20] of integer;
 baris:integer;
 n:integer;
 kembalikan:integer;
 hari:integer;
 d,m,y, dow:word;
 bayar, denda:real;
 totalBayar:real;
begin
 getDate(y,m,d,dow); {input tanggal sekarang}
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' Pengembalian Buku');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' Pencarian berdasarkan :');
 writeln(' 1. NIM ');
 writeln(' 2. Nama ');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 write(' Pilih [1/2]: ');readln(pilih2);
 writeln();
 {jika memilih nim}
 if pilih2 = 1 then
 begin
 write(' Masukkan Nim : ');readln(nim);
 {mengecek di databese transaksi apakah ada nim tersebut}
 for i:= 1 to (lastTransaksi-1) do
 begin
    
     {jika ada}
     if p[i].nim = nim then
     begin
     ketemu:= true;
     temu[indexTemu]:=i;
     nama:=p[i].nama;
     indexTemu:= indexTemu + 1;
     end
    
     end;
    
     end else
     begin
     write(' Masukkan Nama : ');readln(nama);
     {mengecek apakah nama tersebut ada di database transaksi}
     for i:= 1 to (lastTransaksi-1) do
     begin
    
     {jika ada}
     if p[i].nama = nama then
     begin
     ketemu:= true;
     temu[indexTemu]:=i;
     nama:=p[i].nama;
     indexTemu:= indexTemu + 1;
     end
    
     end;
    
     end;
    
     if ketemu = true then
     begin
     {proses(index);}
     clrscr;
     writeln(' Pengembalian Buku (',nama,')');
     writeln('+---------------------------------------------------------------------+');
     writeln('| No. | Kode Buku | Judul Buku | Tgl Kembali | Status |');
     writeln('+---------------------------------------------------------------------+');
    
     {menampilkan semua data yang pernah dipinjam oleh pelanggan}
     for i:= 1 to (indexTemu-1) do
     begin
     write('| ',i);
     write('| ',p[temu[i]].kodeBuku);
    
     {melakukan relasi ke databese buku}
     for n:= 1 to (lastBuku-1) do
     begin
     if b[n].kodeBuku = p[temu[i]].kodeBuku then
     begin
     write('| ',b[n].judul);
     end
    
     end;
    
     write('| ',p[temu[i]].dK,'/',p[temu[i]].mK,'/',p[temu[i]].yK);
     write('| ',p[temu[i]].status);
     writeln('|');
     baris := baris+1;
     end;
    
     writeln('+---------------------------------------------------------------------+');
     writeln('| Pilih 0 untuk Keluar |');
     writeln('+---------------------------------------------------------------------+');
    
     {melakukan perlangan jika tidak menekan nol atau angka yang tidak sesuai}
     repeat
     write('Pilih daftar no. yang akan dikembalikan : ');readln(kembalikan);
     writeln();
     hari := 0;
     denda := 0;
     bayar := 0;
    
     {jika pelnaggan nekan nol atau melebihi angka yang ditentukan}
     if (kembalikan <> 0) and (kembalikan <indexTemu) then
     begin
    
     {jika buku tersebut belum dikembalikan}
     if p[temu[kembalikan]].status <> 'Sdh Dikembalikn' then
     begin
     {menghitung denda}
     hari:= 0;
    
     {mengecek apakah bulan dan tahun sama}
     if (m = p[temu[kembalikan]].mK) and (y = p[temu[kembalikan]].yK) then
     begin
     hari := d - p[temu[kembalikan]].dK;{jarak hari}
     {mengecek apakah tahun pinjam dan tahun sekarang sama}
     end else if (m <> p[temu[kembalikan]].mK) and (y = p[temu[kembalikan]].yK) then
     begin
     hari := (m - p[temu[kembalikan]].mK)*30; { jarak bulan}
     hari := hari - p[temu[kembalikan]].dK - (30 - d); {jarak bulan - jarak hari}
     end;
    
     {jika mengembalikan sebelum hari ditentukan}
     if hari<0 then
     begin
     hari := 0;
     end;
     denda := hari * 1000;
     writeln(' Terlambat : ',hari,' Hari');
    
     {mencari harga yang ada di database buku}
     for i:= 1 to (lastBuku-1) do
     begin
    
     {jika kode buku sama}
     if p[temu[kembalikan]].kodeBuku = b[i].kodeBuku then
     begin
     bayar:= b[i].hargaSewa+denda;
     b[i].stok := b[i].stok + 1 ;
     writeln(' Harga Sewa : Rp ',b[i].hargaSewa,',00');
     writeln(' Denda : Rp ',denda:0:0,',00');
     writeln(' Jumlah : Rp ',bayar:0:0,',00');
     totalBayar := totalbayar + bayar;
     end
     end;
    
     {menyesuaikan status dan tanggal kembali}
     p[temu[kembalikan]].status:= 'Sdh Dikembalikn';
     p[temu[kembalikan]].dK:=d;
     p[temu[kembalikan]].mK:=m;
     p[temu[kembalikan]].yK:=y;
    
     writeln();
     writeln(' Total Sementara adalah : Rp ',totalBayar:0:0,',00');
     writeln();
     end else
     begin
     writeln(' Buku sudah DiKembalikan!!');
     writeln();
     end;
     {jika menekan nol dan menekan angka yang tidak sesuai}
     end else
     begin
     kembalikan := 0;
     end;
     until kembalikan = 0;
     {jika nim atau nama tidak terdapat di databese transaksi}
     end else
     begin
     writeln(' Maaf, data tidak ditemukan!!');
     writeln();
     end;
     writeln();
     writeln(' Jadi, Total yang harus dibayar adalah : Rp ',totalBayar:0:0,',00');
     writeln();
    end;
    
    {hapus data}
    procedure hapusData();
    var
     n:integer;
     baris:integer;
     hapus:integer;
    
    begin
     {melakukan perulangan selama tidak menekan 0}
     repeat
     baris:= 5;
     clrscr;
     writeln(' Daftar Semua Transaksi ');
     writeln('+--------------------------------------------------------------------------+');
     writeln('| No.| NIM | Nama | Judul buku yang dipinjam | Status |');
     writeln('+--------------------------------------------------------------------------+');
    
     {menampilkan semua data yang ada di transaksi data}
     for i:= 1 to (lastTransaksi-1) do
     begin
     gotoxy(1,baris); write('| ',i);
     gotoxy(6,baris); write('| ',p[i].nim:0:0);
     gotoxy(18,baris); write('| ',p[i].nama);
    
     {melakukan relasi untuk mencari nama buku}
     for n:= 1 to (lastBuku-1) do
     begin
     if p[i].kodeBuku = b[n].kodeBuku then
     begin
     gotoxy(31,baris);write('| ',b[n].judul);
     end;
     end;
     gotoxy(58,baris);write('| ',p[i].status);
     gotoxy(76,baris);writeln('|');
     baris := baris+1;
     end;
     writeln('+--------------------------------------------------------------------------+');
     writeln('| Pilih 0 untuk Batalkan Pengahapusan |');
     writeln('+--------------------------------------------------------------------------+');
     write(' Pilih No transaksi yang akan dihapus : ');readln(hapus);
    
     {jika tidak menekan nol}
     if hapus<>0 then
     begin
    
     {menumpuk data yang akan dihapus dengan data sebelumnya}
     for i:= hapus to (lastTransaksi-2) do
     begin
     p[i].nama:=p[i+1].nama;
     p[i].nim:=p[i+1].nim;
     p[i].kodeBuku:=p[i+1].kodeBuku;
     p[i].dP:=p[i+1].dP;
     p[i].mP:=p[i+1].mP;
     p[i].yP:=p[i+1].yP;
     p[i].dK:=p[i+1].dK;
     p[i].mK:=p[i+1].mK;
     p[i].yK:=p[i+1].yK;
     p[i].status:=p[i+1].status;
     end;
    
     lastTransaksi := lastTransaksi - 1;
     writeln();
     writeln(' Hapus Data Transaksi Berhasil!!');
     writeln();
     end;
    
     until hapus = 0;
    end;
    
    {untuk menambah daftar buku}
    procedure tambahBuku();
    var
     {variable local}
     tambah:integer;
    
    begin
     writeln();
     writeln(' Tambah Buku');
     writeln();
     write(' Berapa Buku yang akan ditambah: ');readln(tambah);
    
     {melakukan perulangan sebanyak jumlah yang ditambahkan}
     for i:= 1 to tambah do
     begin
     writeln();
     writeln(' No. ',i);
     writeln(' Kode Buku : ',indexBuku);
     b[lastBuku].kodeBuku:=indexBuku;
     indexBuku:= indexBuku + 1;
     write(' Judul Buku : ');readln(b[lastBuku].judul);
     write(' Edisi : ');readln(b[lastBuku].edisi);
     write(' Tahun : ');readln(b[lastBuku].tahun);
     write(' Harga Sewa : ');readln(b[lastBuku].hargaSewa);
     write(' Stok : ');readln(b[lastBuku].stok);
     lastBuku := lastBuku+1;
     end;
     writeln();
     writeln(' Tambah Buku Berhasil!!');
     writeln();
     writeln('tekan enter untuk melanjutkan...');
    end;
    
    {melakukan pembaruan harga dan stok buku}
    procedure updateBuku();
    var
     {variable local}
     baris:integer;
     index:integer;
    
    begin
     repeat
     baris:=5;
     clrscr;
     writeln(' Update Harga dan stok Buku ');
     writeln('+---------------------------------------------------+');
     writeln('| no. Buku | Judul Buku | harga sewa | stok |');
     writeln('+---------------------------------------------------+');
    
     {menampilkan semua daftar buku}
     for i:= 1 to (lastBuku-1) do
     begin
     gotoxy(1,baris);write('| ',i);
     gotoxy(12,baris);write('| ',b[i].judul);
     gotoxy(32,baris);write('| ',b[i].hargaSewa);
     gotoxy(45,baris);write('| ',b[i].stok);
     gotoxy(53,baris);writeln('|');
     baris := baris+1;
     end;
    
     writeln('+---------------------------------------------------+');
     writeln('| Pilih 0 untuk membatalkan |');
     writeln('+---------------------------------------------------+');
     write(' Masukkan no. Buku : ');readln(index);
    
     {jika tidak menekan nol}
     if index <> 0 then
     begin
     writeln(' Judul Buku : ',b[index].judul);
     writeln(' Harga Sewa Semula : ',b[index].hargaSewa);
     write(' Harga Sewa Baru : ');readln(b[index].hargaSewa);
     writeln(' Stok Semula : ',b[index].stok);
     write(' Stok Baru : ');readln(b[index].stok);
     writeln();
     writeln(' Update Berhasil!!');
     writeln();
     end else
     begin
     writeln();
     writeln(' Update Selesai!!');
     writeln();
     end;
    
     writeln('tekan enter untuk melanjutkan...');
     until index=0;
    end;
    
    procedure hapusBuku();
    var
     {variable local}
     baris:integer;
     hapus:integer;
    
    begin
     repeat
     baris:=5;
     clrscr;
     writeln(' Hapus Buku ');
     writeln('+-------------------------------------+');
     writeln('| No. | Kode Buku | Judul Buku |');
     writeln('+-------------------------------------+');
    
     {menampilkan semua daftar buku}
     for i:= 1 to (lastBuku-1) do
     begin
 gotoxy(1,baris);write('| ',i);
 gotoxy(7,baris);write('| ',b[i].kodeBuku);
 gotoxy(19,baris);write('| ',b[i].judul);
 gotoxy(39,baris);writeln('|');
 baris := baris+1;
 end;
 writeln('+-------------------------------------+');
 writeln('| Tekan 0 untuk membatalkan |');
 writeln('+-------------------------------------+');
 write(' No. Buku yang akan dihapus : ');readln(hapus);
 {jika tidak menekan nol}
 if hapus <> 0 then
 begin
 {menimpa daftar lama dengan daftar baru}
 for i:= hapus to (lastBuku-2) do
 begin
 b[i].kodeBuku := b[i+1].kodeBuku ;
 b[i].judul:= b[i+1].judul;
 b[i].edisi := b[i+1].edisi;
 b[i].tahun:= b[i+1].tahun;
 b[i].hargaSewa := b[i+1].hargaSewa;
 b[i].stok := b[i+1].stok;
 end;
 lastBuku := lastBuku-1;
 writeln();
 writeln(' Hapus Berhasil!!');
 writeln();
 end else
 begin
 writeln();
 writeln(' Hapus Selesai!!');
 writeln();
 end;
 writeln('tekan enter untuk melanjutkan...');
 until hapus=0;
end;
{menampilkan semua daftar koleksi buku}
procedure lihatBuku();
var
 baris:integer;
begin
 clrscr;
 writeln(' Daftar Buku');
 writeln('+---------------------------------------------------------------+');
 writeln('| Kode Buku | Judul Buku | Edisi | Tahun | harga sewa | stok |');
 writeln('+---------------------------------------------------------------+');
 for i:= 1 to (lastBuku-1) do
 begin
 gotoxy(1,baris);write('| ',b[i].kodeBuku);
 gotoxy(13,baris);write('| ',b[i].judul);
 gotoxy(27,baris);write('| ',b[i].edisi);
 gotoxy(37,baris);write('| ',b[i].tahun);
 gotoxy(45,baris);writeln('| ',b[i].hargaSewa);
 gotoxy(58,baris);writeln('| ',b[i].stok);
 gotoxy(65,baris);writeln('|');
 baris := baris+1;
 end;
 writeln('+---------------------------------------------------------------+');
 writeln('tekan enter untuk melanjutkan...');
end;
{edit buku}
procedure editBuku();
var
 pilih3:integer;
begin
 repeat
 clrscr;
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' Edit Daftar Buku ');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' 1. Tambah Koleksi Buku ');
 writeln(' 2. update harga dan stok Buku ');
 writeln(' 3. Hapus Buku');
 writeln(' 4. Lihat daftar Buku ');
 writeln(' 5. Kembali Ke Memu Utama ');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 write('Pilih [1-5]: ');readln(pilih3);
 case pilih3 of
 1:
 begin
 tambahBuku();
 readln;
 end;
 2:
 begin
 updateBuku();
 readln;
 end;
 3:
 begin
 hapusBuku();
 readln;
 end;
 4:
 begin
 lihatBuku();
 readln;
 end;
 5:
 end;
 until pilih3 = 5;
end;
{keluar}
procedure keluar();
begin
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' Sekian dan trimakasih');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' Aplikasi ini disusun oleh :');
 writeln(' 1. Ariska Hidayat (10030092)');
 writeln(' 2. Muttaqin (10030021)');
 writeln(' 3. Suryan Dwi Saputro(10030004)');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
    end;
{ ke menu utama aplikasi}
procedure menu();
begin
 writeln();
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' Persewaan Buku Komik Terlengkap');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 writeln(' 1. Transaksi peminjaman ');
 writeln(' 2. Tampilkan Data ');
 writeln(' 3. Pengembalian Buku ');
 writeln(' 4. Hapus data Peminjam ');
 writeln(' 5. Edit koleksi komik');
 writeln(' 6. Keluar ');
 writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 write(' Pilih[1-6]: '); readln(pilih);
 writeln();
 case pilih of
 1:
 inputTransaksi();
 2:
 tampilkanData();
 3:
 pengembalianBuku();
 4:
 hapusData();
 5:
 editBuku();
 6:
 keluar();
 end;
end;
{main}
begin
 daftarKomik();
 daftarPelanggan();
 repeat
 clrscr;
 menu();
 writeln('tekan enter untuk melanjutkan...');
 readln;
 until pilih = 6; {berhenti jika pilih bernilai 6}
end.