写一个C语言代码家谱管理系统

不用哈夫曼树的前提下对家庭族谱信息能够进行录入、修改等操作,有菜单界面和退出功能,系统以菜单方式进行工作
家庭族谱管理应包括:姓名、性别、出生年月日、祖籍等信息,该系统应该具有以下功能:
1、家庭族谱管理信息录入功能--输入;
2、增加家庭成员信息;
3、家庭族谱信息浏览--输出;
4、查询家庭族谱信息;
5、家庭族谱信息删除;
6、家庭族谱信息修改;
7、数据保存;
8、数据读取。

可参考这个


#include <stdio.h>
#include <string.h>

#define MAX_PERSONS 100   // 最大人数
#define NAME_LENGTH 20    // 名字最大长度

struct Person {
    char name[NAME_LENGTH];        // 姓名
    char gender;                   // 性别,'M' 代表男性,'F' 代表女性
    int age;                       // 年龄
    struct Person* father;         // 父亲
    struct Person* mother;         // 母亲
    struct Person* spouse;         // 配偶
    struct Person* children[MAX_PERSONS];   // 孩子数组
};

struct Person persons[MAX_PERSONS];  // 人员数组
int nPersons = 0;                    // 当前人数

void print_menu() {
    printf("\nFamily Tree Management System\n");
    printf("--------------------------------\n");
    printf("1. Add a person\n");
    printf("2. Modify a person\n");
    printf("3. Remove a person\n");
    printf("4. Search a person\n");
    printf("5. List all persons\n");
    printf("6. Exit\n");
    printf("Enter your choice (1-6): ");
}

void add_person() {
    // 输入新成员的信息并添加到数组中
}

void modify_person() {
    // 根据姓名或编号搜索要修改的人员,修改其信息
}

void remove_person() {
    // 根据姓名或编号搜索要删除的人员,将其从数组中删除
}

void search_person() {
    // 根据姓名或编号搜索人员,并打印其信息
}

void list_all_persons() {
    // 打印所有人员的信息
}

int main() {
    int choice;

    do {
        print_menu();
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                add_person();
                break;
            case 2:
                modify_person();
                break;
            case 3:
                remove_person();
                break;
            case 4:
                search_person();
                break;
            case 5:
                list_all_persons();
                break;
            case 6:
                printf("Thank you for using the system!\n");
                break;
            default:
                printf("Invalid choice! Please try again.\n");
                break;
        }
    } while (choice != 6);

    return 0;
}

```
这个伪代码实现了一个简单的家谱管理系统。用户可以通过菜单选择要进行的操作,如添加一个成员、修改一个成员、删除一个成员、搜索一个成员、列出所有成员等等。这个伪代码只包括框架和函数声明,您需要根据具体需求自己实现每个函数的具体功能。


//C语言家谱管理系统
#include< stdio.h >
#include< stdlib.h >
#include< string.h >
//定义家庭族谱结构体
typedef struct family
{
    char name[20];
    char gender[4];
    char birth[20];
    char birthplace[20];
}family;
//声明函数
void menu();
void input();
void add();
void output();
void search();
void delete();
void modify();
void save();
void read();
//主函数
int main()
{
    menu();
    return 0;
}
//菜单函数
void menu()
{
    int n;
    while(1)
    {
        printf("\n--------家庭族谱管理系统--------\n");
        printf("1、家庭族谱信息录入\n");
        printf("2、增加家庭成员信息\n");
        printf("3、家庭族谱信息浏览\n");
        printf("4、查询家庭族谱信息\n");
        printf("5、家庭族谱信息删除\n");
        printf("6、家庭族谱信息修改\n");
        printf("7、数据保存\n");
        printf("8、数据读取\n");
        printf("0、退出系统\n");
        printf("请输入你要进行的操作:");
        scanf("%!d(MISSING)",&n);
        switch(n)
        {
            case 1:input(); break;
            case 2:add(); break;
            case 3:output(); break;
            case 4:search(); break;
            case 5:delete(); break;
            case 6:modify(); break;
            case 7:save(); break;
            case 8:read(); break;
            case 0:exit(0); break;
            default:printf("输入有误,请重新输入!\n"); break;
        }
    }
}
//家庭族谱管理信息录入功能
void input()
{
    FILE *fp;
    family fm;
    int n;
    if((fp=fopen("family.dat","a"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    while(1)
    {
        printf("请输入家庭成员信息:\n");
        printf("姓名:");
        scanf("%!s(MISSING)",fm.name);
        printf("性别:");
        scanf("%!s(MISSING)",fm.gender);
        printf("出生年月日:");
        scanf("%!s(MISSING)",fm.birth);
        printf("祖籍:");
        scanf("%!s(MISSING)",fm.birthplace);
        fwrite(&fm,sizeof(family),1,fp);
        printf("是否继续录入?1.继续  其他.退出\n");
        scanf("%!d(MISSING)",&n);
        if(n!=1)
            break;
    }
    fclose(fp);
}
//增加家庭成员信息
void add()
{
    FILE *fp;
    family fm;
    if((fp=fopen("family.dat","a"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    printf("请输入家庭成员信息:\n");
    printf("姓名:");
    scanf("%!s(MISSING)",fm.name);
    printf("性别:");
    scanf("%!s(MISSING)",fm.gender);
    printf("出生年月日:");
    scanf("%!s(MISSING)",fm.birth);
    printf("祖籍:");
    scanf("%!s(MISSING)",fm.birthplace);
    fwrite(&fm,sizeof(family),1,fp);
    fclose(fp);
}
//家庭族谱信息浏览
void output()
{
    FILE *fp;
    family fm;
    int i;
    if((fp=fopen("family.dat","r"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    printf("家庭族谱信息浏览:\n");
    printf("序号\t姓名\t性别\t出生日期\t\t祖籍\n");
    i=1;
    while(!feof(fp))
    {
        fread(&fm,sizeof(family),1,fp);
        printf("%!d(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\n",i,fm.name,fm.gender,fm.birth,fm.birthplace);
        i++;
    }
    fclose(fp);
}
//查询家庭族谱信息
void search()
{
    FILE *fp;
    char name[20];
    family fm;
    int flag=0;
    if((fp=fopen("family.dat","r"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    printf("请输入查询家庭成员信息:\n");
    printf("姓名:");
    scanf("%!s(MISSING)",name);
    while(!feof(fp))
    {
        fread(&fm,sizeof(family),1,fp);
        if(strcmp(name,fm.name)==0)
        {
            printf("家庭成员信息:\n");
            printf("姓名:%!s(MISSING)\t性别:%!s(MISSING)\t出生日期:%!s(MISSING)\t祖籍:%!s(MISSING)\n",fm.name,fm.gender,fm.birth,fm.birthplace);
            flag=1;
            break;
        }
    }
    if(flag==0)
        printf("家庭成员信息不存在!\n");
    fclose(fp);
}
//家庭族谱信息删除
void delete()
{
    FILE *fp;
    char name[20];
    family fm;
    int flag=0;
    if((fp=fopen("family.dat","r+"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    printf("请输入要删除家庭成员信息:\n");
    printf("姓名:");
    scanf("%!s(MISSING)",name);
    while(!feof(fp))
    {
        fread(&fm,sizeof(family),1,fp);
        if(strcmp(name,fm.name)==0)
        {
            printf("家庭成员信息:\n");
            printf("姓名:%!s(MISSING)\t性别:%!s(MISSING)\t出生日期:%!s(MISSING)\t祖籍:%!s(MISSING)\n",fm.name,fm.gender,fm.birth,fm.birthplace);
            printf("家庭成员信息已删除!\n");
            fseek(fp,-sizeof(family),1);
            fwrite(&fm,sizeof(family),1,fp);
            flag=1;
            break;
        }
    }
    if(flag==0)
        printf("家庭成员信息不存在!\n");
    fclose(fp);
}
//家庭族谱信息修改
void modify()
{
    FILE *fp;
    char name[20];
    family fm;
    int flag=0;
    if((fp=fopen("family.dat","r+"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    printf("请输入要修改家庭成员信息:\n");
    printf("姓名:");
    scanf("%!s(MISSING)",name);
    while(!feof(fp))
    {
        fread(&fm,sizeof(family),1,fp);
        if(strcmp(name,fm.name)==0)
        {
            printf("家庭成员信息:\n");
            printf("姓名:%!s(MISSING)\t性别:%!s(MISSING)\t出生日期:%!s(MISSING)\t祖籍:%!s(MISSING)\n",fm.name,fm.gender,fm.birth,fm.birthplace);
            printf("请输入新的家庭成员信息:\n");
            printf("姓名:");
            scanf("%!s(MISSING)",fm.name);
            printf("性别:");
            scanf("%!s(MISSING)",fm.gender);
            printf("出生日期:");
            scanf("%!s(MISSING)",fm.birth);
            printf("祖籍:");
            scanf("%!s(MISSING)",fm.birthplace);
            fseek(fp,-sizeof(family),1);
            fwrite(&fm,sizeof(family),1,fp);
            printf("家庭成员信息修改成功!\n");
            flag=1;
            break;
        }
    }
    if(flag==0)
        printf("家庭成员信息不存在!\n");
    fclose(fp);
}
//数据保存
void save()
{
    FILE *fp;
    family fm;
    int i;
    if((fp=fopen("family.dat","r"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    if((fp=fopen("family.txt","w"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    printf("家庭族谱信息保存:\n");
    printf("序号\t姓名\t性别\t出生日期\t\t祖籍\n");
    i=1;
    while(!feof(fp))
    {
        fread(&fm,sizeof(family),1,fp);
        fprintf(fp,"%!d(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\n",i,fm.name,fm.gender,fm.birth,fm.birthplace);
        i++;
    }
    fclose(fp);
    printf("数据保存成功!\n");
}
//数据读取
void read()
{
    FILE *fp;
    family fm;
    int i;
    if((fp=fopen("family.txt","r"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    printf("家庭族谱信息读取:\n");
    printf("序号\t姓名\t性别\t出生日期\t\t祖籍\n");
    i=1;
    while(!feof(fp))
    {
        fscanf(fp,"%!d(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\n",&i,fm.name,fm.gender,fm.birth,fm.birthplace);
        printf("%!d(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\t%!s(MISSING)\n",i,fm.name,fm.gender,fm.birth,fm.birthplace);
        i++;
    }
    fclose(fp);
    printf("数据读取成功!\n");
}