# The local yogurt shop is expanding - Expert Work

NOTE: Remember that you are NOT allowed to use the break, return, or exit statements to exit from a loop. All loops must exit ONLY via their test condition.

Program #1

The local yogurt shop is expanding its selection of frozen treats, and would like you to modify the program you wrote in week 3 to calculate and print their customer’s bills. You will also write a test plan to test the program.

 This shop now has four types of frozen treats: frozen yogurt and soft serve ice cream by the ounce, premium ice cream by the scoop, and ice cream bars. These items are available at the following rates:

Treat Type Price

Frozen Yogurt \$ 0.44 per ounce

Soft Serve Ice Cream \$ 0.49 per ounce

Premium Ice Cream \$ 1.62 per scoop

Ice Cream Bars \$ 3.49 per bar

 Single servings of frozen yogurt or either type of ice cream may be purchased in a plastic cup (waffle cones are no longer available).

o Plastic cups hold up to 16 ounces or 5 scoops

 Customers may optionally add toppings to their yogurt or ice cream. The first topping is included free, but additional toppings cost \$0.63 per topping.

 Yogurt and soft serve ice cream may be purchased, without any toppings, in larger take out container that will hold amounts up to 64 ounces. Take out purchases are sold at a discount. (NOTE: If a purchase is over 16 oz, the program will be assume it is a take out purchase.)

 Purchases (over 16 oz) up to 32 ounces are given a \$0.04 discount per ounce.

 Purchases of more than 32 ounces are given a \$0.08 discount per ounce.

 Multiple treats may be purchased on a single bill.

 The punch card program has been discontinued in favor of a quantity discount. If 4 or more treats are purchased on one bill, the last treat in the purchase is charged half price.

Define constants for all fixed values, and use double precision floating point variables for all dollar & cents figures.

Implementation Details

At a minimum, the program must implement the following functions (in addition to main):
 Generic function 1 to read and validate any positive number (including 0).

This function will have one input parameter, a string prompt, used to ask for input. It will loop until a valid integer has been entered, and will return the validated integer.

 Generic function 2 to read and validate a number between 1 and a maximum value.

This function will have two input parameters, a string, which describes the value to be read (to be used in prompts and error messages), and the maximum value that can be entered. It will loop until a valid integer (1 to maximum) has been entered, and will return the validated integer.

 One function to read and validate the treat type.

This function will display a menu of treat choices, along with prices of each, to the user. It will prompt for the treat type (Y, S, P, or B), and error check that the user has entered a valid choice (accepted in upper or lowercase). If not, issue an error message and re-prompt until a valid choice is entered. The function will return the validated choice in uppercase.

 One function to calculate the base treat charge.

This function will have two input parameters, the treat type and amount purchased. It will calculate and return the charge for the specific amount of treat purchased, including take out discounts.

 One function to calculate the toppings charge.

This function will have two input parameters, the treat type and amount purchased. It will decide whether toppings are allowed (Toppings are allowed for yogurt or soft serve ice cream under take out limits, and premium ice cream).

If toppings are allowed, this function will call generic function number 1 to read and validate the number of toppings. It will then calculate the toppings charge, and return the toppings charge, or 0 if there was no charge.

 One function to calculate the total cost for one treat (includes base charge and topping charge, if necessary).

This function will have one input parameter, the treat type. If necessary, it will call generic function 2 to determine the amount (ounces or scoops) purchased. (Max of 64 ounces for yogurt and soft serve, and 5 scoops for premium). It will then call the above two charge functions. The function will return the total cost for one treat.

Remember that the use of global variables is NOT allowed. The functions must use parameters and return values to pass required data to and from each function.

 All input only parameters should be passed by value.

 Output (reference) parameters are used when more than one value is being passed back. If only one value is passed back, the return statement should be used instead.

This program will calculate customer bills for frozen treats

NEW CUSTOMER

Number of treats purchased (0 to exit): 4

Treat Choices:

Y - Frozen Yogurt \$ 0.44 per ounce

S - Soft Serve Ice Cream \$ 0.49 per ounce

P - Premium Ice Cream \$ 1.62 per scoop

B - Ice Cream Bar \$ 3.49 per bar

For treat #1, enter letter for treat type: y

Enter number of ounces: 10

Enter number of toppings: 3

Charge for treat #1 is \$ 5.66

Press any key to continue . . .

Program Execution

1. Display a description to the user, explaining what the program will do.

2. Implement an outer loop in main, to process customer orders, as follows:

a. Call generic function number 1 to read the number treats purchased by one customer.

b. If the function returns 0, exit the outer loop. Otherwise:

Using the value entered by the customer, implement an inner loop in main, to calculate the cost for each treat, as follows:

i. Call the function to read and validate the treat choice.

ii. Call the function to calculate the total cost for one treat.

iii. Decide whether treat should be half cost, and adjust it accordingly.

iv. Display the cost of the treat and add it to the total bill for the customer.

c. After the cost of all treats for one order have been displayed (i.e. the inner loop exits), display the total bill amount.

3. The outer loop should continue to loop, until 0 is entered for the number of treats purchased by one customer.

Sample Input and Output (continued on next page)

Treat Choices:

Y - Frozen Yogurt \$ 0.44 per ounce

S - Soft Serve Ice Cream \$ 0.49 per ounce

P - Premium Ice Cream \$ 1.62 per scoop

B - Ice Cream Bar \$ 3.49 per bar

For treat #2, enter letter for treat type: s

Enter number of ounces: 30

Charge for treat #2 is \$ 13.50

Press any key to continue . . .

Treat Choices:

Y - Frozen Yogurt \$ 0.44 per ounce

S - Soft Serve Ice Cream \$ 0.49 per ounce

P - Premium Ice Cream \$ 1.62 per scoop

B - Ice Cream Bar \$ 3.49 per bar

For treat #3, enter letter for treat type: B

Charge for treat #3 is \$ 3.49

Press any key to continue . . .

Treat Choices:

Y - Frozen Yogurt \$ 0.44 per ounce

S - Soft Serve Ice Cream \$ 0.49 per ounce

P - Premium Ice Cream \$ 1.62 per scoop

B - Ice Cream Bar \$ 3.49 per bar

For treat #4, enter letter for treat type: p

Enter number of scoops: 3

Enter number of toppings: 1

Charge for treat #4 is \$ 2.43

Bill total for 4 treats is \$ 25.08

Press any key to continue . . .

NEW CUSTOMER Number of treats purchased (0 to exit): 0

Testing

As part of your submission for this week, you must write a test plan for this program (program 1). Remember to test the border cases that generally cause errors.

Your test plan must include:

 the rationale for testing each condition within the program

 a list of the specific test cases

Each test case must include:

 the exact user input used for the test

 the exact output expected