家族关系图 你好:我想制作我家里所有人的名字 做一个家谱图 请问怎样设计

栏目:资讯发布:2023-12-05浏览:1收藏

家族关系图   你好:我想制作我家里所有人的名字  做一个家谱图   请问怎样设计,第1张

  家谱图(genogram):家谱图的使用源于系统家庭治疗,是以图的形式描述家庭从祖父母到自己三代人的血亲关系和婚姻关系,可以帮助心理咨询与治疗的实践者对来访者及其家庭系统保持一种系统观。

  中文名

  家谱图

  外文名

  genogram

  应用学科

  心理学

  应用范围

  临床与咨询心理学

  

家谱的主要内容:姓氏源流和世系表。

一、姓氏源流

中国姓氏在经过历史不断演变,如:战乱,迁移,改朝换代,以及避讳改姓、避难改姓、复姓改为单姓等,姓氏变得更为复杂,其真正的出处、源头就更需要详细考证了。一些史学专家认为,历史上的王朝更替、社会动荡导致了家谱的断裂残缺,很多族谱都由后人凭想象臆造。

封建时代,许多姓氏为了抬高自己的门第和郡望,习惯于与名人扯上关系,或硬追溯到某皇帝作自己的祖先,这影响了血缘的纯正性和确实性。重视传统的中华民族,有不少家族在重修宗谱,由于南北各地的语言、风俗、长相等均不同,世系联系在一起,其纸谱真实性值得推敲。

二、世系表

作为家谱中最重要的内容,“世系表”,简而言之,就是说明一个家族成员,如:父子、兄弟间的相互关系,写清楚祖先后代每一个家族成员名字的图表。它有四种基本的记述格式:欧式、苏式、宝塔式和牒记式。

(1)欧式:又称横行体,是北宋文学家欧阳修创立的。欧式的特点是:世代分格,由右向左横行,五世一表,用起来很方便。欧式中,每个世代人名左侧都有一段生平记述,介绍该人的字、号、功名、官爵、生辰年月日、配偶、葬地、功绩等。

(2)苏式:又称垂珠体,是北宋文学家苏洵创立的。苏式世系表的特点是:世代直行下垂,世代间无横线连接,全部用竖线串连,图表格式也是由右向左排列的,主要是强调宗法关系。

(3)宝塔式:顾名思义,就是将世代人名象宝塔一样,由上向下排列。宝塔式采用横竖线连接法,竖线永远处在横线的中间,这对人多的大家族来说,因人名不可能排在同一页纸上,兄弟之间长幼关系不清,会为写谱、看谱带来很多不便。

(4)牒记式:不用横竖线连接世代人名间的关系,而是纯用文字来表述这种关系。每个人名下都有一个相关的简介,如:字、号、功名、官爵、生辰年月日、葬地、功绩等。牒记式的世系形式固定,次序分明,比较节约纸张。

扩展资料

家谱是一个家族的历史记载,通过家谱,能够了解当时的历史面貌、时代精神、社会风尚,了解在那个历史背景下人们的生产、生活情况。相传它是由正史中的帝王本纪及王侯列传、年表等演变而来。家谱是和正史、方志一样重要的历史典籍,是史学的重要组成部分之一。

中国的家谱一般都有家规族训,对于规范人生和教育子弟有着积极的意义。家谱,亦称族谱、宗谱、家乘、通谱、统谱、世谱、支谱、房谱等等,名称各异,其内涵是同一的,只是外延有所区别而已,如今一般统称家谱或族谱。家谱是系统记述某一同宗共祖的血缘集团世系人物或兼及其他方面情况的历史图籍。而姓氏是“某一同宗共祖血缘集团”的标识符号,家谱、族谱就是记录某一姓氏家族成员间的血缘关系的图册。

-家谱 (人文资料)

家谱制作的形式有多种,在文字家谱出现之前就有口授家谱和结绳家谱。后来,人们有的用图表裱制垂挂于中堂的,也有的装订成册供家人翻阅的。历史上,官宦人家一般都是采用装订成册的家谱。

如果开本选用不合理,将使边料增加,纸张的有效利用面积减少。家谱一般采用16开本,可以节约纸张。如果开本太小,折数和光边材料损耗也较多。为了便于印装,尽量不用或少用不规则的开本,这样可降低印装成本。 

设计家谱封面时,要注意根据图书成品尺寸、书脊厚度及勒口大小来进行设计。在设计勒口大小时,一般在不浪费纸张便于印刷的情况下可使勒口稍大些,多数在30mm以上。

修家谱但有些封面设计人员不了解纸张规格、开数及印刷机性能,在进行封面设计时,不根据纸张开数随意把勒口的尺寸固定下来,制版后往往不符合纸张规格开数要求而造成浪费,现在大部分图书封面印后需要覆膜,因而又提高了覆膜成本。

/实验14—2 设计一个程序,采用二叉树表示一个家谱关系。要求程序具有如下功能:

(1) 文件操作功能:记录输入、记录输出,清除全部文件记录和将家谱记录存盘。

(2) 家谱操作功能:用括号表示法输出家谱二叉树,查找某人所有的儿子,查找某人所有的祖先。/

#include<iostreamh>

#include<stdlibh>

#include<stdioh>

#include<stringh>

typedef struct Node

{

int degree;//人员所在代数

char data;//人员标志

struct Node lchild;//data的孩子

struct Node rchild;//data的兄弟

}BTNode;

#define max 100

int choose;

char X;

void CreatBTNode(BTNode b,char str);//创建记录

BTNode SearchX(BTNode b,char X);//查找记录

void InputBTNode(BTNode b,char str);//1记录输入

void OutputBTNode(BTNode b,char str);//2记录输出

void Store(BTNode b,char str);//3家谱记录存盘

void DispTree(BTNode b);//4用括号法输出家谱

void SearchXSon(BTNode b,char X);//5查找某人的儿子

void SearchXAncestor(BTNode b,char X);//6查找某人的祖先

void Distory(BTNode b,char str);//7清除全部文件记录

int main()

{BTNode b=NULL;

char str=(char)malloc(maxsizeof(char));

str[0]='\0';

cout<<"--------------------------------------------------------------------"<<endl;

cout<<"0退出"<<endl;

cout<<"1记录输入:\t"<<endl;

cout<<"2记录输出:\t"<<endl;

cout<<"3家谱记录存盘:\t"<<endl;

cout<<"4用括号法输出家谱:\t"<<endl;

cout<<"5查找某人的儿子:\t"<<endl;

cout<<"6查找某人的祖先:\t"<<endl;

cout<<"7清除全部文件记录:\n"<<endl;

cout<<"-------------------------------------------------------------------"<<endl;

cout<<"Please choose the operation you want to do "<<endl;

cout<<"choose=";

cin>>choose;

while(choose)

{switch(choose)

{

case 1:

InputBTNode(&b,str);break;

case 2:

OutputBTNode(&b,str);break;

case 3:

Store(b,str);

printf("文件已经保存!");

break;

case 4:

DispTree(b); break;

case 5:

printf("请输入需要查找儿子的结点:");

cin>>X;

SearchXSon(b,X);

break;

case 6:

printf("请输入需要查找祖先的结点:\n");

cin>>X;

BTNode p;

p=SearchX(b,X);

if(p!=NULL)

SearchXAncestor(b,X);

else

printf("该结点不存在!");

break;

case 7:

Distory(&b,str);

printf("文件记录已经清除!");

break;

default:

cout<<endl<<"Invalid input,input again";

}

cout<<endl<<"please choose again:"<<endl;

cout<<"the choose =";

cin>>choose;

}

return 0;

}

void CreatBTNode(BTNode b,char str) //创建树

{

BTNode S[max],p=NULL;

int top=-1,tag,j=0,d=0;

char ch;

b=NULL;

ch=str[j];

while(ch!='\0')

{

switch(ch)

{

case '(':

d++;

top++;

S[top]=p;

tag=1;break;

case ')':

top--;break;

case ',':

d--;

tag=2;break;

default:

p=(BTNode )malloc(sizeof(BTNode));

p->degree=d;

p->data=ch;

p->lchild=NULL;

p->rchild=NULL;

if((b)==NULL)(b)=p;

else

{

switch(tag)

{

case 1: S[top]->lchild=p;break;

case 2: S[top]->rchild=p;break;

}

}

}

ch=str[++j];

}

}

void InputBTNode(BTNode b,char str)//记录输入

{

do

{

printf("请输入需要输入的记录:\n");

gets(str);

if(str[0]=='\0')

printf("输入的记录为空,请再次输入:\n");

}while(str[0]=='\0');

CreatBTNode(b,str);

printf("记录创建成功!");

}

void OutputBTNode(BTNode b,char str)//从文件中读出记录

{

FILE fp;

if((fp=fopen("wangljtxt","r"))==NULL)

{

printf("不存在记录文件,要建立吗\n建立请输入Y,否则按其他键:");

if(getchar()=='Y')

{

fp=fopen("wangljtxt","w+");

printf("记录文件“wangljtxt”已建立\n");

}

else

exit(1);

}

else

{

if(!feof(fp))

fscanf(fp,"%s",str);

fclose(fp);

CreatBTNode(b,str);

printf("文件中记录已输出\n");

}

}

void Store(BTNode b,char str)//储存全部的结点记录

{

BTNode p;

p=b;

FILE fp;

fp=fopen("wangljtxt","w+");

if(fp==NULL)

{

printf("文件打开失败!");

return;

}

else

{

if(p!=NULL)

{

fprintf(fp,"%s",str);

fclose(fp);

}

}

}

void DispTree(BTNode b)//用括号法输出家谱记录

{

if(b!=NULL)

{printf("%c",b->data);

if(b->lchild!=NULL||b->rchild!=NULL)

{printf("(");

DispTree(b->lchild);

if(b->rchild!=NULL)

{printf(",");

DispTree(b->rchild);

}

printf(")");

}

}

else

printf("\0");

}

BTNode SearchX(BTNode b,char X)//查找结点X

{BTNode p;

if(b==NULL) return NULL;

else if(b->data==X) return b;

else

{

p=SearchX(b->lchild,X);

if(p!=NULL) return p;

else

{

return SearchX(b->rchild,X);

}

}

}

void SearchXSon(BTNode b,char X)//查找结点X的所有儿子

{

BTNode p,q;

p=SearchX(b,X); //找到节点X

if(p!=NULL)

{

p=p->lchild;

if(p==NULL) //X没有孩子

printf("节点%c没有儿子!",X);

else

{

printf("节点%c的所有儿子为:",X);

if(p!=NULL)

printf("%c ",p->data);

q=p->rchild;

while(q)

{

printf("%c ",q->data);

q=q->rchild;

}

}

}

else

printf("该结点不存在!");

}

void TraverseBT(BTNode b,int d)//遍历家谱

{

if(b!=NULL)

if(b->degree<d)

{

printf("%c ",b->data);

if(b->lchild!=NULL)

TraverseBT(b->lchild,d);

if(b->rchild!=NULL)

TraverseBT(b->rchild,d);

}

}

void SearchXAncestor(BTNode b,char X)//查找结点X的所有祖先

{

if(b==NULL)

{

printf("这是一棵空树!");

return ;

}

BTNode p=SearchX(b,X);

if(p->degree==0)

{

printf("X为根节点或其兄弟,没有祖先!");

return;

}

printf("%c结点的祖先有:",X);

TraverseBT(b,p->degree);

}

void Distory(BTNode b,char str)//清除全部的记录

{

(b)=NULL;

FILE fp;

fp=fopen("wangljtxt","w");

if(fp==NULL)

{

printf("打开文件失败!");

exit(1);

}

str="";

fclose(fp);

}

你懂的,同道中人!

家族关系图 你好:我想制作我家里所有人的名字 做一个家谱图 请问怎样设计

  家谱图(genogram):家谱图的使用源于系统家庭治疗,是以图的形式描述家庭从祖父母到自己三代人的血亲关系和婚姻关系,可以帮助心理咨...
点击下载
热门文章
    确认删除?
    回到顶部