PACKAGE Currency IS ------------------------------------------------------------------ --| --| Specification of the abstract data type for representing --| and manipulating Currency numbers. --| All values of type Currency.Quantity are initialized to 0.0. --| --| Author: Michael B. Feldman, The George Washington University --| Last Modified: July 1995 --| ------------------------------------------------------------------ SUBTYPE CentsType IS Integer RANGE 0..99; TYPE Quantity IS PRIVATE; -- Operations FUNCTION MakeCurrency (F : Float) RETURN Quantity; -- constructor: -- Pre : F is defined -- Post: returns a Currency Quantity FUNCTION MakeFloat (Q : Quantity) RETURN Float; -- constructor: -- Pre: Q is defined -- Post: returns the value of Q in Float form FUNCTION Dollars (Q : Quantity) RETURN Natural; FUNCTION Cents (Q : Quantity) RETURN CentsType; FUNCTION IsPositive(Q : Quantity) RETURN Boolean; -- selectors: -- Pre: Q is defined -- Post: Dollars returns the Dollars part of Q; Cents the Cents part FUNCTION "<" (Q1 : Quantity; Q2 : Quantity) RETURN Boolean; FUNCTION ">" (Q1 : Quantity; Q2 : Quantity) RETURN Boolean; FUNCTION "<="(Q1 : Quantity; Q2 : Quantity) RETURN Boolean; FUNCTION ">="(Q1 : Quantity; Q2 : Quantity) RETURN Boolean; -- inquiry operators: -- Pre : Q1 and Q2 are defined -- Post: return Q1 < Q2, Q1 > Q2, Q1 <= Q2, and Q1 >= Q2, respectively FUNCTION "+" (Q : Quantity) RETURN Quantity; FUNCTION "-" (Q : Quantity) RETURN Quantity; FUNCTION "ABS"(Q : Quantity) RETURN Quantity; -- monadic arithmetic constructors: -- Pre: Q is defined -- Post: return Q, -Q, ABS Q respectively FUNCTION "+" (Q1 : Quantity; Q2 : Quantity) RETURN Quantity; FUNCTION "-" (Q1 : Quantity; Q2 : Quantity) RETURN Quantity; FUNCTION "*" (F : Float; Q : Quantity) RETURN Quantity; FUNCTION "*" (Q : Quantity; F : Float ) RETURN Quantity; FUNCTION "/" (Q1 : Quantity; Q2 : Quantity) RETURN Float; FUNCTION "/" (Q : Quantity; F : Float ) RETURN Quantity; -- dyadic arithmetic constructors: -- Pre : Q1 and Q2 are defined -- Post: these are the sensible arithmetic operators on Quantity. -- Note that multiplying two monetary values is not sensible. PRIVATE -- A record of type Quantity consists of a pair of Natural values -- such that the first number represents the Dollars part -- and the second number represents the Cents part. -- The sign of a Quantity value is indicated by a Boolean field -- called Positive. TYPE Quantity IS RECORD Positive: Boolean := True; Dollars : Natural := 0; Cents : CentsType := 0; END RECORD; -- Quantity END Currency;