PROGRAM 14
// FILE NAME: PROG14.CPP PROGRAMMMER NAME: ANTHONY F. ORTIZ
// THIS PROGRAM DISPLAYS AN ACCOUNT USER'S BALANCE AFTER AND BEFORE ONE
// DEPOSIT AND ONE WITHDRAWAL.
#include
#include
#include "ouracct.h"
int main ()
{
clrscr ();
bankaccount justin ("SHMEAL", "0907", 500.00);
cout << "BEFORE TRANSACTIONS, BALANCE IS " << justin.balance () << endl;
justin.deposit (50.00);
justin.withdraw (20.00);
cout << endl << "AFTER TRANSACTIONS, BALANCE IS " << justin.balance () << endl;
return 0;
}
// I DIDN'T WRITE OURACCT.H, OURACCT.CPP, OURSTUFF.H, AND OURSTUFF.CPP.
// FILENAME: OURACCT.H
// THIS PROGRAM DECLARES A CLASS NAMED BANKACCOUNT.
#ifndef ouracct_h
#define ouracct_h
#include
#include "ourstr.h"
class bankaccount
{
public:
bankaccount :: bankaccount ();
// POST: OBJECT IS INITIALIZED WITH DEFAULTS WHEN CONSTRUCTED AS
// BANKACCOUNT ACCT1, ACCT2.
// THE STATE OF THESE OBJECTS (ACCT1 AND ACCT2) IS SET TO
// A DEFAULT STATE OF { BANKACCOUNT: ?NAME?, ?PIN?, 0.00 }.
bankaccount :: bankaccount (const bankaccount & source);
// POST: OBJECT IS COPIED DURING ARGUMENT/PARAMETER ASSOCIATIONS
// AND DURING A FUNCTION RETURN. OBJECT IS ALSO INITIALIZED AS
// BANKACCOUNT ANOTHERACCT(ANACCT).
bankaccount :: bankaccount (string initname, string initpin);
// POST: OBJECT IS INITIALIZED USING 2 ARGUMENTS WHEN CONSTRUCTED AS
// BANKACCOUNT ANOTHERACCT("JONES", "4321"), DEFAULT BALANCE = 0.
bankaccount :: bankaccount (string initname, string initpin, double initbalance);
// POST: OBJECT IS INITIALIZED USING 3 ARGUMENTS WHEN CONSTRUCTED AS
// BANKACCOUNT ANOTHERACCT("JONES", "4321").
void bankaccount :: deposit (double amount);
// POST: AMOUNT IS ADDED TO CURRENT BALANCE OF THE OBJECT.
void bankaccount :: withdraw (double amount);
// POST: AMOUNT IS DEDUCTED FROM THE CURRENT BALANCE OF THE OBJECT.
double bankaccount :: balance () const;
// POST: THE CURRENT BALANCE IS RETURNED.
string bankaccount :: name () const;
// POST: THE NAME ATTRIBUTE IS RETURNED.
string bankaccount :: pin () const;
// POST: THE PIN ATTRIBUTE IS RETURNED.
private:
double accountbalance;
string accountname;
string accountpin;
};
ostream & operator << (ostream & os, bankaccount acct);
// POST: A BANKACCOUNT OBJECT IS DISPLAYED LIKE THIS:
// { BANKACCOUNT, HALL, 1234, 100.00 }.
istream & operator >> (istream & is, bankaccount acct);
// PRE: THE NEXT THREE ITEMS ON THE INPUT STREAM ARE
// STRING, STRING, NUMERIC LIKE THIS:
// HALL N234 100.00.
int operator == (bankaccount left, bankaccount right);
// POST: 1 IS RETURNED IF THE TWO BANKACCOUNT OBJECTS HAVE THE SAME
// EXACT NAME AND PIN VALUES (THE BALANCES MAY BE DIFFERENT).
// 0 IS RETURNED IF EITHER THE NAME OR PIN DIFFER.
#include "ouracct.cpp"
#endif
// FILENAME: OURACCT.CPP
// THIS PROGRAM CONTAINS THE IMPLEMENTATION OF CLASS BANKACCOUNT.
#include "ourstr.h"
#include "ourstuff.h"
bankaccount :: bankaccount ()
{
accountname = "?name?";
accountpin = "?PIN?";
accountbalance = 0.00;
}
bankaccount :: bankaccount (const bankaccount &source)
{
accountbalance = source.accountbalance;
accountpin = source.accountpin;
accountname = source.accountname;
}
bankaccount :: bankaccount (string initname, string initpin)
{
accountname = initname;
accountname.toUpper ();
accountpin = initpin;
accountbalance = 0.00;
}
bankaccount :: bankaccount (string initname, string initpin, double initbalance)
{
accountname = initname;
accountname.toUpper ();
accountpin = initpin;
accountbalance = initbalance;
}
void bankaccount :: deposit (double amount)
{
accountbalance = accountbalance + amount;
}
void bankaccount :: withdraw (double amount)
{
accountbalance = accountbalance - amount;
}
string bankaccount :: name () const
{
return accountname;
}
string bankaccount :: pin () const
{
return accountpin;
}
double bankaccount :: balance () const
{
return accountbalance;
}
ostream & operator << (ostream & os, bankaccount acct)
{
long oldflags = decimals (os, 2);
os << "{ bankaccount: "
<< acct.name () << ", "
<< acct.pin () << ", "
<< acct.balance ()
<< " }";
os.flags (oldflags);
return os;
}
istream & operator >> (istream & is, bankaccount & acct)
{
string localname;
string localpin;
double localbalance;
is >> localname >> localpin >> localbalance;
is.ignore (72, '\n');
acct = bankaccount (localname, localpin, localbalance);
return is;
}
int operator == (bankaccount left, bankaccount right)
{
if (left.name () == right.name ())
{
if (left.pin () == right.pin ())
return 1;
else
return 0;
}
else
return 0;
}
// FILENAME: OURSTUFF.H
// THIS FILE CONTAINS AN ASSORTMENT OF FUNCTIONS FOR USE WITH THE
// TEXTBOOK 'COMPUTING FUNDAMENTALS WITH C++'.
#ifndef ourstuff_h
#define ourstuff_h
#include
void clearscreen ();
// POST: THE COMPUTER SCREEN IS CLEARED.
void causeapause ();
// POST: THE FUNCTION STOPS ONLY AFTER THE USER PRESSES ENTER.
// ANY PREVIOUS CHARACTERS ARE IGNORED.
double round (double x);
// POST: RETURNS X ROUNDED TO THE NEARES INTEGER.
double round (double x, int n);
// PRE: N >= 0.
// POST: RETURNS X ROUNDED TO N DECIMALS IF N > 0.
// IF N IS 0, THE INTEGER NEAREST X IS RETURNED.
long decimals (ostream & os, int n);
// POST: ALL SUBSEQUENT OUTPUT OF FLOATS AND DOUBLES TO THE
// OUTPUT STREAM (OS) IS DISPLAYED WITH EXACTLY N DECIMALS
// USING TRAILING ZEROS IF NECESSARY.
void flush (istream & is);
// POST: THE INPUT STREAM OBJECT (IS IS USUALLY ASSOCIATED WITH CIN) SET BACK
// TO A 'GOOD' STATE. ALL EXTRANEOUS CHARACTERS ARE EXTRACTED FROM IS.
#include "ourstuff.cpp"
#endif
// FILENAME: OURSTUFF.CPP
// THIS PROGRAM CONTAINS THE IMPLEMENTATION OF THE ASSORTMENT OF FUNCTIONS
// IN OURSTUFF.H.
#include
#include
#include
#include
void clearscreen ()
{
clrscr ();
}
void causeapause ()
{
cout << "\n. . . PRESS ENTER TO CONTINUE . . . ";
cout.flush ();
getchar ();
}
double round (double x)
{
return ceil (x - 0.5);
}
double round (double x, int n)
{
if (n < 0)
return x;
else
{
double factor = pow (10.0, n);
return ceil (x * factor - 0.5) / factor;
}
}
static long defaultflags = cout.flags ();
static int defaultprecision = cout.precision ();
static long int default_x_flags = cout.setf (0);
long decimals (ostream & cout, int n)
{
long oldflags = cout.flags ();
if (n == 0)
{
cout.flags (defaultflags);
cout.precision (defaultprecision);
cout.setf (default_x_flags);
}
else if (n > 0)
{
cout.setf (ios :: fixed, ios :: floatfield);
cout.setf (ios :: showpoint);
cout.precision (n);
}
return oldflags;
}
void flush (istream & is)
{
is.clear ();
char nextchar;
while ((nextchar = is.get ()) != '\n' && nextchar != EOF) {}
is.clear ();
}
// FILENAME: OURSTR.H, OURSTR.CPP
// SEE PROGRAM 12.
// OUTFILE: PROG14.OUT
BEFORE TRANSACTIONS, BALANCE IS 500
AFTER TRANSACTIONS, BALANCE IS 530
BACK TO COMP251 PAGE.