java利用文件构建用户电话号码本。(需实现增、删、查(按指定属性排序并查询)、改、显示的功能)。
时间: 2024-05-04 21:20:40 浏览: 150
java实现电话簿增删改查数据
下面是一个简单的Java程序,可以利用文件构建用户电话号码本,并实现增、删、查、改、显示等功能。程序通过读取和写入文本文件来保存和加载电话号码本。在每次操作后,程序会自动将修改后的电话号码本保存到文件中。
```java
import java.io.*;
import java.util.*;
public class PhoneBook {
private static final String FILENAME = "phonebook.txt";
private static final String DELIMITER = ",";
private static List<Contact> contacts = new ArrayList<>();
public static void main(String[] args) {
loadContactsFromFile();
Scanner scanner = new Scanner(System.in);
while (true) {
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("0. 退出程序");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
addContact(scanner);
break;
case 2:
deleteContact(scanner);
break;
case 3:
searchContacts(scanner);
break;
case 4:
editContact(scanner);
break;
case 5:
showAllContacts();
break;
case 0:
saveContactsToFile();
System.exit(0);
break;
default:
System.out.println("无效的选择,请重新输入");
break;
}
}
}
private static void addContact(Scanner scanner) {
System.out.print("请输入姓名:");
String name = scanner.nextLine();
System.out.print("请输入电话号码:");
String phoneNumber = scanner.nextLine();
System.out.print("请输入电子邮件地址:");
String email = scanner.nextLine();
Contact contact = new Contact(name, phoneNumber, email);
contacts.add(contact);
System.out.println("联系人已添加");
}
private static void deleteContact(Scanner scanner) {
System.out.print("请输入要删除的联系人姓名:");
String name = scanner.nextLine();
boolean found = false;
for (int i = 0; i < contacts.size(); i++) {
if (contacts.get(i).getName().equals(name)) {
contacts.remove(i);
found = true;
System.out.println("联系人已删除");
break;
}
}
if (!found) {
System.out.println("未找到联系人");
}
}
private static void searchContacts(Scanner scanner) {
System.out.println("请选择排序方式:");
System.out.println("1. 按姓名排序");
System.out.println("2. 按电话号码排序");
System.out.println("3. 按电子邮件地址排序");
int sortChoice = scanner.nextInt();
scanner.nextLine();
System.out.print("请输入关键字:");
String keyword = scanner.nextLine();
List<Contact> searchResults = new ArrayList<>();
for (Contact contact : contacts) {
if (contact.containsKeyword(keyword)) {
searchResults.add(contact);
}
}
if (searchResults.size() > 0) {
switch (sortChoice) {
case 1:
Collections.sort(searchResults, new ContactNameComparator());
break;
case 2:
Collections.sort(searchResults, new ContactPhoneNumberComparator());
break;
case 3:
Collections.sort(searchResults, new ContactEmailComparator());
break;
default:
System.out.println("无效的选择");
return;
}
System.out.println("搜索结果:");
for (Contact contact : searchResults) {
System.out.println(contact);
}
} else {
System.out.println("未找到联系人");
}
}
private static void editContact(Scanner scanner) {
System.out.print("请输入要修改的联系人姓名:");
String name = scanner.nextLine();
boolean found = false;
for (Contact contact : contacts) {
if (contact.getName().equals(name)) {
System.out.print("请输入新的电话号码:");
String phoneNumber = scanner.nextLine();
System.out.print("请输入新的电子邮件地址:");
String email = scanner.nextLine();
contact.setPhoneNumber(phoneNumber);
contact.setEmail(email);
System.out.println("联系人已修改");
found = true;
break;
}
}
if (!found) {
System.out.println("未找到联系人");
}
}
private static void showAllContacts() {
System.out.println("所有联系人:");
for (Contact contact : contacts) {
System.out.println(contact);
}
}
private static void loadContactsFromFile() {
try {
BufferedReader reader = new BufferedReader(new FileReader(FILENAME));
String line;
while ((line = reader.readLine()) != null) {
String[] fields = line.split(DELIMITER);
Contact contact = new Contact(fields[0], fields[1], fields[2]);
contacts.add(contact);
}
reader.close();
} catch (IOException e) {
System.out.println("无法读取文件:" + FILENAME);
}
}
private static void saveContactsToFile() {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(FILENAME));
for (Contact contact : contacts) {
String line = contact.getName() + DELIMITER + contact.getPhoneNumber() + DELIMITER + contact.getEmail();
writer.write(line);
writer.newLine();
}
writer.close();
} catch (IOException e) {
System.out.println("无法写入文件:" + FILENAME);
}
}
}
class Contact {
private String name;
private String phoneNumber;
private String email;
public Contact(String name, String phoneNumber, String email) {
this.name = name;
this.phoneNumber = phoneNumber;
this.email = email;
}
public String getName() {
return name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public String getEmail() {
return email;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public void setEmail(String email) {
this.email = email;
}
public boolean containsKeyword(String keyword) {
return name.contains(keyword) || phoneNumber.contains(keyword) || email.contains(keyword);
}
@Override
public String toString() {
return "姓名:" + name + ",电话号码:" + phoneNumber + ",电子邮件地址:" + email;
}
}
class ContactNameComparator implements Comparator<Contact> {
@Override
public int compare(Contact c1, Contact c2) {
return c1.getName().compareTo(c2.getName());
}
}
class ContactPhoneNumberComparator implements Comparator<Contact> {
@Override
public int compare(Contact c1, Contact c2) {
return c1.getPhoneNumber().compareTo(c2.getPhoneNumber());
}
}
class ContactEmailComparator implements Comparator<Contact> {
@Override
public int compare(Contact c1, Contact c2) {
return c1.getEmail().compareTo(c2.getEmail());
}
}
```
在该程序中,我们定义了一个 `Contact` 类来表示电话号码本中的联系人,并使用 `List<Contact>` 来保存所有联系人。`PhoneBook` 类实现了增、删、查、改、显示等功能。程序通过读取和写入文本文件 `phonebook.txt` 来保存和加载电话号码本。
在程序中,我们使用了 `Scanner` 类来从用户输入中读取数据。通过 `addContact` 方法,用户可以添加新的联系人。`deleteContact` 方法可以删除已有的联系人。`searchContacts` 方法可以按照指定属性排序并查询联系人。`editContact` 方法可以修改已有联系人的电话号码和电子邮件地址。`showAllContacts` 方法可以显示所有联系人。
为了实现按照指定属性排序并查询联系人的功能,我们定义了 `ContactNameComparator`、`ContactPhoneNumberComparator` 和 `ContactEmailComparator` 三个比较器类,用于按照姓名、电话号码和电子邮件地址进行排序。在 `searchContacts` 方法中,我们根据用户的选择使用相应的比较器进行排序,并显示查询结果。
最后,我们在 `loadContactsFromFile` 和 `saveContactsToFile` 方法中使用 `BufferedReader` 和 `BufferedWriter` 来读取和写入文本文件。在每次操作后,程序会自动将修改后的电话号码本保存到文件中。
该程序只是一个简单的例子,可以根据需求进行修改和扩展。
阅读全文