关于java:家谱计划的逻辑

Logic for family tree program

我在Java中创建一个家庭树程序,或者至少试着去做。我已经开设了几个课程:

  • 名字的获取者和设置者性别年龄等
  • FamilyMember-扩展个人getter以及设置家长和儿童
  • 家庭-由多个族成员和添加方法正在删除成员
  • 家族树是主要的阶级用于设置关系。

我有两个主要问题:

1)我需要建立人与人之间的关系。目前我正在做:

1
2
3
FamilyMember A, FamilyMember B
B.setMother(A);
A.setChild(B);

上面的示例用于设置母子关系。

这看起来很笨重。实现所有关系都变得非常冗长。关于如何以不太程序化的方式实现多个关系有什么想法吗?

2)我必须能够显示家族树。我该怎么做?有没有定制课程可以让生活更轻松?

谢谢你的时间…


在绘制结构时,如果显示的代数超过2,则很难避免碰撞(线交叉)。所以如果你的申请允许你把它减到两个,那就太好了。我已经编写了一些使用这种表示的程序,或者是垂直的:

alt text

或水平:

氧化镁

如果您需要同时显示更多的代,您需要想出其他表示,它们可能开始变得非常稀疏,这样您就可以在同一级别显示同一代中的每个人。

关于如何将关系表示为数据结构,这很混乱。最简单、最干净的事情是,任何两个分别是同一个人的母亲和父亲的人都是"已婚"的。但是,您希望如何表示多个合作伙伴、继子女等?如果不知道你的程序应该做什么,这很难回答。也许你的数据集没有这些复杂的问题。如果是这样的话,最好先考虑复杂的情况——简单的表示不适合简单地扩展来覆盖困难的情况。

(用手)画出一些你预料到的最困难的情况;这将建议你需要记录什么类型的数据,以及如何组织它。绘制时所做的选择(谁先来,在每个节点使用什么符号和文本等)将通知您的数据结构决策。

设置B的母亲和A的孩子似乎是多余的-冗余导致错误-选择一个。哪一个?好吧,当你设定B的母亲(A的性别)时,有更多的信息,我们知道任何人都需要两个父母,而不是0个或更多的孩子。所以我倾向于只设置B的母亲;你总是可以通过遍历所有对象来找出任何个体的子对象,从而找出父对象与相关个体相等的集合。事实上,储存父母关系(与简单的父母关系相比)可以减少重复(假设你是在储存与个人的性别)。


Any ideas on how to implement multiple
relationships in a less procedural
way?

是的,您可以将关系本身表示为对象。任何两个人都可以拥有零个或更多的关系。

几年前,我在一个警察记录系统工作,在它的主名索引中为任何两个人之间的联系做了更广泛的工作。

关系可以是直接的。母亲---是孩子的母亲。

关系可能是分层的。母亲是父母。

2) I have to be able to display the
family tree. How can I do this? Are
there any custom classes out there to
make life easier?

是的,有支持图形显示的现有代码。我个人在使用预使用可视化工具包方面有很好的经验。

您可能会找到感兴趣的prefuse treeview;请尝试单击本例中的节点。(但是,如果您打算将您的软件供您自己的家庭以外的其他家庭使用,则一棵树可能不够。)


类似下级的东西(这是一个伪代码而不是真正的Java类)

1
2
3
4
5
6
7
8
class Node
{

     public Node Parent { get;set;}

     public List<Node> Childs {get;set;}

}

使用

1
2
3
     Node ultimateGrandParent = new Node();
     ultimateGrandParent.Parent = null;
     ultimateGrandParent.Childs = new List<Node>();