// USAMONEY.CPP #include "usamoney.h" #ifndef __USAMONEY_CPP #define __USAMONEY_CPP #include #include USAMoney::USAMoney( dollars d, cents c ) { Dollars = d; Cents = c; } USAMoney::USAMoney( money m ) { Dollars = dollars( m / 1 ); // ASSIGN THE DOLLARS. m -= Dollars; // REMOVE THE DOLLARS FROM M. if( m < 0 ) m -= 0.0051; // TO ROUND UP else m += 0.0051; // TO ROUND UP m *= 100; Cents = cents( m ); // ASSIGN CENTS } USAMoney::USAMoney( char *str ) { int i; char *ptr; char buffer[ 256 ]; money m; ptr = str; while( *ptr == '$' ) // TO STRIP OUT $$$. ptr++; for( i = 0; *ptr; i++, ptr++ ) // COPY INTO THE STRIPPED $$$ BUFFER. buffer[i] = *ptr; buffer[ i ] = char( NULL ); // ADD NULL TO END OF THE BUFFER. m = atof( buffer ); // CONVERT THE STR TO FLOAT. Dollars = dollars( m / 1 ); // ASSIGN THE DOLLARS. m -= Dollars; // REMOVE DOLLAR FOR ASSIGNMENT OF CENTS. if( m < 0 ) m -= 0.0051; // TO ROUND UP. else m += 0.0051; // TO ROUND UP. m *= 100; Cents = cents( m ); // ASSIGN THE CENTS. } USAMoney::~USAMoney(){ ; } void USAMoney::Print() const { cout << "$"; cout.fill( '0' ); cout << GetMoney(); if( ! GetMoney() || ! GetCents() ) cout << ".0"; if( ! (GetCents() % 10) ) cout << "0"; cout << endl; } dollars USAMoney::GetDollars() const { return( Dollars ); } cents USAMoney::GetCents() const { return( Cents ); } money USAMoney::GetMoney() const { money m; m = Cents; m /= 100; m += Dollars; return( m ); } USAMoney operator + ( USAMoney &m1, USAMoney &m2 ) { return( USAMoney( m1.Dollars + m2.Dollars, m1.Cents + m2.Cents ) ); } USAMoney operator - ( USAMoney &m1, USAMoney &m2 ) { return( USAMoney( m1.Dollars - m2.Dollars, m1.Cents - m2.Cents ) ); } USAMoney operator * ( USAMoney &m1, USAMoney &m2 ) { return( USAMoney( m1.GetMoney() * m2.GetMoney() ) ); } USAMoney operator / ( USAMoney &m1, USAMoney &m2 ) { return( USAMoney( m1.GetMoney() / m2.GetMoney() ) ); } operator < ( USAMoney &m1, USAMoney &m2 ) { if( m1.GetMoney() < m2.GetMoney() ) return( 0xF ); else return( 0x0 ); } operator > ( USAMoney &m1, USAMoney &m2 ) { if( m1.GetMoney() > m2.GetMoney() ) return( 0xF ); else return( 0x0 ); } operator == ( USAMoney &m1, USAMoney &m2 ) { if( m1.GetMoney() == m2.GetMoney() ) return( 0xF ); else return( 0x0 ); } operator != ( USAMoney &m1, USAMoney &m2 ) { if( m1.GetMoney() != m2.GetMoney() ) return( 0xF ); else return( 0x0 ); } istream &operator >> ( istream &in, USAMoney &M ) { char str[ 256 ]; int i; char *ptr; char buffer[ 256 ]; money m; in >> str; ptr = str; while( *ptr == '$' ) // TO STRIP OUT $$$. ptr++; for( i = 0; *ptr; i++, ptr++ ) // COPY INTO THE STRIPPED $$$ BUFFER. buffer[i] = *ptr; buffer[ i ] = char( NULL ); // ADD NULL TO END OF THE BUFFER. m = atof( buffer ); // CONVERT THE STR TO FLOAT. M.Dollars = dollars( m / 1 ); // ASSIGN THE DOLLARS. m -= M.Dollars; // REMOVE DOLLAR FOR ASSIGNMENT OF CENTS. if( m < 0 ) m -= 0.0051; // TO ROUND UP. else m += 0.0051; // TO ROUND UP. m *= 100; M.Cents = cents( m ); // ASSIGN THE CENTS. return( in ); } ostream &operator << ( ostream &out, USAMoney &M ) { return( out << M.GetMoney() ); } #endif // __USAMONEY_CPP