构建基于控制台的维护帮助台系统(Java)
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;
原因: 当在程序启动时添加预先填充的测试数据时,计数器(nextRequestRef、nextTechNumber)没有被更新,导致新创建的对象获得重复的参考编号。
修复: 在插入测试数据后更新计数器,使后续对象获得下一个可用的唯一编号。
int refNumber = nextRequestRef;
nextRequestRef++;
Request newRequest = new Request(
refNumber, requester, telephone,
buildingName, description, priority);
request.add(newRequest);
处理此问题强调了保持程序状态一致性的必要性,尤其是在自动生成标识符时。
结论
开发维护帮助台系统加深了我对 Java 编程的理解,尤其是:
- 安全地处理混合用户输入(数字和文本)。
- 使用选择语句并验证菜单选项。
- 使用
ArrayList管理动态数据。
随着程序规模的扩大,我也意识到 状态管理(例如唯一标识符)以及稳健的输入验证对于确保可靠、可维护的软件的重要性。
对代码重构的反思
将代码拆分为独立的类帮助我在一定程度上整理了代码,使其更易阅读。然而,我希望能够进一步改进,因为我觉得还有其他可以提升的地方。
如果继续开发我的代码,我想添加读写功能,使数据能够在会话之间保存和加载,而不是在程序关闭后被重置。
总体而言,这个项目帮助我认识到良好结构、输入验证以及仔细规划和组织代码的重要性。