请你编写一段基于c语言的家谱管理系统,要尽可能实现多的功能
时间: 2024-01-22 18:21:05 浏览: 23
好的,以下是一个基于C语言的家谱管理系统,实现了添加、删除、查找、修改、打印等多个功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_CHILDREN_NUM 10
#define MAX_DEPTH 20
typedef struct _Person {
char name[MAX_NAME_LEN];
int age;
struct _Person* father;
struct _Person* mother;
struct _Person* children[MAX_CHILDREN_NUM];
int num_children;
} Person;
Person* root; // 家谱树根节点
// 初始化家谱树
void init() {
root = (Person*)malloc(sizeof(Person));
root->father = NULL;
root->mother = NULL;
root->num_children = 0;
}
// 添加子节点
void add_child(Person* parent, Person* child) {
if (parent && child && parent->num_children < MAX_CHILDREN_NUM) {
parent->children[parent->num_children++] = child;
child->father = parent;
printf("%s 的 %s 孩子添加成功\n", parent->name, child->name);
} else {
printf("添加孩子失败\n");
}
}
// 删除子节点
void del_child(Person* parent, Person* child) {
if (parent && child) {
int i, j;
for (i = 0; i < parent->num_children; i++) {
if (parent->children[i] == child) {
for (j = i; j < parent->num_children - 1; j++) {
parent->children[j] = parent->children[j + 1];
}
parent->num_children--;
child->father = NULL;
printf("%s 的 %s 孩子删除成功\n", parent->name, child->name);
return;
}
}
}
printf("删除孩子失败\n");
}
// 查找节点
Person* find(char* name) {
if (root == NULL) {
return NULL;
}
Person* queue[MAX_DEPTH];
int head = 0, tail = 0;
queue[tail++] = root;
while (head < tail) {
Person* cur = queue[head++];
if (strcmp(cur->name, name) == 0) {
return cur;
}
int i;
for (i = 0; i < cur->num_children; i++) {
queue[tail++] = cur->children[i];
}
}
return NULL;
}
// 修改节点
void modify(Person* person) {
if (person) {
printf("请输入修改后的名字和年龄,用空格隔开:");
char name[MAX_NAME_LEN];
int age;
scanf("%s %d", name, &age);
strcpy(person->name, name);
person->age = age;
printf("修改成功\n");
} else {
printf("修改失败\n");
}
}
// 打印家谱树
void print_tree(Person* person, int depth) {
if (person) {
int i;
for (i = 0; i < depth; i++) {
printf("--");
}
printf("%s(%d)\n", person->name, person->age);
int j;
for (j = 0; j < person->num_children; j++) {
print_tree(person->children[j], depth + 1);
}
}
}
int main() {
init();
Person* p1 = (Person*)malloc(sizeof(Person));
strcpy(p1->name, "张三");
p1->age = 60;
add_child(root, p1);
Person* p2 = (Person*)malloc(sizeof(Person));
strcpy(p2->name, "李四");
p2->age = 35;
add_child(p1, p2);
Person* p3 = (Person*)malloc(sizeof(Person));
strcpy(p3->name, "王五");
p3->age = 10;
add_child(p2, p3);
print_tree(root, 0);
printf("\n");
del_child(p2, p3);
print_tree(root, 0);
printf("\n");
Person* p4 = find("张三");
modify(p4);
print_tree(root, 0);
return 0;
}
```
这个家谱管理系统实现了以下功能:
1. 添加子节点
2. 删除子节点
3. 查找节点
4. 修改节点
5. 打印家谱树
当然,这只是一个简单的示例,实际上,家谱管理系统还可以实现更多的功能,比如:
1. 导入/导出家谱数据
2. 支持多种查询方式,比如按照姓名、年龄、出生日期等等查询
3. 支持多语言界面
4. ……