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

下載本文檔

版權(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),通過此項訓(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>int MATEFLAG=0; /是否入贅或嫁入這家的,1表示為是,0表示否typed

2、ef struct TreeNode/樹節(jié)點(diǎn)定義int Num; /保存此人兒女個數(shù)char Name20; /保存此人姓名char Kind; /保存此人性別,男M,女Fstruct TreeNode * NextNode20; /保存此人的兒女,NextNode0里存放配偶的地址struct TreeNode * Parent; /保存此節(jié)點(diǎn)的父節(jié)點(diǎn)TreeNode;void CreatTree(TreeNode *Tree);/創(chuàng)建樹void OutPutAll(TreeNode *Tree);/輸出樹TreeNode * SearchTree(TreeNode *Tree,char n

3、ame,int length);void MainMenu(TreeNode *Tree);void SubMenue1(TreeNode * Tree);void SubMenue2(TreeNode *Tree);void Change(TreeNode * Tree);void AddNew(TreeNode * Tree);void OutPutMessage(TreeNode * Tree,char name,int length);/主函數(shù)void main()TreeNode *Tree;/產(chǎn)生根節(jié)點(diǎn)Tree=(TreeNode *)malloc(sizeof(TreeNode)

4、;Tree->Parent =NULL;strcpy(Tree->Name,"0");MainMenu(Tree);/顯示主菜單/添加新的成員void AddNew(TreeNode * Tree)SubMenue2(Tree);/添加新成員界面/顯示添加家庭信息的界面void SubMenue2(TreeNode *Tree)char c;int num;char name20;TreeNode * NewNode;getchar();while(1)system("cls");printf("請選擇你的操作n");pr

5、intf("A:添加某個人的子女的信息n");printf("B:添加某個人配偶的信息n");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("該家譜圖中沒

6、有%s這個人的信息請確認(rèn)是否輸入錯誤n",name);break;if(Tree->Parent=NULL&&Tree->NextNode0=NULL|Tree->Parent!=NULL&&Tree->Name!=Tree->Parent->NextNode0->Name)printf("至今還沒有配偶請先添加配偶n",Tree->Name);break;if(Tree->Parent=NULL&&(Tree->Num>20|Tree->Num

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

8、 *)malloc(sizeof(TreeNode);NewNode->NextNode0=NULL;NewNode->Num=0;NewNode->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

9、(Tree->Parent!=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode0->Name)=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(

10、"%s",NewNode->Name);printf("請輸入添加人員性別女F男M:n");scanf("%1s",&NewNode->Kind);NewNode->Parent=Tree;Tree->NextNode0=NewNode;break;case 'C':printf("本項服務(wù)到此結(jié)束n");break;case 'n':break;default:printf("對不起!你的選擇錯誤n");break;if (c=&

11、#39;C'|c='c')break;printf("請按Enter鍵繼續(xù)操作n");getchar();getchar();/修改某個人的信息void Change(TreeNode * Tree)char name20;TreeNode * NewNode;printf("請輸入你要修改的人的信息:n");scanf("%s",name);NewNode=SearchTree(Tree,name,20);if(NewNode=NULL)printf("該家譜圖中沒有%s這個人的信息請確認(rèn)是否輸入錯

12、誤n",name);return;elseSubMenue1(NewNode);/輸出副菜單void SubMenue1(TreeNode * Tree)char c;int flag,i;char name20;char Parent220;TreeNode * NewNode;getchar();while(1)system("cls");printf("請選擇你的操作n");printf("A:修改個人的信息n");printf("B:修改父母的信息n");printf("C:修改兄弟姐妹

13、的信息n");printf("D:修改子女的信息n");printf("E:修改配偶的信息n");printf("F:退出n");c=getchar();switch(c)case 'A':printf("請輸入修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)n");scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Name,name);printf("

14、;是否要修改性別:如果需要就輸入'1'不需要修改就輸入'0'然后按Enter鍵繼續(xù)n");scanf("%d",&flag);if (flag=1)if(Tree->Kind='F'|Tree->Kind='f')Tree->Kind='M'else Tree->Kind='F'printf("個人信息修改成功n");break;case 'B':if(Tree->Parent=NULL) /判斷

15、是不是頭節(jié)點(diǎn)printf("是這個家譜圖里最頂端的人沒有父母信息!n",name);break;if (MATEFLAG=1) /判斷是不是入贅或加入此間的if(Tree->Kind='F'|Tree->Kind='f')printf("她是嫁入此間的所以父母信息不在家譜內(nèi)包括n");elseprintf("他是入贅此間的所以父母信息不在家譜內(nèi)包括n");break;if(Tree->Parent->Kind='F'|Tree->Parent->Kin

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

17、gt;Name,name);printf("請輸入%s要修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)n",Parent1);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->NextNode0->Name,name);printf("父母的信息修改成功n");break;case 'C':NewNode=Tree->Parent;if(NewNode=NULL) /判斷是不

18、是頭節(jié)點(diǎn)printf("是這個家譜圖里最頂端的人沒有兄弟姐妹信息!n",name);break;if (MATEFLAG=1) /判斷是不是入贅或嫁入這家的if(Tree->Kind='F'|Tree->Kind='f')printf("她是嫁入此間的所以兄弟姐妹信息不在家譜內(nèi)包括n");elseprintf("他是入贅此間的所以兄弟姐妹信息不在家譜內(nèi)包括n");break;if(NewNode->Num=1)printf("沒有兄弟姐妹n");break;else

19、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);if(strcmp(name,"0")!=0)strcpy(NewNode->NextNodei->Name,name);printf("是否要修改

20、性別:如果需要就輸入'1'不需要修改就輸入'0'然后按Enter鍵繼續(xù)n");scanf("%d",&flag);if (flag=1)if(NewNode->NextNodei->Kind='G'|NewNode->NextNodei->Kind='g')NewNode->NextNodei->Kind='B'else NewNode->NextNodei->Kind='G'printf("兄弟姐妹的信

21、息修改成功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->Parent;for(i=1;i<=Tree->Num;i+)printf("請輸入%s修改的姓名:如果不需要修改就輸入'0

22、'然后按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");scanf("%d",&flag);if (flag=1)if(Tree->NextNodei->

23、;Kind='F'|Tree->NextNodei->Kind='f')Tree->NextNodei->Kind='M'else Tree->NextNodei->Kind='F'printf("子女的信息修改成功n");break;case 'E':if(Tree->Parent!=NULL)if(Tree->NextNode0=NULL&&strcmp(Tree->Name,Tree->Parent->Nex

24、tNode0->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);if(strcmp(name,"0")!=0)strcpy(Tree->Parent-&

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

26、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("本項服務(wù)到此結(jié)束n");break;case 'n':break;default:p

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

28、uot; 輸入家譜信息-1n");printf(" 查找家族成員-2n");printf(" 添加家族成員-3n");printf(" 輸出家譜信息-4n");printf(" 修改成員信息-5n");printf(" 退出-6n");printf("nnn");printf("請選擇相應(yīng)的功能:n");c=getchar();switch(c)case '1': TreeNode * NewNode; NewNode=(Tree

29、Node *)malloc(sizeof(TreeNode);/建立新節(jié)點(diǎn) printf("請輸入姓名:"); scanf("%s",Tree->Name);/給節(jié)點(diǎn)姓名賦值 printf("請輸入性別(女F,男M):"); getchar();/給性別賦值 scanf("%c",&(Tree->Kind); / Tree->Parent=NewNode; Tree->Parent=NULL; CreatTree(Tree); printf("家譜圖已經(jīng)建立成功n"

30、;); printf("請按Enter鍵繼續(xù)操作n"); getchar(); break; case '2': if(strcmp(Tree->Name,"0")=0) printf("家譜圖還未建立請先建立n"); getchar(); break; printf("請輸入你要查找的人的姓名:n"); scanf("%s",name); OutPutMessage(SearchTree(Tree,name,20),name,20); getchar(); break;

31、case '3': if(strcmp(Tree->Name,"0")=0) printf("家譜圖還未建立請先建立n"); getchar(); break; AddNew(Tree); getchar(); break; case '4': if(strcmp(Tree->Name,"0")=0) printf("家譜圖還未建立請先建立n"); getchar(); break; printf("整個家譜的主要信息如下:n");OutPutAll(

32、Tree);getchar();break;case '5':if(strcmp(Tree->Name,"0")=0)printf("家譜圖還未建立請先建立n");getchar();break;Change(Tree);getchar();break;case '6':printf("本程序結(jié)束,歡迎下次使用。n");exit(0);break;case 'n':break;default:printf("您輸入錯誤,請重新輸入。n");getchar();b

33、reak;getchar();/創(chuàng)建樹void CreatTree(TreeNode *Node)int i;TreeNode *NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode);Node->NextNode0=NewNode;/ Node->NextNode0=NULL;printf("請輸入%s的子女的數(shù)目:n",Node->Name);scanf("%d",&(Node->Num);printf("請輸入%s的配偶的姓名:n",Node->

34、;Name);scanf("%s",NewNode->Name);if(Node->Num)=0&&strcmp(NewNode->Name,"0")=0)return ;if (Node->Kind='F'|Node->Kind='f')/自動填寫其配偶的性別NewNode->Kind='M'elseNewNode->Kind='F'NewNode->Num=0;NewNode->NextNode0=NULL;Node-

35、>NextNode0=NewNode;Node->NextNode0->Parent=Node;for(i=1;i<=Node->Num;i+)NewNode=(TreeNode *)malloc(sizeof(TreeNode);printf("請輸入%s的第%d子女的名字n",Node->Name,i);scanf("%s",NewNode->Name);printf("請輸入%s的第%d子女的性別女F男M:n",Node->Name,i);getchar();scanf("

36、;%c",&NewNode->Kind);NewNode->Num=0;NewNode->Parent=Node;Node->NextNodei=NewNode;CreatTree(Node->NextNodei);/遍歷并輸出樹中的內(nèi)容void OutPutAll(TreeNode *Tree)int i, flag=0;/flag記錄節(jié)點(diǎn)的性別printf("%s 性別:",Tree->Name);if (Tree->Kind='F'|Tree->Kind='f')flag

37、=1;printf("女n");elseprintf("男n");if (!(Tree->NextNode0)printf("至今沒有配偶和子女n");return;if(flag=1)/flag=1 表示性別為女printf("丈夫的姓名:%sn",Tree->NextNode0->Name);elseprintf("妻子的姓名:%sn",Tree->NextNode0->Name);for(i=1;i<=Tree->Num;i+)printf(&qu

38、ot;第%d個子女的姓名別:",i,Tree->NextNodei->Name,Tree->NextNodei->Kind);if (Tree->NextNodei->Kind='F'|Tree->NextNodei->Kind='f')printf("女n");elseprintf("男n");for(i=1;i<=Tree->Num;i+)OutPutAll(Tree->NextNodei);/在樹中經(jīng)過遍歷查找某個人TreeNode * Se

39、archTree(TreeNode *Tree,char name,int length)int i;TreeNode *NewNode;if(strcmp(Tree->Name,name)=0)if(length=0)MATEFLAG=1;elseMATEFLAG=0;return Tree;if(Tree->NextNode0=NULL)return NULL;for(i=0;i<=Tree->Num;i+) :%s 性if (i=0)NewNode=SearchTree(Tree->NextNodei,name,0);elseNewNode=SearchTr

40、ee(Tree->NextNodei,name,20);if (NewNode!=NULL)return NewNode;return NULL;/輸出已經(jīng)查找到的人的信息void OutPutMessage(TreeNode * Tree,char name,int length)int flag=0,i;/flag標(biāo)記性別TreeNode *NewNode;if(Tree=NULL)printf("該家譜圖中沒有%s這個人n",name);return;printf("您找的人信息如下:n");printf("%s 性別:"

41、,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)/性別為女printf("她是嫁入這家的,所以父母信息不在家譜內(nèi)包括n");printf("丈夫的姓名:%sn",NewNode->Name);els

42、e /性別為男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("女n")

溫馨提示

  • 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

提交評論