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);
}
相关文章
机房重构之学生端显示个人信息
机房重构之学生端显示个人信息
82 0
公示公告信息弹窗提示(一天只弹一次)
公示公告信息弹窗提示(一天只弹一次)
248 0
公示公告信息弹窗提示(一天只弹一次)
通讯录添加信息
通讯录添加信息
119 0
|
Web App开发 JavaScript PHP
记录VisualSVNServer配置在线密码修改功能
VisualSVN Server使用的是64位版 查看对应的apache版本号是 2.2.32.这个版本需要使用php5.5以下的,且需要使用64位的php。 下载php 5.4 的64位版本。 php的下载地址:官网地址:http://windows.php.net/download/ http://windows.php.net/downloads/pecl/releases/ 官网从5.5开始才提供了64位的bin包下载。
3193 0
|
监控 前端开发 JavaScript
|
SQL JSON 前端开发
7-27 通讯录的录入与显示 (10 分)
7-27 通讯录的录入与显示 (10 分)
459 0
|
Web App开发 JavaScript 前端开发
赚点微信页面外快的一点记录
最近做了个移动页面的外包,写下来,页面布局感觉是比PC页面简单一点。 不像PC页面内容那么多,而且PC端的浏览器比较多,这边的话,我就考虑的比较少。 最后在页面写完后自己整理了两个小插件分别是弹出框zDialog和表单验证zValidate。
赚点微信页面外快的一点记录
|
Java 数据库 数据安全/隐私保护
JSP+Servlet培训班作业管理系统[4]–记录登录用户信息
本文目录 1. 本章任务 2. 点击登录后记录用户信息 3. 构造测试用户对象 4. 显示登录用户信息 5. 测试
256 0
JSP+Servlet培训班作业管理系统[4]–记录登录用户信息
|
文字识别 安全
还在对访客纸质记录?来看看最新的人证对比
访客人员安全管理与内部人员管理是许多场合安全管理的重点之一。长期以来,众多单位仍然采用简单的手工访客登记,这种访客管理方式已适应不了信息化的需要;传统手工来访登记因采用手工输入,所以信息真实性不能保证;访客人员素质不一、登记字体潦草,从而使登记信息在需要时无法确认;纸质保存易丢失、易损坏、查找困难,信息难以较长时间保存,因此已经不适应现代工作方式,也满足不了安全需求。

热门文章

最新文章