This lab requires you to create a multifile C++ project in order to design and i
ID: 3536426 • Letter: T
Question
This lab requires you to create a multifile C++ project in
order to design and implement an object-oriented program using a classes to
model a bank and accounts.
Deliverables
lab to the Dropbox for Week 2. Your source code should use proper
indentation and be error free. Be sure that your last name and
the lab number are included as comments at the top of each file.
Each program should include a comment section that includes (at a
minimum) your name, the lab and exercise number, and a description
of what the program accomplishes.
Your lab grade will be based upon
specifications are met
i L A B S T E
P S
STEP 1: Create a
Multifile Project
Objective: Create a C++ console application that will model a bank
account and a bank.
project h files containing the Account and Bank class definitions.
the implementations of the two class's member functions.
main() function, which will instantiate a bank object and test its member
functions.
STEP 2: Required Class
Members
Your classes will implement the following UML class diagram.
http://vizedhtmlcontent.next.ecollege.com/CurrentCourse/Images/bank_account_uml.jpg
PLEASE LOOK AT THE IMAGE!!!! IT'S IMPORTANT.. IT CAN EITHER CLICK THE IMAGE OR COPY PASTE IT!!!!
Additional notes.
allowed and will incur a $30 penalty. Yes that will result in a
negative balance.
amount, print an error message and ignore the request.
e.g. deposit, withdraw, and transfer, the char is either 'S' or 'C',
denoting the savings or checking account respectively. If any other
character is passed in, your code should simply print an error message,
and ignore the requested operation.
account the money is being taken from. Additionally, if there is
insufficient funds in that account, then you are to print an error message
and not perform the transfer.
STEP 3: Program
Operations
main() should work as follows:
creating Account objects in main!
withdraw funds, transfer funds, or quit.
user for the necessary information.
of both accounts.
NOTE:
Apart from handling a invalid operation (Step 4 above), your code in main
should not have any error checking. The driver in main is there to allow
interactive testing of your Bank (and therefore Account) classes.
Explanation / Answer
//===========================================================
// PROJECT ON AUTOMATION OF A BANK
//===========================================================
#include<iostream.h>
#include<fstream.h>
#include<process.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<dos.h>
//===========================================================
// THIS CLASS CONTAINS FUNCTIONS RELATED TO DRAW BOX ETC.
//===========================================================
class shape
{
public :
void line_hor(int, int, int, char);
void line_ver(int, int, int, char);
void box(int,int,int,int,char);
};
//===========================================================
// THIS CLASS CONTROL ALL THE FUNCTIONS IN THE MENU
//===========================================================
class control
{
public :
void main_menu(void);
void help(void);
private:
void edit_menu(void);
};
//===========================================================
// THIS CLASS CONTAINS FUNCTIONS RELATED TO INITIAL DEPOSIT
//===========================================================
class initial
{
public :
void add_to_file(int,char t_name[30],char t_address[60],float);
void display_list(void);
void delete_account(int);
void update_balance(int,float);
void modify(void);
int last_accno(void);
int found_account(int);
char *return_name(int);
char *return_address(int);
float give_balance(int);
int recordno(int);
void display(int);
private:
void modify_account(int,char t_name[30],char t_address[60]);
void box_for_list(void);
int accno;
char name[30],address[60];
float balance;
};
//===========================================================
// THIS CLASS CONTAINS FUNCTIONS RELATED TO TRANSACTIONS
//===========================================================
class account
{
public :
void new_account(void);
void close_account(void);
void display_account(void);
void transaction(void);
void clear(int,int);
private :
void add_to_file(int,int,int,int,char,char t_type[10],float,float,float);
void delete_account(int);
int no_of_days(int,int,int,int,int,int);
float calculate_interest(int,float);
void display(int);
void box_for_display(int);
int accno;
char type[10]; //Cheque or Cash
int dd,mm,yy; //Date
char tran ; // Deposit or withdrawl
float interest,amount,balance;
};
//===========================================================
// FUNCTION TO DRAW HORIZONTAL LINE
//===========================================================
void shape::line_hor(int column1,int column2,int row,char c)
{
for(column1;column1<=column2;column1++)
{
gotoxy(column1,row);
cout<<c;
}
}
//===========================================================
// FUNCTION TO DRAW VERTICAL LINE
//===========================================================
void shape::line_ver(int row1,int row2,int column,char c)
{
for(row1;row1<=row2;row1++)
{
gotoxy(column,row1);
cout<<c;
}
}
//============================================================
// FUNCTION TO DRAW BOX LINE
//============================================================
void shape::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=192;
c4=217;
l1=196;
l2=179;
}
else
{
c1=c;
c2=c;
c3=c;
c4=c;
l1=c;
l2=c;
}
gotoxy(column1,row1);
cout<<c1;
gotoxy(column2,row1);
cout<<c2;
gotoxy(column1,row2);
cout<<c3;
gotoxy(column2,row2);
cout<<c4;
column1++;
column2--;
line_hor(column1,column2,row1,l1);
line_hor(column1,column2,row2,l1);
column1--;
column2++;
row1++;
row2--;
line_ver(row1,row2,column1,l2);
line_ver(row1,row2,column2,l2);
}
//============================================================
// FUNCTION TO DISPLAY MAIN MENU AND CALL OTHER FUNCTIONS
//============================================================
void control::main_menu(void)
{
char ch;
while (1)
{
clrscr();
shape s;
s.box(10,5,71,21,219);
s.box(9,4,72,22,218);
textcolor(LIGHTBLUE+BLINK);
textbackground(BLACK);
gotoxy(32,7);
cprintf(" B A N K I N G ");
gotoxy(35,9);
cprintf(" OPTIONS ");
textcolor(LIGHTBLUE);
textbackground(BLACK);
gotoxy(30,11);
cout<<"1: SEE ACCOUNT ";
gotoxy(30,12);
cout<<"2: LIST OF ACCOUNTS ";
gotoxy(30,13);
cout<<"3: TRANSACTIONS ";
gotoxy(30,14);
cout<<"4: OPEN NEW ACCOUNT ";
gotoxy(30,15);
cout<<"5: EDIT ACCOUNTS ";
gotoxy(30,16);
cout<<"6: HELP ";
gotoxy(30,17);
cout<<"0: QUIT ";
gotoxy(30,19);
cout<<" ENTER YOUR CHOICE:";
ch=getche();
if(ch==27)
break;
else
if(ch=='1')
{
account a;
a.display_account();
}
else
if(ch=='2')
{
initial ini;
ini.display_list();
}
else
if(ch=='3')
{
account a ;
a.transaction();
}
else
if(ch=='4')
{
account a;
a.new_account();
}
else
if(ch=='5')
edit_menu();
else
if(ch=='6')
help();
else
if(ch=='0')
break;
}
for(int i=25;i>=1;i--)
{
delay(20);
gotoxy(1,i); clreol();
}
}
//=============================================================
// FUNCTION TO DISPLAY EDIT MENU AND CALL OTHER FUNCTION
//=============================================================
void control::edit_menu(void)
{
char ch;
while (1)
{
clrscr();
shape s;
s.box(10,5,71,21,219);
s.box(9,4,72,22,218);
textcolor(LIGHTBLUE);
textbackground(BLACK);
gotoxy(34,10);
cprintf(" EDIT MENU");
textcolor(LIGHTBLUE);
textbackground(BLACK);
gotoxy(31,12);
cout<<"1: MODIFY ACCOUNT :";
gotoxy(31,13);
cout<<"2: CLOSE ACCOUNT ";
gotoxy(31,14);
cout<<"0: QUIT ";
gotoxy(31,16);
cout<<"ENTER YOUR CHOICE: ";
ch=getche();
if(ch==27)
break;
else
if(ch=='1')
{
initial ini;
ini.modify();
break;
}
else
if(ch=='2')
{
account a;
a.close_account();
break;
}
else
if(ch=='0')
break;
}
}
//=============================================================
// FUNCTION TO DISPLAY HELP ABOUT PROJECT
//=============================================================
void control::help(void)
{
clrscr();
shape s;
s.box(2,1,79,25,218);
s.box(25,2,54,4,219);
textcolor(LIGHTBLUE+BLINK);
gotoxy(27,3);
cprintf("WELCOME TO THE PROJECT BANKING ");
textcolor(LIGHTBLUE);
delay(10);
gotoxy(10,6);
cout<<"IN THIS PROJECT YOU CAN KEEP RECORD OF DAILY BANKING ";
delay(10);
gotoxy(10,7);
cout<<" TRANSACTIONS. ";
delay(10);
gotoxy(10,9);
cout<<" THIS PROGRAMME IS CAPABLE OF HOLDING ANY NO. OF ACCOUNTS ";
delay(10);
gotoxy(10,11);
cout<<" # IN FIRST OPTION YOU CAN SEE ACCOUNT OF A PARTICULAR ";
delay(10);
gotoxy(10,12);
cout<<" PERSON BY GIVING SIMPLY ACCOUNT NO. OF THAT PERSON";
delay(10);
gotoxy(10,14);
cout<<"# IN SECOND OPTION YOUN CAN SEE THE LIST OF ALL ACCOUNTS. ";
delay(10);
gotoxy(10,16);
cout<<"# THROUGH THIRD OPTION YOU CAN DO BANKING TRANSACTIONS ";
delay(10);
gotoxy(10,17);
cout<<" ( DEPOSIT / WITHDRAW )";
delay(10);
gotoxy(10,19);
cout<<"# IN FOURTH OPTION YOU CAN OPEN NEW ACCOUNT. ";
delay(10);
gotoxy(10,20);
cout<<" NOTE: OPENING AMOUNT SHOULD NOT LESS THAN Rs.500/-. ";
delay(10);
gotoxy(10,22);
cout<<"# IN THE FIFTH OPTION YOU CAN MODIFY OR DELETE ANY ACCOUNT. ";
delay(10);
gotoxy(10,24);
cout<<"# AND LAST OPTION IS QUIT (EXIT TO DOS).";
delay(10);
textcolor(LIGHTBLUE+BLINK); textbackground(BLACK);
gotoxy(26,25);
cprintf(" PRESS ANY KEY TO CONTINUE ");
textcolor(LIGHTBLUE);textbackground(BLACK);
gotoxy(25,2);
getch();
for(int i=25;i>=1;i--)
{
delay(20);
gotoxy(1,i);clreol();
}
}
//========================================================
//THIS FUNCTION RETURN LAST ACCOUNT NO. IN THE FILE
//INITIAL.DAT
//========================================================
int initial::last_accno(void)
{
fstream file;
file.open("INITIAL.DAT", ios::in);
file.seekg(0,ios::beg);
int count=0;
while(file.read((char*)this, sizeof(initial)))
count=accno;
file.close();
return count;
}
//==========================================================
//THIS FUNCTION RETURN RECORD NO. OF THE GIVEN ACCOUNT NO.
//IN THE FILE INITIAL.DAT
//==========================================================
int initial::recordno(int t_accno)
{
fstream file;
file.open("INITIAL.DAT",ios::in);
file.seekg(0,ios::beg);
int count=0;
while (file.read((char*)this, sizeof(initial)))
{
count++;
if(t_accno==accno)
break;
}
file.close();
return count;
}
//===========================================================
//THIS FUNTION DISPLAY THE ACCOUNT FOR GIVEN ACCOUNT NO.
//FROM THE FILE INITIAL.DAT
//===========================================================
void initial::display(int t_accno)
{
shape s;
s.box(8,7,73,11,219);
fstream file;
file.open("INITIAL.DAT",ios::in);
file.seekg(0,ios::beg);
while(file.read((char*) this,sizeof(initial)))
{
if(t_accno==accno)
{
gotoxy(8,5);
cout<<"ACCOUNT NO. "<<accno;
gotoxy(10,8);
cout<<"NAME :"<<name;
gotoxy(10,9);
cout<<"ADDRERSS :"<<address;
gotoxy(10,10);
cout<<"BALANCE :"<<balance;
break;
}
}
file.close();
}
//=============================================================
//THIS FUNCTION RETURNS NAME FOR THE GIVEN ACCOUNT NO.
//IN THE FILE INITIAL.DAT
//=============================================================
char *initial::return_name(int t_accno)
{
fstream file;
file.open("INITIAL.DAT",ios::in);
file.seekg(0,ios::beg);
char t_name[30];
while(file.read((char *) this, sizeof(initial)))
{
if(accno==t_accno)
{
strcpy(t_name,name);
break;
}
}
file.close();
return t_name;
}
//=========================================================
//THIS FUNCTION RETURNS ADDRESS FOR THE GIVEN ACCOUNT NO.
//IN THE FILE INITIAL.DAT
//=========================================================
char *initial::return_address(int t_accno)
{
fstream file;
file.open("INITIAL.DAT",ios::in);
file.seekg(0,ios::beg);
char t_address[60];
while(file.read((char *)this, sizeof(initial)))
{
if(accno==t_accno)
{
strcpy(t_address,address);
break;
}
}
file.close();
return t_address;
}
//============================================================
//THIS FUNCTION RETURN BALANCE FOR THE GIVEN ACCOUNT NO.
//IN THE FILE INITIAL.DAT
//============================================================
float initial::give_balance(int t_accno)
{
fstream file;
file.open("INITIAL.DAT",ios::in);
file.seekg(0,ios::beg);
float t_balance;
while(file.read((char *)this, sizeof(initial)))
{
if(accno==t_accno)
{
t_balance=balance;
break;
}
}
file.close();
return t_balance;
}
//==========================================================
//THIS FUNCTION RETURN 1 IF THE GIVEN ACCOUNT NO. FOUND
//IN THE FILE INITIAL.DAT
//==========================================================
int initial::found_account(int t_accno)
{
fstream file;
file.open("INITIAL.DAT",ios::in);
file.seekg(0,ios::beg);
int found=0;
while(file.read((char *)this, sizeof(initial)))
{
if (accno==t_accno)
{
found=1;
break;
}
}
file.close();
return found;
}
//===========================================================
// THIS FUNCTION DRAWS THE BOX FOR THE LIST OF ACCOUNTS
//===========================================================
void initial::box_for_list()
{
shape s;
s.box(2,1,79,25,218);
s.line_hor(3,78,3,196);
s.line_hor(3,78,5,196);
s.line_hor(3,78,23,196);
textbackground(BLACK);
gotoxy(3,4);
for(int i=1;i<=76;i++)
cprintf(" ");
textbackground(BLACK);
textcolor(LIGHTBLUE);
textbackground(BLACK);
gotoxy(4,4);
cprintf("ACCOUNT NO. NAME OF PERSON BALANCE");
textcolor(LIGHTBLUE);
textbackground(BLACK);
int d1,m1,y1;
struct date d;
getdate(&d);
d1=d.da_day;
m1=d.da_mon;
y1=d.da_year;
gotoxy(4,2);
cout<<"DATE: "<<d1<<"/"<<m1<<"/"<<y1;
}
//===========================================================
//THIS FUNCTION DISPLAYS THE LIST OF ACCOUNTS IN FILE
//INITIAL.DAT
//===========================================================
void initial::display_list(void)
{
clrscr();
box_for_list();
int row=6,flag;
fstream file;
file.open("INITIAL.DAT", ios::in);
while (file.read((char *)this, sizeof(initial)))
{
flag=0;
delay(10);
gotoxy(7,row);
cout<<accno;
gotoxy(25,row);
cout<<name;
gotoxy(57,row);
cout<<balance;
row++;
if(row==23)
{
flag=1;
row=6;
gotoxy(4,24);
cout<<"PRESS ANY KEY TO CONTINUE...";
getch();
clrscr();
box_for_list();
}
}
file.close();
(!flag);
{
gotoxy(4,24);
cout<<"PRESS ANY KEY TO CONTINUE...";
getch();
}
}
//================================================================
//THIS FUNCTION ADDS THE GIVEN DATA INTO THE FILE
//INITIAL.DAT
//================================================================
void initial::add_to_file(int t_accno,char t_name[30],char t_address[60], float t_balance)
{
accno=t_accno;
strcpy(name,t_name);
strcpy(address,t_address);
balance=t_balance;
fstream file;
file.open("INITIAL.DAT",ios::out | ios::app);
file.write((char *) this, sizeof(initial));
file.close();
}
//===============================================================
//THIS FUNCTION DELETES RECORD FOR THE GIVEN ACCOUNT NO.
//FROM THE FILE INITIAL.DAT
//================================================================
void initial::delete_account(int t_accno)
{
fstream file;
file.open("INITIAL.DAT",ios::in);
fstream temp;
temp.open("temp.dat",ios::out);
file.seekg(0,ios::beg);
while(!file.eof())
{
file.read((char*)this,sizeof(initial));
if(file.eof())
break;
if(accno!=t_accno)
temp.write((char*)this,sizeof(initial));
}
file.close();
temp.close();
file.open("INITIAL.DAT",ios::out);
temp.open("temp.dat", ios::in);
temp.seekg(0,ios::beg);
while(!temp.eof() )
{
temp.read((char*)this,sizeof(initial));
if(temp.eof())
break;
file.write((char*)this,sizeof(initial));
}
file.close();
temp.close();
}
//================================================================
//THIS FUNCTION UPDATE BALANCE FOR THE GIVEN ACCOUNT NO.
//IN THE FILE INITIAL.DAT
//================================================================
void initial :: update_balance(int t_accno, float t_balance)
{
int recno;
recno=recordno(t_accno);
fstream file;
file.open("INITIAL.DAT",ios::out | ios::ate);
balance=t_balance;
int location;
location=(recno-1) * sizeof(initial);
file.seekp(location);
file.write((char *)this, sizeof(initial));
file.close();
}
//===============================================================
//THIS FUNCTION MODIFYS THE RECORD FOR THE GIVEN DATA
//IN THE FILE INITIAL.DAT
//===============================================================
void initial::modify_account(int t_accno,char t_name[30],char t_address[60])
{
int recno;
recno=recordno(t_accno);
fstream file;
file.open("INITIAL.DAT", ios::out | ios::ate);
strcpy(name, t_name);
strcpy(address,t_address);
int location;
location=(recno-1) * sizeof(initial);
file.seekp(location);
file.write((char *) this, sizeof(initial));
file.close();
}
//============================================================
//THIS FUNCTION GIVE THE DATA TO MODIFY THE RECORD IN THE
//FILE INITIAL.DAT
//============================================================
void initial::modify(void)
{
clrscr();
char t_acc[10];
int t, t_accno;
gotoxy(71,1);
cout<<"<0>=EXIT";
gotoxy(5,5);
cout<<"ENTER THE ACCOUNT NO.";
gets(t_acc);
t=atoi(t_acc);
t_accno=t;
if(t_accno==0)
return;
clrscr();
if(!found_account(t_accno))
{
gotoxy(5,5);
cout<<"ACCOUNT NOT FOUND";
getch();
return;
}
shape s;
s.box(2,2,79,24,218);
s.line_hor(3,78,4,196);
s.line_hor(3,78,22,196);
gotoxy(71,1);
cout<<"<0>=EXIT";
textbackground(BLACK);
gotoxy(3,3);
for(int i=1;i<=76;i++) cprintf(" ");
textbackground(BLACK);
textcolor(LIGHTBLUE+BLINK); textbackground(BLACK);
gotoxy(30,3);
cprintf("MODIFY ACCOUNT SCREEN");
textcolor(LIGHTBLUE); textbackground(BLACK);
int d1,m1,y1;
struct date d;
getdate(&d);
d1=d.da_day;
m1=d.da_mon;
y1=d.da_year;
gotoxy(62,5);
cout<<"DATE:"<<d1<<"/"<<m1<<"/"<<y1;
char ch;
display(t_accno);
account a;
do
{
a.clear(5,13);
gotoxy(5,13);
cout<<"MODIFY THIS ACCOUNT(Y/N):";
ch=getche();
if(ch=='0')
return;
ch=toupper(ch);
}while(ch!='N' && ch!='Y');
if(ch=='N')
return;
int modified=0,valid;
char t_name[30], t_address[60];
gotoxy(5,15);
cout<<"NAME :";
gotoxy(5,16);
cout<<"ADDRESS :";
do
{
a.clear(15,15);
a.clear(5,23);
gotoxy(5,23);
cout<<"ENTER NAME OR PRESS <ENTER> FOR NO CHANGE";
valid=1;
gotoxy(15,15);
gets(t_name);
strupr(t_name);
if(t_name[0]=='0')
return;
if(strlen(t_name)>25)
{
valid=0;
gotoxy(5,23);
cprintf("NAME SHOULD NOT GREATER THAN 25");
getch();
}
}while(!valid);
if(strlen(t_name)>0)
modified=1;
do
{
a.clear(15,16);
a.clear(5,23);
gotoxy(5,23);
cout<<"ENTER ADDRESS OR PRESS <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)>55)
{
valid=0;
gotoxy(5,23);
cprintf("SHOULD NOT BLANK OR GREATER THAN 55");
getch();
}
}while(!valid);
if(strlen(t_address)>0)
modified=1;
if(!modified)
return;
a.clear(5,23);
do
{
a.clear(5,18);
gotoxy(5,18);
cout<<"DO YOU WANT TO SAVE CHANGES (Y/N):";
ch=getche();
if(ch=='0')
return;
ch=toupper(ch);
}while(ch!='N' && ch!='Y');
if(ch=='N')
return;
modify_account(t_accno,t_name,t_address);
gotoxy(5,21);
cout<<"RECORD MODIFIED";
gotoxy(5,23);
cout<<"PRESS ANY KEY TO CONTINUE...";
getch();
}
//=============================================================
// THIS FUNCTION CLEAR THE GIVEN ROW AND COLUMNS
//=============================================================
void account::clear(int col, int row)
{
for(int i=col;i<=78;i++)
{
gotoxy(i,row);
cout<<" ";
}
}
//============================================================
//THIS FUNCTION ADDS THE GIVEN DATA INTO THE FILE
//BANKING.DAT
//============================================================
void account::add_to_file(int t_accno,int d1,int m1, int y1,
char t_tran,char t_type[10],float t_interest,
float t_amount, float t_balance)
{
fstream file;
file.open("BANKING.DAT",ios::app);
accno=t_accno;
dd=d1;
mm=m1;
yy=y1;
tran=t_tran;
strcpy(type,t_type);
interest=t_interest;
amount=t_amount;
balance=t_balance;
file.write((char*)this,sizeof(account));
file.close();
}
//===============================================================
//THIS FUNCTION DELETES THE RECORD FOR GIVEN ACCOUNT NO.
//FROM FILE BANKING.DAT
//===============================================================
void account::delete_account(int t_accno)
{
fstream file;
file.open("BANKING.DAT", ios::in);
fstream temp;
temp.open("temp.dat",ios::out);
file.seekg(0,ios::beg);
while(!file.eof() )
{
file.read((char *) this,sizeof(account));
if(file.eof())
break;
if(accno!= t_accno)
temp.write((char *) this,sizeof(account));
}
file.close();
temp.close();
file.open("BANKING.DAT",ios::out);
temp.open("temp.dat",ios::in);
temp.seekg(0,ios::beg);
while(!temp.eof())
{
temp.read((char *)this,sizeof(account));
if(temp.eof())
break;
file.write((char *) this, sizeof(account));
}
file.close();
temp.close();
}
//================================================================
//THIS FUNCTION ACCEPTS THE DATA TO ADD RECORDS IN THE
//FILE BANKING.DAT
//================================================================
void account::new_account(void)
{
char ch;
int i,valid;
clrscr();
initial ini;
shape s;
s.box(2,2,79,24,218);
s.line_hor(3,78,4,196);
s.line_hor(3,78,22,196);
gotoxy(71,1);
cout<<"<0>=EXIT";
textbackground(BLACK);
gotoxy(3,3);
for(i=1;i<=76;i++)
cprintf(" ");
textbackground(BLACK);
textcolor(LIGHTBLUE+BLINK); textbackground(BLACK);
gotoxy(32,3);
cprintf("OPEN NEW ACCOUNT");
textcolor(LIGHTBLUE);
textbackground(BLACK);
int d1,m1,y1;
struct date d;
getdate(&d);
d1=d.da_day;
m1=d.da_mon;
y1=d.da_year;
int t_accno;
t_accno=ini.last_accno();
t_accno++;
if(t_accno==1)
{
ini.add_to_file(t_accno,"abc","xyz",1.1);
ini.delete_account(t_accno);
add_to_file(t_accno,1,1,1997,'D',"INITIAL",1.1,1.1,1.1);
delete_account(t_accno);
}
char t_name[30],t[10],t_address[60];
float t_bal=0.0, t_balance=0.0;
gotoxy(5,6);
cout<<"DATE:"<<d1<<"/"<<m1<<"/"<<y1;
gotoxy(5,8);
cout<<"ACCOUNT NO. # :"<<t_accno;
gotoxy(5,10);
cout<<"NAME :";
gotoxy(8,11);
cout<<"ADDRESS :";
gotoxy(8,12);
cout<<"NAME OF VARIFYING PERSON:";
gotoxy(5,14);
cout<<"INITIAL DEPOSIT";
do
{
clear(15,10);
clear(5,23);
gotoxy(5,23);
cout<<"ENTER NAME OF THE PERSON";
valid=1;
gotoxy(15,10);
gets(t_name);
strupr(t_name);
if(t_name[0]=='0')
return;
if(strlen(t_name)==0||strlen(t_name)>25)
{
valid=0;
gotoxy(5,23);
cprintf("NAME SHOULD NOT BLANK OR GREATER THAN 25");
getch();
}
}while(!valid);
do
{
clear(15,11);
clear(5,23);
gotoxy(5,23);
cout<<"ENTER ADDRESS OF THE PERSON";
valid=1;
gotoxy(23,11);
gets(t_address);
strupr(t_address);
if(t_address[0]=='0')
return;
if(strlen(t_address)==0|| strlen(t_address)>55)
{
valid =0;
gotoxy(5,23);
cprintf("SHOULD NOT BLANK OR GREATER THAN 55");
getch();
}
}while(!valid);
do
{
char vari[30];
clear(5,23);
gotoxy(5,23);
cout<<"ENTER NAME OF THE VARIFYING PERSON";
valid=1;
gotoxy(35,12);
gets(vari);
strupr(vari);
if(vari[0]=='0')
return;
if(strlen(vari)==0 || strlen(vari)>25)
{
valid=0;
gotoxy(5,23);
cprintf("SHOULD NOT BLANK OR GREATER THAN 25");
getch();
}
}while(!valid);
do
{
clear(5,23);
clear(5,23);
gotoxy(5,23);
cout<<"ENTER INITIAL AMOUNT TO BE DEPOSIT";
valid=1;
gotoxy(23,14);
gets(t);
t_bal=atof(t);
t_balance=t_bal;
if(t[0]=='0')
return;
/* if(t_balance&t;500)
{
valid=0;
gotoxy(5,23);
cprintf("SHOULD NOT LESS THAN 500 ");
getch();
}*/
}while(!valid);
clear(5,23);
do
{
clear(5,17);
valid=1;
gotoxy(7,21);
cout<<"DO YOU WANT TO SAVE THE RECORD (Y/N)";
ch=getche();
if(ch=='0')
return;
ch=toupper(ch);
}while(ch!='N' && ch!='Y');
if(ch=='N')
return;
float t_amount,t_interest;
t_amount=t_balance;
t_interest=0.0;
char t_tran,t_type[10];
t_tran='D';
strcpy(t_type,"INITIAL");
ini.add_to_file(t_accno,t_name,t_address,t_balance);
add_to_file(t_accno,d1,m1,y1,t_tran,t_type,t_interest,t_amount,t_balance);
}
//=================================================================
//THIS FUNCTION DRAWS THE BOX FOR DISPLAYING RECORD FROM
//FILE BANKING.DAT
//=================================================================
void account::box_for_display(int t_accno)
{
shape s;
s.box(2,1,79,25,218);
s.line_hor(3,78,4,196);
s.line_hor(3,78,6,196);
s.line_hor(3,78,23,196);
textbackground(BLACK);
gotoxy(3,5);
for(int i=1;i<=76;i++) cprintf(" ");
textbackground(BLACK);
textcolor(LIGHTBLUE); textbackground(BLACK);
gotoxy(4,5);
cprintf("DATE PARTICULAR DEPOSIT WITHDRAW INTEREST BALANCE");
textcolor(LIGHTBLUE); textbackground(BLACK);
int d1,m1,y1;
struct date d;
getdate(&d);
d1=d.da_day;
m1=d.da_mon;
y1=d.da_year;
gotoxy(63,2);
cout<<"DATE: "<<d1 <<"/"<<m1<<"/"<<y1;
gotoxy(4,2);
cout<<"ACCOUNT NO. "<<t_accno;
initial ini;
char t_name[30];
strcpy(t_name,ini.return_name(t_accno));
char t_address[60];
strcpy(t_address,ini.return_address(t_accno));
gotoxy(25,2);
cout<<t_name;
gotoxy(25,3);
cout<<t_address;
}
//============================================================
// THIS FUNCTION DISPLAY RECORD FROM THE FILE BANKING.DAT
//============================================================
void account::display_account(void)
{
clrscr();
char t_acc[10];
int t,t_accno;
gotoxy(71,1);
cout<<"<0>=EXIT";
gotoxy(5,5);
cout<<"ENTER THE ACCOUNT NO.";
gets(t_acc);
t=atoi(t_acc);
t_accno=t;
if(t_accno==0)
return;
clrscr();
initial ini;
if(!ini.found_account(t_accno))
{
gotoxy(5,5);
cout<<"ACCOUNT NOT FOUND";
getch();
return;
}
box_for_display(t_accno);
int row=7,flag;
fstream file;
file.open("BANKING.DAT",ios::in);
while(file.read((char*)this,sizeof(account)))
{
if(accno==t_accno)
{
flag=0;
delay(10);
gotoxy(4,row);
cout<<dd <<"/"<<mm <<"/" <<yy;
gotoxy(16,row);
cout<<type;
if(tran=='D')
gotoxy(30,row);
else
gotoxy(42,row);
cout<<amount;
gotoxy(56,row);
cout<<interest;
gotoxy(66,row);
cout<<balance;
row++;
if(row==23)
{
flag=1;
row=7;
gotoxy(4,24);
cout<<" PRESS ANY KEY TO CONTINUE.... ";
getch();
clrscr();
box_for_display(t_accno);
}
}
}
file.close();
if(!flag)
{
gotoxy(4,24);
cout<<"PRESS ANY KEY TO CONTINUE.....";
getch();
}
}
//=========================================================
// THIS FUNCTION RETURNS THE DIFFERENCE BETWEEN 2 DATES
//=========================================================
int account::no_of_days(int d1,int m1,int y1,int d2,int m2,int y2)
{
static int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
int days=0;
while(d1!=d2 || m1!=m2 || y1!=y2)
{
days++;
d1++;
if(d1>month[m1-1])
{
d1=1;
m1++;
}
if(m1>12)
{
m1=1;
y1++;
}
}
return days;
}
//=============================================================
// THIS FUNCTION CALCULATES INTEREST
//=============================================================
float account::calculate_interest(int t_accno,float t_balance)
{
fstream file;
file.open("BANKING.DAT",ios::in);
file.seekg(0,ios::beg);
int d1,m1,y1,days;
while(file.read((char *)this, sizeof(account)))
{
if(accno==t_accno)
{
d1=dd;
m1=mm;
y1=yy;
break;
}
}
int d2,m2,y2;
struct date d;
getdate(&d);
d2=d.da_day;
m2=d.da_mon;
y2=d.da_year;
float t_interest=0.0;
if((y2<y1 )||(y2==y1 && m2<m1)||(y2==y1&&m2==m1&&d2<d1))
return t_interest;
days=no_of_days(d1,m1,y1,d2,m2,y2);
int months=0;
if(days>=30)
{
months=days/30;
t_interest=((t_balance*2)/100*months);
}
file.close();
return t_interest;
}
//============================================================
// THIS FUNCTION MAKES TRANSACTIONS (DEPOSIT/WITHDRAW)
//============================================================
void account::transaction(void)
{
clrscr();
char t_acc[10];
int t,t_accno,valid;
gotoxy(71,1);
cout<<"<0>=EXIT";
gotoxy(5,5);
cout<<"ENTER THE ACCOUNT NO.";
gets(t_acc);
t=atoi(t_acc);
t_accno=t;
if(t_accno==0)
return;
clrscr();
initial ini;
if(!ini.found_account(t_accno))
{
gotoxy(5,5);
cout<<"ACCOUNT NOT FOUND";
getch();
return;
}
shape s;
s.box(2,2,79,24,218);
s.line_hor(3,78,4,196);
s.line_hor(3,78,22,196);
gotoxy(71,1);
cout<<"<0>=EXIT";
textbackground(BLACK);
gotoxy(3,3);
for(int i=1;i<=76;i++) cprintf(" ");
textbackground(BLACK);
textcolor(LIGHTBLUE+BLINK); textbackground(BLACK);
gotoxy(29,3);
cprintf("TRANSACTION IN ACCOUNT");
textcolor(LIGHTBLUE); textbackground(BLACK);
int d1,m1,y1;
struct date d;
getdate(&d);
d1=d.da_day;
m1=d.da_mon;
y1=d.da_year;
gotoxy(5,6);
cout<<"DATE: "<<d1<<"/"<<m1<<"/"<<y1;
gotoxy(5,8);
cout<<"ACCOUNT NO. #"<<t_accno;
char t_name[30];
char t_address[60];
float t_balance;
strcpy(t_name,ini.return_name(t_accno));
strcpy(t_address,ini.return_address(t_accno));
t_balance=ini.give_balance(t_accno);
s.box(25,10,75,13,218);
gotoxy(27,11);
cout<<"NAME :"<<t_name;
gotoxy(27,12);
cout<<"ADDRESS: "<<t_address;
gotoxy(5,15);
cout<<"LAST BALANCE : RS."<<t_balance;
char t_tran,t_type[10],tm[10];
float t_amount,t_amt;
do
{
clear(5,18);
valid=1;
gotoxy(5,18);
cout<<"DEPOSIT OR WITHDRAW (D/W) :";
t_tran=getche();
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);
cout<<"ENTER TRANSACTIONS BY CASH OR CHEQUE";
valid=1;
gotoxy(5,19);
cout<<"(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("ENTER CORRECTLY ");
getch();
}
}while(!valid);
do
{
clear(5,21);
clear(5,23);
gotoxy(5,23);
cout<<"ENTER AMOUNT FOR TRANSACTION";
valid=1;
gotoxy(5,21);
cout<<"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("INVALID DATA ENTERED ");
getch();
}
}while(!valid);
char ch;
clear(5,23);
do
{
clear(40,20);
valid=1;
gotoxy(40,20);
cout<<"SAVE TRANSACTION (Y/N): ";
ch=getche();
if(ch=='0')
return;
ch=toupper(ch);
}while(ch!='N' && ch!='Y');
if(ch=='N')
return;
float t_interest;
t_interest=calculate_interest(t_accno,t_balance);
if(t_tran=='D')
t_balance=t_balance+t_amount+t_interest;
else
t_balance=(t_balance-t_amount)+t_interest;
ini.update_balance(t_accno,t_balance);
add_to_file(t_accno,d1,m1,y1,t_tran,t_type,t_interest,t_amount,t_balance);
}
//============================================================
// THIS FUNCTION CLOSE THE ACCOUNT (DELETE ACCOUNT)
//============================================================
void account::close_account(void)
{
clrscr();
char t_acc[10];
int t,t_accno;
gotoxy(71,1);
cout<<"<0>=EXIT";
gotoxy(5,5);
cout<<"ENTER THE ACCOUNT NO.";
gets(t_acc);
t=atoi(t_acc);
t_accno=t;
if(t_accno==0)
return;
clrscr();
initial ini;
if(!ini.found_account(t_accno))
{
gotoxy(5,5);
cout<<"ACCOUNT NOT FOUND";
getch();
return;
}
shape s;
s.box(2,2,79,24,218);
s.line_hor(3,78,4,196);
s.line_hor(3,78,22,196);
gotoxy(71,1);
cout<<"<0>=EXIT";
textbackground(BLACK);
gotoxy(3,3);
for(int i=1;i<=76;i++) cprintf(" ");
textbackground(BLACK);
textcolor(GREEN+BLINK); textbackground(BLACK);
gotoxy(30,3);
cprintf("CLOSE ACCOUNT SCREEN");
textcolor(LIGHTBLUE); textbackground(BLACK);
int d1,m1,y1;
struct date d;
getdate(&d);
d1=d.da_day;
m1=d.da_mon;
y1=d.da_year;
gotoxy(62,5);
cout<<"DATE: "<<d1<<"/"<<m1<<"/"<<y1;
char ch;
ini.display(t_accno);
do
{
clear(5,15);
gotoxy(5,15);
cout<<"CLOSE THIS ACCOUNT(Y/N):";
ch=getche();
if(ch=='0')
return;
ch=toupper(ch);
}while(ch!='N' && ch!='Y');
if(ch=='N')
return;
ini.delete_account(t_accno);
delete_account(t_accno);
gotoxy(5,20);
cout<<"RECORD DELETED";
gotoxy(5,23);
cout<<"PRESS ANY KEY TO CONTINUE...";
getch();
}
//===============================================================
//THIS IS MAIN FUNCTION CALLING HELP AND MAIN MENU
//FUNCTIONS
//===============================================================
void main(void)
{
control c;
c.help();
c.main_menu();
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.