java实现利用文件构建用户电话号码本。(需实现增、删、查(按指定属性排序并查询)、改、显示的功能)。
时间: 2023-12-21 16:03:13 浏览: 105
实现这个功能可以使用Java的IO流和集合类。下面是一个简单的实现示例:
1. 定义一个User类,包含姓名、电话号码、住址等属性。
```
public class User {
private String name;
private String phoneNumber;
private String address;
public User(String name, String phoneNumber, String address) {
this.name = name;
this.phoneNumber = phoneNumber;
this.address = address;
}
// getter和setter方法省略...
}
```
2. 定义一个PhoneBook类,用于管理用户信息。在PhoneBook类中,我们可以使用ArrayList来存储用户信息,并提供增、删、查、改、排序等方法。
```
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class PhoneBook {
private List<User> users = new ArrayList<>();
// 添加用户
public void addUser(User user) {
users.add(user);
}
// 删除用户
public void deleteUser(int index) {
users.remove(index);
}
// 修改用户
public void updateUser(int index, User user) {
users.set(index, user);
}
// 按姓名排序并查询
public List<User> queryByName(String name) {
List<User> result = new ArrayList<>();
for (User user : users) {
if (user.getName().equals(name)) {
result.add(user);
}
}
Collections.sort(result, new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
return u1.getName().compareTo(u2.getName());
}
});
return result;
}
// 按电话号码排序并查询
public List<User> queryByPhoneNumber(String phoneNumber) {
List<User> result = new ArrayList<>();
for (User user : users) {
if (user.getPhoneNumber().equals(phoneNumber)) {
result.add(user);
}
}
Collections.sort(result, new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
return u1.getPhoneNumber().compareTo(u2.getPhoneNumber());
}
});
return result;
}
// 显示所有用户信息
public void display() {
System.out.println("姓名\t电话号码\t住址");
for (User user : users) {
System.out.println(user.getName() + "\t" + user.getPhoneNumber() + "\t" + user.getAddress());
}
}
// 从文件中读取用户信息
public void readFromFile(String fileName) {
try {
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
users = (List<User>) ois.readObject();
ois.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 将用户信息写入文件
public void writeToFile(String fileName) {
try {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(users);
oos.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
3. 在main方法中,可以通过控制台输入来实现增、删、查、改、显示等操作。
```
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
PhoneBook phoneBook = new PhoneBook();
phoneBook.readFromFile("phonebook.dat"); // 从文件中读取用户信息
Scanner scanner = new Scanner(System.in);
boolean flag = true;
while (flag) {
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.println("7. 退出");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入电话号码:");
String phoneNumber = scanner.next();
System.out.println("请输入住址:");
String address = scanner.next();
User user = new User(name, phoneNumber, address);
phoneBook.addUser(user);
System.out.println("添加成功!");
break;
case 2:
System.out.println("请输入要删除的用户序号:");
int index = scanner.nextInt();
phoneBook.deleteUser(index);
System.out.println("删除成功!");
break;
case 3:
System.out.println("请输入要修改的用户序号:");
index = scanner.nextInt();
System.out.println("请输入新的姓名:");
name = scanner.next();
System.out.println("请输入新的电话号码:");
phoneNumber = scanner.next();
System.out.println("请输入新的住址:");
address = scanner.next();
user = new User(name, phoneNumber, address);
phoneBook.updateUser(index, user);
System.out.println("修改成功!");
break;
case 4:
System.out.println("请输入要查询的姓名:");
name = scanner.next();
for (User u : phoneBook.queryByName(name)) {
System.out.println(u.getName() + "\t" + u.getPhoneNumber() + "\t" + u.getAddress());
}
break;
case 5:
System.out.println("请输入要查询的电话号码:");
phoneNumber = scanner.next();
for (User u : phoneBook.queryByPhoneNumber(phoneNumber)) {
System.out.println(u.getName() + "\t" + u.getPhoneNumber() + "\t" + u.getAddress());
}
break;
case 6:
phoneBook.display();
break;
case 7:
flag = false;
phoneBook.writeToFile("phonebook.dat"); // 将用户信息写入文件
System.out.println("谢谢使用!");
break;
default:
System.out.println("输入有误,请重新输入!");
break;
}
}
}
}
```
注意:这只是一个简单的实现示例,实际应用中可能需要更多的功能和优化。同时,为了方便起见,这里使用了ObjectInputStream和ObjectOutputStream来读写文件,但实际应用中可能需要考虑到数据的安全性和可靠性,需要使用更加专业的数据存储方式。
阅读全文