123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // brass.cpp -- bank account class methods
- #include <iostream>
- #include "brass.h"
- using std::cout;
- using std::endl;
- using std::string;
- // formatting stuff
- typedef std::ios_base::fmtflags format;
- typedef std::streamsize precis;
- format setFormat();
- void restore(format f, precis p);
- // Brass methods
- Brass::Brass(const string & s, long an, double bal)
- {
- fullName = s;
- acctNum = an;
- balance = bal;
- }
- void Brass::Deposit(double amt)
- {
- if (amt < 0)
- cout << "Negative deposit not allowed; "
- << "deposit is cancelled.\n";
- else
- balance += amt;
- }
- void Brass::Withdraw(double amt)
- {
- // set up ###.## format
- format initialState = setFormat();
- precis prec = cout.precision(2);
- if (amt < 0)
- cout << "Withdrawal amount must be positive; "
- << "withdrawal canceled.\n";
- else if (amt <= balance)
- balance -= amt;
- else
- cout << "Withdrawal amount of $" << amt
- << " exceeds your balance.\n"
- << "Withdrawal canceled.\n";
- restore(initialState, prec);
- }
- double Brass::Balance() const
- {
- return balance;
- }
- void Brass::ViewAcct() const
- {
- // set up ###.## format
- format initialState = setFormat();
- precis prec = cout.precision(2);
- cout << "Client: " << fullName << endl;
- cout << "Account Number: " << acctNum << endl;
- cout << "Balance: $" << balance << endl;
- restore(initialState, prec); // Restore original format
- }
- // BrassPlus Methods
- BrassPlus::BrassPlus(const string & s, long an, double bal,
- double ml, double r) : Brass(s, an, bal)
- {
- maxLoan = ml;
- owesBank = 0.0;
- rate = r;
- }
- BrassPlus::BrassPlus(const Brass & ba, double ml, double r)
- : Brass(ba) // uses implicit copy constructor
- {
- maxLoan = ml;
- owesBank = 0.0;
- rate = r;
- }
- // redefine how ViewAcct() works
- void BrassPlus::ViewAcct() const
- {
- // set up ###.## format
- format initialState = setFormat();
- precis prec = cout.precision(2);
- Brass::ViewAcct(); // display base portion
- cout << "Maximum loan: $" << maxLoan << endl;
- cout << "Owed to bank: $" << owesBank << endl;
- cout.precision(3); // ###.### format
- cout << "Loan Rate: " << 100 * rate << "%\n";
- restore(initialState, prec);
- }
- // redefine how Withdraw() works
- void BrassPlus::Withdraw(double amt)
- {
- // set up ###.## format
- format initialState = setFormat();
- precis prec = cout.precision(2);
- double bal = Balance();
- if (amt <= bal)
- Brass::Withdraw(amt);
- else if ( amt <= bal + maxLoan - owesBank)
- {
- double advance = amt - bal;
- owesBank += advance * (1.0 + rate);
- cout << "Bank advance: $" << advance << endl;
- cout << "Finance charge: $" << advance * rate << endl;
- Deposit(advance);
- Brass::Withdraw(amt);
- }
- else
- cout << "Credit limit exceeded. Transaction cancelled.\n";
- restore(initialState, prec);
- }
- format setFormat()
- {
- // set up ###.## format
- return cout.setf(std::ios_base::fixed,
- std::ios_base::floatfield);
- }
- void restore(format f, precis p)
- {
- cout.setf(f, std::ios_base::floatfield);
- cout.precision(p);
- }
|