C++ Project on Banking

Submitted by Editor

Banking System

 
//****************************************************************
//PROJECT BANKING SYSTEM 
//****************************************************************
//INCLUDES HEADER FILES
//****************************************************************

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


typedef char option[15];
const int ROW = 10,COL = 10;

int scan;    // To hold the special characters for moving the prompt in menu
int ascii;
//****************************************************************
// To display the main menu options
//****************************************************************
option a[]= {
			 "NewAccount",
			 "ListofAccounts",
			 "IndAccount",
			 "DailyTrans",
			 "MonthlyReport",
			 "EditAccount",
			 "Exit"};

// Displays the modify menu options
option b[] = {
				"Modify Account",
				"Closeaccount",
				"Quit"
			};

// Function used to do screening
class main_menu
{
	int i,done;

	public:
		void normalvideo(int x,int y,char *str);
		void reversevideo(int x,int y,char *str);
		void box(int x1,int y1,int x2,int y2);
		char menu();
		void control_menu();
		char e_menu();
		void edit_menu();
		void help(void);
};




//****************************************************************
/* Class member functions for drawing boxes */
//****************************************************************

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


// Class contains the initial deposit of customers
class initial
{
 public:
     void add_to_file(int, char t_name[30], char t_address[30], float);
	    // For initial deposits in customers account
     void display_list(void); // Displaying customers account list
     void delete_account(int); // Deleting customers account
     void update_balance(int, char t_name[30], char t_address[30], float);
	    // For updating the customer account
     void modify(void);      // To modify the customer account information
     int last_accno(void); // To know the last account number
     int found_account(int);
	    // To found the account is in "INITIAL.dat" or not
     char *return_name(int);
	    // Function for validation entry of customer name
     char *return_address(int);
	    // Function for validation entry of customer address
     float give_balance(int);
	    // To print the balance amount of a particular customer
     int recordno(int);
     void display(int); // To display the customer account

 private:
     void modify_account(int, char t_name[30], char t_address[30]);
	    // Function to modify the customer account
     int accno;
     char name[30], address[30];
     float balance;
};

// Class contains the customers daily transaction entry
class account
{
 public:
     void new_account(void);    // Function to create a new account
     void close_account(void);  // Function to close an account
     void display_account(void);// Function to display the accounts
     void transaction(void);    // To display the transaction process
     void clear(int, int);      // Function to perform a clear screen function
     void month_report(void);   // Function to list monthly transaction report

 private:
     void add_to_file(int,int,int,int,char,char t_type[10],float,float,float);
	    // Function to add transaction records
     void delete_account(int);  // Function to delete a transaction record
     int no_of_days(int, int, int, int, int, int);
	    // Function to find the total days
     float calculate_interest(int, float);
	    // Function for calculating interest of an account
     void display(int);         // Function to display a transaction account
     void box_for_display(int); // Function for displaying box
     int accno;
     char type[10];             // Account type as Cheque or Cash
     int dd, mm, yy;            // To store the system date/ Enter date
     char tran;                 // As the account type is Deposit or Withdraw
     float interest, amount, balance;
};

// Function to displays all the menu prompt messages from the pointer array of
// option a[]
void main_menu::normalvideo(int x,int y,char *str)
{
     gotoxy(x,y);
     cprintf("%s",str);
}

// Function to move the cursor on the menu prompt with a reverse video color
void main_menu::reversevideo(int x,int y,char *str)
{
     textcolor(5+143);
     textbackground(WHITE);
     gotoxy(x,y);
     cprintf("%s",str);
     textcolor(GREEN);
     textbackground(BLACK);
}

void main_menu::box(int x1,int y1,int x2,int y2)
{
     for(int col=x1;col=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;
       }
      gotoxy(71, 1);
      cout << "<0>=Exit";
      textbackground(WHITE);
      gotoxy(3, 3);
      for (j = 1; j< = 76; j++)
      cprintf(" ");
      textbackground(BLACK);
      textcolor(BLACK+BLINK);
      textbackground(WHITE);
      gotoxy(30, 3);
      cprintf("Modify Account Screen");
      textcolor(LIGHTGRAY);
      textbackground(BLACK);
      int d1, m1, y1;
      struct date d;          // For extracting system date
      getdate(&d);
      d1 = d.da_day;
      m1 = d.da_mon;
      y1 = d.da_year;
      gotoxy(4, 2);
      cout << "Date: " << d1 << "/" << m1 << "/" << y1;
      char ch;
      display(t_accno);
      account a;
      do
      {
       a.clear(5, 13);
       gotoxy(5, 13);
       cout << "Modify this account : ";
       ch = getche();
       if (ch == '0')
       return;
       ch = toupper(ch);
       }while (ch != 'N' && ch != 'Y');
      if (ch == 'N')
      return;
      int modified = 0, valid;
      char t_name[30], t_address[30];
      gotoxy(5, 15);
      cout < < "Name : ";
      gotoxy(5, 16);
      cout << "Address : ";
      do
      {
       a.clear(15, 15);
       a.clear(5, 23);
       gotoxy(5, 23);
       cout << "Enter Name or Press Enter 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);
      do
      {
       a.clear(15, 16);
       a.clear(5, 23);
       gotoxy(5, 23);
       cout < < "Enter Address or press enter for no Change";
       valid = 1;
       gotoxy(15, 16);
       gets(t_address);
       strupr(t_address);
       if (t_address[0] == '0')
       return;
       if (strlen(t_address) > 25)
       {
	valid = 0;
	gotoxy(5, 23);
	cprintf("\7Address should not greater than 25");
	getch();
	}
       }while (!valid);
      if (strlen(t_address) > 0)
      modified = 1;
      if (!modified)
      return;
      // clears the screen at 23rd row and from 5th column
      a.clear(5,23);
      do
      {
       a.clear(5, 23);
       gotoxy(5, 18);
       cout < < "Do you want to save Changes : ";
       ch = getche();
       if (ch == '0')
       return;
       ch = toupper(ch);
       }while (ch != 'N' && ch != 'Y');
      if (ch == 'N')
      return;
      // Passes the parameter to add in data file
      modify_account(t_accno, t_name, t_address);
      gotoxy(5, 21);
      cout < < "\7Record modified";
      gotoxy(5, 23);
      cout << "Press any key to continue...";
      getch();
}

/* Function for displaying an account when modified */
void initial::display(int t_accno)
{
      fstream file;
      file.open("INITIAL.dat", ios::in);
      file.seekg(0, ios::beg);
      // Displays the record contents matching with t_accno from
      // INITIAL.dat data file
      while (file.read((char *)this, sizeof(initial)))
      {
       if (t_accno == accno)
       {
	gotoxy(8, 5);
	cout << "Account no. " << accno;
	gotoxy(10, 8);
	cout << "Name : ";
	puts(name);
	gotoxy(10, 9);
	cout << "Address : ";
	puts(address);
	gotoxy(10, 10);
	cout << "Balance : " << setw(15)    // setwidth
	<< setprecision(2)    // set position of decimal point
	<< setiosflags(ios::left)   // set left justified output
	<< setiosflags(ios::showpoint)  // always show decimal point
	<< setiosflags(ios::fixed)<< balance;// set fixed notation for display
	break;
	}
       }
      file.close();
}

/* Function for updating the modified account into INITIAL.dat file */
void initial::modify_account(int t_accno,char t_name[30],char t_address[30])
{
     int recno;
     recno = recordno(t_accno);
     fstream file;
     file.open("INITIAL.dat", ios::out|ios::ate);
     strcpy(name, t_name);
     strcpy(address, t_address);
     int location;
     // finds the position in data file
     location = (recno-1) * sizeof(initial);
     file.seekp(location);
     // Overwrites the modified record into INITIAL.dat data file
     file.write((char *)this, sizeof(initial));
     file.close();
     return;
}

/* Function to find the last account number */
int initial::last_accno(void)
{
     fstream file;
     file.open("INITIAL.dat", ios::in);
     file.seekg(0, ios::beg);
     int count = 0;
     // Founds the last account no.
     while (file.read((char *)this, sizeof(initial)))
     count = accno;
     file.close();
     return count;
}

//This function add_to_file() is used to create new/fresh record in data file
void initial::add_to_file(int t_accno,char t_name[30],char t_address[30],float t_balance)
{
     accno = t_accno;
     strcpy(name, t_name);
     strcpy(address, t_address);
     balance = t_balance;
     fstream file;
     // Appends new account record with the balance into INITIAL.dat data file
     file.open("INITIAL.dat", ios::out|ios::app);
     file.write((char *)this, sizeof(initial));
     file.close();
}

// Function for deleting a account from INITIAL.dat file
void initial::delete_account(int t_accno)
{
     fstream file;
     file.open("INITIAL.dat", ios::in);
     fstream temp;
     temp.open("TEMP.dat", ios::out);
     file.seekg(0,ios::beg);
     // Uses a copy method to delete the account from INTITAL.dat data file
     while (!file.eof())
     {
      file.read((char *)this, sizeof(initial));
      if (file.eof())
      break;
      if (accno != t_accno)
      temp.write((char *)this, sizeof(initial));
      }
     file.close();
     temp.close();
     file.open("INITIAL.dat", ios::out);
     temp.open("TEMP.dat", ios::in);
     temp.seekg(0, ios::beg);
     // Copy the TEMP.dat contents into INTITAL.dat data file
     while (!temp.eof())
     {
      temp.read((char *)this, sizeof(initial));
      if (temp.eof())
      break;
      if (accno != t_accno)
      file.write((char *)this, sizeof(initial));
      }
     file.close();
     temp.close();
}

// Function for adding account details of daily tranaction into BANKING.dat file

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;
     getch();
     dd = d1;
     mm = m1;
     yy = y1;
     tran = t_tran;
     strcpy(type, t_type);
     interest = t_interest;
     amount = t_amount;
     balance = t_balance;
     // Appends the transaction record into BANKING.dat data file
     file.write((char *)this, sizeof(account));
     file.close();
}

/* Function for deleting an account from BANKING.dat file. */
void account::delete_account(int t_accno)
{
     fstream file;
     file.open("BANKING.dat", ios::in); // Open to read records
     fstream temp;
     temp.open("TEMP.dat", ios::out); // Open to write records
     file.seekg(0, ios::beg);        // Positioned from begining of the file
     // Uses the copy method for deleting the transaction record from
     // BANKING.dat data file
     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);
     // Uses copy method to transfer the record from TEMP.dat file to
     // BANKING.dat data file
     while (!temp.eof())
     {
      temp.read((char *)this, sizeof(account));
      if (temp.eof())
      break;
      if (accno != t_accno)
      file.write((char *)this, sizeof(account));
      }
     file.close();
     temp.close();
}

/* Function for displaying an account from "INITIAL.dat". */
void initial::display_list(void)
{
     clrscr();
     int flag;
     float t_bal = 0.0;
     fstream file;
     gotoxy(25,2);
     cout << "Accounts List in Bank";
     gotoxy(25, 3);
     cout << "=====================";
     int d1, m1, y1;
     struct date d;          // For extracting system date
     getdate(&d);
     d1 = d.da_day;
     m1 = d.da_mon;
     y1 = d.da_year;
     gotoxy(62, 3);
     cout << "Date: " << d1 << "/" << m1 << "/" << y1;
     gotoxy(1, 4);
     for (int j = 1; j <= 79; j++)
     cout << "=";
     gotoxy(1, 5);
     cout << "Accno#";
     gotoxy(10,5);
     cout << "Name";
     gotoxy(30,5);
     cout << "Address";
     gotoxy(65,5);
     cout << "Balance";
     gotoxy(1, 6);
     for (j = 1; j <= 79; j++)
     cout << "=";
     file.open("INITIAL.dat", ios::in);
     file.seekg(0,ios::beg);
     int row = 7;
     // Reads all the records to display on the screen
     while (file.read((char *)this, sizeof(initial)))
     {
      flag = 0;
      delay(2);
      gotoxy(3, row);
      cout << accno;
      gotoxy(10, row);
      puts(name);
      gotoxy(30, row);
      puts(address);
      gotoxy(65, row);
      cout < 23)
      {
       flag = 1;
       row = 6;
       gotoxy(4, 24);
       cout < < "Press any key to continue.... ";
       getch();
       clrscr();
      }
     }
    gotoxy(1, row);
    for (j = 1; j <= 79; j++)
    cout << "=";
    row++;
    gotoxy(3, row);
    cout << "Total Balance in Bank is : ";
    gotoxy(65, row);
    cout <=Exit";
     gotoxy(5, 5);
     cout < < "Enter 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;
      }
     // Display the heading from this function
     box_for_display(t_accno);
     int row = 9, flag;
     fstream file;
     file.open("BANKING.dat", ios::in);
     while (file.read((char *)this, sizeof(account)))
     {
      if (accno == t_accno)
      {
       flag = 0;
       delay(2);
       gotoxy(4, row);
       cout << dd << "-" << mm << "-" << yy;
       gotoxy(16, row);
       puts(type);
       if (tran == 'D')
       {
	damt = damt + amount;
	tamt = tamt + amount;
	gotoxy(30, row);
	}
       else
       {
	wamt = wamt + amount;
	tamt = tamt - amount;
	gotoxy(42, row);
	}
       cout <<  setw(15)<< setprecision(2)<< setiosflags(ios::left)
	    << setiosflags(ios::showpoint)<< setiosflags(ios::fixed)<< amount;
       gotoxy(66, row);
       cout << setw(15)<< setprecision(2)<< setiosflags(ios::left)
	    << setiosflags(ios::showpoint)<< setiosflags(ios::fixed)< 23)
       {
	flag = 1;
	row = 7;
	gotoxy(4, 24);
	cout < < "Press any key to continue";
	getch();
	clrscr();
	box_for_display(t_accno);
	}
       }
      }
     file.close();
     gotoxy(1, row);
     for (j = 1; j <= 79; j++)
     cout << "=";
     row++;
     gotoxy(4, row);
     cout << "Total-->:";
     gotoxy(30, row);
     cout < < setw(15)<< setprecision(2)<< setiosflags(ios::left)
	  << setiosflags(ios::showpoint)<< setiosflags(ios::fixed)<< damt;
     gotoxy(42, row);
     cout << setw(15)<< setprecision(2)<< setiosflags(ios::left)
	  << setiosflags(ios::showpoint)<< setiosflags(ios::fixed)<< wamt;
     gotoxy(66, row);
     cout << setw(15)<< setprecision(2)<< setiosflags(ios::left)
	  << setiosflags(ios::showpoint)<< setiosflags(ios::fixed)<< tamt;
     if (!flag)
     {
      gotoxy(4, 24);
      cout << "Press any key to continue...";
      getch();
      }
}

/* Function to list monthWise transaction report. */
void account::month_report(void)
{
    int dd1, mm1, yy1;
    clrscr();
    gotoxy(10, 5);
    cout << "Enter any date of a month ";
    gotoxy(38, 5);
    cin >> dd1;
    gotoxy(40, 5);
    cout < < "-";
    gotoxy(41, 5);
    cin >> mm1;
    gotoxy(43, 5);
    cout < < "-";
    gotoxy(44, 5);
    cin >> yy1;
    clrscr();
    char t_acc[10];
    int j;
    int tamt = 0, damt = 0, wamt = 0;
    int t, t_accno;
    gotoxy(71, 1);
    cout < < "<0>=Exit";
    gotoxy(5, 5);
    cout < < "Enter 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);
    gotoxy(4, 5);
    cout << "Statement Month: " << dd1 << "/" << mm1 << "/" << yy1;
    getch();
    int row = 9, flag;
    fstream file;
    file.open("BANKING.dat", ios::in);
    float pre_balance = 0.0; // Previous balance amount
    // The loop finds the last months balance
    while (file.read((char *)this, sizeof(account)))
    {
    //Checks the account no. and till the previous month and till current year
     if((accno == t_accno) && ((mm < mm1 && yy <= yy1) || (mm1 < mm && yy < yy1)))
     {
      pre_balance = balance;
      }
     }
     file.close();
     file.open("BANKING.dat", ios::in);
     gotoxy(54, row);
     cout<<"B/F ....    " < 23)
       {
	flag = 1;
	row = 7;
	gotoxy(4, 24);
	cout < < "Press any key to continue";
	getch();
	clrscr();
	box_for_display(t_accno);
	}
       }
      }
     file.close();
     gotoxy(1, row);
     for (j = 1; j <= 79; j++)
     cout << "=";
     row++;
     gotoxy(4, row);
     cout << "Total-->:";
     gotoxy(30, row);
     // Deposited amount
     cout < < setw(15)                   // setwidth
	  << setprecision(2)            // set position of decimal point
	  << setiosflags(ios::left)     // set left justified output
	  << setiosflags(ios::showpoint)// always show decimal point
	  << setiosflags(ios::fixed)    // set fixed notation for display
	  << damt;
     gotoxy(42, row);
     // Withdraw amount
     cout << setw(15)<< setprecision(2)<< setiosflags(ios::left)
	  << setiosflags(ios::showpoint)<=Exit";
    gotoxy(3,3);
    for (i = 1; i< = 76; i++)
    cprintf(" ");
    textbackground(BLACK);
    textcolor(BLACK+BLINK);
    textbackground(WHITE);
    gotoxy(30, 3);
    cprintf("Open New Account");
    textcolor(LIGHTGRAY);
    textbackground(BLACK);
    int d1, m1, y1;
    struct date d;          // For extracting system date
    getdate(&d);
    d1 = d.da_day;
    m1 = d.da_mon;
    y1 = d.da_year;
    int t_accno;
    t_accno = ini.last_accno();
    t_accno++;
    //Appends and deletes false record to create primary position in data files
    if (t_accno == 1)
    {
     ini.add_to_file(t_accno, "abc", "xyz", 1.1);
     ini.delete_account(t_accno);
     cout << "Press xxxxxxx";
     getch();
     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[30];
    float t_bal = 0.0, t_balance = 0.0;
    gotoxy(5, 6);
    cout << "Date: " << d1 << '/' << m1 << '/' << y1;
    gotoxy(5, 8);
    cout << "Account No # " << t_accno;
    gotoxy(5, 10);
    cout << "Name : ";
    gotoxy(5, 11);
    cout << "Address : ";
    gotoxy(5, 12);
    cout << "Name of verifying Person : ";
    gotoxy(5, 14);
    cout << "Initial Deposit : ";
    do
    {
     clear(15, 10);
     clear(5, 23);
     gotoxy(5, 23);
     cout << "Enter Name of the Person";
     valid = 1;
     gotoxy(15, 10);
     gets(t_name);
     strupr(t_name);
     if (t_name[0] == '0')
     return;
     if (strlen(t_name) == 0 || strlen(t_name) > 25)
     {
      valid = 0;
      gotoxy(5, 23);
      cprintf("\7Name should not greater than 25");
      getch();
      }
     }while (!valid);
    do
    {
     clear(25, 15);
     clear(5, 23);
     gotoxy(5, 23);
     cout < < "Enter Address of the Person ";
     valid = 1;
     gotoxy(15, 11);
     gets(t_address);
     strupr(t_address);
     if (t_address[0] == '0')
     return;
     if (strlen(t_address) == 0 || strlen(t_address) > 25)
     {
      valid = 0;
      gotoxy(5, 23);
      cprintf("\7Address should not greater than 25");
      getch();
      }
     }while (!valid);
    do
    {
     char vari[30];
     clear(13, 12);
     clear(5, 23);
     gotoxy(5, 23);
     cout < < "Enter name of the verifying Person ";
     valid = 1;
     gotoxy(31, 12);
     gets(vari);
     strupr(vari);
     if (vari[0] == '0')
     return;
     if (strlen(vari) == 0 || strlen(vari) > 25)
     {
      valid = 0;
      gotoxy(5, 23);
      cprintf("Should not blank or greater than 25");
      getch();
      }
     }while (!valid);
    do
    {
     clear(13, 12);
     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')
     {
      valid = 0;
      gotoxy(5, 23);
      cprintf("\7Should not less than 500");
      getch();
      }
     }while (!valid);
    clear(5, 23);
    do
    {
     clear(5, 17);
     valid = 1;
     gotoxy(5, 17);
     cout << "Do you want to save the record : ";
     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");
    //Appends records contents into both INITIAL.dat and BANKING.dat data files
    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);
}

/* Function for returning balance amount of an account. */
float initial::give_balance(int t_accno)
{
    fstream file;
    file.open("INITIAL.dat", ios::in);
    file.seekg(0, ios::beg);
    float t_balance;
    // Gives the last balance of an individual account
    while (file.read((char *)this, sizeof(initial)))
    {
     if (accno == t_accno)
     {
      t_balance = balance;
      break;
      }
     }
    file.close();
    return t_balance;
}

/* Function for returning the record no. for updating balance */
int initial::recordno(int t_accno)
{
    fstream file;
    file.open("INITIAL.dat", ios::in);
    file.seekg(0, ios::beg);
    int count = 0;

    // Finds the record position in INITIAL.dat data file
    while (file.read((char *)this, sizeof(initial)))
    {
     count++;
     if (t_accno == accno)
     break;
     }
    file.close();
    return count;
}

/* Function for updating the balance for the given account no. */
void initial::update_balance(int t_accno,char t_name[30],char t_address[30],float t_balance)
{
    int recno;
    recno = recordno(t_accno);
    fstream file;
    file.open("INITIAL.dat", ios::out|ios::ate);
    strcpy(name, t_name);
    strcpy(address, t_address);
    balance = t_balance;
    int location;
    location = (recno-1) * sizeof(initial); // Find the location in file
    file.seekp(location);   // Searches the insertion position in data file
    // Updates the balance amount in INITIAL.dat data file
    file.write((char *)this, sizeof(initial));
    file.close();
}

/* Function to return no. days between two dates. */
int account::no_of_days(int d1, int m1, int y1, int d2, int m2, int y2)
{
    static int month[] = {31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30};
    int days = 0;
   while (d1 != d2 || m1 != m2 || y1 != y2)
    {
     days++;
     d1++;
     if (d1 > month[m1-1])
     {
      d1 = 1;
      m1++;
      }
     if (m1 > m2)
     {
      m1 = 1;
      y1++;
      }
     }
    return days;
}

/* Function for 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 < y1) || (y2==y1 && m2 < m1) || (y2==y1 && m2 == m1) && (d2 < d1))
    return t_interest;
    days = no_of_days(d1, m1, y1, d2, m2, y2);
    int months = 0;
    if (days > 30)
    {
     months = days / 30;
     t_interest = ((t_balance*2)/100 * months);
     }
    file.close();
    return t_interest;
}

/* Function for making daily transaction (Deposit 'D'/Withdraw 'W'. */
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;
     }
    gotoxy(71, 1);
    cout << "<0>=Exit";
    gotoxy(3, 3);
    for (int i = 1; i < = 76; i++)
    cprintf(" ");
    textbackground(BLACK);
    textcolor(BLACK+BLINK);
    textbackground(WHITE);
    gotoxy(29, 3);
    cprintf ("Transaction in Account");
    textcolor(LIGHTGRAY);
    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: " << d1 << "/" << m1 << "/" << y1;
    gotoxy(5, 8);
    cout << "Accnount no. " << t_accno;
    char t_name[30];
    char t_address[30];
    float t_balance;
    strcpy(t_name, ini.return_name(t_accno));
    strcpy(t_address, ini.return_address(t_accno));
    t_balance = ini.give_balance(t_accno);
    gotoxy(27, 11);
    cout << "Name : " << t_name;
    gotoxy(27, 12);
    cout << "Address : " << t_address;
    gotoxy(5, 15);
    cout<<"Last balance Rs. "<< setw(15)<< setprecision(2)
	< t_balance) || (t_amount < 1))
     {
      valid = 0;
      gotoxy(5, 23);
      cprintf("\7Invalid Data entered");
      getch();
      }
     }while (!valid);
    char ch;
    clear(5, 23);
    do
    {
     clear(20, 23);
     valid = 1;
     gotoxy(40, 20);
     cout << "Save Transaction  : ";
     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;
    // Modified records are updated in data bases.
    ini.update_balance(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);
}

/* Function for closing any account after inputing account number. */
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;
     }
    gotoxy(71, 1);
    cout << "<0>=Exit";
    gotoxy(3, 3);
    textbackground(WHITE);
    for (int i = 1; i < = 76; i++)
    cprintf(" ");
    textbackground(BLACK);
    textcolor(BLACK+BLINK);
    textbackground(WHITE);
    gotoxy(30, 3);
    cprintf("Close account screen");
    textcolor(LIGHTGRAY);
    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: " << d1 << "/" << m1 << "/" << y1;
    char ch;
    ini. display(t_accno);
    do
    {
     clear(5, 15);
     gotoxy(5, 15);
     cout << "Close this account  ";
     ch = getche();
     if (ch == '0')
     return;
     ch = toupper(ch);
     }while (ch != 'N' && ch != 'Y');
    if (ch == 'N')
    return;
    // Function calls to delete the existing account no.
    ini.delete_account(t_accno);
    delete_account(t_accno);
    gotoxy(5, 20);
    cout < < "\7Account Deleted";
    gotoxy(5, 23);
    cout << "Press any key to continue...";
    getch();
}

// Main program logic which control the class members and member functions.
void main(void)
{
    main_menu  m_menu;
    int gdriver = DETECT, gmode, errorcode;
    initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
    m_menu.help();
    closegraph();
    m_menu.control_menu();
}



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
Problems are not stop signs, they are guidelines. - Robert H. Schuller
August 23rd, 2019 - Friday
background

Sign in to continue