From c339a2b33e6d7573c43797e02a7eb7b11153a0b1 Mon Sep 17 00:00:00 2001 From: Kisharini Jeeva Nathan <224618@student.upm.edu.my> Date: Tue, 6 Jan 2026 15:42:21 +0000 Subject: [PATCH 01/12] change value --- atm/src/atm/AtmMainDriver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atm/src/atm/AtmMainDriver.java b/atm/src/atm/AtmMainDriver.java index 39da9ed..dcf8af6 100644 --- a/atm/src/atm/AtmMainDriver.java +++ b/atm/src/atm/AtmMainDriver.java @@ -9,7 +9,7 @@ public class AtmMainDriver public static void main(String[] args) { LoginForm f = new LoginForm (); - f.setVisible(true); + f.setVisible(false); f.setSize(540,350); f.setLocation(450,220); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); From 30dea20c4df15179a5417f6a737f54773db98216 Mon Sep 17 00:00:00 2001 From: Kisharini Jeeva Nathan <224618@student.upm.edu.my> Date: Tue, 6 Jan 2026 15:44:16 +0000 Subject: [PATCH 02/12] update --- atm/src/atm/AtmMainDriver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atm/src/atm/AtmMainDriver.java b/atm/src/atm/AtmMainDriver.java index dcf8af6..39da9ed 100644 --- a/atm/src/atm/AtmMainDriver.java +++ b/atm/src/atm/AtmMainDriver.java @@ -9,7 +9,7 @@ public class AtmMainDriver public static void main(String[] args) { LoginForm f = new LoginForm (); - f.setVisible(false); + f.setVisible(true); f.setSize(540,350); f.setLocation(450,220); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); From 9498b11c2e471159352d3fa0860cc320297ae03b Mon Sep 17 00:00:00 2001 From: Kisharini Jeeva Nathan <224618@student.upm.edu.my> Date: Tue, 6 Jan 2026 15:47:50 +0000 Subject: [PATCH 03/12] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a5b30d..32e5acd 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This repository contains an ATM Management System project implemented in Java. To run the program, follow these steps: -1. Run the `AtmMainDriver` file. +1. Run the `AtmMainDriver` file. ## 2. No additional packages need to be downloaded. 3. The username and password for both "Admin" and "User" are as follows: - Username: zahid From 7b016cdc49bd31bbf78154dcec0eba70bddbd44c Mon Sep 17 00:00:00 2001 From: Kisharini Jeeva Nathan <224618@student.upm.edu.my> Date: Tue, 6 Jan 2026 15:50:13 +0000 Subject: [PATCH 04/12] update --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 32e5acd..538ac3a 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ This repository contains an ATM Management System project implemented in Java. ## Instructions -To run the program, follow these steps: +To run the program, follow these steps: ## -1. Run the `AtmMainDriver` file. ## +1. Run the `AtmMainDriver` file. 2. No additional packages need to be downloaded. 3. The username and password for both "Admin" and "User" are as follows: - Username: zahid From f38bf26ccade4de15206b044b803a734f2879210 Mon Sep 17 00:00:00 2001 From: Kisharini Jeeva Nathan <224618@student.upm.edu.my> Date: Tue, 6 Jan 2026 15:54:04 +0000 Subject: [PATCH 05/12] update readme file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 538ac3a..82c9795 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository contains an ATM Management System project implemented in Java. ## Instructions -To run the program, follow these steps: ## +To run the program, follow these steps: -- 1. Run the `AtmMainDriver` file. 2. No additional packages need to be downloaded. From ba418d8e8df6259514aa002361211b0fa14948c3 Mon Sep 17 00:00:00 2001 From: ainnurqiss Date: Fri, 6 Feb 2026 00:43:09 +0800 Subject: [PATCH 06/12] Add CR-01 comment for daily withdrawal limit maintenance --- atm/src/atm/AccountData.java | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/atm/src/atm/AccountData.java b/atm/src/atm/AccountData.java index 9c0bde5..9832d07 100644 --- a/atm/src/atm/AccountData.java +++ b/atm/src/atm/AccountData.java @@ -1,27 +1,28 @@ package atm; + import javax.swing.*; -public class AccountData -{ - String pincode; +public class AccountData { + String pincode; String customername; String accounttype; String accountnumber; String startbalance; - - public AccountData(String p,String c,String a,String an,String s) - { - pincode=p; - customername=c; - accounttype=a; - accountnumber=an; - startbalance=s; + + // CR-01: Daily withdrawal limit validation added for maintenance updategit + public AccountData(String p, String c, String a, String an, String s) { + pincode = p; + customername = c; + accounttype = a; + accountnumber = an; + startbalance = s; } - - public void print() - { - JOptionPane.showMessageDialog(null,"PINCODE : "+pincode+"\n\tCustomer Name : "+customername+"\n\tAccount Type : "+accounttype+ - "Account Number : "+accountnumber+"\nStarting Balance : "+startbalance,"Account Information ",JOptionPane.INFORMATION_MESSAGE); + + public void print() { + JOptionPane.showMessageDialog(null, + "PINCODE : " + pincode + "\n\tCustomer Name : " + customername + "\n\tAccount Type : " + accounttype + + "Account Number : " + accountnumber + "\nStarting Balance : " + startbalance, + "Account Information ", JOptionPane.INFORMATION_MESSAGE); } - + } From 4e6e1473e80d123f1a45f8875f0375d005a43db6 Mon Sep 17 00:00:00 2001 From: ainnurqiss Date: Fri, 6 Feb 2026 01:08:33 +0800 Subject: [PATCH 07/12] Implement CR-01: Daily withdrawal limit in ATM and test cases --- atm/src/atm/AccountData.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/atm/src/atm/AccountData.java b/atm/src/atm/AccountData.java index 9832d07..d765f25 100644 --- a/atm/src/atm/AccountData.java +++ b/atm/src/atm/AccountData.java @@ -8,6 +8,8 @@ public class AccountData { String accounttype; String accountnumber; String startbalance; + int dailyLimit = 5000; + int dailyWithdrawn= 0; // CR-01: Daily withdrawal limit validation added for maintenance updategit public AccountData(String p, String c, String a, String an, String s) { @@ -16,13 +18,13 @@ public AccountData(String p, String c, String a, String an, String s) { accounttype = a; accountnumber = an; startbalance = s; + dailyWithdrawn=0; } - public void print() { - JOptionPane.showMessageDialog(null, - "PINCODE : " + pincode + "\n\tCustomer Name : " + customername + "\n\tAccount Type : " + accounttype + - "Account Number : " + accountnumber + "\nStarting Balance : " + startbalance, - "Account Information ", JOptionPane.INFORMATION_MESSAGE); + public void print() + { + JOptionPane.showMessageDialog(null,"PINCODE : "+pincode+"\n\tCustomer Name : "+customername+"\n\tAccount Type : "+accounttype+ + "Account Number : "+accountnumber+"\nStarting Balance : "+startbalance,"Account Information ",JOptionPane.INFORMATION_MESSAGE); } } From e8bec3937df2e134a4aa9e5c77f53e0b991dc47d Mon Sep 17 00:00:00 2001 From: ainnurqiss Date: Fri, 6 Feb 2026 01:11:36 +0800 Subject: [PATCH 08/12] Implement CR-01: Daily withdrawal limit in ATM and test cases --- atm/src/atm/AfterLogin.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/atm/src/atm/AfterLogin.java b/atm/src/atm/AfterLogin.java index fe8a76a..e545138 100644 --- a/atm/src/atm/AfterLogin.java +++ b/atm/src/atm/AfterLogin.java @@ -282,7 +282,21 @@ else if(s1.equals(atm.pincode)) /******************************************************************************************************************************/ - + //Update dailyWithdrawn + atm.startbalance = String.valueOf(f); + atm.dailyWithdrawn += e; // update daily withdrawn amount + + // Check daily withdrawal limit + if (atm.dailyWithdrawn + e > atm.dailyLimit){ + JOptionPane.showMessageDialog( + null, + "Daily withdrawal limit exceeded.\nRemaining limit: RM " + + (atm.dailyLimit - atm.dailyWithdrawn), + "LIMIT EXCEEDED", + JOptionPane.WARNING_MESSAGE + ); + return; + } } From 248d2f1287ab2bac0176f4bb6db2e5fde44bdb48 Mon Sep 17 00:00:00 2001 From: ainnurqiss Date: Fri, 6 Feb 2026 01:16:55 +0800 Subject: [PATCH 09/12] Implement CR-01: Daily withdrawal in limit --- atm/src/atm/Admin.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/atm/src/atm/Admin.java b/atm/src/atm/Admin.java index 7e4e6a4..11cbca6 100644 --- a/atm/src/atm/Admin.java +++ b/atm/src/atm/Admin.java @@ -109,8 +109,11 @@ public void savePerson() pw1.print("PINCODE\t\t\tCUSTOMER NAME\t\t ACCOUNT TYPE\t\tACCOUNT NUMBER\t\tSTARTING BALANCE\n"); for (int i=0;i Date: Fri, 6 Feb 2026 09:43:20 +0800 Subject: [PATCH 10/12] Mary's CR implementation --- atm/bin/atm/AccountData.class | Bin 0 -> 1364 bytes atm/bin/atm/Admin.class | Bin 0 -> 7434 bytes atm/bin/atm/AfterLogin.class | Bin 0 -> 8732 bytes atm/bin/atm/AtmMainDriver.class | Bin 0 -> 507 bytes atm/bin/atm/LoginForm.class | Bin 0 -> 4664 bytes atm/bin/atm/TestTransactionHistory.class | Bin 0 -> 2674 bytes atm/src/atm/AccountData.java | 29 ++--- atm/src/atm/Admin.java | 45 ++++++- atm/src/atm/AfterLogin.java | 146 +++++++++++++++++------ atm/src/atm/AtmMainDriver.java | 4 +- atm/src/atm/LoginForm.java | 10 +- atm/src/atm/TestTransactionHistory.java | 44 +++++++ atm/transactions_1234.txt | 12 ++ 13 files changed, 226 insertions(+), 64 deletions(-) create mode 100644 atm/bin/atm/AccountData.class create mode 100644 atm/bin/atm/Admin.class create mode 100644 atm/bin/atm/AfterLogin.class create mode 100644 atm/bin/atm/AtmMainDriver.class create mode 100644 atm/bin/atm/LoginForm.class create mode 100644 atm/bin/atm/TestTransactionHistory.class create mode 100644 atm/src/atm/TestTransactionHistory.java create mode 100644 atm/transactions_1234.txt diff --git a/atm/bin/atm/AccountData.class b/atm/bin/atm/AccountData.class new file mode 100644 index 0000000000000000000000000000000000000000..ff995f186f092aa46c0bfbacf68b5ecf3e626b99 GIT binary patch literal 1364 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 literal 0 HcmV?d00001 diff --git a/atm/bin/atm/AfterLogin.class b/atm/bin/atm/AfterLogin.class new file mode 100644 index 0000000000000000000000000000000000000000..9e3b1961864e32721aef9a1ccd9c906edd81034e GIT binary patch literal 8732 zcmbtZ4R}=5nSMVq$-OhVK$sY0P~eIvkY7a_-3g-k0|J=@lRz5qrehApv)gUEyWMqd>)LJIc3VZW@40s-nJ}r3 zj|~rV@0{ zX5)MV7vRrm4_wMUawz6zu6Oq30jkkpU==QO(P~n%r?}y=HvTDrFUp$B#KNYbbXtkk zD45-3(YpF=vo(IzP$W6x!)g>O{k0fq#Tv4-o$;nLwdh*NNo**J0HH%F+f5L~td&!V1&AD)ZPh zCt`yHP4UV%(cGYtBWfT9s$mWnH#*TodA&`K6D-bSW$z-Jx~VfLq4MNG16Qf=P#R5G z;f;1Om58S_&{~{8R2NCqt%*eKF53#*NgYFkzBwBs%r3h>kqpm#JO!F2rXt<5$@5IFZe)>$h#Y$T~?8T>* zulZKZx5=};>G=VK*Iq858|^^AsV5X#AtO+7|q6cF5bwDl4f49tr)%dbNIZ5 zFBo_jf04IA-W+L)g43M0rKJ#qY_Q2^qcLqT|O@VMoHuO9Cl#yUK#KYWJTS_*eX!%A$jV zw#w=?(?C-QLsot!wx3akb}N-OmAwCH;B_TzQ7poMejINo?mritzO3zoc>I$7Xy#?H zRM6*BNBVCAZ{b&D$I41M)f6UKx6<)zMnFzKj<*f`uM;%W3D+Go{4R_AL{{!}f`O{f zeE2PXZ{QDjhdCoPkQffxsT6CH7UsUh4#BD{5N?^2%QSg5k`*9tBaszCwm(lf670Jg9feL&jEH12QisLfFkRlZ}CW_KHYhgtwHl)NM zFe)U|+uU-+&$?Qtsf$-|!8H0T6uD444Sp2ipic~$smUxuW=k1ynzZ9K7P>4hnW6@* zWXk5(lfqsuBDLw_7p!dM{G{14V4IEZdCiWY*fuqkFoy>cF_TrSYXho6YK*Czqsu8Y z-cV;pYoFQE)!5P9*xb|B*y~%{tG?rmyN+T9$A2!y}c- zd|33a|4`;r2-!3SrArNODTUhH*wxwG+TGpSq6sevUZ>^=s{kUk431JOD-1bL1y^6n z+GV?CnJ&B=oHhxcvX``iOy$V1l^oXPeAc$TZ9VH+8oPQOi_wL*g^#9)Ts5vsLyl`# zV~#6t7P_-7YjQt|Mc3tG){t#+H$ACqtu#rqCM|}v3JY>KE2_AXUyHV?x|HWPHth)@S_9t-lEHT3hdIdV=TX=-H?!q8Z%Po z>e4A#-ACseAi5@HP?f6Ln@q%anB=dD6mzP*Zgwm=OFM&qx?DoT?6s0{-ocg0bsN&7 z5~LP!?@hXFW)WT>^KkBxGbt`_BxN};&Frw^xW$mIileU9sN0V&yq6TR%o%=et*Ofu zM4)@XO4{Z&H#{nSmLc05e(CJZOBZ$JC=hXT#2(I1O}Pse)7@;@ZpaSBWbQ7`%5$yk zElZb(U|}OSRs?Y^IZ!DvvTf z247Y0xUsy)+7{)=%=1WH8yVsa4X_c$yN4bc#wH4B6>{L^!3(%`AT%ExWs=t`K!i(}fqMnPOgRPW;#9 zHbH%_9qnh^M`?&^OPY*FW|)^BGn6#VTJh0URMJXYQM1`f4VY~yGiZt~pJqhvZEbJv z47HlMXQ<0mq&o$h^320z(hu`COOxpDw^Q4PqR|nb&rNw|V!J7%I|4JYgq3fzy!m6h zvP{_E_zPp6Ihaf+hIUv@cl|j>qf1Y0Fzp%QiD4dNc8Tow$=z~~Cikigz{}K<$($dF z?@H{nv%NO=PO^revfm(hAU{!LC%P(FXT`%&JGG=ek=Qvj*ie`&@=_xfr4PLd>V^0SjI`!ePgKY^Pe+{ z6{9%s2iRk2 zDIkX&awo~14*B(|tGgU>56L}q@Gb5;2ZzfRD&`y+LvNqI&r>#Q6k9X6+}&@Rvm#7- zSV=R$A_!?6W8P3_H&Z5{Hyx zROYtO@<0!kS zFLCCNQG;Kw-T5xg5sf|2a;%U=I8UmuQqE`Vvl$o21~xdm5oGFXkbbO^omedi?jWj9 z-nj55j49Px!dK9~Y+8BoW0@^4>f_gyD;M$-!;C%sW1780P8Qj=jRkR{h z zxaS~d2DPVgpZfC9AxbraEtnzP%j<_iX)_T5S~%K9Y1b2{5OM1y9+$8y+l6z`jg{!3 z2W(>hZZn$kaenK=<=6rnTQNWkW4Meww~^}=Z1`BXo{hw7$@N@##>vd5VYVipSH+E=g*AdsDf||U#6>#W$=}tFQ8W~o97Amj^Q~VgXa}4FQ|`iD?DB*0H>74x@-cR zdO`v=xJt1Try`2QNYEe#(SQ^-AdQVY@+R!!nh~xV=J9u92d;JwKMym;Imj-_Y#z6$ zNS)a|qo{%;YZ&_&j#MamwaPhQNLfcUjiW=^MvXEJPd0J{ivu2IBPD^77f_*;?`Yf| zJ2?KPqVB7q!pCr&$A3Af6$Oejc%{r2K8k;+*VUIF9-yUY{(s5fC%p%;hOht5*D{|o z@hJWyga7jXLJ=$UdT)i-8GZx{16rWC!kfXH&*3Ig{r{t;?D5LM@t=r-@i+c1&r$pz z!R!$KyY3fdX&Ro#3lm^oP6+7%9K8``1YzLf! z_pn04aXEnn@(z}aV-~0vrJqUd%urQv)&lROc03e%L(zpQOwS^mkKkhUcDjSc-j1r8 z!+0-)_YdIA%BmxHL~0I;`tLbLT|<32Ce*KjXU_}*Hm2f}>v;=_1Y3wSu`e<*Jx-5% zf|2J*`r<*J|4Yt!3>2N<^mozt4vHxh%i*ly+|IaWaQ(|g^?HRqA>4E7t%CMVUF{8e zs{-Dfd_{Z}PpJB+l-3tZxy&h-@{*%c5%lm&pj=KeuZ{a7SZ9n0pAhvRF=z`6(zS;Xt!qMEK$))u{kEo!Qb(!6&zzy+czrb z1WN;@898^4PH=*g;JC(ejOqF-4A;*Pn6J`Ep2NrRbu>}+9ry;r&bv+1UZvT*hDY%|2J|1`Yxp5o9OJAXIpD5E@i_Y@G!10|#FBqZ z*(Y$8hP~sAUQXb0Y{Rt>;U7sr^*H086S$mpqOLtzz1&2-s7U|pRJ|Pfqk7qY62L3V zrT)XI;(~Gset;?ndBEeUVpYB>Tt%!_inu6W5kBUStRmVb6|sfc6KojH#v4?`!C zQW0-b5pU63e}%R9HI?x;z4f=u3cq6r{5^x^ADH{z#Wi@3zWzRadmQ%>*~dljw9KIQ zzK&<4*il0F^hy|~3rvBZ@J@o?P@uGNx<|f3u9q8Jg%p*NQcT6ZU6ql>=de0dO;t2M zhIl3Ier>t5DX@>ohRVvrvVk64w0gmWH>nb8)`F}vdDMh}$MvTNF^9`L%4K7*6Zz)n z6Az%&;g*rEJw>$ZLu$*;?3SC#rS~Ik$=IFc+IJ9?F<+QjdBRL?xjwt)rR8$@N80j3 zp7IluTlPE#TLIhe@5=7@;qaV1oc$pW7k&(jxzRwmTv>EfqN^7?2tU6MmP=AuHOJDE zR(y;#9Ap;z0A(l>KNhi)TPkx|#m(bS$n&vLPRHe}>|(N*KN-&DuYSwe&a1@Ttn?m~ zY8+&n>#&@I=h@_XMe5nFzW{G={4KeN?dwL`a+A!I7PcVQuz*=7^=#?1NJzS6qip4y zCB5u3^zjP6RratcvY!o)hdKJB^fN)&@=cB(m#DnP*1}KOT=*GV0dGlCek0d9Ua|&r z-otW@mE{SnWC(f(bD0oMz~uLHo$rB(@A>por_j$vk$j5YJVS0274ObQiR`1B>~TJC daX$AtpSL@ocQ~JS$$gyby|r|PRsRd9U6iv#0?loFz6HE_vA$O$ATeLxvBOPO&LhTWYCCq zLNi|#MpX!l%fHF4eN7V{|Mnr^SiEbr28J*$71=uSk3|kZx z211Bo8#|P%(k_BaiGz1&*9*j~T4)ZvW(JBTyPG3fGufw!?>REH$Q-$qSb^k#DD4;$ T(2+x&{216rlBCPT0@(cpq}5{A literal 0 HcmV?d00001 diff --git a/atm/bin/atm/LoginForm.class b/atm/bin/atm/LoginForm.class new file mode 100644 index 0000000000000000000000000000000000000000..917258e0221539b73dc53422163c144c60b99682 GIT binary patch literal 4664 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 IE|Nw62Yq?PvH$=8 literal 0 HcmV?d00001 diff --git a/atm/bin/atm/TestTransactionHistory.class b/atm/bin/atm/TestTransactionHistory.class new file mode 100644 index 0000000000000000000000000000000000000000..9d61c2e3eb08ebe0f443b44c473685dc7fbb3e34 GIT binary patch literal 2674 zcmZ`*+fx%~6#sqXvSGVi3`C3~28)^~h__-5)>c3yl#4Y8BCWb4AFz__rn?&itG(L0 zZSCFOo%Vt0qkRAdW}Hqt(}zCwf9Q0kPkrf|Q%ldc0Zk+g@NGEz`_B2DbAEfi{q^6) z+W^{eQ$`6~65I+r@G?|hP^Z-9l&X(6_m5uS37f%tSkpE82!kse8T7%&;NH7${{cVk zmlZq&g`p;`PV#m`PpI~gW>3&J%T{&UV%Q$;x$iMk}8d+GTXt-W zn>;yWYBo0|R5JKi?{#V^p0mrSfM3wAqOC>3oQVv|C__L%)-zPCK*)b?e`{n=!Ul$o zj%%Aw+s$z;ok{Ty)#jasnO1EdHqyo!`ZV?SHYJmxuC8c09knbOHK-MiH!}o^#1^i% zFqAv4v$mFM7EWc0%wANQceisT2?Q&fBhLpU6Ztu14b%8C+1 z6zmjCJr_kmg{4tJlW4c3^NT&2&OOvj@u`!s7yBgaS8xE26v$y;wtNCi!qR-RdXB$}(xUL&7lyog%ZURe9tADZ7l=meM73;z*TTOsT0X?;m?W$+>5vc#~X$-Elmn;G{^o!XXj2)x_k0sV2CD zfg(~rNwpPHAACUSIlGKgsFe}Nu+ZF@0x{0-Q$6nWUFS7lCLd)17CmvEIjPz1^#$BnF+;9`0)Y%0!Uw-7O@u+1=R%Qn?aFSjR* zq~*h#qzW>u^0v;g-S#w1r?)9w2hSLmW`{0^*y^7T?=aL4nTE|nd-sJbRZO)|zJri$ zgqRQSF>L8niBnP-oas;iiwe;DR9v}7wQLHI?<4BNhxG8@-!D{EhzPL?FFuy>2|kr@ zLv-{rnsxWbg{Ds#le{^1F67RSPHK(QlNL7v5`8CVNe5Yd1gQ5* zJ-Zg^7J8RZHoSz2;YRm7*3F~3ZwWQS{@^?|McwWePry^De22q9_Y&%c=MkDiebn1j znGAT&uXFuLYtXxhZNMDDO>@{)jok~_GYd~ty6R!G%RiIx(I3#-xQL?y)HaKnKKj3D z0kK8&J0^mhSVEjwoEmPN$Iv`Z6NwRu_Ds}GH_r}7J-?tl=ni`3Fgi55{1+L=TtW97 z#w+FI0w!C$rQ$V+(F0grBe#ztNk(A85ee*v4G+PEd-S6mqjV)T-?vQykR zUUe56B*Z0*{DW#j-=(;0nTX}#&?bPC@~cFk1h3(Bx^5>;eMI_t!&%>Q)@#oCuCrcu S)(`MGVP(R7fv@llg8u=!*Q7WA literal 0 HcmV?d00001 diff --git a/atm/src/atm/AccountData.java b/atm/src/atm/AccountData.java index d765f25..9c0bde5 100644 --- a/atm/src/atm/AccountData.java +++ b/atm/src/atm/AccountData.java @@ -1,30 +1,27 @@ package atm; - import javax.swing.*; -public class AccountData { - String pincode; +public class AccountData +{ + String pincode; String customername; String accounttype; String accountnumber; String startbalance; - int dailyLimit = 5000; - int dailyWithdrawn= 0; - - // CR-01: Daily withdrawal limit validation added for maintenance updategit - public AccountData(String p, String c, String a, String an, String s) { - pincode = p; - customername = c; - accounttype = a; - accountnumber = an; - startbalance = s; - dailyWithdrawn=0; + + public AccountData(String p,String c,String a,String an,String s) + { + pincode=p; + customername=c; + accounttype=a; + accountnumber=an; + startbalance=s; } - + public void print() { JOptionPane.showMessageDialog(null,"PINCODE : "+pincode+"\n\tCustomer Name : "+customername+"\n\tAccount Type : "+accounttype+ "Account Number : "+accountnumber+"\nStarting Balance : "+startbalance,"Account Information ",JOptionPane.INFORMATION_MESSAGE); } - + } diff --git a/atm/src/atm/Admin.java b/atm/src/atm/Admin.java index 11cbca6..c22a146 100644 --- a/atm/src/atm/Admin.java +++ b/atm/src/atm/Admin.java @@ -2,9 +2,9 @@ import java.awt.Color; import java.awt.Container; import java.awt.event.*; +import java.io.*; import java.util.*; import javax.swing.*; -import java.io.*; /*\ I have to add these options Add Account @@ -23,7 +23,7 @@ public class Admin extends JFrame implements ActionListener JLabel atmLab; Container con; ArrayList customerlist; - String s1,s2,s3; + String s1; Admin() { super("ADMIN"); @@ -67,7 +67,42 @@ public class Admin extends JFrame implements ActionListener saveToFile.addActionListener(this); logOut.addActionListener(this); + loadPersons(); + } + /*******************************LOAD ACCOUNT FROM FILE*******************************************/ + public void loadPersons() + { + String ss[]=null; + String pincode,customername,accounttype,accountnumber,startbalance; + + try + { + FileReader fr=new FileReader("Customer Record.txt"); + BufferedReader br=new BufferedReader(fr); + + String line=br.readLine(); + + while(line != null) + { + ss=line.split(","); + pincode=ss[0]; + customername=ss[1]; + accounttype=ss[2]; + accountnumber=ss[3]; + startbalance=ss[4]; + + AccountData atm=new AccountData(pincode,customername,accounttype,accountnumber,startbalance); + customerlist.add(atm); + line=br.readLine(); + } + br.close(); + fr.close(); + } + catch(IOException ioEX) + { + System.out.println("No existing customer records found. Starting fresh."); + } } /*******************************ADD ACCOUNT************************************************/ @@ -109,11 +144,8 @@ public void savePerson() pw1.print("PINCODE\t\t\tCUSTOMER NAME\t\t ACCOUNT TYPE\t\tACCOUNT NUMBER\t\tSTARTING BALANCE\n"); for (int i=0;i transactions = new ArrayList<>(); + String line = br.readLine(); + + while(line != null) { + transactions.add(line); + line = br.readLine(); + } + br.close(); + fr.close(); + + // Display last 10 transactions + StringBuilder history = new StringBuilder(); + int start = Math.max(0, transactions.size() - 10); + + if(transactions.isEmpty()) { + history.append("No transactions found."); + } else { + history.append("Last ").append(Math.min(10, transactions.size())).append(" Transactions:\n\n"); + for(int i = start; i < transactions.size(); i++) { + history.append(transactions.get(i)).append("\n"); + } + } + + JOptionPane.showMessageDialog(null, history.toString(), "Transaction History", JOptionPane.INFORMATION_MESSAGE); + } catch(IOException ioEX) { + JOptionPane.showMessageDialog(null, "No transaction history found for this account.", "Transaction History", JOptionPane.INFORMATION_MESSAGE); + } +} + +/***************************************************************************************************************************/ + + +/********************************************************* Balance Enquiry of Customer ************************************/ + private void inquiry(String k) { + for(int i=0;i atm.dailyLimit){ - JOptionPane.showMessageDialog( - null, - "Daily withdrawal limit exceeded.\nRemaining limit: RM " + - (atm.dailyLimit - atm.dailyWithdrawn), - "LIMIT EXCEEDED", - JOptionPane.WARNING_MESSAGE - ); - return; - } + } diff --git a/atm/src/atm/AtmMainDriver.java b/atm/src/atm/AtmMainDriver.java index 39da9ed..d09787b 100644 --- a/atm/src/atm/AtmMainDriver.java +++ b/atm/src/atm/AtmMainDriver.java @@ -1,7 +1,4 @@ package atm; -import java.awt.Color; -import java.awt.event.*; -import java.util.*; import javax.swing.*; public class AtmMainDriver @@ -17,3 +14,4 @@ public static void main(String[] args) } } + diff --git a/atm/src/atm/LoginForm.java b/atm/src/atm/LoginForm.java index 997932a..628dae1 100644 --- a/atm/src/atm/LoginForm.java +++ b/atm/src/atm/LoginForm.java @@ -1,9 +1,9 @@ package atm; +import java.awt.*; import java.awt.event.*; -import javax.swing.*; import java.io.*; -import java.awt.*; +import javax.swing.*; public class LoginForm extends JFrame implements ActionListener { @@ -107,8 +107,8 @@ public void actionPerformed(ActionEvent ae) fr = new FileReader("loginInfo.txt"); br = new BufferedReader(fr); - s1 = br.readLine(); - s4 = br.readLine(); // for Password + s1 = br.readLine().trim(); + s4 = br.readLine().trim(); // for Password char [] p = Pfield.getPassword(); password = new String(p); @@ -128,7 +128,7 @@ else if( password.isEmpty()) { JOptionPane.showMessageDialog(null,"ENTER YOUR Password"); } - else if(!Tfield.getText().equals(s1) && !password.equals(s4)) + else if(!Tfield.getText().equals(s1) || !password.equals(s4)) { JOptionPane.showMessageDialog(null,"WRONG USERNAME AND PASSWORD"); } diff --git a/atm/src/atm/TestTransactionHistory.java b/atm/src/atm/TestTransactionHistory.java new file mode 100644 index 0000000..f1593fb --- /dev/null +++ b/atm/src/atm/TestTransactionHistory.java @@ -0,0 +1,44 @@ +package atm; + +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.*; + +public class TestTransactionHistory { + public static void main(String[] args) { + String pin = "1234"; + String filename = "transactions_" + pin + ".txt"; + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(filename, true)); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (int i = 1; i <= 12; i++) { + String ts = sdf.format(new Date()); + bw.write("Deposit | " + (100 + i) + " | " + (1000 + i) + " | " + ts); + bw.newLine(); + try { Thread.sleep(30); } catch (InterruptedException ex) {} + } + bw.close(); + System.out.println("Wrote 12 sample transactions to " + filename); + } catch (IOException e) { + System.out.println("Failed to write transactions: " + e); + e.printStackTrace(); + } + + try { + BufferedReader br = new BufferedReader(new FileReader(filename)); + ArrayList lines = new ArrayList<>(); + String line; + while ((line = br.readLine()) != null) lines.add(line); + br.close(); + + int start = Math.max(0, lines.size() - 10); + System.out.println("\nLast " + Math.min(10, lines.size()) + " transactions:"); + for (int i = start; i < lines.size(); i++) { + System.out.println(lines.get(i)); + } + } catch (IOException e) { + System.out.println("Failed to read transactions: " + e); + e.printStackTrace(); + } + } +} diff --git a/atm/transactions_1234.txt b/atm/transactions_1234.txt new file mode 100644 index 0000000..860dd06 --- /dev/null +++ b/atm/transactions_1234.txt @@ -0,0 +1,12 @@ +Deposit | 101 | 1001 | 2026-02-05 23:57:24 +Deposit | 102 | 1002 | 2026-02-05 23:57:24 +Deposit | 103 | 1003 | 2026-02-05 23:57:24 +Deposit | 104 | 1004 | 2026-02-05 23:57:24 +Deposit | 105 | 1005 | 2026-02-05 23:57:24 +Deposit | 106 | 1006 | 2026-02-05 23:57:24 +Deposit | 107 | 1007 | 2026-02-05 23:57:24 +Deposit | 108 | 1008 | 2026-02-05 23:57:24 +Deposit | 109 | 1009 | 2026-02-05 23:57:24 +Deposit | 110 | 1010 | 2026-02-05 23:57:24 +Deposit | 111 | 1011 | 2026-02-05 23:57:24 +Deposit | 112 | 1012 | 2026-02-05 23:57:24 From 2a077b775d42b396fb13ba851576ebfee039fcd4 Mon Sep 17 00:00:00 2001 From: Nabira28 Date: Fri, 6 Feb 2026 16:22:03 +0800 Subject: [PATCH 11/12] Add input validation and error handling for withdrawal and transfer --- .classpath | 6 ++++ .project | 28 ++++++++++++++++++ atm/build/classes/atm/AccountData.class | Bin 1216 -> 1527 bytes atm/build/classes/atm/Admin.class | Bin 7165 -> 7537 bytes atm/build/classes/atm/AfterLogin.class | Bin 7068 -> 7500 bytes atm/build/classes/atm/AtmMainDriver.class | Bin 654 -> 663 bytes .../classes/atm/LoginForm$ATM_System.class | Bin 3601 -> 0 bytes atm/build/classes/atm/LoginForm.class | Bin 5070 -> 5130 bytes 8 files changed, 34 insertions(+) create mode 100644 .classpath create mode 100644 .project delete mode 100644 atm/build/classes/atm/LoginForm$ATM_System.class diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..62bdf20 --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..a9fd48a --- /dev/null +++ b/.project @@ -0,0 +1,28 @@ + + + ATM-Management-System-Maintenance-Project + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + 1768836522542 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/atm/build/classes/atm/AccountData.class b/atm/build/classes/atm/AccountData.class index 63e2f61c1b7658cc5f9b08d990ed3763f06c1c2d..cf427aaef6e593d7fc1eb15272c564e42154e6aa 100644 GIT binary patch literal 1527 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 diff --git a/atm/build/classes/atm/AfterLogin.class b/atm/build/classes/atm/AfterLogin.class index 42bdefe4de6f8256dbd913e8d2f25f8cc11a61ec..f89a2d1546dac3cff52f4c8a26a8243be2d7fa97 100644 GIT binary patch literal 7500 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 HTM+(#%m$bD literal 7068 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 N*YTcD@N@}2`M-2^1o{8~ diff --git a/atm/build/classes/atm/AtmMainDriver.class b/atm/build/classes/atm/AtmMainDriver.class index 03574652901329ce5e7d69b8c9fcadc0a0eaa17c..44127028f0c25c752ab425b382121958e12bb39b 100644 GIT binary patch delta 422 zcmXYs&q@MO7{$*W9Y@EpoHF~PVOr+sEN0g#0ucg5Xb~B;2u2;`iq1eYWVG=O0&&r% zX9(JiP|%`f&(O0(-_17X+;e~TJAC(1ev(sPKW`rZ>ZmD@=5>}iQV?ZG5A8eK8rkl^ zI_nOdUceAL<}MFT7$Qcs!w_wFeMdzE2@Nu0vsQnqKxatV!Pshh1MZ%Bw__D)B!px% zY#_^^`cBZ{KJShk>M*XW9YMD=Y-5K(A$raq2+2mXxny|_yMiT&wY{DlaL-jxV91Fb z?=64AY0FFQX8Ycx;kkZbyMZrSiyBJUpFgwG?B!yLB4~H|D%jdt}PIM z{lhA$z@P_7Qf>KwJVhyi6|B;Y81|@ABCot7eYL<^+l+=-H+3nmvzri`rp`Wfe1}No i%vgxM|NePPDwIWYb~%j$lqtngz#%Hs&0tWLQ2hmKvqc90 literal 654 zcmZuuU279T6g{)qWYcuhbX#pTR%`u8w+*;2zEuQi2~<}55DBOtOyV?7*$tV;kJ%Pp(o$2zaKrP%G3Al&(dnM3`b*5g<(y=nH9Zsd{*PY>{Omc4?)~xrQ68 zj?}4~CFNm~7wY7rGM7hg$bRf#iNDQ04mb>-vCS%C7R>ei3y81P@d{(30zGv2ZClxZ zRRqjSSi?FIJDj6NI$-xZoYxnq#eH`Uw;woLfp|AZy&s650e;WX=r`tQUeR|c0J>ovz>T7$VFg|kzKTFaS;KKGXz0eOd|QiRUH)!F@kuG?Q&D_c#b-1aScu};C_Wp- zb5Yz;@w^oOISrr37gW5Up${)c@x>@!Qt>4fUse$DgJPhdBb5!zKoo@&j4C+gdWE5TBpc90eFbVsInbs)H9`R6Vw=uDYGaVX^$ zEN8;?irjeMlI2*zWd*U`|Kat`(Xxb_r@GFR<%o2-xG20CbI~RxmU45ZJ!g8BTvv$^ zsYZb|HZyfIyW!In1^T4p2rprqzAwl-wOh%###Y*LVli-T+S0hOTwuA*HQ_DMN|9G^ zrZ=^0u9`#US}-J5iO^7GOH#g%N>deDb*!?0OK9(<9lF}+x ziTLUJ2_-gVUw9U^$C~731J7~_6cH`ar#06j{~)80yFF!=sz98Sj^s=yC+t0*sPoCJ z>!qh@)ue*9obCFwytP;Q(79$g2@RtP=8K}uqS zH0&!XUe@tdd`-pIb-aRC6&!9DT8Wa5Z{V9MzNO>a_>MgET^)Dvnu4>*^h`2i%uml| zjM*&T(qmIe!=#Tl>cAk5-v+CER=Tu9Zheb)D*|#4Qd6uD`m^h3s1+-@T!iV<8@|y zGBceqhA$55cthgdX3A>P@e8~uYh?P#$+VH3O(c@p?8Iy;HLsw(UULc(_whIBd9EYe zvMo~eT;sk7<}BX|8&B6{dTuN=Ic_8}$#Di@ax9fq&@=8D^KRM52-CJV zj2osC7&ESsFr9?34OVhuES*TE6ohWB5BV&#!qC;}ut8ii9iiiw_?3!Z>-Y_RTTA&y zvuUb2nMS`;u=EbSnQ>kFwiUz+A{ZA-CL47VrP3_JqP|`hWf3pAeo*ZI_wJ);(zZpx zv<;tg!^#X1)(W>I$PYCjLVO0}iRhIMe49QG(PmlHl`*F{dR zzC9x!N*ZZXFqy^}JyHCtrh zD!qgU=Wv!6);RC3t^5w*A{0Erw-!9g=VQFl*4FPkd|1w7Qrk#-93SL!gsZ1`vW350 z{R4l3(!Yh49kkBJB3o$t8_6vgl{^r9UDxWsjLb6P_#no7_L+VD=$-U z8+mW{{}IYI4s1f5+Cg-_vTWakwuO%L!<*3WqH8ex(UsW2Z5(<7uT;ofcZTabb^hUS zy;2c!WD~Kwcr4bnjiWb0vyVx$M>)ljaXLIa9P6R@ciqML zSP$j$<+KtzL)H!q9y&V`2}QkIic(_lA>%E&Wbz)rLdRP}Kr%Q=*M`tR#CwSK0FfRh z2%|)HoVY$km}Ur$i3AFytiXbgW!^Pz^Pb`29w~2<@&^R?3)b;>JR1Ug83#yxh^NL8 zAy-2Z6MQ3#b+F&YllTZN>cBQ8ah0I=;B{)eO50N0c@*luF{~oWPiN;dD!R|~w{h20 zEi|+x!o3We5<3?=-@1(pPn>=YDqnivBDvyXEL8g(O}K+YcpfqS`H-p?MQ;{^{0F-|r#tSO0;X0o()zXwGQ>}Xkee?ZC@Q*F@r$Vd;_Q|#vpyS1+Z0oLS z)M-%$S;}lD#Ise|!?a4FY%P@c@Gg0@g`Af{S$bs`=5T|w7JM{(&f`P!EO~?c?{*o= Fe*uR$z^VWM diff --git a/atm/build/classes/atm/LoginForm.class b/atm/build/classes/atm/LoginForm.class index c6d68126ff5a0ea9c3768a12592b549965ccd97d..e26ca0bf312f6ca2a0852b59e22672adefbaca76 100644 GIT binary patch literal 5130 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 From 936cf31eb93b8d2f5bc80cb7a3385b76a94d3dd5 Mon Sep 17 00:00:00 2001 From: Nabira28 Date: Fri, 6 Feb 2026 16:55:38 +0800 Subject: [PATCH 12/12] add input validation and error handling for balance and transfer --- atm/build/classes/atm/Admin.class | Bin 7537 -> 8338 bytes atm/build/classes/atm/AfterLogin.class | Bin 7500 -> 10587 bytes atm/build/classes/atm/AtmMainDriver.class | Bin 663 -> 663 bytes atm/build/classes/atm/LoginForm.class | Bin 5130 -> 5155 bytes .../classes/atm/TestTransactionHistory.class | Bin 0 -> 3223 bytes atm/src/atm/AfterLogin.java | 30 +++++++++++++----- 6 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 atm/build/classes/atm/TestTransactionHistory.class diff --git a/atm/build/classes/atm/Admin.class b/atm/build/classes/atm/Admin.class index 29dd82ddb8929599d1ec059fc32d7282719de0ad..0783623c81abc7a67f08636a00e6cd1dd6ce4055 100644 GIT binary patch literal 8338 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 sqlr$^6-H3|0J7a&YybcN literal 7537 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 WKc9C$zbP+phPoR4wtQD!Lg=ppRFQxH literal 7500 zcmbtZ3wRt?b^fok(u`JPTV6$u*Or~JqsV&MaunNfB*%_kw%5^0vZPqZ#3|$5k+jij zN12_qtb~$~m=Yf0oj@M6q_k0i(&E%wIX0xGfu;?VlBOvQ6q-H=lmex+6q-7y|DBnY zRuA~{!P>iX=RVFo_dowR=iaO5etzL;0IlMff&zinhBMySI_#Ksmo<_|DF_IJZZ}RD zryJ9giPT8rk%P7|ZYn4i*d*&4jY+4`JY}Yw#@3jVuu@%#v}2}BTcE_eBa^VF+MJX? zMb{!BZ5hY0QY`|dlL==uZX1(suacxSVr3k+TM~9WT(MXX>&ztO z6viyh;x)P|wOc92NKg+pYOze(vBph1N!@a~G-jMcva!{+jVY{uBO(TUfOE`965T2hSgXT#7;CRkjtI7>wG^A*I^g+Oq))ZF+~#z zZ1k5S<#}~cBV~*b@Y-V~*n_6 zEVSOHp+vU6iNvJm(n4~~New|Mb|>N*ObojmCzN%Ipd6pz94V(|5kYd5Qm0W33EVEQ z)`-WKI{DT-Q7eT3q9=Ko)G&@K=^RPRi1(Uy+DZ|%HC^=3?#%c}(;hHRCP~v!mlZRT z#|%3m-~GyfGn!!UGS4&TgHwwF)_QDBSd9l0Nwd#1;-;-4LnE~NPOtZwG0Tqca85fx z*r-%+n(pB8lB3!(!-Uz4dn1FG#GR4~cP;RZoxDbODU zB2>IpKr{q#AKs?m4E1;C%9aT8zXL)5W-kkKkdl(~T@%u4p9gy^OUEBd%$TGc-Jkk1BY~cdsSQ z8h#tULpPj|Ba$-Vh}(*1G<*SH6u5HS7&Dno zVumAQ7fZw@vCr1>*IF{F{(T(#s7ss^$J2(7^2`gs*;}-j`Xd{{1v`JgwvzeWYkQjnKL>P26rU_`}{e){Fw`nd8+z2<<Y;%E_2L zOrT4gW1fr!_>m;ze{!R+0vVUDZh6fLgjMlh+-NN~MQ>kEduM-tXNTM_{zSw7$VeMZ z8>dV!wUSR`{2Kgn%PeC2GV2SnPH+i=*|ET&@2R=Xw<-!a&jKzIFGpe_oi%RQld1?X zhzv#s4tKQn4Z2iNMe(nSaBlme3NSy)nME@F+h zvF18utI3+H@>rL@1L>595}C8bT2ZcukiZ7lo0c9}+TvDtIQ?KScik(gs3JF>B<8}Yd57c~ zk!`aqC(WQf5jCArE1nLDcG0Pb4uPtLxSmLzvc^pRTE}Nn}6uCt6{9R9^^*E0yBv347riU}hawVv!S=dy*exWUzt@So!QHN)Eh4Z)Aj+e0m-$x^UhMgk7iLJi}oEckoTf!?thKX;P(>b@zy_i?D}6&MZzfD;F_26jo+2 z)vSiqEZ*E)GL4RKN$8#|?(M2CY>L(gn!4+YnwkUk#ZApc^-5E7@kQJ})UZ7q2p5Hm zXYtPFAmP{+4rcMdpf4j_^6cE_WchtzC5sPEV^y>ABt9fx9yv>W3V006;A5n*#Oatz z!2_)AAXz(!(qUXhbhe_4C`7sXZZz@w;d=C9ACB^>rXPJ6z^%9iG4>n9AlLZ@${eE9 z<2-cUio0=}i^rWrglqQkDBy|xckyv*umij05r%U%;aYiKp)S|cGEcA+;4IrP%~BEP z+A7a5wBahAbU%Sl62bg7a94@{!%cG>Sm3v^%g5w(4O6#gGztpvA8@en#%b)8I9Fyda|!o% z*Ka?Er?R;CFg6PopXT?{1^gKxUoPO!fxvlu=}dvBl%ulv>&NGwk<|1c-{5-uFc&z= z`4gn(7?(dx@KY{qb>6H#Y@8o2aGBC@?WE+3e6A%?<$?>{WvVE=j3RMu0sAo5d)kZF zC`H2mRN)?V8lRAgRFD)>|K^hVa7k_jg|c`l+Hf9U+fyV$-wgd@@p=4Hb3lZ?9r}(e zc5jzW#T7*r#qmALG^!U5__xq^ik9`NP#&H8Mul=7|K1!7mxO~exFjTL9ubm0C$ryZzXW|k|+1!5Iwk? zS2;&{^c}=Ia02h5Z@-(|d;kvXr|@1f@qKtZZ$uu&hseJN$*3uu=cR}AU5~3z&4d0F ze(Hi=&9OgYserSL;eT0@T+QHBmIBn^9`fi#n(`1CdYPqSYH=H0V@YAp8P{McwSLew zSPA>r;^!P2qy|NpVoltV@N*e<2mlEV6955apt9B?ipYQ;hH~(3o(MY`1Amu#s z@1>`D=AS~%y!kV}`S&vzdgkwB0L+>H)AQzkz&HP6bktQedeAlcp_Pq3N3Jb0H?8R# zyK0Vq1XyZpI=)yf)_B$~_yT!VMDpBGpA}`7&=YN-!3Unea2@Tru3W5_CY=!*3inUr zkmSN9KPm+3&WR1-fEO4Z0S|1VvRrJYWxq6y4f%}^qqI)GXN7*IP;8p_*>iHL6aG|N z%SF}en(AS!_N7%%gTnHaSe>WD@~MXWscOna-Rqj_b*`#m`BcUe*h*b?l#88(=S9>0 zO^+bN_dVreucR^Snitsm5UwFxpJOumGXEy@6{f1^xxILS3F$@Lgs(iQ&C8s-@NK*kuP{t~m+br=dHnEB2mSwfa^qwXu)ed4wQ+bJZzt!h6az+N%oo$y36!oa*yQ5F`cE$Vn3;)3dwJk zfo=;Es?0Nm)OVN5+W-S;uI{nE3R;sm+vd$xxd|_m+kVTdsOs` HTM+(#%m$bD diff --git a/atm/build/classes/atm/AtmMainDriver.class b/atm/build/classes/atm/AtmMainDriver.class index 44127028f0c25c752ab425b382121958e12bb39b..0da7eea492aa04816b79b877da3c1ba4d8e01076 100644 GIT binary patch delta 39 vcmbQvI-PaHUq(ij$^RJRL^&8Z7&sYt8Mqk48Mqk~8F(1f82Ba^GN}Ooud)Wv delta 39 tcmbQvI-PaHUq(ju$^RJRM7bF_7teV%~;Sd-N-nol>Mn6F^&GPrnJzmX7_t$n)ZGtm~qeSd!Fz4p6C7E^M2<$ z+XK4;`t-T|2LRNueq2A664!AApJ+HrWNvEdZwYp`MB0O^V}0RByMa&f5#f|Umm9<} z1M}ch=raTP@agEs7Y4q>S43)iD0Xv8GI}8ULTxG3%-wng-R40(FP=)Ix5T=FbsJ-$z8kyS!x5c27OAjPg&`Fl zRH0g97U8zVZCy&|Q96&(d6dqhbRJaen5NI*MJSbyw03q!Lpl!8r_;|ujRjJ^y#?X! z;EG10VW2hC6AO1o3>KL^skxQK1f*}AZ*T!BrA5)Xw)JzqjvMHd4Pm*#3NGC9dg@+h z_8K^$0o=FH!aEgjplO6rb4zA^+``8bn5n3;@PQ4F%jBSi&ug6(Q#jJ>b57#x37izR z$HI5D$-ZO@KPHeX#7P?&%=&dNejmlD*(o7T+r)_rHD_$<@N6Er%~<$1fw)JBXF<3c{U50OOue!c$p$XAytk9DyOJ7PtvG$ z`CQ2s(|j%u-}i8b6=%B7<+PaLbJ1evC~Cx`R!g9KiXQQJl}8lW;z`Q)@HUG%Hj!&v z@+vLPtFn0UC@O26J`v`RqIkB;>qhMAd%V2FVu@rPv{9*`n=F`%SLmyTminVgu!Wa;CP?$UAx(oN!LfxEH%* zG=cl^Cbr>iJb=S^2uHCUGZ?~IJVFN^Wg2!e7bf%Z7|ZZDtFVhTc!G=ZB$weSuE5i5 z#4~ZO$Fsa0&v7GO;3kYPf>HM3MMg2k0ldu3c!k^W8h2ov!`Q>;F~OHG$yc#ocJnQ{ zfLq~K?;j3GIr8H^R?32uE$?78gGiD`4)ao828Vo+s(3jH<(*y2JjQF_L$Xxr=OSJK zm(=CwVqPgID*O^&1t)7I=Q5<7mxj1BP{X?#rZpVWc(o>{9+_DMZvPpq3!ayg;dR@HE{LovPu~hmZwX;rQ5|{r64|Y$U delta 1300 zcmX|AYitx{6g{Wi-RVxJ+sBqIySC64`dYTF0zTNP2&4gxh|p@N7)@>0X6v?Fx|>QB zvq9qnQY>M7EfF;_bP0({rJXi3;t%ytLqeiPu`1vL-{KP#AK?8a#Y}SN%$ak~y>sWg zFW2s<)u%5UJ_29`Zy422Yj3%0U`jUf0c5U4qIrzyOc2~Q8!EYLVHK*LA*}vngIpbc* zKg=>cP;s8{Hs8|PyrH~p-EAAnFZHJ^|2FUs{xvu1m07rGZq+M&G?=Ao=+Q(=Bo^sN zMmlroFvs*DUFJ!>B$Y#W+LJwvEACB3`frYRMSFE>SgOKq6^2xJLWKs6`GngRclIcq zN9jCD=TSP3(s|IJW12pLC8(BRbj0F`h>m0Q=?t(`<7LvmJ-%qX@y2yV^OlZCUosl+ zHCSeD%k_ok6OfUy!eAvrGM&Vwkqxjy$4#XCAyyl#VeO%}awi?dYvF(f@byI&-VTnT zb%ZfRd7$${1itTt0 zJMaO9a28L>;UA_8yO|G@bMO?)@ieRP3`2O9jd+gB@H|&yFW2CO6kG5j+wclFENYD{{v$wM7sb0 diff --git a/atm/build/classes/atm/TestTransactionHistory.class b/atm/build/classes/atm/TestTransactionHistory.class new file mode 100644 index 0000000000000000000000000000000000000000..c029fa9bd83ae296251c93ff654df43966f4dbd1 GIT binary patch literal 3223 zcmZ`*`*Ryt75=XESb4i?967S1#!ZygaqQNPnzW=7Ig~U`jaB>zwXw1LNLJF?-dNfd zyQ{z$DVfX=N_^JN{49vg}{Mun+zPpkg$r2j-?(W&| ze)rsSzI)F8_0IZx0G`B}f+m6cbgz({FkElK(JfccdZuj+nXYF$OA3MlEf@7mdNQwD zbIGyHMI-A8gio24={+G3=>f5PW3*Jr7|w*A$r}REVLPkm zCw0e^&lO|Pn>Ss7j^Y3BK|k3Gx@iftbw4|N*OPJ2F|E1&p2-OI5OVDJqmM)oK4H_CPu`>NgaHKvG8h5rOXRbh;kVV3G{MaSe}3PeYewK&9nF z8cs;%D3)vvH2n@+dGvFZ4&zgjN+#V_3n*82YWO zS79`a$h{~w#3vO@RXLF! zdulOj6y<@{Fzp{a--&Tg&o1yZXAK3%w?mU#JDriMT-30Dyg-EU&dJmZ?Cox- zn;D#z#I}YaKE-^y<`sfjg3>BnloT+FWr6#}YDD+uHC)1FVhZ{q^+1W1u}d1RlxD!Dlsm4xcB}oFTPRi>vG>%5b$RxF&GGmx=F1+G53UN=47eZ6}Mq z>&_gDQEP*e#x;tv-bL$A6N5C%YGdgI?z<_&jqTeOZEcC-aS6CNDy*XnXjn`L5+?uC zB$K64koE2&ws~fb9F_UCn&AAPd@s+cr#lQ_TWvd7DsHueO89H% zpQ;bV6Xe|G>wH8n`t3x)%L3}SU2?L9tjPlV8#lG1GC4e*XKdSZJx4E&7~Z^{V+nl= zKT+^w7QegcGp$SZf{`q@n{q=LWQ$~Pl#+Q{;6`<^t)R<ZW@GF6XgF3^UlLo(x*T7N|^c(6y9oAis z3siHYBDl>%a(BKw`n8CJ5YW<=WjF(Q-E|FD!S4kQ*CnP=s1>Z#9Ko94R70`aB|bXiHiW@ zP_$+E;dSuSWMl(v(;L_~-5XrReXF>CbOVX$=mV?hOa+4{Ld!TA4{qSd^eTE*@K7q; z*OH5cF6;^XgJV3rj-$W|j`gkJvAuYF4JVfoN-5VuA{J`V-roE(Uwq_UoatT1kOZce z(LT!OzBP=lW5PEP@`(-1(2M7$dsp$oD$di13|Gvhg3Guk9*l=pU`!EbPNzbD+58Xh z3W0cV1y+liTZ3~VOv)D3x2$1t9iR4zW8o9ZGTQhq9*ij~_{<+MMi;IrBBuD*w>JM? zk6FqqWui`7*K^Mlk*4OB94^HFj z_y%>9BKLLT!t|sSuia#y{z? zaXN=Kr-RNKmbtcm&E$GXW3^Uitu{X%le- zwgJ*S*?I^270f8e5cmO