數(shù)據(jù)結構家譜管理系統(tǒng)_第1頁
數(shù)據(jù)結構家譜管理系統(tǒng)_第2頁
數(shù)據(jù)結構家譜管理系統(tǒng)_第3頁
數(shù)據(jù)結構家譜管理系統(tǒng)_第4頁
數(shù)據(jù)結構家譜管理系統(tǒng)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、/題目:家譜資料管理/要求:家譜用于記錄某家族歷代家族成員的情況與關系。現(xiàn)編制一個家譜資料管理軟件,/實現(xiàn)對一個家族所有的資料進行收集整理。支持對家譜的增加,刪除,更新,統(tǒng)計等。/#include <stdio.h>#include <stdlib.h>#include <string.h>int MATEFLAG=0;typedef struct TreeNodeint Num; /記錄這個人擁有幾個兒女char Name20; /記錄這個人的姓名char Kind; /標示節(jié)點的種類有女G男Bstruct TreeNode * NextNode20; /

2、記錄這個人的兒女struct TreeNode * Parent; /記錄這個節(jié)點的父節(jié)點TreeNode;void CreatTree(TreeNode *Tree);void OutPutAll(TreeNode *Tree);TreeNode * SearchTree(TreeNode *Tree,char name,int length);void MainMenue(TreeNode *Tree);void SubMenue1(TreeNode * Tree);void SubMenue2(TreeNode *Tree);void Change(TreeNode * Tree);vo

3、id AddNew(TreeNode * Tree);void OutPutMessage(TreeNode * Tree,char name,int length);/主函數(shù)void main()TreeNode *Tree;Tree=(TreeNode *)malloc(sizeof(TreeNode);Tree->Parent =NULL;strcpy(Tree->Name,"0"); MainMenue(Tree);/添加新的成員void AddNew(TreeNode * Tree)SubMenue2(Tree);/輸出副菜單void SubMenue

4、2(TreeNode *Tree) char c;int num;char name20;TreeNode * NewNode;getchar();while(1)system("cls");printf("t"); printf("nnt -*-請選擇你的操作-*- ");printf("nt-*-*-*-A:添加某個人的子女的信息-*-*-*-*- ");printf("nt-*-*-*-B:添加某個人配偶的信息-*-*-*-*-*- ");printf("nt-*-*-*-C:退

5、出-*-*-*-*-*-*-*-*-*-nt");c=getchar();switch(c)case 'A': printf("nnt請輸入那個人的名字:nt");scanf("%s",name);Tree=SearchTree(Tree,name,20);if(Tree=NULL)printf("nnt*該家譜圖中沒有%s這個人的信息請確認是否輸入錯誤*n",name);break;if(Tree->Parent=NULL&&Tree->NextNode0=NULL|Tree-&

6、gt;Parent!=NULL&&Tree->Name!=Tree->Parent->NextNode0->Name)printf("nnt%s至今還沒有配偶請先添加配偶",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(TreeNo

7、de);printf("nnt請輸入添加人員姓名:nt");scanf("%s",NewNode->Name);printf("nnt請輸入添加人員性別女G男B:nt");scanf("%1s",&NewNode->Kind);num=Tree->Num;NewNode->NextNode0=(TreeNode *)malloc(sizeof(TreeNode);NewNode->NextNode0=NULL;NewNode->Num=0;NewNode->Pare

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

9、ode0->Name)=0|Tree->NextNode0!=NULL)printf("nnt已經有了配偶");break;if(Tree=NULL)printf("nnt*該家譜圖中沒有%s這個人的信息請確認是否輸入錯誤*n",name);break;NewNode=(TreeNode *)malloc(sizeof(TreeNode);printf("nnt請輸入添加人員姓名:nt");scanf("%s",NewNode->Name);printf("nnt請輸入添加人員性別女G男

10、B:nt");scanf("%1s",&NewNode->Kind);NewNode->Parent=Tree;Tree->NextNode0=NewNode;break;case 'C': printf("nnt-本項服務到此結束-");break; case 'n': break;default: printf("nnt-對不起!你的選擇不在服務范圍之內!- ");printf("nt-請您再次選擇所需的服務項!- ");printf(&quo

11、t;nt-謝謝合作!-nt");break;if (c='C'|c='c') /?break; printf("nnt-請按Enter鍵繼續(xù)操作-");getchar();getchar();/修改某個人的信息void Change(TreeNode * Tree) char name20;TreeNode * NewNode;printf("nt請輸入你要修改的人的信息:nt"); scanf("%s",name); NewNode=SearchTree(Tree,name,20);if(N

12、ewNode=NULL) printf("nnt*該家譜圖中沒有%s這個人的信息請確認是否輸入錯誤*n",name);return;else SubMenue1(NewNode);/輸出副菜單void SubMenue1(TreeNode * Tree)char c;int flag,i;char name20;char Parent220;TreeNode * NewNode;getchar();while(1)system("cls");printf("t"); printf("nnt -*-請選擇你的操作-*- &qu

13、ot;);printf("nt-*-*-*-A:修改個人的信息-*-*-*-*-*-*- ");printf("nt-*-*-*-B:修改父母的信息-*-*-*-*-*-*- ");printf("nt-*-*-*-C:修改兄弟姐妹的信息-*-*-*-*-*- ");printf("nt-*-*-*-D:修改子女的信息-*-*-*-*-*-*- ");printf("nt-*-*-*-E:修改配偶的信息-*-*-*-*-*-*- ");printf("nt-*-*-*-F:退出-*-*

14、-*-*-*-*-*-*-*-nt");c=getchar();switch(c)case 'A': printf("nnt請輸入修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nt");scanf("%s",name);if(strcmp(name,"0")!=0) strcpy(Tree->Name,name);printf("nnt是否要修改性別:如果需要就輸入'1'不需要修改就輸入'0'然后按Enter鍵繼續(xù)nt"); scanf(&q

15、uot;%d",&flag); if (flag=1)if(Tree->Kind='G'|Tree->Kind='g')Tree->Kind='B'else Tree->Kind='G'printf("nnt個人信息修改成功");break;case 'B':if(Tree->Parent=NULL) /判斷是不是頭節(jié)點printf("nt是這個家譜圖里最頂端的人沒有父母信息!",name); break;if (MATEFLA

16、G=1) /判斷是不是入贅或加入此間的if(Tree->Kind='G'|Tree->Kind='g') printf("nnt她是嫁入此間的所以父母信息不在家譜內包括");elseprintf("nnt他是入贅此間的所以父母信息不在家譜內包括");break;if(Tree->Parent->Kind='G'|Tree->Parent->Kind='g')strcpy(Parent0,"母親");strcpy(Parent1,&quo

17、t;父親");else strcpy(Parent0,"父親");strcpy(Parent1,"母親");printf("nnt請輸入%s要修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nt",Parent0);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);printf("nnt請輸入%s要修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nt&qu

18、ot;,Parent1);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->NextNode0->Name,name); printf("nnt-父母的信息修改成功-");break;case 'C':NewNode=Tree->Parent;if(NewNode=NULL) /判斷是不是頭節(jié)點printf("nt是這個家譜圖里最頂端的人沒有兄弟姐妹信息!",name); break;if (MATEFL

19、AG=1) /判斷是不是入贅或加入此間的if(Tree->Kind='G'|Tree->Kind='g') printf("nnt她是嫁入此間的所以兄弟姐妹信息不在家譜內包括");elseprintf("nnt他是入贅此間的所以兄弟姐妹信息不在家譜內包括");break;if(NewNode->Num=1)printf("nnt沒有兄弟姐妹");break;elsefor(i=1;i<=NewNode->Num;i+)if(NewNode->NextNodei->

20、;Name!=Tree->Name)printf("nnt請輸入%s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nt",NewNode->NextNodei->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(NewNode->NextNodei->Name,name);printf("nnt是否要修改性別:如果需要就輸入'1'不需要修改就輸入'0'然后按Enter鍵繼續(xù)nt");sca

21、nf("%d",&flag);if (flag=1)if(NewNode->NextNodei->Kind='G'|NewNode->NextNodei->Kind='g')NewNode->NextNodei->Kind='B'else NewNode->NextNodei->Kind='G' printf("nnt-兄弟姐妹的信息修改成功-");break;case 'D':if(Tree->Num=0)pri

22、ntf("nnt至今還沒有子女");break;if (Tree->Parent !=NULL)if (strcmp(Tree->Name,Tree->Parent->NextNode0->Name)=0) /如果他是入贅或者是嫁入的就需用配偶節(jié)點完成修改Tree=Tree->Parent;for(i=1;i<=Tree->Num;i+)printf("nnt請輸入%s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nt",Tree->NextNodei->Name);scanf(&qu

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

24、Tree->NextNodei->Kind='B'else Tree->NextNodei->Kind='G' printf("nnt-子女的信息修改成功-");break;case 'E':if(Tree->Parent!=NULL)if (Tree->NextNode0=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode0->Name)!=0)printf("nnt至今還沒有配偶");b

25、reak;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->Name,name);elseprintf("nnt請輸入%s修改的姓名:如果不需要修改就輸入0然后按E

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

27、canf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode0->Name,name); printf("nnt-配偶的信息修改成功-");break;case 'F': printf("nnt-本項服務到此結束-");break; case 'n': break;default: printf("nnt-對不起!你的選擇不在服務范圍之內!-");printf("nt-請您再次選擇所

28、需的服務項!-");printf("nt-謝謝合作!-nt");break;if (c='F'|c='f')break; printf("nnt-請按Enter鍵繼續(xù)操作-");getchar();getchar();/輸出主菜單void MainMenue(TreeNode *Tree)char c;char name20;while(1)system("cls");printf("t"); printf("nnt -*-請選擇你的操作-*-");pr

29、intf("nt-A:輸入家譜信息建立多叉樹-");printf("nt-B:在家族中查找某人并輸出他或(她)的相應信息-");printf("nt-C:添加新的成員-");printf("nt-D:輸出整個家譜信息-");printf("nt-E:修改某個人的信息-");printf("nt-F:退出整個程序-nt");c=getchar();switch(c)case 'A':TreeNode * NewNode;NewNode=(TreeNode *)m

30、alloc(sizeof(TreeNode);printf("nt請輸入姓名:nt");scanf("%s",Tree->Name);printf("nt請輸入性別女G男B:nt");getchar();scanf("%c",&(Tree->Kind);Tree->Parent=NewNode;Tree->Parent=NULL;CreatTree(Tree);printf("nt-家譜圖已經建立成功-nn");printf("nnt-請按Enter鍵繼

31、續(xù)操作-");getchar();break;case 'B':if(strcmp(Tree->Name,"0")=0)printf("nt家譜圖的多叉樹尚未建立請先建立樹n");getchar();break;printf("nt請輸入你要查找的人的姓名:nt");scanf("%s",name);OutPutMessage(SearchTree(Tree,name,20),name,20); printf("nnt-*-*-*-*-*-*-*-*-*-*-nt"

32、;);getchar();break;case 'C':if(strcmp(Tree->Name,"0")=0)printf("nt家譜圖的多叉樹尚未建立請先建立樹n");getchar();break;AddNew(Tree);getchar();break;case 'D':if(strcmp(Tree->Name,"0")=0)printf("nt家譜圖的多叉樹尚未建立請先建立樹n");getchar();break;printf("nnt整個家譜的主要信

33、息如下:");OutPutAll(Tree);getchar();break;case 'E':if(strcmp(Tree->Name,"0")=0)printf("nt家譜圖的多叉樹尚未建立請先建立樹n");getchar();break;Change(Tree);getchar();break;case 'F': printf("nnt-本次服務到此結束-");printf("nt-歡迎下次使用-");printf("nt-謝謝-nn");b

34、reak;case 'n': break;default: printf("nnt-對不起!你的選擇不在服務范圍之內!-");printf("nt-請您再次選擇所需的服務項!-");printf("nt-謝謝合作!-nt");getchar();break;if (c='F'|c='f')break;getchar();/創(chuàng)建樹void CreatTree(TreeNode *Node)int i;TreeNode *NewNode;NewNode=(TreeNode *)malloc(

35、sizeof(TreeNode); Node->NextNode0=NewNode;Node->NextNode0=NULL;/Node->Parent =NULL;printf("nt請輸入%s的子女的數(shù)目:nt",Node->Name); scanf("%d",&(Node->Num);printf("nt請輸入%s的配偶的姓名:nt",Node->Name);scanf("%s",NewNode->Name);if(Node->Num)=0&&a

36、mp;strcmp(NewNode->Name,"0")=0)return ;if (Node->Kind='G'|Node->Kind='g')NewNode->Kind='B'else NewNode->Kind='G'NewNode->Num=0;NewNode->NextNode0=NULL;Node->NextNode0=NewNode;Node->NextNode0->Parent=Node;for(i=1;i<=Node->N

37、um;i+)NewNode=(TreeNode *)malloc(sizeof(TreeNode);printf("nt請輸入%s的第%d子女的名字nt",Node->Name,i);scanf("%s",NewNode->Name);printf("nt請輸入%s的第%d子女的性別女G男B:nt",Node->Name,i);getchar();scanf("%c",&NewNode->Kind);NewNode->Num=0;NewNode->Parent=Node;

38、Node->NextNodei=NewNode;CreatTree(Node->NextNodei);/遍歷并輸出樹中的內容void OutPutAll(TreeNode *Tree)int i, flag=0;printf("nt-*-*-*-*-*-*-*-*-*-");printf("nt姓名:%s 性別:",Tree->Name);if (Tree->Kind='G'|Tree->Kind='g')flag=1;printf("女");else printf(&qu

39、ot;男");if (!(Tree->NextNode0) printf("nt至今沒有配偶和子女n");return; if(flag=1)printf("nt丈夫 姓名:%s",Tree->NextNode0->Name);elseprintf("nt妻子 姓名:%s",Tree->NextNode0->Name);for(i=1;i<=Tree->Num;i+)printf("nt第%d個子女的姓名:%s 性別:",i,Tree->NextNodei-

40、>Name,Tree->NextNodei->Kind);if (Tree->NextNodei->Kind='G'|Tree->NextNodei->Kind='g')printf("女");else printf("男");printf("nt");for(i=1;i<=Tree->Num;i+)OutPutAll(Tree->NextNodei);/在樹中經過遍歷查找某個人TreeNode * SearchTree(TreeNode *T

41、ree,char name,int length)int i;TreeNode *NewNode; if(strcmp(Tree->Name,name)=0)if(length=0) MATEFLAG=1;else MATEFLAG=0;return Tree;if(Tree->NextNode0=NULL)return NULL;for(i=0;i<=Tree->Num;i+)if (i=0) NewNode=SearchTree(Tree->NextNodei,name,0); else NewNode=SearchTree(Tree->NextNode

42、i,name,20);if (NewNode!=NULL) return NewNode; return NULL;/輸出已經查找到的人的信息void OutPutMessage(TreeNode * Tree,char name,int length) int flag=0,i;TreeNode *NewNode; printf("nnt-*-*-*-*-*-*-*-*-*-*-");if(Tree=NULL)printf("nnt*該家譜圖中沒有%s這個人的信息請確認是否輸入錯誤*n",name); return;printf("nnt您所

43、要找的人已經找到信息如下所示:");printf("nnt姓名:%st性別:",name); if (Tree->Kind='G'|Tree->Kind='g') flag=1; /標記他(她)的性別printf("女");else printf("男"); NewNode=Tree->Parent;if (MATEFLAG=1)if(flag=1) printf("nnt她是嫁入此間的所以父母信息不在家譜內包括");printf("nt丈夫 姓

44、名:%s",NewNode->Name);elseprintf("nnt他是入贅此間的所以父母信息不在家譜內包括");printf("nt妻子 姓名:%s",NewNode->Name);if (NewNode->Num)>0) /判斷他(她)是否有孩子printf("nt的孩子的信息如下:"); /輸出他(她)的孩子的信息for(i=1;i<=NewNode->Num;i+)printf("nt姓名:%s 性別:",NewNode->NextNodei->Name);if (NewNode->NextNodei->Kind='G'|NewNode->Kind='

溫馨提示

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

評論

0/150

提交評論