java控制台怎么实现通讯录
- 后端开发
- 2025-07-29
- 2
Java控制台实现通讯录,可定义联系人类存储信息,用集合
实现Java控制台通讯录的详细步骤
在Java中实现一个控制台通讯录应用,涉及多个核心知识点,包括面向对象编程、集合框架、文件I/O、异常处理等,以下是详细的实现步骤和代码示例:
设计类结构
需要设计一个Person
类来封装联系人信息,如姓名、电话号码、地址等,这个类应该包含属性、构造方法、getter和setter方法,以及重写的toString()
方法用于格式化输出。
public class Person { private String name; private String phone; private String address; public Person() {} public Person(String name, String phone, String address) { this.name = name; this.phone = phone; this.address = address; } // Getter and Setter methods public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Name: " + name + ", Phone: " + phone + ", Address: " + address; } }
创建主菜单和用户交互
使用Scanner
类获取用户输入,并通过一个循环来显示主菜单,根据用户的选择执行相应的操作,主菜单可以包括添加联系人、查找联系人、删除联系人、修改联系人、退出系统等选项。
import java.util.ArrayList; import java.util.Scanner; public class AddressBook { private static ArrayList<Person> contacts = new ArrayList<>(); public static void main(String[] args) { 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("6. 退出"); System.out.print("请选择操作: "); int choice = scanner.nextInt(); scanner.nextLine(); // Consume newline switch (choice) { case 1: addContact(scanner); break; case 2: findContact(scanner); break; case 3: deleteContact(scanner); break; case 4: modifyContact(scanner); break; case 5: displayAllContacts(); break; case 6: System.out.println("退出系统,谢谢使用!"); return; default: System.out.println("无效的选择,请重新输入!"); } } } // Implement addContact, findContact, deleteContact, modifyContact, displayAllContacts methods here }
实现添加联系人功能
在addContact
方法中,提示用户输入联系人的信息,并创建一个Person
对象将其添加到contacts
列表中。
private static void addContact(Scanner scanner) { System.out.print("请输入姓名: "); String name = scanner.nextLine(); System.out.print("请输入电话号码: "); String phone = scanner.nextLine(); System.out.print("请输入地址: "); String address = scanner.nextLine(); Person person = new Person(name, phone, address); contacts.add(person); System.out.println("联系人添加成功!"); }
实现查找联系人功能
在findContact
方法中,根据用户输入的姓名查找联系人,并显示相关信息,如果未找到,则提示用户。
private static void findContact(Scanner scanner) { System.out.print("请输入要查找的姓名: "); String name = scanner.nextLine(); boolean found = false; for (Person person : contacts) { if (person.getName().equalsIgnoreCase(name)) { System.out.println(person); found = true; } } if (!found) { System.out.println("未找到该联系人!"); } }
实现删除联系人功能
在deleteContact
方法中,根据用户输入的姓名删除联系人,如果找到多个同名联系人,可以进一步提示用户选择要删除的联系人。
private static void deleteContact(Scanner scanner) { System.out.print("请输入要删除的姓名: "); String name = scanner.nextLine(); ArrayList<Person> toRemove = new ArrayList<>(); for (Person person : contacts) { if (person.getName().equalsIgnoreCase(name)) { toRemove.add(person); } } if (toRemove.isEmpty()) { System.out.println("未找到该联系人!"); } else { contacts.removeAll(toRemove); System.out.println("联系人删除成功!"); } }
实现修改联系人功能
在modifyContact
方法中,根据用户输入的姓名查找联系人,并允许用户修改其信息。
private static void modifyContact(Scanner scanner) { System.out.print("请输入要修改的姓名: "); String name = scanner.nextLine(); boolean found = false; for (Person person : contacts) { if (person.getName().equalsIgnoreCase(name)) { System.out.print("请输入新的姓名(留空不变): "); String newName = scanner.nextLine(); System.out.print("请输入新的电话号码(留空不变): "); String newPhone = scanner.nextLine(); System.out.print("请输入新的地址(留空不变): "); String newAddress = scanner.nextLine(); if (!newName.isEmpty()) person.setName(newName); if (!newPhone.isEmpty()) person.setPhone(newPhone); if (!newAddress.isEmpty()) person.setAddress(newAddress); System.out.println("联系人信息修改成功!"); found = true; break; } } if (!found) { System.out.println("未找到该联系人!"); } }
实现显示所有联系人功能
在displayAllContacts
方法中,遍历contacts
列表并显示所有联系人的信息。
private static void displayAllContacts() { if (contacts.isEmpty()) { System.out.println("通讯录为空!"); } else { for (Person person : contacts) { System.out.println(person); } } }
持久化数据(可选)
为了在程序关闭后保存联系人信息,可以将数据写入文件或数据库,以下是一个简单的文件写入示例:
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; private static void saveContactsToFile() { try (BufferedWriter writer = new BufferedWriter(new FileWriter("contacts.txt"))) { for (Person person : contacts) { writer.write(person.getName() + "," + person.getPhone() + "," + person.getAddress()); writer.newLine(); } System.out.println("联系人信息已保存到文件!"); } catch (IOException e) { System.out.println("保存联系人信息时出错: " + e.getMessage()); } }
在程序退出前调用saveContactsToFile
方法,或者在每次添加、修改、删除联系人后调用该方法以保持数据同步。
从文件加载数据(可选)
在程序启动时,可以从文件加载联系人信息:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; private static void loadContactsFromFile() { try (BufferedReader reader = new BufferedReader(new FileReader("contacts.txt"))) { String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(","); if (parts.length == 3) { Person person = new Person(parts[0], parts[1], parts[2]); contacts.add(person); } } System.out.println("联系人信息已从文件加载!"); } catch (IOException e) { System.out.println("加载联系人信息时出错: " + e.getMessage()); } }
在main
方法开始时调用loadContactsFromFile
方法。
完整代码示例
以下是整合上述功能的完整代码示例:
import java.util.ArrayList; import java.util.Scanner; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.BufferedReader; import java.io.FileReader; public class AddressBook { private static ArrayList<Person> contacts = new ArrayList<>(); public static void main(String[] args) { loadContactsFromFile(); // Load contacts from file on startup 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("6. 保存并退出"); System.out.print("请选择操作: "); int choice = scanner.nextInt(); scanner.nextLine(); // Consume newline switch (choice) { case 1: addContact(scanner); break; case 2: findContact(scanner); break; case 3: deleteContact(scanner); break; case 4: modifyContact(scanner); break; case 5: displayAllContacts(); break; case 6: saveContactsToFile(); System.out.println("联系人已保存,退出系统!"); return; default: System.out.println("无效的选择,请重新输入!"); } } } // ... (addContact, findContact, deleteContact, modifyContact, displayAllContacts methods) private static void saveContactsToFile() { try (BufferedWriter writer = new BufferedWriter(new FileWriter("contacts.txt"))) { for (Person person : contacts) { writer.write(person.getName() + "," + person.getPhone() + "," + person.getAddress()); writer.newLine(); } System.out.println("联系人信息已保存到文件!"); } catch (IOException e) { System.out.println("保存联系人信息时出错: " + e.getMessage()); } } private static void loadContactsFromFile() { try (BufferedReader reader = new BufferedReader(new FileReader("contacts.txt"))) { String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(","); if (parts.length == 3) { Person person = new Person(parts[0], parts[1], parts[2]); contacts.add(person); } } System.out.println("联系人信息已从文件加载!"); } catch (IOException e) { System.out.println("加载联系人信息时出错: " + e.getMessage()); } } }