家谱管理系统

来源:互联网 发布:淘宝undefined中文意思 编辑:程序博客网 时间:2024/04/28 23:33

前段时间和同学一块写了个家谱管理系统,我负责的是界面,查询,删除和树的设计


对于界面,在这里就不再描述了;

查询的要求有两个:1.通过名字查询;2.通过出生日期查询;3.输入两人姓名判断他们的关系。 对于名字和生日查询我都是应用的数据库中sql语句来实现的。这里着重记录下关系的判断:

*确定两人关系

    首先要说的就是在一个家族族谱中,是以男性为主导的族谱,所以女方的丈夫是没有权利进入家谱的。这里就可以排除与女方丈夫的关系,即:没有丈母娘和老丈人的关系及与女方娘家的所有关系都排除在外。

    接着就是在数据的存储方面,我们在保存男方的妻子时,其妻子的父亲和母亲是为空的,她只是记录了丈夫的Id,所以在判断她和别人的关系就要先找到她的丈夫,然后以她丈夫的身份去判断。

    然后讲的就是算法的实现:

    1.先判断在族谱中是否存在这两人。这里也会判断当名字一样的情况。

    2.从数据库中取出这两人的数据

    3.如果是某人的妻子就拿到她的丈夫在树中的节点。(区分女儿和男方妻子)

    4.判断两人数据中的代系,即区分同代和不同代的,以此再分开来判断两人关系

    5.根据区分开来的代系,判断同代的关系。在同代中有亲,堂,表的三个关系链,当然还有夫妻这一层关系。

    6.当是异代的时候,在这里又要区分是差几代的情况,根据实际的情况,判断的都是三代和三代以内的关系,即到了爷爷辈之后就不提供关系的判断了。异代的关系判断走的是直系和旁系这两条线,因为在一个家族中当人口达到一定的数量时,就会产生直系和旁系的明显区别,所以在做判断的,添加了直旁系的判断以此来增强程序的健壮性和可持续性

   最后提供的是关键代码片段的解释:


在这里寻找目标节点用的是库中提供的getNextNode()方法。再使用递归调用来查找树。


这段代码的用处就是确认她是一个真正的“女人”,当她是男方的妻子时就返回其丈夫的名字,否则就返回为null。