You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
4.5 KiB

import java.time.LocalDate;
/**
* 员工类 - 负责员工基本信息管理
* 遵循单一职责原则:只负责员工数据的存储和基本验证
*/
public class Employee {
private String id; // 员工ID
private String name; // 员工姓名
private double salary; // 薪资
private String department; // 部门
private String position; // 职位
private LocalDate hireDate; // 入职日期
private LocalDate birthDate; // 出生日期
private String email; // 邮箱(新增属性)
private boolean active; // 是否在职
/**
* 构造函数 - 创建员工对象
*/
public Employee(String id, String name, double salary, String department,
String position, LocalDate hireDate, LocalDate birthDate, String email) {
this.id = id;
this.name = name;
this.salary = salary;
this.department = department;
this.position = position;
this.hireDate = hireDate;
this.birthDate = birthDate;
this.active = true;
setEmail(email); // 使用setter进行邮箱验证
}
/**
* 设置邮箱 - 包含验证逻辑
* @param email 邮箱地址
* @throws IllegalArgumentException 如果邮箱格式无效
*/
public void setEmail(String email) {
if (isValidEmail(email)) {
this.email = email;
} else {
throw new IllegalArgumentException("无效的邮箱格式: " + email);
}
}
/**
* 邮箱格式验证
* @param email 邮箱地址
* @return true如果邮箱格式有效
*/
private boolean isValidEmail(String email) {
if (email == null || email.trim().isEmpty()) {
return false;
}
// 基本的邮箱格式验证正则表达式
String emailRegex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$";
return email.matches(emailRegex);
}
/**
* 获取员工年龄
* @return 员工年龄
*/
public int getAge() {
LocalDate now = LocalDate.now();
int age = now.getYear() - birthDate.getYear();
if (now.getMonthValue() < birthDate.getMonthValue() ||
(now.getMonthValue() == birthDate.getMonthValue() &&
now.getDayOfMonth() < birthDate.getDayOfMonth())) {
age--;
}
return age;
}
/**
* 获取员工司龄
* @return 员工司龄(年)
*/
public int getTenure() {
LocalDate now = LocalDate.now();
int tenure = now.getYear() - hireDate.getYear();
if (now.getMonthValue() < hireDate.getMonthValue() ||
(now.getMonthValue() == hireDate.getMonthValue() &&
now.getDayOfMonth() < hireDate.getDayOfMonth())) {
tenure--;
}
return tenure;
}
// Getter和Setter方法 - 遵循单一职责原则,只负责属性的访问和修改
public String getId() { return id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getSalary() { return salary; }
public void setSalary(double salary) {
if (salary >= 0) {
this.salary = salary;
} else {
throw new IllegalArgumentException("薪资不能为负数");
}
}
public String getDepartment() { return department; }
public void setDepartment(String department) { this.department = department; }
public String getPosition() { return position; }
public void setPosition(String position) { this.position = position; }
public LocalDate getHireDate() { return hireDate; }
public LocalDate getBirthDate() { return birthDate; }
public String getEmail() { return email; }
public boolean isActive() { return active; }
public void setActive(boolean active) { this.active = active; }
@Override
public String toString() {
return "Employee{" +
"id='" + id + "'" +
", name='" + name + "'" +
", salary=" + salary +
", department='" + department + "'" +
", position='" + position + "'" +
", hireDate=" + hireDate +
", age=" + getAge() +
", tenure=" + getTenure() + "年" +
", email='" + email + "'" +
", active=" + (active ? "在职" : "离职") +
"}";
}
}