PROJECT REPORT

ON

SOFTWARE FOR IMPLEMENTATION

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?

ALGORITHM

                           

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

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:

 

BIBLIOGRAPHY

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

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

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