内容:设计电话薄程序 (1)根据下面的描述设计类层次关系。 1)联系人信息有:姓名、电话、备注; 2)家人信息:还包括地址、固定电话; 3)朋友信息:还包括类别(同学、同事、其他朋友); 4)工作联系人信息:还包括公司、部门、职务。 (2)注意重写toString(),返回每类对象的全部信息 (3) 要求在父类中定义display()方法,此方法中将toString()结果输出值控台 (4)提供添加、删除、修改、查看指定成员、查看所有联系人信息等方法 (5)选做:图形用户界面、网络服务端 (6)使用Comparable或Comparator方法对联系人进行排序 (7)定义测试方法测试以上功能的java程序
时间: 2024-02-12 15:09:17 浏览: 18
根据题目描述,可以设计以下类层次关系:
- 联系人信息类 Contact,包含姓名、电话、备注等基本信息,具有添加、删除、修改、查看指定成员、查看所有联系人信息等方法。
- 家人信息类 Family,继承自 Contact,增加了地址、固定电话等信息。
- 朋友信息类 Friend,继承自 Contact,增加了类别(同学、同事、其他朋友)等信息。
- 工作联系人信息类 WorkContact,继承自 Contact,增加了公司、部门、职务等信息。
在每个类中,需要实现重写 toString() 方法,返回每类对象的全部信息。此外,在父类 Contact 中定义 display() 方法,用于将 toString() 结果输出到控制台。
为了实现排序功能,可以在 Contact 类中实现 Comparable 接口或在外部编写 Comparator 实现类,并在 Contact 类中提供排序方法。
最后,可以编写测试方法,测试以上功能是否正常运行。可以使用图形用户界面或网络服务端,使用户更方便地使用程序。
以下是一个简单的实现示例(不包含图形用户界面或网络服务端):
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Contact implements Comparable<Contact> {
private String name;
private String phone;
private String remark;
public Contact(String name, String phone, String remark) {
this.name = name;
this.phone = phone;
this.remark = remark;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
public String getRemark() {
return remark;
}
public void setName(String name) {
this.name = name;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setRemark(String remark) {
this.remark = remark;
}
public void display() {
System.out.println(toString());
}
@Override
public String toString() {
return "姓名:" + name + ",电话:" + phone + ",备注:" + remark;
}
@Override
public int compareTo(Contact o) {
return this.name.compareTo(o.getName());
}
public static void sort(ArrayList<Contact> list) {
Collections.sort(list);
}
}
class Family extends Contact {
private String address;
private String homePhone;
public Family(String name, String phone, String remark, String address, String homePhone) {
super(name, phone, remark);
this.address = address;
this.homePhone = homePhone;
}
public String getAddress() {
return address;
}
public String getHomePhone() {
return homePhone;
}
public void setAddress(String address) {
this.address = address;
}
public void setHomePhone(String homePhone) {
this.homePhone = homePhone;
}
@Override
public String toString() {
return super.toString() + ",地址:" + address + ",家庭电话:" + homePhone;
}
}
class Friend extends Contact {
private String type;
public Friend(String name, String phone, String remark, String type) {
super(name, phone, remark);
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return super.toString() + ",类型:" + type;
}
}
class WorkContact extends Contact {
private String company;
private String department;
private String job;
public WorkContact(String name, String phone, String remark, String company, String department, String job) {
super(name, phone, remark);
this.company = company;
this.department = department;
this.job = job;
}
public String getCompany() {
return company;
}
public String getDepartment() {
return department;
}
public String getJob() {
return job;
}
public void setCompany(String company) {
this.company = company;
}
public void setDepartment(String department) {
this.department = department;
}
public void setJob(String job) {
this.job = job;
}
@Override
public String toString() {
return super.toString() + ",公司:" + company + ",部门:" + department + ",职务:" + job;
}
}
public class PhoneBook {
private ArrayList<Contact> contacts = new ArrayList<>();
public void add(Contact contact) {
contacts.add(contact);
}
public void remove(Contact contact) {
contacts.remove(contact);
}
public void update(Contact contact, String name, String phone, String remark) {
contact.setName(name);
contact.setPhone(phone);
contact.setRemark(remark);
}
public Contact findByName(String name) {
for (Contact contact : contacts) {
if (contact.getName().equals(name)) {
return contact;
}
}
return null;
}
public void displayAll() {
for (Contact contact : contacts) {
contact.display();
}
}
public void sortByName() {
Contact.sort(contacts);
}
public void sortByPhone() {
Collections.sort(contacts, new Comparator<Contact>() {
@Override
public int compare(Contact o1, Contact o2) {
return o1.getPhone().compareTo(o2.getPhone());
}
});
}
public static void main(String[] args) {
PhoneBook phoneBook = new PhoneBook();
// 添加联系人
phoneBook.add(new Family("张三", "123456789", "家人", "北京市", "010-12345678"));
phoneBook.add(new Friend("李四", "987654321", "朋友", "同学"));
phoneBook.add(new WorkContact("王五", "2468101214", "工作", "ABC公司", "技术部", "工程师"));
phoneBook.add(new Contact("赵六", "5555555", "其他"));
// 显示所有联系人
System.out.println("所有联系人:");
phoneBook.displayAll();
// 修改联系人
Contact contact = phoneBook.findByName("张三");
if (contact != null) {
phoneBook.update(contact, "张三", "123456789", "家人,北京市昌平区");
}
// 按姓名排序并显示
phoneBook.sortByName();
System.out.println("按姓名排序后:");
phoneBook.displayAll();
// 按电话排序并显示
phoneBook.sortByPhone();
System.out.println("按电话排序后:");
phoneBook.displayAll();
}
}
```
以上代码实现了电话薄程序的大部分功能,包括添加、删除、修改、查找、排序等。其中,使用了 ArrayList 来存储联系人信息,使用了 Comparable 和 Comparator 接口来实现排序功能。在测试方法中,演示了如何添加、修改、查找、排序联系人,并将联系人信息输出到控制台。