首页 > 其他分享 >HourlyEmployee 和SalariedEmployee 设计模式实现

HourlyEmployee 和SalariedEmployee 设计模式实现

时间:2024-10-09 16:11:31浏览次数:6  
标签:salary code HourlyEmployee public SalariedEmployee employee 设计模式 your

1.1 Introduction

Note: This assignment is a bit different from the previous homework, and asks you topractice with JUnit 5. Ensure you read the instructions carefully and submit what isrequired.Volunteer work is admirable, but many people enjoy being paidfor the work they do for an employer. Depending on the type ofemployee, said employee may be paid by the hour, a fixed rate(salaried), or be on some bonus/commission payment scale.For this assignment, I provide an interface called IEmployee. Donot modify, extend, or in any way alter this interface - other thanto embellish the JavaDoc if required to pass the checkStyle tests.You will create two concrete classes that implement thisinterface: HourlyEmployee and SalariedEmployee. You willalso provide a test class that will test your code. This class mustbe named IEmployeeTest.

1.2 What to do

EMPLOYEES

All of your assets for this assignment must be placed in apackage named student.We're dealing with money for this example (US dollars). Considerinvestigating the BigDecimal and DecimalFormat classes tohelp you deal with fractional items. The rounding mode youshould use for this assignment is RoundingMode.HALF_UP (inother words, round up the fractional parts beyond the second

decimal place)You must implement the provided IEmployee interface.

package student;

/**

* An interface representing the concept of Employees. */

public interface IEmployee {

// NOTES (you may remove these notes after you understand the assignment if they

cause checkStyle issues):

// The max HOURLY base salary is $50.00 (per hour).

// The max Salaried base salary is $1 million per year.

// HourlyEmployees earn 1.5x base salary for any time worked > 40 hours in a

period.

// SalariedEmployees are paid monthly. For one pay period their salary should be

baseSalary/12

 

/**

* @return the employee's pay for the given period.

* Hourly employees are paid weekly based on the number of hours worked.

* Salaried employees are paid monthly, with a given paycheck of 1/12 their yearly

salary

*

*/

double getPayForThisPeriod();

/**

* @return the employee's base salary.

* Hourly employees answer their hourly rate.

* Salaried employees answer their yearly salary

*/

double getBaseSalary();

/**

* @param raisePercent raises the employee's base salary from 0% (minimum) to 10%

maximum.

* The parameter is a value between 0.0 and 10.0. This method converts that value

to a decimal value

* 0 - 0.10 when required for calculations.

*/

void giveRaiseByPercent(double raisePercent);

/**

* @return Returns employee ID.

*/

String getID();

/**

* @return Returns employee name.

*/

String getName();

}

Create two concrete classes (remember, both of these classes

should be created in the student package as

well): HourlyEmployee and SalariedEmployee.Your HourlyEmployee class must include a constructor that

follows this signature:

public HourlyEmployee(String name, String id, double hourlySalary, double normalHours)

HourlyEmployees also have an additional method NOT listed

in the shared interface:

/**

* This method allows HourlyEmployees to supersede the number of hours worked for the

week.

*/

public void setSpecialHours(double hours)

HourlyEmployees have a name, ID, and an hourly salary. Whencreated, these employees specify the "normal" number of hoursthey typically work each week. The weekly hours cannot be lessthan zero (0) and cannot be more than 80.0. If this constraint isnot met, your HourlyEmployee should throw

an IllegalArgumentException.An HourlyEmployee also gets paid "time and one-half" (1.5x)for any hours worked over 40.0hours. HourlyEmployees override their "normal" hours bycalling the setSpecialHours() method. By calling thismethod, an HourlyEmployee temporarily sets their "hours forthe week" to the value passed to this method (same constraintsas described above - 代 写SalariedEmployee the value must be between 0 and 80.0hours).This "override" does not persist, so after the method getPayForThisPeriod() is called, the employee's "normal hours" are re-activated for any subsequent payments.Your SalariedEmployee class must include a constructor thatfollows this signature:public SalariedEmployee(String name, String id, double yearlySalary)For both types of employees, if their constructors are given a

salary less than zero (0) or greater than the maximum allowablesalary (based on the type of employee), throwan IllegalArgumentException.For both types of employees, if their constructors are given null

or an empty String ("") for either the name or ID, throw

an IllegalArgumentException.When the giveRaiseByPercent() method is called for either

type of employee, the base salary for the employee object shouldbe increased by the percentage specified by the parameterpassed in. Allowable values for the raisepercentage is anynumber between 0 and 10.0. Any value outside of this rangeshould raise an IllegalArgumentException.

Note: The maximum salary constraint must be maintained during

this operation. Therefore, if a "raise" request would take the employee's salary above the maximum, this request should be

ignored. Do NOT throw an exception. Instead, leave the employee's salary unchanged. void giveRaiseByPercent(double raisePercent);

 

IEmployeeTest

Design your IEmployeeTest class to be a JUnit5 test class.

Here is some starter code - you may opt to use this if you wish:

// This is a placeholder for student code.

package student;

import org.junit.jupiter.api.*;

import static org.junit.jupiter.api.Assertions.*;

public class IEmployeeTest {

HourlyEmployee snoopyHours = new HourlyEmployee("Snoopy", "111-CHLY-BRWN", 17.50,

20);

SalariedEmployee lucy = new SalariedEmployee("Lucy", "222-22-2222", 70000.00);

IEmployee woodStock = new SalariedEmployee("Woodstock", "33-CHIRP", 180000.50);;

// sample test provided to students

@Test

public void testGetErrorWhenCreatingEmployee() {

Assertions.assertThrows(IllegalArgumentException.class, () -> { IEmployee e = new HourlyEmployee(null, null, 15.51, 30);

});

Assertions.assertThrows(IllegalArgumentException.class, () -> {

IEmployee e = new HourlyEmployee("Part-timer", "PT-TIME", -1, 30);

});

}

@Test

public void testGetHappyDayEmployee() {

}

@Test

public void testGetPayForThisPeriod() {

}

@Test

public void testGetBaseSalary() {

}

@Test

public void testGetID() {

}

@Test

public void testGetName() {

}

}

Note: Unlike our the assignments we'll be doing for the rest ofthe semester, I'm asking you to place ALL of your assets in thesame package (the one called student).You need to have the six methods prefixed by "testGet" methodsabove. The automated grader we're using for this assignment isdifferent than the one used on homework 1 & 2, so your testmethods need to follow this form. Spelling and case-sensitivity is

important here so I suggest you copy the template given above.You should write more tests than what I've given you here.

However, at the very least, be sure you develop the six "startertests" I've given you.Notes:

For this assignment, we'll be running your JUnit tests againstyour code, our exemplar code (what we think is correct) and asample of code in which we have purposely injected some bugs/defects. Of course, your tests should validate your code (and

your solution should pass your tests). Additionally, your JUnittests will be evaluated on how well it exercises our code (anddetects the errors we have in the "buggy" solution). We'll also berunning a test code coverage analyzer to see how much of yoursolution code you test with your JUnit. Part of your grade will becalculated based on code coverage (of your own code, not ofours).You should provide a suitable .toString() method for

As part of your submission, rememberCreate a UML class diagram that describes your solutionand include it with your submission

标签:salary,code,HourlyEmployee,public,SalariedEmployee,employee,设计模式,your
From: https://www.cnblogs.com/comp9313/p/18450893

相关文章

  • Python 享元模式:高效利用内存的设计模式
    在Python编程中,随着程序规模的增大和数据量的增加,内存管理变得至关重要。享元模式(FlyweightPattern)作为一种结构型设计模式,为我们提供了一种在某些场景下有效管理内存、提高系统性能的方法。本文将深入探讨Python中的享元模式,包括其概念、关键要点、实现方式、应用场景......
  • Python 外观模式:简化复杂系统交互的设计模式
    在软件开发过程中,随着系统规模的不断扩大和功能的日益复杂,子系统之间的交互可能变得错综复杂。Python中的外观模式(FacadePattern)提供了一种有效的解决方案,它能够简化这些复杂的交互,为客户端提供一个统一、易用的接口来访问系统。本文将深入探讨Python中的外观模式,详细阐......
  • Observable(观察者)设计模式
    前言Observable设计模式存在于许多JavaAPI和响应式编程中。下面介绍Java中永恒的Observable模式。Observable设计模式用于许多重要的JavaAPI。一个众所周知的示例是使用ActionListenerAPI执行操作的JButton。在这个例子中,我们ActionListener在按钮上进行了监听或观察。单击......
  • 设计模式-建造者模式
    什么是建造者模式?建造者模式是通过将多个简单对象通过一步步的组装构建出一个复杂对象的过程。简单模拟场景:装修公司的套餐服务,豪华、简约风格。比如对于吊顶和地板,有一级二级吊顶,一级二级地板等。按不同的套餐价格选取不同的组合。物料接口:publicinterfaceMatter{......
  • 模板设计模式
    模板设计模式是一种行为设计模式,它在一个方法中定义了一个算法的骨架,而将一些步骤的实现延迟到子类中。结构抽象类(AbstractClass)定义了模板方法(TemplateMethod),它包含了算法的骨架,通常是一个final方法,以防止子类重写整个算法流程。同时定义了一些抽象方法(AbstractMethod),这......
  • 数据设计模式一般很抽象
      Java的设计模式和其他语言的编程开发设计模式通用。设计模式分为架构模式和程序开发的设计模式。系统的架构模式分为CS架构和BS架构。单机版本的系统架构模式是继承与C/C++的开发项目软件。C/C++擅长技术的底层实现。驱动软件和操作系统也是应用程序。基于操作系统可以运......
  • 设计模式与非设计模式什么情况下使用
    一、特点    1、设计模式:        a、经验总结:                        设计模式是前人根据经验总结出来的,使用设计模式,就相当于是站在了前人的肩膀上。        b、可读性‌:              ......
  • 设计模式:异步处理文件常用设计模式
    引言在java中,基于系统系统性能考虑,大文件导入和导出大多采用异步模式。那么如何设计既不会造成代码冗余也有利于后续更好的扩展呢?以下将介绍三种不同的设计方案:正文1.工厂模式+模板方法模式1.1.设计思路使用工厂模式创建不同的文件导入处理器(如CSV导入、Excel导......
  • c#代码介绍23种设计模式_12亨元模式
    目录1、享元模式的实现精髓2、享元模式的正式定义3、亨元模式实现4、涉及的角色如下几种角色5、享元模式的优缺点6、使用场景7、实现思路在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内......
  • c#代码介绍23种设计模式_13代理模式
    目录1、代理模式的详细介绍2、代理模式定义3、代理模式实现4、代理模式所涉及的角色5、代理模式的优缺点6、实现思路在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可......