Objectives:
arithmetic using integer and real (floating point) values,
use of integer division and integer remainder (% in Java) operators,
data type conversions (type casting),
decision making using if statements,
using methods to modularize programs, arguments/parameters for communication among methods (class level variables are not allowed in this assignment)
using some String class methods .charAt() .substring() .length()
using Math.round.
The scenario
Your friend Joe the Cashier works the graveyard shift at the local convenience store. His cash register tells him how much change he needs to return to his customer, but he is having trouble figuring out what bills and coins to give to the customer to make up the change due. You have agreed to write a Change Maker program for him. The requirements of this program are discussed below.
Input Data
There is only one item of input data: The change due to the customer. This will be a dollars and cents figure, expressed as a decimal fraction, such as 37.67. This will be stored in a variable of type double.
Output
The output will contain the number of each type of bill and coin to be given to the customer. Some of these numbers could be 0 and those would be omitted from the output. Here is a sample interaction between the program and the user:
image1.jpg
Assumptions
We assume that the register contains an ample supply of bills ($20, $10, $5, $1) and coins (quarters, dimes, nickels, pennies) so we can always make up the change due using fewest number of bills and coins. We further assume that $20 is the largest denomination that we will use.
Strategy to solve this problem
First we need the whole numbers of dollars and cents from the real number (that may contain a decimal fraction) representing the change due. So from 37.67 we need to get 37 and 67. A real value can be assigned to an integer
variable (using a cast operator) to extract the whole number part of the real value. The difference between the real value and the whole number part can be multiplied by 100 (round the difference to nearest int) to get the total number of cents. Now we work with the dollars and the cents figures separately. We work from larger to smaller denominations.
We can use a variable to keep track of how many dollars (cents) has not yet been accounted for by the bills (coins) the program has decided to use for change making. I give an example of how the calculation could proceed.
Initially, we have 37 dollars to make change for.
Decide how many $20 bills we need. 37/20 = 1, so we need 1 $20 bill. 37%20 = 17, so we still need to make change for 17 dollars.
Decide how many $10 bills we need. 17/10 = 1, so we need 1 $10 bill. 17%10 = 7, so we still need to make change for 7 dollars.
Decide how many $5 bills we need. 7/5 = 1, so we need 1 $5 bill. 7%5 = 2, so we still need to make change for 2 dollars.
The number of dollars left over at this stage is the number of $1 bills we need.
The numbers of coins of various denominations can be calculated in a similar way.
Nicknames for the bills
The bills are often referred to by the names of the Historical Persons whose pictures appear on them. So a $20 bill is called a Jackson, $10 -- Hamilton, $5 – Lincoln, $1 – Washington.
Singular and plural forms of the bill and coin names
The plural form of all the coin/bill names (except "Penny" used for 1¢ coin) can be formed by just adding an 's' to the singular form. But the coin name "Penny", has the plural "Pennies". This is handled by checking if the last character in the name is 'y'. If not, just concatenate an 's' to the end of the singular name to form the plural. Otherwise, form a substring by removing the 'y' and add "ies" to that substring to form the plural. We will handle this by defining a method that gives us the plural form from the singular. The output should use the plural form of the bill/coin names when appropriate.
Program organization
The program is to be written using several methods in addition to the "main" method.
main –This method prints the sign-on message and describes its purpose. It then prompts the user to enter the change due as a double value and accepts the input into a double variable (no validation necessary). It then calculates two integer values (dollars and cents in the change due). It then calls the methods showDollars and showCents with appropriate arguments. Finally it prints the sign-off message.
void showDollars(int) – This method accepts an int parameter representing the whole number of dollars in the change due. It calculates the numbers of bills of various denominations to be returned and call the last method to print the number and the name for each denomination of bills used.
void showCents(int) – This method is similar to the method above but it deals with the coins to be returned, so it receives a parameter representing the cents part of the change due.
void showNumberAndName(int, String) – This method receives a number of a particular bill/coin and the name of that bill/coin as part of returned change. If the number is 0, this method returns without producing any output. If the number is 1 then it prints 1 followed by the name. If the number is > 1 then it prints the number followed by the plural form of the name.
String plural(String) – This method returns the paramete