---
# System prepended metadata

title: JP1 - TEST

---

## Phần A - Tạo một lớp trừu tượng Employees (6 điểm):

| Trường       | Kiểu dữ liệu | Mô tả           |
|--------------|--------------|-----------------|
| empID        | int          | Mã nhân viên    |
| empName      | String       | Tên nhân viên   |
| dob          | LocalDate    | Ngày sinh       |
| department   | String       | Phòng ban       |
| numWork      | int          | Số năm làm việc |

3. Constructors (1 điểm):
   - Tạo một constructor không có tham số: khởi tạo empID = 10, empName với tên của bạn, department = "Aptech", numWork = 0, DOB với ngày sinh của bạn.
   - Tạo một constructor có 5 tham số: khởi tạo empID, empName, dob, department, numWork với các giá trị được truyền vào.

4. Phương thức (3 điểm):
   - Tạo một phương thức có tên: Input() để nhập dữ liệu cho nhân viên.
   - Tạo một phương thức có tên: DisplayDetail() hiển thị thông tin của Nhân viên: empID, empName, DOB, department, numWork.
   - Tạo một phương thức trừu tượng có tên: CalculateSalary() có kiểu trả về là double.

## Phần B - Tạo một lớp TemporaryEmp kế thừa từ Employees (5 điểm).

| Trường       | Kiểu dữ liệu | Mô tả                 |
|--------------|--------------|-----------------------|
| workDay      | int          | Số ngày làm việc      |



2. Constructors (2 điểm):
   - Tạo một constructor không có tham số kế thừa constructor của lớp cơ sở và khởi tạo workDay = 0.
   - Tạo một constructor có 6 tham số kế thừa constructor của lớp cơ sở (Employees) và khởi tạo workDay với giá trị truyền vào.

3. Phương thức (3 điểm):
   - Thực hiện phương thức trừu tượng CalculateSalary().
   - Nếu workDay <= 25: Salary = workDay * 50.000.
   - Nếu workDay > 25: Salary = 25 * 50.000 + (workDay - 25) * 50.000 * 2.
   - Trả về lương.

   - Tạo một phương thức ghi đè có tên Input() để nhập dữ liệu cho nhân viên.
   - Tạo một phương thức ghi đè có tên DisplayDetail() hiển thị thông tin của TemporaryEmp: empID, empName, DOB, department, salary, workDay.

## Phần C - Tạo một lớp EmployeeManagement (8 điểm).

1. Trường (0.5 điểm):
   List<TemporaryEmp> listEmployee;

2. Phương thức (7 điểm):
   - Input_Employee: nhập thông tin nhân viên cho đến khi người dùng không chọn 'Y' hoặc 'y'.
   - display_Employee: Hiển thị các phần tử trong danh sách.
   - display_max_numWork: Hiển thị TemporaryEmp có số năm làm việc lớn nhất.
   - Search_Employee: cho phép tìm kiếm một nhân viên trong danh sách với tên được nhập từ bàn phím.

## Phần D - Tạo một lớp Test (1.5 điểm).
Kiểm tra chức năng của lớp EmployeeManagement.