In: Computer Science
JAVA CODE
Using the PurchaseDemo program and output from the previous problem as your guide, write a program that uses the Purchase class to set the following prices, and buy the number of items as indicated. Calculate the subtotals and total bill called total. Using the writeOutput() method display the subtotals as they are generated as in the PurchaseDemo program. Then print the total bill at the end. You may use integer, double, and String variables as needed but you may use only one object of the Purchase class and a for loop.
(Use the readInput() method for the following input data, you may assume the prompts and Scanner for the readInput() method takes place but you need not include either in your program output. )
Oranges: 10 for 2.99 buy 2 dozen oranges
Eggs; 12 for 1.69 buy 3 dozen eggs
Apples: 3 for 1.00 buy 20 apples
Watermelons: 4.39 each buy 2 watermelons
Bagels; 6 for 3.50 buy 1 dozen bagels
public class PurchaseDemo
{
public static void main(String[] args)
{
Purchase oneSale = new Purchase();
oneSale.readInput();
oneSale.writeOutput();
System.out.println("Cost each $" + oneSale.getUnitCost());
System.out.println("Total cost $" + oneSale.getTotalCost());
}
}
import java.util.Scanner;
/**
Class for the purchase of one kind of item, such as 3
oranges.
Prices are set supermarket style, such as 5 for $1.25.
*/
public class Purchase
{
private String name;
private int groupCount; //Part of a price, like the 2 in //2 for
$1.99.
private double groupPrice; //Part of a price, like the $1.99
// in 2 for $1.99.
private int numberBought; //Number of items bought.
public void setName(String newName)
{
name = newName;
}
/**
Sets price to count pieces for $costForCount.
For example, 2 for $1.99.
*/
public void setPrice(int count, double costForCount)
{
if ((count <= 0) || (costForCount <= 0))
{
System.out.println("Error: Bad parameter in " +
"setPrice.");
System.exit(0);
}
else
{
groupCount = count;
groupPrice = costForCount;
}
}
public void setNumberBought(int number)
{
if (number <= 0)
{
System.out.println("Error: Bad parameter in " +
"setNumberBought.");
System.exit(0);
}
else
numberBought = number;
}
/**
Reads from keyboard the price and number of a purchase.
*/
public void readInput()
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter name of item you are purchasing:");
name = keyboard.nextLine();
System.out.println("Enter price of item as two numbers.");
System.out.println("For example, 3 for $2.99 is entered as");
System.out.println("3 2.99");
System.out.println("Enter price of item as two numbers, " +
"now:");
groupCount = keyboard.nextInt();
groupPrice = keyboard.nextDouble();
while ((groupCount <= 0) || (groupPrice <= 0))
{ //Try again:
System.out.println("Both numbers must " +
"be positive. Try again.");
System.out.println("Enter price of " +
"item as two numbers.");
System.out.println("For example, 3 for " +
"$2.99 is entered as");
System.out.println("3 2.99");
System.out.println(
"Enter price of item as two numbers, now:");
groupCount = keyboard.nextInt();
groupPrice = keyboard.nextDouble();
}
System.out.println("Enter number of items purchased:");
numberBought = keyboard.nextInt();
while (numberBought <= 0)
{ //Try again:
System.out.println("Number must be positive. " +
"Try again.");
System.out.println("Enter number of items purchased:");
numberBought = keyboard.nextInt();
}
}
/**
Displays price and number being purchased.
*/
public void writeOutput()
{
System.out.println(numberBought + " " + name);
System.out.println("at " + groupCount +
" for $" + groupPrice);
}
public String getName()
{
return name;
}
public double getTotalCost()
{
return (groupPrice / groupCount) * numberBought;
}
public double getUnitCost()
{
return groupPrice / groupCount;
}
public int getNumberBought()
{
return numberBought;
}
}
The code to calculate subtotal and total bill amount is as follows:
import java.util.Scanner;
public class PurchaseImpl {
public static void main (String []args)
{
Scanner input = new
Scanner(System.in);
System.out.println("Enter number of
items you are purchasing:");
int num = input.nextInt(); //taking
number of items as input which in the given question is 5
Purchase pur= new Purchase();
//Object of Purchase class
int count=1;
double total=0; //total bill
amount
for(int i=0;i<num;i++)
{
System.out.println("Adding Product: "+ count++);
pur.readInput();
pur.writeOutput();
double
itemCost=pur.getTotalCost();
System.out.println("Cost of "+ pur.getNumberBought() + " "
+pur.getName() + ": $" + itemCost);
total+=itemCost;
}
System.out.println("Total Cost:
$"+total);
}
}
The output of the above program excluding the prompts of readInput() method is as follows:
Enter number of items you are purchasing:5
Cost of 24 Oranges: $7.176000000000001
Cost of 36 Eggs: $5.07
Cost of 20 Apples: $6.666666666666666
Cost of 2 Watermelons: $8.78
Cost of 12 Bagels: $7.0
Total Cost: $34.69266666666667
For the given use case i.e. use only one object of Purchase class to purchase multiple items, i have taken only one object and inside for loop the data members of Purchase class are overriden in each iteration of for loop, hence enabling us to use one object to purchase multiple items.