家族查询系统c语言源程序,家谱管理系统(含源代码).docx

家谱管理系统(含源代码)

家谱管理系统——C语言(数据结构)目的和要求:树形结构是一种非常重要的非线性结构,它用于描述数据元素之间的层次关系,人类家谱是树形结构的典型体现,通过此项训练让学生掌握树形结构的知识;使学生重点掌握树与二叉树的转换,二叉树的存储和遍历,和二叉树相关的一些运算;要求完成家谱信息的录入和保存,任意成员的查找及某一成员祖先、子孙、兄弟、堂兄弟的查找。排答疑和辅导。完整代码:#include #include #include int MATEFLAG=0; //是否入赘或嫁入这家的,1表示为是,0表示否typedef struct TreeNode//树节点定义{int Num; //保存此人儿女个数char Name[20]; //保存此人姓名char Kind; //保存此人性别,男M,女Fstruct TreeNode * NextNode[20]; //保存此人的儿女,NextNode[0]里存放配偶的地址struct TreeNode * Parent; //保存此节点的父节点}TreeNode;void CreatTree(TreeNode *Tree);//创建树void OutPutAll(TreeNode *Tree);//输出树TreeNode * SearchTree(TreeNode *Tree,char name[],int length);void MainMenu(TreeNode *Tree);void SubMenue1(TreeNode * Tree);void SubMenue2(TreeNode *Tree);void Change(TreeNode * Tree);void AddNew(TreeNode * Tree);void OutPutMessage(TreeNode * Tree,char name[],int length);//主函数void main(){TreeNode *Tree;//产生根节点Tree=(TreeNode *)malloc(sizeof(TreeNode));Tree->Parent =NULL;strcpy(Tree->Name,"0");MainMenu(Tree);//显示主菜单}//添加新的成员void AddNew(TreeNode * Tree){SubMenue2(Tree);//添加新成员界面}//显示添加家庭信息的界面void SubMenue2(TreeNode *Tree){char c;int num;char name[20];TreeNode * NewNode;getchar();while(1){system("cls");printf("请选择你的操作\n");printf("A:添加某个人的子女的信息\n");printf("B:添加某个人配偶的信息\n");printf("C:退出\n");printf("请选择相应功能:\n");c=getchar();switch(c){case 'A': //添加子女信息printf("请输入那个人的名字:\n");scanf("%s",name);Tree=SearchTree(Tree,name,20);//在家谱里查找这个人if(Tree==NULL){printf("该家谱图中没有%s这个人的信息请确认是否输入错误\n",name);break;}if(Tree->Parent==NULL&&Tree->NextNode[0]==NULL||Tree->Parent!=NULL&&Tree->Name!=Tree->Parent->NextNode[0]->Name){printf("至今还没有配偶请先添加配偶\n",Tree->Name);break;}if(Tree->Parent==NULL&&(Tree->Num>20||Tree->Num<0))Tree->Num=0;if(MATEFLAG==1)Tree=Tree->Parent;NewNode=(TreeNode *)malloc(sizeof(TreeNode));printf("请输入添加人员姓名:\n");scanf("%s",NewNode->Name);printf("请输入添加人员性别女F男M:\n");scanf("%1s",&NewNode->Kind);num=Tree->Num;NewNo

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于树的家谱管理系统的 C 语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LEN 20 typedef struct _TreeNode { char name[MAX_NAME_LEN]; struct _TreeNode *father; struct _TreeNode *mother; } TreeNode; TreeNode *create_tree_node(char *name) { TreeNode *node = (TreeNode *) malloc(sizeof(TreeNode)); strncpy(node->name, name, MAX_NAME_LEN); node->father = NULL; node->mother = NULL; return node; } void add_child(TreeNode *parent, TreeNode *child) { if (parent->father == NULL) { parent->father = child; } else { parent->mother = child; } } void print_tree(TreeNode *root, int depth) { if (root == NULL) { return; } for (int i = 0; i < depth; i++) { printf(" "); } printf("%s\n", root->name); print_tree(root->father, depth + 1); print_tree(root->mother, depth + 1); } int main() { TreeNode *root = create_tree_node("Tom"); TreeNode *p1 = create_tree_node("John"); TreeNode *p2 = create_tree_node("Mary"); TreeNode *c1 = create_tree_node("Bob"); TreeNode *c2 = create_tree_node("Alice"); TreeNode *c3 = create_tree_node("Charlie"); add_child(root, p1); add_child(root, p2); add_child(p1, c1); add_child(p1, c2); add_child(p2, c3); print_tree(root, 0); return 0; } ``` 在上面的代码中,我们定义了一个 `TreeNode` 结构体表示家族成员节点,其中包了姓名、父亲节点和母亲节点三个属性。我们还定义了 `create_tree_node` 函数来创建一个新节点,以及 `add_child` 函数来添加一个子节点。 在 `main` 函数中,我们创建了一个根节点 `root`,以及其它一些家族成员节点,并通过 `add_child` 函数将它们连接起来形成一棵家谱树。最后,我们调用 `print_tree` 函数来打印整棵家谱树。 当然,这只是一个简单的示例,实际上的家谱管理系统可能还需要添加更多的功能,例如查询某个家族成员的信息、删除某个家族成员等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值