我正在用Java创建一个家族树程序,或者至少尝试一下 . 我开发了几个类:
-
人 - 名字性别年龄等的吸气剂和制定者
-
FamilyMember - 扩展Person getters和setter,用于设置父母和孩子
-
Family - 由多个家庭成员和添加删除成员的方法组成
-
FamilyTree是设置关系的主要类 .
我有两个主要问题:
1)我需要设置人与人之间的关系 . 目前我在做:
FamilyMember A, FamilyMember B
B.setMother(A);
A.setChild(B);
以上示例用于设置母子关系 .
这看起来很笨重 . 实现所有关系的时间越来越长 . 关于如何以较少程序的方式实现多个关系的任何想法?
2)我必须能够显示家谱 . 我怎样才能做到这一点?有没有自定义课程让生活更轻松?
谢谢你的时间...
3 回答
关于绘制结构,如果显示超过2代,则很难避免碰撞(线交叉) . 因此,如果您的应用程序允许您将其保持为两个,那就太好了 . 我已经编写了许多使用这种表示的程序,可以是垂直的:
或横向:
如果您需要一次显示更多代,您需要提出其他表示,并且它们可能会开始变得非常稀疏,以便您可以在同一级别显示同一代中的每个人 .
关于如何将关系表示为数据结构 - 嗯,它是混乱的 . 最简单,最干净的事情是,任何两个分别是同一个人的母亲和父亲的人都“结婚” . 但是,您想如何代表多个合作伙伴,继子女等?如果不了解您的计划应该做什么,那就很难回答 . 也许你的数据集没有这些复杂性 . 但是,如果确实如此,最好首先考虑棘手的案例 - 简单的陈述不适合轻松扩展以涵盖困难案例 .
画(手工)你预期的一些最难的案例;这将建议您需要记录哪种数据,以及如何组织它 . 您绘制时所做的选择(谁是第一个,每个节点使用的符号和文本等)将为您的数据结构决策提供信息 .
设置两个孩子似乎都是多余的 - 冗余会导致错误 - 选择一个 . 哪一个?那么,有一位母亲(A的性别),我们知道任何一个人都需要两个父母,而不是一个0或更多的孩子 . 所以我倾向于选择B的母亲;你总是可以通过遍历全部来找出任何个体的孩子来挑选父母等于所讨论的个体的集合 . 实际上,存储母亲和父亲的关系(与简单的父母关系相比)可以减少重复(假设您与个人存储性别) .
something like below class (this is a pseudo code not a real Java Class)
使用
是的,您可以将关系本身表示为对象 . 任何两个人都可以拥有零关系 .
多年前,我在一个警察记录系统上工作,这个系统更广泛地用于其主人姓名索引中任意两个人之间的关联 .
可以指导关系 . 母亲---是 - 母亲 - >孩子 .
关系可以是分层的 . 母亲是父母 .
是的,现有的代码支持图形显示 . 我个人有一个很好的工作经验prefuse visualization toolkit .
您可以找到感兴趣的预熔树视图;尝试单击this example中的节点 . (但是,如果您打算将软件供自己以外的家庭使用,那么树可能不够用 . )