C++ Project on Banking System

Submitted by Editor

Banking

IN THIS PROJECT YOU CAN KEEP RECORD OF DAILY BANKING TRANSACTIONS. THIS PROGRAMME IS CAPABLE OF HOLDING ANY NO. OF ACCOUNTS. IN FIRST OPTION YOU CAN SEE ACCOUNT OF A PARTICULAR PERSON BY GIVING SIMPLY ACCOUNT NO. OF THAT PERSON. IN SECOND OPTION YOUN CAN SEE THE LIST OF ALL ACCOUNTS. THROUGH THIRD OPTION YOU CAN DO BANKING TRANSACTIONS ( DEPOSIT / WITHDRAW ) IN FOURTH OPTION YOU CAN OPEN NEW ACCOUNT. NOTE: OPENING AMOUNT SHOULD NOT LESS THAN Rs.500/-. IN THE FIFTH OPTION YOU CAN MODIFY OR DELETE ANY ACCOUNT. AND LAST OPTION IS QUIT (EXIT TO DOS).

//===========================================================
//	       	PROJECT ON AUTOMATION OF A BANK
//===========================================================

#include
#include
#include
#include
#include
#include
#include
#include
#include

//===========================================================
//  THIS CLASS CONTAINS FUNCTIONS RELATED TO DRAW BOX ETC.
//===========================================================

class shape
{
   public :
	    void line_hor(int, int, int, char);
	    void line_ver(int, int, int, char);
	    void box(int,int,int,int,char);
};

//===========================================================
//     THIS CLASS CONTROL ALL THE FUNCTIONS IN THE MENU
//===========================================================

class control
{
  public :
	   void main_menu(void);
	   void help(void);
  private:
	   void edit_menu(void);
};

//===========================================================
// THIS CLASS CONTAINS FUNCTIONS RELATED TO INITIAL DEPOSIT
//===========================================================

class initial
{
   public :
	    void add_to_file(int,char t_name[30],char t_address[60],float);
	    void display_list(void);
	    void delete_account(int);
	    void update_balance(int,float);
	    void modify(void);
	    int last_accno(void);
	    int found_account(int);
	    char *return_name(int);
	    char *return_address(int);
	    float give_balance(int);
	    int recordno(int);
	    void display(int);
   private:
	    void modify_account(int,char t_name[30],char t_address[60]);
	    void box_for_list(void);

	    int accno;
	    char name[30],address[60];
	    float balance;
};

//===========================================================
//   THIS CLASS CONTAINS FUNCTIONS RELATED TO TRANSACTIONS
//===========================================================

class account
{
  public :
	   void new_account(void);
	   void close_account(void);
	   void display_account(void);
	   void transaction(void);
	   void clear(int,int);
  private :
	   void add_to_file(int,int,int,int,char,char t_type[10],float,float,float);
	   void delete_account(int);
	   int no_of_days(int,int,int,int,int,int);
	   float calculate_interest(int,float);
	   void display(int);
	   void box_for_display(int);
	   int accno;
	   char type[10];  //Cheque or Cash
	   int dd,mm,yy;  //Date
	   char tran ;  // Deposit or withdrawl
	   float interest,amount,balance;
};

//===========================================================
//     FUNCTION TO DRAW HORIZONTAL LINE
//===========================================================

void shape::line_hor(int column1,int column2,int row,char c)
{
 for(column1;column1< =column2;column1++)
    {
    gotoxy(column1,row);
    cout<=1;i--)
	{
	delay(20);
	gotoxy(1,i); clreol();
	}
}

//=============================================================
//   FUNCTION TO DISPLAY EDIT MENU AND CALL OTHER FUNCTION
//=============================================================

void control::edit_menu(void)
{
char ch;
while (1)
      {
	clrscr();
	shape s;
	s.box(10,5,71,21,219);
	s.box(9,4,72,22,218);
	textcolor(LIGHTBLUE);
	textbackground(BLACK);
	gotoxy(34,10);
	cprintf(" EDIT MENU");
	textcolor(LIGHTBLUE);
	textbackground(BLACK);
	gotoxy(31,12);
	cout< <"1: MODIFY ACCOUNT :";
	gotoxy(31,13);
	cout<<"2: CLOSE ACCOUNT ";
	gotoxy(31,14);
	cout<<"0: QUIT ";
	gotoxy(31,16);
	cout<<"ENTER YOUR CHOICE: ";
	ch=getche();
	if(ch==27)
	  break;
	else
	if(ch=='1')
	{
	initial ini;
	ini.modify();
	break;
	}
	else
	if(ch=='2')
	{
	account a;
	a.close_account();
	break;
	}
	else
	if(ch=='0')
	break;
      }
}

//=============================================================
//           FUNCTION TO DISPLAY HELP ABOUT PROJECT
//=============================================================

void control::help(void)
{
clrscr();
shape s;
s.box(2,1,79,25,218);
s.box(25,2,54,4,219);
textcolor(LIGHTBLUE+BLINK);
gotoxy(27,3);
cprintf("WELCOME TO THE PROJECT BANKING ");
textcolor(LIGHTBLUE);
delay(10);
gotoxy(10,6);
cout<<"IN THIS PROJECT YOU CAN KEEP RECORD OF DAILY BANKING ";
delay(10);
gotoxy(10,7);
cout<<" TRANSACTIONS.		";
delay(10);
gotoxy(10,9);
cout<<" THIS PROGRAMME IS CAPABLE OF HOLDING ANY NO. OF ACCOUNTS ";
delay(10);
gotoxy(10,11);
cout<<" # IN FIRST OPTION YOU CAN SEE ACCOUNT OF A PARTICULAR ";
delay(10);
gotoxy(10,12);
cout<<" PERSON BY GIVING SIMPLY ACCOUNT NO. OF THAT PERSON";
delay(10);
gotoxy(10,14);
cout<<"# IN SECOND OPTION YOUN CAN SEE THE LIST OF ALL ACCOUNTS. ";
delay(10);
gotoxy(10,16);
cout<<"# THROUGH THIRD OPTION YOU CAN DO BANKING TRANSACTIONS ";
delay(10);
gotoxy(10,17);
cout<<" ( DEPOSIT / WITHDRAW )";
delay(10);
gotoxy(10,19);
cout<<"# IN FOURTH OPTION YOU CAN OPEN NEW ACCOUNT. ";
delay(10);
gotoxy(10,20);
cout<<" NOTE: OPENING AMOUNT SHOULD NOT LESS THAN Rs.500/-. ";
delay(10);
gotoxy(10,22);
cout<<"# IN THE FIFTH OPTION YOU CAN MODIFY OR DELETE ANY ACCOUNT. ";
delay(10);
gotoxy(10,24);
cout<<"# AND LAST OPTION IS QUIT (EXIT TO DOS).";
delay(10);
textcolor(LIGHTBLUE+BLINK); textbackground(BLACK);
gotoxy(26,25);
cprintf(" PRESS ANY KEY TO CONTINUE ");
textcolor(LIGHTBLUE);textbackground(BLACK);
gotoxy(25,2);
getch();
for(int i=25;i>=1;i--)
   {
   delay(20);
   gotoxy(1,i);clreol();
   }
}

//========================================================
//THIS FUNCTION RETURN LAST ACCOUNT NO. IN  THE FILE
//INITIAL.DAT
//========================================================

int initial::last_accno(void)
{
fstream file;
file.open("INITIAL.DAT", ios::in);
file.seekg(0,ios::beg);
int count=0;
while(file.read((char*)this, sizeof(initial)))
   count=accno;
   file.close();
   return count;
}

//==========================================================
//THIS FUNCTION RETURN RECORD NO. OF THE GIVEN ACCOUNT NO.
//IN THE FILE INITIAL.DAT
//==========================================================

int initial::recordno(int t_accno)
{
fstream file;
file.open("INITIAL.DAT",ios::in);
file.seekg(0,ios::beg);
int count=0;
while (file.read((char*)this, sizeof(initial)))
{
count++;
if(t_accno==accno)
       break;
}
file.close();
return count;
}

//===========================================================
//THIS FUNTION DISPLAY THE ACCOUNT FOR GIVEN ACCOUNT NO.
//FROM THE FILE INITIAL.DAT
//===========================================================

void initial::display(int t_accno)
{
   shape s;
   s.box(8,7,73,11,219);
   fstream file;
   file.open("INITIAL.DAT",ios::in);
   file.seekg(0,ios::beg);
   while(file.read((char*) this,sizeof(initial)))
    {
      if(t_accno==accno)
      {
	gotoxy(8,5);
	cout< <"ACCOUNT NO. "<=EXIT";
   gotoxy(5,5);
   cout< <"ENTER THE ACCOUNT NO.";
   gets(t_acc);
   t=atoi(t_acc);
   t_accno=t;
   if(t_accno==0)
       return;
   clrscr();
   if(!found_account(t_accno))
   {
     gotoxy(5,5);
     cout<<"\7ACCOUNT NOT FOUND";
     getch();
     return;
   }
   shape s;
   s.box(2,2,79,24,218);
   s.line_hor(3,78,4,196);
   s.line_hor(3,78,22,196);
   gotoxy(71,1);
   cout<<"<0>=EXIT";
   textbackground(BLACK);
   gotoxy(3,3);
   for(int i=1;i< =76;i++) cprintf("	");
   textbackground(BLACK);
   textcolor(LIGHTBLUE+BLINK); textbackground(BLACK);
   gotoxy(30,3);
   cprintf("MODIFY ACCOUNT SCREEN");
   textcolor(LIGHTBLUE); textbackground(BLACK);
   int d1,m1,y1;
   struct date d;
   getdate(&d);
   d1=d.da_day;
   m1=d.da_mon;
   y1=d.da_year;
   gotoxy(62,5);
   cout<<"DATE:"< FOR NO CHANGE";
     valid=1;
     gotoxy(15,15);
     gets(t_name);
     strupr(t_name);
     if(t_name[0]=='0')
	  return;
     if(strlen(t_name)>25)
     {
	valid=0;
	gotoxy(5,23);
	cprintf("\7NAME SHOULD NOT GREATER THAN 25");
	getch();
     }
   }while(!valid);
   if(strlen(t_name)>0)
       modified=1;
   do
   {
      a.clear(15,16);
      a.clear(5,23);
      gotoxy(5,23);
      cout< <"ENTER ADDRESS OR PRESS  FOR NO CHANGE";
      valid=1;
      gotoxy(15,16);
      gets(t_address);
      strupr(t_address);
      if(t_address[0]=='0')
	   return;
      if(strlen(t_address)>55)
      {
	valid=0;
	gotoxy(5,23);
	cprintf("\7SHOULD NOT BLANK OR GREATER THAN 55");
	getch();
      }
   }while(!valid);
   if(strlen(t_address)>0)
      modified=1;
   if(!modified)
       return;
   a.clear(5,23);
   do
   {
     a.clear(5,18);
     gotoxy(5,18);
     cout< <"DO YOU WANT TO SAVE CHANGES  (Y/N):";
     ch=getche();
     if(ch=='0')
	return;
     ch=toupper(ch);
   }while(ch!='N' && ch!='Y');
   if(ch=='N')
     return;
   modify_account(t_accno,t_name,t_address);
   gotoxy(5,21);
   cout<<"\7RECORD MODIFIED";
   gotoxy(5,23);
   cout<<"PRESS ANY KEY TO CONTINUE...";
   getch();
}

//=============================================================
//       THIS FUNCTION CLEAR THE GIVEN ROW AND COLUMNS
//=============================================================

void account::clear(int col, int row)
{
   for(int i=col;i<=78;i++)
      {
	gotoxy(i,row);
	cout<<"	      ";
      }
}

//============================================================
//THIS FUNCTION ADDS THE GIVEN DATA INTO THE FILE
//BANKING.DAT
//============================================================
void account::add_to_file(int t_accno,int d1,int m1, int y1,
			  char t_tran,char t_type[10],float t_interest,
			  float t_amount, float t_balance)
{
   fstream file;
   file.open("BANKING.DAT",ios::app);
   accno=t_accno;
   dd=d1;
   mm=m1;
   yy=y1;
   tran=t_tran;
   strcpy(type,t_type);
   interest=t_interest;
   amount=t_amount;
   balance=t_balance;
   file.write((char*)this,sizeof(account));
   file.close();
}

//===============================================================
//THIS FUNCTION DELETES THE RECORD FOR GIVEN ACCOUNT NO.
//FROM FILE BANKING.DAT
//===============================================================

void account::delete_account(int t_accno)
{
    fstream file;
    file.open("BANKING.DAT", ios::in);
    fstream temp;
    temp.open("temp.dat",ios::out);
    file.seekg(0,ios::beg);
    while(!file.eof() )
    {
      file.read((char *) this,sizeof(account));
      if(file.eof())
	  break;
      if(accno!= t_accno)
	   temp.write((char *) this,sizeof(account));
    }
    file.close();
    temp.close();
    file.open("BANKING.DAT",ios::out);
    temp.open("temp.dat",ios::in);
    temp.seekg(0,ios::beg);
    while(!temp.eof())
    {
      temp.read((char *)this,sizeof(account));
      if(temp.eof())
	  break;
      file.write((char *) this, sizeof(account));
    }
    file.close();
    temp.close();
}

//================================================================
//THIS FUNCTION ACCEPTS THE DATA TO ADD RECORDS IN THE
//FILE BANKING.DAT
//================================================================

void account::new_account(void)
{
   char ch;
   int i,valid;
   clrscr();
   initial ini;
   shape s;
   s.box(2,2,79,24,218);
   s.line_hor(3,78,4,196);
   s.line_hor(3,78,22,196);
   gotoxy(71,1);
   cout<<"<0>=EXIT";
   textbackground(BLACK);
   gotoxy(3,3);
   for(i=1;i< =76;i++)
   cprintf("  ");
   textbackground(BLACK);
   textcolor(LIGHTBLUE+BLINK); textbackground(BLACK);
   gotoxy(32,3);
   cprintf("OPEN NEW ACCOUNT");
   textcolor(LIGHTBLUE);
   textbackground(BLACK);
   int d1,m1,y1;
   struct date d;
   getdate(&d);
   d1=d.da_day;
   m1=d.da_mon;
   y1=d.da_year;
   int t_accno;
   t_accno=ini.last_accno();
   t_accno++;
   if(t_accno==1)
   {
      ini.add_to_file(t_accno,"abc","xyz",1.1);
      ini.delete_account(t_accno);
      add_to_file(t_accno,1,1,1997,'D',"INITIAL",1.1,1.1,1.1);
      delete_account(t_accno);
   }
   char t_name[30],t[10],t_address[60];
   float t_bal=0.0, t_balance=0.0;
   gotoxy(5,6);
   cout<<"DATE:"<25)
      {
	 valid=0;
	 gotoxy(5,23);
	 cprintf("\7NAME SHOULD NOT BLANK OR GREATER THAN 25");
	 getch();
      }
   }while(!valid);
   do
   {
      clear(15,11);
      clear(5,23);
      gotoxy(5,23);
      cout< <"ENTER ADDRESS OF THE PERSON";
      valid=1;
      gotoxy(23,11);
      gets(t_address);
      strupr(t_address);
      if(t_address[0]=='0')
	   return;
      if(strlen(t_address)==0|| strlen(t_address)>55)
      {
	valid =0;
	gotoxy(5,23);
	cprintf("\7SHOULD NOT BLANK OR GREATER THAN 55");
	getch();
      }
   }while(!valid);
   do
   {
      char vari[30];
      clear(5,23);
      gotoxy(5,23);
      cout< <"ENTER NAME OF THE VARIFYING PERSON";
      valid=1;
      gotoxy(35,12);
      gets(vari);
      strupr(vari);
      if(vari[0]=='0')
	  return;
      if(strlen(vari)==0 || strlen(vari)>25)
      {
	valid=0;
	gotoxy(5,23);
	cprintf("\7SHOULD NOT BLANK OR GREATER THAN 25");
	getch();
      }
   }while(!valid);
   do
   {
      clear(5,23);
      clear(5,23);
      gotoxy(5,23);
      cout< <"ENTER INITIAL AMOUNT TO BE DEPOSIT";
      valid=1;
      gotoxy(23,14);
      gets(t);
      t_bal=atof(t);
      t_balance=t_bal;
      if(t[0]=='0')
	  return;
      if(t_balance<500)
      {
	valid=0;
	gotoxy(5,23);
	cprintf("\7SHOULD NOT LESS THAN 500    ");
	getch();
      }
   }while(!valid);
   clear(5,23);
   do
   {
     clear(5,17);
     valid=1;
     gotoxy(7,21);
     cout<<"DO YOU WANT TO SAVE THE RECORD (Y/N)";
     ch=getche();
     if(ch=='0')
	 return;
     ch=toupper(ch);
   }while(ch!='N' && ch!='Y');
   if(ch=='N')
      return;
   float t_amount,t_interest;
   t_amount=t_balance;
   t_interest=0.0;
   char t_tran,t_type[10];
   t_tran='D';
   strcpy(t_type,"INITIAL");
   ini.add_to_file(t_accno,t_name,t_address,t_balance);
   add_to_file(t_accno,d1,m1,y1,t_tran,t_type,t_interest,t_amount,t_balance);
}

//=================================================================
//THIS FUNCTION DRAWS THE BOX FOR DISPLAYING RECORD FROM
//FILE BANKING.DAT
//=================================================================

void account::box_for_display(int t_accno)
{
   shape s;
   s.box(2,1,79,25,218);
   s.line_hor(3,78,4,196);
   s.line_hor(3,78,6,196);
   s.line_hor(3,78,23,196);
   textbackground(BLACK);
   gotoxy(3,5);
   for(int i=1;i<=76;i++) cprintf(" ");
   textbackground(BLACK);
   textcolor(LIGHTBLUE); textbackground(BLACK);
   gotoxy(4,5);
   cprintf("DATE	PARTICULAR	DEPOSIT		WITHDRAW	INTEREST	BALANCE");
   textcolor(LIGHTBLUE); textbackground(BLACK);
   int d1,m1,y1;
   struct date d;
   getdate(&d);
   d1=d.da_day;
   m1=d.da_mon;
   y1=d.da_year;
   gotoxy(63,2);
   cout<<"DATE:  "<=EXIT";
   gotoxy(5,5);
   cout< <"ENTER THE ACCOUNT NO.";
   gets(t_acc);
   t=atoi(t_acc);
   t_accno=t;
   if(t_accno==0)
       return;
   clrscr();
   initial ini;
   if(!ini.found_account(t_accno))
   {
     gotoxy(5,5);
     cout<<"\7ACCOUNT NOT FOUND";
     getch();
     return;
   }
   box_for_display(t_accno);
   int row=7,flag;
   fstream file;
   file.open("BANKING.DAT",ios::in);
   while(file.read((char*)this,sizeof(account)))
      {
	 if(accno==t_accno)
	   {
	     flag=0;
	     delay(10);
	     gotoxy(4,row);
	     cout<month[m1-1])
	    {
	      d1=1;
	      m1++;
	    }
	  if(m1>12)
	    {
	      m1=1;
	      y1++;
	    }
	}
   return days;
}

//=============================================================
//            THIS FUNCTION CALCULATES INTEREST
//=============================================================

float account::calculate_interest(int t_accno,float t_balance)
{
   fstream file;
   file.open("BANKING.DAT",ios::in);
   file.seekg(0,ios::beg);
   int d1,m1,y1,days;
   while(file.read((char *)this, sizeof(account)))
	{
	   if(accno==t_accno)
	     {
	       d1=dd;
	       m1=mm;
	       y1=yy;
	       break;
	     }
	}
   int d2,m2,y2;
   struct date d;
   getdate(&d);
   d2=d.da_day;
   m2=d.da_mon;
   y2=d.da_year;
   float t_interest=0.0;
   if((y2=30)
     {
       months=days/30;
       t_interest=((t_balance*2)/100*months);
     }
   file.close();
   return t_interest;
}

//============================================================
//    THIS FUNCTION MAKES TRANSACTIONS (DEPOSIT/WITHDRAW)
//============================================================

void account::transaction(void)
{
  clrscr();
  char t_acc[10];
  int t,t_accno,valid;
  gotoxy(71,1);
  cout< <"<0>=EXIT";
  gotoxy(5,5);
  cout< <"ENTER THE ACCOUNT NO.";
  gets(t_acc);
  t=atoi(t_acc);
  t_accno=t;
  if(t_accno==0)
     return;
  clrscr();
  initial ini;
  if(!ini.found_account(t_accno))
    {
      gotoxy(5,5);
      cout<<"\7ACCOUNT NOT FOUND";
      getch();
      return;
    }
  shape s;
  s.box(2,2,79,24,218);
  s.line_hor(3,78,4,196);
  s.line_hor(3,78,22,196);
  gotoxy(71,1);
  cout<<"<0>=EXIT";
  textbackground(BLACK);
  gotoxy(3,3);
  for(int i=1;i< =76;i++) cprintf(" ");
  textbackground(BLACK);
  textcolor(LIGHTBLUE+BLINK); textbackground(BLACK);
  gotoxy(29,3);
  cprintf("TRANSACTION IN ACCOUNT");
  textcolor(LIGHTBLUE); textbackground(BLACK);
  int d1,m1,y1;
  struct date d;
  getdate(&d);
  d1=d.da_day;
  m1=d.da_mon;
  y1=d.da_year;
  gotoxy(5,6);
  cout<<"DATE: "<t_balance)||(t_amount<1))
    {
       valid=0;
       gotoxy(5,23);
       cprintf("\7INVALID DATA ENTERED             ");
       getch();
    }
  }while(!valid);
  char ch;
  clear(5,23);
  do
  {
     clear(40,20);
     valid=1;
     gotoxy(40,20);
     cout< <"SAVE TRANSACTION (Y/N):  ";
     ch=getche();
     if(ch=='0')
	 return;
     ch=toupper(ch);
  }while(ch!='N' && ch!='Y');
  if(ch=='N')
      return;
  float t_interest;
  t_interest=calculate_interest(t_accno,t_balance);
  if(t_tran=='D')
    t_balance=t_balance+t_amount+t_interest;
  else
    t_balance=(t_balance-t_amount)+t_interest;
  ini.update_balance(t_accno,t_balance);
  add_to_file(t_accno,d1,m1,y1,t_tran,t_type,t_interest,t_amount,t_balance);
}

//============================================================
//      THIS FUNCTION CLOSE THE ACCOUNT (DELETE ACCOUNT)
//============================================================

void account::close_account(void)
{
   clrscr();
   char t_acc[10];
   int t,t_accno;
   gotoxy(71,1);
   cout<<"<0>=EXIT";
   gotoxy(5,5);
   cout< <"ENTER THE ACCOUNT NO.";
   gets(t_acc);
   t=atoi(t_acc);
   t_accno=t;
   if(t_accno==0)
      return;
   clrscr();
   initial ini;
   if(!ini.found_account(t_accno))
     {
       gotoxy(5,5);
       cout<<"\7ACCOUNT NOT FOUND";
       getch();
       return;
     }
   shape s;
   s.box(2,2,79,24,218);
   s.line_hor(3,78,4,196);
   s.line_hor(3,78,22,196);
   gotoxy(71,1);
   cout<<"<0>=EXIT";
   textbackground(BLACK);
   gotoxy(3,3);
   for(int i=1;i< =76;i++) cprintf("  ");
   textbackground(BLACK);
   textcolor(GREEN+BLINK); textbackground(BLACK);
   gotoxy(30,3);
   cprintf("CLOSE ACCOUNT SCREEN");
   textcolor(LIGHTBLUE); textbackground(BLACK);
   int d1,m1,y1;
   struct date d;
   getdate(&d);
   d1=d.da_day;
   m1=d.da_mon;
   y1=d.da_year;
   gotoxy(62,5);
   cout<<"DATE:  "<

Add Your Comment - Guidelines
You can express your opinion or reaction in the form below!

100 characters required

0 Comments:

Be the first one to comment!

You may also want to see:
QUOTE OF THE DAY
Life isn't about finding yourself. Life is about creating yourself. - George Bernard Shaw
April 19th, 2024 - Friday
background

Sign in to continue