用树形结构在java语言下实现一个家谱管理系统
时间: 2024-03-13 14:43:34 浏览: 172
好的,下面是一个简单的家谱管理系统的Java代码实现,使用树形结构来管理家族成员之间的关系。
首先,我们需要定义一个家族成员的类,包括成员姓名、性别、出生日期等基本信息:
```java
public class FamilyMember {
private String name;
private String gender;
private LocalDate birthDate;
private FamilyMember father;
private FamilyMember mother;
private List<FamilyMember> children;
// 构造方法、getters和setters方法省略
}
```
接着,我们定义一个家谱管理器类,用于创建家族成员、添加家族成员之间的关系、查询家族成员信息等操作:
```java
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class FamilyTreeManager {
private FamilyMember root; // 家谱的根节点
public FamilyTreeManager(String name, String gender, LocalDate birthDate) {
this.root = new FamilyMember(name, gender, birthDate);
}
// 添加家族成员之间的关系
public void addRelationship(String parentName, String childName, String gender, LocalDate birthDate) {
FamilyMember parent = searchMember(parentName);
FamilyMember child = new FamilyMember(childName, gender, birthDate);
if (parent.getGender().equals("男")) {
parent.getChildren().add(child);
child.setFather(parent);
} else {
parent.getChildren().add(child);
child.setMother(parent);
}
}
// 查询家族成员信息
public FamilyMember searchMember(String name) {
return searchFamilyMember(root, name);
}
private FamilyMember searchFamilyMember(FamilyMember current, String name) {
if (current == null) {
return null;
}
if (current.getName().equals(name)) {
return current;
}
FamilyMember result = searchFamilyMember(current.getFather(), name);
if (result == null) {
result = searchFamilyMember(current.getMother(), name);
}
return result;
}
}
```
这个家谱管理器类包含一个根节点,可以通过添加家族成员之间的关系来构建树形结构。查询家族成员信息时,可以通过递归遍历整个家谱树来查找指定成员。
下面是一个简单的测试代码,演示如何使用家谱管理器来构建家族树并查询家族成员信息:
```java
public class Main {
public static void main(String[] args) {
// 创建家谱管理器,初始只有一个根节点
FamilyTreeManager manager = new FamilyTreeManager("张三", "男", LocalDate.of(1950, 1, 1));
// 添加家族成员之间的关系
manager.addRelationship("张三", "张四", "男", LocalDate.of(1970, 1, 1));
manager.addRelationship("张三", "张五", "女", LocalDate.of(1975, 1, 1));
manager.addRelationship("张四", "张六", "男", LocalDate.of(1990, 1, 1));
manager.addRelationship("张五", "张七", "女", LocalDate.of(1995, 1, 1));
// 查询家族成员信息
FamilyMember member = manager.searchMember("张六");
System.out.println(member.getName() + "的父亲是:" + member.getFather().getName());
}
}
```
输出结果为:
```
张六的父亲是:张四
```
这个例子只是一个简单的家谱管理系统,实际上还可以通过扩展家族成员类和家谱管理器类来实现更多功能,如查询家族成员的兄弟姐妹、计算家族成员的代际关系等。
阅读全文