使用 Java 开发点名器

点名器是一种简单而实用的工具,常常在课堂、会议或社交活动中用来记录参与者的出席情况。本文将介绍如何通过 Java 编写简单的点名器,并展示相关的代码示例和类图。

项目设计

在设计点名器时,我们需要考虑以下几点:

  1. 参与者管理:必须能够添加、删除和显示参与者。
  2. 点名功能:能够随机选取参与者进行点名。
  3. 用户界面:提供用户友好的界面以实现基本功能。

基于以上需求,我们将设计一个简单的 Java 应用程序。

类图

以下是我们将要实现的类图,描述了点名器的主要结构。使用 mermaid 语法展示类图。

classDiagram
    class Participant {
        +String name
        +boolean isPresent
        +Participant(String name)
        +void markPresent()
        +void markAbsent()
    }

    class RollCall {
        +ArrayList<Participant> participants
        +void addParticipant(Participant p)
        +void removeParticipant(String name)
        +void displayParticipants()
        +Participant pickRandomParticipant()
    }

    RollCall --> Participant : contains

代码示例

1. Participant 类

Participant 类表示一个参与者,包含参与者的姓名和出席状态。

public class Participant {
    private String name;
    private boolean isPresent;

    public Participant(String name) {
        this.name = name;
        this.isPresent = false; // 默认状态为缺席
    }

    public void markPresent() {
        isPresent = true;
    }

    public void markAbsent() {
        isPresent = false;
    }

    public String getName() {
        return name;
    }

    public boolean isPresent() {
        return isPresent;
    }

    @Override
    public String toString() {
        return name + " (状态: " + (isPresent ? "出席" : "缺席") + ")";
    }
}

2. RollCall 类

RollCall 类负责管理参与者的集合,并提供点名功能。

import java.util.ArrayList;
import java.util.Random;

public class RollCall {
    private ArrayList<Participant> participants;

    public RollCall() {
        participants = new ArrayList<>();
    }

    public void addParticipant(Participant p) {
        participants.add(p);
    }

    public void removeParticipant(String name) {
        participants.removeIf(p -> p.getName().equals(name));
    }

    public void displayParticipants() {
        for (Participant p : participants) {
            System.out.println(p);
        }
    }

    public Participant pickRandomParticipant() {
        if (participants.isEmpty()) {
            return null;
        }
        Random rand = new Random();
        return participants.get(rand.nextInt(participants.size()));
    }
}

3. 主程序

下面是主程序示例,它演示了如何使用上述类来进行基本的点名。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        RollCall rollCall = new RollCall();
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("1. 添加参与者");
            System.out.println("2. 删除参与者");
            System.out.println("3. 显示参与者");
            System.out.println("4. 随机点名");
            System.out.println("5. 退出");
            System.out.print("请选择操作: ");
            int choice = scanner.nextInt();
            scanner.nextLine(); // 清理输入缓冲区

            switch (choice) {
                case 1:
                    System.out.print("输入参与者姓名: ");
                    String name = scanner.nextLine();
                    rollCall.addParticipant(new Participant(name));
                    break;
                case 2:
                    System.out.print("输入要删除的参与者姓名: ");
                    String nameToRemove = scanner.nextLine();
                    rollCall.removeParticipant(nameToRemove);
                    break;
                case 3:
                    rollCall.displayParticipants();
                    break;
                case 4:
                    Participant randomParticipant = rollCall.pickRandomParticipant();
                    if (randomParticipant != null) {
                        System.out.println("随机选择的参与者是: " + randomParticipant.getName());
                    } else {
                        System.out.println("参与者列表为空!");
                    }
                    break;
                case 5:
                    System.out.println("退出程序。");
                    scanner.close();
                    return;
                default:
                    System.out.println("无效的选项,请重试。");
            }
        }
    }
}

结论

以上就是一个简单的 Java 点名器的实现,通过管理参与者的添加、删除和点名,我们可以有效地记录与会者的出席情况。这个小项目不仅展示了 Java 的基本语法和面向对象编程的优势,还为未来更复杂的项目打下了基础。希望这个示例能激发您对 Java 编程的兴趣,鼓励您在进一步学习中探索更多的可能性!