家谱树管理系统设计内容摘要:

ERSONAL_INFO)EnableWindow(TRUE)。 GetDlgItem(IDC_BIRTHDAY)EnableWindow(TRUE)。 }家谱保存函数的实现// void CFamilytreeDlg::OnFileSave()函数的实现void CFamilytreeDlg::OnFileSave() {// TODO: Add your control notification handler code hereif(()==0)return。 湖南科技大学数据结构—课程设计(报告) 第 12 页 12int saveResult。 saveResult=(savepath)。 //保存while(saveResult==WRITE_FILE_ERROR){AfxMessageBox(CString(找不到文件 )+CString(savepath)+CString(该文件可能已被删除.))。 CFileOpenAndSaveDlg dlg(false)。 //保存文件对话框if(()==IDCANCEL)return。 UpdateData(false)。 if(strcmp(,)==0){AfxMessageBox(文件名不能为空!)。 return。 }strcpy(savepath,)。 saveResult=(savepath)。 //保存}IsFamilytreeModified=false。 }两人关系函数的实现// void CFamilytreeDlg::OnPedigreeRelations()函数的实现void CFamilytreeDlg::OnPedigreeRelations() {// TODO: Add your control notification handler code hereCRelationsDlg dlg。 if(()==IDCANCEL)return。 湖南科技大学数据结构—课程设计(报告) 第 13 页 13UpdateData(FALSE)。 int pos1,pos2。 Person oneself=0。 char name1[MAX_CHARNUM],name2[MAX_CHARNUM]。 strcpy(name1,)。 ((),oneself,name1)。 if(oneself)pos1=(oneself)。 else{AfxMessageBox(本家谱中找不到+CString(name1)+!)。 return。 }Person p,q。 CString generation。 generation+=oneself。 generation+=在家谱中的位置:。 for(q=oneself,p=qparent。 p!=0。 p=pparent){generation+=q。 generation+=。 q=p。 }generation+=q。 generation+=\n。 oneself=0。 strcpy(name2,)。 ((),oneself,name2)。 if(oneself)湖南科技大学数据结构—课程设计(报告) 第 14 页 14pos2=(oneself)。 else{AfxMessageBox(本家谱中找不到+CString(name2)+!)。 return。 }generation+=oneself。 generation+=在家谱中的位置:。 for(q=oneself,p=qparent。 p!=0。 p=pparent){generation+=q。 generation+=。 q=p。 }generation+=q。 generation+=\n\n。 CString cmpResult。 if(pos1pos2)(%s 在第%d 代,%s 在第%d 代,%s 是%s 的晚辈.,name1,pos1,name2,pos2,name1,name2)。 else if(pos1pos2)(%s 在第%d 代,%s 在第%d 代,%s 是%s 的长辈.,name1,pos1,name2,pos2,name1,name2)。 else(%s 与%s 同在第%d 代.,name1,name2,pos2)。 湖南科技大学数据结构—课程设计(报告) 第 15 页 15generation+=cmpResult。 AfxMessageBox(generation)。 }增加孩子函数的实现// void CFamilytreeDlg::OnAdd() 函数的实现void CFamilytreeDlg::OnAdd() {// TODO: Add your control notification handler code hereCAddInfoDlg dlg。 HTREEITEM hItem。 hItem=()。 if(()==0)=1。 else=(hItem)。 if(()==IDCANCEL) //弹出对话框return。 UpdateData(FALSE)。 Person addnode。 addnode=new PersonNode。 //新申请一结点if(addnode==0){AfxMessageBox(内存不足 !)。 return。 }addnodeparent=0。 addnodechild=0。 addnodesibling=0。 湖南科技大学数据结构—课程设计(报告) 第 16 页 16//把有关结点信息加入到结点中去strcpy(addnode,)。 strcpy(addnode,)。 addnode=。 addnode=。 addnode=。 addnode=。 addnode=。 //若此人已过世,则还应有死亡日期if(!){addnode=。 addnode=。 addnode=。 }Person oneself=0。 ((),oneself,addnode)。 //查找家谱中有没有此人if(oneself!=0){AfxMessageBox(家谱中已有此人 !)。 delete addnode。 return。 }Person parent=0。 char parentname[MAX_CHARNUM]。 湖南科技大学数据结构—课程设计(报告) 第 17 页 17strcpy(parentname,)。 if(strcmp(parentname,1)==0){ //试图加入一个新的根结点时给出警告int reply。 reply=::MessageBox(thism_hWnd,确实要置此结点为根结点吗。 ,警告,MB_YESNO|MB_ICONWARNING)。 if(reply==IDNO)return。 }else{ //加入的结点不是根结点((),parent,parentname)。 //在家谱中找addnode 的父结点if(parent==0){AfxMessageBox(父亲结点没找到!)。 delete addnode。 return。 }}//日期合法性检查if(!(addnode)){AfxMessageBox(个人信息中的出生日期不合实际!)。 delete addnode。 return。 }//比较孩子结点与其父亲结点的出生日期湖南科技大学数据结构—课程设计(报告) 第 18 页 18if(strcmp(parentname,1)!=0){ //加入的结点不是根结点 if((addnode,parent)0){AfxMessageBox(所加入孩子的出生日期比其父亲的出生日期早,不合实际 !)。 delete addnode。 return。 }else if((addnode,parent)==0){AfxMessageBox(所加入孩子的出生日期与其父亲的出生日期相等,不合实际 !)。 delete addnode。 return。 }}if(!addnode){ //查看死亡日期的合法性if(!(a。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。