(完整word版)家谱树

这是实训时候完全自己写的,输入出生日期的时候一定按要求去输入(以防出错),下面是老师给我们的要求:
●建立输入文件以存放最初家谱中各成员的信息
● 成员的信息中均应包含以下内容:
●姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)
●也可附加其它信息、但不是必需的。
● 能对修改后的家谱存盘以备以后使用。
●能从文件中读出已有的家谱,形成树状关系。
●家谱建立好之后,以图形方式显示出来。
●显示第 n代所有人的信息。
●按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
●按照出生日期查询成员名单。
●输入两人姓名,确定其关系。
●某人添加孩子。
●删除某人(若其还有后代,则一并删除)。
●修改某人信息。
●按出生日期对家谱中所有人排序。
●打开一家谱时,若家谱中某人的生日在打开家谱的那一天,应给出提示。
下面是程序代码(用文本过滤一下粘贴到工程中就可用):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define OK 1
#define砂浆回收 FALSE 0
#define ERROR -1
typedef int status;
typedef struct {
    int num;//孩子个数
    char name[20];///姓名
    char sex;//性别
    //bool is_spouse;//配偶是否存在
    char spouse[20];//配偶的姓名,性别取反
}DataType;
typedef struct TNode{
    DataType data;//数据域
    struct TNode* nextstr[10];//指针域,指向孩子
    struct TNode* parent;//指针域,指向父亲
}PedTNode,*PedTree;//家谱树
void OutMenu();//输出家谱菜单
void CreateNewPedTreeNode(PedTree Tree);//创建孩子,递归调用
void CreatePedTree(PedTree Tree);//创建Pedigree
void导线测量法 OutOneInfor(PedTree Tree);//递归调用实现输出整个家谱树
void OutAllPedTree(PedTree Tree);//输出整个家谱信息
//PedTree SearchPedTree(PedTree Tree,char Name[]);//在树中查
bool SearchPedTree(PedTree Tree,char Name[],PedTree* DrawTree);//在树中查
bool SearchPedTree2(PedTree Tree,char Name[],PedTree* DrawTree);//在树中查配偶是否匹配
void ShowMenu1(PedTree Tree);//显示要查人的信息
//void ShowSelfInfor(PedTree Tree,char Name[],int Length);//显示个人信息
void ShowMenu2();//显示添加信息的菜单
int AddNewInfor(PedTree Tree);//添加新的家谱信息
void AddChildInfor(PedTree Tree);//添加子女的信息
void AddPouseInfor(PedTree Tree);//添加配偶信息
int ChangeInfor(PedTree Tree);//修改家谱信息
void ShowMenu3();//显示修改信息的菜单
int main()
{
    char choice;
    system("color 1f");
    PedTNode TreeNode;
    PedTree Tree=&TreeNode;
    bool flag=false;//标志是否执行建立家谱
    //PedTree Tree=NULL;
    while(1)
    {
        fflush(stdin);//清除键盘缓冲区
        system("cls");
        OutMenu();
        printf("\n");
        printf("\t\t请您选择:");
        choice=getchar();
        switch(choice)
        {
        case '1':
            if(!flag)
            {
                CreatePedTree(Tree);//创建Pedigree
                flag=true;
            }
            else
            {
                printf("\n\t\t家谱不能多次建立\n");
                printf("\n\t\t按任意键继续:");
                fflush(stdin);
                getch();
            }
            break;
        case '2':
            if(flag)
                ShowMenu1(Tree);//显示要查人的信息
            else
            {
                printf("\n\t\t家谱未建立,请您先建立家谱\n");
                printf("\n\t\t按任意键继续:");
                fflush(stdin);
                getch();
            }
            break;
        case '3':
            if(flag)
                AddNewInfor(Tree);//添加新的家谱信息
            else
            {曼越橘
                printf("\n\t\t家谱未建立,请您先建立家谱\n");
                printf("\n\t\t按任意键继续:");
                fflush(stdin);
                getch();
            }
            break;
        case '4':
            if(flag)
                OutAllPedTree(Tree);//输出整个家谱信息
            else
            {
                printf("\n\t\t家谱未建立,请您先建立家谱\n");
                printf("\n\t\t按任意键继续:");
                fflush(stdin);
                getch();
            }
            break;
两票系统        case '5':
            if(flag)
                ChangeInfor(Tree);//修改家谱信息
            else
            {
                printf("\n\t\t家谱未建立,请您先建立家谱\n");
                printf("\n\t\t按任意键继续:");
                fflush(stdin);
                getch();
            }
            break;
        case '6':
            return 0;
        }
    }
    //return 0;
}
void OutMenu()
{
    printf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n");
    printf("\t\t*                                          *\n");
    printf("\t\t*        家谱信息管理菜单                *\n");
    printf("\t\t*                                          *\n");
    printf("\t\t*          1:输入家谱信息                  *\n");
    printf("\t\t*          2:查并输出某人信息            *\n");
    printf("\t\t*          3:添加新的家庭成员              *\n");
    printf("\t\t*          4:输出整个家谱信息              *\n");
    printf("\t\t*          5:修改某个人的信息              *\n");
    printf("\t\t*          6:退出整个程序                  *\n");
    printf("\t\t*                                          *\n");
    printf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n");
   
}
void CreatePedTree(PedTree Tree)//创建Pedigree
{
    fflush(stdin);//清除键盘缓冲区
    system("cls");
    /*Tree=(PedTree)malloc(sizeof(PedTNode));
    if(!Tree)
    {
        printf("Insufficient Memory!\n");
        exit(-1);
    }*/
    printf("\t\t请输入姓名:");
    scanf("%s",Tree->data.name);
    printf("\t\t请输入性别(GB男):");
    //scanf("%c",&(Tree->data.sex));
    fflush(stdin);
三元催化清洗剂配方    (Tree->data.sex)=getchar();
    printf("\t\t请输入%s子女的个数:",Tree->data.name);
    scanf("%d",&(Tree->data.num));
    printf("\t\t请输入%s配偶的名字(配偶不存在,请输入)",Tree->data.name);
    scanf("%s",Tree->data.spouse);
    if(strcmp(Tree->data.spouse,"0")==0 && Tree->data.num!=0)
    {
        printf(颗粒级配"\t\t%s的配偶不存在,不能有孩子!\n",Tree->data.name);
        Tree->data.num=0;
    }
    Tree->parent=NULL;
    for(int i=0;i<Tree->data.num;i++)
    {
        printf("\n");
        PedTree ChildTree=(PedTree)malloc(sizeof(PedTNode));
        if(!ChildTree)
        {
            printf("Insufficient Memory!\n");
            exit(-1);
        }
        Tree->nextstr[i]=ChildTree;//指向子女
        printf("\t\t请输入%s的第%d个子女的姓名:",Tree->data.name,i+1);

本文发布于:2024-09-21 22:04:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/132867.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:家谱   信息   输出   输入
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议