Wednesday, 7 September 2011

Bank Management System (CODE) In C

Here the programming code of  "Bank Management System" is given below.

// Declaration of header files
#include <stdio.h>
#include <process.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <graphics.h>
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
int i, done;
void normalvideo(int x, int y, char *str);
void reversevideo(int x, int y, char *str);
void box1(int x1, int y1, int x2, int y2);
char menu();
// Menu for displaying all the option of the banking system
void control_menu();
char e_menu();
void edit_menu();
void help(void);

/* Member functions for drawing boxes */
void line_hor(int, int, int, char);
void line_ver(int, int, int, char);
void box(int, int, int, int, char);
// Functions  contains the initial deposit of customers
void add_to_ini(int, char t_name[30], char t_address[30], float); // For initial deposits in customers account
void display_ini(void); // Displaying customers account list
void delete_ini(int); // Deleting customers account
void update_ini(int, char t_name[30], char t_address[30], float); // For updating the customer account
void modify_ini(void);    // To modify the customer account information
int last_accno_ini(void); // To know the last account number
int found_account_ini(int); // To found the account is in "INITIAL.dat" or not
char *return_name_ini(int); // Function for validation entry of customer name
char *return_address_ini(int); // Function for validation entry of customer address
float give_balance_ini(int); // To print the balance amount of a particular customer
void modify_account_ini(int, char t_name[30], char t_address[30]); // Function to modify the customer account
int recordno_ini(int);
void display_in(int); // To display the customer account
/* Record Structure for initial account information of customer's
when opening a new account */
struct initial
{
 int accno;
 char name[30], address[30];
 float balance;
}ini;
// Fucntions contains the customers daily transaction entry
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 monthWise transaction report
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
/* Account information of customer's when it was created */
struct account
{
 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;
}acc;
// Function to displays all the menu prompt messages from the pointer array of option a[]
void 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 reversevideo(int x, int y, char *str)
{
 textcolor(5+143);
 textbackground(WHITE);
 gotoxy(x,y);
 cprintf("%s", str);
 textcolor(GREEN);
 textbackground(BLACK);
}
void box1(int x1, int y1, int x2, int y2)
{
  int col, row;
  for( col = x1; col < x2; col++)
  {
     gotoxy(col, y1);
     cprintf("%c", 196);
     gotoxy(col, y2);
     cprintf("%c", 196);
  }
  for(row = y1; row < y2; row++)
  {
     gotoxy(x1, row);
     cprintf("%c", 179);
     gotoxy(x2, row);
     cprintf("%c", 179);
  }
  gotoxy(x1, y1);
  cprintf("%c", 218);
  gotoxy(x1, y2);
  cprintf("%c", 192);
  gotoxy(x2, y1);
  cprintf("%c", 191);
  gotoxy(x2, y2);
  cprintf("%c", 217);
}
char menu()
{
 clrscr();
 textcolor(22);
 box1(20, 6, 65, 20);
 box1(18, 4, 67, 22);
 textcolor(5+143);
 gotoxy(36, 5);
 textbackground(BLUE);
 cprintf("B A N K I N G");
 textbackground(BLACK);
 textcolor(22);
 for(i = 1; i < 7; i++)
 normalvideo(32, i+10, a[i]);
 reversevideo(32, 10, a[0]);
 i = done = 0;
 _setcursortype(_NOCURSOR);
 do
 {
  int key = getch();
  switch (key)
  {
   case 00:
    key = getch();
    switch (key)
    {
     case 72:
      normalvideo(32, i+10, a[i]);
      i--;
      if (i == -1)
       i = 6;
      reversevideo(32, i+10, a[i]);
      break;
     case 80:
      normalvideo(32, i+10, a[i]);
      i++;
      if (i == 7)
       i = 0;
      reversevideo(32, i+10, a[i]);
      break;
    }
    break;
   case 13:
    done = 1;
  }
 }
 while (!done);
 _setcursortype(_NOCURSOR);
 return(i+49);
}
/* The function main_menu() is used to display the main menu of banking system */
void control_menu()
{
 char choice;
 do
 {
  choice = menu();
  clrscr();
  switch (choice)
  {
   case '1':
    _setcursortype(_NORMALCURSOR);
    box1(3, 1, 75, 24);
    box1(5, 2, 73, 23);
    new_account(); // New account member function
    break;
   case '2':
    box1(3, 1, 75, 24);
    box1(5, 2, 73, 23);
    display_ini(); // Glogal list of account function
    break;
   case '3':
    box1(3, 1, 75, 24);
    box1(5, 2, 73, 23);
     _setcursortype(_NORMALCURSOR);
    display_account(); // Displaying individual accounts all transactions
    break;
   case '4':
    box1(3, 1, 75, 24);
    box1(5, 2, 73, 23);
    _setcursortype(_NORMALCURSOR);
    transaction(); // Daily transaction for individual account
     break;
   case '5':
    box1(3, 1, 75, 24);
    box1(5, 2, 73, 23);
    _setcursortype(_NORMALCURSOR);
    month_report(); // Monthly report for any account
    break;
   case '6':
    box1(3, 1, 75, 24);
    box1(5, 2, 73, 23);
    gotoxy(10, 10);
    edit_menu(); // Sub menu for modifying or deleting any account
    break;
   case '7' :exit(0);
     }
   } while (choice != 6);
}
/* This function is used to return the cursor position to the edit menu function where the
menu prompt will valid */
char e_menu()
{
 clrscr();
 textcolor(22);
 box1(25,6,60,15);
 box1(23,4,62,17);
 textcolor(5+143);
 gotoxy(34,5);
 textbackground(GREEN);
 cprintf("E D I T  -  M E N U");
 textcolor(22);
 textbackground(BLACK);
 for (i = 1;i < 3; i++)
  normalvideo(32, i+10, b[i]);
 reversevideo(32, 10, b[0]);
 i = done = 0;
 _setcursortype(_NOCURSOR);
 do
 {
  int key = getch();
  switch (key)
  {
   case 00:
    key = getch();
    switch (key)
    {
     case 72:
      normalvideo(32, i+10, b[i]);
      i--;
      if (i == -1)
       i = 2;
      reversevideo(32, i+10, b[i]);
      break;
     case 80:
      normalvideo(32, i+10, b[i]);
      i++;
      if (i == 3)
       i=0;
      reversevideo(32, i+10, b[i]);
      break;
    }
    break;
   case 13:
    done = 1;
  }
 }
 while (!done);
 _setcursortype(_NOCURSOR);
 return(i+49);
}
/* Function for edit menu with account modification and close */
void edit_menu()
{
 char choice;
 do
 {
  choice = e_menu();
  clrscr();
  switch (choice)
  {
   case '1':
    box1(3, 1, 75, 24);
    box1(5, 2, 73, 23);
    _setcursortype(_NORMALCURSOR);
    modify_ini();
    break;
   case '2':
    box1(3, 1, 75, 24);
    box1(5, 2, 73, 23);
    _setcursortype(_NORMALCURSOR);
    close_account();
    break;
   case '3':
    return;
  }
 } while (choice != 6);
}
/* Function to draw horizontal line */
void line_hor(int column1, int column2, int row, char c)
{
 for (column1; column1 <= column2; column1++)
 {
  gotoxy(column1, row);
  printf("%c", c);
 }
}
/* Function to draw vertical line */
void line_ver(int row1, int row2, int column, char c)
{
 for (row1; row1 <= row2; row1++)
 {
  gotoxy(column, row1);
  printf("%c", c);
 }
}
/* Function for drawing box */
void box(int column1, int row1, int column2, int row2, char c)
{
 char ch = 218;
 char c1, c2, c3, c4;
 char l1 = 196, l2 = 179;
 if (c == ch)
 {
  c1 = 218;
  c2 = 191;
  c3 = 217;
  c4 = 217;
  l1 = 196;
  l2 = 179;
 }
 else
 {
  c1 = c;
  c2 = c;
  c3 = c;
  c4 = c;
  l1 = c;
  c2 = c;
 }
 gotoxy(column1, row1);
 printf ("%c", c1);
 gotoxy(column2, row1);
 printf ("%c", c2);
 gotoxy(column1, row2);
 printf ("%c", c3);
 gotoxy(column2, row2);
 printf ("%c", c4);
 column1++;
 column2--;
 line_hor(column1, column2, row1, l1); //Horizontal line
 line_hor(column1, column2, row2, l1);
 column1--;
 column2++;
 row1++;
 row2--;
 line_ver(row1, row2, column1, l2); // Vertical line
 line_ver(row1, row2, column2, l2);
}

/* Function to display help about this project */
void help(void)
{
 clrscr();
 setbkcolor(7);
 settextstyle(7, HORIZ_DIR, 5);
 outtextxy(70, 20, "Welcome to Banking Project");
 settextstyle(2, HORIZ_DIR, 5);
 outtextxy(60, 100, "This project your can keep record of daily banking transaction");
 delay(2);
 outtextxy(60, 130, "This program is capable of holding any no. of account.");
 delay(2);
 outtextxy(60, 160, "-In first option you can open new account");
 delay(2);
 outtextxy(60, 190, "-In second option you can see the list of all the accounts");
 delay(2);
 outtextxy(60, 220,"-In third option you can see all the transaction of individual account");
 delay(2);
 outtextxy(60, 250, "-Through fourth optiion you can do banking transactions");
 delay(2);
 outtextxy(60, 280, "(Deposit/Withdraw)");
 delay(2);
 outtextxy(60, 310, "-In fifth option you can take monthWise individual account report");
 delay(2);
 outtextxy(60, 340,"-In sixth option you can modify or delete any account");
 delay(2);
 outtextxy(60, 370, "Note-: Opening amount should not less that Rs. 500/-");
 delay(2);
 outtextxy(60, 400, "-And last option is Quit (Exit to Window)");
 delay(2);
 settextstyle(7, HORIZ_DIR, 4);
 outtextxy(80, 420, "Press any key to continue...");
 getch();
}
/* Function for modifying the existing accounts */
void modify_ini(void)
{
 int j;
 char t_acc[10];
 int t, t_accno;
 int d1, m1, y1;
 struct date d;  // For extracting system date
 int modified = 0, valid;
 char t_name[30], t_address[30];
 char ch;
 clrscr();
 gotoxy(17, 1);
 printf ("<0>=Exit");
 gotoxy(5,5);
 printf ("Enter the account no. ");
 gets(t_acc);
 t = atoi(t_acc);
 t_accno = t;
 if (t_accno == 0)
  return;
 clrscr();
 if (!found_account_ini(t_accno))
 {
  gotoxy(5, 5);
  printf ("\7Account not found");
  getch();
  return;
 }
 gotoxy(71, 1);
 printf ("<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);
 getdate(&d);
 d1 = d.da_day;
 m1 = d.da_mon;
 y1 = d.da_year;
 gotoxy(4, 2);
 printf ( "Date: " );
 printf("%d",d1);
 printf ("/");
 printf("%d",m1);
 printf("/");
 printf("%d",y1);
 display_in(t_accno);
 do
 {
  clear(5, 13);
  gotoxy(5, 13);
  printf ("Modify this account <y/n>: ");
  ch = getche();
  if (ch == '0')
   return;
  ch = toupper(ch);
 }while (ch != 'N' && ch != 'Y');
 if (ch == 'N')
  return;
 gotoxy(5, 15);
 printf ( "Name : ");
 gotoxy(5, 16);
 printf ( "Address : ");
 do
 {
  clear(15, 15);
  clear(5, 23);
  gotoxy(5, 23);
  printf ("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
 {
  clear(15, 16);
  clear(5, 23);
  gotoxy(5, 23);
  printf ( "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
 clear(5,23);
 do
 {
  clear(5, 23);
  gotoxy(5, 18);
  printf ( "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;
 // Passes the parameter to add in data file
 modify_account_ini(t_accno, t_name, t_address);
 gotoxy(5, 21);
 printf ( "\7Record modified");
 gotoxy(5, 23);
 printf ( "Press any key to continue...");
 getch();
}
/* Function for displaying an account when modified */
void display_in(int t_accno)
{
 FILE  *file;
 file = fopen("INITIAL.dat", "rb+");
 rewind(file);
 // Displays the record contents matching with t_accno from INITIAL.dat data file
 while (fread(&ini, sizeof(ini), 1, file)==1)
 {
  if (t_accno == ini.accno)
  {
   gotoxy(8, 5);
   printf ( "Account no. " );
   printf("%d",ini.accno);
   gotoxy(10, 8);
   printf ( "Name : ");
   puts(ini.name);
   gotoxy(10, 9);
   printf ( "Address : ");
   puts(ini.address);
   gotoxy(10, 10);
   printf ( "Balance : " );
   printf ("%-10.2f", ini.balance);
   break;
  }
 }
 fclose(file);
}
/* Function for updating the modified account into INITIAL.dat file */
void modify_account_ini(int t_accno, char t_name[30], char t_address[30])
{
 int recno;
 int location;
 FILE  *file;
 file= fopen("INITIAL.dat", "rb+");
 recno = recordno_ini(t_accno);
 strcpy(ini.name, t_name);
 strcpy(ini.address, t_address);
 // finds the position in data file
 location = (recno-1) * sizeof(ini);
 fseek(file, location, SEEK_CUR);
 // Overwrites the modified record into INITIAL.dat data file
 fwrite(&ini, sizeof(ini), 1, file);
 fclose(file);
 return;
}
/* Function to find the last account number */
int last_accno_ini(void)
{
 FILE  *file;
 int count = 0;
 file = fopen("INITIAL.dat", "rb+");
 rewind(file);

 // Founds the last account no.
 while (fread(&ini, sizeof(ini), 1, file))
  count = ini.accno;
 fclose(file);
 return count;
}
/* This function add_to_file() is used to create new/fresh record in the data file */
void add_to_file_ini(int t_accno, char t_name[30], char t_address[30], float t_balance)
{
 FILE *file;
 ini.accno = t_accno;
 strcpy(ini.name, t_name);
 strcpy(ini.address, t_address);
 ini.balance = t_balance;

 // Appends new account record with the balance into INITIAL.dat data file
 file = fopen("INITIAL.dat", "a+");
 fwrite(&ini, sizeof(ini), 1, file);
 fclose(file);
}
// Function for deleting a account from INITIAL.dat file
void delete_ini(int t_accno)
{
 FILE  *file;
 FILE  *temp;
 file = fopen("INITIAL.dat", "rb+");
 temp = fopen("TEMP.dat", "wb");
 rewind(file);
 // Uses a copy method to delete the account from INTITAL.dat data file
 while (fread(&ini, sizeof(ini), 1, file) == 1)
 {
  if (ini.accno != t_accno)
   fwrite(&ini, sizeof(ini), 1, temp);
 }
 fclose(file);
 fclose(temp);
 remove ("INITIAL.dat");
 rename("TEMP.dat", "INITIAL.dat");
 file = fopen("INITIAL.dat", "rb+");
}
/* Function for add an account details of daily tranaction into BANKING.dat file. */
void 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)
{
 FILE  *file;
 file = fopen("BANKING.dat", "a+");
 acc.accno = t_accno;
 getch();
 acc.dd = d1;
 acc.mm = m1;
 acc.yy = y1;
 acc.tran = t_tran;
 strcpy(acc.type, t_type);
 acc.interest = t_interest;
 acc.amount = t_amount;
 acc.balance = t_balance;
 // Appends the transaction record into BANKING.dat data file
 fwrite(&acc, sizeof(acc), 1, file);
 fclose(file);
}
/* Function for deleting an account from BANKING.dat file. */
void delete_account(int t_accno)
{
 FILE  *file;
 FILE  *temp;
 file = fopen("BANKING.dat", "r"); // Open to read records
 temp = fopen("TEMP.dat", "w"); // Open to write records
 rewind(file);  // Positioned from begining of the file
 // Uses the copy method for deleting the transaction record from BANKING.dat data file
 while (fread(&acc, sizeof(acc), 1, file) == 1)
 {
  if (acc.accno != t_accno)
   fwrite(&acc, sizeof(acc), 1, temp);
 }
 fclose(file);
 fclose(temp);
 remove("BANKING.dat");
 rename("TEMP.dat", "BANKING.dat");
}
/* Function for displaying an account from "INITIAL.dat". */
void display_ini(void)
{
 int flag, j;
 float t_bal = 0.0;
 FILE *file;
 int d1, m1, y1;
 struct date d;  // For extracting system date
 int row = 7;
 clrscr();
 gotoxy(25, 2);
 printf ( "Accounts List in Bank");
 gotoxy(25, 3);
 printf ( "=====================");
 getdate(&d);
 d1 = d.da_day;
 m1 = d.da_mon;
 y1 = d.da_year;
 gotoxy(62, 3);
 printf ( "Date: " );
 printf("%d", d1);
 printf( "/");
 printf("%d", m1);
 printf( "/");
 printf("%d", y1);
 gotoxy(1, 4);
 for (j = 1; j <= 79; j++)
  printf ( "=");
 gotoxy(1, 5);
 printf ( "Accno#");
 gotoxy(10, 5);
 printf ( "Name");
 gotoxy(30, 5);
 printf ( "Address");
 gotoxy(65, 5);
 printf ( "Balance");
 gotoxy(1, 6);
 for (j = 1; j <= 79; j++)
  printf ( "=");
 file = fopen("INITIAL.dat", "r");
 rewind(file);
 // Reads all the records to display on the screen
 while (fread(&ini, sizeof(ini), 1, file) == 1)
 {
  flag = 0;
  delay(2);
  gotoxy(3, row);
  printf ("%d", ini.accno);
  gotoxy(10, row);
  puts(ini.name);
  gotoxy(30, row);
  puts(ini.address);
  gotoxy(65, row);
  printf ("%-10.2f", ini.balance);
  t_bal = t_bal + ini.balance;
  row++;
  if (row > 23)
  {
   flag = 1;
   row = 6;
   gotoxy(4, 24);
   printf ( "Press any key to continue.... ");
   getch();
   clrscr();
  }
 }
 gotoxy(1, row);
 for (j = 1; j <= 79; j++)
  printf ( "=");
 row++;
 gotoxy(3, row);
 printf ( "Total Balance in Bank is : ");
 gotoxy(65, row);
 printf ( "%-10.2f", t_bal);
 fclose(file);
 if (!flag)
 {
  gotoxy(4, 24);
  printf ( "Press any key to continue...");
  getch();
 }
 getch();
}
/* Function for clearing specified row and column. */
void clear(int col, int row)
{
 int j;
 for (j = col; j <= 79; j++)
 {
  gotoxy(j, row);
  printf ( " ");
 }
}
/* Function to found an account for display account function. */
int found_account_ini(int t_accno)
{
 FILE *file;
 int found = 0;
 file = fopen("INITIAL.dat", "r");
 rewind(file);

 // Searches the specified record in INITIAL.dat data file
 while (fread(&ini, sizeof(ini), 1, file) == 1)
 {
  if (ini.accno == t_accno)
  {
   found = 1;
   break;
  }
 }
 fclose(file);
 return found;
}
/* Function for return name of the account holder from INITIAL.dat. */
char *return_name_ini(int t_accno)
{
 FILE  *file;
 char t_name[30];
 file = fopen("INITIAL.dat", "r");
 rewind(file);

 // Return the name to display at report screen if found
 while (fread(&ini, sizeof(ini), 1, file) == 1)
 {
  if (ini.accno == t_accno)
  {
   strcpy(t_name, ini.name);
   break;
  }
 }
 fclose(file);
 return t_name;
}
/* Function for return address of the account holder from INITIAL.dat. */
char *return_address_ini(int t_accno)
{
 FILE *file;
 char t_address[30];
 file = fopen("INITIAL.dat", "r");
 rewind(file);
 // Return the address to display at report screen if found
 while (fread(&ini, sizeof(ini), 1, file) == 1)
 {
  if (ini.accno == t_accno)
  {
   strcpy(t_address, ini.address);
   break;
  }
 }
 fclose(file);
 return t_address;
}
/* Function for display account details */
void box_for_display(int t_accno)
{
 int d1, m1, y1, i;
 char t_name[30];
 char t_address[30];
 struct date d;
 getdate(&d);
 d1 = d.da_day;
 m1 = d.da_mon;
 y1 = d.da_year;
 gotoxy(63, 2);
 printf ( "Date: " );
 printf("%d", d1);
 printf( "/" );
 printf("%d", m1);
 printf ( "/" );
 printf ( "%d", y1);
 gotoxy(4, 2);
 printf ( "Account No. " );
 printf("%d", t_accno);
 strcpy(t_name, return_name_ini(t_accno));
 strcpy(t_address, return_address_ini(t_accno));
 gotoxy(25, 2);
 printf ("%s", t_name);
 gotoxy(25, 3);
 printf ("%s", t_address);
 gotoxy(4, 5);
 printf ( "Global Report of Account");
 textbackground(WHITE);
 textcolor(BLACK);
 textbackground(WHITE);
 gotoxy(1, 6);
 for (i = 1; i <=79; i++)
  printf ( "=");
 gotoxy(4, 7);
 cprintf("Date       Particular   Deposit      Withdraw                Balance");
 gotoxy(1, 8);
 for (i = 1; i <=79; i++)
  printf ( "=");
 textcolor(LIGHTGRAY);
 textbackground(BLACK);
}
/* Function for display an account from BANKING.dat file. */
void display_account(void)
{
 char t_acc[10];
 int j;
 float tamt = 0, damt = 0, wamt = 0;
 int t, t_accno;
 int row = 9, flag;
 FILE *file;
 file = fopen("BANKING.dat", "r");
 clrscr();
 gotoxy(71, 1);
 printf ( "<0>=Exit");
 gotoxy(5, 5);
 printf ( "Enter account no. ");
 gets(t_acc);
 t = atoi(t_acc);
 t_accno = t;
 if (t_accno == 0)
  return;
 clrscr();
 if (!found_account_ini(t_accno))
 {
  gotoxy(5, 5);
  printf ( "\7Account not found");
  getch();
  return;
 }
 // Display the heading from this function
 box_for_display(t_accno);
 while (fread(&acc, sizeof(acc), 1, file) == 1)
 {
  if (acc.accno == t_accno)
  {
   flag = 0;
   delay(2);
   gotoxy(4, row);
   printf( "%d", acc.dd);
   printf( "-" );
   printf( "%d", acc.mm);
   printf( "-" );
   printf( "%d", acc.yy);
   gotoxy(16, row);
   puts(acc.type);
   if (acc.tran == 'D')
   {
    damt = damt + acc.amount;
    tamt = tamt + acc.amount;
    gotoxy(30, row);
   }
   else
   {
    wamt = wamt + acc.amount;
    tamt = tamt - acc.amount;
    gotoxy(42, row);
   }
   printf ( "%-10.2f", acc.amount);
   gotoxy(66, row);
   printf ( "%-10.2f", acc.balance);
   row++;
   if (row > 23)
   {
    flag = 1;
    row = 7;
    gotoxy(4, 24);
    printf ( "Press any key to continue");
    getch();
    clrscr();
    box_for_display(t_accno);
   }
  }
 }
 fclose(file);
 gotoxy(1, row);
 for (j = 1; j <= 79; j++)
  printf ( "=");
 row++;
 gotoxy(4, row);
 printf ( "Total-->:");
 gotoxy(30, row);
 printf ( "%-10.2f", damt);
 gotoxy(42, row);
 printf ( "%-10.2f", wamt);
 gotoxy(66, row);
 printf ( "%-10.2f", tamt);
 if (!flag)
 {
  gotoxy(4, 24);
  printf ( "Press any key to continue...");
  getch();
 }
}
/* Function to list monthWise transaction report. */
void month_report(void)
{
 int dd1, mm1, yy1;
 char t_acc[10];
 int j;
 float tamt = 0, damt = 0, wamt = 0;
 int t = 0, t_accno = 0;
 int row = 9, flag;
 FILE *file;
 float pre_balance = 0.0; // Previous balance amount
 file = fopen("BANKING.dat", "r");
 clrscr();
 gotoxy(10, 5);
 printf ( "Enter any date of a month ");
 gotoxy(38, 5);
 scanf ("%d", &dd1);
 gotoxy(40, 5);
 printf ( "-");
 gotoxy(41, 5);
 scanf ("%d", &mm1);
 gotoxy(43, 5);
 printf ( "-");
 gotoxy(44, 5);
 scanf ("%d", &yy1);
 clrscr();
 gotoxy(71, 1);
 printf ( "<0>=Exit");
 gotoxy(5, 5);
 fflush(stdin); // To flush out the previous memory
 printf ( "Enter account no. ");
 gets(t_acc);
 t = atoi(t_acc);
 t_accno = t;
 if (t_accno == 0)
  return;   // If acc_no is 0 then back to main menu
 clrscr();
 if (!found_account_ini(t_accno))
 {
  gotoxy(5, 5);
  printf ( "\7Account not found");
  getch();
  return;
 }
 box_for_display(t_accno);
 gotoxy(4, 5);
 printf ( "Statement Month: ");
 printf("%d", dd1);
 printf ( "/");
 printf ("%d", mm1);
 printf( "/" );
 printf ("%d", yy1);
 // The loop finds the last months balance
 while (fread(&acc, sizeof(acc), 1, file) == 1)
 {
  // Checks the account no. and till the previous month and till current year
  if ((acc.accno == t_accno) && ((acc.mm < mm1 && acc.yy <= yy1) || (mm1 < acc.mm && acc.yy < yy1)))
  {
   pre_balance = acc.balance;
  }
 }
 fclose(file);
 file = fopen("BANKING.dat", "r");
 gotoxy(58, row);
 printf ( "B/F ....    " );
 printf ( "%-10.2f", pre_balance);
 row++;
 // The loop displays the current months transaction after previous month
 while (fread(&acc, sizeof(acc), 1, file) == 1)
 {
  if ((acc.accno == t_accno) && (mm1 == acc.mm && yy1 <= acc.yy))
  {
   flag = 0;
   delay(2);
   gotoxy(4, row);
   printf ( "%d", acc.dd);
   printf ( "-" );
   printf("%d", acc.mm);
   printf ( "-" );
   printf( "%d", acc.yy);
   gotoxy(16, row);
   puts(acc.type);
   if (acc.tran == 'D')
   {
    damt = damt + acc.amount;
    tamt = tamt + acc.amount;
    gotoxy(30, row);
   }
   else
   {
    wamt = wamt + acc.amount;
    tamt = tamt - acc.amount;
    gotoxy(42, row);
   }
   printf (  "%-10.2f", acc.amount);
   gotoxy(66, row);
   printf ( "%-10.2f", acc.balance);
   row++;
   // If row increases 23 then the next screen continues
   if (row > 23)
   {
    flag = 1;
    row = 7;
    gotoxy(4, 24);
    printf ( "Press any key to continue");
    getch();
    clrscr();
    box_for_display(t_accno);
   }
  }
 }
 fclose(file);
 gotoxy(1, row);
 for (j = 1; j <= 79; j++)
  printf ( "=");
 row++;
 gotoxy(4, row);
 printf ( "Total-->:");
 gotoxy(30, row);
 // Deposited amount
 printf ( "%-10.2f", damt);
 gotoxy(42, row);
 // Withdraw amount
 printf ( "%-10.2f", wamt);
 gotoxy(66, row);
 tamt = tamt + pre_balance;
 // Balance amount
 printf ( "%-10.2f", tamt);
 if (!flag)
 {
  gotoxy(4, 24);
  printf ( "Press any key to continue...");
  getch();
 }
 getch();
}
/* Function for creating new account for new customer. */
void new_account(void)
{
 char ch;
 int i, valid;
 int t_accno;
 int d1, m1, y1;
 struct date d;
 char t_name[30], t[10], t_address[30];
 float t_bal = 0.0, t_balance = 0.0;
 float t_amount, t_interest;
 char t_tran, t_type[10];
 clrscr();
 box(2, 1, 79, 25, 218);
 box(25, 2, 54, 4, 219);
 gotoxy(65, 2);
 printf ( "<0>=Exit");
 gotoxy(3,3);
 for (i = 1; i <= 74; i++)
  cprintf(" ");
 textbackground(BLACK);
 textcolor(BLACK+BLINK);
 textbackground(WHITE);
 gotoxy(30, 3);
 cprintf("Open New Account");
 textcolor(LIGHTGRAY);
 textbackground(BLACK);
 getdate(&d);
 d1 = d.da_day;
 m1 = d.da_mon;
 y1 = d.da_year;
 t_accno = last_accno_ini();
 t_accno++;
 // Appends and deletes a false record to create primary position in data files
 if (t_accno == 1)
 {
  add_to_file_ini(t_accno, "abc", "xyz", 1.1);
  delete_account(t_accno);
  printf ( "Prese xxxxxxx");
  getch();
  add_to_file(t_accno, 1, 1, 1997, 'D', "INITIAL", 1.1, 1.1, 1.1);
  delete_account(t_accno);
 }
 gotoxy(5, 6);
 printf ( "Date: " );
 printf("%d", d1);
 printf ( "/" );
 printf ("%d", m1 );
 printf ( "/");
 printf ("%d", y1);
 gotoxy(5, 8);
 printf ( "Account No # " );
 printf ("%d", t_accno);
 gotoxy(5, 10);
 printf ( "Name : ");
 gotoxy(5, 11);
 printf ( "Address : ");
 gotoxy(5, 12);
 printf ( "Name of verifying Person : ");
 gotoxy(5, 14);
 printf ( "Initial Deposit : ");
 do
 {
  clear(15, 10);
  clear(5, 23);
  gotoxy(5, 23);
  printf ( "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);
  printf ( "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);
  printf ( "Enter name of the varifying 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);
  printf ( "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);
  printf ( "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;
 t_amount = t_balance;
 t_interest = 0.0;
 t_tran = 'D';
 strcpy(t_type, "INITIAL");
 // Appends the records contents into both INITIAL.dat and BANKING.dat data files
 add_to_file_ini(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 give_balance_ini(int t_accno)
{
 FILE *file;
 float t_balance;
 file = fopen("INITIAL.dat", "r");
 // Gives the last balance of an individual account
 while (fread(&ini, sizeof(ini), 1, file)==1)
 {
  if (ini.accno == t_accno)
  {
   t_balance = ini.balance;
   break;
  }
 }
 fclose(file);
 return t_balance;
}
/* Function for returning the record no. for updating balance */
int recordno_ini(int t_accno)
{
 FILE *file;
 int count = 0;
 file = fopen("INITIAL.dat", "r");
 rewind(file);
 // Finds the record position in INITIAL.dat data file
 while (fread(&ini, sizeof(ini), 1, file) == 1)
 {
  count++;
  if (t_accno == ini.accno)
   break;
 }
 fclose(file);
 return count;
}
/* Function for updating the balance for the given account no. */
void update_balance_ini(int t_accno, char t_name[30], char t_address[30], float t_balance)
{
 int recno;
 int location;
 FILE *file;
 file = fopen("INITIAL.dat", "r+");
 recno = recordno_ini(t_accno);
 rewind(file);
 strcpy(ini.name, t_name);
 strcpy(ini.address, t_address);
 ini.balance = t_balance;
 location = (recno-1) * sizeof(ini); // Find the location in file*/
 fseek(file, location,SEEK_CUR); // Searches the insertion position in data file
 // Updates the balance amount in INITIAL.dat data file*/
 fwrite(&ini, sizeof(ini), 1, file);
 fclose(file);
}
/* Function to return no. days between two dates. */
int 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 calculate_interest(int t_accno, float t_balance)
{
 FILE *file;
 int d1, m1, y1, days;
 int d2, m2, y2;
 float t_interest = 0.0;
 int months = 0;
 struct date d;
 file = fopen("BANKING.dat", "r");
 rewind(file);
 while (fread(&acc, sizeof(acc), 1, file) == 1)
 {
  if (acc.accno == t_accno)
  {
   d1 =acc.dd;
   m1 = acc.mm;
   y1 = acc.yy;
   break;
  }
 }
 getdate(&d);
 d2 = d.da_day;
 m2 = d.da_mon;
 y2 = d.da_year;
 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);
 if (days > 30)
 {
  months = days / 30;
  t_interest = ((t_balance * 2) / 100 * months);
 }
 fclose(file);
 return t_interest;
}
/* Function for making daily transaction (Deposit 'D'/Withdraw 'W'. */
void transaction(void)
{
 char t_acc[10];
 char t_name[30];
 char t_address[30];
 float t_balance;
 int t, t_accno, valid;
 int i;
 char ch;
 float t_interest;
 char t_tran, t_type[10], tm[10];
 float t_amount, t_amt;
 int d1, m1, y1;
 struct date d;
 clrscr();
 gotoxy(71, 1);
 printf ( "<0>=Exit");
 gotoxy(5, 5);
 printf ( "Enter the account no. ");
 gets(t_acc);
 t = atoi(t_acc);
 t_accno = t;
 if (t_accno == 0)
  return;
 clrscr();
 if (!found_account_ini(t_accno))
 {
  gotoxy(5, 5);
  printf ( "\7Account not found");
  getch();
  return;
 }
 gotoxy(71, 1);
 printf ( "<0>=Exit");
 gotoxy(3, 3);
 for (i = 1; i <= 76; i++)
  cprintf(" ");
 textbackground(BLACK);
 textcolor(BLACK+BLINK);
 textbackground(WHITE);
 gotoxy(29, 3);
 cprintf ("Transaction in Account");
 textcolor(LIGHTGRAY);
 textbackground(BLACK);
 getdate(&d);
 d1 = d.da_day;
 m1 = d.da_mon;
 y1 = d.da_year;
 gotoxy(5, 6);
 printf ( "Date: " );
 printf ("%d", d1 );
 printf ( "/" );
 printf ("%d", m1);
 printf ( "/" );
 printf ("%d", y1);
 gotoxy(5, 8);
 printf ( "Accnount no. " );
 printf ("%d", t_accno);
 strcpy(t_name, return_name_ini(t_accno));
 strcpy(t_address, return_address_ini(t_accno));
 t_balance = give_balance_ini(t_accno);
 gotoxy(27, 11);
 printf ( "Name : " );
 printf ( "%s", t_name);
 gotoxy(27, 12);
 printf ( "Address : " );
 printf ("%s", t_address);
 gotoxy(5, 15);
 printf ( "Last balance Rs. " );
 printf ("%-10.2f", t_balance);
 do
 {
  clear(5, 10);
  valid = 1;
  gotoxy(5, 10);
  printf ( "Deposit or Withdraw (D/W) : ");
  t_tran = getch();
  if (t_tran == '0')
   return;
  t_tran = toupper(t_tran);
 }while (t_tran != 'D' && t_tran != 'W');
 do
 {
  clear(5, 19);
  clear(5, 23);
  gotoxy(5, 23);
  printf ( "Enter Transaction by Cash or Cheque ");
  valid = 1;
  gotoxy(5, 19);
  printf ( "Cash/Cheque : ");
  gets(t_type);
  strupr(t_type);
  if (t_type[0] == '0')
   return;
  if (strcmp(t_type, "CASH") && strcmp(t_type, "CHEQUE"))
  {
   valid = 0;
   gotoxy(5, 23);
   cprintf("\7Enter correctly");
   getch();
  }
 }while (!valid);
 do
 {
  clear(5, 21);
  clear(5, 23);
  gotoxy(5, 23);
  printf ( "Enter Amount for Transaction ");
  valid = 1;
  gotoxy(5, 21);
  printf ( "Amount Rs. ");
  gets(tm);
  t_amt = atof(tm);
  t_amount = t_amt;
  if (tm[0] == '0')
   return;
  if ((t_tran == 'W' && t_amount > t_balance) || (t_amount < 1))
  {
   valid = 0;
   gotoxy(5, 23);
   cprintf("\7Invalid Data entered");
   getch();
  }
 }while (!valid);
 clear(5, 23);
 do
 {
  clear(20, 23);
  valid = 1;
  gotoxy(40, 20);
  printf ( "Save Transaction <Y/N> : ");
  ch = getche();
  if (ch == '0')
   return;
  ch = toupper(ch);
 }while (ch != 'N' && ch != 'Y');
 if (ch == 'N')
  return;

 t_interest = calculate_interest(t_accno, t_balance);
 printf( "Interest");
 printf(" %f", t_interest);
 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.
 update_balance_ini(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 close_account(void)
{
 char t_acc[10];
 int t, t_accno,i;
 int d1, m1, y1;
 char ch;
 struct date d;
 clrscr();
 gotoxy(71, 1);
 printf ( "<0>=Exit");
 gotoxy(5, 5);
 printf ( "Enter the account no. ");
 gets(t_acc);
 t = atoi(t_acc);
 t_accno = t;
 if (t_accno == 0)
  return;
 clrscr();
 if (!found_account_ini(t_accno))
 {
  gotoxy(5, 5);
  printf ( "\7Account not found ");
  getch();
  return;
 }
 gotoxy(71, 1);
 printf ( "<0>=Exit");
 gotoxy(3, 3);
 textbackground(WHITE);
 for (i = 1; i <= 76; i++)
  cprintf(" ");
 textbackground(BLACK);
 textcolor(BLACK+BLINK);
 textbackground(WHITE);
 gotoxy(30, 3);
 cprintf("Close account screen");
 textcolor(LIGHTGRAY);
 textbackground(BLACK);
 getdate(&d);
 d1 = d.da_day;
 m1 = d.da_mon;
 y1 = d.da_year;
 gotoxy(5, 6);
 printf ( "Date: " );
 printf ("%d", d1 );
 printf ( "/" );
 printf ("%d", m1 );
 printf ( "/" );
 printf ("%d", y1);
 display_in(t_accno);
 do
 {
  clear(5, 15);
  gotoxy(5, 15);
  printf ( "Close this account <y/n?? ");
  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.
 delete_ini(t_accno);
 delete_account(t_accno);
 gotoxy(5, 20);
 printf ( "\7Account Deleted");
 gotoxy(5, 23);
 printf ( "Press any key to continue...");
 getch();
}
// Main program logic which control the members and member functions.
void main(void)
{
 /* Requesting autodetect of the graphics drivers */
 int gdriver = DETECT, gmode, errorcode;
 /* Set your graphics mode where the graphic files are present */
 initgraph(&gdriver, &gmode, "d:\turboc3");
 help();
 closegraph();
 control_menu();
}

No comments:

Post a Comment