如何在这个java应用程序中实现mvc架构

f2uvfpb9  于 2021-06-26  发布在  Java
关注(0)|答案(3)|浏览(314)

我是java的初学者,有人给了我一个项目,让我编写一个简单的java应用程序,计算某个工人的每周净工资。现在我已经写了代码,但在一个类中,我需要使这个代码基于mvc架构,有人可以帮助吗?
编写一个计算工人每周净工资的应用程序。输入是工人的姓名、一周的工作时间和小时工资率。输出是工人的姓名和工资。工资计算如下:
总工资是工作时间乘以工资率。工作超过40小时,每小时支付50%的奖金。
从工资总额中扣除22%的工资税
代码如下:

import javax.swing.*;
import java.text.*;
public class workersNetPay {

    public static void main(String[] args) {
        String name = JOptionPane.showInputDialog("Write the name of the worker:");
        String hoursWorked = JOptionPane.showInputDialog("Write the hours worked during the week:");
        double hW = new Double(hoursWorked).doubleValue();
        String hourlyPayRate = JOptionPane.showInputDialog("Write the hourly pay rate:");
        double hpr = new Double(hourlyPayRate).doubleValue();
        double tax = 0.22;
        double grossPay = (hW*hpr)-((hW*hpr)*tax);
        double bonus = (grossPay * 0.5)+grossPay;
        String euro = "\u20AC";
        DecimalFormat formatter = new DecimalFormat("0.00");

        if (hW >  40) {
           JOptionPane.showMessageDialog(null, "Sir " + name + " your wage for this week is: " + formatter.format(bonus)+ euro);
        } else {
            JOptionPane.showMessageDialog(null,"Sir " + name + " your wage for this week is: " + formatter.format(grossPay)+ euro);
        }
    }
}

编辑:现在我已经写了模型和视图,但是有人能帮我用控制器吗
模型

public class Model {

    private double workersNetPay;

    public void calculate(double hoursWorked, double hourlyPayRate, double tax, double bonus, double grossPay) {

        tax = 0.22;

        if (hoursWorked> 40) {
           JOptionPane.showMessageDialog(null, bonus = (grossPay * 0.5) + grossPay);
        } else {
           JOptionPane.showMessageDialog(null,grossPay = (hoursWorked* hourlyPayRate)-((hoursWorked*hourlyPayRate)-tax));
        }
    }

    public double getWorkersNetPay() {
        return workersNetPay;
    }
}

景色

import java.awt.*;

import javax.swing.*;

public class view  {

    public String name() {

        String name = JOptionPane.showInputDialog("Write your name");

        return name;
    }

    public double hours() { 
        double h ;

        String hW = JOptionPane.showInputDialog("Write the hours worked during the week:");

        if (hW.matches("\\d+")) {
           h = Double.parseDouble(hW);
        } else {
            throw new IllegalArgumentException("You should write a number:");
        }

        return h;
    }

    public double hourlyPay() {
        double hp;

        String hpr = JOptionPane.showInputDialog("Write the hourly pay rate:");

        if (hpr.matches("\\d+")) { 
            hp = Double.parseDouble(hpr);
        } else {
             throw new IllegalArgumentException("You should write a number:");
        }

        return hp;
    }

    public void theResult(duoble result) { 
        JOptionPane.showMessageDialog(null, result, "Result", JOptionPane.INFORMATION_MESSAGE);
    }
}
n1bvdmb6

n1bvdmb61#

老实说,你应该做些调查。从“mvc java示例”开始。
祝你一切顺利

niwlg2el

niwlg2el2#

我认为您不了解mvc(model,view,controller)体系结构的概念。 The Model 是你的代码的一个地方,在那里你保存,读取和写入数据-你不做任何其他事情,如计算和东西。
在你的地方,我会创造一个 class Worker 它所需的私有成员,您可以在其中保存每个工人的数据。接下来,您可以创建某种数据结构来存储 Workers 你已经创造了,例如 HashMap 快速访问。 The View 是代码的一个地方,在这里只显示信息。 The Controller 是使 the Model 以及 the View 并使它们分开,这是坚实的设计原则的根源。
把这些事情掩盖起来,你的主要想法应该是这样的:

//create our model
 WorkerModel model = new WorkerModel(); 
 // create our view
 WorkerView view = new WorkerView(); 
 // create our controller
 WorkerController controller = new WorkerController(model, view); 
 Worker worker = controller.createNewWorker("John");
 controller.calculateWorkerSalary(worker, hoursWorked, hourlyPayRate);
 controller.saveWorker(worker);
 controller.updateView();

除此之外,我建议您遵循始终使用大写(“视图”->“视图”)编写java类的惯例,采取在同一行或新行上编写大括号的方式,但不能同时在这两行上编写,并且始终将右大括号保留在新行上!它将使您的代码更易于阅读!

hmae6n7t

hmae6n7t3#

我根据mvc模式重新编写了你的代码。这是最后一个作业窗格。

我创建了一个模型类, Worker .

public class Worker {

    private final double hoursWorked;
    private final double hourlyPay;
    private double grossPay;
    private double taxes;
    private double netPay;

    private final String name;

    public Worker(String name, double hoursWorked, 
            double hourlyPay) {
        this.name = name;
        this.hoursWorked = hoursWorked;
        this.hourlyPay = hourlyPay;
    }

    public String getName() {
        return name;
    }

    public void calculateGrossPay() {           
        if (hoursWorked > 40.0) {
            grossPay = 40.0 * hourlyPay + 
                    (hoursWorked - 40.0) * (hourlyPay * 1.5);
        } else {
            grossPay = hoursWorked * hourlyPay;
        }
    }

    public void calculateNetPay() {
        this.taxes = grossPay * 0.22;
        this.netPay = grossPay - taxes;
    }

    public double getHoursWorked() {
        return hoursWorked;
    }

    public double getHourlyPay() {
        return hourlyPay;
    }

    public double getGrossPay() {
        return grossPay;
    }

    public double getTaxes() {
        return taxes;
    }

    public double getNetPay() {
        return netPay;
    }

}

这个 Worker 类是一个带有getter和setter的普通java类。这些计算包含在model类中,因为它们对于模型的每个示例都是相同的 Worker . 当计算代码包含在模型中时,计算代码在控制器方法中执行。
视图由 WorkersPayExample 班级。控制器由一个公共方法组成,即 createWorkerPayStub 方法。在这个简单的示例中,很难创建控制器类。
下面是完整的可运行代码。

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class WorkersPayExample {

    public static void main(String[] args) {
        WorkersPayExample example = new WorkersPayExample();
        example.createWorkerPayStub();
    }

    public void createWorkerPayStub() {
        Worker worker = getWorkerInformation();
        worker.calculateGrossPay();
        worker.calculateNetPay();
        showResult(worker);
    }

    private Worker getWorkerInformation() {
        String name = getName();
        double hoursWorked = getHoursWorked();
        double hourlyPay = getHourlyPay();
        return new Worker(name, hoursWorked, hourlyPay);
    }

    private String getName() {
        String name = JOptionPane.showInputDialog("Write your name");
        return name;
    }

    private double getHoursWorked() {
        double hoursWorked;
        String hW = JOptionPane.showInputDialog("Write the hours "
                + "worked during the week:");

        if (hW.matches("\\d+")) {
            hoursWorked = Double.parseDouble(hW);
        } else {
            throw new IllegalArgumentException("You should write a number:");
        }

        return hoursWorked;
    }

    private double getHourlyPay() {
        double hourlyPay;
        String hpr = JOptionPane.showInputDialog("Write the hourly pay rate:");

        if (hpr.matches("\\d+")) {
            hourlyPay = Double.parseDouble(hpr);
        } else {
            throw new IllegalArgumentException("You should write a number:");
        }

        return hourlyPay;
    }

    private void showResult(Worker worker) {
        JTextArea textArea = new JTextArea(7, 30);
        textArea.setFont(new Font("monospaced", Font.PLAIN, 16));

        StringBuilder builder = new StringBuilder();
        builder.append("Pay stub for ").append(worker.getName());
        builder.append(System.lineSeparator());
        builder.append(System.lineSeparator());

        builder.append(String.format("%-20s", "Hours Worked"));
        builder.append(String.format("%9.2f", worker.getHoursWorked()));
        builder.append(System.lineSeparator());

        builder.append(String.format("%-20s", "Hourly Pay"));
        builder.append(String.format("%9.2f", worker.getHourlyPay()));
        builder.append(System.lineSeparator());

        builder.append(String.format("%-20s", "Gross Pay"));
        builder.append(String.format("%9.2f", worker.getGrossPay()));
        builder.append(System.lineSeparator());

        builder.append(String.format("%-20s", "Taxes"));
        builder.append(String.format("%9.2f", worker.getTaxes()));
        builder.append(System.lineSeparator());

        builder.append(String.format("%-20s", "Net Pay"));
        builder.append(String.format("%9.2f", worker.getNetPay()));
        builder.append(System.lineSeparator());

        textArea.setText(builder.toString());

        JOptionPane.showMessageDialog(null, textArea, "Result", 
                JOptionPane.INFORMATION_MESSAGE);
    }

    public class Worker {

        private final double hoursWorked;
        private final double hourlyPay;
        private double grossPay;
        private double taxes;
        private double netPay;

        private final String name;

        public Worker(String name, double hoursWorked, 
                double hourlyPay) {
            this.name = name;
            this.hoursWorked = hoursWorked;
            this.hourlyPay = hourlyPay;
        }

        public String getName() {
            return name;
        }

        public void calculateGrossPay() {           
            if (hoursWorked > 40.0) {
                grossPay = 40.0 * hourlyPay + 
                        (hoursWorked - 40.0) * (hourlyPay * 1.5);
            } else {
                grossPay = hoursWorked * hourlyPay;
            }
        }

        public void calculateNetPay() {
            this.taxes = grossPay * 0.22;
            this.netPay = grossPay - taxes;
        }

        public double getHoursWorked() {
            return hoursWorked;
        }

        public double getHourlyPay() {
            return hourlyPay;
        }

        public double getGrossPay() {
            return grossPay;
        }

        public double getTaxes() {
            return taxes;
        }

        public double getNetPay() {
            return netPay;
        }

    }

}

相关问题