คลาสจำลองระบบเงินเดือนลูกจ้าง
โจทย์
สร้างคลาสชื่อ Employee เพื่อแสดงการคำนวณเงินเดือนประจำปีของพนักงาน คลาสควรประกอบด้วยสิ่งต่อไปนี้:
- แอตทริบิวต์ (หรือฟิลด์ข้อมูล)
- แอตทริบิวต์ private ประเภท string ชื่อ “firstName” สำหรับชื่อของพนักงาน
- แอตทริบิวต์ private ประเภท string ชื่อ “lastName” สำหรับนามสกุลของพนักงาน
- แอตทริบิวต์ private ประเภท double ชื่อ “monthlySalary” ที่เก็บเงินเดือนรายเดือนของพนักงาน
- คอนสตรักเตอร์
- จัดเตรียมคอนสตรักเตอร์ที่กำหนดค่าเริ่มต้นให้กับตัวแปรอินสแตนซ์ทั้งสาม: firstName, lastName, และ monthlySalary
- เมธอด
- จัดเตรียมเมธอด set และ get สำหรับตัวแปรอินสแตนซ์แต่ละตัว
- ข้อจำกัด: หากค่า monthlySalary ไม่เป็นบวก อย่าตั้งค่าให้กับมัน
นอกจากนี้ ให้เขียนคลาสไดรเวอร์ชื่อ EmployeeDriver ที่แสดงความสามารถของคลาส Employee:
- แสดงเงินเดือนประจำปีของพนักงานแต่ละคน
- ให้การขึ้นเงินเดือน 10% แก่พนักงานแต่ละคน
- แสดงเงินเดือนประจำปีของพนักงานแต่ละคนอีกครั้งหลังจากขึ้นเงินเดือน
| Input | Output |
|---|---|
| Thanatat Wongabut 20000 | Employee: Thanatat Wongabut Yearly salary: 240000.00 Yearly salary after raise: 264000.00 |
โค้ด
import java.util.Scanner;
public class EmployeeDriver {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String firstName = scanner.nextLine();
String lastName = scanner.nextLine();
double salary = scanner.nextDouble();
Employee employee = new Employee(firstName, lastName, salary);
System.out.printf("Employee: %s %s\n", firstName, lastName);
System.out.printf("Yearly salary: %.2f\n", employee.getYearlySalary());
System.out.printf("Yearly salary after raise: %.2f\n", employee.getYearlySalary() + employee.getRaiseSalary());
}
}
class Employee {
private String firstName;
private String lastName;
private double monthlySalary;
public Employee(String firstName, String lastName, double monthlySalary) {
this.firstName = firstName;
this.lastName = lastName;
this.monthlySalary = Math.max(0, monthlySalary);
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public double getMonthlySalary() {
return monthlySalary;
}
public double getYearlySalary() {
return monthlySalary * 12;
}
public double getRaiseSalary() {
return getYearlySalary() * 0.1;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
}คำอธิบาย
1. คลาส EmployeeDriver
คลาส EmployeeDriver เป็นคลาสหลักที่ใช้ในการรันโปรแกรม มีส่วนประกอบดังนี้:
1.1 เมธอด main
- เมธอด
mainเป็นจุดเริ่มต้นของโปรแกรม - ใช้
Scannerเพื่อรับข้อมูลจากผู้ใช้ - รับชื่อ นามสกุล และเงินเดือนของพนักงาน
- สร้างวัตถุ
Employeeจากข้อมูลที่รับมา - แสดงข้อมูลพนักงาน เงินเดือนรายปี และเงินเดือนรายปีหลังขึ้นเงินเดือน
2. คลาส Employee
คลาส Employee เป็นคลาสที่ใช้จัดการข้อมูลของพนักงาน มีส่วนประกอบดังนี้:
2.1 ตัวแปร
firstName: เก็บชื่อของพนักงานlastName: เก็บนามสกุลของพนักงานmonthlySalary: เก็บเงินเดือนรายเดือนของพนักงาน
ทั้งหมดเป็นตัวแปรแบบ private ซึ่งหมายความว่าไม่สามารถเข้าถึงได้โดยตรงจากภายนอกคลาส
2.2 คอนสตรักเตอร์ (วิธีสร้างวัตถุ)
Employee(String firstName, String lastName, double monthlySalary):
- สร้างวัตถุ Employee โดยรับชื่อ นามสกุล และเงินเดือนรายเดือน
- ใช้
Math.max(0, monthlySalary)เพื่อให้แน่ใจว่าเงินเดือนไม่ติดลบ
2.3 เมธอด getter
getFirstName(): ส่งคืนชื่อของพนักงานgetLastName(): ส่งคืนนามสกุลของพนักงานgetMonthlySalary(): ส่งคืนเงินเดือนรายเดือนของพนักงานgetYearlySalary(): คำนวณและส่งคืนเงินเดือนรายปีของพนักงาน (เงินเดือนรายเดือน * 12)getRaiseSalary(): คำนวณและส่งคืนจำนวนเงินที่เพิ่มขึ้นหลังขึ้นเงินเดือน 10% (เงินเดือนรายปี * 0.1)
2.4 เมธอด setter
setFirstName(String firstName): กำหนดชื่อใหม่ให้กับพนักงานsetLastName(String lastName): กำหนดนามสกุลใหม่ให้กับพนักงานsetMonthlySalary(double monthlySalary): กำหนดเงินเดือนรายเดือนใหม่ให้กับพนักงาน
ปรับปรุงล่าสุด