C实现记录个人资料
来源:互联网 发布:mac搭建ipv6测试环境 编辑:程序博客网 时间:2024/06/11 21:52
代码:
#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;}elsereturn 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);}
效果图:
0 0
- C实现记录个人资料
- 个人资料
- 个人资料
- 个人资料
- 个人资料
- 求C.K的个人资料和关于她的事
- Android实现个人资料页面头像背景模糊显示,包括状态栏
- c简单实现日志记录
- 沈殿霞个人资料
- Will----个人资料
- 张双河个人资料
- Google个人资料
- 关于个人资料
- 个人资料查询
- 个人资料 英文
- 个人资料网站
- 个人资料暂存
- 个人资料总结
- spring IOC配置
- android studio使用教程(九)eclipse工程导入studio中乱码解决方案
- Linux下发送邮件
- 加快Android Studio/Gradle构建速度
- JavaScript模块化编程
- C实现记录个人资料
- 228,多线程之延迟加载实例
- 为ubuntu 安装vmware tool
- Android HorizontalScrollView 仿QQ侧滑
- SILTP特征
- 2016年01月广师android群内容分享
- tips
- vijos P1131
- Android Studio Logcat的使用