用C语言实现一个家谱管理程序,对家谱管理进行简单模拟,要求实现查看祖先和子孙个人信息,插入家庭成员,删除家庭成员,显示家谱,建立遍历等操作。
时间: 2024-04-01 12:32:30 浏览: 131
C语言实现的一个家谱程序
5星 · 资源好评率100%
好的,这是一个比较复杂的问题,需要编写一个完整的程序来实现家谱管理。以下是一个简单的家谱管理程序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_CHILD_NUM 10
// 家庭成员结构体
typedef struct _family_member {
char name[MAX_NAME_LEN]; // 姓名
int age; // 年龄
int sex; // 性别,0表示女性,1表示男性
int child_num; // 孩子数量
struct _family_member *child[MAX_CHILD_NUM]; // 孩子数组
} family_member;
// 创建一个新的家庭成员
family_member *create_member(char *name, int age, int sex) {
family_member *member = (family_member *)malloc(sizeof(family_member));
strcpy(member->name, name);
member->age = age;
member->sex = sex;
member->child_num = 0;
return member;
}
// 向家庭成员添加一个孩子
void add_child(family_member *parent, family_member *child) {
parent->child[parent->child_num++] = child;
}
// 删除家庭成员
void delete_member(family_member *member) {
if (member == NULL) {
return;
}
// 递归删除孩子
for (int i = 0; i < member->child_num; i++) {
delete_member(member->child[i]);
}
free(member);
}
// 查找家庭成员
family_member *find_member(family_member *root, char *name) {
if (root == NULL) {
return NULL;
}
if (strcmp(root->name, name) == 0) {
return root;
}
// 在孩子中查找
for (int i = 0; i < root->child_num; i++) {
family_member *member = find_member(root->child[i], name);
if (member != NULL) {
return member;
}
}
return NULL;
}
// 显示家谱
void display_family(family_member *root, int level) {
if (root == NULL) {
return;
}
for (int i = 0; i < level; i++) {
printf(" ");
}
printf("%s(%d)\n", root->name, root->age);
// 递归显示孩子
for (int i = 0; i < root->child_num; i++) {
display_family(root->child[i], level + 1);
}
}
// 主函数
int main() {
// 创建家谱
family_member *root = create_member("爷爷", 80, 1);
family_member *father = create_member("爸爸", 50, 1);
family_member *uncle = create_member("叔叔", 55, 1);
family_member *aunt = create_member("阿姨", 52, 0);
family_member *me = create_member("我", 30, 1);
family_member *brother = create_member("哥哥", 28, 1);
family_member *sister = create_member("妹妹", 25, 0);
add_child(root, father);
add_child(root, uncle);
add_child(root, aunt);
add_child(father, me);
add_child(father, brother);
add_child(father, sister);
// 显示家谱
display_family(root, 0);
// 查找家庭成员
family_member *member = find_member(root, "妹妹");
if (member != NULL) {
printf("找到了:%s\n", member->name);
} else {
printf("没找到\n");
}
// 删除家庭成员
delete_member(sister);
// 显示家谱
printf("\n删除妹妹后的家谱:\n");
display_family(root, 0);
return 0;
}
```
这个程序使用了一个家庭成员结构体来表示每个人的信息,包括姓名、年龄、性别和孩子数组。我们可以通过创建家庭成员、向家庭成员添加孩子、查找家庭成员、显示家谱和删除家庭成员等操作来实现家谱管理。
阅读全文