使用链表定义一个通信录类,要求: >每个记录包括姓名和联系电话; 实现记录的添加、删除、修改操作; >实现查找操作(输入姓名,输出联系电话); 记录输出,输出全部记录、输出查询记录; 编写一个测试程序,对通信录类中各方法进行测试
时间: 2024-10-08 12:03:12 浏览: 19
tongxunlu.rar_File类_Vc_tongxunlu_通讯录_链表
为了定义一个使用链表的通信录类,我们首先需要创建一个`ContactNode`类来存储单个联系人的信息,然后创建一个`ContactList`类来管理这些节点。以下是实现这个功能的一些关键步骤:
```java
// 定义 Contact 类,包含姓名和电话号码
class Contact {
String name;
String phoneNumber;
public Contact(String name, String phoneNumber) {
this.name = name;
this.phoneNumber = phoneNumber;
}
// 获取和设置方法
// ...
}
// 定义 ContactNode 类,用于链表中的数据结构
class ContactNode {
private Contact contact;
private ContactNode next;
public ContactNode(Contact contact) {
this.contact = contact;
this.next = null;
}
public Contact getContact() { return contact; }
public void setContact(Contact contact) { this.contact = contact; }
public ContactNode getNext() { return next; }
public void setNext(ContactNode next) { this.next = next; }
}
// 实现 ContactList 类,包含链表相关的操作
class ContactList {
private ContactNode head;
// 添加新联系人
public void addContact(Contact newContact) {
if (head == null) {
head = new ContactNode(newContact);
} else {
ContactNode currentNode = head;
while (currentNode.getNext() != null) {
currentNode = currentNode.getNext();
}
currentNode.setNext(new ContactNode(newContact));
}
}
// 删除联系人(根据姓名)
public boolean deleteContact(String name) {
if (head == null) return false;
if (head.getContact().getName().equals(name)) {
head = head.getNext();
return true;
}
ContactNode currentNode = head;
while (currentNode.getNext() != null && !currentNode.getNext().getContact().getName().equals(name)) {
currentNode = currentNode.getNext();
}
if (currentNode.getNext() != null) {
currentNode.setNext(currentNode.getNext().getNext());
return true;
}
return false;
}
// 修改联系人信息(根据姓名)
public boolean modifyContact(String oldName, String newName, String newPhoneNumber) {
if (head == null || head.getContact().getName().equals(oldName)) return false;
for (ContactNode node = head; node.getNext() != null; node = node.getNext()) {
if (node.getContact().getName().equals(oldName)) {
node.getContact().setName(newName);
node.getContact().setPhoneNumber(newPhoneNumber);
return true;
}
}
return false;
}
// 查找联系人并返回电话号码
public String findPhoneNumberByName(String name) {
if (head == null) return null;
ContactNode currentNode = head;
while (currentNode != null) {
if (currentNode.getContact().getName().equals(name)) {
return currentNode.getContact().getPhoneNumber();
}
currentNode = currentNode.getNext();
}
return null;
}
// 输出全部记录
public void printAllContacts() {
if (head == null) {
System.out.println("No contacts in the list.");
return;
}
ContactNode currentNode = head;
while (currentNode != null) {
System.out.println(currentNode.getContact());
currentNode = currentNode.getNext();
}
}
// 输出查询记录
public void printFoundContact(String name) {
String phoneNumber = findPhoneNumberByName(name);
if (phoneNumber != null) {
System.out.println("Found contact: " + name + ", Phone Number: " + phoneNumber);
} else {
System.out.println("Contact not found with name: " + name);
}
}
}
// 测试程序
public class Main {
public static void main(String[] args) {
ContactList contactList = new ContactList();
// 添加联系人
contactList.addContact(new Contact("Alice", "1234567890"));
contactList.addContact(new Contact("Bob", "9876543210"));
// 打印所有联系人
contactList.printAllContacts();
// 查找并打印Alice的电话
contactList.printFoundContact("Alice");
// 修改Bob的电话
contactList.modifyContact("Bob", "Bob Smith", "0987654321");
// 再次查找Bob的电话
contactList.printFoundContact("Bob Smith");
// 删除Alice
contactList.deleteContact("Alice");
// 再次尝试查找Alice,应为空列表
contactList.printFoundContact("Alice");
}
}
```
阅读全文