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());
}
}
}
