家谱制作软件哪个好
问题一:目前,最好的家谱制作软件是哪个? 家谱先生61是单机版的,功能挺全的。只能个人用用,无法跟同宗分享。
问题二:我想制作个家谱,可是不知道在电脑上用什么软件好,最好是简单容易操作的 onlinedown/soft/39407
家谱先生(FamilyKeeper) 61
一款国产的具有很高实用价值的专用家谱制作软件。无论您是新修、续修、还是改修老式家谱、或者是抢救复制私藏老谱,该软件都将成为您家谱管理的强有力工具。 该家谱软件的突出特点如下: ・面向大型家谱管理:成功的实现了家谱的分卷管理技术,卷与卷之间有机结合,上下卷之间跳转自如,随意漫游;续卷灵活,纵横方向均可自由续卷,同一部家谱内续卷数量不限,续卷的世代宽度自由安排,从而有效的实现了对大型家谱的管理。 ・多族谱管理:可以同时对多部(任意姓氏的)族谱管理。 ・强劲的族谱维护技术:族谱连接、族谱拆分、更改族谱起始世代数,还可在卷内对节点(子树)任意精确移动。 ・家族成员信息完备:家谱记录内容丰富,资料显示图文并茂,家族成员的数据参数定义完备。 ・检索结果形象丰富:资料检索结果直观形象,配以“寻根链”视图可以一览查询成员的传承脉系。 ・目录、文件管理隐含化:将家谱编写中可能遇到的目录、文件管理工作完全隐含到软件内部,即使电脑知识很少的网友也能轻松上手。 ・家谱打印:该功能是本软件的核心亮点之一,可以将您录入好的家谱资料打印成册,便于分发给家族的各个成员。目前提供四种打印家谱方案: ①方案一:打印家谱内容包括(家族梗概、目录树、父子图、个人资料)等几大部分。 ②方案二:打印家谱内容包括(家族梗概、目录树、阶梯图、个人资料)等几大部分。 ③方案三:打印家谱内容包括(家族梗概、目录树、宝塔图、个人资料)等几大部分。 ④方案四:打印家谱内容包括(家族梗概、目录树、传承图、个人资料)等几大部分。[分横排、竖排两种版式] ・真人肖像模式:使用该显示模式,在世系图上您可以为每个节点上的成员定义制作成员本人的真人肖像,从而使得世系图更加生动、形象。 ・多媒体资料信息管理:软件为每个成员定义了一个相册、影像集和录音集(不加入资料不占空间),您可以将成员精彩的照片、视频及音频资料加入到家谱中,制成一个图、文、像、声并茂的现代数字家谱,软件内置媒体播放器。
downloadenet/page=1
问题三:做族谱用什么软件方便? 看你需要什么类型的家谱:1、纸质家谱:书籍形式,正式规范,需要采集资料、编辑排版、印刷装订,过程较繁琐,成 本 较高。2、网络家谱:通过网站或APP修谱,过程简单,甚至不用钱,操作简单或有使用说明。
家谱是记载家族人文的核心载体,写家谱要明确采用哪种格式。
比如欧阳修式、苏洵式、宝塔式、牒记式、图文对照式、横排图表式、竖排图文式、表记式、图记式等。示例:使用 找你家谱 编修 宝塔式 家谱,形象直观,简洁易用。
手机修谱・网络寻根tiebabaidu/p/4865322667蒲千寻家谱展示tiebabaidu/p/4865510206――找你家谱 FindU
问题四:制作家谱用什么软件好 要求高的话用方正书版、indesign,没什么特别要求的用word就行。
问题五:家谱软件哪个好 coreldraw 差不多
或者Adobe InDesign 也不错
主要得看你会什么软件
问题六:想制作个家谱,有哪些比较实用好用的软件? 那就看看流行的互联网同心圆家谱咯。利用互联网络技术,把传统的纸质家谱转化为数码的、 电子版的数字家谱,清晰明了的展示家谱中的内容,把家族中的每个人都有效的连接起来,形 成一个动态的的家族部落群,共同构成互联网家谱。家谱中的成员可以在互联网家谱中寻找祖 先的足迹、家族历史起源和历程,家族成员信息可以随时查阅和增加,这就是互联网家谱。
问题七:想制作一本家谱,用什么软件好 常见的传统家谱都是纸质的,方便就数电子版本的家谱了。(百姓通谱网)
优势:
1、经济、准确。传统修缮家谱耗时耗力。
2、便于携带、传递、保存。互联网家谱的问世让家谱更容易携带,只需一张U盘,复制,粘贴即可。互联网家谱不怕潮湿不发霉。不怕虫蛀不少页,让家谱保存更加方便。
3、超大容量。在这个信息时代,文字。声音。。视频等媒体信息,也可以存放于互联网家谱中。让家谱内容更充实。互联网家谱的超大容量可录入更多的个人信息和媒体资料。
4、查看方便。便于修改。有续传承。互联网家谱真正实现查看方便,不必再为了查找祖源时亲自到当地看家谱。互联网家谱结合传统的修谱模式与现代人的现实需求,可以不受时间和空间的限制。让身在不同地域的家族人都可以共同管理。真正实现有续传承。
5、隐私保护,授权浏览。
问题八:家谱软件哪个好 国产的亿图不错,操作方便,图形、线条、添加这些添加都很方便,还可以直接使用模板、一键从数据库快速的创建家谱、族谱,下面是亿图里边的一个例子,你可以参考一下:
问题九:制作家谱用什么软件好 传承家谱程序是专门做树形家谱的程序,而且输出为WORD文档,也可以图形输出。 输出树形谱系为TXT文件,可以输出任意大小的树形谱系,避免了版面上的限制。 可以在百度搜索,最新版本为520
问题十:想制作一本族谱,用什么软件好? 天下家谱 V6112下载多特软件站OKOKOKOK
求采纳为满意回答。
目录部分1:研究你家族的历史1、写下你想要包含在图中的人。2、通过一些研究填补漏洞。3、确定你想要突出的其他信息。4、决定是否要包含照片。部分2:创建树状图1、从你们这一代开始。2、从你的父母辈填写。3、画你的祖父母那一代。4、决定你要追溯到几代之前。部分3:使其独一无二1、自己来美化你的家族树状图。2、使用软件来创建一个计算机生成的树。3、考虑让一个艺术家做一个原始的再现。制作家谱图,可以用来有效地展示你的家族史。首先从最高辈分的人开始画,找出谁是他的子女,然后每一代创建一个家庭树分支。然后加工一下,可以把这个图变成一个值得展览的艺术品,或者仅仅是为了保存给子孙而制图,世世代代传下去。请参阅步骤1开始。
部分1:研究你家族的历史
1、写下你想要包含在图中的人。家谱从你的家庭开始,家谱树从那里出来分支出来。首先写下你的直系亲属人的名字,然后移动到你的上一代。请确保你没有遗漏的人!你的家谱将是你家族历史的一个重要部分,所以需要时间来建立一个准确的图。写下你的名字,你的兄弟姐妹的名字,和你父母的名字。
写下你的祖父母的名字,你叔叔阿姨的名字和你的表兄弟姐妹的名字。
写下你的曾祖父母的名字和你大叔叔阿姨的名字。
很多人在那里就停止了,但只要你想,你就可以尽可能多的多画几代。
2、通过一些研究填补漏洞。一旦你追溯到前几代,填名字可能就比较困难了。努力确保每个人都有包括在内、所有的名字是准确的,进行一些研究,仔细检查自己的家谱树。这是一个大好机会去更多地了解你的家族历史。和你的家庭老年成员谈谈,去了解更多信息。找出你的祖父母的兄弟姐妹及其配偶,子女的姓名。尽你所能问问周围的人。如果你幸运的话,你也有机会可以听到一些奇怪的家庭故事和秘密了。
用家谱工具在网上做研究。网上有很多工具,你只需输入你的名字和你父母的名字,然后会为你做所有的研究调查。这些网站通常给你一个有限的可用信息量,然后你需要更多的深入研究。如果你是认真在绘制你的祖先,这是一个很好的方式来收集信息。
3、确定你想要突出的其他信息。此外,要包括你家人的姓氏和名字,你可能想要列出他们的出生日期,死亡日期(如适用),注册结婚日期,等等。在家族树上有了这些日期会有更加详细的信息作为你的家人的一个历史文件。除了日期,你可以考虑,包括你的亲人"的发祥地和家乡。
4、决定是否要包含照片。如果你有机会得到你祖先的照片,在每个人上面你可以有一个小小的肖像。相对包含的话此选项最适合家庭树,因为照片可能会占用很多的空间在你的成品图上。如果你只有几张照片,你可以只包含你的直系家庭成员的照片。
尽可能多的追查家族成员的照片。如果你想使他们所有的照片大小相同,扫描到您的计算机。使用PS或其他照片编辑程序来更改比例。
部分2:创建树状图
1、从你们这一代开始。这是树的基础上,包括你,你的父母,你的兄弟姐妹。图的形状会是你的选择。如果你想让它另辟蹊径垂直,并延续向浓密的上方,像一棵树,从一大张纸的底部开始。你也可以开始于一张纸的左边,这样的图将很容易从左侧看向右侧。无论你希望你的图是什么形状,填写以下信息即可开始:写下你的名字。
画一条线从你的名字到你母亲的名字。从你的名字到你父亲的名字再画另一条线。画一条水平线连接你的母亲和父亲。
如果你有兄弟姐妹,画一条线从你父母的名字到他们的名字。
如果你的兄弟姐妹有配偶,把他们名字写上,并用线连接起来。
如果你的兄弟姐妹有孩子,把他们名字写上,并用线将他们连接起来。
2、从你的父母辈填写。现在是时候填写第二代-你的父母辈。连接横线在每个已婚夫妇上,然后连接一条线向他们的孩子。写你外公外婆的名字在你妈的名字上面。写你的祖父母的名字在你父亲的名字上面。
把你的外公外婆的名字和你妈的兄弟姐妹名字姐连接起来。把你的祖父母的名字和你父亲的兄弟姐妹的名字连接起来。
添加你叔叔阿姨配偶的名字。
添加你叔叔阿姨的孩子,你的表兄弟姐妹的名字。
3、画你的祖父母那一代。如果你有一个大的家庭,你的图可能已经有要投奔的页面边缘的威胁了。有些人停在了这里,有两组祖父母作为他们家谱图中的树冠。如果你想继续前进,是时候包括你的祖父母那一代了。记住要连接已婚夫妇是水平线,然后话一条线连接家长和子女。添加你的外祖母的父母亲和你祖外公的父母亲的名字。这是你的曾祖父母。
添加你的曾祖母的父母亲和你曾祖父的父母亲的名字。这是你的曾曾父母。
添加您的外祖父母的兄弟姐妹的名字-你的叔外祖父叔外祖母
添加你的祖父母的兄弟姐妹的名字-你的舅爷和姨奶奶。
填写你叔外祖父母的配偶和子女的姓名。
4、决定你要追溯到几代之前。如果你正在享受你研究家族历史的经验,尽你所能不断追溯就可以。没有限制你的家族树状图的潜在规模,尤其如果是它的数量!
部分3:使其独一无二
1、自己来美化你的家族树状图。现在你的图完成了,该考虑把它艺术化就可以自豪地与您家里的其他人分享。用铅笔复制家谱图在一大张绘制图上,然后用漂亮的墨水或油漆呈现出名称,并添加丰富多彩的装饰。您可以选择使用经典的树的形状,或尝试一些新的创意来说明你的祖先。这里有几个想法:把连接线分行,并在不同的叶子上写下每个人的名字。孩子的名字也可以写在苹果或浆果上。
使你的家族谱画成一个星系,并在行星和恒星写上大家的名字。如果你想也可以把你的名字写在"太阳"上。
创建你的家族谱成为一个家庭邻里,在每一个小房子上写下每个人的名字,全部由街道相连。
2、使用软件来创建一个计算机生成的树。如果你想让你的图看起来优美,但你不希望自己来创建,从网上选择有数以百计的选择。搜索"免费家谱"拿出模板或自动生成的图表,你可以打印出来,挂在墙上。
3、考虑让一个艺术家做一个原始的再现。找一个艺术家来呈现你的家谱作为一个原始艺术的美丽作品。您可以选择用书法的方式写上名字,并已对其中设定一个华丽的背景。如果你做一个网上搜索"家谱艺术家",你会发现艺术家的名单可以委托他们制作。,在不同的组合仔细看,找到一个艺术家的作品适合你家的风格。
一、姓氏源流 姓氏源流就是同一族得姓的来源与变迁,中国人的姓氏渊源大多很为古老,假若没有古书或旧谱的记载,后人就很难考究得清楚。从一姓到一国一家,不能不知晓自己根源来自何处,认清自己的姓氏来源,每套《家谱》都详细介绍了自己姓氏源流,这样才能世世代代承继,也能将族系根缘流传千百年。 中国姓氏在经过历史不断演变,如:战乱,迁移,改朝换代,以及避讳改姓、避难改姓、复姓改为单姓等,姓氏变得更为复杂,其真正的出处、源头就更需要详细考证了,《家谱》中有详细记载。 封建时代,许多姓氏为了抬高自己的门第和郡望,习惯于与名人扯上关系,或硬追溯到某皇帝作自己的祖先。却不知道,这影响了血缘的纯正和确实性,后人不可不慎。《家谱》中有“叙本系、述始封”的传统,它的目的也在于“明世次、别亲疏”以及考订姓氏源流。《家谱》均有记载姓氏的一章,以叙述家族得姓的来源,或是家族因某种原因改姓的历史。所以《家谱》中的姓氏源流就变得很重要,它是明辨您家族血统的证明文献。 二堂号 堂号是一个姓氏的特殊标识,它能显示姓氏发源的地缘关系。在家谱中,堂号具有联系姓氏与宗族关系的意义,也是后代寻根问祖的重要线索之一。 堂号名称一般取自于郡号名或为纪念家族史祖或名人而自创。 一般来说,堂号多取自于郡号名,郡是秦、汉时期对行政区域的建置,郡号名又取自于郡名,或诸侯国名,地方府、州、县名。随着姓氏家族的发展壮大,就出现了以各姓氏名门望族发祥地的郡名作为郡号的由来。 大家族日久人众,或是遇至天灾连年之时,族人就会因迁徙流离,而散布各地。于是就有了在“总堂号”之下,再加入“分堂号”名称的方法。“总堂号”代表家族(姓氏)的发祥地,寓后人以不忘本源,“分堂号”则是族人迁徙至新地,成为当地有名望家族后,以该地的郡号作为堂号,“总堂号”和“分堂号”统称为“郡望”。 因为各族姓基本上都是以郡名作为自己家族的郡号,所以就有了若干姓氏同为一个堂号的现象。例如:王,胡这两个姓的郡望都是“清河堂”。 堂号名称的另一出处:自创堂号,乃家族中人自立的堂号,该堂号名称一为有别于各姓氏的分支别派,二为铭记祖先或名人的公德事迹或教诲。例如:杨氏的“四知堂”寓意“天知、地知、我知、子知”的为人风范。 三世系表 如果发现一本关于您身世的家谱,您最想看的是什么哪?是不是想知道自家的祖先是谁?家族中曾有过哪些名人、功绩?家族中人现在哪里?等等,所有的答案就在家谱的世系表中。作为家谱中最重要的内容,“世系表”,简而言之,就是说明一个家族成员,如:父子、兄弟间的相互关系,写清楚祖先后代每一个家族成员名字的图表。它有四种基本的记述格式:欧式、苏式、宝塔式和牒记式。 欧式:又称横行体,是北宋文学家欧阳修创立的。欧式的特点是:世代分格,由右向左横行,五世一表,用起来很方便。欧式中,每个世代人名左侧都有一段生平记述,介绍该人的字、号、功名、官爵、生辰年月日、配偶、藏地、功绩等。 苏式:又称垂珠体,是北宋文学家苏洵创立的。苏式世系表的特点是:世代直行下垂,世代间无横线连接,全部用竖线串连,图表格式也是由右向左排列的,主要是强调宗法关系。 宝塔式:顾名思义,就是将世代人名象宝塔一样,由上向下排列。宝塔式采用横竖线连接法,竖线永远处在横线的中间,这对人多的大家族来说,因人名不可能排在同一页纸上,兄弟之间长幼关系不清,会为写谱、看谱带来很多不便。 牒记式:不用横竖线连接世代人名间的关系,而是纯用文字来表述这种关系。每个人名下都有一个相关的简介,如:字、号、功名、官爵、生辰年月日、藏地、功绩等。牒记式的世系形式固定,次序分明,比较节约纸张。 以上四种世系表形式都各有特色,这是一般族谱中比较常见的世系表,但也有其它的变化,我们在记述家族世系表时,可根据掌握材料的多少、家族成员的多少等灵活采用,总之,世系表要易看易懂、内容真实、层序分明,这才是最为重要的。 四家训 家训也是家谱中的重要组成部分,它对传统宗族教育起了很大的作用。远古时代,人类社会经历了氏族、家族、家庭的变迁,然而,这些都是形成一个国家的基石。在国家不安定和国法不明确之际,家训即可发挥稳定社会秩序的力量。因为,家族为了维持必要的法制制度,就拟定一定的行为规范来约束家族中人,这便是家法家训的最早起源。 自汉初起,家训著作随着朝代演变渐丰富多采。家谱中记录了许多治家教子的名言警句,成为人们倾心企慕的治家良策,成为“修身”、“齐家”的典范。例如“一粥一饭,当思来之不易”的节俭持家思想,今天看来仍有积极意义。在家谱中有不少详记家训、家规等以资子孙遵行的。当中,最为人称道的名训,如颜氏家训、朱子治家格言等,至今脍炙人口。 家训之所以为世人所重,因其主旨乃推崇忠孝节义、教导礼仪廉耻。此外,提倡什么和禁止什么,也是族规家法中的重要内容,如:“节俭当崇”、“邪巫当禁”等。 简言之,每个家族都有不同的族规家训。家谱中较为常见者,大致包括了以下内容:(一)、注重家法、国法(二)、和睦宗族、乡里(三)、孝顺父母、敬长辈(四)、合乎礼教、正名分(五)、祖宗祭祀、墓祭程序 五家传 要想深入了解世系表中族人的历史功绩,那就得看家传了。 家传,是用来记述家族中有名望、有功绩人的事迹的文体,是一种正式的传记,明朝之前,传与谱是分开来记的。 “传记”记述了一个人一生的功绩品德,从对国家、民族、社会的贡献,到对地方、家族做的每一件业绩,如:出资修建词堂、祖墓等,全部记述在内,以作为后人学习之榜样,并荣耀家族。 家传一般分为:列传、内传和外传等。列传是记录家族中有功绩男子的传记;内传是记录家族中有品行女子的传记;外传是记录家族中已出嫁有品行女子的传记。 传记中多配有该人的画像或关于该人的故事图画,让后代读起来倍感生动形象。 家传之用词以真实平朴为重,最忌溢美之词。这也是评价一部“家传”水平高低与否的重要标准。 六艺文著述 “谱乃一家之史“,其中当然少不了家人的艺文著述。自六朝起,就有将家族中名人的著作录入家谱的惯例,尤其是到了明朝,此风更盛,这部分的内容更加丰富了,涉及史学、文化、经济、宗教等许多领域,在形式上甚至堪于”经典史料“相媲美。 家谱中的艺文著述,在体例上一般称作:艺文志、辞源集、文征集等。 “艺文著述”以家族中名人所写的诗文著作为主要内容,也收集本族人与外人的书信来函,以及经籍、表策、碑文、书札等,有的还有版画、肖像画、版本作品、名家书法、歌曲等,从形式到内容都十分丰富。 艺文著述是家族先人的心血结晶,其中的大量珍贵史料文献,有着非常珍贵的参考和欣赏价值。但是,由于艺文著述的种类、内容繁多,而又良不齐,所以还需后人用心整理,方能使家族中的艺文精品得以流传和利用。 同时,我们在续补家谱现代艺文著述时,更需精心挑选,慎重录入,把最有价值和代表性的文献传给后代。 七家谱图像 家谱之体现,能合书、图、史、表、志为一体者,它的利用价值就显得大些。家谱主要以文字内容为主,资料为副,但一张好的、照片仍是能将时代的精神面貌和特质传达出来。 将、照片纳入家谱的意义在于,为家族传承提高了一个最直接的环境背景,使家谱不在局限在文字文字记录、整体概念也变得鲜明而生动起来。 只要是能让人对家谱有更进一步认识的古地图或老照片,均应该被收入家谱里,包括:1)老照片家中存有的古老黑白照片、一家人的合照等,都有其历史价值,也是见证家谱的最原始材料。2)祖先(遗像、人物画、肖像画)中国历代以来多有大量之人物画及肖像画,其中有大部分是为了纪念先人,或表达对圣贤亲人的追慕。也有些家谱将家族先人中显达之人,画出其仪容,置于卷首,以求达到光大族望,启迪后人的目的,有些也刊载一些先人手泽遗墨。3)风水图(祠堂图、墓图)祠堂是供奉先人的地方,在古代更是家族聚会之所,所以一般的家谱均有记载和刊载建物版图、描绘实状,有些更是附刊墓图,有些甚至详记地理方位。人们相信一个家族的兴衰和祖辈所居住、埋葬的地点有很深的关系,这些都蕴涵着丰富的“风水”内容,所以也被称为“风水图”。4)故居/村庄图明清族谱中不但记述居址迁徙,很多富家所修的谱书中,还以精美的版图,印制出他们家族的庭院、楼阁、书斋、房舍等。
C++语言: 二叉树实现的简单家谱树
/
File Name: BiTreecpp
Author: Geng Lequn[glq2000@126com]
Thur July 1 2010
Discription: 建立二叉家谱树,实现输入任意两个人的名字,查找得到其关系
/
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <mathh>
using namespace std;
typedef struct _Node
{
string sex; //性别 m 男; f 女
string name; //此人的姓名
string spause; //配偶的姓名
unsigned short level; //层次 辈分最高一层为1,下一层为为2,以此类推
struct _Node l_child; //指向其第一个孩子的指针
struct _Node r_brother; //指向其某一个兄弟姐妹的指针, 即左孩子为其后代,右孩子为其兄弟姐妹
struct _Node btr; //指向其父亲或者母亲的指针
_Node():level(0),l_child(NULL),r_brother(NULL),btr(NULL){cout<<"constructor"<<endl;}
~_Node(){cout<<name<<" destructor"<<endl;}
}Node, PNode;
void CreateBiTreePreOrder(PNode &pn, PNode pback, unsigned short depth);//建立二叉家谱树,以先序方式
void VisitBiTreePreOrder(PNode root); //前序遍历此二叉树
void TellRelation(PNode root); //判断两人关系
void DestroyBiTreePostOrder(PNode root); //销毁二叉树,释放节点占用的空间
void FindPersonMiddleOrder(PNode root, string name, PNode &presult); //返回家谱中指向某人的指针,找不到返回NULL
Node root=NULL; //全局变量,二叉树的根节点
unsigned findPersonFlag = 0; //标志位,0 没找到; 1 找到,找到后就不再搜索直接返回;利用此flag可避免将整个tree遍历一遍(若该name在tree中存在的话)
int main()
{
cout<<"请按先序遍历的顺序根据提示输入家谱信息,不存在则输入\"#\""<<endl;
CreateBiTreePreOrder(root, NULL, 1);//建立二叉家谱树,以先序方式
VisitBiTreePreOrder(root); //前序遍历此二叉树
TellRelation(root); //判断两人关系
DestroyBiTreePostOrder(root); //销毁二叉树
getchar();getchar();getchar();
return 0;
}
/
function:建立二叉家谱树,以先序方式
argument:
pn: 指向二叉树节点的引用
pback: pn这个节点的btr指针的值,即指向其parent的指针
depth: 该节点的层次,分最高一层为1,下一层为为2,以此类推
/
void CreateBiTreePreOrder(PNode &pn, PNode pback, unsigned short depth)
{
string str;
cin>>str; //输入该人信息,格式是 sex-name-spausename,如不存在则输入#
if(str == "#") //如: M-tom-marry, 表示此人叫tom, 男性, 配偶名字marry
{
pn = NULL;
return;
}
//如果是自定义的struct/class,应该使用构造函数。如果是内建数据类型,
//比如int,应该memset。 当然,更好的建议是使用vector取代new出来的数组
pn = new Node;
//处理输入的字符串
vector<string> v;
for(size_t b=0, e=strfind('-'); ; e=strfind('-', b))
{
if(e == string::npos)
{
vpush_back(strsubstr(b));
break;
}
else
vpush_back(strsubstr(b, e-b));
b = e+1;
}
//初始化该节点
pn->sex = v[0];
pn->name = v[1];
pn->spause = v[2];
pn->btr = pback;
pn->level = depth;
//递归建立左右子树的节点
CreateBiTreePreOrder(pn->l_child, pn, depth+1); //注意后两个参数的值
CreateBiTreePreOrder(pn->r_brother, pback, depth); //注意后两个参数的值
}
/
function: 前序遍历此二叉树
/
void VisitBiTreePreOrder(PNode pn)
{
if(!pn)
return;
cout<<endl<<"sex:"<<pn->sex<<endl;
cout<<"name:"<<pn->name<<endl;
cout<<"spause:"<<pn->spause<<endl;
cout<<"level:"<<pn->level<<endl;
cout<<"father's name:"<<((pn->btr == NULL)"NULL":pn->btr->name)<<endl;
cout<<"======================"<<endl;
VisitBiTreePreOrder(pn->l_child);
VisitBiTreePreOrder(pn->r_brother);
}
/
function: 中序遍历找到家谱中的一个人,返回其指针,若找不到,返回NULL
isSpause 1表示是找到的节点的配偶 0表示不是所找到的节点的配偶
/
void FindPersonMiddleOrder(PNode pn, string name, PNode &presult)
{
if(!pn)
return;
FindPersonMiddleOrder(pn->l_child, name, presult);
if(findPersonFlag) return;
if(name == pn->name || name == pn->spause)
{
presult = pn;
findPersonFlag = 1; //全局标志位,0 没找到; 1 找到,找到后就不再搜索直接返回;利用此全局flag可避免将整个tree遍历一遍(若该name在tree中存在的话)
return; //下次使用前不要忘记置为0
}
FindPersonMiddleOrder(pn->r_brother, name, presult);
}
/
function: 判断两人关系,若两人中至少一人不在树中,则两人无关系
若两人在树中,先判断两人是否同层次,若同层,判断是否是亲兄弟姐妹;
若不同层,设辈分大的人为A,辈分小的人为B,判断A和B是亲的还是表的,
比如,A为男性,且比B大一倍,判断A是否为B的爸爸,或亲叔叔(舅舅),或表叔叔(舅舅)
简单起见,此处没有区分是叔叔还是舅舅
比如,A为男性,且比B大两倍,判断A是否为B的亲爷爷(姥爷),或亲爷爷(姥爷)的亲兄弟
,或亲爷爷(姥爷)的表兄弟
简单起见,此处没有区分是叔叔和舅舅等做进一步区分
简单起见,查询时只输入节点中的name,不查询spause,否则处理起来太麻烦
/
void TellRelation(PNode pn)
{
string name1, name2;
//p1指向name1, p2指向name2, pbig指向辈分大的,psmall指向辈分小的
PNode p1 = NULL, p2 = NULL, pbig = NULL, psmall = NULL;
int differ = 0; //两人辈分数的差别
string title;
Label:
cout<<endl<<"输入想查询关系的两个人的名字,不想查则将两人名字输成#:"<<endl;
while(cin>>name1 && cin>>name2)
{
if(name1=="#" && name2=="#") return;
p1 = NULL; p2 = NULL; //因为程序是循环执行的,需要将上次遗留的值清掉
findPersonFlag = 0;
FindPersonMiddleOrder(root, name1, p1);
findPersonFlag = 0;
FindPersonMiddleOrder(root, name2, p2);
if(!p1 || !p2) //若有一个为空或都为空,说明至少有一个人不在家谱中,故两人无亲缘关系
{
cout<<name1<<((!p1)" 不在":" 在")<<" 家谱树中"<<endl;
cout<<name2<<((!p2)" 不在":" 在")<<" 家谱树中"<<endl;
cout<<name1<<" 和 "<<name2<<" 间没有关系"<<endl<<endl;
goto Label;
}
differ = (int)abs(p1->level - p2->level);
if(!differ) //辈分一样大
{
if(p1->sex == p2->sex)
{
if(p1->sex == "M") title = "兄弟关系";
else title = "姐妹关系";
}
else title = "兄妹(姐弟)关系";
if(p1->btr == p2->btr) //parent相同
cout<<name1<<" 和 "<<name2<<" 间是 "<<" 亲 "<<title<<endl;
else
cout<<name1<<" 和 "<<name2<<" 间是 "<<" 表 "<<title<<endl;
}
else //辈分不一样大
{
if(p1->level < p2->level) {pbig = p1; psmall = p2;}
else {pbig = p2; psmall = p1;}
switch(differ)
{
case 1:
if(psmall->btr == pbig)
title = ((pbig->sex == "M")"爸爸":"妈妈");
else
{
if(psmall->btr->btr == pbig->btr)
title = ((pbig->sex == "M")"亲叔(舅)":"亲姑(姨)");
else
title = ((pbig->sex == "M")"表叔(舅)":"表姑(姨)");
}
break;
case 2:
if(psmall->btr->btr == pbig)
title = ((pbig->sex == "M")"爷爷(姥爷)":"奶奶(姥姥)");
else
{
string tmp = ((pbig->sex == "M")"兄弟":"姐妹");
if(psmall->btr->btr->btr == pbig->btr)
title = ((psmall->btr->btr->sex == "M")"爷爷(姥爷)的亲":"奶奶(姥姥)的亲") + tmp;
else
title = ((psmall->btr->btr->sex == "M")"爷爷(姥爷)的表":"奶奶(姥姥)的表") + tmp;
}
break;
default:
string tmp2;
PNode pt = psmall;
int n = differ-2; //计算"老"字 (即grand这个字) 出现的个数
for(int i=0; i<n; ++i)
tmp2 += "老";
for(int i=0; i<differ; ++i)
pt = pt->btr;
if(pt == pbig)
title = tmp2 + ((pbig->sex == "M")"爷爷(姥爷)":"奶奶(姥姥)");
else
{
string tmp3 = ((pbig->sex == "M")"兄弟":"姐妹");
if(pt->btr == pbig->btr)
{title = tmp2 + ((pt->sex == "M")"爷爷(姥爷)的亲":"奶奶(姥姥)的亲"); title+=tmp3;}
else
{title = tmp2 + ((pt->sex == "M")"爷爷(姥爷)的表":"奶奶(姥姥)的表"); title+=tmp3;}
}
break;
}
cout<<pbig->name<<" 是 "<<psmall->name<<" 的 "<<title<<endl;
}
goto Label;
}
}
/
function: 后序遍历销毁此二叉树,释放节点占用的内存空间
/
void DestroyBiTreePostOrder(PNode pn)
{
if(!pn) return;
DestroyBiTreePostOrder(pn->l_child);
DestroyBiTreePostOrder(pn->r_brother);
delete pn;
}
家谱可不是随便编的。编家谱实际应是续家谱。一般的家谱都是有章法的,依着字号顺序排列。当字号用完或即将用完时,应有几位本家性氏的年长老者,举行续家谱仪式,共同商定往下排续的字号,而选续的字号决不允许与先辈的字号重复。
例如:常永志--“常”是姓氏,永志是名字,“永”就是永字辈的家谱字号。而字号用在名字的第一位或第二位均可。
如果老师让你们编家谱的话,那么你们的老师是个白痴。
家谱制作软件哪个好
本文2023-10-13 06:54:20发表“资讯”栏目。
本文链接:https://www.lezaizhuan.com/article/242318.html