家譜管理系統(tǒng)(含源代碼_第1頁(yè)
家譜管理系統(tǒng)(含源代碼_第2頁(yè)
家譜管理系統(tǒng)(含源代碼_第3頁(yè)
家譜管理系統(tǒng)(含源代碼_第4頁(yè)
家譜管理系統(tǒng)(含源代碼_第5頁(yè)
已閱讀5頁(yè),還剩13頁(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)介

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

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

3、oid 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);Tree-Parent =NULL;strcpy(Tree-Name,0);MainMenu

4、(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(請(qǐng)選擇你的操作n);printf(A:添加某個(gè)人的子女的信息n);printf(B:添加某個(gè)人配偶的信息n);printf(C:退出n);printf(請(qǐng)選擇相應(yīng)功能:n);c=getchar();swit

5、ch(c)case A: /添加子女信息printf(請(qǐng)輸入那個(gè)人的名字:n);scanf(%s,name);Tree=SearchTree(Tree,name,20);/在家譜里查找這個(gè)人if(Tree=NULL)printf(該家譜圖中沒(méi)有%s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤n,name);break;if(Tree-Parent=NULL&Tree-NextNode0=NULL|Tree-Parent!=NULL&Tree-Name!=Tree-Parent-NextNode0-Name)printf(至今還沒(méi)有配偶請(qǐng)先添加配偶n,Tree-Name);break;if(Tree-Pare

6、nt=NULL&(Tree-Num20|Tree-NumNum=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;NewNode-NextNode0=(TreeNode *)malloc(sizeof(TreeNode);NewNode-NextNode0=NULL;NewNode-N

7、um=0;NewNode-Parent=Tree;Tree-NextNodenum+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-NextNode0-Name)=0|Tree-NextNode0!=NULL)printf(已經(jīng)有了配偶n);break;if(Tree=NULL)printf(

8、該家譜圖中沒(méi)有%s這個(gè)人的信息請(qǐng)確認(rèn)n,name);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-NextNode0=NewNode;break;case C:printf(本項(xiàng)服務(wù)到此結(jié)束n);break;case n:break;default:printf(對(duì)不起!你的選擇錯(cuò)誤n);break;if (c

9、=C|c=c)break;printf(請(qǐng)按Enter鍵繼續(xù)操作n);getchar();getchar();/修改某個(gè)人的信息void Change(TreeNode * Tree)char name20;TreeNode * NewNode;printf(請(qǐng)輸入你要修改的人的信息:n);scanf(%s,name);NewNode=SearchTree(Tree,name,20);if(NewNode=NULL)printf(該家譜圖中沒(méi)有%s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤n,name);return;elseSubMenue1(NewNode);/輸出副菜單void SubMenue1(

10、TreeNode * Tree)char c;int flag,i;char name20;char Parent220;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)case A:printf(請(qǐng)輸入修改的姓名:如果不需要修改就輸入0然后按Ente

11、r鍵繼續(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;else Tree-Kind=F;printf(個(gè)人信息修改成功n);break;case B:if(Tree-Parent=NULL) /判斷是不是頭節(jié)點(diǎn)printf(是這個(gè)家譜圖里最頂端的人沒(méi)有父母信息!n,name);break;if (

12、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-Kind=f)strcpy(Parent0,母親);strcpy(Parent1,父親);elsestrcpy(Parent0,父親);strcpy(Parent1,母親);printf(請(qǐng)輸入%s要修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)n,Parent0);scan

13、f(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Parent-Name,name);printf(請(qǐng)輸入%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) /判斷是不是頭節(jié)點(diǎn)printf(是這個(gè)家譜圖里最頂端的人沒(méi)有兄弟姐妹信息!n,na

14、me);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(沒(méi)有兄弟姐妹n);break;elsefor(i=1;iNum;i+)if(NewNode-NextNodei-Name!=Tree-Name)printf(請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)n,NewNode-NextNodei-Nam

15、e);scanf(%s,name);if(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-NextNodei-Kind=B;else NewNode-NextNodei-Kind=G;printf(兄弟姐妹的信息修改成功n);break;case D:if(Tree-Nu

16、m=0)printf(至今還沒(méi)有子女n);break;if (Tree-Parent !=NULL)if (strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0) /如果他是入贅或者是嫁入的就需用配偶節(jié)點(diǎn)完成修改Tree=Tree-Parent;for(i=1;iNum;i+)printf(請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)n,Tree-NextNodei-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-NextNodei-Name,name);printf(是否

17、要修改性別:如果需要就輸入1不需要修改就輸入0然后按Enter鍵繼續(xù)n);scanf(%d,&flag);if (flag=1)if(Tree-NextNodei-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-NextNode0-Name)!=0)printf(至今還沒(méi)有配偶n)

18、;break;if (strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0)printf(nnt請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nt,Tree-Parent-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcpy(Tree-Parent-Name,name);elseprintf(nnt請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nt,Tree-NextNode0-Name);scanf(%s,name);if(strcmp(name,0)!=0)strcp

19、y(Tree-NextNode0-Name,name);elseif(Tree-NextNode0=NULL)printf(至今還沒(méi)有配偶n);elseprintf(nnt請(qǐng)輸入%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);break;case n:break;default:printf(對(duì)不起!

20、你的選擇錯(cuò)誤n);break;if (c=F|c=f)break;printf(請(qǐng)按Enter鍵繼續(xù)操作n);getchar();getchar();/輸出主菜單void MainMenu(TreeNode *Tree)char c;/用于接受用戶輸入的選項(xiàng)char name20;while(1)system(cls);/清屏printf(歡迎進(jìn)入家譜管理系統(tǒng)nnn);printf( 菜單 nn);printf( 輸入家譜信息-1n);printf( 查找家族成員-2n);printf( 添加家族成員-3n);printf( 輸出家譜信息-4n);printf( 修改成員信息-5n);prin

21、tf( 退出-6n);printf(nnn);printf(請(qǐng)選擇相應(yīng)的功能:n);c=getchar();switch(c)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

22、(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)先

23、建立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();break;Change(Tree);getchar();break;case 6:printf(本程序結(jié)

24、束,歡迎下次使用。n);exit(0);break;case n:break;default:printf(您輸入錯(cuò)誤,請(qǐng)重新輸入。n);getchar();break;getchar();/創(chuàng)建樹(shù)void CreatTree(TreeNode *Node)int i;TreeNode *NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode);Node-NextNode0=NewNode;/ Node-NextNode0=NULL;printf(請(qǐng)輸入%s的子女的數(shù)目:n,Node-Name);scanf(%d,&(Node-Num);print

25、f(請(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)填寫(xiě)其配偶的性別NewNode-Kind=M;elseNewNode-Kind=F;NewNode-Num=0;NewNode-NextNode0=NULL;Node-NextNode0=NewNode;Node-NextNode0-Parent=Node;for(i=1;iNum;i+)NewNode=(TreeNode *)malloc

26、(sizeof(TreeNode);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-NextNodei=NewNode;CreatTree(Node-NextNodei);/遍歷并輸出樹(shù)中的內(nèi)容void OutPutAll(TreeNode *Tree)int i, flag=0;/flag記錄節(jié)點(diǎn)的

27、性別printf(%s 性別:,Tree-Name);if (Tree-Kind=F|Tree-Kind=f)flag=1;printf(女n);elseprintf(男n);if (!(Tree-NextNode0)printf(至今沒(méi)有配偶和子女n);return;if(flag=1)/flag=1 表示性別為女printf(丈夫的姓名:%sn,Tree-NextNode0-Name);elseprintf(妻子的姓名:%sn,Tree-NextNode0-Name);for(i=1;iNum;i+)printf(第%d個(gè)子女的姓名別:,i,Tree-NextNodei-Name,Tree

28、-NextNodei-Kind);if (Tree-NextNodei-Kind=F|Tree-NextNodei-Kind=f)printf(女n);elseprintf(男n);for(i=1;iNum;i+)OutPutAll(Tree-NextNodei);/在樹(shù)中經(jīng)過(guò)遍歷查找某個(gè)人TreeNode * SearchTree(TreeNode *Tree,char name,int length)int i;TreeNode *NewNode;if(strcmp(Tree-Name,name)=0)if(length=0)MATEFLAG=1;elseMATEFLAG=0;return

29、 Tree;if(Tree-NextNode0=NULL)return NULL;for(i=0;iNum;i+) :%s 性if (i=0)NewNode=SearchTree(Tree-NextNodei,name,0);elseNewNode=SearchTree(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)記性別Tree

30、Node *NewNode;if(Tree=NULL)printf(該家譜圖中沒(méi)有%s這個(gè)人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)/性別為女printf(她是嫁入這家的,所以父母信息不在家譜內(nèi)包括n);printf(丈夫的姓名:%sn,NewNode-

31、Name);else /性別為男printf(他是入贅這家的所以父母信息不在家譜內(nèi)包括n);printf(妻子的姓名:%sn,NewNode-Name);if (NewNode-Num)0) /判斷他(她)是否有孩子 printf(孩子的信息如下:n); /輸出他(她)的孩子的信息 for(i=1;iNum;i+)printf(%s 性別:,NewNode-NextNodei-Name);if (NewNode-NextNodei-Kind=F|NewNode-Kind=f) printf(女n);elseprintf(男n);return;if(NewNode=NULL) /判斷它是不是根節(jié)

32、點(diǎn)如果是的話就沒(méi)有父母兄弟信息printf(是這個(gè)家譜圖里最頂端的人!n,name);elseif (NewNode-Kind=F|NewNode-Kind=f) /判斷父親節(jié)點(diǎn)是父親還是母親 /輸出他(她)的父母親的信息printf(母親的姓名:%sn,NewNode-Name);printf(父親的姓名:%sn,NewNode-NextNode0-Name);elseprintf(母親的姓名:%sn,NewNode-NextNode0-Name);printf(父親的姓名:%sn,NewNode-Name);if (NewNode-Num1) /判斷他(她)是否有兄弟姐妹 /輸出他(她)的兄弟姐妹的信息printf(%s的兄弟姐妹信息如下:n,name);for(i=1;iNum;i+)if(NewNode-NextNodei)printf(%s 性別:,NewNode-NextNodei-Name,NewNode-NextNodei-Nam

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論