家譜管理系統(tǒng)_第1頁
家譜管理系統(tǒng)_第2頁
家譜管理系統(tǒng)_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、家譜管理系統(tǒng)C語言(數(shù)據(jù)結(jié)構(gòu))目的和要求:樹形結(jié)構(gòu)是一種非常重要的非線性結(jié)構(gòu),它用于描述數(shù)據(jù)元素之間的層次關(guān)系,人類家譜是樹形結(jié)構(gòu)的典型體現(xiàn),通過此項(xiàng)訓(xùn)練讓學(xué)生掌握樹形結(jié)構(gòu)的知識;使學(xué)生重點(diǎn)掌握樹與二叉樹的轉(zhuǎn)換,二叉樹的存儲和遍歷,和二叉樹相關(guān)的一些運(yùn)算;要求完成家譜信息的錄入和保存,任意成員的查找及某一成員祖先、子孫、兄弟、堂兄弟的查找。排答疑和輔導(dǎo)。完整代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>intMATEFLAG=0;/是否入贅或嫁入這家的,1表示為是,0表示否typedefstr

2、uctTreeNode/樹節(jié)點(diǎn)定義/保存此人兒女個數(shù)/保存此人姓名保存此人性別,男M,女F(intNum;,charName20;charKind;/保存此人的兒女,NextNode0里存放配偶的地址保存此節(jié)點(diǎn)的父節(jié)點(diǎn)創(chuàng)建樹輸出樹structTreeNode*NextNode20;/structTreeNode*Parent;/TreeNode;voidCreatTree(TreeNode*Tree);/voidOutPutAll(TreeNode*Tree);/TreeNode*SearchTree(TreeNode*Tree,charname,intlength);voidMainMenu

3、(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”);

4、MainMenu(Tree);/顯示主菜單/添加新的成員voidAddNew(TreeNode*Tree)(SubMenue2(Tree);/添加新成員界面/顯示添加家庭信息的界面voidSubMenue2(TreeNode*Tree)(charc;intnum;charname20;TreeNode*NewNode;getchar();while(1)(system("cls");printf("請選擇你的操作n");printf("A:添加某個人的子女的信息n");printf("B:添加某個人配偶的信息n")

5、;printf("C:退出n");printf("請選擇相應(yīng)功能:n");c=getchar();switch(c)(case'A':/添加子女信息printf("請輸入那個人的名字:n");scanf("%s",name);Tree=SearchTree(Tree,name,20);/在家譜里查找這個人if(Tree=NULL)(printf(-該家譜圖中沒有%s這個人的信息請確認(rèn)是否輸入錯誤n",name);break;if(Tree->Parent=NULL&&

6、Tree->NextNodeO=NULL|Tree->Parent!=NULL&&Tree->Name!=Tree->Parent->NextNodeO->Name)(printf("至今還沒有配偶請先添加配偶n",Tree->Name);break;if(Tree->Parent=NULL&&(Tree->Num>20|Tree->Num<0)Tree->Num=0;if(MATEFLAG=1)Tree=Tree->Parent;NewNode=(TreeN

7、ode*)malloc(sizeof(TreeNode);printf(-請輸入添加人員姓名:n");scanf("%s",NewNode->Name);printf(-請輸入添加人員性別女F男M:n");scanf("%1s",&NewNode->Kind);num=Tree->Num;NewNode->NextNode0=(TreeNode*)malloc(sizeof(TreeNode);NewNode->NextNode0=NULL;NewNode->Num=0;NewNode-&g

8、t;Parent=Tree;Tree->NextNodenum+1=NewNode;Tree->Num=Tree->Num+1;printf(-子女的信息添加成功n");break;case'B':printf("請輸入那個人的名字:n");scanf("%s",name);Tree=SearchTree(Tree,name,20);if(Tree->Parent!=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode0->N

9、ame)=0|Tree->NextNode0!=NULL)(printf("已經(jīng)有了配偶n");break;if(Tree=NULL)(printf("該家譜圖中沒有%s這個人的信息請確認(rèn)n",name);break;NewNode=(TreeNode*)malloc(sizeof(TreeNode);printf(-請輸入添加人員姓名:n");scanf("%s",NewNode->Name);printf(-請輸入添加人員性別女F男M:n");scanf("%1s",&N

10、ewNode->Kind);NewNode->Parent=Tree;Tree->NextNode0=NewNode;break;case'C':printf("本項(xiàng)服務(wù)到此結(jié)束n");break;case'n':break;default:printf("對不起!你的選擇錯誤n");break;if(c='C'|c='c')break;printf("請按Enter鍵繼續(xù)操作n");getchar();getchar();/修改某個人的信息voidCh

11、ange(TreeNode*Tree)(charname20;TreeNode*NewNode;printf("請輸入你要修改的人的彳息:n");scanf("%s”,name);NewNode=SearchTree(Tree,name,20);if(NewNode=NULL)(printf(-該家譜圖中沒有%s這個人的信息請確認(rèn)是否輸入錯誤n",name);return;else(SubMenuel(NewNode);/輸出副菜單voidSubMenue1(TreeNode*Tree)(charc;intflag,i;charname20;charPa

12、rent220;TreeNode*NewNode;getchar();while(1)(system("cls");printf("請選擇你的操作n");printf("A:修改個人的信息n");printf("B:修改父母的信息n");printf("C:修改兄弟姐妹的彳息n");printf("D:修改子女的信息n");printf("E:修改配偶的信息n");printf("F:退出n");c=getchar();switch(c

13、)(case'A':printf(-請輸入修改的姓名:如果不需要修改就輸入'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

14、9;|Tree->Kind='f)Tree->Kind='M'elseTree->Kind='F'printf(-個人信息修改成功n");break;case'B':if(Tree->Parent=NULL)/判斷是不是頭節(jié)點(diǎn)(printf("是這個家譜圖里最頂端的人沒有父母信息!n",name);break;if(MATEFLAG=1)/判斷是不是入贅或加入此間的(if(Tree->Kind='F'|Tree->Kind='f)(printf(&q

15、uot;她是嫁入此間的所以父母信息不在家譜內(nèi)包括n");else(printf(-他是入贅此間的所以父母信息不在家譜內(nèi)包括n");break;if(Tree->Parent->Kind='F'|Tree->Parent->Kind='f)(strcpy(Parent0,”母親");strcpy(Parent1,”父親");else(strcpy(Parent0,"父親");strcpy(Parent1,”母親");printf(-請輸入%s要修改的姓名:如果不需要修改就輸入&#

16、39;0'然后按Enter鍵繼續(xù)n",Parent0);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);printf(-請輸入%s要修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)n",Parent1);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->NextNode0

17、->Name,name);printf(-父母的信息修改成功n");break;case'C':NewNode=Tree->Parent;if(NewNode=NULL)/判斷是不是頭節(jié)點(diǎn)(printf("是這個家譜圖里最頂端的人沒有兄弟姐妹信息!n",name);break;if(MATEFLAG=1)/判斷是不是入贅或嫁入這家的(if(Tree->Kind='F'|Tree->Kind='f)(printf("她是嫁入此間的所以兄弟姐妹信息不在家譜內(nèi)包括n");else(pri

18、ntf("他是入贅此間的所以兄弟姐妹信息不在家譜內(nèi)包括n");break;if(NewNode->Num=1)(printf(-沒有兄弟姐妹n");break;else(for(i=1;i<=NewNode->Num;i+)(if(NewNode->NextNodei->Name!=Tree->Name)(printf(-請輸入s修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)n",NewNode->NextNodei->Name);scanf("%s”,name);i

19、f(strcmp(name,"0")!=0)strcpy(NewNode->NextNodei->Name,name);printf(-是否要修改性別:如果需要就輸入'1'不需要修改就輸入'0'然后按Enter鍵繼續(xù)n");scanf("%d",&flag);if(flag=1)(if(NewNode->NextNodei->Kind='G'|NewNode->NextNodei->Kind='g')NewNode->NextNod

20、ei->Kind='B'elseNewNode->NextNodei->Kind='G'printf(-兄弟姐妹的信息修改成功n");break;case'D':if(Tree->Num=0)(printf("至今還沒有子女n");break;if(Tree->Parent!=NULL)if(strcmp(Tree->Name,Tree->Parent->NextNode0->Name)=0)/如果他是入贅或者是嫁入的就需用配偶節(jié)點(diǎn)完成修改(Tree=Tree-&

21、gt;Parent;for(i=1;i<=Tree->Num;i+)(printf(-請輸入s修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)n”,Tree->NextNodei->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNodei->Name,name);printf("是否要修改性別:如果需要就輸入'1'不需要修改就輸入'0'然后按Enter鍵繼續(xù)n"

22、);scanf("%d",&flag);if(flag=1)(if(Tree->NextNodei->Kind='F'|Tree->NextNodei->Kind='f)Tree->NextNodei->Kind='M'elseTree->NextNodei->Kind='F'printf("子女的信息修改成功n");break;case'E':if(Tree->Parent!=NULL)(if(Tree->Next

23、Node0=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode0->Name)!=0)(printf("至今還沒有配偶n");break;if(strcmp(Tree->Name,Tree->Parent->NextNode0->Name)=0)(printf(-nnt請輸入s修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)nt",Tree->Parent->Name);scanf("%s",name

24、);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);else(printf(-nnt請輸入s修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)nt",Tree->NextNode0->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode0->Name,name);else(if(Tree->NextNode0=NUL

25、L)printf("至今還沒有配偶n");else(printf(-nnt請輸入s修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)nt",Tree->NextNode0->Name);scanf("%s",name);if(strcmp(name,"0”)!=0)strcpy(Tree->NextNode0->Name,name);printf(-配偶的信息修改成功n");break;case'F':printf("本項(xiàng)服務(wù)到此結(jié)束n")

26、;break;case'n':break;default:printf("對不起!你的選擇錯誤n");break;if(c='F'|c='f)break;printf("請按Enter鍵繼續(xù)操作n");getchar();getchar();/輸出主菜單voidMainMenu(TreeNode*Tree)(charc;/用于接受用戶輸入的選項(xiàng)charname20;while(1)(system("cls");/清屏printf("歡迎進(jìn)入家譜管理系統(tǒng)nnn");printf

27、("nn");菜單printf(-輸入家譜值思printf(-查拱家族成界printf(->蛆家麴成界printf(-輸嶺譜佰思printf(-修改成員信息5n");printf("退-6n");nn");printf("請選擇相應(yīng)的功能:n");c=getchar();switch(c)*NewNode;NewNode=(TreeNode建立新節(jié)點(diǎn)printf("請輸入姓名:");scanf("%s",Tree-printf(-請輸入性別(女F,男M):")

28、;getchar();/給性別賦值/Tree->Parent=NewNode;Tree->Parent=NULL;家譜圖已經(jīng)建立成功n");printf("請按Enter鍵繼續(xù)操作n");家譜圖還未建立:n");case'1':TreeNode*)malloc(sizeof(TreeNode);/>Name);/給節(jié)點(diǎn)姓名賦值scanf("%c",&(Tree->Kind);CreatTree(Tree);printf("getchar();break;case'2&#

29、39;:if(strcmp(Tree->Name,"0")=0)(printf("請先建立n");getchar();break;printf("請輸入你要查找的人的姓名scanf("%s",name);OutPutMessage(SearchTree(Tree,name,20),name,20);請先建立n");getchar();if(strcmp(Tree->Name,"0")=0)break;printf(-整個家譜的主要信息如下OutPutAll(Tree);getchar

30、();break;case'5':getchar();break;case'3':if(strcmp(Tree->Name,"0")=0)(printf("家譜圖還未建立:n");break;AddNew(Tree);getchar();break;case'4':(printf("家譜圖還未建立請先建立n");getchar();if(strcmp(Tree->Name,"0”)=0)(n");printf("家譜圖還未建立請先建立getcha

31、r();break;Change(Tree);getchar();break;case'6':printf("本程序結(jié)束,歡迎下次使用。n");exit(0);break;case'n':break;default:printf(-您輸入錯誤,請重新輸入。n");getchar();break;getchar();/創(chuàng)建樹voidCreatTree(TreeNode*Node)(inti;TreeNode*NewNode;NewNode=(TreeNode*)malloc(sizeof(TreeNode);Node->Next

32、Node0=NewNode;/Node->NextNode0=NULL;printf("請輸入s的子女的數(shù)目:n”,Node->Name);scanf("%d”,&(Node->Num);printf("請輸入s的配偶的姓名:n",Node->Name);scanf("%s",NewNode->Name);if(Node->Num)=0&&strcmp(NewNode->Name,"0")=0)return;if(Node->Kind='

33、;F'|Node->Kind='f)/自動填寫其配偶的性別NewNode->Kind='M'elseNewNode->Kind='F'NewNode->Num=0;NewNode->NextNode0=NULL;Node->NextNode0=NewNode;Node->NextNode0->Parent=Node;for(i=1;i<=Node->Num;i+)(NewNode=(TreeNode*)malloc(sizeof(TreeNode);printf("請輸入%s的

34、第%d子女的名字n",Node->Name,i);scanf("%s",NewNode->Name);printf("請輸入%s的第%d子女的性別女F男M:n",Node->Name,i);getchar();scanf("%c",&NewNode->Kind);NewNode->Num=0;NewNode->Parent=Node;Node->NextNodei=NewNode;CreatTree(Node->NextNodei);遍歷并輸出樹中的內(nèi)容voidOutP

35、utAll(TreeNode*Tree)(inti,flag=0;/flag記錄節(jié)點(diǎn)的性別printf("%s性別:",Tree->Name);if(Tree->Kind='F'|Tree->Kind='f)(flag=1;printf("女n");elseprintf("男n");if(!(Tree->NextNode0)printf("至今沒有配偶和子女n");return;if(flag=1)/flag=1表示性別為女printf("丈夫的姓名:sn”

36、,Tree->NextNode0->Name);elseprintf("妻子的姓名:sn”,Tree->NextNode0->Name);for(i=1;i<=Tree->Num;i+)(printf("第%d個子女的姓名別:",i,Tree->NextNodei->Name,Tree->NextNodei->Kind);if(Tree->NextNodei->Kind='F'|Tree->NextNodei->Kind='f)printf("女n

37、");elseprintf("男n");for(i=1;i<=Tree->Num;i+)(OutPutAll(Tree->NextNodei);/在樹中經(jīng)過遍歷查找某個人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->NextNode0=NULL)return

38、NULL;for(i=0;i<=Tree->Num;i+):%s性if(i=0)NewNode=SearchTree(Tree->NextNodei,name,0);elseNewNode=SearchTree(Tree->NextNodei,name,20);if(NewNode!=NULL)returnNewNode;returnNULL;/輸出已經(jīng)查找到的人的信息voidOutPutMessage(TreeNode*Tree,charname,intlength)(intflag=0,i;/flag標(biāo)記性別TreeNode*NewNode;if(Tree=NULL

39、)(printf("該家譜圖中沒有%s這個人n",name);return;printf("您找的人信息如下:n");printf("%s性別:”,name);if(Tree->Kind='F'|Tree->Kind='f)(flag=1;/標(biāo)記的性別printf("女n");elseprintf("男n");NewNode=Tree->Parent;/父母信息放到NewNode里if(MATEFLAG=1)/此人為這家人的伴侶(if(flag=1)/性別為女(p

40、rintf("她是嫁入這家的,所以父母信息不在家譜內(nèi)包括n");printf("丈夫的姓名:%sn",NewNode->Name);else/性別為男(printf("他是入贅這家的所以父母信息不在家譜內(nèi)包括n");printf("妻子的姓名:%sn",NewNode->Name);if(NewNode->Num)>0)/判斷他(她)是否有孩子printf("孩子的信息如下:n");/輸出他(她)的孩子的信息for(i=1;i<=NewNode->Num;i+)printf("%s性別:",NewNode->NextNodei->Name);if(NewNode->NextNodei->Kind='F'|NewNode->Kind='f)printf(&quo

溫馨提示

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

評論

0/150

提交評論