You are on page 1of 35

PROJECT REPORT

ON

SOFTWARE FOR IMPLEMENTATION


IMPLE
OF
ATM

REPORT BY:
SADAQAT ALI
RESMI THERESA EPHREM
RESMI R. NAIR

UNDER THE GUIDANCE OF


Mr. S. R. BALASUNDARAM
DEPT. OF MATHEMATICS AND COMPUTER APPLICATIONS
ACKNOWLEDGEMENT

We take this opportunity to express our profound gratitude to our respected project
guide Mr. S. R. BALASUNDARAM for his ever inspiring guidance, constant
encouragement and support he had provided us throughout the course of our project
work. His ever motivating and encouraging attitude has made our work possible.

We would also like to thank the staff of “ The Octagon ” our beloved computer
center for the constant facility and support they have given throughout this project.

SADAQAT ALI
RESMI THERESA EPHREM
RESMI R. NAIR
INTRODUCTION

An Automated Teller Machine (ATM) allows customers to perform banking transactions


anywhere and at anytime without the need of human teller. By using a debit or ATM card at an ATM,
individuals can withdraw cash from checking or savings accounts, make a deposit or transfer money from
one account to another or perform other functions. You can also get cash advances using a credit card at an
ATM. Individuals should be aware that many banks charge transaction fees – generally ranging from Rs
50-150 per transaction - for using another bank’s ATM.

The ATM is online with the bank, that is, each


transaction will be authorised by the bank on- demand
and directly debited from the account's owner. The ATM
works as follows. First, the client will insert his/her client card
in the ATM and then the ATM will ask for a Personal
Identification Number (PIN) , if the number is entered
incorrectly several times in a row, most ATMs will retain the
card as a security precaution to prevent an
unauthorised user from working out the PIN by pure
guesswork. Once the correct PIN is given, the ATM will ask
for the amount of money to be withdrawn. If the amount is
available and if the client has enough money on his credit then the said amount of
money will be paid. Whether the amount of money is payable or not, i.e. the ATM has enough cash but
could be the case the ATM has no change for that amount, will be also checked. Once the money is offered
to the client a countdown is started, i.e. the client has a determined amount of time to pick up the money. If
this timeout is over, the money will be collected by the ATM and the transaction will be rolled back.

The
class

Card_input has the methods for reading the code of the client's card and for ejecting the card from the
ATM. The class Card_input will interact through the Controller with the class Terminal, where the
methods Req_PIN and Req_amount are defined, in order to get the PIN of the user and to verify if the
given PIN is correct or not. The class Card will have the information of the cardholder, that is, the
Card_number, PIN, and Account_number. The Controller will interact with Bank using the information of
the cardholder in order to get the authorization to pay (or not) the requested amount. The bank_interface
will send the request to the Accounting class, which belongs to the Bank package, in order to call the Debit
method of the accounting class3. The Accounting class has the methods Rollback, Authorization and Debit
which directly interact with the Accounts class. Rollback is for roll back a transaction (for the case
anything is wrong) and should leave the account and the teller machine in the original state; Authorization
will authorize or not an operation and Debit will extract the requested amount of money from the account
in the case the operation is authorized.

ATMs are generally reliable, but if they do go wrong customers will be left without cash until the
following morning or whenever they can get to the bank during opening hours. Of course not all errors are
to the detriment of customers; there have been cases of machines giving out money without debiting the
account or giving out a higher denomination of note by mistake.

There are also many "phantom withdrawals" from ATMs, which banks often claim are the result of
fraud by customers. Phantom withdrawals are considered to be a problem generated by dishonest insiders
by most other observers.
HISTORY OF ATM
As is often the case with inventions, many inventors contribute to the history of an invention.
In the case of the ATM, Don Wetzel invented the first successful and modern ATM in the USA,
however he was not first inventor to create an ATM. In 1939, Luther George Simjian started
patenting an earlier and not-so-successful version of an ATM.

An automatic teller machine or ATM allows a bank customer to conduct their banking
transactions from almost every other ATM machine in the world. Don Wetzel was the co-patentee
and chief conceptualist of the automated teller machine, an idea he said he thought of while waiting
in line at a Dallas bank.
At the time (1968) Wetzel was the Vice President of Product Planning at Docutel, the
company that developed automated baggage-handling equipment. The other two inventors listed on
the patent were Tom Barnes, the chief mechanical engineer and George Chastain, the electrical
engineer. It took five million dollars to develop the ATM. The concept of the modern ATM first
began in 1968, a working prototype came about in 1969 and Docutel was issued a patent in 1973.

The world's first ATM was installed in Enfield Town in the London Borough of Enfield, London on
June 27 1967.

The first working ATM was installed in a New York based Chemical Bank.

The first ATMs were off-line machines, meaning money was not automatically withdrawn
from an account. The bank accounts were not (at that time) connected by a computer network to the
ATM. Therefore, banks were at first very exclusive about who they gave ATM privileges to.
Giving them only to credit card holders (credit cards were used before ATM cards) with good
banking records. Wetzel, Barnes and Chastain developed the first real ATM cards, cards with a
magnetic strip and a personal ID number to get cash. ATM cards had to be different from credit
cards (then without magnetic strips) so account information could be included.
WHY GO FOR ATM?

 An automatic teller machine increases existing business. The typical ATM customer will
spend 20-25% more than a non-ATM customer, according to research conducted by AT&T
Global Information Solutions.

 An automatic teller machine generates new business. Customers are more likely to seek out
a location with an automatic teller machine; in addition to convenience, there are a number
of safety benefits associated with an in-store automatic teller machine, according to survey
results published in Petroleum Marketer magazine.

 An automatic teller machine provides additional revenue streams. Each ATM withdrawal
transaction generates surcharge ("convenience fee") income for the owner of the automatic
teller machine. Additionally, an automatic teller machine can provide revenue from on-
screen advertising, couponing, and alternative media (e.g., prepaid phone-cards, postage
stamps) dispensing opportunities.

 An automatic teller machine reduces risk and lowers costs. Having an automatic teller
machine on the premises can reduce the number of bad checks and cut credit card expenses
because customers have the option of withdrawing cash instead.

 An automatic teller machine pays for itself. With break-even points below 100 transactions
per month, even a low traffic location can more than pay for an automatic teller machine
from surcharge revenues alone.
ALGORITHM

 Initialize graphic mode.


 Open account ledger file.
 Display “WELCOME” screen.
 Ask user for account number and password.
 Check account number and password.
 If fail display the massage and ask user for retry or exit
 If account number and password match ask user for transaction i.e.

1. Deposit
2. Withdrawn
3. Detail
4. Exit

 If Deposit or Withdrawn ask for amount then display the remaining balance.
 If Detail then display last ten transaction.
 If exit then display “EXIT” screen saying “THANKS”.
 After Deposit or Withdrawn or Mini-statement ask user for further transaction.
 If ‘yes’ then come back to “TRANSACTION” screen.
 If ‘no’ then THANKS user for using ATM.
 Close account ledger file.
 Close graphics mode.
TABLE DEFINING FILES

NAME OF DESCRIPTION
FILE
ALL THE HEADER FILES AND OTHER PROGRAM FILES ARE
MAIN INCLUDED IN THIS FILE AND THE CONTROL IS
TRANSFERRED TO WELCOME
WELCOME SCREEN IS DISPLAYED AND CONTROL IS
WELCOME TRANSFERRED TO INPUT.

INPUT ASK USER FOR USER NAME AND PASSWORD. CONTROL IS


TRANSFERRED TO SWITCHCMP AND COMPARIS.
CONVERTS THE CHARACTERS TO INTEGER AND RETURNS
SWITCHCMP INTEGER TO INPUT.
COMPARES THE USERNAME AND PASSWORD WITH THE
COMPARIS DETAILS ENTERED IN THE DATA FILE. IF IT DOES NOT
MATCH, THEN CONTROL IS GIVEN TO PSS_WRON ELSE TO
TRANS
THIS WILL GIVE THE USER OPTIONS FOR TRY AGAIN OR
PSS_WRON EXIT. IF TRY AGAIN CONTROL GOES TO INPUT ELSE GOES TO
EXITSCR.
THIS WILL ASK USER’S CHOICE FOR DEPOSIT, WITHDRAW,
TRANS DETAILS AND EXIT. IF DEPOSIT OR WITHDRAW CONTROL
GOES TO WITH_DEP. IF DETAILS CONTROL IS GIVEN TO
MINIST AND IF EXIT CONTROL GOES TO EXITSCR.
IT WILL ASK THE USER FOR THE AMOUNT TO DEPOSITED OR
WITH_DEP WITHDRAWN. CONTROL IS TRANSFERRED TO CONVERT AND
MOD. THEN DISPLAYS THE FINAL BALANCE. CONTROL IS
THEN TRANSFERRED TO ANYMORE.
THIS FILE DISPLAYS THE LAST TEN TRANSACTIONS AND
MINIST BALANCE. CONTROL IS TRANSFERRED TO CONVERT AND
ANYMORE.

CONVERT THIS CONVERTS THE INTEGER VALUES TO CHARACTERS


AND RETURN VALUE TO THE CALLING FUNCTION.
THIS FUNCTION MODIFIES THE VALUES IN DATA FILES. THIS
MOD WILL DELETE THE FIRST TRANSACTION AND ADD THE
LATEST TO THE LIST. ALSO MODIFIES THE BALANCE.
CONTROL IS GIVEN BACK TO CALLING FUNCTION.
THIS GIVES THE USER AN OPTION FOR ANY MORE
ANYMORE TRANSACTION. IF YES, CONTROL GOES TO TRANS ELSE IT
WILL GO TO EXITSCR.

EXITSCR THIS WILL DISPLAY A SCREEN “THANK YOU, VISIT AGAIN!”


CONCLUSION
Based studies on the ATM we hereby conclude that ATM is the easiest way of depositing and
withdrawing money. Transaction is possible any time, that’s why in India some people call ATM as
“all time money”. If ATM machines are connected to internet then its possible to do transaction
from any where, 24 hours a days and 365 days a year. With the security of ATM improving it has
now become a safe mode of transaction. Hence it can be concluded that ATM is safe, fast, reliable,
convenient, excisable and any time money machine.

In future the facilities that can be added to ATM machines are:

 Filling of bills.
 Daily news headline.
 Check matches score or sensex ups and downs.

BIBLIOGRAPHY

1. ROBERT LAFORE: TURBO C++, Galgotia Publications Pvt Ltd, New Delhi

2. YASHAVANT KANETKAR: LET Us C, BPB Publications, New Delhi

3. YASHAVANT KANETKAR: GRAPHICS IN C, BPB Publications, New Delhi


SOURCE CODE

/* main function */

#include<fstream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<dos.h>
#include "comparis.cpp"
#include "input.cpp"
#include "welcome.h"
#include "exitscr.cpp"
#include "pss_wron.cpp"
#include "trans.cpp"
#include "swtchcmp.cpp"
#include "with_dep.cpp"
#include "convert.cpp"
#include "mod.cpp"
#include "anymore.cpp"
#include "minist.cpp"

main()
{
welcome();
return 0;
}

/* welcome.h */

void welcome()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");

char wel[]="WELCOME";
int xmax, ymax;

xmax=getmaxx();
ymax=getmaxy();
setfillstyle(7,9);
bar(20,20,xmax-20,ymax-20);
rectangle(20,20,xmax-20,ymax-20);
floodfill(21,21,WHITE);
setcolor(15);

settextstyle(6,0,4);
outtextxy(275,225,wel);

getch();
input();
closegraph();
restorecrtmode();
}

/* input.cpp*/

int swtchcmp(char *ch);


void comparis(int,int);

input()
{
cleardevice();

char name[6];
char psswd[6];

int nm,pd;

char ch[2];
int i,a=0;
int xmax, ymax;
xmax=getmaxx();
ymax=getmaxy();
setfillstyle(7,9);
bar(20,20,xmax-20,ymax-20);
rectangle(20,20,xmax-20,ymax-20);
floodfill(21,21,WHITE);

outtextxy(120,120,"Enter the user-name:");

name[0]=getch();
for(i=1;name[i-1]!='\r';i++)
{
ch[0]=name[i-1];
ch[1]='\0';
outtextxy(300+a,120,ch);
name[i]=getch();
a=a+8;
}
name[i-1]='\0';

outtextxy(120,180,"Enter the password:");

a=0;

psswd[0]=getch();
for(i=1;psswd[i-1]!='\r';i++)
{
ch[0]='*';
ch[1]='\0';
outtextxy(300+a,180,ch);
psswd[i]=getch();
a=a+8;
}
psswd[i-1]='\0';

nm=swtchcmp(name);
pd=swtchcmp(psswd);

comparis(nm,pd);

return 0;
}

/* swtchcmp.cpp*/

int swtchcmp(char ch[6])


{
int i,num,art;
int x=1;
int len;
num=0;
for(i=0;ch[i]!='\0';i++);
len=i-1;

for(i=len;i>=0;i--)
{
switch(ch[i])
{
case '0': art=0; break;
case '1': art=1; break;
case '2': art=2; break;
case '3': art=3; break;
case '4': art=4; break;
case '5': art=5; break;
case '6': art=6; break;
case '7': art=7; break;
case '8': art=8; break;
case '9': art=9; break;
}
num=num+art*x;
x=10*x;
}
return num;
}

/* comparis.cpp*/

void pss_wron(int);
void trans(int);

void comparis(int unm,int pwd)


{
char note[]="FAILURE";
int n,w=0,a,p,i;
ifstream fin;
int flag=0;
fin.open("n1.txt",ios::in);
if(!fin)
{
outtextxy(300,300,note);
getch();
}
else
{
do
{
fin>>n;
if(unm==n)
{
fin>>p;
if(pwd==p)
{ flag=1; fin.close(); break; }
else
{ w=1; fin.close(); pss_wron(w); break; }
}
else
{
for(i=0;i<42;i++)
fin>>a;
}

}while(fin);
}

if(flag==1)
{ fin.close(); trans(unm);}
else if(w!=1)
{ w=0; fin.close(); pss_wron(w); }

/* pss_wron.cpp*/

void pss_wron(int choice)


{
cleardevice();
void exitscr();
char c;
int xmax, ymax;
xmax=getmaxx();
ymax=getmaxy();
setcolor(15);
setfillstyle(7,9);
bar(20,20,xmax-20,ymax-20);
rectangle(20,20,xmax-20,ymax-20);
floodfill(21,21,WHITE);
if(choice==0)
outtextxy(120,120,"The username does not exist!!");
else if(choice==1)
outtextxy(120,120,"The password entered is wrong!!");

outtextxy(120,240,"1.Try Again");
outtextxy(120,300,"2.Exit");

c=getch();
if(c=='1')
input();
else
exitscr();
}

/* trans.cpp*/

void with_dep(int,int);
void minist(int);
void exitscr();
void trans(int unm)
{
char ch;
int xmax,ymax;
cleardevice();
xmax=getmaxx();
ymax=getmaxy();
setcolor(WHITE);
setfillstyle(7,9);
rectangle(20,20,xmax-20,ymax-20);
floodfill(21,21,WHITE);
//setcolor(MAGENTA);
rectangle(100,100,190,130);
outtextxy(105,115,"1.WITHDRAW");
rectangle(400,100,490,130);
outtextxy(405,115,"2.DEPOSIT");
rectangle(100,400,190,430);
outtextxy(105,415,"3.DETAILS");
rectangle(400,400,490,430);
outtextxy(405,415,"4.EXIT");
ch=getch();
switch(ch)
{
case '1': with_dep(unm,1); break;
case '2': with_dep(unm,2); break;
case '3': minist(unm); break;
case '4': exitscr(); break;
}

}
/* with_dep.cpp*/

void convert(long,char *);


long mod(int, int);
int anymore();

void with_dep(int unm,int N)


{
long bal;
char balance[10];
cleardevice();
int ymax,xmax;
int a=0;
int ans;
char cash[6],ch[2];
int money;
xmax=getmaxx();
ymax=getmaxy();
setcolor(15);
setfillstyle(7,9);
bar(20,20,xmax-20,ymax-20);
rectangle(20,20,xmax-20,ymax-20);
floodfill(21,21,WHITE);
if(N==1)
outtextxy(120,200,"Enter the amount to be withdrawn:" );
else if(N==2)
outtextxy(120,200,"Enter the amount to be deposited:" );

cash[0]=getch();
int i;
for(i=1;cash[i-1]!='\r';i++)
{
ch[0]=cash[i-1];
ch[1]='\0';
outtextxy(400+a,200,ch);
cash[i]=getch();
a=a+8;
}
cash[i-1]='\0';

money=swtchcmp(cash);

if(N==1)
money*=-1;
bal=mod(money,unm);
convert(bal,balance);
outtextxy(120,250,"Your Balance is:");
outtextxy(250,250,balance);
getch();

/*display the balance here*/

ans=anymore();

if(ans==1)
trans(unm);
else
exitscr();
}

/* minist.cpp*/

void names(int);

void minist(int unm)


{
int ans;
int xmax,ymax;
xmax = getmaxx();
ymax = getmaxy();
cleardevice();
setcolor(15);
setfillstyle(7,9);
bar(20,20,xmax-20,ymax-20);
rectangle(20,20,xmax-20,ymax-20);
floodfill(21,21,WHITE);

ifstream fin;

fin.open("n1.txt",ios::in);
long st[42];
char str[10];
int n,m,p;
long a;
long b,bal=0;
int i=0,j,l=0;
do
{
fin>>n;

if(unm==n)
{
st[l++]=(long)n;
fin>>a;
fin>>b;
st[l++]=b;
bal +=b;
for(j=0;j<10;j++)
for(i=0;i<4;i++)
{
fin>>a;
st[l++]=a;
if(i==3)
bal += a;
}
}
else
{
for(i=0;i<42;i++)
fin>>a;
}
}while(fin);

fin.close();
int y=0;
convert(st[0],str);
outtextxy(40,40,"Account No:");
outtextxy(150,40,str);
outtextxy(400,40,"Name:");
names(unm);
outtextxy(40,80,"DATE");
outtextxy(200,80,"CREDIT/DEBIT");
outtextxy(400,80,"AMOUNT in Rs");

l=2;
for(i=2, j=1;l<42;i++, j++)
{
for(int k=0, m=0, p=15;k<3;k++,m=m+30,p=p+30)
{
convert(st[l++],str);
outtextxy(40+m,120+y,str);
if(k!=2)
outtextxy(40+p,120+y,"/");
}
if(st[l]<0)
{
outtextxy(200,120+y,"DEBIT");
st[l] *= -1;
}
else
outtextxy(200,120+y,"CREDIT");
convert(st[l++],str);
outtextxy(400,120+y,str);
y+=20;
}
outtextxy(40,120+y+50,"Your Balance is:Rs");
convert(bal,str);
outtextxy(200,120+y+50,str);
getch();

ans=anymore();

if(ans==1)
trans(unm);
else
exitscr();

void names(int unm)


{
switch(unm)
{
case 1000: outtextxy(450,40,"Anil Ambani"); break;
case 2000: outtextxy(450,40,"Azim Premji"); break;
case 3000: outtextxy(450,40,"Mammootty"); break;
case 4000: outtextxy(450,40,"Narayan Moorthy"); break;
case 5000: outtextxy(450,40,"Ratan Tata"); break;
case 6000: outtextxy(450,40,"Sachin Tendulkar"); break;
case 7000: outtextxy(450,40,"Zaheer Khan"); break;
case 8000: outtextxy(450,40,"Amitabh Bachchan"); break;
case 9000: outtextxy(450,40,"Bill Gates"); break;
case 10000: outtextxy(450,40,"Aditya Birla"); break;
}
}
/* convert.cpp*/

void convert(long no, char *a)


{
int i,j,c[10];
long b=no;
int k;
for(i=0;b!=0;i++)
{
c[i]=b%10;
b /=10;
}
for(j=i-1,k=0;j>=0;j--,k++)
{
switch(c[j])
{
case(1): a[k]='1';break;
case(2): a[k]='2';break;
case(3): a[k]='3';break;
case(4): a[k]='4';break;
case(5): a[k]='5';break;
case(6): a[k]='6';break;
case(7): a[k]='7';break;
case(8): a[k]='8';break;
case(9): a[k]='9';break;
case(0): a[k]='0';break;
}
}
a[k]='\0';

/* mod.cpp*/

long mod(int money,int unm)


{
int i,n,m;
long a,b, bal=0;
struct date d;
getdate(&d);
ifstream fin;
ofstream fout;

fin.open("n1.txt",ios::in);
fout.open("n2.txt",ios::out);
int count=0;
do
{
fin>>n;
fout<<n<<"\t";
if(unm==n)
{
fin>>a;
fout<<a<<"\t";
fin>>b;
for(i=0;i<4;i++)
{
fin>>a;
if(i==3)
{
b = b+a;
bal=b;
fout<<b<<"\t";
}
}
for(int j=0;j<9;j++)
for(i=0;i<4;i++)
{
fin>>a;
fout<<a<<"\t";
if(i==3)
bal += a;
}
fout<<(int)d.da_day<<"\t";
fout<<(int)d.da_mon<<"\t";
fout<<d.da_year<<"\t";
fout<<money<<"\n";
bal += money;
}
else
{
for(i=0;i<42;i++)
{ fin>>a;
fout<<a<<"\t";
}
fout<<"\n";
}

count++;
if(count==10)
break;
}while(fin);

cout<<endl;

fin.close();
fout.close();

fin.open("n2.txt",ios::in);
fout.open("n1.txt",ios::out);

int k=0;
do
{
k++;
fin>>a;
fout<<a<<"\t";
if(k%43==0)
fout<<"\n";
}while(fin);

getch();
fin.close();
fout.close();

return bal;
}

/* anymore.cpp*/

int anymore()
{
cleardevice();
int xmax,ymax;
char reply;
char ch[2];
xmax=getmaxx();
ymax=getmaxy();

setcolor(15);
setfillstyle(7,9);
bar(20,20,xmax-20,ymax-20);
rectangle(20,20,xmax-20,ymax-20);
floodfill(21,21,WHITE);

outtextxy(120,150,"Do you want to do any further transactions? (Y/N): ");


reply=getch();
ch[0]=reply;
ch[1]='\0';
outtextxy(530,150,ch);
getch();
if((reply=='y')||(reply=='Y'))
return 1;
else
return 0;

/* exitscr.cpp*/

void exitscr()
{
cleardevice();
int ymax,xmax;
xmax=getmaxx();
ymax=getmaxy();
setcolor(15);
setfillstyle(7,9);
bar(20,20,xmax-20,ymax-20);
rectangle(20,20,xmax-20,ymax-20);
floodfill(21,21,WHITE);
outtextxy(200,200,"Thank You!");
outtextxy(200,250,"Visit Again!!!");
getch();
}
OUTPUT SCREENS

Screen 1: WELCOME
Screen 2: ACCOUNT NO. AND PASSWORD
Screen 3: USERNAME FAIL
Screen 4: PASSWORD FAIL
Screen 5: ENTER USERNAME AND PASSWORD
Screen 6: TRANSACTION SCREEN
Screen 7: WITHDRAW
Screen 8: ANY FURTHER TRANSACTION
Screen 9 : DEPOSIT
Screen 10 : MINI-STATEMENT
Screen 11 : EXIT SCREEN

You might also like