Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Instructions Files you need to submit: Department.java, Employee.java, Consultan

ID: 3911125 • Letter: I

Question

Instructions

Files you need to submit: Department.java, Employee.java, Consultant.java, and SalariedEmployee.java.

Use the UML EmployeeUML to implement the four classes: Department, Employee, Consultant, and SalariedEmployee. Use the provided EmployeeTest to test your implementation.

If implemented correctly, the output of your program should look exactly like the following:

Executive 100

Research 112

Engineering 115

Production 120

Accounting 122

100 Steve Jobs Executive 100 1.0E8

200 Bill Joy Research 112 3.0E7

300 James Gosling Engineering 115 3.0E7

1100 Craig McClanahan Production 120 25000.0

400 Kevin Malone Accounting 122 5156700.0

Research 112

===========================================================

Provided files

depts text file

Executive 100
Research 112
Engineering 115
Production 120
Accounting 122

==================================

Provided EmployeeTest.java

import java.io.File;

import java.io.FileNotFoundException;

import java.util.ArrayList;

import java.util.Scanner;

public class EmployeeTest {

public static void main(String[] args) {

ArrayList<Department> depts = readDepartmentsFromFile("depts.txt");

displayDepartments(depts);

ArrayList<Employee> company = new ArrayList<>();

populateEmployeeArray(company, depts);

// Display everyone's pay w/o referring to the subclasses (i.e., using Employee only)

for (Employee e : company) {

System.out.println(e);

}

// Display all departments that are equal to this one:

Department d1 = new Department("Research", 112);

for (Department d : depts) {

if (d1.equals(d)) {

System.out.println(d);

}

}

// Display all departments that are equal to this one:

Department d2 = new Department("Accounting", 50);

for (Department d : depts) {

if (d2.equals(d)) {

System.out.println(d);

}

}

}

private static void displayDepartments(ArrayList<Department> list) {

// Display the list to standard error (NOT standard output)

for (Department d : list) {

System.err.println(d);

}

}

private static ArrayList<Department> readDepartmentsFromFile(String filename) {

ArrayList<Department> list = new ArrayList<>();

File file = new File(filename);

Scanner sc = null;

try {

sc = new Scanner(file);

while (sc.hasNext()) {

String dept = sc.next();

int building = sc.nextInt();

list.add(new Department(dept, building));

}

} catch (FileNotFoundException e) {

System.err.println("Department file not found: " + e.getMessage());

} finally {

if (sc != null) {

sc.close();

}

}

return list;

}

public static void populateEmployeeArray(ArrayList<Employee> array,

ArrayList<Department> departments) {

SalariedEmployee exec = new SalariedEmployee(100, "Steve", "Jobs",

departments.get(0), 100000000);

SalariedEmployee architect = new SalariedEmployee(200, "Bill", "Joy",

departments.get(1), 30000000);

SalariedEmployee engineer = new SalariedEmployee(300, "James",

"Gosling", departments.get(2), 30000000);

Consultant consultant = new Consultant(1100, "Craig", "McClanahan",

departments.get(3), 25000);

SalariedEmployee accountant = new SalariedEmployee(400, "Kevin",

"Malone", departments.get(4), 5156700);

array.add(exec);

array.add(architect);

array.add(engineer);

array.add(consultant);

array.add(accountant);

}

}

Executive 100

Research 112

Engineering 115

Production 120

Accounting 122

100 Steve Jobs Executive 100 1.0E8

200 Bill Joy Research 112 3.0E7

300 James Gosling Engineering 115 3.0E7

1100 Craig McClanahan Production 120 25000.0

400 Kevin Malone Accounting 122 5156700.0

Research 112

Explanation / Answer

Below are your classes.

Department.java

public class Department {

private String name;

private int buildingNumber;

public Department(String dept, int id) {

this.name = dept;

this.buildingNumber = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getBuildingNumber() {

return buildingNumber;

}

public void setBuildingNumber(int buildingNumber) {

this.buildingNumber = buildingNumber;

}

public String toString() {

return this.name + " " + this.buildingNumber;

}

}

Employee.java

public class Employee {

private int badgeNumber;

private String firstName;

private String lastName;

private Department department;

public Employee(int bNo, String fName, String lName, Department dept) {

this.badgeNumber = bNo;

this.firstName = fName;

this.lastName = lName;

this.department = dept;

}

public int getBadgeNumber() {

return badgeNumber;

}

public void setBadgeNumber(int badgeNumber) {

this.badgeNumber = badgeNumber;

}

public String getFirstName() {

return firstName;

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

public String getLastName() {

return lastName;

}

public void setLastName(String lastName) {

this.lastName = lastName;

}

public Department getDepartment() {

return department;

}

public void setDepartment(Department department) {

this.department = department;

}

public String toString() {

return this.badgeNumber + " " + this.firstName + " " + this.lastName + " " + this.department;

}

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + badgeNumber;

result = prime * result + ((department == null) ? 0 : department.hashCode());

result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());

result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());

return result;

}

public boolean equals(Object obj) {

if (this == obj) {

return true;

}

if (obj == null) {

return false;

}

if (!(obj instanceof Employee)) {

return false;

}

Employee other = (Employee) obj;

if (badgeNumber != other.badgeNumber) {

return false;

}

if (department == null) {

if (other.department != null) {

return false;

}

} else if (!department.equals(other.department)) {

return false;

}

if (firstName == null) {

if (other.firstName != null) {

return false;

}

} else if (!firstName.equals(other.firstName)) {

return false;

}

if (lastName == null) {

if (other.lastName != null) {

return false;

}

} else if (!lastName.equals(other.lastName)) {

return false;

}

return true;

}

}

Consultant.java

public class Consultant extends Employee {

private double hourlyRate;

public Consultant(int bNo, String fName, String lName, Department dept) {

super(bNo, fName, lName, dept);

}

public Consultant(int bNo, String fName, String lName, Department dept, double rate) {

super(bNo, fName, lName, dept);

this.hourlyRate = rate;

}

public double getHourlyRate() {

return hourlyRate;

}

public String toString() {

return super.toString()+ " "+hourlyRate;

}

public int hashCode() {

final int prime = 31;

int result = super.hashCode();

long temp;

temp = Double.doubleToLongBits(hourlyRate);

result = prime * result + (int) (temp ^ (temp >>> 32));

return result;

}

public boolean equals(Object obj) {

if (this == obj) {

return true;

}

if (!super.equals(obj)) {

return false;

}

if (!(obj instanceof Consultant)) {

return false;

}

Consultant other = (Consultant) obj;

if (Double.doubleToLongBits(hourlyRate) != Double.doubleToLongBits(other.hourlyRate)) {

return false;

}

return true;

}

}

SalariedEmployee.java

public class SalariedEmployee extends Employee{

private double annualSalary;

public SalariedEmployee(int bNo, String fName, String lName, Department dept) {

super(bNo, fName, lName, dept);

}

public SalariedEmployee(int bNo, String fName, String lName, Department dept, double rate) {

super(bNo, fName, lName, dept);

this.annualSalary = rate;

}

public double getAnnualSalary() {

return annualSalary;

}

public String toString() {

return super.toString()+ " "+annualSalary;

}

public int hashCode() {

final int prime = 31;

int result = super.hashCode();

long temp;

temp = Double.doubleToLongBits(annualSalary);

result = prime * result + (int) (temp ^ (temp >>> 32));

return result;

}

public boolean equals(Object obj) {

if (this == obj) {

return true;

}

if (!super.equals(obj)) {

return false;

}

if (!(obj instanceof SalariedEmployee)) {

return false;

}

SalariedEmployee other = (SalariedEmployee) obj;

if (Double.doubleToLongBits(annualSalary) != Double.doubleToLongBits(other.annualSalary)) {

return false;

}

return true;

}

}