Preface
In this era of technology many systems are going to be automated through computerized systems.
ATM is also one of them. We are frequently doing transactions through ATM for our daily needs. I
visited ATM machine was thinking about how it is functioning.
This thought creates an idea to make this project for my practical evaluation and I talk to my group
members and they all agreed to do so. Then I talked to my teacher and he said develop it using
user friendly tkinter library in Python with MySQL connectivity.
We have started working on it and here it is!!
AIM: To develop an ATM software to understand how the ATM machine is working
Title: ATM Machine Software
Problem Definition: Developing a software for ATM machine to understand how the ATM machines
are working, handles data and managing the bank accounts.
P a g e 1 | 36
Introduction to ATM Machine
An automated teller machine (ATM) is an electronic banking outlet that allows customers to
complete basic transactions without the aid of a branch representative or teller. Anyone with
a credit card or debit card can access cash at most ATMs, either in the USA or abroad.
ATMs are convenient, allowing consumers to perform quick self-service transactions such as
deposits, cash withdrawals, bill payments, and transfers between accounts. Fees are commonly
charged for cash withdrawals by the bank where the account is located, by the operator of the
ATM, or by both. Some or all of these fees can be avoided by using an ATM operated directly by the
bank that holds the account. Using an ATM abroad can cost more than using one in the USA.
ATMs are known in different parts of the world as automated bank machines (ABMs) or cash
machines.
The ATM MACHINE SOFTWARE which is as same as normal ATM machine. It allows the
user to create account, deposit money, withdraw money, transfer the money and check balance.
The ATM Machine Software is the project which is used to access their bank accounts in order to
make cash withdrawals. Whenever the user need to make cash withdrawals, they can enter
their PIN number (Personal Identification Number) and the amount will be withdrawn. Once their
withdrawn is successful, the amount will be debited from their account. The ATM System is
developed with MYSQL connectivity and Tkinter.
P a g e 2 | 36
Objectives of the project
The objective of this project is to learn and apply the programming knowledge into a real- world
problem and exposed how programming skills helps in developing a good software.
The ATM System is the project which is used to access their bank accounts in order to make cash
withdrawals. Whenever the user needs to make cash withdraws, they can enter their PIN number
(personal identification number) and it will display the amount to be withdrawn. Once their
withdrawn was successful, the amount will be debited in their account.
The ATM will service one customer at a time. A customer will be required to enter ATM Card
number, Personal Identification Number (PIN) – both of which will be sent to the database for
validation as part of each transaction. The customer will then be able to perform one or more
transactions. Also customer must be able to make a balance inquiry of any account linked to the
card.
This project also helps to apply python programming principles and write effective procedural
code to solve real life problems and automate the manual process.
P a g e 3 | 36
The existing system
The person is visiting ATM to withdraw money or deposit money. The machine is capable to perform
the transactions related to withdrawal and deposit. Earlier people were going to bank and standing
in queue for withdrawal and deposit. People going to bank and filling the forms to perform a
transaction. The cashier will collect he form issue a token to the individual. The person has to wait
till token number announced. After announcement for the same person get money.
Another aspect is a person can withdraw money during scheduled time only. So, ATM machines
solve these all problems and allows a person to withdraw money anytime anywhere.
ATM machine will ask for a pin to perform a transaction. In this project, we have used account
number and pin generation for the same.
The modern machine allows cash deposits also. Here we have integrated alike system after
entering account number, pin number and the amount person wants to deposit in his/her account.
P a g e 4 | 36
Scope of the project
This project will update as time goes and changes made by banks for learning purpose. This
software requires Python platform and
SYSTEM REQUIRED FOR THE PROJECT
PROCESSOR: Intel® Core™ i3 processor 4300M at 2.60 GHz or higher
DISK SPACE: 2 to 4 GB.
OPERATING SYSTEMS: Windows® 10, MACOS, and UBUNTU.
PYTHON VERSIONS: 3.8.10
MYSQL VERSION: 5.1.33
PROCESSOR: Intel Atom® processor or Intel® Core™ i3 processor.
DISK SPACE: 1 GB.
OPERATING SYSTEM: Windows 7 or later, MACOS, and UBUNTU.
PYTHON VERSION: 3.7.X TO 3.8.11
MYSQL VERSION: 5.1.33
You need root or administrator privileges to perform the installation process.
Python must be installed on your machine.
Note: – MySQL Connector Python requires python to be in the system’s PATH.
Installation fails if it doesn’t find Python. On Windows, If Python doesn’t exist
P a g e 5 | 36
in the system’s PATH, please manually add the directory containing
python.exe yourself.
OVERVIEW OF PYTHON
Python is an interpreted, object-oriented, high-level programming language with dynamic
semantics. Its high-level built in data structures, combined with dynamic typing and dynamic
binding, make it very attractive for rapid application development, as well as for use as a scripting
or glue language to connect existing components together. Python’s simple, easy to learn syntax
emphasizes readability and therefore reduces to cost of program maintenance. Python supports
modules and packages, which encourages program modularity and code reuse. The python
interpreter and the extensive standard library are available in source or binary form without
charge for all major platforms, and can be freely distributed.
Features of python:-
1)easy to learn and use
2)expensive language
3)interpreted language
4)cross-platform language
5)free and open source
6)objective oriented language
7)large standard library
P a g e 6 | 36
OVERVIEW OF MYSQL
MySQL is popular among all databases, and is ranked as second most popular database, only
slightly trailing Oracle Database. Among open source databases, MySQL is the most popular
database in use today. Known as one of the most reliable and performative databases out there,
it was named after its founder’s daughter My, and is known for organizing data into one or more
data tables in which data types are related to each other. These relations help structure data, as
SQL is a language programmers use for creation, modification and extraction of data from a
relational database.
MySQL uses standalone clients that allow users to interact with MySQL, and also to use it with
other programs for applications that need relational database capabilities. MySQL's reputation
for reliability has led to its inclusion in the popular LAMP stack (Linux, Apache, MySQL,
Python/Perl/PHP) and is also used as the default DBMS in popular CMS options like Drupal,
Joomla, phpBB, and WordPress.
Features of MySQL:
1.easy to use
2.scalable
3.secure
4.reliable
P a g e 7 | 36
OVERVIEW OF Tkinter
What is python Tkinter?
Python Tkinter is a python standard library that offers many functions and controls to develop
desktop based applications or Graphical User Interface (GUI) based applications .
What are python Tkinter widgets?
Python Tkinter widgets are the controls drawn on the main window to design desktop-based
applications. These widgets are explained in the next section.
Python tkinter has 18 widgets. They are as follows:
S.No Widget Description
1 Button Used to add a clickable command button in tkinter window
2 Canvas Used to draw a complex layout and picture, it can hold text and graphics
3 Check Button Used to select an option from multiple options given in the window
4 Entry Used to accept a single-line text for input
Used to hold multiple widgets inside a frame and organize them in proper
5 Frame
order
6 Label Used to display a single-line caption
P a g e 8 | 36
7 List Box Used to display a list of options
8 Menu Used to prepare command menus for tkinter window
9 Menu Button Used to add a menu item in the main menu
10 Message Used to display a message box with a message and buttons
11 Radio Button Used to select a single option from given multiple options
12 Scale Used to provide a scale with a slider holding list of values
13 Scrollbar Used to navigate throughout the window
14 Text Used to take input of multiple lines from the user
15 Top level Used to provide a top-level container
16 Spin Box Used to accept value by selecting a fixed value of numbers
17 Paned Window Used to handle different panes of a window
18 Label Frame Used to handle complex widgets
P a g e 9 | 36
Modules Used-
➢ from tkinter import *
➢ from tkinter import messagebox
➢ import mysql.connector as my
➢ from PIL import ImageTk, Image
➢ from datetime import datetime
➢ import random
Functions Used-
➢ withdraw()
➢ money()
➢ balance()
➢ check()
➢ pinchange()
➢ change()
➢ ministatement()
➢ view()
➢ deposit()
➢ depst()
➢ info()
➢ viewinfo()
P a g e 10 | 36
MYSQL Tables Used-
1. USER’S INFO TABLE-
2. TRANSACTION INFO TABLE-
P a g e 11 | 36
SOURCE CODE
from tkinter import *
from tkinter import messagebox
import mysql.connector as my
from PIL import ImageTk, Image
from datetime import datetime
import random
now=datetime.now()
date=now.strftime("%d/%m/%Y %H:%M:%S")
tid=random.randint(100,999)
d='Debit'
c='Credit'
window1=Tk()
window1.title('ATM')
window1.maxsize(1350,1500)
window1.minsize(1350,1500)
img=Image.open('welcome.png')
bg=ImageTk.PhotoImage(img)
label=Label(window1,image=bg)
P a g e 12 | 36
label.place(x=-320,y=-100)
def withdraw():
window2=Toplevel()
window2.title('Withdraw Money')
window2.maxsize(1350,1500)
window2.minsize(1350,1500)
img=Image.open('all.png')
r=img.resize((1350,1500))
img=ImageTk.PhotoImage(r)
label=Label(window2,image=img)
label.image=img
label.pack()
l1=Label(window2,text='Enter Account Number',bg='white',fg='black',font=('Arial',30),width=20)
l1.place(x=150,y=100)
l2=Label(window2,text='Enter Pin',bg='white',fg='black',font=('Arial',30),width=20)
l2.place(x=150,y=250)
l3=Label(window2,text='Enter Amount',bg='white',fg='black',font=('Arial',30),width=20)
l3.place(x=150,y=400)
uname=StringVar()
passwd=StringVar()
amount=StringVar()
e1=Entry(window2,font=('Arial',30),width=20,bg='white',bd=2,textvariable=uname)
P a g e 13 | 36
e1.place(x=650,y=100)
e1.focus_set()
e2=Entry(window2,font=('Arial',30),width=20,bg='white',bd=2,textvariable=passwd,show='*')
e2.place(x=650,y=250)
e3=Entry(window2,font=('Arial',30),width=20,bg='white',bd=2,textvariable=amount)
e3.place(x=650,y=400)
def money():
global tid
global c
global d
global date
cn=my.connect(host='localhost',user='root',passwd='root',database='atm')
cur=cn.cursor()
cur.execute("select * from atm_mac where accountnumber='{}' and
pin='{}'".format(e1.get(),e2.get()))
da=cur.fetchall()
da=list(da)
rc=cur.rowcount
if rc==1:
cur.execute("select * from atm_mac where accountnumber='{}' and
pin='{}'".format(e1.get(),e2.get()))
dt=cur.fetchall()
dt=list(dt)
P a g e 14 | 36
c=dt[0][5]
if c>0:
tid+=1
m="update atm_mac set debitamt={},balance=balance-{} where accountnumber='{}' and
{}<=balance".format(e3.get(),e3.get(),e1.get(),e3.get())
cur.execute(m)
cur.execute("select*from atm_mac where accountnumber='{}' and
pin='{}'".format(e1.get(),e2.get()))
dt=cur.fetchall()
dt=list(dt)
c=dt[0][5]
m1="insert into transaction values({},'{}','{}',{},{},'{}')".format(tid,date,d,e3.get(),c,e1.get())
cur.execute(m1)
cn.commit()
l8=Label(window2,text='Transaction
Successful!',bg='lightblue',fg='red',font=('Arial',30),width=20)
l8.place(x=450,y=500)
else:
l6=Label(window2,text='Insufficient Balance!',bg='white',fg='red',font=('Arial',30),width=20)
l6.place(x=430,y=525)
else:
l=Label(window2,text='Invalid Account no. or
pin!',bg='white',fg='red',font=('Arial',30),width=20)
l.place(x=430,y=525)
P a g e 15 | 36
b6=Button(window2,text='Withdraw
Money',font=('Arial',20),width=20,bd=2,bg='white',command=money)
b6.place(x=500,y=600)
b1=Button(window1,text='Withdraw
Money',font=('Arial',20),width=20,bd=2,bg='white',command=withdraw)
b1.place(x=200,y=300)
def balance():
window3=Toplevel()
window3.title('Balance Enquiry')
window3.maxsize(1500,1500)
window3.minsize(1350,1500)
img=Image.open('all.png')
r=img.resize((1350,1500))
img=ImageTk.PhotoImage(r)
label=Label(window3,image=img)
label.image=img
label.pack()
l4=Label(window3,text='Enter Account Number',bg='lightblue',fg='black',font=('Arial',30),width=20)
l4.place(x=150,y=100)
l5=Label(window3,text='Enter Pin',bg='lightblue',fg='black',font=('Arial',30),width=20)
l5.place(x=150,y=250)
accno=StringVar()
pin=StringVar()
P a g e 16 | 36
e4=Entry(window3,font=('Arial',30),width=20,bg='white',bd=2,textvariable=accno)
e4.place(x=650,y=100)
e4.focus_set()
e5=Entry(window3,font=('Arial',30),width=20,bg='white',bd=2,textvariable=pin,show='*')
e5.place(x=650,y=250)
def check():
cn=my.connect(host='localhost',user='root',passwd='root',database='atm')
cur=cn.cursor()
cur.execute("select * from atm_mac where accountnumber='{}' and
pin='{}'".format(e4.get(),e5.get()))
da=cur.fetchall()
da=list(da)
rc=cur.rowcount
if rc==1:
window3.title('Balance Inquiry')
window3.maxsize(1500,1500)
window3.minsize(1350,1500)
window3['bg']="lightblue"
bal=da[0][5]
s=StringVar()
s.set(bal)
l7=Label(window3,text='Available
Balance:',bg='lightblue',fg='black',font=('Arial',30),width=20)
P a g e 17 | 36
l7.place(x=150,y=400)
e=Entry(window3,state="disabled",textvariable=s,font=('Arial',30))
e.place(x=650,y=400)
b7=Button(window3,text='Check
Balance',font=('Arial',20),width=20,bd=2,bg='white',command=check)
b7.place(x=500,y=600)
b2=Button(window1,text='Balance
Enquiry',font=('Arial',20),width=20,bd=2,bg='white',command=balance)
b2.place(x=770,y=300)
def pinchange():
window4=Toplevel()
window4.title('Pin Change')
window4.maxsize(1500,1500)
window4.minsize(1350,1500)
img=Image.open('all.png')
r=img.resize((1350,1500))
img=ImageTk.PhotoImage(r)
label=Label(window4,image=img)
label.image=img
label.pack()
l4=Label(window4,text='Enter Account Number',bg='white',fg='black',font=('Arial',30),width=20)
l4.place(x=150,y=100)
l5=Label(window4,text='Enter Pin',bg='white',fg='black',font=('Arial',30),width=20)
P a g e 18 | 36
l5.place(x=150,y=250)
accno=StringVar()
pin=StringVar()
npin=StringVar()
e4=Entry(window4,font=('Arial',30),width=20,bg='white',bd=2,textvariable=accno)
e4.place(x=650,y=100)
e4.focus_set()
e5=Entry(window4,font=('Arial',30),width=20,bg='white',bd=2,textvariable=pin,show='*')
e5.place(x=650,y=250)
def change():
cn=my.connect(host='localhost',user='root',passwd='root',database='atm')
cur=cn.cursor()
cur.execute("select * from atm_mac where accountnumber='{}' and
pin='{}'".format(e4.get(),e5.get()))
da=cur.fetchall()
da=list(da)
rc=cur.rowcount
if rc==1:
l6=Label(window4,text='Enter NEW PIN:',bg='white',fg='black',font=('Arial',30),width=20)
l6.place(x=150,y=450)
e6=Entry(window4,font=('Arial',30),width=20,bg='white',bd=2,textvariable=npin)
e6.place(x=650,y=450)
q="update atm_mac set pin={} where accountnumber='{}'".format(e6.get(),e4.get())
P a g e 19 | 36
cur.execute(q)
cn.commit()
l8=Label(window4,text='Your pin was changed!',bg='white',fg='red',font=('Arial',30),width=20)
l8.place(x=400,y=500)
else:
l=Label(window4,text='Invalid Account no. or
pin!',bg='white',fg='red',font=('Arial',30),width=20)
l.place(x=425,y=500)
b6=Button(window4,text='Change
Pin',font=('Arial',20),width=20,bd=2,bg='white',command=change)
b6.place(x=500,y=600)
b3=Button(window1,text='PIN
Change',font=('Arial',20),width=20,bd=2,bg='white',command=pinchange)
b3.place(x=200,y=500)
def ministatement():
window5=Toplevel()
window5.title('Mini-statement')
window5.maxsize(1500,1500)
window5.minsize(1350,1500)
img=Image.open('all.png')
r=img.resize((1350,1500))
img=ImageTk.PhotoImage(r)
label=Label(window5,image=img)
label.image=img
P a g e 20 | 36
label.pack()
l1=Label(window5,text='Enter Account Number',bg='white',fg='black',font=('Arial',30),width=20)
l1.place(x=150,y=100)
l2=Label(window5,text='Enter Pin',bg='white',fg='black',font=('Arial',30),width=20)
l2.place(x=150,y=250)
uname=StringVar()
passwd=StringVar()
e1=Entry(window5,font=('Arial',30),width=20,bg='white',bd=2,textvariable=uname)
e1.place(x=650,y=100)
e1.focus_set()
e2=Entry(window5,font=('Arial',30),width=20,bg='white',bd=2,textvariable=passwd,show='*')
e2.place(x=650,y=250)
def view():
cn=my.connect(host='localhost',user='root',passwd='root',database='atm')
cur=cn.cursor()
cur.execute("select * from transaction where accountnumber='{}'".format(e1.get()))
da=cur.fetchall()
da=list(da)
rc=cur.rowcount
if rc>1:
window0=Tk()
window0.title('Mini-statement')
P a g e 21 | 36
window0.maxsize(1500,1500)
window0.minsize(1350,1500)
cn=my.connect(host='localhost',user='root',passwd='root',database='atm')
cur=cn.cursor()
cur.execute("select * from transaction where accountnumber='{}'".format(e1.get()))
i=0
e=Label(window0,width=35,text='Transaction ID',justify='center',borderwidth=2,
relief='ridge',anchor='center',bg='yellow')
e.grid(row=0,column=0)
e=Label(window0,width=35,text='Date/Time',borderwidth=2,
relief='ridge',anchor='center',bg='yellow')
e.grid(row=0,column=1)
e=Label(window0,width=35,text='Transaction type',borderwidth=2,
relief='ridge',anchor='center',bg='yellow')
e.grid(row=0,column=2)
e=Label(window0,width=35,text='Amount',borderwidth=2,
relief='ridge',anchor='center',bg='yellow')
e.grid(row=0,column=3)
e=Label(window0,width=35,text='Balance',borderwidth=2,
relief='ridge',anchor='center',bg='yellow')
e.grid(row=0,column=4)
i=1
for transaction in cur:
for j in range(len(transaction)):
if j==5:
P a g e 22 | 36
continue
else:
e = Entry(window0, width=40, fg='black',justify=CENTER)
e.grid(row=i, column=j)
e.insert(END, transaction[j])
i=i+1
b6=Button(window5,text='View recent
transactions',font=('Arial',20),width=20,bd=2,bg='white',command=view)
b6.place(x=500,y=600)
b4=Button(window1,text='Mini-
statement',font=('Arial',20),width=20,bd=2,bg='white',command=ministatement)
b4.place(x=770,y=500)
def deposit():
global tid
global c
global d
global date
window6=Toplevel()
window6.title('Deposit')
window6.maxsize(1500,1500)
window6.minsize(1350,1500)
img=Image.open('all.png')
r=img.resize((1350,1500))
P a g e 23 | 36
img=ImageTk.PhotoImage(r)
label=Label(window6,image=img)
label.image=img
label.pack()
l4=Label(window6,text='Enter Account Number',bg='lightblue',fg='black',font=('Arial',30),width=20)
l4.place(x=150,y=100)
l5=Label(window6,text='Enter Pin',bg='lightblue',fg='black',font=('Arial',30),width=20)
l5.place(x=150,y=250)
l6=Label(window6,text='Enter Amount',bg='lightblue',fg='black',font=('Arial',30),width=20)
l6.place(x=150,y=450)
accno=StringVar()
pin=StringVar()
depo=StringVar()
e4=Entry(window6,font=('Arial',30),width=20,bg='white',bd=2,textvariable=accno)
e4.place(x=650,y=100)
e4.focus_set()
e5=Entry(window6,font=('Arial',30),width=20,bg='white',bd=2,textvariable=pin,show='*')
e5.place(x=650,y=250)
e6=Entry(window6,font=('Arial',30),width=20,bg='white',bd=2,textvariable=depo)
e6.place(x=650,y=450)
def depst():
cn=my.connect(host='localhost',user='root',passwd='root',database='atm')
P a g e 24 | 36
cur=cn.cursor()
cur.execute("select * from atm_mac where accountnumber='{}' and
pin='{}'".format(e4.get(),e5.get()))
da=cur.fetchall()
da=list(da)
rc=cur.rowcount
if rc==1:
cur.execute("select * from atm_mac where accountnumber='{}' and
pin='{}'".format(e4.get(),e5.get()))
dt=cur.fetchall()
dt=list(dt)
m="update atm_mac set creditamt={},balance=balance+{} where
accountnumber='{}'".format(e6.get(),e6.get(),e4.get())
cur.execute(m)
cr=dt[0][5]
m1="insert into transaction values({},'{}','{}',{},{},'{}')".format(tid,date,c,e6.get(),cr,e4.get())
cur.execute(m1)
cn.commit()
l=Label(window6,text='Transaction Successful!',bg='white',fg='red',font=('Arial',30),width=20)
l.place(x=450,y=525)
else:
l=Label(window6,text='Invalid Account no. or
pin!',bg='white',fg='red',font=('Arial',30),width=20)
l.place(x=450,y=525)
P a g e 25 | 36
b=Button(window6,text='Deposit
Money',font=('Arial',20),width=20,bd=2,bg='white',command=depst)
b.place(x=500,y=600)
b5=Button(window1,text='Deposit',font=('Arial',20),width=20,bd=2,bg='white',command=deposit)
b5.place(x=485,y=400)
def info():
window7=Toplevel()
window7.title('Info')
window7.maxsize(1500,1500)
window7.minsize(1350,1500)
img=Image.open('all.png')
r=img.resize((1350,1500))
img=ImageTk.PhotoImage(r)
label=Label(window7,image=img)
label.image=img
label.pack()
l1=Label(window7,text='Enter Account Number',bg='lightblue',fg='black',font=('Arial',30),width=20)
l1.place(x=150,y=100)
l2=Label(window7,text='Enter Pin',bg='lightblue',fg='black',font=('Arial',30),width=20)
l2.place(x=150,y=250)
accno=StringVar()
pin=StringVar()
e1=Entry(window7,font=('Arial',30),width=20,bg='white',bd=2,textvariable=accno)
P a g e 26 | 36
e1.place(x=650,y=100)
e1.focus_set()
e2=Entry(window7,font=('Arial',30),width=20,bg='white',bd=2,textvariable=pin,show='*')
e2.place(x=650,y=250)
def view():
cn=my.connect(host='localhost',user='root',passwd='root',database='atm')
cur=cn.cursor()
cur.execute("select * from atm_mac where accountnumber='{}' and
pin='{}'".format(e1.get(),e2.get()))
da=cur.fetchall()
da=list(da)
print(da)
rc=cur.rowcount
if rc==1:
window=Toplevel()
window.title('Info')
window.maxsize(1500,1500)
window.minsize(1350,1500)
img=Image.open('all.png')
r=img.resize((1350,1500))
img=ImageTk.PhotoImage(r)
label=Label(window,image=img)
label.image=img
P a g e 27 | 36
label.pack()
ah=da[0][1]
ab=da[0][5]
h=StringVar()
b=StringVar()
h.set(ah)
b.set(ab)
l4=Label(window,text='Account Number',bg='lightblue',fg='black',font=('Arial',30),width=20)
l4.place(x=150,y=100)
l5=Label(window,text='Account Holder',bg='lightblue',fg='black',font=('Arial',30),width=20)
l5.place(x=150,y=250)
l6=Label(window,text='Balance',bg='lightblue',fg='black',font=('Arial',30),width=20)
l6.place(x=150,y=400)
e0=Entry(window,state="disabled",textvariable=accno,font=('Arial',30))
e0.place(x=650,y=100)
e20=Entry(window,state="disabled",textvariable=h,font=('Arial',30))
e20.place(x=650,y=250)
e03=Entry(window,state="disabled",textvariable=b,font=('Arial',30))
e03.place(x=650,y=400)
else:
l=Label(window7,text='Invalid Account no. or
pin!',bg='white',fg='red',font=('Arial',30),width=20)
l.place(x=450,y=525)
b=Button(window7,text='View Details',font=('Arial',20),width=20,bd=2,bg='white',command=view)
P a g e 28 | 36
b.place(x=500,y=600)
b6=Button(window1,text='View Details',font=('Arial',20),width=20,bd=2,bg='white',command=info)
b6.place(x=200,y=400)
OUTPUTS
Main Screen:
1. For withdrawing money:
(a) Money withdrawn screen-
P a g e 29 | 36
(b) If details are wrong-
(c) If there is insufficient balance-
P a g e 30 | 36
2. For money deposit:
(a) Deposit successful screen-
P a g e 31 | 36
(b) If details are wrong-
3. For balance enquiry:
(a) Checking balance screen-
P a g e 32 | 36
(b) If details are wrong-
4. For changing PIN:
(a) Changing PIN screen-
P a g e 33 | 36
(b) If details are wrong-
5. For viewing customer info:
P a g e 34 | 36
6. To view recent transactions-
P a g e 35 | 36
BIBLIOGRAPHY
➢ www.tutorialaicsip.com
➢ www.slidesharenet.net
➢ www.scribd.com
➢ NCERT and Sumita Arora
P a g e 36 | 36