用Java来实现利用文件构建用户电话号码本。(需实现增、删、查(按指定属性排序并查询)、改、显示的功能)。
时间: 2024-05-11 10:15:52 浏览: 8
好的,我理解您的问题了。首先需要指定电话号码本的文件格式,然后编写Java代码来实现相应的增删查改和显示功能。
我们可以将电话号码本存储为一个CSV(逗号分隔值)格式的文件,其中每行记录代表一个用户,每个字段包含用户的姓名、电话号码等信息。
接下来,通过Java的IO流等相关类库,实现如下方法:
1. “添加”功能(addEntry):接收用户的输入,将新的记录添加到文件中。
2. “删除”功能(removeEntry):接收用户输入的姓名或电话号码,搜索文件中相应的记录并将其删除。
3. “查询”功能(sortedSearch):接收用户输入的排序方式和查询关键词,对文件中的记录按照指定属性进行排序并进行查询。
4. “修改”功能(updateEntry):接收用户输入的姓名或电话号码,搜索文件中相应的记录并将其更新为新输入的信息。
5. “显示”功能(displayEntries):从文件中读取并展示所有已存储的记录。
下面是一个Java代码示例,用于实现一个电话号码本的增删查改和显示操作:
```Java
import java.io.*;
import java.util.*;
class PhoneNumberBook {
// 声明一个记录用户信息的列表
List<String[]> entries = new ArrayList<>();
// 定义CSV文件的列名
static final String[] fields = new String[] { "姓名", "电话号码", "地址" };
// 定义CSV文件的文件名
static final String fileName = "phoneNumberBook.csv";
// 设置查询条件
enum Criteria {
姓名, 电话号码, 地址
}
// 添加新的用户信息到列表中
void addEntry(String[] entry) {
entries.add(entry);
}
// 根据姓名或电话号码从列表中删除用户信息
void removeEntry(String query) {
boolean found = false;
// 遍历列表中的每一条记录
for (Iterator<String[]> iterator = entries.iterator(); iterator.hasNext();) {
String[] entry = iterator.next();
// 检查是否匹配到查询条件
if (entry[0].equals(query) || entry[1].equals(query)) {
iterator.remove();
found = true;
}
}
if (!found) {
System.out.println("找不到匹配的记录");
}
}
// 根据指定的查询条件和排序方式查询相应的记录
void sortedSearch(Criteria criteria, boolean asc) {
// 将列表中的记录按照指定属性进行排序
switch (criteria) {
case 姓名:
entries.sort((a, b) -> a[0].compareTo(b[0]));
break;
case 电话号码:
entries.sort((a, b) -> a[1].compareTo(b[1]));
break;
case 地址:
entries.sort((a, b) -> a[2].compareTo(b[2]));
break;
}
// 如果排序方式为反序,则将列表反转
if (!asc) {
Collections.reverse(entries);
}
// 打印出排序后的结果
System.out.println(String.join(",", fields));
for (String[] entry : entries) {
System.out.println(String.join(",", entry));
}
}
// 根据姓名或电话号码更新用户信息
void updateEntry(String query, String[] entry) {
boolean found = false;
// 遍历列表中的每一条记录
for (int i = 0; i < entries.size(); i++) {
String[] e = entries.get(i);
// 检查是否匹配到查询条件
if (e[0].equals(query) || e[1].equals(query)) {
entries.set(i, entry);
found = true;
}
}
if (!found) {
System.out.println("找不到匹配的记录");
}
}
// 从CSV文件中读取并展示所有的用户信息
void displayEntries() {
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
String line;
// 读取文件中的每一行记录,并将其添加到列表中
while ((line = reader.readLine()) != null) {
String[] fields = line.split(",");
entries.add(fields);
}
// 打印列表中的所有记录
System.out.println(String.join(",", fields));
for (String[] entry : entries) {
System.out.println(String.join(",", entry));
}
} catch (IOException e) {
System.out.println("无法打开文件!");
}
}
// 将所有用户信息保存到CSV文件中
void SaveEntries() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
// 将列表中的每一条记录写入到文件中
for (String[] entry : entries) {
writer.write(String.join(",", entry));
writer.newLine();
}
} catch (IOException e) {
System.out.println("无法保存文件!");
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PhoneNumberBook pb = new PhoneNumberBook();
// 首次运行时读取CSV文件中的所有记录
pb.displayEntries();
while (true) {
System.out.println("请输入指令(1-添加,2-删除,3-查询,4-修改,5-显示,0-退出):");
int command = sc.nextInt();
sc.nextLine(); // consume enter
// 根据指令执行相应的操作
switch (command) {
case 0:
pb.SaveEntries();
return;
case 1:
System.out.println("请输入姓名、电话号码和地址,以逗号分隔:");
String[] entry = sc.nextLine().split(",");
pb.addEntry(entry);
break;
case 2:
System.out.println("请输入姓名或电话号码:");
String query = sc.nextLine();
pb.removeEntry(query);
break;
case 3:
System.out.println("请输入查询条件(1-姓名,2-电话号码,3-地址):");
Criteria criteria = Criteria.values()[sc.nextInt() - 1];
System.out.println("请选择排序方式(1-升序,2-降序):");
boolean asc = (sc.nextInt() == 1);
pb.sortedSearch(criteria, asc);
break;
case 4:
System.out.println("请输入姓名或电话号码:");
String q = sc.nextLine();
System.out.println("请输入新的姓名、电话号码和地址,以逗号分隔:");
String[] newEntry = sc.nextLine().split(",");
pb.updateEntry(q, newEntry);
break;
case 5:
pb.displayEntries();
break;
default:
System.out.println("请输入正确的指令!\n");
break;
}
}
}
}
```
这样,使用这个Java程序,您可以方便地添加、删除、查询、修改并展示您的电话号码本。请注意:存储用户数据需要确保数据保密性,最好使用加密算法将其加密。