數據結構家譜管理系統_第1頁
數據結構家譜管理系統_第2頁
數據結構家譜管理系統_第3頁
數據結構家譜管理系統_第4頁
數據結構家譜管理系統_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

2、 TreeNode Parent; /記錄這個節點的父節點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);void AddNew(TreeNode Tree

3、);void OutPutMessage(TreeNode Tree,char name,int length);/主函數void main()TreeNode Tree;Tree=(TreeNode *)malloc(sizeof(TreeNode);TreeParent =NULL;strcpy(TreeName,”0”); MainMenue(Tree);/添加新的成員void AddNew(TreeNode Tree)SubMenue2(Tree);/輸出副菜單void SubMenue2(TreeNode Tree) char c;int num;char name20;TreeNo

4、de NewNode;getchar();while(1)system(”cls”);printf(”t”); printf(”nnt -*-請選擇你的操作- ");printf("nt*-A:添加某個人的子女的信息-*- ”);printf(”nt-B:添加某個人配偶的信息-*-*- ”);printf(”nt-*-*-C:退出-*-nt”);c=getchar();switch(c)case A': printf("nnt請輸入那個人的名字:nt”);scanf("s”,name);Tree=SearchTree(Tree,name,20);

5、if(Tree=NULL)printf(”nnt*該家譜圖中沒有s這個人的信息請確認是否輸入錯誤*n”,name);break;if(TreeParent=NULL&&Tree>NextNode0=NULL|Tree-Parent!=NULL&Tree>Name!=Tree>ParentNextNode0-Name)printf(”nnts至今還沒有配偶請先添加配偶”,Tree->Name);break;if(TreeParent=NULL&(Tree->Num>20|Tree>Num0))Tree->Num=0;

6、if(MATEFLAG=1) Tree=Tree>Parent;NewNode=(TreeNode )malloc(sizeof(TreeNode));printf("nnt請輸入添加人員姓名:nt");scanf(”s”,NewNodeName);printf("nnt請輸入添加人員性別女G男B:nt”);scanf(”%1s”,NewNode-Kind);num=Tree-Num;NewNode>NextNode0=(TreeNode *)malloc(sizeof(TreeNode);NewNodeNextNode0=NULL;NewNodeNu

7、m=0;NewNodeParent=Tree;TreeNextNodenum+1=NewNode;TreeNum=Tree-Num+1; printf("nnt-子女的信息添加成功-");break;case B': printf(”nnt請輸入那個人的名字:nt”);scanf("s”,name);Tree=SearchTree(Tree,name,20);if(Tree-Parent!=NULL&strcmp(TreeName,Tree->ParentNextNode0Name)=0|Tree>NextNode0!=NULL)pri

8、ntf("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男B:nt”);scanf(”1s”,NewNode-Kind);NewNodeParent=Tree;TreeNextNode0=NewNode;break;case C'

9、: printf(”nnt-本項服務到此結束-”);break; case n: break;default: printf(”nnt對不起!你的選擇不在服務范圍之內!- ”);printf("nt-請您再次選擇所需的服務項!- ”);printf(”nt-謝謝合作!-nt");break;if (c=C|c='c') /??break; printf("nnt-請按Enter鍵繼續操作-”);getchar();getchar();/修改某個人的信息void Change(TreeNode * Tree) char name20;TreeNode

10、 NewNode;printf(”nt請輸入你要修改的人的信息:nt”); scanf(”s",name);NewNode=SearchTree(Tree,name,20);if(NewNode=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(

11、1)system(”cls”);printf(”t”); printf(”nnt -*請選擇你的操作-* ");printf(”nt-*-*A:修改個人的信息-*-*- ”);printf("nt-*-B:修改父母的信息-*- ");printf("nt-*-C:修改兄弟姐妹的信息-*- ”);printf(”nt-*-D:修改子女的信息-*-*- ”);printf(”nt-*-*-E:修改配偶的信息-*- ");printf("nt-*-F:退出*-*-*-*-nt");c=getchar();switch(c)case

12、 'A: printf(”nnt請輸入修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續nt”);scanf(”s”,name);if(strcmp(name,"0")!=0) strcpy(Tree>Name,name);printf(”nnt是否要修改性別:如果需要就輸入1不需要修改就輸入0然后按Enter鍵繼續nt”); scanf(”d”,flag); if (flag=1)if(Tree>Kind=G|Tree-Kind='g')TreeKind=B';else Tree->Kind='G'p

13、rintf(”nnt個人信息修改成功”);break;case 'B':if(Tree>Parent=NULL) /判斷是不是頭節點printf(”nt是這個家譜圖里最頂端的人沒有父母信息!”,name); break;if (MATEFLAG=1) /判斷是不是入贅或加入此間的if(Tree-Kind='G'|Tree>Kind=g') printf(”nnt她是嫁入此間的所以父母信息不在家譜內包括”);elseprintf(”nnt他是入贅此間的所以父母信息不在家譜內包括”);break;if(Tree-Parent->Kind=&

14、#39;G|Tree>ParentKind='g)strcpy(Parent0,”母親”);strcpy(Parent1,”父親");else strcpy(Parent0,”父親");strcpy(Parent1,"母親”);printf("nnt請輸入s要修改的姓名:如果不需要修改就輸入0'然后按Enter鍵繼續nt”,Parent0);scanf(”s",name);if(strcmp(name,"0”)!=0)strcpy(Tree>Parent>Name,name);printf(”nnt請

15、輸入%s要修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續nt",Parent1);scanf(”s”,name);if(strcmp(name,"0”)!=0)strcpy(TreeParent-NextNode0>Name,name); printf("nnt-父母的信息修改成功-”);break;case 'C:NewNode=Tree>Parent;if(NewNode=NULL) /判斷是不是頭節點printf(”nt是這個家譜圖里最頂端的人沒有兄弟姐妹信息!”,name); break;if (MATEFLAG=1)/判斷是

16、不是入贅或加入此間的if(Tree-Kind=GTree>Kind=g) printf(”nnt她是嫁入此間的所以兄弟姐妹信息不在家譜內包括”);elseprintf("nnt他是入贅此間的所以兄弟姐妹信息不在家譜內包括”);break;if(NewNodeNum=1)printf("nnt沒有兄弟姐妹");break;elsefor(i=1;i=NewNode-Num;i+)if(NewNodeNextNodeiName!=Tree-Name)printf(”nnt請輸入%s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續nt”,NewNode-&

17、gt;NextNodeiName);scanf("s”,name);if(strcmp(name,”0”)!=0)strcpy(NewNodeNextNodeiName,name);printf(”nnt是否要修改性別:如果需要就輸入1不需要修改就輸入0然后按Enter鍵繼續nt”);scanf(”%d”,flag);if (flag=1)if(NewNode->NextNodeiKind='G'NewNode-NextNodei>Kind=g)NewNode-NextNodeiKind=B;else NewNode->NextNodei-Kind=

18、G; printf(”nnt-兄弟姐妹的信息修改成功-");break;case D:if(Tree-Num=0)printf("nnt至今還沒有子女”);break;if (Tree-Parent !=NULL)if (strcmp(TreeName,TreeParent>NextNode0Name)=0) /如果他是入贅或者是嫁入的就需用配偶節點完成修改Tree=TreeParent;for(i=1;i=TreeNum;i+)printf(”nnt請輸入s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續nt”,Tree-NextNodei-Name);sc

19、anf(”%s”,name);if(strcmp(name,”0”)!=0)strcpy(TreeNextNodeiName,name);printf("nnt是否要修改性別:如果需要就輸入'1不需要修改就輸入0'然后按Enter鍵繼續nt”);scanf("d”,flag);if (flag=1)if(Tree>NextNodei-Kind='G|Tree>NextNodeiKind='g')TreeNextNodeiKind=B';else Tree->NextNodeiKind=G' print

20、f("nnt-子女的信息修改成功-”);break;case 'E':if(TreeParent!=NULL)if (TreeNextNode0=NULLstrcmp(Tree>Name,Tree-Parent>NextNode0-Name)!=0)printf(”nnt至今還沒有配偶");break;if (strcmp(Tree>Name,Tree->Parent>NextNode0->Name)=0)printf(”nnt請輸入s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續nt”,TreeParent&g

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

22、lseprintf(”nnt請輸入s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續nt”,Tree->NextNode0Name);scanf(”s”,name);if(strcmp(name,"0")!=0)strcpy(TreeNextNode0->Name,name); printf(”nnt-配偶的信息修改成功-”);break;case F': printf(”nnt-本項服務到此結束-”);break; case n: break;default: printf(”nnt-對不起!你的選擇不在服務范圍之內!-");prin

23、tf(”nt-請您再次選擇所需的服務項!-”);printf(”nt-謝謝合作!-nt”);break;if (c='Fc=f')break; printf("nnt-請按Enter鍵繼續操作-”);getchar();getchar();/輸出主菜單void MainMenue(TreeNode *Tree)char c;char name20;while(1)system("cls”);printf(”t"); printf(”nnt -*-請選擇你的操作-*”);printf("nt-A:輸入家譜信息建立多叉樹-”);printf(

24、”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 *)malloc(sizeof(TreeNode);printf(”nt請輸入姓名:nt”);scanf("s",Tree->Name);printf

25、(”nt請輸入性別女G男B:nt”);getchar();scanf("c",(Tree>Kind));TreeParent=NewNode;TreeParent=NULL;CreatTree(Tree);printf(”nt-家譜圖已經建立成功-nn”);printf("nnt-請按Enter鍵繼續操作-");getchar();break;case B:if(strcmp(TreeName,”0”)=0)printf("nt家譜圖的多叉樹尚未建立請先建立樹n");getchar();break;printf(”nt請輸入你要

26、查找的人的姓名:nt”);scanf(”%s”,name);OutPutMessage(SearchTree(Tree,name,20),name,20); printf("nnt-*-nt”);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家譜圖的多叉樹尚未

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

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

29、gt;NextNode0=NULL;/NodeParent =NULL;printf(”nt請輸入s的子女的數目:nt”,NodeName); scanf(”d”,(Node-Num);printf(”nt請輸入s的配偶的姓名:nt”,NodeName);scanf("s”,NewNodeName);if(NodeNum)=0&&strcmp(NewNode-Name,"0")=0)return ;if (NodeKind=G|Node>Kind='g)NewNode-Kind=B;else NewNode>Kind=G;New

30、Node-Num=0;NewNodeNextNode0=NULL;NodeNextNode0=NewNode;NodeNextNode0-Parent=Node;for(i=1;i=NodeNum;i+)NewNode=(TreeNode )malloc(sizeof(TreeNode);printf("nt請輸入s的第%d子女的名字nt”,NodeName,i);scanf("s",NewNode>Name);printf(”nt請輸入s的第%d子女的性別女G男B:nt",Node>Name,i);getchar();scanf(”%c&q

31、uot;,NewNode>Kind);NewNode->Num=0;NewNodeParent=Node;Node->NextNodei=NewNode;CreatTree(Node>NextNodei);/遍歷并輸出樹中的內容void OutPutAll(TreeNode *Tree)int i, flag=0;printf(”nt-*-*-*-*-*-*-");printf(”nt姓名:s 性別:",TreeName);if (TreeKind=G|TreeKind=g')flag=1;printf(”女”);else printf(”男

32、”);if (?。═ree>NextNode0)) printf(”nt至今沒有配偶和子女n");return; if(flag=1)printf(”nt丈夫姓名:s”,Tree-NextNode0Name);elseprintf(”nt妻子姓名:s”,Tree-NextNode0->Name);for(i=1;i=Tree-Num;i+)printf(”nt第%d個子女的姓名:%s 性別:”,i,Tree-NextNodei-Name,TreeNextNodeiKind);if (TreeNextNodeiKind=GTreeNextNodeiKind='g)p

33、rintf(”女”);else printf(”男”);printf("nt”);for(i=1;i=TreeNum;i+)OutPutAll(Tree-NextNodei);/在樹中經過遍歷查找某個人TreeNode SearchTree(TreeNode Tree,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 N

34、ULL;for(i=0;i<=Tree>Num;i+)if (i=0) NewNode=SearchTree(Tree->NextNodei,name,0);else NewNode=SearchTree(TreeNextNodei,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-*-*-*-*

35、-");if(Tree=NULL)printf(”nnt*該家譜圖中沒有%s這個人的信息請確認是否輸入錯誤*n",name); return;printf(”nnt您所要找的人已經找到信息如下所示:");printf(”nnt姓名:%st性別:”,name); if (Tree-Kind='G'Tree>Kind='g) flag=1; /標記他(她)的性別printf("女");else printf("男"); NewNode=TreeParent;if (MATEFLAG=1)if(flag=1) printf(”nnt她是嫁入此間的所以父母信息不在家譜內包括”);printf(”nt丈夫姓名:%s”,NewNodeName);elseprintf(”nnt他是入贅此間的所以父母信息不在家譜內包括");printf(”nt妻子姓名:s”,NewNodeName);if (NewNode>Num)0) /判斷他(她)是否有孩子printf(”nt的孩子的信息如下:”); /輸出他(她)的孩子的信息for(i=1;i<=NewNode-Num;i+)printf(”nt姓名:%s 性別:”,Ne

溫馨提示

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

評論

0/150

提交評論