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();
}
// 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