一个关于描述家庭各成员与户主关系算法的问题,请各位赐教用一个怎样的数据结构和算法来描述一个家庭各成员与户主的关系!
特别是在户主变动后,各成员与新户主的关系能根据与原户主的关系迅速计算得出。例如:一个家庭中有五个成员:A王老五、B张氏、C王刚、D张艳、E王小二、F、王军现在A是户主,成员 与户主关系
A 本人
B 妻
C 长子
D 长媳
E 长孙
F 次子现在如果户主变动,C成了户主,与户主关系字段将变为成员 与户主关系
A 父亲
B 母亲
C 本人
D 妻子
E 长子
F 弟如何才能通过一个合理的数据结构和算法迅速计算出户主变动后的关系!

解决方案 »

  1.   

    我觉得,设计时应该这样记录数据:成员表:
    家庭
    成员
    父辈  可为空(如D的父辈)
    次序  (记录在同一父辈中的次序,如C为1,F为2)
    性别  
    配偶  可为空(如F的配偶)户主表:
    家庭
    户主关系表:
    关系:用特定的符号记录关系,描述为:户主的第2个男性孩子的配偶 
    关系名称:    对应的是:次媳
    ///////////////////////////////
    修改的时候只要修改第二个表就行了
    说得不好不要骂我!
      

  2.   

    to: dulei115()
    我在想如果把所有关系都列出来是否太复杂了,把所有关系归纳为以下几种:
    1父亲2母亲3儿子(如果有多子该怎么处理,我没想好,因为多子就有多媳,长子与长媳……的关系不能搞混)3女4兄5弟6姐7妹如果一个人是户主的爷爷,就可以描述成他父亲的父亲……以上可能还没把基本关系包括完。不知这种方法是否可行!
      

  3.   

    按照辈分把所有关系都列出来
    1.爷爷辈的(本人id,性别,排行,配偶id)
    2.父亲辈的
    3.平辈的
    4.儿子辈的
    5.孙子辈的
    或者再做更多的
    然后,进行换算,换算的依据是当前角色和其他角色进行比较,根据性别和排行,得到相应关系
      

  4.   

    to dulei115() :就是啊,我觉得要确定这特定的符号很困难,所以我早给搞晕了……
      

  5.   

    to  dulei115() :
    谢谢!
      

  6.   

    人为的规定关系表中的“关系”字段的记录格式:    性别 数量 关系性别:
    男性  MALE           M
    女性  FEMALE         F关系:
    父辈  PARENT         P
    配偶  SPOUSE         S
    兄弟姐妹  BROTHER    B
    孩子  CHILd          C
    侄子  NEPHEW         N 
    孙子  GRANDCHILD     G次序:
    case 关系 of
       p:  0,1,2  父母,伯伯或其配偶,叔叔或其配偶 
       S:  空
       B:  0,1,2  本人,兄或姐,弟或妹
       N:  空
       C:  次序
       G:  次序      字典中的记录如下(后两列):
    男性父辈的男性父辈              M0PM0P  爷爷        
    男性父辈                        M0P     父亲    
    女性父辈的配偶                  F0PMS   父亲    
    女性父辈                        F0P     母亲    
    男性父辈的配偶                  M0PFS   母亲    
    男性配偶                        MS      丈夫    
    女性配偶                        FS      妻子    
    本人                            M0B(不用管性别)  本人    
    第一个男性孩子                  M1C     长子    
    第一个男性孩子的女性配偶      M1CFS   长媳    
    第一个男性孙子               M1G     长孙    
    第二个男性孩子               M2C     次子    
    兄弟姐妹中比自己小的男性        M1B      弟     根据成员表生成一颗树,根据不同的情况不同处理。添加,修改的过程中都要根据节点对应的成员的性别添加,修改性别。
    本人    0B
    父节点添加   0P
    兄弟节点:次序在前的  改0为1,在后的 改0为2
    亲子节点添加 次序数 + C 
    其它的低一级节点  全部添加  N  //如果没有那么复杂就不考虑什么侄子。
    下两级的节点特殊处理,全部排序   然后直接写为  次序数 + G
    最后给每个配偶(如果有的话)添加(因为配偶两人在同一节点上)   S
    ////////////////////////////////////////////////////////////
    太复杂了,因为关系很复杂,例如加上什么“三姑六婆”的话就更复杂了,楼主最好自己规范一下,确定一下““与户主关系”这个字段可能出现(也可以说是你允许它出现)的值”,然后把上面的方法改一下。