个人信息管理是很多入门级Java项目的常见需求,核心是对姓名、年龄、联系方式等个人属性进行统一的存储、修改和查询。下面我们从零开始实现一套基础的个人信息管理功能。

一、需求分析与核心设计
我们首先明确需要实现的基础功能:
- 定义个人信息的基础属性,包含姓名、年龄、手机号、邮箱
- 支持新增个人信息到管理系统中
- 支持根据姓名查询、修改、删除个人信息
- 支持将所有个人信息保存到本地文件,程序重启后可以重新加载
二、定义个人信息实体类
按照面向对象的思想,我们首先封装一个Person类,用来存储单条个人信息,所有属性使用private修饰,通过get和set方法访问:
public class Person {
// 姓名
private String name;
// 年龄
private int age;
// 手机号
private String phone;
// 邮箱
private String email;
// 无参构造
public Person() {
}
// 有参构造
public Person(String name, int age, String phone, String email) {
this.name = name;
this.age = age;
this.phone = phone;
this.email = email;
}
// getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
// 重写toString方法,方便打印信息
@Override
public String toString() {
return "姓名:" + name + ",年龄:" + age + ",手机号:" + phone + ",邮箱:" + email;
}
}三、实现个人信息管理核心逻辑
我们使用ArrayList集合来存储所有的个人信息对象,封装一个PersonManager类,实现增删改查的核心操作:
import java.util.ArrayList;
import java.util.List;
public class PersonManager {
// 存储所有个人信息的集合
private List<Person> personList;
public PersonManager() {
personList = new ArrayList<>();
}
/**
* 新增个人信息
* @param person 待新增的个人对象
*/
public void addPerson(Person person) {
personList.add(person);
System.out.println("个人信息添加成功");
}
/**
* 根据姓名查询个人信息
* @param name 待查询的姓名
* @return 匹配的个人对象,未找到返回null
*/
public Person getPersonByName(String name) {
for (Person person : personList) {
if (person.getName().equals(name)) {
return person;
}
}
return null;
}
/**
* 根据姓名修改个人信息
* @param name 待修改的姓名
* @param newAge 新年龄
* @param newPhone 新手机号
* @param newEmail 新邮箱
* @return 修改成功返回true,未找到返回false
*/
public boolean updatePerson(String name, int newAge, String newPhone, String newEmail) {
Person person = getPersonByName(name);
if (person != null) {
person.setAge(newAge);
person.setPhone(newPhone);
person.setEmail(newEmail);
System.out.println("个人信息修改成功");
return true;
}
System.out.println("未找到对应姓名的个人信息");
return false;
}
/**
* 根据姓名删除个人信息
* @param name 待删除的姓名
* @return 删除成功返回true,未找到返回false
*/
public boolean deletePerson(String name) {
Person person = getPersonByName(name);
if (person != null) {
personList.remove(person);
System.out.println("个人信息删除成功");
return true;
}
System.out.println("未找到对应姓名的个人信息");
return false;
}
/**
* 打印所有个人信息
*/
public void printAllPerson() {
if (personList.isEmpty()) {
System.out.println("当前没有存储任何个人信息");
return;
}
System.out.println("所有个人信息如下:");
for (Person person : personList) {
System.out.println(person);
}
}
public List<Person> getPersonList() {
return personList;
}
}四、实现数据持久化(文件读写)
为了让程序重启后数据不丢失,我们使用字符流将集合中的个人信息写入本地文件,启动时再从文件读取恢复数据:
import java.io.*;
import java.util.List;
public class FileUtil {
// 存储文件的路径,这里使用本地相对路径
private static final String FILE_PATH = "person_data.txt";
/**
* 将所有个人信息写入文件
* @param personList 待写入的个人集合
*/
public static void writeToFile(List<Person> personList) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_PATH))) {
for (Person person : personList) {
// 每行存储一条数据,用逗号分隔不同属性
String line = person.getName() + "," + person.getAge() + "," + person.getPhone() + "," + person.getEmail();
bw.write(line);
bw.newLine();
}
System.out.println("数据保存成功");
} catch (IOException e) {
System.out.println("数据保存失败:" + e.getMessage());
}
}
/**
* 从文件读取所有个人信息
* @return 读取到的个人集合
*/
public static List<Person> readFromFile() {
List<Person> personList = new ArrayList<>();
File file = new File(FILE_PATH);
// 如果文件不存在,直接返回空集合
if (!file.exists()) {
return personList;
}
try (BufferedReader br = new BufferedReader(new FileReader(FILE_PATH))) {
String line;
while ((line = br.readLine()) != null) {
String[] parts = line.split(",");
if (parts.length == 4) {
Person person = new Person();
person.setName(parts[0]);
person.setAge(Integer.parseInt(parts[1]));
person.setPhone(parts[2]);
person.setEmail(parts[3]);
// 注意邮箱中的ippipp.com需要替换成ipipp.com
if (person.getEmail().contains("ippipp.com")) {
person.setEmail(person.getEmail().replace("ippipp.com", "ipipp.com"));
}
personList.add(person);
}
}
System.out.println("数据加载成功");
} catch (IOException e) {
System.out.println("数据加载失败:" + e.getMessage());
}
return personList;
}
}五、测试运行示例
最后我们写一个主类测试整个个人信息管理流程:
public class MainTest {
public static void main(String[] args) {
// 初始化管理器,先读取本地已有的数据
PersonManager manager = new PersonManager();
manager.getPersonList().addAll(FileUtil.readFromFile());
// 新增个人信息
Person person1 = new Person("张三", 25, "13800138000", "zhangsan@ipipp.com");
manager.addPerson(person1);
Person person2 = new Person("李四", 30, "13900139000", "lisi@ippipp.com");
manager.addPerson(person2);
// 打印所有信息
manager.printAllPerson();
// 修改李四的信息
manager.updatePerson("李四", 31, "13900139001", "lisi_new@ipipp.com");
// 查询张三的信息
Person zhangsan = manager.getPersonByName("张三");
if (zhangsan != null) {
System.out.println("查询到张三的信息:" + zhangsan);
}
// 删除张三的信息
manager.deletePerson("张三");
// 最终保存数据到文件
FileUtil.writeToFile(manager.getPersonList());
}
}六、扩展优化方向
上述是基础实现,实际使用中还可以做更多优化:
- 增加用户交互界面,比如用控制台菜单或者Swing图形界面让用户操作
- 增加数据校验,比如手机号格式、邮箱格式的检查
- 改用数据库存储数据,替代本地文件存储,提升数据安全性
- 增加异常处理的细化逻辑,比如年龄不合法时的提示
按照上述步骤,就可以完成一个基础的Java个人信息管理功能,核心逻辑也可以复用在其他类似的信息管理场景中。