一个关于描述家庭各成员与户主关系算法的问题,请各位赐教用一个怎样的数据结构和算法来描述一个家庭各成员与户主的关系!
特别是在户主变动后,各成员与新户主的关系能根据与原户主的关系迅速计算得出。例如:一个家庭中有五个成员:A王老五、B张氏、C王刚、D张艳、E王小二、F、王军现在A是户主,成员 与户主关系
A 本人
B 妻
C 长子
D 长媳
E 长孙
F 次子现在如果户主变动,C成了户主,与户主关系字段将变为成员 与户主关系
A 父亲
B 母亲
C 本人
D 妻子
E 长子
F 弟如何才能通过一个合理的数据结构和算法迅速计算出户主变动后的关系!
特别是在户主变动后,各成员与新户主的关系能根据与原户主的关系迅速计算得出。例如:一个家庭中有五个成员:A王老五、B张氏、C王刚、D张艳、E王小二、F、王军现在A是户主,成员 与户主关系
A 本人
B 妻
C 长子
D 长媳
E 长孙
F 次子现在如果户主变动,C成了户主,与户主关系字段将变为成员 与户主关系
A 父亲
B 母亲
C 本人
D 妻子
E 长子
F 弟如何才能通过一个合理的数据结构和算法迅速计算出户主变动后的关系!
解决方案 »
- delphi 动态创建控件,删除后控件位置重排
- indy10的idhttp,设置readtimeout无效
- 如何利用缓冲区拷贝一个大文本文件的指定行数到另外一个文件。
- 一个小东西,希望大家喜欢
- 用API函数读写串口失败的问题,在线等待~
- 获得本机的IP和机器名的函数是什么?
- 如何才能做出一个类似于聊天室的程序?
- 安装组件的时候出现这错误请问原因,Error] button1.pas(1): Unit identifier 'SymbolChecker' does not match
- DBNavigator里的post按钮能否设置一个快捷键
- 怎样解决DELPHI中调用API后的传递参数的问题
- 紧急求救:dbgrideh的总结拦中如何不显示某些竖线.?
- delphi与oracle的Clob字段的问题,俱急!!!
家庭
成员
父辈 可为空(如D的父辈)
次序 (记录在同一父辈中的次序,如C为1,F为2)
性别
配偶 可为空(如F的配偶)户主表:
家庭
户主关系表:
关系:用特定的符号记录关系,描述为:户主的第2个男性孩子的配偶
关系名称: 对应的是:次媳
///////////////////////////////
修改的时候只要修改第二个表就行了
说得不好不要骂我!
我在想如果把所有关系都列出来是否太复杂了,把所有关系归纳为以下几种:
1父亲2母亲3儿子(如果有多子该怎么处理,我没想好,因为多子就有多媳,长子与长媳……的关系不能搞混)3女4兄5弟6姐7妹如果一个人是户主的爷爷,就可以描述成他父亲的父亲……以上可能还没把基本关系包括完。不知这种方法是否可行!
1.爷爷辈的(本人id,性别,排行,配偶id)
2.父亲辈的
3.平辈的
4.儿子辈的
5.孙子辈的
或者再做更多的
然后,进行换算,换算的依据是当前角色和其他角色进行比较,根据性别和排行,得到相应关系
谢谢!
男性 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
////////////////////////////////////////////////////////////
太复杂了,因为关系很复杂,例如加上什么“三姑六婆”的话就更复杂了,楼主最好自己规范一下,确定一下““与户主关系”这个字段可能出现(也可以说是你允许它出现)的值”,然后把上面的方法改一下。