money001
Home ] Up ]

 

//money001.cpp
// modified 07/17/2000 11:50 AM
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int const MAX_VALUE  = 10;
int const TEST_COUNT = 20;
class CMoney
  {
  private:
    int dollars;
    int cents;
  public:
    CMoney(int dollars=0, int cents=0);
    CMoney(char ch);
    ~CMoney(void);
    void display(void) const;
    CMoney operator -();
    bool operator ==(CMoney amount);
    bool equal      (CMoney amount);
    bool operator !=(CMoney amount);
    CMoney operator + (CMoney amount) const; //20% of a project
    CMoney add        (CMoney amount) const;
    friend CMoney operator * (CMoney amount1, CMoney amount2);
    friend CMoney multiply   (CMoney amount1, CMoney amount2);
  };
CMoney CMoney::operator -()
  {
  this->dollars = -this->dollars;
  cents = -cents;
  return *this;
  }
bool CMoney::operator !=(CMoney amount)
  {
  //compare object amount with object pointed to by this
  //return (dollars != amount.dollars || cents != amount.cents);
  return !(*this == amount);
  }
void testOperatorNotEqual(void)
  {
  for (int i=0; i<TEST_COUNT; i++)
    {
    cout << "Test #" << i << endl;
    CMoney m1('r'), m2('r');
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    if (m1 != m2)
        cout << "m1 is NOT equal to m2\n";
      else
        cout << "m1 is equal to m2\n";
    m1 = m2;
    cout << "After m1 = m2;\n";
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    if (m1 != m2)
        cout << "m1 is NOT equal to m2\n";
      else
        cout << "m1 is equal to m2\n";
    }
  }
bool CMoney::operator ==(CMoney amount)
  {
  //compare object amount with object pointed to by this
  return (dollars == amount.dollars && cents == amount.cents);
  }
void testOperatorEqual(void)
  {
  for (int i=0; i<TEST_COUNT; i++)
    {
    cout << "Test #" << i << endl;
    CMoney m1('r'), m2('r');
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    if (m1 == m2)
        cout << "m1 is equal to m2\n";
      else
        cout << "m1 is NOT equal to m2\n";
    m1 = m2;
    cout << "After m1 = m2;\n";
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    if (m1 == m2)
        cout << "m1 is equal to m2\n";
      else
        cout << "m1 is NOT equal to m2\n";
    }
  }
CMoney operator * (CMoney amount1, CMoney amount2)
  {
  CMoney tempAmount;
  tempAmount.dollars = 999; //dummy
  tempAmount.cents = 99;    //dummy
  return tempAmount;
  }
void testOperatorMultiply(void)
  {
  for (int i=0; i<TEST_COUNT; i++)
    {
    cout << "Test #" << i << endl;
    CMoney m1('r'), m2('r'), m3('r');
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    cout << "m3 = "; m3.display();
    m1 = m2 * m3;
    cout << "After m1 = m2 * m3;\n";
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    cout << "m3 = "; m3.display();
    }
  }
CMoney CMoney::operator + (CMoney amount) const
  {
  CMoney tempAmount;
  tempAmount.dollars = this->dollars + amount.dollars;  //dummy
  tempAmount.cents   = this->cents   + amount.cents;    //dummy
  return tempAmount;
  }
void testOperatorAdd(void)
  {
  for (int i=0; i<TEST_COUNT; i++)
    {
    cout << "Test #" << i << endl;
    CMoney m1('r'), m2('r'), m3('r');
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    cout << "m3 = "; m3.display();
    m1 = m2 + m3;
    cout << "After m1 = m2 + m3;\n";
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    cout << "m3 = "; m3.display();
    }
  }
CMoney::CMoney(int dollars, int cents)
  {
  this->dollars = dollars;
  this->cents  = cents;
  }
void testConstructor(void)
  {
  for (int i=0; i<TEST_COUNT; i++)
    {
    int dollars = rand()%MAX_VALUE + 1;
    int cents   = rand()%100;
    if (rand()%2 == 1)
        {
        dollars = -dollars;
        cents = -cents;
        }
    CMoney amount(dollars, cents);
    amount.display();
    }
  }
CMoney::CMoney(char ch)
  {
  if (('r' == ch) || ('R' == ch))
      {
      dollars = rand()%MAX_VALUE + 1;
      cents   = rand()%100;
      if (rand()%2 == 1)
          {
          dollars = -dollars;
          cents = -cents;
          }
      }
    else if (('u' == ch) || ('U' == ch))
      {
      dollars = 1;
      cents = 0;
      if (rand()%2 == 1)
          {
          dollars = -dollars;
          cents = -cents;
          }
      }
    else if (('p' == ch) || ('P' == ch))
      {
      dollars = 0;
      cents = 1;
      if (rand()%2 == 1)
          {
          dollars = -dollars;
          cents = -cents;
          }
      }
    else if (('i' == ch) || ('I' == ch))
      {
      cout << "Enter dollars ";
      cin >> dollars;
      cout << "Enter cents   ";
      cin >> cents;
      }
    else
      {
      dollars = 0;
      cents = 0;
      }
  }
void testConstructorRand(void)
  {
  for (int i=0; i<TEST_COUNT; i++)
    {
    char ch;
    switch (rand()%6)
      {
      case 0: ch = 'r'; break;
      case 1: ch = 'R'; break;
      case 2: ch = 'u'; break;
      case 3: ch = 'U'; break;
      case 4: ch = 'p'; break;
      case 5: ch = 'P'; break;
      case 6: ch = 'i'; break;
      case 7: ch = 'I'; break;
      default:
        ch = 'k';
      }
    CMoney amount(ch);
    cout << ch << "    ";
    amount.display();
    }
  }
void testAssign(void)
  {
  for (int i=0; i<TEST_COUNT; i++)
    {
    CMoney m1('r'), m2('r'), m3('r');
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    cout << "m3 = "; m3.display();
    m1 = m2 = m3;
    cout << "After m1 = m2 = m3;\n";
    cout << "m1 = "; m1.display();
    cout << "m2 = "; m2.display();
    cout << "m3 = "; m3.display();
    }
  }
CMoney::~CMoney(void)
  {
  }
void CMoney::display(void) const
  {
  int tCents = cents;
  if (tCents < 0)
      tCents = -tCents;
  if ((0 == dollars) && (cents < 0))
      cout << '-';
  cout << dollars << '.';
  if (0==tCents)
      cout << "00" << endl;
    else if (tCents < 10)
      cout << '0' << tCents << endl;
    else
      cout << tCents << endl;
  }
void main(void)
  {
  srand(time(NULL));
  //testConstructor();
  //testConstructorRand();
  //testAssign();
  //testOperatorAdd();
  //testOperatorMultiply();
  //testOperatorEqual();
  //testOperatorNotEqual();
  CMoney m1('r'), m2('r');
  m1.display();
  m2.display();
  m1 = -m2;
  m1.display();
  m2.display();
  }