Java Methods problem
Lab04/pom.xml
4.0.0 com.mycompany Lab04 1.0-SNAPSHOT jar UTF-8 14 14
Lab04/Problem statement.PNG
Lab04/src/main/java/BillCalculator3.java
Lab04/src/main/java/BillCalculator3.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import
java
.
util
.
Scanner
;
import
java
.
text
.
DecimalFormat
;
/**
*
*
@author
Marion
*/
public
class
BillCalculator3
//methods are within the class, but outside the main method
{
/**
*
@param
args the command line arguments
*/
//void method---> main method
//other methods go outside this method
public
static
void
main
(
String
[]
args
)
{
//all the while loops stay in this method
//constants and variables
final
double
PACKAGE_A_COST
=
9.95
;
final
double
PACKAGE_B_COST
=
13.95
;
final
double
PACKAGE_C_COST
=
19.95
;
final
double
ERATH_DISCOUNT_RATE
=
.20
;
final
double
COMANCHE_DISCOUNT_RATE
=
.05
;
final
double
PARKER_DISCOUNT_RATE
=
.10
;
int
totalOfCustomers
=
0
;
double
totalOfDiscountAmount
=
0
;
double
totalOfTotalCharge
=
0
;
String
input
;
String
zipCodeString
;
char
zipCode
;
String
countyName
;
char
packageType
;
double
hoursUsed
;
double
baseCharge
=
0
;
double
additionalCharge
=
0
;
double
surcharge
=
0
;
double
discountRate
=
0
;
double
discountAmount
=
0
;
double
subtotalPackageA
=
0
;
double
subtotalPackageB
=
0
;
double
subtotalPackageC
=
0
;
double
totalChargePackageA
=
0
;
double
totalChargePackageB
=
0
;
double
totalChargePackageC
=
0
;
double
savingsPackageB
=
0
;
double
savingsPackageC
=
0
;
double
averageDiscountAmount
=
0
;
double
averageTotalCharge
=
0
;
Scanner
keyboard
=
new
Scanner
(
System
.
in
);
DecimalFormat
currency
=
new
DecimalFormat
(
"$,##0.00"
);
System
.
out
.
print
(
"Enter hours used: "
);
hoursUsed
=
keyboard
.
nextDouble
();
keyboard
.
nextLine
();
//while loops from lab 03 sample solution
while
(
hoursUsed
!=
-
1
)
{
while
(
hoursUsed
<=
0
)
{
System
.
out
.
print
(
"Invalid hours used. Must be greater than zero. Try again: "
);
hoursUsed
=
keyboard
.
nextDouble
();
keyboard
.
nextLine
();
}
System
.
out
.
print
(
"Enter zip code: "
);
zipCodeString
=
keyboard
.
nextLine
();
zipCode
=
zipCodeString
.
charAt
(
0
);
while
(
zipCode
<=
'0'
)
{
System
.
out
.
print
(
"Invalid zip code. First character must be greater than zero. Try again: "
);
zipCodeString
=
keyboard
.
nextLine
();
zipCode
=
zipCodeString
.
charAt
(
0
);
}
if
(
zipCode
==
'3'
)
surcharge
=
1.50
;
else
if
(
zipCode
==
'5'
)
surcharge
=
1.75
;
else
if
(
zipCode
==
'8'
)
surcharge
=
1.95
;
else
surcharge
=
0.0
;
System
.
out
.
print
(
"Enter county: "
);
countyName
=
keyboard
.
nextLine
();
while
(
countyName
.
equals
(
""
)
)
{
System
.
out
.
print
(
"Invalid county. County is required. Try again: "
);
countyName
=
keyboard
.
nextLine
();
}
countyName
=
countyName
.
toUpperCase
();
if
(
countyName
.
equals
(
"ERATH"
)
)
discountRate
=
ERATH_DISCOUNT_RATE
;
else
if
(
countyName
.
equals
(
"COMANCHE"
)
)
discountRate
=
COMANCHE_DISCOUNT_RATE
;
else
if
(
countyName
.
equals
(
"PARKER"
)
)
discountRate
=
PARKER_DISCOUNT_RATE
;
else
discountRate
=
0.0
;
System
.
out
.
print
(
"Enter package type: "
);
input
=
keyboard
.
nextLine
();
packageType
=
input
.
charAt
(
0
);
while
(
packageType
!=
'A'
&&
packageType
!=
'a'
&&
packageType
!=
'B'
&&
packageType
!=
'b'
&&
packageType
!=
'C'
&&
packageType
!=
'c'
)
{
System
.
out
.
print
(
"Invalid package type. Must be A, B, or C. Try again: "
);
input
=
keyboard
.
nextLine
();
packageType
=
input
.
charAt
(
0
);
}
//end of while loops in main method
//if statements within methods now start
if
(
packageType
==
'A'
||
packageType
==
'a'
)
{
if
(
hoursUsed
>
10
)
{
baseCharge
=
PACKAGE_A_COST
;
additionalCharge
=
(
hoursUsed
-
10
)
*
2
;
}
else
{
baseCharge
=
(
PACKAGE_A_COST
);
additionalCharge
=
0
;
}
subtotalPackageA
=
baseCharge
+
additionalCharge
+
surcharge
;
discountAmount
=
subtotalPackageA
*
discountRate
;
totalChargePackageA
=
subtotalPackageA
-
discountAmount
;
//counter and accumulator
totalOfCustomers
=
totalOfCustomers
+
1
;
totalOfDiscountAmount
=
totalOfDiscountAmount
+
discountAmount
;
totalOfTotalCharge
=
totalOfTotalCharge
+
totalChargePackageA
;
averageDiscountAmount
=
totalOfDiscountAmount
/
totalOfCustomers
;
averageTotalCharge
=
totalOfTotalCharge
/
totalOfCustomers
;
System
.
out
.
println
(
"Base Charge for Package A:\t\t"
+
currency
.
format
(
baseCharge
)
);
System
.
out
.
println
(
"Additional Charge for Package A:\t"
+
currency
.
format
(
additionalCharge
)
);
System
.
out
.
println
(
"Surcharge for Zip Code:\t\t\t"
+
currency
.
format
(
surcharge
)
);
System
.
out
.
println
(
"Subtotal for Package A:\t\t\t"
+
currency
.
format
(
subtotalPackageA
)
);
System
.
out
.
println
(
"Discount Amount for County:\t\t"
+
currency
.
format
(
discountAmount
)
);
System
.
out
.
println
(
"Total Charge for Package A:\t\t"
+
currency
.
format
(
totalChargePackageA
)
);
System
.
out
.
println
(
"Total Discount Amount for All Packages:\t"
+
currency
.
format
(
totalOfDiscountAmount
)
);
System
.
out
.
println
(
"Total Charge for All Packages\t\t"
+
currency
.
format
(
totalOfTotalCharge
)
);
System
.
out
.
println
(
"Average Discount Amount:\t\t"
+
currency
.
format
(
averageDiscountAmount
)
);
System
.
out
.
println
(
"Average Total Charge:\t\t\t"
+
currency
.
format
(
averageTotalCharge
)
);
System
.
out
.
println
(
"Total Customers:\t\t\t"
+
totalOfCustomers
);
if
(
totalChargePackageA
>
PACKAGE_B_COST
)
{
baseCharge
=
PACKAGE_B_COST
;
additionalCharge
=
(
hoursUsed
-
20
)
*
1
;
subtotalPackageB
=
baseCharge
+
additionalCharge
+
surcharge
;
discountAmount
=
subtotalPackageB
*
discountRate
;
totalChargePackageB
=
subtotalPackageB
-
discountAmount
;
savingsPackageB
=
totalChargePackageA
-
totalChargePackageB
;
System
.
out
.
println
(
"Package B Savings:\t\t\t"
+
currency
.
format
(
savingsPackageB
)
);
}
if
(
totalChargePackageA
>
PACKAGE_C_COST
)
{
baseCharge
=
PACKAGE_C_COST
;
subtotalPackageC
=
baseCharge
+
surcharge
;
discountAmount
=
subtotalPackageC
*
discountRate
;
totalChargePackageC
=
subtotalPackageC
-
discountAmount
;
savingsPackageC
=
totalChargePackageA
-
totalChargePackageC
;
System
.
out
.
println
(
"Package C Savings:\t\t\t"
+
currency
.
format
(
savingsPackageC
)
);
}
}
else
if
(
packageType
==
'B'
||
packageType
==
'b'
)
{
if
(
hoursUsed
>
20
)
{
baseCharge
=
PACKAGE_B_COST
;
additionalCharge
=
(
hoursUsed
-
20
)
*
1
;
}
else
{
baseCharge
=
PACKAGE_B_COST
;
additionalCharge
=
0
;
}
subtotalPackageB
=
baseCharge
+
additionalCharge
+
surcharge
;
discountAmount
=
subtotalPackageB
*
discountRate
;
totalChargePackageB
=
subtotalPackageB
-
discountAmount
;
totalOfCustomers
=
totalOfCustomers
+
1
;
totalOfDiscountAmount
=
totalOfDiscountAmount
+
discountAmount
;
totalOfTotalCharge
=
totalOfTotalCharge
+
totalChargePackageB
;
averageDiscountAmount
=
totalOfDiscountAmount
/
totalOfCustomers
;
averageTotalCharge
=
totalOfTotalCharge
/
totalOfCustomers
;
System
.
out
.
println
(
"Base Charge for Package B:\t\t"
+
currency
.
format
(
baseCharge
)
);
System
.
out
.
println
(
"Additional Charge for Package B:\t"
+
currency
.
format
(
additionalCharge
)
);
System
.
out
.
println
(
"Surcharge for Zip Code:\t\t\t"
+
currency
.
format
(
surcharge
)
);
System
.
out
.
println
(
"Subtotal for Package B:\t\t\t"
+
currency
.
format
(
subtotalPackageB
)
);
System
.
out
.
println
(
"Discount Amount for County:\t\t"
+
currency
.
format
(
discountAmount
)
);
System
.
out
.
println
(
"Total Charge for Package B:\t\t"
+
currency
.
format
(
totalChargePackageB
)
);
System
.
out
.
println
(
"Total Discount Amount for All Packages:\t"
+
currency
.
format
(
totalOfDiscountAmount
)
);
System
.
out
.
println
(
"Total Charge for All Packages\t\t"
+
currency
.
format
(
totalOfTotalCharge
)
);
System
.
out
.
println
(
"Average Discount Amount:\t\t"
+
currency
.
format
(
averageDiscountAmount
)
);
System
.
out
.
println
(
"Average Total Charge:\t\t\t"
+
currency
.
format
(
averageTotalCharge
)
);
System
.
out
.
println
(
"Total Customers:\t\t\t"
+
totalOfCustomers
);
if
(
totalChargePackageB
>
PACKAGE_C_COST
)
{
baseCharge
=
PACKAGE_C_COST
;
subtotalPackageC
=
baseCharge
+
surcharge
;
discountAmount
=
subtotalPackageC
*
discountRate
;
totalChargePackageC
=
subtotalPackageC
-
discountAmount
;
savingsPackageC
=
totalChargePackageB
-
totalChargePackageC
;
System
.
out
.
println
(
"Package C Savings:\t\t\t"
+
currency
.
format
(
savingsPackageC
)
);
}
}
else
if
(
packageType
==
'C'
||
packageType
==
'c'
)
{
baseCharge
=
PACKAGE_C_COST
;
subtotalPackageC
=
baseCharge
+
surcharge
;
discountAmount
=
subtotalPackageC
*
discountRate
;
totalChargePackageC
=
subtotalPackageC
-
discountAmount
;
totalOfCustomers
=
totalOfCustomers
+
1
;
totalOfDiscountAmount
=
totalOfDiscountAmount
+
discountAmount
;
totalOfTotalCharge
=
totalOfTotalCharge
+
totalChargePackageC
;
averageDiscountAmount
=
totalOfDiscountAmount
/
totalOfCustomers
;
averageTotalCharge
=
totalOfTotalCharge
/
totalOfCustomers
;
System
.
out
.
println
(
"Base Charge for Package C:\t\t"
+
currency
.
format
(
baseCharge
)
);
System
.
out
.
println
(
"Surcharge for Zip Code:\t\t\t"
+
currency
.
format
(
surcharge
)
);
System
.
out
.
println
(
"Subtotal for Package C:\t\t\t"
+
currency
.
format
(
subtotalPackageC
)
);
System
.
out
.
println
(
"Discount Amount for County:\t\t"
+
currency
.
format
(
discountAmount
)
);
System
.
out
.
println
(
"Total Charge for Package C:\t\t"
+
currency
.
format
(
totalChargePackageC
)
);
System
.
out
.
println
(
"Total Discount for All Packages:\t"
+
currency
.
format
(
totalOfDiscountAmount
)
);
System
.
out
.
println
(
"Total Charge for All Packages:\t\t"
+
currency
.
format
(
totalOfTotalCharge
)
);
System
.
out
.
println
(
"Average Discount Amount:\t\t"
+
currency
.
format
(
averageDiscountAmount
)
);
System
.
out
.
println
(
"Average Total Charge:\t\t\t"
+
currency
.
format
(
averageTotalCharge
)
);
System
.
out
.
println
(
"Total Customers:\t\t\t"
+
totalOfCustomers
);
}
System
.
out
.
print
(
"\nEnter hours used: "
);
hoursUsed
=
keyboard
.
nextDouble
();
keyboard
.
nextLine
();
}
System
.
out
.
println
(
"\nGood-bye!"
);
}
}