Расчет зарплаты сотрудника методами - PullRequest
0 голосов
/ 24 ноября 2018

У меня возникли проблемы с частью задания, где у меня есть метод расчета регулярной заработной платы работника, но если отработанное время превышает 40, то остальное - сверхурочные, но если пользователь наберет 50 часов сПо курсу 10 долларов он напечатает 500, но я хочу, чтобы он распечатал только 40 из этих 50 часов, а остальное - как сверхурочные.

package paytime;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {

    Scanner scn = new Scanner(System.in);

    String firstName, lastName, choice;
    double hoursWorked, hourlyWage, weeklyPay;
    Employee one = new Employee();

    System.out.print("Enter Y to process employee or any other key to end: ");
    choice = scn.nextLine();
    if (choice.equalsIgnoreCase("Y"))
    {

    System.out.print("Enter employee number: ");
    int number = scn.nextInt();

    while (!one.findEmpNumber(number))
    {
        System.out.print("Invlaid, enter a proper employee number: ");
        number = scn.nextInt();
    }

    System.out.print("Enter first name: ");
    firstName = scn.next();

    System.out.print("Enter last name: ");
    lastName = scn.next();

    System.out.print("Enter hours worked: ");
    hoursWorked = scn.nextDouble();

    while (hoursWorked < 0)
    {
        System.out.print("Negative hours not allowed. Enter hours worked: ");
        hoursWorked = scn.nextDouble();
    }

    System.out.print("Enter hourly wage: $");
    hourlyWage = scn.nextDouble();

    while (hourlyWage < 0 || hourlyWage > 100)
    {
        System.out.print("Negative wage is not allowed or wage entered is to high. Enter hourley wage: $");
        hourlyWage = scn.nextDouble();
    }
    System.out.println(" ");

    if (hoursWorked <= 40.0)
    {
    System.out.println("Worker " + number + " Paycheck Information: ");
    System.out.println("Name is: " + firstName + " " + lastName);
    System.out.println("Weekly Pay is: " + one.callWeeklyPay(hoursWorked = 40, hourlyWage));
    System.out.println("Income Taxes is: " + one.callIncomeTax());
    System.out.println("Net Pay is: " + one.callNetPay());
    }
    else if (hoursWorked > 40.0)
    {
    System.out.println("Worker " + number + " Paycheck Information: ");
    System.out.println("Name is: " + firstName + " " + lastName);
    System.out.println("Weekly Pay is: " + one.callWeeklyPay(hoursWorked, hourlyWage));
    System.out.println("Income Taxes is: " + one.callIncomeTax());
    System.out.println("Net Pay is: " + one.callNetPay());

    System.out.println(" ");
    System.out.println(" ");

    System.out.println("Worker " + number + " Overtime Calculation");
    System.out.println("Name is: " + firstName + " " + lastName);
    System.out.println("Weekly Pay is: " + one.callOvertimePay());
    }
    }
    else
    {
        System.out.println("Total number of Employees processed: ");
    }
}
}


package paytime;

public class Employee {

private int empNumbers [] = {101, 103, 106, 109, 110, 113, 116, 118, 120};
public double weeklyPay, hoursWorked, hourlyWage, incomeTax, netPay, actualOvertimeHours, overtimePay, overtimeHours;
public double overtimeWage = hourlyWage * 1.5;

public boolean findEmpNumber(int number)
{
    boolean found = false;
    for (int sub = 0; sub < empNumbers.length; sub++)
    {
        if (number == empNumbers[sub])
        {
            found = true;
            break;
        }
    }
    return found;
}
private void calculateWeeklyPay(double hoursWorked, double hourlyWage) {

    weeklyPay = hoursWorked * hourlyWage;
}

public double callWeeklyPay(double hoursWorked, double hourlyWage) {

    calculateWeeklyPay(hoursWorked, hourlyWage);
    return weeklyPay;
}

private void calculateIncomeTax() {

    if (weeklyPay > 0.0 && weeklyPay <= 300.0)
    {
        incomeTax = weeklyPay * 0.10;
    }
    else if (weeklyPay > 300.1 && weeklyPay <= 400.0)
    {
        incomeTax = weeklyPay * 0.12;
    }
    else if (weeklyPay > 400.1 && weeklyPay <= 500.0)
    {
        incomeTax = weeklyPay * 0.15;
    }
    else if (weeklyPay > 500.1)
    {
        incomeTax = weeklyPay * 0.20;
    }
}

public double callIncomeTax() {

    calculateIncomeTax();
    return incomeTax;
}

private void calculateNetPay() {

    netPay = weeklyPay - incomeTax;
}

public double callNetPay() {

    calculateNetPay();
    return netPay;
}

private void calculateOvertimePay() {

    overtimeHours = hoursWorked -40;
    overtimePay = ovetimeHours * overtimeWage;
}

public double callOvertimePay() {

    calculateOvertimePay();
    return overtimePay;
}
}

1 Ответ

0 голосов
/ 24 ноября 2018

Когда вы вызываете метод callWeeklyPay, вычтите 40 из hoursWorked.

one.callWeeklyPay(hoursWorked - 40, hourlyWage));

Но я бы предложил перенести логику проверки сверхурочных (часов, превышающих 40) в класс Employee (callWeeklyPay метод) сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...