import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.time.LocalDate; import java.time.format.DateTimeParseException; import java.util.List; import java.util.Optional; import java.util.Scanner; import java.util.Comparator;
public class Main { private static final String CSV_FILE = "employees.csv";
public static void main(String[] args) { EmployeeManager manager = new EmployeeManager(); loadEmployeesFromCSV(manager); Scanner scanner = new Scanner(System.in);
while (true) { displayMenu(); int choice = readInt(scanner);
switch (choice) { case 1 -> displayAllEmployees(manager); case 2 -> addEmployee(manager, scanner); case 3 -> searchEmployee(manager, scanner); case 4 -> deleteEmployee(manager, scanner); case 5 -> updateEmployee(manager, scanner); case 6 -> sortEmployees(manager); case 0 -> { saveEmployeesToCSV(manager); System.out.println("退出系统。"); return; } default -> System.out.println("无效的选择,请重新选择。"); } } }
private static void displayMenu() { System.out.println("1. 显示全部记录"); System.out.println("2. 添加员工"); System.out.println("3. 查询员工"); System.out.println("4. 删除员工"); System.out.println("5. 更新员工信息"); System.out.println("6. 按编号排序"); System.out.println("0. 退出"); System.out.print("请选择您需要的功能: "); }
private static void loadEmployeesFromCSV(EmployeeManager manager) { try (BufferedReader reader = new BufferedReader(new FileReader(CSV_FILE))) { String line; reader.readLine(); while ((line = reader.readLine()) != null) { String[] fields = line.split(","); int id = Integer.parseInt(fields[0]); String name = fields[1]; String gender = fields[2]; LocalDate birthDate = LocalDate.parse(fields[3]); String education = fields[4]; String position = fields[5]; String phone = fields[6]; String address = fields[7]; Employee employee = new Employee(id, name, gender, birthDate, education, position, phone, address); manager.addEmployee(employee); } } catch (IOException e) { System.out.println("读取CSV文件时出错: " + e.getMessage()); } catch (DateTimeParseException e) { System.out.println("日期格式错误: " + e.getMessage()); } catch (NumberFormatException e) { System.out.println("编号格式错误: " + e.getMessage()); } catch (Exception e) { System.out.println("加载员工数据时出错: " + e.getMessage()); } }
private static void saveEmployeesToCSV(EmployeeManager manager) { try (FileWriter writer = new FileWriter(CSV_FILE)) { writer.write("编号,姓名,性别,出生年月,学历,职务,电话,住址\n"); List<Employee> employees = manager.getAllEmployees(); for (Employee employee : employees) { writer.write(employee.getId() + "," + employee.getName() + "," + employee.getGender() + "," + employee.getBirthDate() + "," + employee.getEducation() + "," + employee.getPosition() + "," + employee.getPhone() + "," + employee.getAddress() + "\n"); } System.out.println("员工信息已保存到CSV文件。"); } catch (IOException e) { System.out.println("写入CSV文件时出错: " + e.getMessage()); } }
private static void displayAllEmployees(EmployeeManager manager) { List<Employee> employees = manager.getAllEmployees(); if (employees.isEmpty()) { System.out.println("没有员工记录。"); } else { displayEmployees(employees); } }
private static void searchEmployee(EmployeeManager manager, Scanner scanner) { while (true) { displaySearchMenu();
String option = scanner.nextLine().toLowerCase();
if (option.equals("0")) { break; }
switch (option) { case "a" -> searchEmployeeByName(manager, scanner); case "b" -> searchEmployeeByEducation(manager, scanner); case "c" -> searchEmployeeByPosition(manager, scanner); case "d" -> searchEmployeeByPhone(manager, scanner); case "e" -> searchEmployeeByAddress(manager, scanner); case "f" -> searchEmployeeById(manager, scanner); default -> System.out.println("无效的选择,请重新输入。"); } } }
private static void displaySearchMenu() { System.out.println("请选择查询方式:"); System.out.println("\ta. 按姓名查找"); System.out.println("\tb. 按学历查找"); System.out.println("\tc. 按职位查找"); System.out.println("\td. 按电话查找"); System.out.println("\te. 按地址查找"); System.out.println("\tf. 按员工编号查找"); System.out.println("\t0. 返回上一级菜单"); System.out.print("请输入选项: "); }
private static void searchEmployeeByName(EmployeeManager manager, Scanner scanner) { System.out.print("输入员工姓名: "); String name = scanner.nextLine(); List<Employee> employees = manager.searchEmployeesByName(name); displayEmployees(employees); }
private static void searchEmployeeByEducation(EmployeeManager manager, Scanner scanner) { System.out.print("输入员工学历: "); String education = scanner.nextLine(); List<Employee> employees = manager.searchEmployeesByEducation(education); displayEmployees(employees); }
private static void searchEmployeeByPosition(EmployeeManager manager, Scanner scanner) { System.out.print("输入员工职位: "); String position = scanner.nextLine(); List<Employee> employees = manager.searchEmployeesByPosition(position); displayEmployees(employees); }
private static void searchEmployeeByPhone(EmployeeManager manager, Scanner scanner) { System.out.print("输入员工电话: "); String phone = scanner.nextLine(); List<Employee> employees = manager.searchEmployeesByPhone(phone); displayEmployees(employees); }
private static void searchEmployeeByAddress(EmployeeManager manager, Scanner scanner) { System.out.print("输入员工地址: "); String address = scanner.nextLine(); List<Employee> employees = manager.searchEmployeesByAddress(address); displayEmployees(employees); }
private static void searchEmployeeById(EmployeeManager manager, Scanner scanner) { System.out.print("输入员工编号: "); int id = readInt(scanner); Optional<Employee> employee = manager.getEmployeeById(id); employee.ifPresentOrElse( System.out::println, () -> System.out.println("没有找到编号为 " + id + " 的员工。") ); }
private static void displayEmployees(List<Employee> employees) { if (employees.isEmpty()) { System.out.println("没有找到匹配的员工记录。"); } else { String format = "| %-4s | %-10s | %-6s | %-10s | %-10s | %-10s | %-12s | %-20s |\n"; System.out.format("+------+------------+--------+------------+------------+------------+--------------+----------------------+\n"); System.out.format("| 编号 | 姓名 | 性别 | 出生年月 | 学历 | 职务 | 电话 | 住址 |\n"); System.out.format("+------+------------+--------+------------+------------+------------+--------------+----------------------+\n"); for (Employee employee : employees) { System.out.format(format, employee.getId(), employee.getName(), employee.getGender(), employee.getBirthDate(), employee.getEducation(), employee.getPosition(), employee.getPhone(), employee.getAddress()); } System.out.format("+------+------------+--------+------------+------------+------------+--------------+----------------------+\n"); } }
private static void addEmployee(EmployeeManager manager, Scanner scanner) { try { System.out.print("输入员工编号: "); int id = readInt(scanner);
if (manager.getEmployeeById(id).isPresent()) { System.out.println("编号为 " + id + " 的员工已存在,请输入其他编号。"); return; }
System.out.print("输入员工姓名: "); String name = scanner.nextLine();
System.out.print("输入员工性别: "); String gender = scanner.nextLine();
System.out.print("输入员工出生年月 (yyyy-MM-dd): "); LocalDate birthDate = readDate(scanner);
System.out.print("输入员工学历: "); String education = scanner.nextLine();
System.out.print("输入员工职务: "); String position = scanner.nextLine();
System.out.print("输入员工电话: "); String phone = scanner.nextLine();
System.out.print("输入员工住址: "); String address = scanner.nextLine();
Employee employee = new Employee(id, name, gender, birthDate, education, position, phone, address); manager.addEmployee(employee); System.out.println("员工添加成功。"); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); } catch (Exception e) { System.out.println("输入错误,请重新输入。"); } }
private static void deleteEmployee(EmployeeManager manager, Scanner scanner) { try { System.out.print("输入要删除的员工编号: "); int id = readInt(scanner);
manager.deleteEmployee(id); System.out.println("员工删除成功。"); } catch (Exception e) { System.out.println("输入错误,请重新输入。"); } }
private static void updateEmployee(EmployeeManager manager, Scanner scanner) { while (true) { displayUpdateMenu();
String option = scanner.nextLine().toLowerCase();
if (option.equals("0")) { break; }
List<Employee> employees = getEmployeesByOption(manager, scanner, option);
if (employees != null && !employees.isEmpty()) { displayEmployees(employees); System.out.print("输入要更新的员工编号: "); int id = readInt(scanner);
Optional<Employee> employeeOpt = manager.getEmployeeById(id); if (employeeOpt.isEmpty()) { System.out.println("没有找到编号为 " + id + " 的员工。"); return; }
Employee employee = employeeOpt.get();
updateEmployeeDetails(scanner, employee); manager.updateEmployee(id, employee); System.out.println("员工更新成功。"); return; } } }
private static void displayUpdateMenu() { System.out.println("请选择查询方式以找到需要更新的员工:"); System.out.println("\ta. 按姓名查找"); System.out.println("\tb. 按学历查找"); System.out.println("\tc. 按职位查找"); System.out.println("\td. 按电话查找"); System.out.println("\te. 按地址查找"); System.out.println("\tf. 按员工编号查找"); System.out.println("\t0. 返回上一级菜单"); System.out.print("请输入选项: "); }
private static List<Employee> getEmployeesByOption(EmployeeManager manager, Scanner scanner, String option) { List<Employee> employees = null; switch (option) { case "a" -> { System.out.print("输入员工姓名: "); String name = scanner.nextLine(); employees = manager.searchEmployeesByName(name); } case "b" -> { System.out.print("输入员工学历: "); String education = scanner.nextLine(); employees = manager.searchEmployeesByEducation(education); } case "c" -> { System.out.print("输入员工职位: "); String position = scanner.nextLine(); employees = manager.searchEmployeesByPosition(position); } case "d" -> { System.out.print("输入员工电话: "); String phone = scanner.nextLine(); employees = manager.searchEmployeesByPhone(phone); } case "e" -> { System.out.print("输入员工地址: "); String address = scanner.nextLine(); employees = manager.searchEmployeesByAddress(address); } case "f" -> { System.out.print("输入员工编号: "); int id = readInt(scanner); Optional<Employee> employee = manager.getEmployeeById(id); if (employee.isPresent()) { employees = List.of(employee.get()); } else { System.out.println("没有找到编号为 " + id + " 的员工。"); } } default -> System.out.println("无效的选择,请重新输入。"); } return employees; }
private static void updateEmployeeDetails(Scanner scanner, Employee employee) { System.out.print("输入员工新姓名 (当前: " + employee.getName() + "): "); String name = scanner.nextLine(); if (!name.isBlank()) { employee.setName(name); }
System.out.print("输入员工新性别 (当前: " + employee.getGender() + "): "); String gender = scanner.nextLine(); if (!gender.isBlank()) { employee.setGender(gender); }
System.out.print("输入员工新出生年月 (yyyy-MM-dd) (当前: " + employee.getBirthDate() + "): "); LocalDate birthDate = readDate(scanner); if (birthDate != null) { employee.setBirthDate(birthDate); }
System.out.print("输入员工新学历 (当前: " + employee.getEducation() + "): "); String education = scanner.nextLine(); if (!education.isBlank()) { employee.setEducation(education); }
System.out.print("输入员工新职务 (当前: " + employee.getPosition() + "): "); String position = scanner.nextLine(); if (!position.isBlank()) { employee.setPosition(position); }
System.out.print("输入员工新电话 (当前: " + employee.getPhone() + "): "); String phone = scanner.nextLine(); if (!phone.isBlank()) { employee.setPhone(phone); }
System.out.print("输入员工新住址 (当前: " + employee.getAddress() + "): "); String address = scanner.nextLine(); if (!address.isBlank()) { employee.setAddress(address); } }
private static void sortEmployees(EmployeeManager manager) { manager.sortEmployees(Comparator.comparing(Employee::getId)); System.out.println("员工按编号排序成功。"); }
private static int readInt(Scanner scanner) { while (!scanner.hasNextInt()) { System.out.println("无效的输入,请输入一个数字。"); scanner.next(); } int value = scanner.nextInt(); scanner.nextLine(); return value; }
private static LocalDate readDate(Scanner scanner) { while (true) { try { String dateString = scanner.nextLine(); return LocalDate.parse(dateString); } catch (DateTimeParseException e) { System.out.println("无效的日期格式,请使用 yyyy-MM-dd 格式重新输入。"); } } } }
|