家族族谱树形管理系统java
时间: 2025-01-06 09:36:44 浏览: 3
### 使用 Java 实现家族族谱树形管理系统
#### 家族族谱树结构设计
为了构建一个有效的家族族谱树形管理系统,采用面向对象的设计原则是非常重要的。通过创建抽象接口或基类来定义行为的规范,具体实现可以通过继承这些抽象类或接口来完成,并且可以为每个具体需求提供不同的实现[^2]。
```java
// 抽象成员类
abstract class FamilyMember {
protected String name;
public abstract void displayInfo();
}
class Person extends FamilyMember {
private final FamilyMember father, mother;
public Person(String name, FamilyMember father, FamilyMember mother) {
this.name = name;
this.father = father;
this.mother = mother;
}
@Override
public void displayInfo() {
System.out.println("Name: " + name);
if (father != null && mother != null){
System.out.println("Father's Name: " + father.getName());
System.out.println("Mother's Name: " + mother.getName());
}
}
// Getter 方法用于访问私有属性
public String getName(){
return name;
}
}
```
#### 工厂模式的应用
考虑到不同类型的家谱数据源可能存在差异,在此引入工厂方法模式以增强程序灵活性。利用 `FactoryProducer` 获取具体的 `AbstractFactory` 对象实例,从而能够根据不同条件动态地生产相应的实体类对象[^1]。
```java
interface AbstractFamilyTreeFactory {
FamilyMember getPerson(String name, FamilyMember father, FamilyMember mother);
}
class ConcreteFamilyTreeFactory implements AbstractFamilyTreeFactory {
@Override
public FamilyMember getPerson(String name, FamilyMember father, FamilyMember mother) {
return new Person(name, father, mother);
}
}
class FactoryProducer {
public static AbstractFamilyTreeFactory getFactory(boolean isModernStyle) {
if(isModernStyle)
return new ModernFamilyTreeFactory(); // 假设存在现代风格的家庭关系表示方式
else
return new ConcreteFamilyTreeFactory();
}
}
```
#### 用户界面交互逻辑
对于前端展示部分,虽然这里主要讨论的是基于控制台的应用场景,但在实际项目中通常会涉及到图形化用户界面(GUI),比如Swing 或者 JavaFX 等框架。如果计划扩展到Web端应用,则可考虑使用 JavaScript 的可视化库如 Prefuse TreeView 来呈现复杂的层次结构信息[^4]。
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 创建根节点(始祖)
FamilyMember ancestor = createAncestor(scanner);
while(true){
System.out.print("\nAdd a descendant? y/n ");
char choice = scanner.next().charAt(0);
if(choice == 'y'){
addDescendant(scanner, ancestor);
}else{
break;
}
}
printFamilyTree(ancestor);
scanner.close();
}
private static FamilyMember createAncestor(Scanner scnr){
System.out.print("Enter Ancestor's Name:");
String ancName = scnr.nextLine();
return new Person(ancName,null,null);
}
private static void addDescendant(Scanner scnr, FamilyMember parent){
System.out.print("Enter Descendant's Name:");
String descName = scnr.nextLine();
System.out.print("Is "+descName+"'s Father or Mother?");
boolean isParentMale = scnr.nextBoolean();
FamilyMember child = new Person(descName,
isParentMale ? parent : null , !isParentMale ? parent :null );
// 进一步处理子代与其他亲属的关系...
}
private static void printFamilyTree(FamilyMember member){
member.displayInfo();
// 需要递归打印整个家族网络的信息...
}
}
```
阅读全文