From 37a7877f362f7249302e2a39cd283dc35c63c47d Mon Sep 17 00:00:00 2001 From: pewx2icfv <3169838138@qq.com> Date: Fri, 29 Aug 2025 21:19:43 +0800 Subject: [PATCH] ADD file via upload --- keshe.java | 449 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 449 insertions(+) create mode 100644 keshe.java diff --git a/keshe.java b/keshe.java new file mode 100644 index 0000000..3075b93 --- /dev/null +++ b/keshe.java @@ -0,0 +1,449 @@ +import java.util.*; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +// 员工实体类 +class Employee { + private String id; + private String name; + private String gender; + private String department; + private String contact; + private String education; + private String role; // "admin" 或 "employee" + private String password; + private double baseSalary; // 基本工资 + + public Employee(String id, String name, String gender, String department, + String contact, String education, String role, String password, double baseSalary) { + this.id = id; + this.name = name; + this.gender = gender; + this.department = department; + this.contact = contact; + this.education = education; + this.role = role; + this.password = password; + this.baseSalary = baseSalary; + } + + // Getters and setters + public String getId() { return id; } + public String getName() { return name; } + public String getGender() { return gender; } + public String getDepartment() { return department; } + public String getContact() { return contact; } + public String getEducation() { return education; } + public String getRole() { return role; } + public String getPassword() { return password; } + public double getBaseSalary() { return baseSalary; } + + public void setName(String name) { this.name = name; } + public void setGender(String gender) { this.gender = gender; } + public void setDepartment(String department) { this.department = department; } + public void setContact(String contact) { this.contact = contact; } + public void setEducation(String education) { this.education = education; } + public void setBaseSalary(double baseSalary) { this.baseSalary = baseSalary; } + + @Override + public String toString() { + return "ID: " + id + ", 姓名: " + name + ", 部门: " + department + + ", 联系方式: " + contact + ", 基本工资: " + baseSalary; + } +} + +// 考勤记录实体类 +class Attendance { + private String id; + private String employeeId; + private LocalDate date; + private double workHours; + private double overtimeHours; + private String status; // 正常、迟到、早退、缺勤等 + private String notes; + + public Attendance(String id, String employeeId, LocalDate date, + double workHours, double overtimeHours, String status, String notes) { + this.id = id; + this.employeeId = employeeId; + this.date = date; + this.workHours = workHours; + this.overtimeHours = overtimeHours; + this.status = status; + this.notes = notes; + } + + // Getters and setters + public String getEmployeeId() { return employeeId; } + public LocalDate getDate() { return date; } + public double getWorkHours() { return workHours; } + public double getOvertimeHours() { return overtimeHours; } + public String getStatus() { return status; } + + @Override + public String toString() { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + return "员工ID: " + employeeId + ", 日期: " + date.format(formatter) + + ", 工作小时: " + workHours + ", 加班小时: " + overtimeHours + + ", 状态: " + status + ", 备注: " + notes; + } +} + +// 薪资记录实体类 +class Salary { + private String id; + private String employeeId; + private String month; // 格式: YYYY-MM + private double baseSalary; + private double overtimePay; + private double totalSalary; + + public Salary(String id, String employeeId, String month, + double baseSalary, double overtimePay) { + this.id = id; + this.employeeId = employeeId; + this.month = month; + this.baseSalary = baseSalary; + this.overtimePay = overtimePay; + this.totalSalary = baseSalary + overtimePay; + } + + // Getters + public String getEmployeeId() { return employeeId; } + public String getMonth() { return month; } + public double getBaseSalary() { return baseSalary; } + public double getOvertimePay() { return overtimePay; } + public double getTotalSalary() { return totalSalary; } + + @Override + public String toString() { + return "员工ID: " + employeeId + ", 月份: " + month + + ", 基本工资: " + baseSalary + ", 加班费: " + overtimePay + + ", 实发工资: " + totalSalary; + } +} + +// 工资管理系统主类 + class InteractiveSalarySystem { + private Map employees = new HashMap<>(); + private List attendanceRecords = new ArrayList<>(); + private List salaryRecords = new ArrayList<>(); + private Employee currentUser; + private Scanner scanner = new Scanner(System.in); + + // 初始化一个管理员账户 + public void initializeAdmin() { + Employee admin = new Employee("AD001", "系统管理员", "男", "管理部", + "000-00000000", "硕士", "admin", "admin123", 15000); + employees.put(admin.getId(), admin); + System.out.println("系统初始化完成,已创建管理员账户:"); + System.out.println("用户名: AD001, 密码: admin123"); + } + + // 用户登录 + public boolean login() { + System.out.println("\n=== 用户登录 ==="); + System.out.print("请输入用户ID: "); + String userId = scanner.nextLine(); + System.out.print("请输入密码: "); + String password = scanner.nextLine(); + + Employee employee = employees.get(userId); + if (employee != null && employee.getPassword().equals(password)) { + currentUser = employee; + System.out.println("登录成功!欢迎 " + employee.getName()); + return true; + } + System.out.println("用户名或密码错误,请重新输入"); + return false; + } + + // 注销 + public void logout() { + currentUser = null; + System.out.println("已成功注销"); + } + + // 添加员工 + public void addEmployee() { + if (currentUser == null || !"admin".equals(currentUser.getRole())) { + System.out.println("权限不足,需要管理员权限"); + return; + } + + System.out.println("\n=== 添加新员工 ==="); + System.out.print("员工ID: "); + String id = scanner.nextLine(); + + if (employees.containsKey(id)) { + System.out.println("员工ID已存在,请使用不同的ID"); + return; + } + + System.out.print("姓名: "); + String name = scanner.nextLine(); + System.out.print("性别: "); + String gender = scanner.nextLine(); + System.out.print("部门: "); + String department = scanner.nextLine(); + System.out.print("联系方式: "); + String contact = scanner.nextLine(); + System.out.print("学历: "); + String education = scanner.nextLine(); + System.out.print("基本工资: "); + double baseSalary = 0; + try { + baseSalary = Double.parseDouble(scanner.nextLine()); + } catch (NumberFormatException e) { + System.out.println("无效的工资数值,设置默认值5000"); + baseSalary = 5000; + } + System.out.print("初始密码: "); + String password = scanner.nextLine(); + + Employee newEmployee = new Employee(id, name, gender, department, + contact, education, "employee", password, baseSalary); + employees.put(id, newEmployee); + System.out.println("员工添加成功: " + name); + } + + // 记录考勤 + public void recordAttendance() { + if (currentUser == null || !"admin".equals(currentUser.getRole())) { + System.out.println("权限不足,需要管理员权限"); + return; + } + + System.out.println("\n=== 记录考勤 ==="); + System.out.print("员工ID: "); + String employeeId = scanner.nextLine(); + + if (!employees.containsKey(employeeId)) { + System.out.println("员工ID不存在"); + return; + } + + System.out.print("日期 (yyyy-MM-dd): "); + String dateStr = scanner.nextLine(); + LocalDate date; + try { + date = LocalDate.parse(dateStr); + } catch (DateTimeParseException e) { + System.out.println("日期格式错误,使用当前日期"); + date = LocalDate.now(); + } + + System.out.print("工作小时: "); + double workHours = 8; // 默认8小时 + try { + workHours = Double.parseDouble(scanner.nextLine()); + } catch (NumberFormatException e) { + System.out.println("无效的数值,使用默认值8小时"); + } + + System.out.print("加班小时: "); + double overtimeHours = 0; + try { + overtimeHours = Double.parseDouble(scanner.nextLine()); + } catch (NumberFormatException e) { + System.out.println("无效的数值,使用默认值0小时"); + } + + System.out.print("状态 (正常/迟到/早退/缺勤): "); + String status = scanner.nextLine(); + if (status.isEmpty()) status = "正常"; + + System.out.print("备注: "); + String notes = scanner.nextLine(); + + String attId = "ATT" + System.currentTimeMillis(); + Attendance attendance = new Attendance(attId, employeeId, date, + workHours, overtimeHours, status, notes); + attendanceRecords.add(attendance); + System.out.println("考勤记录添加成功"); + } + + // 计算工资 + public void calculateSalary() { + if (currentUser == null || !"admin".equals(currentUser.getRole())) { + System.out.println("权限不足,需要管理员权限"); + return; + } + + System.out.println("\n=== 计算工资 ==="); + System.out.print("员工ID: "); + String employeeId = scanner.nextLine(); + + if (!employees.containsKey(employeeId)) { + System.out.println("员工ID不存在"); + return; + } + + System.out.print("月份 (yyyy-MM): "); + String month = scanner.nextLine(); + + Employee employee = employees.get(employeeId); + double baseSalary = employee.getBaseSalary(); + + // 计算该月加班费 + double overtimePay = 0; + for (Attendance att : attendanceRecords) { + if (att.getEmployeeId().equals(employeeId) && + att.getDate().toString().startsWith(month)) { + // 加班费 = 加班小时 * 时薪 * 1.5 + double hourlyRate = baseSalary / 22 / 8; // 假设每月22个工作日 + overtimePay += att.getOvertimeHours() * hourlyRate * 1.5; + } + } + + String salId = "SAL" + System.currentTimeMillis(); + Salary salary = new Salary(salId, employeeId, month, baseSalary, overtimePay); + salaryRecords.add(salary); + + System.out.println("工资计算完成:"); + System.out.println("员工: " + employee.getName()); + System.out.println("月份: " + month); + System.out.println("基本工资: " + baseSalary); + System.out.println("加班费: " + overtimePay); + System.out.println("实发工资: " + salary.getTotalSalary()); + } + + // 查看员工信息 + public void viewEmployees() { + if (currentUser == null) { + System.out.println("请先登录"); + return; + } + + System.out.println("\n=== 员工列表 ==="); + if (employees.isEmpty()) { + System.out.println("没有员工记录"); + return; + } + + if ("admin".equals(currentUser.getRole())) { + // 管理员可以查看所有员工 + for (Employee emp : employees.values()) { + System.out.println(emp); + } + } else { + // 普通员工只能查看自己的信息 + System.out.println(employees.get(currentUser.getId())); + } + } + + // 查看工资信息 + public void viewSalaries() { + if (currentUser == null) { + System.out.println("请先登录"); + return; + } + + System.out.println("\n=== 工资记录 ==="); + if (salaryRecords.isEmpty()) { + System.out.println("没有工资记录"); + return; + } + + if ("admin".equals(currentUser.getRole())) { + // 管理员可以查看所有工资记录 + for (Salary salary : salaryRecords) { + System.out.println(salary); + } + } else { + // 普通员工只能查看自己的工资 + boolean found = false; + for (Salary salary : salaryRecords) { + if (salary.getEmployeeId().equals(currentUser.getId())) { + System.out.println(salary); + found = true; + } + } + if (!found) { + System.out.println("没有找到您的工资记录"); + } + } + } + + // 显示主菜单 + public void showMenu() { + System.out.println("\n=== 职工工资管理系统 ==="); + if (currentUser != null) { + System.out.println("当前用户: " + currentUser.getName() + + " (" + currentUser.getRole() + ")"); + } + + System.out.println("1. 登录"); + if (currentUser != null) { + if ("admin".equals(currentUser.getRole())) { + System.out.println("2. 添加员工"); + System.out.println("3. 记录考勤"); + System.out.println("4. 计算工资"); + } + System.out.println("5. 查看员工信息"); + System.out.println("6. 查看工资记录"); + System.out.println("7. 注销"); + } + System.out.println("0. 退出系统"); + System.out.print("请选择操作: "); + } + + // 运行系统 + public void run() { + initializeAdmin(); + boolean running = true; + + while (running) { + showMenu(); + String choice = scanner.nextLine(); + + switch (choice) { + case "1": + login(); + break; + case "2": + if (currentUser != null && "admin".equals(currentUser.getRole())) { + addEmployee(); + } else { + System.out.println("无效选择"); + } + break; + case "3": + if (currentUser != null && "admin".equals(currentUser.getRole())) { + recordAttendance(); + } else { + System.out.println("无效选择"); + } + break; + case "4": + if (currentUser != null && "admin".equals(currentUser.getRole())) { + calculateSalary(); + } else { + System.out.println("无效选择"); + } + break; + case "5": + viewEmployees(); + break; + case "6": + viewSalaries(); + break; + case "7": + logout(); + break; + case "0": + running = false; + System.out.println("感谢使用职工工资管理系统,再见!"); + break; + default: + System.out.println("无效选择,请重新输入"); + } + } + } + + public static void main(String[] args) { + InteractiveSalarySystem system = new InteractiveSalarySystem(); + system.run(); + } +} \ No newline at end of file