当前位置:首页 > 后端开发 > 正文

java控制台怎么实现通讯录

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