用c语言采用树表示一个家谱关系,采用链表(孩子表示法)作为存储结构,实现家谱关系的相关运算。每个节点信息包含有:姓名、性别、配偶姓名、身份证号、年龄、出生日期等。 功能要求: 1)输入家族信息(要求自己设计文件存储格式,存放当前所有家族信息)2)输出家族信息(要求界面输出格式直观明了) 3)查找某人的所有儿子 4)查找某人的双亲。界面要求: 输出形式要有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 储结构: 学生自己根据系统功能要求自己设计,但是要求家谱系 的相关数据要存储在数据文件中。
时间: 2023-11-22 10:56:02 浏览: 67
这是一个比较复杂的问题,我可以提供一些思路供你参考。
首先,我们需要设计家谱节点的数据结构,可以定义一个结构体来存储节点信息:
```c
struct node {
char name[20]; // 姓名
char gender[5]; // 性别
char spouse[20]; // 配偶姓名
char id[20]; // 身份证号
int age; // 年龄
char birthdate[20]; // 出生日期
struct node *parent; // 父亲指针
struct node *child; // 孩子链表头指针
struct node *sibling; // 兄弟指针
};
```
其中,parent指向父亲节点,child指向孩子链表头节点,sibling指向兄弟节点。注意,孩子链表头节点的sibling指针为NULL。
接下来,我们可以设计一些基本的操作函数:
1. 创建家谱节点
```c
struct node *create_node(char *name, char *gender, char *spouse, char *id, int age, char *birthdate) {
struct node *new_node = (struct node *)malloc(sizeof(struct node));
strcpy(new_node->name, name);
strcpy(new_node->gender, gender);
strcpy(new_node->spouse, spouse);
strcpy(new_node->id, id);
new_node->age = age;
strcpy(new_node->birthdate, birthdate);
new_node->parent = NULL;
new_node->child = NULL;
new_node->sibling = NULL;
return new_node;
}
```
2. 添加子节点
```c
void add_child(struct node *parent, struct node *child) {
child->parent = parent;
if (parent->child == NULL) {
parent->child = child;
} else {
struct node *s = parent->child;
while (s->sibling != NULL) {
s = s->sibling;
}
s->sibling = child;
}
}
```
3. 查找某人的所有儿子
```c
void find_sons(struct node *parent) {
struct node *s = parent->child;
printf("%s的儿子有:\n", parent->name);
while (s != NULL) {
if (strcmp(s->gender, "男") == 0) {
printf("%s\n", s->name);
}
s = s->sibling;
}
}
```
4. 查找某人的双亲
```c
void find_parents(struct node *child) {
if (child->parent == NULL) {
printf("%s没有父母\n", child->name);
} else {
printf("%s的父亲是:%s\n", child->name, child->parent->name);
if (child->parent->spouse[0] != '\0') {
printf("%s的母亲是:%s\n", child->name, child->parent->spouse);
} else {
printf("%s没有母亲\n", child->name);
}
}
}
```
最后,我们需要设计一个主函数来完成整个程序的逻辑。可以通过文件读写来实现家族信息的保存和加载。
这只是一个简单的思路,具体的实现还需要根据实际情况进行调整和完善。
阅读全文