不能用不同的方法打破小工资系统

时间:2017-05-17 05:30:36

标签: java

我想首先说我是Java的新手,这也是我第一次在这个网站上提问。在试图弄清楚如何在方法中打破这个小程序3天后,我还没有能够这样做。有人可以帮我吗?

我一直在阅读,看起来我违反了单一责任原则。任何意见都会受到欢迎。

public class RateSystem {

    double employeeSalary;

    public int salaryRate(String employeePosition) {

        if (employeePosition.equalsIgnoreCase("1")) {
            return 40;
        } else if (employeePosition.equalsIgnoreCase("2")) {
            return 30;
        } else
            employeePosition.equalsIgnoreCase("3");

        return 50;

    }

}
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("Employee position please...");

        System.out.println("Press 1 for IT " + "\n" + "Press 2 for Tech" + 
                           "\n" + "Press 3 for engineer");

        String ePosition = input.nextLine();
        RateSystem raul = new RateSystem();
        int getPay = raul.salaryRate(ePosition);

        System.out.println("How many hours did he work for the week?...");
        int weekHours = input.nextInt();

        int totalPay = 0;
        if (weekHours <= 40) {
            totalPay = getPay * weekHours;

            System.out.println("Employee salary is " + totalPay);
        } else {

            int overTimeHours = weekHours - 40;
            int extra$$PerOverTime = overTimeHours * getPay +(overTimeHours * getPay/2);

            totalPay = getPay * (weekHours - overTimeHours);

            System.out.println("The employee accumulated 40 hours equivalent to $"+ 
totalPay + " plus $" + extra$$PerOverTime + " overtime hours, a total of $"+(extra$$PerOverTime + totalPay));


        }

    }

}

5 个答案:

答案 0 :(得分:0)

如果我们查看main(),它会执行多项任务:

  1. 接收用户输入
  2. 计算总薪资和可能的其他财务信息
  3. 打印结果
  4. 初学者的表现如何

答案 1 :(得分:0)

我看到可以添加以下内容。

1)为员工创建工资,为什么不创建和Employee类,并在其中封装详细信息,如&#34; employeePosition&#34;。因此,您可以在以后添加更多内容并在其中设置setter,您将有机会更改员工的setter逻辑。

2)您可以创建一个Calculator类并创建接受单个Employee或Employees列表的方法,并计算他们的工资率。

3)您还可以添加打印相关课程。因此,您可以为单个或员工列表生成不同的打印,或者可能类似于表格格式。

答案 2 :(得分:0)

我在您的代码中确定了以下方法。

1)showMainMenu - &gt;负责向用户显示菜单

2)readMenuSelection - &gt;在这里,您将阅读主菜单中选择的任何用户。应该用int值而不是string来读取它。

3)对于菜单中的每个选择,将有单独的方法,如payForIT(),payForTech()和payForEngineer()

答案 3 :(得分:0)

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("Employee position please...");

        System.out.println("Press 1 for IT " + "\n" + "Press 2 for Tech" + "\n" + "Press 3 for engineer");

        String position = input.nextLine();
        RateSystem rateSystem = new RateSystem();
        rateSystem.setEmployeePosition(position);

        System.out.println("How many hours did he work for the week?...");
        int weekHours = input.nextInt();
        rateSystem.setWeekHours(weekHours);

        rateSystem.calculateSalary();

        int totalPay = rateSystem.getTotalPay();
        int overTime = rateSystem.getOvertime();

        if (overTime > 0) {
            System.out.println("The employee accumulated 40 hours equivalent to $" + totalPay + " plus $" + overTime
                    + " overtime hours, a total of $" + (overTime + totalPay));
        } else {
            System.out.println("Employee salary is " + totalPay);
        }

    }

}



public class RateSystem {

    private final int STANDARD_WORK = 40;

    private double employeeSalary;

    private int weekHours;

    private Position employeePosition;

    private int totalPay = 0;

    private int overTime = 0;

    public void setEmployeePosition(String position) {
        employeePosition = Position.fromString(position);
    }

    public void setWeekHours(int weekHours) {
        this.weekHours = weekHours;
    }

    public int getTotalPay() {
        return totalPay;
    }

    public int getOvertime() {
        return overTime;
    }

    public void calculateSalary() {
        int salaryRate = employeePosition.getRate();

        int workhours = (weekHours > STANDARD_WORK) ? STANDARD_WORK : weekHours;
        int overTimeHours = (weekHours > STANDARD_WORK) ? (weekHours - STANDARD_WORK) : 0;

        totalPay = workhours * weekHours;

        overTime = (overTimeHours * salaryRate) + (overTimeHours * salaryRate / 2);
    }
}



public enum Position {
    IT(40), Tech(30), Engineer(50);

    private int rate = 0;

    Position(int r) {
        rate = r;
    }

    public int getRate() {
        return rate;
    }

    public static Position fromString(String position) {
        switch (position) {
        case "1":
            return IT;
        case "2":
            return Tech;
        case "3":
            return Engineer;
        }
        return null;
    }
}

答案 4 :(得分:-1)

要遵循单一责任原则,您必须为程序中的每个常见任务创建方法。这有助于不重复代码并有助于在一个地方修改代码。

我已经创建了单独的方法来构建字符串和打印字符串,因为在代码中经常使用它:

package com.stackoverflow.main;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        println("Employee position please...");

        println(buildString("Press 1 for IT ", "\n", "Press 2 for Tech", "\n", "Press 3 for engineer"));

        String ePosition = input.nextLine();
        RateSystem raul = new RateSystem();
        int getPay = raul.salaryRate(ePosition);

        println("How many hours did he work for the week?...");
        int weekHours = input.nextInt();

        int totalPay = 0;
        if (weekHours <= 40) {
            totalPay = getPay * weekHours;

            println(buildString("Employee salary is ", String.valueOf(totalPay)));
        } else {

            int overTimeHours = weekHours - 40;
            int extra$$PerOverTime = overTimeHours * getPay + (overTimeHours * getPay / 2);

            totalPay = getPay * (weekHours - overTimeHours);

            println(buildString("The employee accumulated 40 hours equivalent to $", String.valueOf(totalPay),
                    " plus $", String.valueOf(extra$$PerOverTime), " overtime hours, a total of $",
                    String.valueOf((extra$$PerOverTime + totalPay))));

        }

    }

    private static String buildString(String... strings) {
        StringBuilder builder = new StringBuilder();
        for (String string : strings) {
            builder.append(string);
        }
        return builder.toString();
    }

    private static void println(String s) {
        System.out.println(s);
    }
}

班级RateSystem

package com.stackoverflow.main;

public class RateSystem {

    double employeeSalary;

    public int salaryRate(String employeePosition) {

        if (equalsIgnoreCase(employeePosition, "1")) {
            return 40;
        } else if (equalsIgnoreCase(employeePosition, "2")) {
            return 30;
        } else if (equalsIgnoreCase(employeePosition, "3"))
            return 50;
        return 0;
    }

    private boolean equalsIgnoreCase(String arg1, String arg2) {
        return arg1.equalsIgnoreCase(arg2);
    }
}