060.记录个人资料

简介: 060.记录个人资料
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
struct Family *get_person(void);    /* Prototype for input function */
char related(struct Family *pmember1, struct Family *pmember2);
char set_ancestry(struct Family *pmember1, struct Family *pmember2);
struct Date   
{
  int day;
  int month;
  int year;
};
struct Family                      /* Family structure declaration   */
{
  struct Date dob;
  char name[20];
  char father[20];
  char mother[20];
  struct Family *next;            /* Pointer to next structure      */
  struct Family *previous;        /* Pointer to previous structure  */
  struct Family *p_to_pa;         /* Pointer to father structure   */
  struct Family *p_to_ma;         /* Pointer to mother structure   */
};
void main()
{
  struct Family *first = NULL;    /* Pointer to first person        */
  struct Family *current = NULL;  /* Pointer to current person      */
  struct Family *last = NULL;     /* Pointer to previous person     */
  char more = '\0';               /* Test value for ending input    */
  for( ; ; )
  {
    printf("\nDo you want to enter details of a%s person (Y or N)? ", 
      first != NULL?"nother " : "" );
    scanf(" %c", &more);
    if(tolower(more) == 'n') 
      break;
    current = get_person();
    if(first == NULL)
    {
      first = current;            /* Set pointer to first Family    */
      last = current;             /* Remember for next iteration    */
    }
    else
    {
      last->next = current;  /* Set next address for previous Family */  
      current->previous = last; /* Set previous address for current */
      last = current;           /* Remember for next iteration */             
    }
  }
  current = first;
  while(current->next != NULL)  /* Check for relation for each person in    */
  {                       /* the list up to second to last            */
    int parents = 0;      /* Declare parent count local to this block */
    last = current->next; /* Get the pointer to the next              */
    while(last != NULL)   /* This loop tests current person           */
    {                     /* against all the remainder in the list    */
      if(related(current, last))         /* Found a parent ?          */
        if(++parents == 2)   /* Yes, update count and check it        */
          break;             /* Exit inner loop if both parents found */
        last = last->next;     /* Get the address of the next           */
    } 
    current = current->next;   /* Next in the list to check             */
  }
  /* Now tell them what we know */
  /* Output Family data in correct order */
  current = first;
  while (current != NULL)  /* Output Family data in correct order  */
  {
    printf("\n%s was born %d/%d/%d, and has %s and %s as parents.",
      current->name, current->dob.day, current->dob.month,
      current->dob. year, current->father,  current->mother);
    if(current->p_to_pa != NULL )
      printf("\n\t%s's birth date is %d/%d/%d  ",
      current->father, current->p_to_pa->dob.day,
      current->p_to_pa->dob.month, 
      current->p_to_pa->dob.year);
    if(current->p_to_ma != NULL)
      printf("and %s's birth date is %d/%d/%d.\n  ",
      current->mother, current->p_to_ma->dob.day,
      current->p_to_ma->dob.month, 
      current->p_to_ma->dob.year);
    current = current->next;  /* current points to next in list       */
  }
  /* Now free the memory */  
  current = first;
  while(current->next != NULL)
  {
    last = current;     /* Save pointer to enable memory to be freed */
    current = current->next; /* current points to next in list       */
    free(last);         /* Free memory for last                      */
  }
}
/*   Function to input data on Family members   */
struct Family *get_person(void)
{
  struct Family *temp;         /* Define temporary structure pointer */
  /* Allocate memory for a structure */
  temp = (struct Family*) malloc(sizeof(struct Family));
  printf("\nEnter the name of the person: ");
  scanf("%s", temp -> name );         /* Read the Family's name */
  printf("\nEnter %s's date of birth (day month year); ", temp->name);
  scanf("%d %d %d", &temp->dob.day, &temp->dob.month, &temp->dob.year);
  printf("\nWho is %s's father? ", temp->name );
  scanf("%s", temp->father );        /* Get the father's name */
  printf("\nWho is %s's mother? ", temp -> name );
  scanf("%s", temp -> mother );      /* Get the mother's name */
  temp->next = temp->previous = NULL; /* Set pointers to NULL */
  temp->p_to_pa = temp->p_to_ma = NULL;    /* Set pointers to NULL  */
  return temp;          /* Return address of Family structure */
}
char set_ancestry(struct Family *pmember1, struct Family *pmember2)
{
  if(strcmp(pmember1->father, pmember2->name) == 0)
  {
    pmember1->p_to_pa = pmember2;
    return 1;
  }
  if( strcmp(pmember1->mother, pmember2->name) == 0)
  {
    pmember1->p_to_ma = pmember2;
    return 1;
  }
  else
    return 0;
}
/* Fill in pointers for mother or father relationships */
char related (struct Family *pmember1, struct Family *pmember2)
{
  return set_ancestry(pmember1, pmember2) ||
    set_ancestry(pmember2, pmember1);
}
相关文章
如何快速核对未到场的人数名字EXCEL
如何快速核对未到场的人数名字EXCEL
|
API 网络安全
手机号码归属地可以应用在哪些地方呢?
在手机号码整个使用群体中个人占比高达90%,使用人数大、占比高的特点也造成了电话诈骗的高频发生。同时由于个人信息的泄露,诈骗分子在充分了解了受害人的资料,使诈骗犯罪活动更高的犯罪成功率。在诈骗高发之时,手机号码归属地作为一个通讯衍生的工具,可以第一时间发挥其作用,在接到不明来电时可以通过手机号码归属地起到判断来电的作用。
332 0
手机号码归属地可以应用在哪些地方呢?
公示公告信息弹窗提示(一天只弹一次)
公示公告信息弹窗提示(一天只弹一次)
225 0
公示公告信息弹窗提示(一天只弹一次)
|
存储 JavaScript
使用LocalStorage存储用户已填写的表单信息(意外刷新后自动填充)
使用LocalStorage存储用户已填写的表单信息(意外刷新后自动填充)
157 0
使用LocalStorage存储用户已填写的表单信息(意外刷新后自动填充)
|
SQL 存储 JSON
XssFilter使用记录
xss意思是跨域网站攻击,这里不探讨xss的起源,单纯记录下xss在项目中的实际应用,xss防止javascrpts脚本注入类似于sql注入,项目中使用到了xssfilter所以记录在此
128 0
|
SQL JSON 前端开发
|
监控 前端开发 JavaScript
|
Web App开发 JavaScript 前端开发
赚点微信页面外快的一点记录
最近做了个移动页面的外包,写下来,页面布局感觉是比PC页面简单一点。 不像PC页面内容那么多,而且PC端的浏览器比较多,这边的话,我就考虑的比较少。 最后在页面写完后自己整理了两个小插件分别是弹出框zDialog和表单验证zValidate。
赚点微信页面外快的一点记录
|
文字识别 安全
还在对访客纸质记录?来看看最新的人证对比
访客人员安全管理与内部人员管理是许多场合安全管理的重点之一。长期以来,众多单位仍然采用简单的手工访客登记,这种访客管理方式已适应不了信息化的需要;传统手工来访登记因采用手工输入,所以信息真实性不能保证;访客人员素质不一、登记字体潦草,从而使登记信息在需要时无法确认;纸质保存易丢失、易损坏、查找困难,信息难以较长时间保存,因此已经不适应现代工作方式,也满足不了安全需求。