家譜管理系統(tǒng)(含源代碼)_第1頁(yè)
家譜管理系統(tǒng)(含源代碼)_第2頁(yè)
家譜管理系統(tǒng)(含源代碼)_第3頁(yè)
家譜管理系統(tǒng)(含源代碼)_第4頁(yè)
家譜管理系統(tǒng)(含源代碼)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)用標(biāo)準(zhǔn)家譜管理系統(tǒng)—— C語(yǔ)言(數(shù)據(jù)結(jié)構(gòu))目的和要求:樹形結(jié)構(gòu)是一種非常重要的非線性結(jié)構(gòu),它用于描述數(shù)據(jù)元素之間的層次關(guān)系,人類家譜是樹形結(jié)構(gòu)的典型體現(xiàn),通過(guò)此項(xiàng)訓(xùn)練讓學(xué)生掌握樹形結(jié)構(gòu)的知識(shí);使學(xué)生重點(diǎn)掌握樹與二叉樹的轉(zhuǎn)換,二叉樹的存儲(chǔ)和遍歷,和二叉樹相關(guān)的一些運(yùn)算;要求完成家譜信息的錄入和保存,任意成員的查找及某一成員祖先、子孫、兄弟、堂兄弟的查找。排答疑和輔導(dǎo)。完整代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>intMATEFLAG=0;//是否入贅或嫁入這家的,1表示為是,0表示否typedefstructTreeNode//樹節(jié)點(diǎn)定義{intNum;//保存此人兒女個(gè)數(shù)charName[20];//保存此人姓名charKind;//保存此人性別,男M,女FstructTreeNode*NextNode[20];//保存此人的兒女,NextNode[0]里存放配偶的地址structTreeNode*Parent;//保存此節(jié)點(diǎn)的父節(jié)點(diǎn)}TreeNode;voidCreatTree(TreeNode*Tree);//創(chuàng)建樹voidOutPutAll(TreeNode*Tree);//輸出樹文案大全實(shí)用標(biāo)準(zhǔn)TreeNode*SearchTree(TreeNode*Tree,charname[],intlength);voidMainMenu(TreeNode*Tree);voidSubMenue1(TreeNode*Tree);voidSubMenue2(TreeNode*Tree);voidChange(TreeNode*Tree);voidAddNew(TreeNode*Tree);voidOutPutMessage(TreeNode*Tree,charname[],intlength);主函數(shù)voidmain(){TreeNode*Tree;// 產(chǎn)生根節(jié)點(diǎn)Tree=(TreeNode*)malloc(sizeof(TreeNode));Tree->Parent=NULL;strcpy(Tree->Name,"0");MainMenu(Tree);// 顯示主菜單}添加新的成員voidAddNew(TreeNode*Tree){SubMenue2(Tree);// 添加新成員界面}顯示添加家庭信息的界面文案大全實(shí)用標(biāo)準(zhǔn)voidSubMenue2(TreeNode*Tree){charc;intnum;charname[20];TreeNode*NewNode;getchar();while(1){system("cls");printf(" 請(qǐng)選擇你的操作 \n");printf("A: 添加某個(gè)人的子女的信息 \n");printf("B: 添加某個(gè)人配偶的信息 \n");printf("C: 退出\n");printf(" 請(qǐng)選擇相應(yīng)功能: \n");c=getchar();switch(c){case'A': // 添加子女信息printf(" 請(qǐng)輸入那個(gè)人的名字 :\n");scanf("%s",name);Tree=SearchTree(Tree,name,20);// 在家譜里查找這個(gè)人文案大全實(shí)用標(biāo)準(zhǔn)if(Tree==NULL){printf(" 該家譜圖中沒有 %s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤 \n",name);break;}if(Tree->Parent==NULL&&Tree->NextNode[0]==NULL||Tree->Parent!=NULL&&Tree->Name!=Tree->Parent->NextNode[0]->Name){printf(" 至今還沒有配偶請(qǐng)先添加配偶 \n",Tree->Name);break;}if(Tree->Parent==NULL&&(Tree->Num>20||Tree->Num<0))Tree->Num=0;if(MATEFLAG==1)Tree=Tree->Parent;NewNode=(TreeNode*)malloc(sizeof(TreeNode));printf(" 請(qǐng)輸入添加人員姓名 :\n");scanf("%s",NewNode->Name);printf(" 請(qǐng)輸入添加人員性別女 F男M:\n");scanf("%1s",&NewNode->Kind);num=Tree->Num;文案大全實(shí)用標(biāo)準(zhǔn)NewNode->NextNode[0]=(TreeNode*)malloc(sizeof(TreeNode));NewNode->NextNode[0]=NULL;NewNode->Num=0;NewNode->Parent=Tree;Tree->NextNode[num+1]=NewNode;Tree->Num=Tree->Num+1;printf(" 子女的信息添加成功 \n");break;case'B':printf(" 請(qǐng)輸入那個(gè)人的名字 :\n");scanf("%s",name);Tree=SearchTree(Tree,name,20);if(Tree->Parent!=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0||Tree->NextNode[0]!=NULL){printf(" 已經(jīng)有了配偶\n");break;}if(Tree==NULL){printf(" 該家譜圖中沒有 %s這個(gè)人的信息請(qǐng)確認(rèn) \n",name);文案大全實(shí)用標(biāo)準(zhǔn)break;}NewNode=(TreeNode*)malloc(sizeof(TreeNode));printf(" 請(qǐng)輸入添加人員姓名 :\n");scanf("%s",NewNode->Name);printf(" 請(qǐng)輸入添加人員性別女 F男M:\n");scanf("%1s",&NewNode->Kind);NewNode->Parent=Tree;Tree->NextNode[0]=NewNode;break;case'C':printf(" 本項(xiàng)服務(wù)到此結(jié)束 \n");break;case'\n':break;default:printf(" 對(duì)不起!你的選擇錯(cuò)誤 \n");break;}if(c=='C'||c=='c')break;printf(" 請(qǐng)按Enter鍵繼續(xù)操作\n");文案大全實(shí)用標(biāo)準(zhǔn)getchar();getchar();}}修改某個(gè)人的信息voidChange(TreeNode*Tree){charname[20];TreeNode*NewNode;printf(" 請(qǐng)輸入你要修改的人的信息 :\n");scanf("%s",name);NewNode=SearchTree(Tree,name,20);if(NewNode==NULL){printf(" 該家譜圖中沒有 %s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤 \n",name);return;}else{SubMenue1(NewNode);}}文案大全實(shí)用標(biāo)準(zhǔn)輸出副菜單voidSubMenue1(TreeNode*Tree){charc;intflag,i;charname[20];charParent[2][20];TreeNode*NewNode;getchar();while(1){system("cls");printf(" 請(qǐng)選擇你的操作 \n");printf("A: 修改個(gè)人的信息 \n");printf("B: 修改父母的信息 \n");printf("C: 修改兄弟姐妹的信息 \n");printf("D: 修改子女的信息 \n");printf("E: 修改配偶的信息 \n");printf("F: 退出\n");c=getchar();switch(c){文案大全實(shí)用標(biāo)準(zhǔn)case'A':printf(" 請(qǐng)輸入修改的姓名 :如果不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n");scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Name,name);printf(" 是否要修改性別 :如果需要就輸入 '1'不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n");scanf("%d",&flag);if(flag==1){if(Tree->Kind=='F'||Tree->Kind=='f')Tree->Kind='M';elseTree->Kind='F';}printf(" 個(gè)人信息修改成功 \n");break;case'B':if(Tree->Parent==NULL) // 判斷是不是頭節(jié)點(diǎn){printf(" 是這個(gè)家譜圖里最頂端的人沒有父母信息 !\n",name);break;文案大全實(shí)用標(biāo)準(zhǔn)}if(MATEFLAG==1) // 判斷是不是入贅或加入此間的{if(Tree->Kind=='F'||Tree->Kind=='f'){printf(" 她是嫁入此間的所以父母信息不在家譜內(nèi)包括 \n");}else{printf(" 他是入贅此間的所以父母信息不在家譜內(nèi)包括 \n");}break;}if(Tree->Parent->Kind=='F'||Tree->Parent->Kind=='f'){strcpy(Parent[0]," 母親");strcpy(Parent[1]," 父親");}else{strcpy(Parent[0]," 父親");文案大全實(shí)用標(biāo)準(zhǔn)strcpy(Parent[1]," 母親");}printf(" 請(qǐng)輸入%s要修改的姓名:如果不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n",Parent[0]);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);printf(" 請(qǐng)輸入%s要修改的姓名:如果不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n",Parent[1]);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->NextNode[0]->Name,name);printf(" 父母的信息修改成功 \n");break;case'C':NewNode=Tree->Parent;if(NewNode==NULL) // 判斷是不是頭節(jié)點(diǎn){printf(" 是這個(gè)家譜圖里最頂端的人沒有兄弟姐妹信息 !\n",name);break;}文案大全實(shí)用標(biāo)準(zhǔn)if(MATEFLAG==1) // 判斷是不是入贅或嫁入這家的{if(Tree->Kind=='F'||Tree->Kind=='f'){printf(" 她是嫁入此間的所以兄弟姐妹信息不在家譜內(nèi)包括 \n");}else{printf(" 他是入贅此間的所以兄弟姐妹信息不在家譜內(nèi)包括 \n");}break;}if(NewNode->Num==1){printf(" 沒有兄弟姐妹\n");break;}else{for(i=1;i<=NewNode->Num;i++){文案大全實(shí)用標(biāo)準(zhǔn)if(NewNode->NextNode[i]->Name!=Tree->Name){printf(" 請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n",NewNode->NextNode[i]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(NewNode->NextNode[i]->Name,name);printf(" 是否要修改性別 :如果需要就輸入 '1'不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n");scanf("%d",&flag);if(flag==1){if(NewNode->NextNode[i]->Kind=='G'||NewNode->NextNode[i]->Kind=='g')NewNode->NextNode[i]->Kind='B';elseNewNode->NextNode[i]->Kind='G';}}}}printf(" 兄弟姐妹的信息修改成功 \n");break;case'D':文案大全實(shí)用標(biāo)準(zhǔn)if(Tree->Num==0){printf(" 至今還沒有子女 \n");break;}if(Tree->Parent!=NULL)if(strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0) //如果他是入贅或者是嫁入的就需用配偶節(jié)點(diǎn)完成修改{Tree=Tree->Parent;}for(i=1;i<=Tree->Num;i++){printf(" 請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n",Tree->NextNode[i]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode[i]->Name,name);printf("是否要修改性別:如果需要就輸入'1'不需要修改就輸入'0'然后按Enter鍵繼續(xù)\n");scanf("%d",&flag);if(flag==1)文案大全實(shí)用標(biāo)準(zhǔn){if(Tree->NextNode[i]->Kind=='F'||Tree->NextNode[i]->Kind=='f')Tree->NextNode[i]->Kind='M';elseTree->NextNode[i]->Kind='F';}}printf(" 子女的信息修改成功 \n");break;case'E':if(Tree->Parent!=NULL){if(Tree->NextNode[0]==NULL&&strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)!=0){printf(" 至今還沒有配偶 \n");break;}if(strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0){printf("\n\n\t 請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n\t",Tree->Parent->Name);文案大全實(shí)用標(biāo)準(zhǔn)scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);}else{printf("\n\n\t 請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n\t",Tree->NextNode[0]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode[0]->Name,name);}}else{if(Tree->NextNode[0]==NULL)printf(" 至今還沒有配偶 \n");else{printf("\n\n\t 請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入 '0'然后按Enter鍵繼續(xù)\n\t",Tree->NextNode[0]->Name);scanf("%s",name);文案大全實(shí)用標(biāo)準(zhǔn)if(strcmp(name,"0")!=0)strcpy(Tree->NextNode[0]->Name,name);}}printf(" 配偶的信息修改成功 \n");break;case'F':printf(" 本項(xiàng)服務(wù)到此結(jié)束 \n");break;case'\n':break;default:printf(" 對(duì)不起!你的選擇錯(cuò)誤 \n");break;}if(c=='F'||c=='f')break;printf(" 請(qǐng)按Enter鍵繼續(xù)操作\n");getchar();getchar();}}文案大全實(shí)用標(biāo)準(zhǔn)輸出主菜單voidMainMenu(TreeNode*Tree){charc;// 用于接受用戶輸入的選項(xiàng)charname[20];while(1){system("cls");// 清屏printf(" ★★★★★★★★★★★★★歡迎進(jìn)入家譜管理系統(tǒng)★★★★★★★★★★★\n\n\n");printf("◆◆菜單◆◆\n\n");printf("●輸入家譜信息---------------------1\n");printf("●查找家族成員---------------------2\n");printf("●添加家族成員---------------------3\n");printf("●輸出家譜信息---------------------4\n");printf("●修改成員信息---------------------5\n");printf("●退出-----------------------------6\n");printf("\n\n★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");printf(" 請(qǐng)選擇相應(yīng)的功能: \n");c=getchar();switch(c)文案大全實(shí)用標(biāo)準(zhǔn){case'1':TreeNode*NewNode;NewNode=(TreeNode*)malloc(sizeof(TreeNode));//建立新節(jié)點(diǎn)printf("請(qǐng)輸入姓名:");scanf("%s",Tree->Name);//給節(jié)點(diǎn)姓名賦值printf("請(qǐng)輸入性別(女F,男M):");getchar();//給性別賦值scanf("%c",&(Tree->Kind));//Tree->Parent=NewNode;Tree->Parent=NULL;CreatTree(Tree);printf("家譜圖已經(jīng)建立成功\n");printf("請(qǐng)按Enter鍵繼續(xù)操作\n");getchar();break;case'2':if(strcmp(Tree->Name,"0")==0){printf("家譜圖還未建立請(qǐng)先建立\n");getchar();break;}printf("請(qǐng)輸入你要查找的人的姓名:\n");scanf("%s",name);OutPutMessage(SearchTree(Tree,name,20),name,20);getchar();break;case'3':if(strcmp(Tree->Name,"0")==0){printf("家譜圖還未建立請(qǐng)先建立\n");getchar();break;}AddNew(Tree);getchar();break;case'4':if(strcmp(Tree->Name,"0")==0){printf("家譜圖還未建立請(qǐng)先建立\n");getchar();break;}printf(" 整個(gè)家譜的主要信息如下 :\n");OutPutAll(Tree);getchar();break;case'5':if(strcmp(Tree->Name,"0")==0){printf(" 家譜圖還未建立請(qǐng)先建立 \n");getchar();文案大全實(shí)用標(biāo)準(zhǔn)break;}Change(Tree);getchar();break;case'6':printf(" 本程序結(jié)束,歡迎下次使用。 \n");exit(0);break;case'\n':break;default:printf(" 您輸入錯(cuò)誤,請(qǐng)重新輸入。\n");getchar();break;}getchar();}}創(chuàng)建樹voidCreatTree(TreeNode*Node){文案大全實(shí)用標(biāo)準(zhǔn)inti;TreeNode*NewNode;NewNode=(TreeNode*)malloc(sizeof(TreeNode));Node->NextNode[0]=NewNode;//Node->NextNode[0]=NULL;printf(" 請(qǐng)輸入%s的子女的數(shù)目:\n",Node->Name);scanf("%d",&(Node->Num));printf(" 請(qǐng)輸入%s的配偶的姓名:\n",Node->Name);scanf("%s",NewNode->Name);if((Node->Num)==0&&strcmp(NewNode->Name,"0")==0)return;if(Node->Kind=='F'||Node->Kind=='f')// 自動(dòng)填寫其配偶的性別NewNode->Kind='M';elseNewNode->Kind='F';NewNode->Num=0;NewNode->NextNode[0]=NULL;Node->NextNode[0]=NewNode;Node->NextNode[0]->Parent=Node;for(i=1;i<=Node->Num;i++){NewNode=(TreeNode*)malloc(sizeof(TreeNode));文案大全實(shí)用標(biāo)準(zhǔn)printf(" 請(qǐng)輸入%s的第%d子女的名字\n",Node->Name,i);scanf("%s",NewNode->Name);printf(" 請(qǐng)輸入%s的第%d子女的性別女 F男M:\n",Node->Name,i);getchar();scanf("%c",&NewNode->Kind);NewNode->Num=0;NewNode->Parent=Node;Node->NextNode[i]=NewNode;CreatTree(Node->NextNode[i]);}}遍歷并輸出樹中的內(nèi)容voidOutPutAll(TreeNode*Tree){inti,flag=0;//flag 記錄節(jié)點(diǎn)的性別printf("%s 性別:",Tree->Name);if(Tree->Kind=='F'||Tree->Kind=='f'){flag=1;printf(" 女\n");}else文案大全實(shí)用標(biāo)準(zhǔn)printf(" 男\(zhòng)n");if(!(Tree->NextNode[0]))printf(" 至今沒有配偶和子女 \n");return;}if(flag==1)//flag=1 表示性別為女printf(" 丈夫的姓名:%s\n",Tree->NextNode[0]->Name);elseprintf(" 妻子的姓名:%s\n",Tree->NextNode[0]->Name);for(i=1;i<=Tree->Num;i++){printf(" 第%d個(gè)子女的姓名別:",i,Tree->NextNode[i]->Name,Tree->NextNode[i]->Kind);if(Tree->NextNode[i]->Kind=='F'||Tree->NextNode[i]->Kind=='f')printf(" 女\n");elseprintf(" 男\(zhòng)n");}for(i=1;i<=Tree->Num;i++){OutPutAll(Tree->NextNode[i]);}文案大全實(shí)用標(biāo)準(zhǔn)}在樹中經(jīng)過(guò)遍歷查找某個(gè)人TreeNode*SearchTree(TreeNode*Tree,charname[],intlength){inti;TreeNode*NewNode;if(strcmp(Tree->Name,name)==0){if(length==0)MATEFLAG=1;elseMATEFLAG=0;returnTree;}if(Tree->NextNode[0]==NULL)returnNULL;for(i=0;i<=Tree->Num;i++):%s 性if(i==0)NewNode=SearchTree(Tree->NextNode[i],name,0);elseNewNode=SearchTree(Tree->NextNode[i],name,20);if(NewNode!=NULL)文案大全實(shí)用標(biāo)準(zhǔn)returnNewNode;}returnNULL;}輸出已經(jīng)查找到的人的信息voidOutPutMessage(TreeNode*Tree,charname[],intlength){intflag=0,i;//flag 標(biāo)記性別TreeNode*NewNode;if(Tree==NULL){printf(" 該家譜圖中沒有 %s這個(gè)人\n",name);return;}printf(" 您找的人信息如下 :\n");printf("%s 性別:",name);if(Tree->Kind=='F'||Tree->Kind=='f'){flag=1; // 標(biāo)記的性別 printf(" 女\n");}elseprintf(" 男\(zhòng)n");文案大全實(shí)用標(biāo)準(zhǔn)NewNode=Tree->Parent;//父母信息放到NewNode里if(MATEFLAG==1)//此人為這家人的伴侶{if(flag==1)//性別為女{printf("她是嫁入這家的,所以父母信息不在家譜內(nèi)包括\n");printf("丈夫的姓名:%s\n",NewNode->Name);}else//性別為男{printf("他是入贅這家的所以父母信息不在家譜內(nèi)包括\n");printf("妻子的姓名:%s\n",NewNode->Name);}if((NewNode->Num)>0)//判斷他(她)是否有孩子{printf("孩子的信息如下:\n");//輸出他(她)的孩子的信息for(i=1;i<=NewNode->Num;i++){printf("%s 性別:",NewNode->NextNode[i]->Name);if(NewNode->NextNode[i]->Kind=='F'||NewNode->Kind=='f') printf(" 女

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論