PROJECT REPORT ON SOFTWARE FOR IMPLEMENTATION OF ATM

    
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 
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.







NAME OF FILE
DESCRIPTION

MAIN
ALL THE HEADER FILES AND OTHER PROGRAM FILES ARE INCLUDED IN THIS FILE AND THE CONTROL IS TRANSFERRED TO WELCOME

WELCOME
WELCOME SCREEN IS DISPLAYED AND CONTROL IS TRANSFERRED TO INPUT.

INPUT


ASK USER FOR USER NAME AND PASSWORD. CONTROL IS TRANSFERRED TO SWITCHCMP AND COMPARIS.

SWITCHCMP
CONVERTS THE CHARACTERS TO INTEGER AND RETURNS INTEGER TO INPUT.

COMPARIS
COMPARES THE USERNAME AND PASSWORD WITH THE DETAILS ENTERED IN THE DATA FILE. IF IT DOES NOT MATCH, THEN CONTROL IS GIVEN TO PSS_WRON ELSE TO TRANS

PSS_WRON
THIS WILL GIVE THE USER OPTIONS FOR TRY AGAIN OR EXIT. IF TRY AGAIN CONTROL GOES TO INPUT ELSE GOES TO EXITSCR.

TRANS
THIS WILL ASK USER’S CHOICE FOR DEPOSIT, WITHDRAW, 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.

WITH_DEP
IT WILL ASK THE USER FOR THE AMOUNT TO DEPOSITED OR WITHDRAWN. CONTROL IS TRANSFERRED TO CONVERT AND MOD. THEN DISPLAYS THE FINAL BALANCE. CONTROL IS THEN TRANSFERRED TO ANYMORE.

MINIST
THIS FILE DISPLAYS THE LAST TEN TRANSACTIONS AND BALANCE. CONTROL IS TRANSFERRED TO CONVERT AND ANYMORE.

CONVERT

THIS CONVERTS THE INTEGER VALUES TO CHARACTERS AND RETURN VALUE TO THE CALLING FUNCTION.

MOD
THIS FUNCTION MODIFIES THE VALUES IN DATA FILES. THIS WILL DELETE THE FIRST TRANSACTION AND ADD THE LATEST TO THE LIST. ALSO MODIFIES THE BALANCE. CONTROL IS GIVEN BACK TO CALLING FUNCTION.

ANYMORE
THIS GIVES THE USER AN OPTION FOR ANY MORE TRANSACTION. IF YES, CONTROL GOES TO TRANS ELSE IT WILL GO TO EXITSCR.

EXITSCR

THIS WILL DISPLAY A SCREEN “THANK YOU, VISIT AGAIN!”
TABLE DEFINING FILES
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.









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>>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)


/* 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*/

GET Full Project Report Mail us at Kumawat96602433@gmail.com

No comments:

Post a Comment