用java来实现利用文件构建用户电话号码本。(需实现增、删、查(按指定属性排序并查询)、改、显示的功能)。 1. “添加”功能(addEntry):接收用户的输入,将新的记录添加到文件中 2. “删除”功能(removeEntry):接收用户输入的姓名或电话号码,搜索文件中相应的记录并将其删除。 3. “查询”功能(sortedSearch):接收用户输入的排序方式和查询关键词,对文件中的记录按照指定属性进行排序并进行查询。 4. “修改”功能(updateEntry):接收用户输入的姓名或电话号码,搜索文件中相应的记录并将其更新为新输入的信息。 5. “显示”功能(displayEntries):从文件中读取并展示所有已存储的记录。
时间: 2024-02-01 16:14:25 浏览: 26
好的,以下是一个可能的实现:
```java
import java.io.*;
import java.util.*;
public class Phonebook {
private static final String FILENAME = "phonebook.txt";
private static final String DELIMITER = ",";
private static final int NAME_INDEX = 0;
private static final int PHONE_INDEX = 1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean exit = false;
while (!exit) {
System.out.println("请选择要进行的操作:");
System.out.println("1. 添加联系人");
System.out.println("2. 删除联系人");
System.out.println("3. 查询联系人");
System.out.println("4. 修改联系人");
System.out.println("5. 显示所有联系人");
System.out.println("6. 退出");
int choice = sc.nextInt();
switch (choice) {
case 1:
addEntry();
break;
case 2:
removeEntry();
break;
case 3:
sortedSearch();
break;
case 4:
updateEntry();
break;
case 5:
displayEntries();
break;
case 6:
exit = true;
break;
default:
System.out.println("无效的选择,请重新输入。");
}
}
}
private static void addEntry() {
Scanner sc = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = sc.nextLine();
System.out.print("请输入电话号码:");
String phone = sc.nextLine();
try (FileWriter fw = new FileWriter(FILENAME, true);
PrintWriter pw = new PrintWriter(fw)) {
pw.println(name + DELIMITER + phone);
System.out.println("已添加联系人:" + name + ",电话号码:" + phone);
} catch (IOException e) {
System.out.println("添加联系人失败:" + e.getMessage());
}
}
private static void removeEntry() {
Scanner sc = new Scanner(System.in);
System.out.print("请输入要删除的联系人的姓名或电话号码:");
String search = sc.nextLine();
List<String> entries = new ArrayList<>();
try (Scanner fileSc = new Scanner(new File(FILENAME))) {
while (fileSc.hasNextLine()) {
String line = fileSc.nextLine();
String[] parts = line.split(DELIMITER);
if (!parts[NAME_INDEX].equals(search) && !parts[PHONE_INDEX].equals(search)) {
entries.add(line);
}
}
} catch (IOException e) {
System.out.println("读取联系人失败:" + e.getMessage());
return;
}
try (FileWriter fw = new FileWriter(FILENAME);
PrintWriter pw = new PrintWriter(fw)) {
for (String entry : entries) {
pw.println(entry);
}
System.out.println("已删除联系人:" + search);
} catch (IOException e) {
System.out.println("删除联系人失败:" + e.getMessage());
}
}
private static void sortedSearch() {
Scanner sc = new Scanner(System.in);
System.out.print("请输入排序方式(name或phone):");
String sort = sc.nextLine();
System.out.print("请输入要查询的关键词:");
String search = sc.nextLine();
List<String> entries = new ArrayList<>();
try (Scanner fileSc = new Scanner(new File(FILENAME))) {
while (fileSc.hasNextLine()) {
entries.add(fileSc.nextLine());
}
} catch (IOException e) {
System.out.println("读取联系人失败:" + e.getMessage());
return;
}
Comparator<String> comparator = sort.equals("name")
? Comparator.comparing((String entry) -> entry.split(DELIMITER)[NAME_INDEX])
: Comparator.comparing((String entry) -> entry.split(DELIMITER)[PHONE_INDEX]);
entries.sort(comparator);
boolean found = false;
for (String entry : entries) {
String[] parts = entry.split(DELIMITER);
if (parts[NAME_INDEX].contains(search) || parts[PHONE_INDEX].contains(search)) {
System.out.println(parts[NAME_INDEX] + ",电话号码:" + parts[PHONE_INDEX]);
found = true;
}
}
if (!found) {
System.out.println("未找到符合条件的联系人。");
}
}
private static void updateEntry() {
Scanner sc = new Scanner(System.in);
System.out.print("请输入要修改的联系人的姓名或电话号码:");
String search = sc.nextLine();
List<String> entries = new ArrayList<>();
try (Scanner fileSc = new Scanner(new File(FILENAME))) {
while (fileSc.hasNextLine()) {
String line = fileSc.nextLine();
String[] parts = line.split(DELIMITER);
if (!parts[NAME_INDEX].equals(search) && !parts[PHONE_INDEX].equals(search)) {
entries.add(line);
} else {
System.out.print("请输入新的姓名(留空表示不修改):");
String newName = sc.nextLine();
System.out.print("请输入新的电话号码(留空表示不修改):");
String newPhone = sc.nextLine();
if (newName.isEmpty()) {
newName = parts[NAME_INDEX];
}
if (newPhone.isEmpty()) {
newPhone = parts[PHONE_INDEX];
}
entries.add(newName + DELIMITER + newPhone);
System.out.println("已更新联系人:" + search + " -> " + newName + ",电话号码:" + newPhone);
}
}
} catch (IOException e) {
System.out.println("读取联系人失败:" + e.getMessage());
return;
}
try (FileWriter fw = new FileWriter(FILENAME);
PrintWriter pw = new PrintWriter(fw)) {
for (String entry : entries) {
pw.println(entry);
}
} catch (IOException e) {
System.out.println("更新联系人失败:" + e.getMessage());
}
}
private static void displayEntries() {
try (Scanner fileSc = new Scanner(new File(FILENAME))) {
boolean found = false;
while (fileSc.hasNextLine()) {
String[] parts = fileSc.nextLine().split(DELIMITER);
System.out.println(parts[NAME_INDEX] + ",电话号码:" + parts[PHONE_INDEX]);
found = true;
}
if (!found) {
System.out.println("电话号码本为空。");
}
} catch (IOException e) {
System.out.println("读取联系人失败:" + e.getMessage());
}
}
}
```
其中,我们假设电话号码本的文件名为`phonebook.txt`,每条记录以逗号分隔姓名和电话号码。在实现上,我们使用了以下方法:
- `addEntry()`:接收用户输入并将新记录添加到文件末尾。
- `removeEntry()`:接收用户输入的搜索关键词,读取文件中的所有记录,将匹配的记录从列表中删除,再将剩下的记录写回文件中。
- `sortedSearch()`:接收用户输入的排序方式和搜索关键词,读取文件中的所有记录,根据排序方式排序,然后输出所有匹配的记录。
- `updateEntry()`:接收用户输入的搜索关键词,读取文件中的所有记录,将匹配的记录更新为新的信息,然后将所有记录写回文件中。
- `displayEntries()`:读取文件中的所有记录并输出。
在程序运行时,我们使用一个`while`循环不断接收用户的选择,根据选择调用相应的方法。每个方法中,我们使用`try-with-resources`语句来自动释放文件资源,避免忘记关闭文件。