创建一个简单的考勤系统可以根据很多不同的需求来设计。为了简化,这里我们将实现一个基本的控制台考勤系统,它允许员工签到和签退,并记录签到时间。
请注意,为了使示例尽可能简单,这里假定所有的操作都在同一天进行,且每个员工一天只需要签到签退各一次。此外,代码未包含数据的持久化存储,因此一旦程序终止,所有签到信息将丢失。
下面是一个简单的Java考勤系统实现:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class AttendanceSystem {
private Map<String, LocalDateTime> checkInMap; // 员工签到时间
private Map<String, LocalDateTime> checkOutMap; // 员工签退时间
public AttendanceSystem() {
checkInMap = new HashMap<>();
checkOutMap = new HashMap<>();
}
public void checkIn(String employeeId) {
if (checkInMap.containsKey(employeeId)) {
System.out.println("Employee has already checked in!");
} else {
checkInMap.put(employeeId, LocalDateTime.now());
System.out.println("Check-in successful for employee: " + employeeId);
}
}
public void checkOut(String employeeId) {
if (!checkInMap.containsKey(employeeId)) {
System.out.println("Employee has not checked in yet!");
} else if (checkOutMap.containsKey(employeeId)) {
System.out.println("Employee has already checked out!");
} else {
checkOutMap.put(employeeId, LocalDateTime.now());
System.out.println("Check-out successful for employee: " + employeeId);
}
}
public void showAttendance() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("Attendance Record:");
for (String employeeId : checkInMap.keySet()) {
String checkInTime = checkInMap.get(employeeId).format(formatter);
String checkOutTime = checkOutMap.containsKey(employeeId)
? checkOutMap.get(employeeId).format(formatter)
: "Not checked out";
System.out.println("EmployeeId: " + employeeId + " | Check-in: " + checkInTime + " | Check-out: " + checkOutTime);
}
}
public static void main(String[] args) {
AttendanceSystem system = new AttendanceSystem();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("Attendance System - Choose an option:");
System.out.println("1) Check-in");
System.out.println("2) Check-out");
System.out.println("3) Show Attendance");
System.out.println("4) Exit");
System.out.print("Option: ");
int option = scanner.nextInt();
scanner.nextLine(); // Consume newline
switch (option) {
case 1:
System.out.print("Enter Employee ID for Check-in: ");
system.checkIn(scanner.nextLine());
break;
case 2:
System.out.print("Enter Employee ID for Check-out: ");
system.checkOut(scanner.nextLine());
break;
case 3:
system.showAttendance();
break;
case 4:
System.out.println("Exiting system.");
scanner.close();
return;
default:
System.out.println("Invalid option, please try again.");
}
}
}
}
这段代码创建了一个考勤系统,具有以下功能:
- 员工可以使用他们的ID进行签到和签退。
- 考勤系统能够显示所有员工的签到和签退时间记录。
- 不允许员工在同一天重复签到或签退。
- 所有操作都在命令行界面中进行和显示。
助手提示:
- 使用 `Map<String, LocalDateTime>` 来存储员工的签到(`checkInMap`)和签退(`checkOutMap`)时间。
- 使用 `LocalDateTime.now()` 在签到和签退时记录当前时间。
- 展示考勤记录时,使用 `DateTimeFormatter` 对时间进行格式化。
请注意,这个程序在真实工作环境中需要进一步扩展和改进(如添加异常处理、持久化存储、支持跨日签到签退等),但它提供了一个考勤系统的基本框架,可以根据实际需要进行定制和扩展。 😊🗃🕓