简单地址簿(包含列表,添加,搜索,删除功能)

package A2;

public class AddressBookApplication {
    public static void main(String[] args) {
        AddressBookGUI addressBookGUI = new AddressBookGUI();
        addressBookGUI.loadAddressBook();
        Runtime.getRuntime().addShutdownHook(new Thread(addressBookGUI::saveAddressBook));
    }
}

 

loadAddressBook() 方法用于加载地址簿数据,进行以下操作:

使用 ObjectInputStream 对象输入流,并以文件流 FileInputStream 作为参数进行初始化,将地址簿从文件中读取。

将读取到的地址簿数据转换为 ArrayList<Person> 类型,并赋值给变量 addressBook。

遍历 addressBook 中的每个 Person 对象,并将姓名和类别拼接成字符串形式,添加到 listModel 列表模型中。

打印输出 "地址簿数据加载成功!"。

捕获可能抛出的 FileNotFoundException 异常,如果文件不存在,则创建一个新的空地址簿 ArrayList 并赋值给 addressBook 变量,然后打印输出 "地址簿文件不存在,已创建新地址簿!"。

捕获可能抛出的 IOException 和 ClassNotFoundException 异常,打印输出 "地址簿数据加载失败:" 加上异常信息。

saveAddressBook() 方法用于保存地址簿数据,进行以下操作:

使用 ObjectOutputStream 对象输出流,并以文件流 FileOutputStream 作为参数进行初始化,将地址簿数据写入文件。

使用 oos.writeObject(addressBook) 将 addressBook 中的数据写入文件。

打印输出 "地址簿数据保存成功!"。

捕获可能抛出的 IOException 异常,打印输出 "地址簿数据保存失败:" 加上异常信息。

该段代码主要实现了从文件中加载地址簿数据并显示到列表模型中,并将地址簿数据保存到文件中。当文件不存在时会创建一个新的空地址簿。通过这些方法可以实现地址簿的持久化存储和读取功能。

package A2;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.*;
import java.util.ArrayList;
class AddressBookGUI extends JFrame implements ActionListener {
    private ArrayList<Person> addressBook;//地址簿数据
    private final JList<String> personList;//人员列表
    private final DefaultListModel<String> listModel;
    private final JTextField nameField;//姓名输入框
    private final JTextField phoneNumberField;//电话输入框
    private final JTextField emailField;//邮箱输入框
    private final JComboBox<String> categoryComboBox;//关系下拉框

    public AddressBookGUI() {
        addressBook = new ArrayList<>();//初始化地址簿
        listModel = new DefaultListModel<>();
        personList = new JList<>(listModel);//初始化人员列表

        JLabel nameLabel = new JLabel("姓名:");//姓名标签
        JLabel phoneNumberLabel = new JLabel("电话:");//电话标签
        JLabel emailLabel = new JLabel("Email:");//邮箱标签
        JLabel categoryLabel = new JLabel("关系:");//关系标签

        nameField = new JTextField(20);//姓名输入框
        phoneNumberField = new JTextField(20);//电话输入框
        emailField = new JTextField(20);//邮箱输入框
        String[] categories = {"朋友", "家人", "同事"};//关系选项
        categoryComboBox = new JComboBox<>(categories);//关系下拉框

        JButton addButton = new JButton("增加");//增加按钮
        JButton deleteButton = new JButton("删除");//删除按钮

        addButton.addActionListener(this);//添加点击事件监听器
        deleteButton.addActionListener(this);//添加点击事件监听器

        JPanel inputPanel = new JPanel(new GridLayout(5, 2));//输入信息面板,使用网格布局
        inputPanel.add(nameLabel);// 添加姓名标签到面板
        inputPanel.add(nameField);// 添加姓名输入框到面板
        inputPanel.add(phoneNumberLabel);// 添加电话标签到面板
        inputPanel.add(phoneNumberField); // 添加电话输入框到面板
        inputPanel.add(emailLabel);// 添加邮箱标签到面板
        inputPanel.add(emailField);// 添加邮箱输入框到面板
        inputPanel.add(categoryLabel); // 添加关系标签到面板
        inputPanel.add(categoryComboBox); // 添加关系下拉框到面板
        inputPanel.add(addButton);// 添加增加按钮到面板
        inputPanel.add(deleteButton); // 添加删除按钮到面板

        JScrollPane scrollPane = new JScrollPane(personList); // 创建滚动面板并将人员列表添加到其中

        setLayout(new BorderLayout()); // 设置布局为边界布局
        add(inputPanel, BorderLayout.NORTH);
        add(scrollPane, BorderLayout.CENTER);
        //双击人员列表弹出详细信息对话框
        personList.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2 && personList.getSelectedValue() != null) {
                    int selectedIndex = personList.getSelectedIndex();
                    Person selectedPerson = addressBook.get(selectedIndex);
                    String phoneNumber = selectedPerson.getPhoneNumber();
                    String email = selectedPerson.getEmail();
                    //弹出对话框显示电话和邮箱信息
                    JOptionPane.showMessageDialog(AddressBookGUI.this, "电话: " + phoneNumber + "\nEmail: " + email);
                }
            }
        });

        setTitle("地址簿");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//释放当前窗口
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("增加")) {
            String name = nameField.getText();
            String phoneNumber = phoneNumberField.getText();
            String email = emailField.getText();
            String category = (String) categoryComboBox.getSelectedItem();

            Person person = new Person(category, name, phoneNumber, email);
            addressBook.add(person);
            listModel.addElement(name + " (" + category + ")");

            // 重置输入内容
            nameField.setText("");
            phoneNumberField.setText("");
            emailField.setText("");

            saveAddressBook();  // 保存到文件
        } else if (e.getActionCommand().equals("删除")) {
            int selectedIndex = personList.getSelectedIndex();
            if (selectedIndex != -1) {
                addressBook.remove(selectedIndex);
                listModel.remove(selectedIndex);
                saveAddressBook();  // 保存到文件
            }
        }
    }
//使用对象输出流+
    public void loadAddressBook() {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("addressbook.txt"))) {
            addressBook = (ArrayList<Person>) ois.readObject();
            for (Person person : addressBook) {
                listModel.addElement(person.getName() + " (" + person.getCategory() + ")");
            }
            System.out.println("地址簿数据加载成功!");
        } catch (FileNotFoundException e) {
            addressBook = new ArrayList<>(); // 如果文件不存在,则创建新的地址簿
            System.out.println("地址簿文件不存在,已创建新地址簿!");
        } catch (IOException | ClassNotFoundException e) {
            System.out.println("地址簿数据加载失败:" + e.getMessage());
        }
    }

    public void saveAddressBook() {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("addressbook.txt"))) {
            oos.writeObject(addressBook);
            System.out.println("地址簿数据保存成功!");
        } catch (IOException e) {
            System.out.println("地址簿数据保存失败:" + e.getMessage());
        }
    }
}

定义了一个名为"Person"的类,并实现了Serializable接口,表示该类的实例可以被序列化(即可以在网络或存储介质之间传输或持久化存储)。

成员变量:

private final String category: 表示人员的类别,使用字符串类型保存。

private final String name: 表示人员的姓名,使用字符串类型保存。

private final String phoneNumber: 表示人员的手机号码,使用字符串类型保存。

private final String email: 表示人员的电子邮件地址,使用字符串类型保存。

构造方法:public Person(String category, String name, String phoneNumber, String email)

构造方法用于创建Person类的实例,并接受四个参数:category、name、phoneNumber和email。

将传入的参数赋值给对应的成员变量。

成员方法:

public String getCategory(): 返回人员的类别。

public String getName(): 返回人员的姓名。

public String getPhoneNumber(): 返回人员的手机号码。

public String getEmail(): 返回人员的电子邮件地址。

总结:这段代码定义了一个简单的Person类,用于表示人员对象,包含了类别、姓名、手机号码和电子邮件等属性,并提供了相应的访问方法。

 

package A2;

import java.io.*;
class Person implements Serializable {
    //成员变量
    private final String category;
    private final String name;
    private final String phoneNumber;
    private final String email;
    //构造方法
    public Person(String category, String name, String phoneNumber, String email) {
        this.category = category;
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.email = email;
    }
    //成员方法
    public String getCategory() {
        return category;
    }
    public String getName() {
        return name;
    }
    public String getPhoneNumber() {
        return phoneNumber;
    }
    public String getEmail() {
        return email;
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值