Computer Science 523
Advanced Programming
Summer 2014, The College of Saint Rose
Payroll BlueJ Project
Click here to download a BlueJ project for Payroll.
Payroll Source Code
The Java source code for Payroll is below. Click on a file name to download it.
/*
* Example Payroll: compute net pay and taxes for a given hourly wage,
* work schedule (with time and a half for overtime), and tax rate.
*
* Demonstrates more conditional execution and the use of DecimalFormat
* to format output nicely.
*
* Jim Teresco, The College of Saint Rose, CSC 202, Fall 2012
*
* $Id: Payroll.java 2366 2014-05-20 02:33:22Z terescoj $
*/
import java.text.DecimalFormat;
import java.util.Scanner;
public class Payroll {
public static void main(String[] args) {
// use a named constant for tax rate, which stays the same
// for all employees for whom this program is run
final double TAX_RATE = 20.0;
// another named constant for the standard work week - the
// point beyond which the employee earns "overtime" pay
final double STANDARD_HOURS = 40.0;
// and one for the pay rate multiplier for hours above the standard
final double OVERTIME_RATE = 1.5;
// we'll use a Scanner
Scanner keyboard = new Scanner(System.in);
// prompt for hourly wage
System.out.print("Please enter the employee's hourly wage: ");
double payRate = keyboard.nextDouble();
// do some basic error checking
if (payRate <= 0.0) {
System.out.println("Wages must be positive.");
System.exit(1);
}
// now hours worked
System.out.print("Please enter the employee's work hours for the week: ");
double hoursWorked = keyboard.nextDouble();
// hours should also be positive
if (hoursWorked <= 0.0) {
System.out.println("Hours worked must be positive.");
System.exit(1);
}
// Compute the weekly pay. How we do this depends on whether there
// is any overtime, so we will check for that first.
// Note that we must declare the variables regularPay and overtimePay
// outside of the if-else so they retain their values
// after we leave the if-else. Note also that we can declare multiple
// variables of the same type on one line by separating the names
// with commas.
double regularPay, overtimePay;
// apply the overtime rate if applicable
if (hoursWorked > STANDARD_HOURS) {
// We credit STANDARD_HOURS of the work time at the regular pay
// rate and then remaining hours at the OT rate.
regularPay = STANDARD_HOURS * payRate;
overtimePay = (hoursWorked - STANDARD_HOURS) *
OVERTIME_RATE * payRate;
}
else {
regularPay = hoursWorked * payRate;
overtimePay = 0.0;
}
double grossPay = regularPay + overtimePay;
// now we know the gross pay, compute the tax and from that
// the net pay
double tax = grossPay * TAX_RATE/100;
double netPay = grossPay - tax;
// finally, we print out the answers, using a DecimalFormat object
// to make it look nice.
// This one will have at least one digit before the decimal point
// (more if needed) and exactly one digit after (even if there are
// more non-zero digits in the hundredths place and beyond).
DecimalFormat hoursFormat = new DecimalFormat("0.0");
// This one will specifically print the number in a format with
// a comma for more than 4 places before the decimal point, and will
// always have 2 places after the decimal point.
DecimalFormat formatter = new DecimalFormat("#,##0.00");
System.out.println("For " + hoursFormat.format(hoursWorked) +
" hours worked at $" + formatter.format(payRate) + " per hour:");
System.out.println("Regular pay: $" + formatter.format(regularPay));
System.out.println("Overtime pay: $" + formatter.format(overtimePay));
System.out.println("Gross pay: $" + formatter.format(grossPay));
System.out.println("Taxes: $" + formatter.format(tax));
System.out.println("Net pay: $" + formatter.format(netPay));
}
}