CSE1242 Project 6 Solved

30.00 $

Category: Tags: , ,
Click Category Button to View Your Next Assignment | Homework

You'll get a download link with a: zip solution files instantly, after Payment

Securely Powered by: Secure Checkout

Description

Rate this product

In this homework, you are expected to implement a simple company system with the following OOP class hierarchy:

Customer

Person

Manager

Employee

Person

RegularEmployee

Please find the class details in below.
1) Implement a Person class with the following UML diagram.

SalesEmployee

Developer

id: int
firstName: String
lastName: String
gender: byte
birthDate: java.util.Calendar
maritalStatus: byte
hasDriverLicence: boolean

Person(int id, String firstName, String lastName, String gender, Calendar birthDate, String maritalStatus, String hasDriverLicence)

setGender(gender: String): void getGender(): String setMaritalStatus(status: String) getMaritalStatus(): String setHasDriverLicence(info: String): void getHasDriverLicence(): String toString(): String

getter/setter methods for other data fields

– – – – – – –

+

+ + + + + + + +

• • •

Person is the superclass of Customer and Employee classes.
Person class has several data fields, getter/setter and toString methods.

Each person should have an id, a name, a surname, a gender (1: woman, 2: man), birthDate (05/05/2000), maritalStatus (1: single, 2: married) and hasDriverLicense attributes.

 

  • Since the parameter/return value types are different for getter/setter methods of gender, maritalStatus, and hasDriverLicence attributes, we show them in the UML diagram. You are responsible for implementing getter/setter methods of all data fields.
  • In setGender method, a string value (“Man” or “Woman”) is given, and the method should set the gender as 1 or 2.
  • In getGender method, a string value (“Man” or “Woman”) should be returned based on the gender value.
  • In setMaritalStatus method, a string value (“Single” or “Married”) is given, and the method should set the maritalStatus as 1 or 2.
  • In getMaritalStatus method, a string value (“Single” or “Married”) should be returned based on the maritalStatus value.
  • In setHasDriverLicence method, a string value (“Yes” or “No”) is given, and the method should set the hasDriverLicence as true or false.
  • In getHasDriverLicence method, a string value (“Yes” or “No”) should be returned based on the hasDriverLicence value.
  • There are setter/getter and toString() methods.

2) Implement a Customer class with the following UML diagram. Customer

– +

+ + +

products:ArrayList<Product>

Each Customer can be created with one of the given two constructors.
o In Customer’s constructor, you are supposed to call the super class’s constructor.

Each Customer has a list of products that he/she bought. There are setter/getter and toString() methods.

Customer(int id, String firstName, String lastName, String gender, Calendar birthDate, String maritalStatus,String hasDriverLicence, ArrayList<Product> products)

Customer(Person person, ArrayList<Product> products) getter/setter methods
toString(): String

• •

3) Implement an Employee class with the following UML diagram. Employee

– – – +

+

+

+ + +

salary: double
hireDate: java.util.Calendar
department: Department
numberofEmployees: int

Employee(int id, String firstName, String lastName, String gender, Calendar birthDate, String maritalStatus, String hasDriverLicence, double salary, Calendar hireDate, Department department)

Employee(Person person, double salary, Calendar hireDate, Department department)

raiseSalary(percent: double): double raiseSalary(amount: int): double getter/setter/toString methods

• •

Employee is the superclass of Manager and RegularEmployee classes.
Each Employee has a salary, a hireDate (the date when the employee starts to the job), a department

and numberofEmployees data fields.
Each Empoyee can be created with one of the given two constructors.

o In Employee’s constructor, you are supposed to call the super class’s constructor.
o When a new employee is created, you should increment the value of numberofEmployees by

1.
There are two overloaded implementations of raiseSalary method.

o In the first one, take the increment value as a double (0 >= percent >= 1) and raise the salary value based on the percentage value. For example, if the percent value is 0.5, increment the salary of the employee by 50%.

o In the second one, raise the salary of the employee by the given fixed amount. There are setter/getter and toString() methods.

4) Implement a RegularEmployee class with the following UML diagram. RegularEmployee

– –

+

+ +

  performanceScore: double
  bonus: double

RegularEmployee is the superclass of SalesEmployee and Developer classes.
Each RegularEmployee has a performanceScore and an amount of bonus, which will be given by

his/her manager based on the performance score.

RegularEmployee(int id, String firstName, String lastName, String gender, Calendar birthDate, String maritalStatus, String hasDriverLicence, double salary, Calendar hireDate, Department department, double performanceScore)

RegularEmployee(Employee employee, double perfScore) getter/setter and toString methods

• •

• Each RegularEmployee can be created with one of the given two constructors.
o In RegularEmployee’s constructor, you are supposed to call the super class’s constructor.

• There are setter/getter and toString() methods.
5) Implement a Manager class with the following UML diagram.

– –

+

+ + + + +

Manager

regularEmployees:ArrayList<RegularEmployee> bonusBudget:double

Manager(int id, String firstName, String lastName, String gender, Calendar birthDate, String maritalStatus, String hasDriverLicence, double salary, Calendar hireDate, Department department,double bonusBudget)

Manager(Employee employee, double bonusBudget) addEmployee(e: RegularEmployee): void removeEmployee(e: RegularEmployee): void distributeBonusBudget(): void getter/setter/toString methods

• •

• • •

Each Manager has a set of regularEmployees working in his/her department and a bonusBudget to distribute to the regular employees in the department.

Each Manager can be created with one of the given two constructors.
o In Manager’s constructor, you are supposed to call the super class’s constructor.

In addEmployee method, you should add the given RegularEmployee e to the list of regularEmployees.

In removeEmployee method, you should remove the given RegularEmployee e from the list of regularEmployees.

Each Manager has bonusBudget to distribute it to the regular employees working in his/her department. The distribution will be based on the given formula:

o Suppose that the bonus budget of the manager is 10000 and there are 4 regular employees in the department with the following salaries and performance scores:

▪ E1→salary: 1000, performanceScore: 50 ▪ E2→salary: 2000, performanceScore: 50 ▪ E3→salary: 6000, performanceScore: 75 ▪ E4→salary: 4000, performanceScore: 100

o Then, the bonus value of each regular employee is:
▪ bonus = unit * salary * performanceScore
▪ unit = bonusBudget / ∑(𝐬𝐚𝐥𝐚𝐫𝐲 ∗ 𝐩𝐞𝐫𝐟𝐨𝐫𝐦𝐚𝐧𝐜𝐞𝐒𝐜𝐨𝐫𝐞)

o Based on the example above, the bonus value for each regular employee is:

  • ▪  E1→bonus: 500
  • ▪  E2→bonus: 1000
  • ▪  E3→bonus: 4500
  • ▪  E4→bonus: 4000

    There are setter/getter and toString() methods. 4/8

 

6) Implement a SalesEmployee class with the following UML diagram. SalesEmployee

– +

+

+ + + +

sales:ArrayList<Product> numberOfSalesEmployees:int

SalesEmployee(int id, String firstName, String lastName, String gender, Calendar birthDate, String maritalStatus, String hasDriverLicence, double salary, Calendar hireDate, Department department, double pScore, ArrayList<Product> s)

SalesEmployee(RegularEmployee re, ArrayList<Product> s) addSale(s: Product): boolean
removeSale(s: Product ): boolean
getter/setter/toString methods

• •

• • •

Each SalesEmloyee has a set of sales that contains a product list that the SalesEmployee sells and a numberOfSalesEmployees data fields.

Each SalesEmloyee can be created with one of the given two constructors.

o In SalesEmloyee’s constructor, you are supposed to call the super class’s constructor.

o When you create a new SalesEmloyee, you should increment numberOfSalesEmployees value by 1.

In addSale method, you should add the given Product s to the list of sales.
In removeSale method, you should remove the given Product s from the list of sales There are setter/getter and toString() methods.

7) Implement a Developer class with the following UML diagram. Developer

– +

+

+ + + +

projects:ArrayList<Project> numberOfDevelopers:int

Developer(int id, String firstName, String lastName, String gender, Calendar birthDate, String maritalStatus, String hasDriverLicence, double salary, Calendar hireDate, Department department, double pScore, ArrayList<Project> p)

Developer(RegularEmployee re, ArrayList<Project> p) addProject(s: Project): boolean
removeProject(s: Product): boolean getter/setter/toString methods

• •

• • •

Each Developer has a set of projects that the developer works on and a numberOfDevelopers data fields.

Each Developer can be created with one of the given two constructors.
o In Developer’s constructor, you are supposed to call the super class’s constructor.
o When you create a new Developer, you should increment numberOfDevelopers value by 1.

In addProject method, you should add the given Projects s to the list of projects.
In removeProject method, you should remove the given Product s from the list of projects. There are setter/getter and toString() methods.

 

8) Implement a Product class with the following UML diagram. Product

– – –

+ +

productName: String
saleDate: java.util.Calendar
price: double

• •

Product(StringsName,java.util.CalendarsDate,doubleprice) getter/setter/toStringmethods

Each Product has a name, saleDate and price data fields. There are setter/getter and toString() methods.

9) Implement a Project class with the following UML diagram. Project

– – –

+ + + + +

projectName: String
startDate: java.util.Calendar
state: boolean

public Project(String pName, Calendar startDate, String state) setState(state: String): void
getState(): String
close(): void

getter/setter/toString methods

• •

• • •

Each Project has a name, startDate and state data fields. If the Project is open, state should be true; otherwise, false.

In setState method, a string value (“Open” or “Close”) is given, and the method should set the state as true or false.

In getState method, a string value (“Open” or “Close”) should be returned based on the state value. In close method, you should close the project if it is open.
There are setter/getter and toString() methods.

10) Implement a Department class with the following UML diagram. Department

• •

– departmentId:int
– departmentName:String

+ Department(intdepartmentId,StringdepartmentName) + getter/setter/toStringmethods

Each Department has an id and a name data fields. There are setter/getter and toString() methods.

11) Implement a test class for your program.

a)

You should read input from a file and create new objects based on the line read. A set of sample lines in your input file is given below:

b)

After reading the input file and constructing the objects (keep your objects in ArrayLists polymorphically in the test file), the following sample scenario can be given in your test class:

  1. i)  invoke distributeBonusBudget method for each Manager polymorphically.
  2. ii)  invoke raiseSalary method for each Manager polymorphically with the percent value of 0.2.
  3. iii)  invoke raiseSalary method for each RegularEmployee polymorphically with the percent value of 0.3.
  4. iv)  invoke raiseSalary method for each Developer polymorphically with the percent value of 0.23.
  5. v)  invoke raiseSalary method for each SalesEmployee polymorphically with the percent value of

    0.18.

  6. vi)  invoke raiseSalary method for a SalesEmployee who has maximum value of sales (in terms of

    total price) polymorphically with the amount of 1000.

After performing these operations, print each department, its manager, its employee list with details. A sample output file is already generated based on the given sample input file and the execution scenario mentioned in Step b.

c)

• •

Department 1 Accounting
o You should create a new Department with an id of 1 and name of Accounting.

o You should create a new Project with the name of AutoCredit, startDate 01/05/2018 and state

Open.
Product Product1 01/01/2019 10000

o You should create a new Product with the name of Product1, saleDate 01/01/2019 and price of 10000.

Person Ayse Caliskan 111 Woman 05/05/1986 Married Yes
o You should create a new Person with the name of Ayse, surname Caliskan, id of 111, gender 1,

birth date 05/05/1986, maritalStatus 2 and hasDriverLicence true. Employee 111 5000 10/10/2017 Accounting

o You should create a new Employee by finding the Person with the given id (111) and invoke the overloaded constructor of Employee with the Person found, salary: 5000, hireDate: 10/10/2017 and department: Accounting.

RegularEmployee 111 25

o You should create a new RegularEmployee by finding the Employee with the given id (111) and invoke the overloaded constructor of RegularEmployee with the Employee found and performanceScore 25.

Developer 111 CreditCard Robotic

o You should create a new Developer by finding the RegularEmployee with the given id (111) and invoke the overloaded constructor of Developer with the RegularEmployee found, project list: CreditCard and Robotics. It should be noted that the number of projects may change.

Customer 224 Product1 Product2 Product5

o You should create a new Customer by finding the Person with the given id (224) and invoke the overloaded constructor of Customer with the Person found, product list: Product1 Product2 and Product5. It should be noted that the number of products may change.

This is a simple scenario to test your class implementations. There might be other test cases too. Therefore, please pay attention to use the same class, method and variable names in your implementations. You are allowed to increase the number of methods in the classes; however, you cannot decrease the number of them.

SEVERAL IMPORTANT NOTES:

  • Values of all properties should not be blank.
  • All integer type values in the setters, should be validated to be positive only.
  • All string type values in the setters, should be validated to be no less than 3 symbols.
  • If you enter invalid input for one of the values of properties, throw Exception (not RuntimeException!) with an informative message.
  • It should be noted that selected parts will be graded in your solution.
  1.  
  • Java-Project-6-ktbggm.zip