| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1628 人关注过本帖
标题:c语言写的家谱,总是在增删处进行不下去,早怎么改?
取消只看楼主 加入收藏
菜鸟10086
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-7-1
结帖率:0
收藏
 问题点数:0 回复次数:1 
c语言写的家谱,总是在增删处进行不下去,早怎么改?
#include<stdio.h>  
#include<string.h>  
#include<stdlib.h>  
#include<math.h>
#define MAXSIZE 200  
#define MAI 20
typedef int TElemType;
///////////////////////////////
////////////////////////////
struct node//结构体变量
{
char name[MAI]; //姓名
int dirthtime;//[MAI];//出生日期
int deathtime[MAI];//死亡日期
char sex;//性别,男为M,女为W
char homeplace[ MAXSIZE ];//出生地
char homeaddress[ MAXSIZE ];//家庭住址
char occuption[MAI];//职业
char resume[MAXSIZE]; //简历
int i;//辈分  
}node;
///////////////////////////////
////////////////////////////
  typedef struct scnode//孩子兄弟表示法
{
    struct node l;
struct scnode *child;
struct scnode *brother;
}scnode;
///////////////////////////////
////////////////////////////
scnode *search(scnode *data,char name[])//按姓名查找
{
    scnode *p;
    if(data!=NULL)
    {
        if(data->l.name==name)
        p=data;
        else
       {
         p=search(data->child,name);
         if(p!=NULL)
         return p;
         else
         p=search(data->brother,name);
       }
    }
    return p;
}

///////////////////////////////
////////////////////////////
scnode *firshrood()//建立第一个祖先
{

scnode *data;
data=(scnode *)malloc(sizeof(scnode));//分配存储空间

    printf("输入祖先名字:");
    scanf("%s",&data->l.name );
    printf("输入祖先出生日期:");
    scanf("%d",&data->l.dirthtime );
     printf("输入祖先死亡日期:");
    scanf("%d",&data->l.deathtime );
     printf("输入祖先性别:");
    scanf("%s",&data->l.sex );
     printf("输入祖先出生地:");
    scanf("%s",&data->l.homeplace );
     printf("输入祖先家庭住址");
    scanf("%s",&data->l.homeaddress );
     printf("输入祖先职业:");
    scanf("%s",&data->l.occuption );
     printf("输入祖先简历:");
      scanf("%s",&data->l.resume );
     data->l.i =1;
    printf("家祖载入成功\n");
    data->child =NULL;
    data->brother =NULL;
     return data;
}
///////////////////////////////
////////////////////////////
scnode *add():/增加成员
{
   scnode *data,*n;
 char name[MAI];
 int i;
    printf("请输入相关人姓名");
   scanf("%s",name);
    n=search(data,name);
 while(n==NULL)
{
    printf("没有此人,请重新输入姓名:");
   scanf("%s",name);
    n=search(data,name);
}
    printf("选择家庭成员类别选项:\n");
    printf("1.孩子;   2.为此人兄弟\n");
   scanf("%d",&i);
 if(i==1)
{
 if(n->child==NULL)
{
    n->child=(scnode *)malloc(sizeof(scnode));//分配存储空间
   
}
     printf("输入孩子名字:");
    scanf("%s",n->child->l.name );
     printf("输入孩子出生日期:");
    scanf("%d",n->child->l.dirthtime );
     printf("输入孩子死亡日期:");
    scanf("%d",n->child->l.deathtime );
     printf("输入孩子性别:");
    scanf("%s",n->child->l.sex );
     printf("输入孩子出生地:");
    scanf("%s",n->child->l.homeplace );
     printf("输入孩子家庭住址");
    scanf("%s",n->child->l.homeaddress );
     printf("输入孩子职业:");
    scanf("%s",n->child->l.occuption );
     printf("输入孩子简历:");
      scanf("%s",n->child->l.resume );
     n->l.i+=1;
    n->child->brother  =NULL;
    n->child ->child  =NULL;
 return n->child;
}
 if(i==2)
{

 if(n->brother ==NULL)
{
    n->brother =(scnode *)malloc(sizeof(scnode));//分配存储空间
    n->brother ->brother  =NULL;
    n->brother ->child  =NULL;
}
     printf("输入兄弟名字:");
    scanf("%s",&n->l.name  );
     printf("输入兄弟出生日期:");
    scanf("%d",&n->l.dirthtime );
     printf("输入兄弟死亡日期:");
    scanf("%d",&n->l.deathtime );
     printf("输入兄弟性别:");
    scanf("%s",&n->l.sex );
     printf("输入兄弟出生地:");
    scanf("%s",&n->l.homeplace );
     printf("输入兄弟家庭住址");
    scanf("%s",&n->l.homeaddress );
     printf("输入兄弟职业:");
    scanf("%s",&n->l.occuption );
     printf("输入兄弟简历:");
      scanf("%s",&n->l.resume );
     n->l.i=data->l.i;
 return n;
}
 return 0;
}   
///////////////////////////////
////////////////////////////
   void chazhao()//查找此人相关信息
{
    scnode *data;
    scnode *n,*t;
   char name[MAI];
    printf("输入姓名,查找相关信息:\n");
    scanf("%c",name);
    n=search(data,name);
   while(n==NULL)
{   
    printf("此人不存在,请再次输入:\n");
    scanf("%c",name);
    n=search(data,name);   
}
        printf("此人:\n");//?
    printf("%s %d %d %s %s %s %s\n",n->l.name,n->l.dirthtime ,n->l.deathtime,n->l.sex, n->l.homeplace, n->l.homeaddress ,n->l.occuption);

    if(n->brother==NULL)
         printf("此人没有兄弟!\n");
    else printf("%s %d %d %s %s %s %s\n",n->l.name,n->l.dirthtime ,n->l.deathtime,n->l.sex, n->l.homeplace, n->l.homeaddress ,n->l.occuption  );
         printf("此人的孩子:\n");
    if(n->child==NULL)
         printf("此人没有孩子!\n");
    else if(n->brother->child==NULL)
           printf("%s %d %d %s %s %s %s\n",n->l.name,n->l.dirthtime ,n->l.deathtime,n->l.sex, n->l.homeplace, n->l.homeaddress ,n->l.occuption  );
    else{
        printf("%s %d %d %s %s %s %s\n",n->l.name,n->l.dirthtime ,n->l.deathtime,n->l.sex, n->l.homeplace, n->l.homeaddress ,n->l.occuption  );
        t=n->brother ->child;
        while(t!=NULL)
        {
        
            printf("%s %d %d %s %s %s %s\n",n->l.name,n->l.dirthtime ,n->l.deathtime,n->l.sex, n->l.homeplace, n->l.homeaddress ,n->l.occuption  );
            t=t->child;
        }
    }
   }
   ///////////////////////////////
////////////////////////////
   void shanchu()//删除
{
scnode *data;
    scnode *n;
    char name[MAI];
    printf("输入姓名,查找相关信息:\n");
    scanf("%c",&name);
    n=search(data,name);
    while(n==NULL)
    {
        
    printf("此人不存在,请再次输入:\n");
    scanf("%c",&name);
    n=search(data,name);   
    }
    printf("找到此人");
    free(n->brother);
    free(n->child );
    free(n);
    printf("已删除");
}
   ///////////////////////////////
////////////////////////////
void jisuan()

{
    scnode *data;
    int j=0,k=0,y=0,c=0,b=0,v=0,z=0,w=0,o=0;
     while(data==NULL )//计算男女人数
{
     if(data->l.sex=='M')
        k++;
     else
        j++;
        data->child;
        data->brother;
}
        printf("男有%d女有%d\n",k,j);
      while(data==NULL)//计算年代人数
{
         y=data->l .dirthtime ;
         y/=10000;
         y=y%10;
      switch(y)
{
      case 9:c++;break;

      case 8:b++;break;

      case 7:v++;break;

      case 6:z++;break;

      case 5:w++;break;

      default:o++;break;

}
         data->child;
         data->brother;
}
         printf("90后有%d人;80后有%d人;70后有%d人;60后有%d人;50后有%d人;其他有%d人",c,b,v,z,w,o);
}
///////////////////////////////
////////////////////////////
      int main()
{
    scnode *data;
    data=firshrood();//头节点
    //firshrood();
        int m;
      while(1)
{
          //data=firshrood();
          printf("选项:\n") ;
          printf("*****1.输入祖先*****2.添加成员*****\n*****3.删除成员*****4.查找成员信息*****\n*****5.查看家族信息*****0.退出系统*****\n");
          printf ("请输入选项m:");
          scanf("%d",&m);
      if(m==1)//创建家祖
{
         firshrood();//调用函数
}
      if(m==2)//添加成员
{
         add();//调用函数
}
      if(m==3)//删除成员
{
         shanchu();//调用函数

}
      if(m==4)//查找成员信息
{
         chazhao();//调用函数

}
      if(m==5)//查询家族信息
{   
      while(1)
{
      int a;
         printf("*****1.男女比例&年龄分布*****2.迁徒历史*****\n*****3.家族名人录*****4.退出*****\n");
         printf ("请输入选项a:");
         scanf("%d",&a);
      if(a==1)
{
         jisuan();//调用函数,男女比例
                  //调用函数, 年龄分布
}
      if(a==2)
{
          printf("1890年从福建某某迁到某某地\n");// 迁徒历史
}
      if(a==3)
{
           printf("张衡(78年-139年),生平:。。。。。,成就:。。。。。。\n ");//家族名人录
}
      if(a==0)
{
      break;
}
}
}
     if(m==0)//退出
{
          printf("谢谢使用!\n");
     break;
}
}
      return 0;
}
搜索更多相关主题的帖子: name data printf 输入 scanf 
2018-07-01 20:26
菜鸟10086
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-7-1
收藏
得分:0 
回复 楼主 菜鸟10086
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-07-01 21:46
快速回复:c语言写的家谱,总是在增删处进行不下去,早怎么改?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052553 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved