用Java语言创建一个简单的考勤系统

本文介绍了如何使用Java创建一个基本的命令行考勤系统,员工可以通过ID签到和签退,系统记录并显示签到签退时间。该系统暂不包含数据持久化和跨日操作,适合初学者学习和作为基础框架扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建一个简单的考勤系统可以根据很多不同的需求来设计。为了简化,这里我们将实现一个基本的控制台考勤系统,它允许员工签到和签退,并记录签到时间。

请注意,为了使示例尽可能简单,这里假定所有的操作都在同一天进行,且每个员工一天只需要签到签退各一次。此外,代码未包含数据的持久化存储,因此一旦程序终止,所有签到信息将丢失。

下面是一个简单的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` 对时间进行格式化。

请注意,这个程序在真实工作环境中需要进一步扩展和改进(如添加异常处理、持久化存储、支持跨日签到签退等),但它提供了一个考勤系统的基本框架,可以根据实际需要进行定制和扩展。 😊🗃🕓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辽宁统招专升本&单招升学肖老师

idea的使用与分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值