t=0; }while(t==1); } } if (ch==\else { root=new Node; //申请结点内存空间 SetNode(root); //设置结点内容 root->child=Creat( ); //该结点的孩子 root->brother=Creat( ); // 该结点的兄弟 } return root; //返回结点 } void FamilyTree::Release(Node *root) // 析构函数调用 { if(root!=NULL) { Release(root->child); //释放左孩子 Release(root->brother); //释放右兄弟 delete root; } } void FamilyTree::SetNode(Node *root) //设置结点信息 { Numberofpeople++; cout<<\请输入家庭成员的基本信息 \cout<<\姓名: \cin>>root->data.name; cout<<\出生地: \cin>>root->data.birthPlace; cout<<\生日 (数字、年月日以空格或者回车间隔) :\while(1) { cin>>root->data.birthDay; if(cin.fail()) { cout<<\输入有错!!请重新输入生日 (数字):\cin.clear(); //输入错误则能重新输入 cin.sync(); //清空流 } else break; } //isdigit 异常处理生日输入 ,若参数 c 为阿拉伯数字 0~9,则返回非 0 值,否则返回 NULL 。 /*int i; for(i=0;root->data.birthDay[i]!=0;++i) { if(isdigit(root->data.birthDay[i])==0) { cout<<\输入不明确,请重新输入! !\break; } }*/ cout<<\性别: \cin>>root->data.sex; cout<<\学历: \cin>>root->data.education; cout<<\工作: \cin>>root->data.job; cout<<\父亲: \cin>>root->data.father; cout<<\配偶(有多任配偶则以 “,”或者 “、”间隔):\cin>>root->data.spouse; cout<<\是否健在( y 是, n 否):\cin>>root->data.life; if(toupper(root->data.life)!='Y') //异常处理 { if(toupper(root->data.life)!='N'){ int t=1; do { cout<<\输入不明确,请重新输入! !\cout<<\是否健在( y 是, n 否):\cin>>root->data.life; if((toupper(root->data.life)=='Y')||(toupper(root->data.life)=='N')) t=0; }while(t==1); } } if(toupper(root->data.life)=='Y') LifePeopele++; } void FamilyTree::PreOrder(Node *root) //前序递归遍历输出家谱 { if(root==NULL) return; else { cout<
好文档 - 专业文书写作范文服务资料分享网站