家谱的实现与设计

家谱的实现与设计
家谱的实现与设计

课程设计报告

课程设计名称:数据结构课程设计系:三系

学生姓名:朱强

班级:13软件

学号:20130311227

成绩:

指导教师:刘杰

开课时间:2014-2015学年一学期

设计题目一:家谱的实现与设计

一、实习目的

通过学习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、编码集成以及调试分析,熟练掌握数据结构的选择、设计、实现、以及操作方法,为进一步的开发应用打好基础。

二、问题描述

家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。可。基本功能如下:

(1)家谱祖先数据的录入(树的根结点)。

(2)家庭成员的添加:即添加某一人的儿女,儿女的数目由控制台端给出,然后输入相应的儿女姓名(此处儿女的姓名不能重名)。

(3)家庭成员的修改:可以修改某一成员的姓名。

(4)员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。

(5)家庭成员的删除:删除此成员时,若其有后代,将删除其所有后代成员。

三、需求分析

该程序所做的工作是对家族成员的的管理,为家族成员对各代成员的姓名,性别及子女情况的记录、查询提供方便。此程序规定:

1.在姓名录入时,姓名为10个字母以内的字符串;性别以M/F表示;

2.程序的输出信息主要为:输出家族成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。

3.程序的功能主要包括:家谱祖先数据的录入、家庭成员的添加、家庭成员的修改、员的查询、家庭成员的删除;

四、概要设计

系统用到的数据有:

char name[MAX];

char sex; /

int generation;

1)typedef struct node{ } //定义data存储结构

2)typedef struct ft{ } //创建结构体

3)ft *search(ft *p,char ch[]) // 搜索指针函数

4)ft *parent(ft *p,ft *q,int *flag) //通过parent函数得到双亲结点。用flag 标志,-1为左孩子,1为右孩子

5)int generation(ft *p,char ch[]) // 获得搜索到的成员的代目的返回值

6)void saves(ft *p,char b[],char c,int d) //建立家谱孩子结点创建结点并对l赋值保存

7)void InitTree() //初始化

8)void Add() //添加

9)void Search() //查询

10)void Change() //修改

11)void Delete() //删除

12)int main() //主函数

各程序模块之间的调用关系:

主函数12)可以调用7)至11)。

五、详细设计

#include

#include

#include

#include

#define MAX 10

typedef struct node{ //定义data存储结构

char name[MAX]; //姓名

char sex; //性别

int generation;//代目

}node;

typedef struct ft{ //创建结构体

struct node l; //家谱中直系家属

struct ft *lchild;//用来指向兄弟

struct ft *rchild;//用来指向孩子

}ft;

ft *root; //root是结构体ft的指针

ft *search(ft *p,char ch[]) // 搜索指针函数

{

ft *q;

if(p==NULL)

return NULL;//没有家谱,头指针下为空

if(strcmp(p->https://www.360docs.net/doc/7e10845526.html,,ch)==0)

return p;//家谱不为空,头指针下有这个人

if(p->lchild)

{

q=search(p->lchild,ch);//在兄弟中找

if(q)

return q;//找到

}

if(p->rchild)

q=search(p->rchild,ch); //在孩子中找

if(q!=NULL)

return q;

}

return NULL;//没有找到

}

ft *parent(ft *p,ft *q,int *flag) //通过parent函数得到双亲结点。用flag标志,-1为左孩子,1为右孩子

{

if(p==NULL)

return NULL; //没有家谱,头指针下为空

if(p->rchild==NULL)

{

*flag=0;

return NULL;

}

else

{

if(p->lchild==q)

{

*flag=1;

return p;

}

else

{

if(p->rchild==q)

{

*flag=-1;

return p;

}

else

{

if(p->lchild!=NULL)

{

parent(p->lchild,q,*&flag);

}

if(p->rchild!=NULL)

{

parent(p->rchild,q,*&flag);

}

}

}

}

int generation(ft *p,char ch[]) // 获得搜索到的成员的代目的返回值

{

ft *q;

if(p==NULL)

return NULL;

if(strcmpi(p->https://www.360docs.net/doc/7e10845526.html,,ch)==0)

return p->l.generation; //家谱不为空,头指针下有这个人

if(p->lchild)

{

q=search(p->lchild,ch); //在兄弟中找

if(q) return q->l.generation; //找到

}

if(p->rchild)

{

q=search(p->rchild,ch); //在孩子中找

if(q!=NULL)

return q->l.generation;

}

return NULL;

}

void saves(ft *p,char b[],char c,int d) //建立家谱孩子结点创建结点并对l赋值保存{

for(int i=0;i

p->https://www.360docs.net/doc/7e10845526.html,[i]=b[i];

p->l.sex=c;

p->l.generation=d;

}

void disp(ft *n) //搜索到数据的输出

{

ft *t=NULL;

printf("此人姓名:%s 性别%c 为第%d代\n",n->https://www.360docs.net/doc/7e10845526.html,,n->l.sex,n->l.generation);

printf("\n");

printf("此人的子女:"); //子女输出

if(n->rchild==NULL)

{

printf("此人无子女!");

}

else

{

if(n->rchild->lchild==NULL)

{printf("姓名:%s 性别:%c\t",n->rchild->https://www.360docs.net/doc/7e10845526.html,,n->rchild->l.sex);}

else

{

printf("姓名:%s 性别:%c\t",n->rchild->https://www.360docs.net/doc/7e10845526.html,,n->rchild->l.sex);

t=n->rchild->lchild;

while(t!=NULL)

{

printf("姓名:%s 性别:%c\t",t->https://www.360docs.net/doc/7e10845526.html,,t->l.sex);

t=t->lchild;

}

}

}

printf("\n");

printf("\n");

printf("此人的同辈成员:"); //同辈输出

if(n->lchild==NULL)

{

printf("此人无同辈成员!");

}

else

{

if(n->lchild->lchild==NULL)

{printf("姓名:%s 性别:%c\t",n->lchild->https://www.360docs.net/doc/7e10845526.html,,n->lchild->l.sex);}

else

{

printf("姓名:%s 性别:%c\t",n->lchild->https://www.360docs.net/doc/7e10845526.html,,n->lchild->l.sex);

t=n->lchild->lchild;

while(t!=NULL)

{

printf("姓名:%s 性别:%c\t",t->https://www.360docs.net/doc/7e10845526.html,,t->l.sex);

t=t->lchild;

}

}

}

printf("\n");

}

void InitTree() //初始化

{

char b[MAX],c;

int a;

printf(" 请输入始祖的姓名性别:\n");

printf("输入姓名(不超过10个字符)\n");

printf("性别:[M/F(男/女)] \n");

printf("格式:XX M(姓名为XX性别男)\n");

free(root); //释放root (ft)空间

root=(ft *)malloc(sizeof(ft)); // 创建一个ft结构体大小的空间然后强制转换为ft *类型的指针然后赋值给root ,这时root指向一个struct dictree结构体大小的新空间scanf("%s %c",&b,&c);a=1; //输入姓名,性别

root->rchild=NULL; //清空左右孩子

root->lchild=NULL;

saves(root,b,c,a); //存入结构

printf("家谱重构成功!\n");

}

void Manu()

{

printf(" *********************************************\n");

printf(" ***** 请选择对家谱的操作: *****\n");

printf(" ***** 0.退出*****\n");

printf(" ***** 1.添加*****\n");

printf(" ***** 2.查找*****\n");

printf(" ***** 3.修改*****\n");

printf(" ***** 4.删除*****\n");

printf(" ***** 5.重构*****\n");

printf(" *********************************************\n");

}

void Add() //添加

{

ft *n,*m,*t=NULL;

char b[MAX],c,d[MAX];

int i;

printf("请输入要添加子女的上一辈的姓名:\n"); //判断是否有重名

scanf("%s",&d);

n=search(root,d);

int a=generation(root,d);

while(n==NULL)

{

printf("此人不在家谱内,请重新输入姓名:\n");

scanf("%s",&d);

n=search(root,d);

} //孩子信息添加if(n->rchild==NULL)

{

printf("孩子姓名与性别输入:\n");

scanf("%s %c",&b,&c);

a++;

m=search(root,b);

if(m!=NULL)

{

printf("出现重名,添加失败!\n");

}

else

{

n->rchild=(ft *)malloc(sizeof(ft));

n->rchild->lchild=NULL;

n->rchild->rchild=NULL;

saves(n->rchild,b,c,a);

printf("添加成功!\n");

}

}

else

{

n=n->rchild;

while(n->lchild!=NULL)

n=n->lchild;

printf("孩子姓名与性别输入:\n");

scanf("%s %c",&b,&c);

a++;

m=search(root,b);

if(m!=NULL)

printf("出现重名,添加失败!\n");

else

{

t=(ft *)malloc(sizeof(ft));

saves(t,b,c,a);

t->lchild=NULL;

t->rchild=NULL;

n->lchild=t;

printf("添加成功!\n");

}

}

}

void Search() //查询

{

ft *n;

char d[MAX];

printf("输入姓名,查找相关信息:\n");

scanf("%s",&d);

n=search(root,d);

while(n==NULL)

{

printf("此人不存在,请再次输入:\n");

scanf("%s",&d);

n=search(root,d);

}

disp(n);

}

void Change() //修改

{

char a[MAX],r[MAX],c;

ft *n;

printf("请输入要修改人的姓名:");

scanf("%s",&a);

n=search(root,a);

while(n==NULL)

{

printf("此人不存在,请重新输入姓名:\n");

scanf("%s",&a);

n=search(root,a);

}

printf("此人存在,请输入新信息:");

scanf("%s %c",&r,&c);

for(int i=0;i

n->https://www.360docs.net/doc/7e10845526.html,[i]=r[i];

n->l.sex=c;

printf("修改成功!\n");

}

void Delete() //删除

{

ft *n,*m;

int flag;

char d[MAX],a[MAX];

printf("请输入要删除人的姓名:");

scanf("%s",a);

n=search(root,a);

while(n==NULL)

{

printf("此人不存在,请重新输入姓名:\n");

scanf("%s",&a);

n=search(root,a);

}

printf("\n");

printf("此人已找到!\n");

printf("\n");

m=parent(root,n,&flag);

if(flag>0)

{ m->lchild=n->lchild;

printf("删除成功!\n");

}

else if(flag<0)

{ m->rchild=n->lchild;

printf("删除成功!\n");

}

else if (flag == 0)

{

root->l.generation = NULL;

root->l.sex = NULL;

strcpy(root->https://www.360docs.net/doc/7e10845526.html,, "");

printf("删除成功!\n");

}

}

int main()

{

system("color 5a");

InitTree();

for(;;)

{

system("pause");

system("cls");

Manu();

int choice;

scanf("%d",&choice);

switch(choice)

{

case 0:exit(0); break;//退出

case 1:Add(); break;//添加

case 2:Search(); break;//查找

case 3:Change(); break;//修改

case 4:Delete(); break;//删除

case 5:InitTree(); break;//初始化}

}

return 0;

}

六、测试分析

建立一个家谱,输入第一代人的姓名与性别

以上为,在第一代aa下添加子女:bb、cc、dd,在第二代bb下添加子女ee、ff,在cc下添加子女gg

修改bb为hh,修改gg为ii,查找一下,发现已修改成功

删除ee、hh,查找一下,aa子女hh、bb子女ee本身及其子代已被删除

家谱地设计与实现(二叉树)

家谱的设计与实现(树,查找) 家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。可。基本功能如下: (1)家谱中每个成员的信息包括:姓名、性别。 (2)家谱祖先数据的录入(树的根结点)。 (3)家庭成员的添加:即添加某人的儿女(包括姓名和性别),儿女的数目由控制台端给出,然后输入相应的儿女姓名和性别(此处所有儿女的姓名不能重名)。 (4)家庭成员的修改:可以修改某一成员的姓名。 (5)家庭成员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。 (6)家庭成员的删除:删除此成员时,若其有后代,将删除其所有后代成员。 #include #include #include #include #define MAX 10 typedef struct node{ //定义data存储结构 char name[MAX]; //姓名 char sex; //性别 int generation;//代目

typedef struct ft{ //创建结构体 struct node l; //家谱中直系家属 struct ft *brother;//用来指向兄弟 struct ft *child;//用来指向孩子 }ft; ft *root; //root是结构体ft的指针 ft *search(ft *p,char ch[]) // 搜索指针函数{ ft *q; if(p==NULL) return NULL;//没有家谱,头指针下为空if(strcmpi(p->https://www.360docs.net/doc/7e10845526.html,,ch)==0) return p;//家谱不为空,头指针下有这个人if(p->brother) { q=search(p->brother,ch);//在兄弟中找 if(q) return q;//找到

族谱:怎样制作家谱图

族谱: 怎样制作家谱图 策略1研究你家族的历史....................................................... 21、写下你想要包含在图中的人。.................................... 22、通过一些研究填补漏洞。............................................ 33、确定你想要突出的其他信息。.................................... 34、决定是否要包含照片。................................................ 4策略2创建树状图................................................................... 41、从你们这一代开始。.................................................... 42、写下你的名字。............................................................ 43、从你的父母辈填写。.................................................... 54、画你的祖父母那一代。................................................ 55、决定你要追溯到几代之前。........................................ 6策略3使其独一无二............................................................... 61、自己来美化你的家族树状图。.................................... 62、使用软件来创建一个计算机生成的树。..................... 73、考虑让一个艺术家做一个原始的再现。..................... 7制作家谱图,可以用来有效地展示你的家族史。首先从最高辈分的人开始画,找出谁是他的子女,然后每一代创建一个家庭树分支。然后加工一下,可以把这个图变成一个值得展览的艺术品,或者仅仅是为了保存给子孙而制图,树上微出版可以帮助您!世世代代传下去。请参阅步骤1开始。 策略1研究你家族的历史

家谱管理实验报告

Project 3 家谱管理

一、题目 用树型结构实现家族成员信息管理,(如建立、删除、查询、统计、打印等) 二、数据结构与算法 1.定义树结点node { string name; node *left; node *right; string sex;//male or female int num;//结点编号 node() { name = ""; left = right = NULL; num = 0; sex = "male"; } }; 2.定义class tree{};实现不同对树的操作 其中,以static int count记录节点总数; 以static int height记录树高度; 以node* root作为头指针; 以node* arr[maxnode]将每个节点的指针记录在数组里。 3.对于该树的操作: a. 创建树: 首先此project中树由男性为根结点。男性的左孩子是其兄弟,右孩子是其第一任妻子,第一任妻子的右孩子是其第二任妻子,每个妻子的左孩子是其与这位妻子的孩子。如此递归生成家谱。 输入时,用0表示左孩子,1表示右孩子,以1010等的字符串输入结点位置来创造结点。创建后用函数cheak来检验创造的树是否正确,具体来说就是避免创建树时出现有结点没有父结点的情况。 b.删除结点:以结点的name成员搜索结点,删除结点及其子树。 c.查询结点:以结点的name成员搜索结点,打印该结点的父母兄弟、妻 子、男孩。 d.统计函数:统计家谱总数。本project中通过#define定义打印屏幕宽 度screen_width为96,最多结点maxnode为32,因此树高度不超过5层,总数count不超过32. (linux下测试,终端宽度可以任意,windows下的话只能是80) e.打印:采用广度优先搜索遍历来打印树。

数据结构家谱管理系统范本

数据结构家谱管理 系统

宁波大红鹰学院 信息工程学院 课 程 设 计 报 告 项目名 家谱查询系统 称: 白钰琦 项目组 长: 徐程凯、徐海域、项鸿伟 项目成 员: 10计科1班 班级名 称: 计算机科学与技术 专业名 称: 完成时间: 12月1日 信息工程学院制 目录 一、案例描述 ............................................................ 错误!未定义书签。 1、总体描述 ....................................................... 错误!未定义书签。 2、模块描述 ....................................................... 错误!未定义书签。

二、设计思路 ............................................................ 错误!未定义书签。 三、程序设计 ............................................................ 错误!未定义书签。 1、数据结构描述................................................ 错误!未定义书签。 2、主函数及其流程图........................................ 错误!未定义书签。 3、源程序 ........................................................... 错误!未定义书签。 四、调试与分析 ........................................................ 错误!未定义书签。 1、主菜单 ........................................................... 错误!未定义书签。 2、显示家谱信息................................................ 错误!未定义书签。 3、显示家谱中第n代人所有信息 .................... 错误!未定义书签。 4、按姓名查找某人并相应输出 ........................ 错误!未定义书签。 5、按出生日期查找家谱成员信息 .................... 错误!未定义书签。 6、为家谱中成员添加孩子信息 ........................ 错误!未定义书签。 7、为家谱中成员添加妻子信息 ........................ 错误!未定义书签。 8、删除家谱中成员及其后代信息 .................... 错误!未定义书签。 9、修改家谱中成员信息.................................... 错误!未定义书签。 10、确定家谱中两个成员关系 .......................... 错误!未定义书签。 11、按出生年月排序家谱 .................................. 错误!未定义书签。 五、设计总结 ............................................................ 错误!未定义书签。 1、完成情况 ....................................................... 错误!未定义书签。 2、心得体会 ....................................................... 错误!未定义书签。

家谱的设计与实现

课程设计报告 课程设计名称:数据结构 系:三系 学生姓名:王伟伟 班级:10计本2 学号:20100303234 成绩: 指导教师:刘杰 开课时间:2011-2012 学年1 学期

一.设计题目 家谱的设计与实现(树,查找) 二.主要内容 家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。可。基本功能如下: (1)家谱祖先数据的录入(树的根结点)。 (2)家庭成员的添加:即添加某一人的儿女,儿女的数目由控制台端给出,然后输入相应的儿女姓名(此处儿女的姓名不能重名)。 (3)家庭成员的修改:可以修改某一成员的姓名。 (4)家庭成员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。 (5)家庭成员的删除:删除此成员时,若其有后代,将删除其所有后代成员。

三.课题设计的基本思想,原理和算法描述 1.基本思想 此课题使用的数据结构为树形结构,为使结构整洁清晰在此使用二叉树结构,其中data 存储结构中包含以下信息:姓名、性别、代目。而二叉树结构中l为直系成员,m为旁系成员(即配偶)。lchild指针指向其的兄弟,rchild指向孩子,实现功能的具体代码如下: typedef struct node{ //定义data存储结构 char name[STA]; //姓名 char sex; //性别 int generation;//代目 }node; typedef struct ft{ struct node l; //家谱中直系成员 struct node m; //家谱中旁系成员 struct ft *lchild;//用来指向兄弟 struct ft *rchild;//用来指向孩子}ft; 2.输出界面: 实现其功能的代码见源程序及注释。

数据结构树的实现实验报告

数据结构设计性实验报告 课程名称_____ ____ 题目名称 学生学院 专业班级 学号 学生姓名 指导教师 2010 年 7 月 6 日

抽象数据类型:树的实现 一.需求分析 树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,直观来看,树是以分支关系定义的内部结构。树的结构在客观世界广泛存在,如人类社会的族谱和各种社会组织机构都可以用树来形象表示。树在计算机领域中也得广泛应用,如在编译程序中,可用树来表示源程序的语法结构,又如在数据库系统中,树形结构也是信息的重要组织形式之一。 二.实验目的 对某个具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。进而达到熟练地运用本课程中的基础知识及技术的目的。 三.实验环境 1、硬件:PC机 2、软件:Microsoft Visual C++ 6.0 四.设计说明 本程序采用树的二叉链表(孩子指针-兄弟指针-双亲指针)存储表示,以下是树的结构定义和基本操作: ADT Tree{ 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R: 若D为空集,则称为空树; 若D仅含有一个数据元素,则R为空集,否则R={H},H是如下二元关系: (1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2) 若D-{root}≠NULL,则存在D-{root}的一个划分D1,D2,D3, …,Dm(m>0),对于任意j ≠k(1≤j,k≤m)有Dj∩Dk=NULL,且对任意的i(1≤i≤m),唯一存在数据元素xi∈Di有∈H; (3) 对应于D-{root}的划分,H-{,…,}有唯一的一个划分H1,H2,…,Hm(m>0),对任意j≠k(1≤j,k≤m)有Hj∩Hk=NULL,且对任意i(1≤i≤m),Hi是Di 上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根root的子树。 基本操作P: InitTree(&T); 操作结果:构造空树T。 DestroyTree(&T); 初始条件:树T存在。 操作结果:销毁树T。 CreateTree(&T,definition); 初始条件:definition给出树T的定义。 操作结果:按definition构造树T。 ClearTree(&T);

家谱管理系统1(1)

《软件综合设计》 家谱管理系统 院系:计算机科学技术学院二系 班级:计11 – 2班 姓名:刘文秀(15) 合作者:姜雪(05) 、岳奉宜(33) 指导教师:薛曼玲 2013 年 12 月 01 日

《软件综合设计》任务书 一、题目:家谱管理系统 二、设计要求 (1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。 (2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。 (3)查阅相关资料,自学具体课题中涉及到的新知识。 (4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。 (5)所设计的系统应有菜单、动画和音乐。 (6)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。仅一级标题上目录。 三、课程设计工作量 由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。 四、课程设计工作计划 2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析; 2013年12月3日,设计小组进行总体方案设计和任务分工; 2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译; 2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行; 2013年12月13日,验收、开始撰写课程设计报告; 2013年12月18日前,提交课程设计报告和软件。 指导教师签章: 教研室主任签章

家谱管理系统 -数据结构大作业

/* 家谱管理系统 任务:实现具有下列功能的家谱管理系统 功能要求: 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其关系。 8). 某成员添加孩子。 9). 删除某成员(若其还有后代,则一并删除)。 10).修改某成员信息。 11).按出生日期对家谱中所有人排序。 12).打开一家谱时,提示当天生日的健在成员。 要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。 测试数据及测试结果请在上交的资料中写明; */ #include #include #include #include #include"map.h" #define MAXN 100 #define MAXMEM 100 #define Elemtype char ============================== //树 typedef struct BiTNode { int mark;//标记 int level; char name[50];//姓名 char birthday[50];//生日

家谱格式

X氏家谱目录 第一章谱序 谱序是每部家谱不可或缺的内容之一,家谱卷首应有数量不等的序文。谱序包括新序、旧序、阖家或某几位族人撰写的序和当时名流、族外人写的赠序、客序,以及跋语等。谱序的内容主要是介绍家族世系渊源、传承关系、修谱缘由和经过以及修谱任事人员等,是熟悉、研究一部家谱的直接切入点,是了解我X氏家族世系源流的重要资料。主要说明了为什么要进行此次修谱以及如何组织此次修谱等内容。 【续谱时间】2012年。 【地点】XX省XX市XX县XXX镇XX村。 【续谱主持人】族长XXX及各支系长者等族人。 【执笔人】XXX等。 【说明】修谱小组说明: 1.据2012年统计,XX村共有登记在册人口XXXX人,其中X氏总人口XXXX人,占全村人口的XX.X%,其中本支系共有XX户,人口XX人。户口在外地、国外居住工作的人口约XX人,本支系合计有XXX人。(此处以此次修谱具体人口统计数字为准) 自XX二年X氏始祖由XXXX县XX迁徙到XX省XX县XX庄(现XX市XX县XXX镇XX村)XX多年来,世代繁衍,根深叶茂,现已繁衍到了第XX代,现在是X世同堂。各分支系长者均参与了本次修谱事宜。

2.修谱有一个原则,即可以补叙、补遗、补新等,但不能对先人的修谱予以修改或评论,其目的是避免引起其支系后裔的异议,避免产生族群矛盾。 3.本次新修谱包括总目录、正文、后记总共XXXX字(标点符号在内),不包括书封计有XX幅照片、图片。 全谱用16开本印刷,共计XXX页(不包括所附空白页),共一卷。 此说明的目的是,一旦家谱遇到特别原因而破损,后人也能知道到底是部分散失还是大部散失。 【X氏家谱的修谱定义与内容结构】 家谱是一种特殊的文献,亦称祖谱、宗谱、族谱、世谱、支谱、系谱、统谱、家乘、私谱、谱传等。 我X氏家族按始祖的习惯统称为家谱。 一部完整的家谱是一部宗族、家族史或宗族、家族的百科全书。通过一部家谱,可以了解到我X氏家族的历史沿革、世系繁衍、人口变迁、居地变迁、婚姻状况;我家族成员在科第、官职等政治、经济生活中的地位、作用和事迹;我家族的经济情况和婚配、丧葬、礼典、家规、家法等典章制度等。而家谱也正是将这些内容以书、图、史、表、志的形式记录下来,成为宝贵的文史资料。 家谱以文字内容为主,图片资料为副,不局限于文字记录,将好图片、地图、照片、合影、遗像、正面肖像画纳入家谱,更能反应时代风貌和精神气质,并节省许多文字描述,成为记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的历史图籍。 据现代有关资料统计,中国家谱保存至今较为完整的以清代和

关于姓氏的研究报告

关于姓氏的研究报告 研究报告的计划: 一?问题的提出 我们班同姓的同学不少.他们常开玩笑说:"我们五百年前是一家!" 有一次,我翻阅《百家姓》发现许多有关姓氏的故事.于是,我们小组的成员开始了这次姓氏之旅? 二.调查方法 1.查阅《百家姓》等记载着古人姓氏的书籍,阅读有关报刊,上网查找浏览,了解本小组成员的姓氏来源和历史上的名人. 2.走访有关部门,了解本小组成员姓氏的人口和分布情况. 3.通过便捷的途径,搜集本小组成员姓氏的名人,了解名人的故事. 三.调查情况和资料整理 信息渠道 涉及的方面 具体内容 书籍报刊 黄姓的来源 公元前648年,楚成王责备黄国不向楚国进贡,黄国国君错误地分析形势,既不理会楚国的责问,又不进行任何防备,结果于当年夏天被楚国灭掉.亡国后的黄国子孙,以国名为姓氏,就是黄氏.

关于黄姓的历史和现状的研究报告 书籍报刊教科书 历史上的黄姓名人 黄歇黄霸黄盖黄巢黄庭坚黄道婆黄宗羲黄遵宪宋代状元黄定 上网 黄姓人口数量 黄姓的人口约为2876万,为全国第八大姓,大约占全国人口的2.2% 爷爷的讲述 黄姓族谱 浙江杭州?武林黄氏宗谱:清光绪间礼耕堂钞本一册藏地:美国浙江余杭?黄氏宗谱四卷:清光绪二十七年(1901)木活字本藏地:浙江余杭县文化管理委员会 关于王姓的历史和现状的研究报告 信息渠道 涉及的方面 具体内容 书籍报刊 王姓的来源

周灵王太子姬晋,因直言进谏,使王上大怒,被废为庶民,迁居到琅琊(今山东省胶南一带),世代繁衍生息.因其本为王族,世人称其"王家", 就延用成姓. 书籍报刊教科书 历史上的王姓名人 王陵王昭君王政君王凤王莽王匡王霸王朗王祥王览王导王充王献 之王羲之 上网 王姓人口数量 根据公安部治安管理局对全国户籍人口的统计分析,王姓目前仍是我国的第一姓,有9288.1万人,占全国人口总数的7.25%?也就是说每13个人中就有一个人姓王,这相当于四川省的总人口,比德国的总人口还咼1000万人. 爷爷的讲述 王姓族谱 王姓家谱文献目录:《东沙王氏支谱?家规》《三槐堂王氏族谱》 《绮山东沙王氏支谱》 关于刘姓的历史和现状的研究报告 信息渠道 涉及的方面 具体内容

家谱管理系统的源代码

#include #include #include #include struct per{ int data; char name[20]; char brith[20]; char marry; char address[20]; char live; char dietime[20]; char parent[20]; int generation; int child[10]; int numberchild; per(){ for(int i=0;i<20;i++) name[i]='\0'; for(i=0;i<20;i++)

brith[i]='\0'; for(i=0;i<20;i++) address[i]='\0'; for(i=0;i<20;i++) dietime[i]='\0'; for(i=0;i<10;i++) child[i]=0; for(i=0;i<20;i++) parent[i]='\0'; live='\0'; marry='\0'; data=-10; generation=0; numberchild=0; } }; void setupinfo(per person[]); void display(per person[],int&); void displayhome(per person[],int&); void displayinfo(per

person[],int&); void namesearch(per person[],int&); void birtfdaysearch(per person[],int&); void addchild(per person[],int&); void editmember(per person[],int&); void sortbirthday(per person[],int&); void main() { per person[36]; int count=0; fstream inputFile("person.txt",ios::in|ios::o ut|ios::binary); if(!inputFile) { cout<<"文件不存在!"<

数据结构家谱课程设计报告

家谱管理系统 姓名:田鑫磊 学号:1514020421 (1)功能部分: 本程序共实现了6个功能分别为: 1.读出家谱并显示 2.确定指定成员在家族中的辈份 3.输出指定辈的所有成员 4.在家谱中添加新成员,并追加到文件中 5.输出指定家庭的所有成员 6. 退出本系统 (2)各功能的算法思想: 1.读出家谱并显示 存储结构用栈,按照先显示双亲,然后显示其所有孩子的顺序显示所有的家庭成员。 2.确定指定成员在家族中的辈份 用求成员所在的二叉树中的层数(按层遍历二叉树)来确定,这里采用的是递归算法3.输出指定辈的所有成员 此处定义了一个新的结构体类型(增加存储节点所在的层数),定义如下: struct { BTNode *q; int loc; //存结点所在的层数 }qu[10]; 并用一个队列来比较显示同辈分的所有成员。 4.在家谱中添加新成员,并追加到文件中 首先,输入一个新成员的名字; 然后,输入其双亲; 之后,再添加到整个存储二叉链表中。 然后,再将新的存储结构写回到文件中。 二叉链表的结点类型为:typedef struct node { ElemType data[10]; //存放成员的名字 struct node *child; //其孩子指针 struct node *brother; //其兄弟指针 }BTNode; 5.输出指定家庭的所有成员 首先,设一个栈,并设一个标记位,先置1; 然后,找到输入的要待显示的成员,将标记位置0; 再次,显示其孩子和兄弟,依次下去直到显示完其所有的亲戚。 6.退出本系统 通过一个输入字符q来控制,每完成一个功能,系统提示是否要继续操作:

(完整word版)家谱管理系统

洛 阳 理 工 学 院 课 程 设 计 报 告 课程名称 ___________________________________ 设计题目 ___________________________________ 专 业 ___________________________________ 班 级 ___________________________________ 学 号 ___________________________________ 姓 名 ___________________________________ 完成日期 ___________________________________ 数据结构课程设计 家谱管理系统 计算机科学与技术 B150405 B15080822 宋士龙 2016年12月30日

课程设计任务书 设计题目:家谱管理系统 设计内容与要求: 【问题描述】:实现具有下列功能的家谱管理系统 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 显示家谱。 4). 按照出生日期查询成员名单。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 修改某成员信息。 【基本要求】: 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。 测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。 测试数据及测试结果请在上交的资料中写明。 指导教师:_______________ 年月日 课程设计评语 成绩: 指导教师:_______________ 年月日

家谱管理系统设计与实现

课程设计报告 课程名称《数据结构》课题名称排序综合 专业 班级 学号 姓名 联系方式 指导教师

20 11 年 12 月 21 日 目录 1. 问题陈述 (3) 2.设计方法阐述 (3) 2.1总体规划 (3) 2.2功能构想 (4) 2.2.1增加成员 (4) 2.2.2修改成员资料 (5) 2.2.3删除成员 (6) 2.2.4打开家谱 (7) 2.2.5新建家谱 (8) 2.2.6保存家谱 (10) 2.2.7查看某代信息 (11) 2.2.8按姓名查找 (12) 2.2.9按生日查找 (12) 2.2.10查看成员关系 (13) 2.2.11按出生日期排序 (14) 2.3板块整合 (15) 2.4调试分析 (19)

3.总结 (19) 4. 测试结果 (20) 1.问题陈述 家谱用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理软件,实现对一个家族所有的资料进行收集整理。支持对家谱的存储、更新、查询、统计等操作。并用计算机永久储存家族数据,方便随时调用。 2.设计方法阐述 2.1总体规划 在动手编制程序之前,先要做好程序的规划,包括程序储存数据所用的结构,数据类型等等,只有确定了数据类型和数据结构,才能在此基础上进行各种算法的设计和程序的编写。 首先是考虑数据类型。在家谱中,家族成员是最基本的组成部分,对于家族管理中,已经不能再进行细分了,所以选定家族成员作为数据的基本类型,并在程序中定义COperationFamilytree 类。其中COperationFamilytree 类的各种属性可以根据需要进行添加或删除,从日常生活应用的角度出发,制定了COperationFamilytree 类中包含了一下属性: char name[MAX_CHARNUM]; //姓名 Date birthday; //出生日期 In tsex; //性别 char addr[MAX_CHARNUM]; //基本资料 int live; //健在否

2019年修家谱范文.doc

2019年修家谱范文 篇一:为什么修家谱 为什么要修家谱? 俗话说:“乱世藏黄金,盛世修家谱。”中国人百善孝当先,寻根是人的天性,通过修家谱,有助于提升家族的凝聚力,维护团结,增进各个家庭的彼此了解和信任,加强沟通,促进家庭间的互帮互助;了解家族的历史和迁徙情况。一部完整的家谱具有哪些体例要素? 谱名、祖先像赞、目录、修谱名目、谱序、凡例、恩荣录、谱论、姓氏源流、字辈排行、家法、世系、传记、风俗礼仪、祠堂、坟茔、族产、契约、艺文、领谱字号等。了解更多:百姓通谱 修家谱的准备条件有哪些? 修谱组织及经费、相关家族资料书籍及文稿、入谱人员登记表。 如何成立修谱委员会? 1.家族内部召开筹备会议,统一思想,选举负责人; 2.由家族成员中有影响力,威望,各支联络人及热心宗族事业的人员组成修谱委员会班底。 修谱委员会负责的工作有哪些? 1.确定以主编为首的编辑班子; 2.筹措经费,并确定开支范围和标准; 3.组织协调普查工作; 4.确定家谱格式; 5.汇总文字、图片资料;

6.组织审查族谱草稿; 7.联系修谱—制谱服务商; 8.圆满庆祝发谱活动。 如何收集资料? 1.发布族人修谱倡议书; 2.填写家族成员信息登记表; 3.利用旧谱资料; 4.从正史、方志、文集及其他书籍、文献中抄录资料; 5.利用诗文及各种契约文书等文献资料; 6.通过互联网络收集、补充资料; 7.辑录族族人所撰诗文及其他文稿; 8.辑录与族人有关的其他材料; 9.辑录族人墓表、墓志、墓铭等材料。 10.参阅户口登记及普查旧档案。 如何筹集修谱经费? 修谱的经费一般是来自入谱的男丁,都必须交纳一定数额的款项,其中还有一些族内有钱的成员的捐助。 如何选择修谱公司? 在家谱资料收集完毕后,如有必要,可决定是否与修谱专业者合作。家谱资料交给修谱公司后,会与修谱公司经常沟通联络,校对稿件,当排版完成后,修谱公司可以代为用户寻找印刷厂或与合作印刷厂来制作家谱,包括出片,校对、印刷、装订、运输。这期间修谱公

家谱管理系统设计报告样本

目录 第一章绪论............................................................... 错误!未定义书签。第二章需求分析........................................................... 错误!未定义书签。 2.1题目...................................................................... 错误!未定义书签。 2.2设计任务.............................................................. 错误!未定义书签。 2.3数据测试.............................................................. 错误!未定义书签。第三章概要设计....................................................... 错误!未定义书签。 3.1 设计思想 ........................................................ 错误!未定义书签。 3.2 实现方法 ........................................................ 错误!未定义书签。第四章详细设计....................................................... 错误!未定义书签。 4.1功能构想.............................................................. 错误!未定义书签。 4.2界面设计.............................................................. 错误!未定义书签。 4.3增加成员.............................................................. 错误!未定义书签。 4.3.1 添加子女 .................................................... 错误!未定义书签。 4.3.2 添加配偶 .................................................... 错误!未定义书签。 4.4修改成员.............................................................. 错误!未定义书签。 4.4.1修改个人信息............................................. 错误!未定义书签。 4.4.2修改父母信息............................................. 错误!未定义书签。 4.4.3修改兄弟姐妹的信息................................. 错误!未定义书签。 4.4.4修改子女的信息......................................... 错误!未定义书签。第五章调试分析....................................................... 错误!未定义书签。

数据结构家谱管理系统报告书

数据结构大作业说明文档 一、题目的选择 这次数据结构的大作业,我的选题是家谱管理系统的设计与实现。由于平时疏于编程——针对我得个人实际——我把主要的目标定位在完成家谱管理系统得基本要求。(基本要求大纲中有,就不浪费版面了) 二、设计的思路 接到这个题目,我的总体设计思路是先为程序搭建好一个结构框架,再跟据时间的宽裕程度和其它的要求逐步增强程序的性能。 关于IO的设计: 考虑到题目要求家谱信息以树形的形式一次读入内存,而个人的各种资料现在虽然条目不多,但随着程序的升级,以后可能变得越来越大。我把树形结构和个人信息记录的文档分为两个文件保存在外存中,一个文件串行化地记录家谱树的结构信息,保存少量个人信息作为识别标志;另一个文件保存完整的个人信息,所有的个人信息以线性记录的方式记录在其中。当程序运行要读入家谱结构时,只读入保存少量记录的文件并建立起树形结构。索引时,以树形中的少量信息为依据在另一个文件中找到全部的各人信息资料。 这样的好处主要有两点: 1. 由于树形结构是串行化记录于外存,一个节点记录多次,信息大量冗余,如果树形节点中保留全部信息,必将造成大量的空间浪费;只保存作为索引的少量信息在树形结构中,节约了空间。 2. 由于结构的精简,在家谱初始化时读入内存需要的时间相应减少,节约了装载时间。 这样做存在的问题: 每次执行修改,添加,删除,查询时都要直接访问外存来取得或写入数据。内外存访问上的巨大时间差的存在,使得进行这些操作相对来说并不显得很高效。 关于树形的结构: 在树形结构的选择上,根据实际中多子女的现象选择一般树,考虑到家谱中成员可能存在的不定成员数问题,抛弃了以数组为基础的一般树方案,决定用链表来实现。 树形结构的外存保存。为了提高效率,树形结构在程序初始化时由外存文件一次读入内存,此后不管插入还是修改,删除都不再对外存的树结构保存文件进行操作,只在内存中处理,程序退出时对外存树结构文件进行一次更新。也就是说,不管在程序运行中中对家谱结构进行多少种,多少次的操作,外存的树结构文件始终只会被程序访问两次。

编修家谱的一般步骤

编修家谱的一般步骤 1、成立“修谱机构”及确定“修谱主持人” 凡一个家族准备新修或续修家谱,首要的工作就是成立“修谱机构”。“修谱机构”通常称为“×氏家族修谱理事会”(或委员会等)。其次,就需要确定“修谱主持人”,由“修谱主持人”全面负责,并组织有关人员开展修谱工作。 2、“登记入谱”的准备工作 “登记入谱”是决定修家谱之后就要开展的一项十分重要的工作,此项工作按以下要求办理: ①分发“家族成员入谱登记表”必须使用专门设计、统一印刷而成的,与《家谱》配套使用的专用底稿纸:“家族成员入谱登记表”,将每一房人、每个家庭的成员全部正确的进行填表登记。 ②确定始祖 ③确定修谱的范围 3.整理、审定“家族成员入谱登记表”,使每个入谱人员的填写情况都正确无误后,即可正式填表修谱了。 4、填表修谱前的准备工作 ①确定填写谱册的人

由于《家谱》填表方法简明易懂,填写人具有初中文化水平即可,只要认真细心、书写工整、责任感强就可以胜任。 ②墨水最好使用炭素墨水,以保证字迹永不褪色。 ③所有文字资料已准备好“家族成员入谱登记表”已全部收回并经整理审核无误。由修谱主持人组织人员拟定序、凡例、先世考、个人传记…有关文字资料已定稿。 ④将已定稿的基本文字部分,以及家族成员的生平传记,和家族大事记等文字记叙部分抄写在“谱序、源流、凡例…”和“生平传记”、“家族大事记”、“家族荣誉册”等表式中。将家族成员个人情况、血缘关系情况分别填入“家族名册”、“世系表”等表式中。 ⑤如家族人口多,分支多所需要的谱册套数较多时,则可以依照已修好的第一套“家谱”作样本,可由一人或数人填写复制所需要的套数。 ⑥如所需谱册不只一套时,必须在每一套谱册的内封页右上角空白方框内填上每一套谱册的编号,并将每套谱册内的“第几次修谱套分存情况表”分别填好。 ⑦将修好的谱册,分发给每一位收藏“家谱”的持有人,妥为保存。至此,采用《家谱》修谱这一工作即告完成。

家谱管理系统.doc

家谱管理系统 。洛阳科技学院课程设计报告数据结构课程设计课程名称_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _家谱管理系统设计主题_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _计算机科学与技术专业_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 150405班级_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 15080822学校编号_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _宋世龙的姓氏是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x XXX,2006年12月30日。完成日期_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 家谱管理系统设计的内容和要求; [问题描述] 以下内容: 实现了具有以下功能的家谱树管理系统1)。输入一个文件,将每个成员的信息保存在原始家谱中,每个成员的信息应包括以下内容: 姓名、出生日期、婚姻状况、地址、生活状况和死亡日期(如果

相关文档
最新文档