ATA : Automatic Teller Application

December 26, 2008

12 min read.

ATA merupakan software yang dibuat menggunakan bahasa pemrograman pascal. Program ini berfungsi seperti Applikasi yang ada di ATM. Untuk posting ini saya mencoba menjelaskan program ini yang masih dalam versi alpha, yang masih ada beberapa bug yang belum fixed.


ATA yang saya buat menggunakan satuan Rp50.000, program ini menyimpan data kedalam file, data yang disimpan berupa data account nasabah, transaksi, dan sistem, data account disimpan dalam file ACCOUNT.NFS, data transaksi disimpan di TRANSAC.NFS, dan sistem di file SYSTEM.NFS.




Program ATA terdiri dari empat file, 1 file program pascal utama(ATA.PAS) dan 3 unit. Tiga unit tersebut yaitu INTERFC.PAS (unit ini kebanyakan mengurusi tampilan interface ke user), CONN.PAS (unit untuk mengurusi data), GLOBAL.PAS(unit dimana variable global berada, untuk memudahkan perpindahan data antar unit).

file 1: ATA.PAS

program ata;
{program ata automatic teller application
niar
fhatmi
sakti }
uses crt,interfc,conn;


begin
clrscr;
mnawal;
putus;
end.
file 2: INTERFC.PAS
unit interfc;

interface
uses crt,global,conn;{meload unit yang diperlukan, unit global digunakan penggunaan variabel global}
var tchr:char;
uang:real;
procedure mnawal;{procedure menampilkan menu awal}
procedure mnpass;{procedure tampilan password}
procedure mnuser;{menu untuk user}
procedure mnothert;{menu transaksi lain untuk user}
procedure mnpembayaran;{menu transaksi pembayaran user}
procedure mnadmin;{menu admin}

implementation
var
lmn:array[1..6] of string;
tx,ty:integer;
norek:array[1..13] of char;{menyimpan norek sementara}
pin:array[1..4] of char;{menyimpan pin sementara}

procedure validstr(var out:string;jd:integer);
{procedure untuk validasi input}
begin
tx:=wherex;
ty:=wherey;
readln(out);
if length(out)=0 then
begin
gotoxy(tx,ty);
clreol;
validstr(out,jd);
end;
if jd<>0 then
if length(out)<>jd then
begin
gotoxy(tx,ty);
clreol;
validstr(out,jd);
end;
end;
procedure validstrnum(var out:string;jd:integer);
{procedure validasi input yang berupa bilangan dengan panjang jd}
var code:integer;
treal:real;
begin
tx:=wherex;
ty:=wherey;
readln(out);
val(out,treal,code);
for i:=1 to jd do
if out[i]=‘.’ then
begin
gotoxy(tx,ty);
clreol;
validstrnum(out,jd);
end;
if code<>0 then
begin
gotoxy(tx,ty);
clreol;
validstrnum(out,jd);
end;
if length(out)=0 then
begin
gotoxy(tx,ty);
clreol;
validstrnum(out,jd);
end;
if jd<>0 then
if length(out)<>jd then
begin
gotoxy(tx,ty);
clreol;
validstrnum(out,jd);
end;
end;
procedure validnum(var out:real);
{procedure validasi input berupa bilangan}
var code:integer;
treal:real;
tstring:string;
begin
tx:=wherex;
ty:=wherey;
readln(tstring);
for i:=1 to length(tstring) do
if tinput[i]=‘.’ then
begin
gotoxy(tx,ty);
clreol;
validnum(out);
end;
val(tstring,treal,code);
if code<>0 then
begin
gotoxy(tx,ty);
clreol;
validnum(out);
end;
out:=treal;
end;

procedure itanggal;
{validasi inputan tanggal}
var tanggal,bulan,tahun,code:integer;
kabisat,vtgl:boolean;
begin
tx:=wherex;
ty:=wherey;
readln(tgllhr);
val(tgllhr[1]+tgllhr[2],tanggal,code);
if (code<>0) or (tanggal<0) or (tanggal>31) or (tgllhr[3]<>’/‘) or (tgllhr[6]<>’/‘) then
begin
gotoxy(tx,ty);
clreol;
itanggal;
end;
val(tgllhr[4]+tgllhr[5],bulan,code);
if (code<>0) or (bulan<0) or (bulan>12) then
begin
gotoxy(tx,ty);
clreol;
itanggal;
end;
val(tgllhr[7]+tgllhr[8]+tgllhr[9]+tgllhr[10],tahun,code);
if (code<>0) or (tahun<gettahun-150) or (gettahun-tahun<17) then
begin
gotoxy(tx,ty);
clreol;
itanggal;
end;
if tahun mod 4 = 0 then
begin
kabisat:=true;
if tahun mod 100 = 0 then
if tahun mod 400 <> 0 then kabisat:=false;
end
else
kabisat:=false;
vtgl:=false;
case bulan of
1,3,5,7,8,10,12:vtgl:=true;
2:begin
if kabisat then
begin
if tanggal<29 then vtgl:=true;
end
else
if tanggal<28 then vtgl:=true;
end;
4,6,9,11:if tanggal<30 then vtgl:=true;

end;
if not vtgl then
begin
gotoxy(tx,ty);
clreol;
itanggal;
end;
end;

procedure setjendela;
{procedure untuk mensetting jendela sesuai settingan}
begin
window(5,3,75,22);
end;

procedure unsetjendela;
{procedure untuk mensetting jendela menjadi normal}
begin
window(1,1,80,25);
end;

procedure border;
{procedure untuk membuat bingkai}
begin
clrscr;
write(‘É’);for i:=1 to 78 do write(‘Í’);write(‘»’);
for j:=1 to 22 do
begin
write(‘º’);for i:=1 to 78 do write(’ ‘);write(‘º’);
end;
write(‘È’);for i:=1 to 78 do write(‘Í’);write(‘¼’);
end;

procedure clogo;
{procedure membuat logo}
begin
gotoxy(20,3);write(’ * ************ *‘);
gotoxy(20,4);write(’ *** ************ ***‘);
gotoxy(20,5);write(’ ***** ************ *****‘);
gotoxy(20,6);write(’ ******* **** *******‘);
gotoxy(20,7);write(’ **** **** **** **** ****‘);
gotoxy(20,8);write(’ **** **** **** **** ****‘);
gotoxy(20,9);write(’ ************* **** **********’);
gotoxy(20,10);write(’
* **** **** **** ***’);

end;

procedure mnawal;
begin
try:=1;
border;
clogo;
gotoxy(20,12);write(’ SELAMAT DATANG’);
gotoxy(20,13);write(’ MASUKKAN NOMOR REKENING ANDA’);
window(33,15,46,15);
i:=0;
repeat
tchr:=readkey;
if ord(tchr)=27 then
begin
putus;
halt;
end;
if ((ord(tchr)>=48) and (ord(tchr)<=57)) then
begin
if i<13 then
begin
inc(i);
write(tchr);
norek[i]:=tchr;
end;
end;
if (ord(tchr)=8) then
begin
if i>=1 then
begin
norek[i]:=’ ‘;
dec(i);
gotoxy(wherex-1,wherey);write(’ ‘);
gotoxy(wherex-1,wherey);
end;
end;
until (tchr=#13) and (i=13);
unsetjendela;
if norek=‘9999999999991’ then mnpass;
if (cariac(norek)) then
begin
if tdataac[1].block then mnawal;
mnpass;
end
else
mnawal;
end;

procedure mnpass;
begin
border;
clogo;
gotoxy(20,12);write(’ MASUKKAN PIN ANDA :‘);
gotoxy(20,13);write(’ HATI-HATI DALAM MEMASUKAN PIN’);
window(38,15,42,15);
i:=0;
repeat
tchr:=readkey;
if ((ord(tchr)>=48) and (ord(tchr)<=57)) then
begin
if i<4 then
begin
inc(i);
write(’
’);
pin[i]:=tchr;
end;
end;
if (ord(tchr)=8) then
begin
if i>=1 then
begin
pin[i]:=’ ‘;
dec(i);
gotoxy(wherex-1,wherey);write(’ ‘);
gotoxy(wherex-1,wherey);
end;
end;
until (tchr=#13) and (i=4);
unsetjendela;
if norek=‘9999999999991’ then{no rek. khusus admin : 9999999999991 dengan pin : 1234}
if pin=‘1234’ then mnadmin else mnawal
else
begin
inc(try);
if try>3 then{jika gagal selama 3x maka akan diblokir}
begin
clrscr;
block(norek);
gotoxy(40-(35 div 2),12);write(‘NOMOR REKENING ANDA SUDAH DI BLOKIR’);
delay(900);
mnawal;
end;
if pin<>tdataac[1].pin then mnpass;
mnuser;
end;
end;

procedure mnpilihan(mn:array of string);
{procedure untuk membuat label menu}
begin
border;
gotoxy(3,5);write(‘7>’,mn[0]);
gotoxy(3,10);write(‘4>’,mn[1]);
gotoxy(3,15);write(‘1>’,mn[2]);
gotoxy(77-length(mn[3]),5);write(mn[3],’<9’);
gotoxy(77-length(mn[4]),10);write(mn[4],’<6’);
gotoxy(77-length(mn[5]),15);write(mn[5],’<3’);

end;

procedure tunggub;
{procedure yang digunakan untuk membuat tampilan proses}
begin
gotoxy(17,12);
write(‘MOHON TUNGGU PROSES TRANSAKSI SEDANG BERJALAN…’);
delay(900);
gotoxy(28,13);
write(‘PROSES TRANSAKSI BERHASIL’);
delay(200);
gotoxy(28,14);
end;

procedure error(pesan:string);
{procedure menampilkan pesan error}
begin
textcolor(red);
gotoxy(40-(length(pesan) div 2),12);
write(pesan);
textcolor(white);
delay(900);
end;

procedure mnuser;{ menu user}
begin
lmn[1]:=‘50.000’;lmn[2]:=‘100.000’;lmn[3]:=‘150.000’;
lmn[4]:=‘PENARIKAN JUMLAH LAIN’;lmn[5]:=‘TRANSAKSI LAIN’;
lmn[6]:=‘KELUAR’;
mnpilihan(lmn);{membuat label menu}
repeat
tchr:=readkey;
case tchr of
{1} #49:begin
border;
setjendela;
writeln(‘PENARIKAN 150.000’);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
if (tdataac[1].balance-150000)>50000 then
begin
if transaksi(‘ATM’,150000,‘-’) then
begin
tunggub;
write(‘SILAHKAN AMBIL UANG ANDA’);
end
else
error(‘UANG HABIS’);
end
else
error(‘UANG ANDA TIDAK MENCUKUPI’);
readln;
unsetjendela;
mnuser;
end;
{4} #52:begin
border;
setjendela;
writeln(‘PENARIKAN 100.000’);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
if (tdataac[1].balance-100000)>50000 then
begin
if transaksi(‘ATM’,100000,‘-’) then
begin
tunggub;
write(‘SILAHKAN AMBIL UANG ANDA’);
end
else
error(‘UANG HABIS’);
end
else
error(‘UANG ANDA TIDAK MENCUKUPI’);
readln;
unsetjendela;
mnuser;
end;
{7} #55:begin
border;
setjendela;
writeln(‘PENARIKAN 50.000’);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
if (tdataac[1].balance-50000)>50000 then
begin
if transaksi(‘ATM’,50000,‘-’) then
begin
tunggub;
write(‘SILAHKAN AMBIL UANG ANDA’);
end
else
error(‘UANG HABIS’);
end
else
error(‘UANG ANDA TIDAK MENCUKUPI’);
readln;
unsetjendela;
mnuser;
end;
{9} #57:begin;
border;
setjendela;
writeln(‘PENARIKAN JUMLAH LAIN’);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
write(‘JUMLAH UANG (RP) : ‘);validnum(uang);{readln(uang);}
if ((tdataac[1].balance-uang)>50000) and (round(uang) mod 50000 = 0) and (uang <=5000000) then
begin
if transaksi(‘ATM’,uang,‘-’) then
begin
tunggub;
write(‘SILAHKAN AMBIL UANG ANDA’);
end
else
error(‘UANG HABIS’);
end
else
error(‘UANG ANDA TIDAK MENCUKUPI ATAU BUKAN KELIPATAN 50000’);
readln;
unsetjendela;
mnuser;
end;
{6} #54:mnothert;
end
until tchr=#51;
mnawal;

end;

procedure pagetrnacc(n:integer);
{procedure yang digunakan untuk menuliskan histori transaksi per account ke dalam tabel}
begin
n:=(n*12)-12;
for i:=1 to 12 do
begin
{penghapusan}
gotoxy(2,(5+i));write(’ ‘);
gotoxy(16,(5+i));write(’ ‘);
gotoxy(29,(5+i));write(’ ‘);
gotoxy(43,(5+i));write(’ ‘);
gotoxy(52,(5+i));write(’ ‘);

{penulisan}
gotoxy(2,(5+i));write(tdatatrn[n+i].norek);
gotoxy(16,(5+i));write(tdatatrn[n+i].jenis);
gotoxy(29,(5+i));write(tdatatrn[n+i].tujuan);
gotoxy(43,(5+i));write(tdatatrn[n+i].jml:0:0);
gotoxy(52,(5+i));write(tdatatrn[n+i].dnt);
end;
end;

procedure backup;
{procedure untuk mem backup data account yang aktif ke variabel sementara}
begin
snorek:=tdataac[1].norek;
spin:=tdataac[1].pin;
namal:=tdataac[1].namal;
tgllhr:=tdataac[1].tgllhr;
alamat:=tdataac[1].alamat;
notelp:=tdataac[1].notelp;
balance:=tdataac[1].balance;
tblock:=tdataac[1].block;
end;

procedure mnothert;{menu transaksi lain user}
var knav:char;
begin
lmn[1]:=‘CEK SALDO’;lmn[2]:=‘TRANSFER’;lmn[3]:=‘PEMBAYARAN’;
lmn[4]:=‘GANTI PIN’;lmn[5]:=‘LIHAT LOG TRANSAKSI’;lmn[6]:=‘KEMBALI’;
mnpilihan(lmn);{membuat label menu transaksi lain}
repeat
tchr:=readkey;
case tchr of
{1} #49:mnpembayaran;{ ke menu pembayaran}

{4} #52:begin
border;
setjendela;
backup;
writeln(‘TRANSFER’);
writeln(‘ÄÄÄÄÄÄÄÄÄ’);
write(‘MASUKAN NO. REKENING TUJUAN : ‘);
validstrnum(tinput,13);{input menggunakan validasi}
write(‘MASUKAN JUMLAH NOMINAL (RP) : ‘);
validnum(uang);
if tinput=snorek then
begin
writeln(‘ANDA TIDAK BISA MELAKUKAN TRANSFER KE REKENING ANDA SENDIRI’);
readln;
unsetjendela;
mnothert;
end;
if balance-uang<50000 then
begin
writeln(‘UANG ANDA TIDAK MENCUKUPI UNTUK MELAKUKAN TRANSFER’);
readln;
unsetjendela;
mnothert;
end;
if (uang<50000) or (uang>5000000) then
begin
writeln(‘NOMINAL TRANSFER HARUS DIANTARA 50000 DAN 5000000’);
readln;
unsetjendela;
mnothert;
end;
writeln;
if cariac(tinput) then
begin
writeln(‘APAKAH ANDA YAKIN AKAN MENGIRIM UANG SEJUMLAH ‘,uang:0:2);
write(‘KEPADA ‘,tdataac[1].namal,‘? (Y) UNTUK SETUJU : ‘);
readln(tchr);
if upcase(tchr)=‘Y’ then
begin
if transaksi(‘TRANSFER’,uang,tinput) then
begin
tunggub;
write(‘TRANSFER UANG BERHASIL’);
end
end;
end
else
write(‘NO REKENING TUJUAN TIDAK DITEMUKAN’);
readln;
tdataac[1].norek:=snorek;
tdataac[1].pin:=spin;
tdataac[1].namal:=namal;
tdataac[1].tgllhr:=tgllhr;
tdataac[1].alamat:=alamat;
tdataac[1].notelp:=notelp;
tdataac[1].block:=tblock;
unsetjendela;
mnothert;
end;
{7} #55:begin
border;
setjendela;
writeln(‘CEK SALDO’);
writeln(‘ÄÄÄÄÄÄÄÄÄ’);
writeln(‘JUMLAH SALDO ANDA SEKARANG YAITU RP ‘,tdataac[1].balance:0:2);
write(‘TEKAN ENTER UNTUK KEMBALI’);
readln;
unsetjendela;
mnothert;
end;
{9} #57:begin;
border;
setjendela;
writeln(‘GANTI PIN’);
writeln(‘ÄÄÄÄÄÄÄÄÄ’);
write(‘MASUKAN NO. PIN BARU : ‘);{readln(spin);}
validstrnum(tinput,4); spin:=tinput;
write(‘KONFIRMASI NO. PIN BARU : ‘);{readln(tinput);}
validstrnum(tinput,4);
writeln;
if(spin<>tinput) then
begin
writeln(‘MASUKAN NO PIN TIDAK SAMA’);
writeln(‘PENGGANTIAN PIN DIBATALKAN’);
readln;
end
else
begin
write(‘APAKAH ANDA YAKIN (Y) ? : ‘);readln(tchr);
if upcase(tchr)=‘Y’ then
begin
backup;
spin:=tinput;
tdataac[1].pin:=tinput;
updateaccount;
writeln(‘UBAH PIN BERHASIL’);
readln;
end
end;
unsetjendela;
mnothert;
end;
{6} #54:begin
border;
setjendela;
clearttrn;
fetchtrnacc;{meload data dari file}
writeln(‘LIHAT LOG TRANSAKSI (’,k,’ TRANSAKSI TERBARU)‘);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
write(‘ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿’);
write(‘³ NO. REK ³ JENIS ³ TUJUAN ³ JUMLAH ³ TANGGAL & WAKTU ³’);
write(‘ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´’);
write(‘³1234567890123³TRANSFER ³0987654321123³10000000³’,getdnt,‘³’);
write(‘³ ³TELKOMSEL ³ ³ ³ ³’);
write(‘³ ³TELKOM ³ ³ ³ ³’);
write(‘³ ³PLN ³ ³ ³ ³’);
write(‘³ ³ITT ³ ³ ³ ³’);
write(‘³ ³PAM ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ’);
l:=1;
pagetrnacc(l);
j:=k div 12;
if (k mod 12)<>0 then
inc(j);
repeat
knav:=readkey;
if knav=#0 then
begin
knav:=readkey;
if knav=#75 then{tombol arah panah ke kiri}
begin
if l-1>=1 then
begin
dec(l);
pagetrnacc(l);
end;
end;
if knav=#77 then {tombol arah panah ke kanan}
begin
if l<j then
begin
inc(l);
pagetrnacc(l);
end;
end;
end;
until knav=#13;
unsetjendela;
mnothert;
end;
{3} #51:begin
end;
end
until tchr=#51;
mnuser;

end;

procedure pembayaran(judul,kode:string);
{procedure untuk melakukan proses pembayaran tagihan}
begin
border;
setjendela;
writeln(‘PEMBAYARAN TAGIHAN ‘,judul);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
write(‘MASUKAN JUMLAH TAGIHAN (RP) : ‘);
validnum(uang);{readln(uang);}
if (uang<50000) or (uang>10000000) then
begin
writeln(‘NOMINAL PEMBAYARAN HARUS DIANTARA 50000 DAN 10000000’);
readln;
unsetjendela;
mnpembayaran;
end;
if (tdataac[1].balance-uang)>50000 then
begin
write(‘APAKAH ANDA YAKIN (Y) ? : ‘);readln(tchr);
if upcase(tchr)<>‘Y’ then
begin
unsetjendela;
mnpembayaran;
end;
if transaksi(kode,uang,‘-’) then
begin
tunggub;
tinput:=‘PEMBAYARAN ‘+judul+’ BERHASIL’;
gotoxy(40-(length(tinput) div 2),15);
write(tinput);
end
end
else
error(‘UANG ANDA TIDAK MENCUKUPI’);

readln;
unsetjendela;
mnpembayaran;

end;

procedure mnpembayaran;
{ menu pembayaran tagihan user}
begin
lmn[1]:=‘TELEPON RUMAH’;lmn[2]:=‘LISTRIK’;lmn[3]:=‘KARTU HALO’;
lmn[4]:=‘PAM’;lmn[5]:=‘PEMBAYARAN KULIAH ITT’;lmn[6]:=‘KEMBALI’;
mnpilihan(lmn);
repeat
tchr:=readkey;
case tchr of
{1} #49:pembayaran(‘TAGIHAN KARTU HALO’,‘TELKOMSEL’);
{4} #52:pembayaran(‘TAGIHAN LISTRIK’,‘PLN’);
{7} #55:pembayaran(‘TAGIHAN TELEPON RUMAH’,‘TELKOM’);
{9} #57:pembayaran(‘TAGIHAN PAM’,‘PAM’);
{6} #54:pembayaran(‘BIAYA KULIAH ITT’,‘ITT’);
end
until tchr=#51;
mnothert;

end;

procedure page(n:integer);
{procedure yang digunakan untuk menuliskan data account ke tabel}
begin
fetch(n);{meload data dari file}
for i:=1 to 6 do
begin
{penghapusan}
gotoxy(2,(5+i)+(i-1));write(’ ‘);
gotoxy(16,(5+i)+(i-1));write(’ ‘);
gotoxy(16,(5+i)+(i));write(’ ‘);
gotoxy(34,(5+i)+(i-1));write(’ ‘);
gotoxy(45,(5+i)+(i-1));write(’ ‘);
gotoxy(45,(5+i)+(i));write(’ ‘);
gotoxy(57,(5+i)+(i-1));write(’ ‘);
gotoxy(57,(5+i)+(i));write(’ ‘);
gotoxy(69,(5+i)+(i-1));write(’ ‘);

{penulisan}
gotoxy(2,(5+i)+(i-1));write(tdataac[i].norek);
gotoxy(16,(5+i)+(i-1));
for j:=1 to 17 do
write(tdataac[i].namal[j]);
gotoxy(16,(5+i)+(i));
for j:=1 to 17 do
write(tdataac[i].namal[j+17]);
gotoxy(34,(5+i)+(i-1));write(tdataac[i].tgllhr);
gotoxy(45,(5+i)+(i-1));
for j:=1 to 11 do
write(tdataac[i].alamat[j]);
gotoxy(45,(5+i)+(i));
for j:=1 to 11 do
write(tdataac[i].alamat[j+11]);
gotoxy(57,(5+i)+(i-1));
for j:=1 to 10 do
write(tdataac[i].notelp[j]);
gotoxy(57,(5+i)+(i));
for j:=1 to 10 do
write(tdataac[i].notelp[j+10]);
gotoxy(69,(5+i)+(i-1));
if tdataac[i].block then write(‘Y’)
else write(’T’);
end;
end;

procedure pagetrn(n:integer);
{procedure yang digunakan untuk menuliskan data semua transaksi ke tabel}
begin
fetchtrn(n);
for i:=1 to 12 do
begin
{penghapusan}
gotoxy(2,(5+i));write(’ ‘);
gotoxy(16,(5+i));write(’ ‘);
gotoxy(29,(5+i));write(’ ‘);
gotoxy(43,(5+i));write(’ ‘);
gotoxy(52,(5+i));write(’ ‘);

{penulisan}
gotoxy(2,(5+i));write(tdatatrn[i].norek);
gotoxy(16,(5+i));write(tdatatrn[i].jenis);
gotoxy(29,(5+i));write(tdatatrn[i].tujuan);
gotoxy(43,(5+i));write(tdatatrn[i].jml:0:0);
gotoxy(52,(5+i));write(tdatatrn[i].dnt);
end;
end;


procedure mnadmin;
{procedure menu administrator}
var knav:char;
begin
lmn[1]:=‘TAMBAH ACCOUNT BARU’;lmn[2]:=‘VIEW DATA NASABAH’;lmn[3]:=‘CARI DATA NASABAH’;
lmn[4]:=‘EDIT DATA NASABAH’;lmn[5]:=‘UNBLOCK ACCOUNT’;lmn[6]:=‘TAMBAH JUMLAH UANG’;
mnpilihan(lmn);
gotoxy(30,20);write(’<0>VIEW HISTORY TRANSAKSI’);
repeat
tchr:=readkey;
case tchr of
{0} #48:begin
border;
setjendela;
writeln(‘HISTORY TRANSAKSI (’,getjmltrn,’ TRANSAKSI)‘);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
write(‘ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿’);
write(‘³ NO. REK ³ JENIS ³ TUJUAN ³ JUMLAH ³ TANGGAL & WAKTU ³’);
write(‘ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´’);
write(‘³1234567890123³TRANSFER ³0987654321123³10000000³’,getdnt,‘³’);
write(‘³ ³TELKOMSEL ³ ³ ³ ³’);
write(‘³ ³TELKOM ³ ³ ³ ³’);
write(‘³ ³PLN ³ ³ ³ ³’);
write(‘³ ³ITT ³ ³ ³ ³’);
write(‘³ ³PAM ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³’);
write(‘ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ’);
l:=1;
clearttrn;
pagetrn(l);
k:=getjmltrn div 12;
if (getjmltrn mod 12)<>0 then
inc(k);
repeat
knav:=readkey;
if knav=#0 then
begin
knav:=readkey;
if knav=#75 then{tombol arah panah ke kiri}
begin
if l-1>=1 then
begin
clearttrn;
dec(l);
pagetrn(l);
end;
end;
if knav=#77 then {tombol arah panah ke kanan}
begin
if l<k then
begin
clearttrn;
inc(l);
pagetrn(l);
end;
end;
end;
until knav=#13;

unsetjendela;
mnadmin;

end;
{1} #49:begin
border;
setjendela;
writeln(‘PENCARIAN DATA NASABAH’);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
write(‘NO REK : ‘);
validstrnum(tinput,13); snorek:=tinput;{readln(snorek);}
if cariac(snorek) then
begin
writeln(‘PIN : ‘,tdataac[1].pin);
writeln(‘NAMA LENGKAP : ‘,tdataac[1].namal);
writeln(‘TANGGAL LAHIR : DD/MM/YYYY ‘,tdataac[1].tgllhr);
writeln(‘ALAMAT : ‘,tdataac[1].alamat);
writeln(‘NO TELP : ‘,tdataac[1].notelp);
writeln(‘BALANCE : Rp ‘,tdataac[1].balance:0:2);
readln;
end
else
begin
writeln(‘DATA DENGAN NO. REK ‘,snorek,’ TIDAK DITEMUKAN.‘);
readln;
end;
unsetjendela;
mnadmin;
end;
{4} #52:begin
border;
setjendela;
writeln(‘DATA ACCOUNT BANK (JUMLAH NASABAH : ‘,getjmlacc,’ )‘);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
write(‘ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄ¿’);
write(‘³ NO. REK ³ NAMA LENGKAP ³ TGL LHR ³ ALAMAT ³ NO. TELP ³ B ³’);
write(‘ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÅÄÄÄ´’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘³ ³ ³ ³ ³ ³ ³’);
write(‘ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÁÄÄÄÙ’);
l:=1;
cleartdata;
page(l);
k:=getjmlacc div 6;
if (getjmlacc mod 6)<>0 then
inc(k);
repeat
knav:=readkey;
if knav=#0 then
begin
knav:=readkey;
if knav=#75 then{tombol arah panah ke kiri}
begin
if l-1>=1 then
begin
cleartdata;
dec(l);
page(l);
end;
end;
if knav=#77 then {tombol arah panah ke kanan}
begin
if l<k then
begin
cleartdata;
inc(l);
page(l);
end;
end;
end;
until knav=#13;
unsetjendela;
mnadmin;
end;
{7} #55:begin
border;
setjendela;
writeln(‘TAMBAH ACCOUNT BARU’);
writeln(‘——————-’);
write(‘NOMOR ACCOUNT : ‘);
validstrnum(tinput,13); snorek:=tinput;
write(‘PIN : ‘);
validstr(tinput,4);spin:=tinput;{readln(spin);}
write(‘NAMA LENGKAP : ‘);
validstr(tinput,0);namal:=tinput;{readln(namal);}
write(‘TANGGAL LAHIR : DD/MM/YYYY ‘);
itanggal;{readln(tgllhr);}
write(‘ALAMAT : ‘);
validstr(tinput,0);alamat:=tinput;{readln(alamat);}
write(‘NO TELP : ‘);
validstrnum(tinput,0);notelp:=tinput;{readln(notelp);}
write(‘BALANCE : ‘);
validnum(balance);{readln(balance);}
writeln;
write(‘APAKAH ANDA INGIN MENAMBAH DATA DI ATAS ? ‘);
readln(q);
if upcase(q)=‘Y’ then
begin
if tambahaccount then
write(‘ACCOUNT BARU SUDAH DI TAMBAH ‘)
else
write(‘DATA DI ATAS TIDAK TERSIMPAN, DATA SUDAH ADA’);
readln;
end
else
begin
write(‘PENAMBAHAN ACCOUNT DI BATALKAN’);
delay(600);
end;
unsetjendela;
mnadmin;

end;
{9} #57:begin;
border;
setjendela;
writeln(‘EDIT DATA NASABAH’);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
write(‘NO REK : ‘);
validstrnum(tinput,13); snorek:=tinput;{readln(snorek);}
if cariac(snorek) then
begin
writeln(‘PIN : ‘,tdataac[1].pin);
writeln(‘NAMA LENGKAP : ‘,tdataac[1].namal);
writeln(‘TANGGAL LAHIR : DD/MM/YYYY ‘,tdataac[1].tgllhr);
writeln(‘ALAMAT : ‘,tdataac[1].alamat);
writeln(‘NO TELP : ‘,tdataac[1].notelp);
writeln(‘BALANCE : Rp ‘,tdataac[1].balance:0:2);
readln;
writeln(‘MASUKAN DATA YANG BARU’);
write(‘PIN : ‘);
validstr(tinput,4);spin:=tinput;{readln(spin);}
write(‘NAMA LENGKAP : ‘);
validstr(tinput,0);namal:=tinput;{readln(namal);}
write(‘TANGGAL LAHIR : DD/MM/YYYY ‘);
itanggal;{readln(tgllhr);}
write(‘ALAMAT : ‘);
validstr(tinput,0);alamat:=tinput;{readln(alamat);}
write(‘NO TELP : ‘);
validstrnum(tinput,0);notelp:=tinput;{readln(notelp);}
write(‘BALANCE : ‘);
validnum(balance);{readln(balance);}
writeln;
write(‘APAKAH ANDA INGIN MENG-EDIT DATA DI ATAS ? ‘);
readln(q);
if upcase(q)=‘Y’ then
begin
{update data}
updateaccount;
write(‘EDIT ACCOUNT BERHASIL’);
readln;
end
else
begin
write(‘EDIT ACCOUNT DI BATALKAN’);
delay(600);
end;

end
else
begin
writeln(‘DATA DENGAN NO. REK ‘,snorek,’ TIDAK DITEMUKAN.‘);
readln;
end;
unsetjendela;
mnadmin;
end;
{6} #54:begin
border;
setjendela;
writeln(‘UNBLOCK ACCOUNT NASABAH’);
writeln(‘ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ’);
writeln(‘MASUKAN NO REKENING NASABAH YANG AKAN DI UNBLOCK’);
write(‘NO REK : ‘);
validstrnum(tinput,13); snorek:=tinput;{readln(snorek);}
if unblock(snorek) then
begin
write(‘NO REKENING SUDAH DIAKTIFKAN’);
end
else
begin
write(‘UNBLOCK GAGAL, NO REKENING TIDAK DITEMUKAN’);
end;
readln;
unsetjendela;
mnadmin;
end;
{3} #51:begin
border;
setjendela;
writeln(‘TAMBAH JUMLAH UANG’);
writeln(‘——————’);
writeln(‘JUMLAH UANG SEKARANG : ‘,getjmlmny,’ Rp ‘,getjmlmny*50000);
write(‘JUMLAH PENAMBAHAN UANG : ‘);
validstrnum(tinput,0);
val(tinput,j,i);{ readln(j);}
if tambahmny(j) then
begin
writeln(‘PENAMBAHAN UANG BERHASIL’);
writeln(‘JUMLAH UANG SEKARANG : ‘,getjmlmny,’ Lembar : Rp ‘,getjmlmny*50000);
end
else
writeln(‘PENAMBAHAN UANG DI BATALKAN’);
readln;
unsetjendela;
mnadmin;
end;
end
until tchr=#27;
mnawal;
end;

begin
textcolor(white);
end.
bersambung…