构建基于控制台的维护帮助台系统(Java)

发布: (2026年1月15日 GMT+8 20:44)
9 min read
原文: Dev.to

Source: Dev.to

Source:

描述功能

以下是程序的三个关键功能。对于每个功能,我提供了代码的详细说明,将实际实现与课程中涉及的理论概念关联起来。

维护请求跟踪器

1 - Add a request
2 - View a request
3 - Administrator
4 - Exit
Please choose an option 1‑4:

用户输入

用户输入是帮助台程序的核心;所有交互都通过控制台进行。Java 的 Scanner 类读取输入,使得能够在菜单选项之间导航、创建维护请求,以及在更新或关闭工单时输入参考编号。

int choice = 0;               // Stores the menu option chosen by the user.
boolean validChoice = false; // Ensures only valid input is accepted.

while (!validChoice) {        // Loop until the user enters a valid number.
    try {
        System.out.println("Please choose an option 1‑4:");
        choice = input.nextInt(); // Reads the menu choice as a number.
        input.nextLine();        // Clears the scanner buffer.
        validChoice = true;      // Exit loop if a valid choice was entered.
    } catch (Exception e) {
        System.out.println("Invalid input, please choose a number between 1 and 4");
        input.nextLine();        // Discard the invalid input.
    }
}

关键点

  • nextInt() 只读取数值本身,留下换行符在缓冲区中。
  • 额外的 nextLine() 调用用于在下次读取文本前清除残留的换行符。
  • try / catch 块防止在输入非数字字符时程序崩溃。

参考编号校验

while (!validRef) {
    try {
        System.out.println("Please enter your request reference number:");
        refNumber = input.nextInt();
        input.nextLine();          // Clear buffer.
        validRef = true;
    } catch (Exception e) {
        System.out.println("Invalid input, please enter the correct number");
        input.nextLine();          // Discard the invalid input.
    }
}

这种防御式编程方法确保应用保持健壮且用户友好,减少运行时错误。它直接呼应了 Bootcamp Lecture 3 中关于使用 Scanner 处理用户输入的概念。

选择语句

选择语句控制程序对用户输入的响应方式。在基于菜单的控制台应用中,它们决定接下来执行程序的哪一部分。

主菜单导航

if (choice == 1) {
    addRequest();
} else if (choice == 2) {
    viewRequest();
} else if (choice == 3) {
    adminMenu();
} else if (choice == 4) {
    System.out.println("Exiting Programme");
    running = false;
} else {
    System.out.println("Invalid Option Chosen");
}
  • If / else‑if 语句使每条可能的路径都显式化,提升可读性和可维护性,尤其在程序规模扩大时。
  • 这展示了结构化编程中 选择控制流 的核心概念。

楼宇选择示例

String buildingName = "";          // Will hold the building name once selected.
boolean validBuilding = false;    // Loop until a valid building is chosen.

while (!validBuilding) {
    try {
        System.out.println("Building Name (Choose 1‑5):");
        System.out.println("1 - Simon");
        System.out.println("2 - Beyer");
        System.out.println("3 - Michael Smith");
        System.out.println("4 - Stopford");
        System.out.println("5 - Alan Turing");

        int buildingChoice = input.nextInt(); // Stores the building option.
        input.nextLine();                     // Clear scanner buffer.

        // Map the numeric choice to a building name.
        switch (buildingChoice) {
            case 1 -> buildingName = "Simon";
            case 2 -> buildingName = "Beyer";
            case 3 -> buildingName = "Michael Smith";
            case 4 -> buildingName = "Stop

```java
ford";
            case 5 -> buildingName = "Alan Turing";
            default -> {
                System.out.println("Invalid building number, please try again.");
                continue; // Prompt again.
            }
        }
        validBuilding = true;
    } catch (Exception e) {
        System.out.println("Invalid input, please enter a number between 1 and 5");
        input.nextLine(); // Discard the invalid input.
    }
}

Selection 在整个程序中也被用于:

  • 选择优先级
  • 确认 Y/N 操作
  • 验证其他任何用户驱动的选择

结论

通过结合 输入验证异常处理选择语句,维护帮助台系统展示了扎实的防御性编程实践。这些技术不仅与学徒训练营中涵盖的理论材料相一致,还生成了可靠、用户友好的控制台应用程序。

Source:

概览

维护帮助台系统使用 Java 的 ArrayList 类存储和管理数据。ArrayList 保存维护请求和技术人员的数据,使程序能够存储多个对象并动态管理它们。

private static ArrayList request = new ArrayList<>();
private static ArrayList technician = new ArrayList<>();

从理论角度来看,ArrayList 是 Java 集合框架的一部分,代表一种 动态数据结构——其大小可以在运行时增长或缩小。当事先不知道数据量时,它比固定大小的数组更合适。在我们的程序中,用户可以不断添加新的请求和技术人员,因此动态结构是必不可少的。

Request newRequest = new Request(
        refNumber, requester, telephone,
        buildingName, description, priority);
request.add(newRequest);

新对象在创建时会被添加到这些列表中。当添加新的维护请求时,会实例化 Request 对象并存入 request 列表。

private static int findRequest(int refNumber) {
    for (int i = 0; i = 1 && choice <= 4) {
        validChoice = true;
    } else {
        System.out.println("Invalid option, please choose between 1 and 4");
    }
}

修复: 添加了额外的验证检查,以确保只接受有效的菜单选项。如果输入了无效选项,错误信息会提示用户重新输入正确的选择。此改进防止了无效选择,并强化了交互式程序中输入验证的重要性。

问题 3 – 重复的参考编号

每个请求和技术人员必须拥有唯一的参考编号,以便后续检索。

// Auto‑generate reference numbers
private static int nextRequestRef = 1001;
private static int nextTechNumber   = 1;

原因: 当在程序启动时添加预先填充的测试数据时,计数器(nextRequestRefnextTechNumber)没有被更新,导致新创建的对象获得重复的参考编号。

修复: 在插入测试数据后更新计数器,使后续对象获得下一个可用的唯一编号。

int refNumber = nextRequestRef;
nextRequestRef++;

Request newRequest = new Request(
        refNumber, requester, telephone,
        buildingName, description, priority);
request.add(newRequest);

处理此问题强调了保持程序状态一致性的必要性,尤其是在自动生成标识符时。

结论

开发维护帮助台系统加深了我对 Java 编程的理解,尤其是:

  • 安全地处理混合用户输入(数字和文本)。
  • 使用选择语句并验证菜单选项。
  • 使用 ArrayList 管理动态数据。

随着程序规模的扩大,我也意识到 状态管理(例如唯一标识符)以及稳健的输入验证对于确保可靠、可维护的软件的重要性。

对代码重构的反思

将代码拆分为独立的类帮助我在一定程度上整理了代码,使其更易阅读。然而,我希望能够进一步改进,因为我觉得还有其他可以提升的地方。

如果继续开发我的代码,我想添加读写功能,使数据能够在会话之间保存和加载,而不是在程序关闭后被重置。

总体而言,这个项目帮助我认识到良好结构、输入验证以及仔细规划和组织代码的重要性。

Back to Blog

相关文章

阅读更多 »

Spring Data JPA 关系

介绍 新年快乐!在我 full‑stack 之旅的过去十天里,我在加入后立刻开始着手项目。起初,我在 Re...

我的 TicketDesk 系统

简介:在我的编程入门模块中,我用 Java 开发了一个 TicketDesk 系统,能够:- 跟踪工单 - 跟踪登录信息 - 提供基于角色的身份验证……