版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、家譜的設(shè)計(jì)與實(shí)現(xiàn)(樹,查找)家譜的設(shè)計(jì)主要是實(shí)現(xiàn)對家庭成員信息的建立、查找、插入、修改、刪除等功能????;竟δ苋缦拢海?)家譜中每個(gè)成員的信息包括:姓名、性別。( 2)家譜祖先數(shù)據(jù)的錄入(樹的根結(jié)點(diǎn)) 。( 3)家庭成員的添加:即添加某人的兒女(包括姓名和性別) ,兒女的數(shù)目由控制臺端 給出,然后輸入相應(yīng)的兒女姓名和性別(此處所有兒女的 姓名不能重名) 。( 4 )家庭成員的修改:可以修改某一成員的姓名。( 5)家庭成員的查詢:查詢某一成員在家族中的輩分(第幾代) ,并能查詢此成員的所有子女及這一輩的所有成員。(6)家庭成員的刪除:刪除此成員時(shí),若其有后代,將刪除其所有后代成員。#inclu
2、de <stdio.h>#include <malloc.h>#include <string>#include <stdlib.h>#define MAX 10typedef struct node /定義 data 存儲結(jié)構(gòu)char nameMAX; / 姓名char sex; / 性別int generation;/ 代目node;typedef struct ftstruct node l;struct ft *brother;/ 創(chuàng)建結(jié)構(gòu)體/ 家譜中直系家屬用來指向兄弟用來指向孩子ft *root;/root 是結(jié)構(gòu)體 ft 的指針st
3、ruct ft *child;/ ft;/ 搜索指針函數(shù)ft *search(ft *p,char ch)ft *q;if(p=NULL)return NULL;/ 沒有家譜,頭指針下為空if(strcmpi(p->,ch)=0)return p;/ 家譜不為空,頭指針下有這個(gè)人if(p->brother)q=search(p->brother,ch);/ 在兄弟中找if(q)return q;/ 找到if(p->child)q=search(p->child,ch);/ 在孩子中找if(q!=NULL)return q;return NULL;/ 沒
4、有找到ft *parent(ft *p,ft *q,int *flag)/ 通過 parent 函數(shù)得到雙親結(jié)點(diǎn)。用 flag 標(biāo)志, -1為左孩子, 1 為右孩子if(p=NULL)return NULL;/ 沒有家譜,頭指針下為空if(p->child=NULL)flag=0;return NULL;elseif(p->brother=q)*flag=1;return p;elseif(p->child=q)*flag=-1;return p;elseif(p->brother!=NULL)parent(p->brother,q,*&flag);if(
5、p->child!=NULL)parent(p->child,q,*&flag);int generation(ft *p,char ch)ft *q;if(p=NULL) return NULL;if(strcmpi(p->,ch)=0)這個(gè)人/ 獲得搜索到的成員的代目的返回值return p->l.generation;/ 家譜不為空,頭指針下有if(p->brother)q=search(p->brother,ch);/在兄弟中找if(q) return q->l.generation;/ 找到if(p->child)q
6、=search(p->child,ch);/ 在孩子中找return NULL;void saves(ft *p,char b,char c,int d)/建立家譜孩子結(jié)點(diǎn) 創(chuàng)建結(jié)點(diǎn)并對 l 賦值 保存for(int i=0;i<MAX;i+)p->i=bi;p->l.sex=c;p->l.generation=d;void disp(ft *n) / 搜索到數(shù)據(jù)的輸出ft *t=NULL;printf(" 此 人 姓 名 :%s 性 別 %c 為 第 %d 代 n",n->,n->l.sex,n->l
7、.generation);printf("n");printf(" 此人的子女 :"); / 子女輸出printf(" 此人無子女 !");elseif(n->child->brother=NULL)printf(" 姓名 :%s性別 :%ct",n->child->,n->child->l.sex);elseprintf(" 姓名 :%s性別 :%ct",n->child->,n->child->l.sex);
8、t=n->child->brother;while(t!=NULL)printf(" 姓名 :%s 性別 :%ct",t->,t->l.sex); t=t->brother;printf("n");printf("n");printf(" 此人的同輩成員 :"); / 同輩輸出printf(" 此人無同輩成員 !");elseif(n->brother->brother=NULL)printf(" 姓名 :%s 性別 :%ct&qu
9、ot;,n->brother->,n->brother->l.sex);elseprintf(" 姓 名 :%s 性 另 U :%ct", n->brother->l. name ,n->brother->l.sex);t=n->brother->brother;while(t!=NULL)printf(" 姓名 :%s 性另 :%ct",t->,t->l.sex); t=t->brother;printf("n");void Ini
10、tTree()/ 初始化char bMAX,c;int a;printf(" 請輸入始祖的姓名 性別 :");free(root); / 釋放 root ( ft ) 空間root=(ft *)malloc(sizeof(ft); /創(chuàng)建一個(gè) ft 結(jié)構(gòu)體大小的空間 然后強(qiáng)制轉(zhuǎn)換為 ft *類型的指針 然后賦值給 root / 這時(shí) root 指向一 個(gè) struct dictree 結(jié)構(gòu)體大小的新空間scanf("%s %c",&b,&c);a=1;/ 輸入姓名,性別root->child=NULL; / 清空左右孩子root-&
11、gt;brother=NULL;saves(root,b,c,a);/ 存入結(jié)構(gòu)printf(" 家譜重構(gòu)成功 !n");void Manu()printf("*n");printf("* 請選擇對家譜的操作 : *n");printf("*0. 退出*n");printf("*1.添加*n");printf("*2.查找*n");printf("*3.修改*n");printf("*4.刪除*n");printf("*5.重
12、構(gòu)*n");printf("*n");void Add() / 添加ft *n,*m,*t=NULL;char bMAX,c,dMAX;int i;printf(" 請輸入要添加子女的上一輩的姓名 :n");/ 判斷是否有重名 scanf("%s",&d);n=search(root,d);int a=generation(root,d);while(n=NULL)printf(" 此人不在家譜內(nèi) ,請重新輸入姓名 :n");scanf("%s",&d);n=searc
13、h(root,d);/ 孩子信息添加if(n->child=NULL)printf(" 孩子姓名與性別輸入 :n");scanf("%s %c",&b,&c);a+;m=search(root,b);if(m!=NULL)printf(" 出現(xiàn)重名,添加失敗 !n");elsen->child=(ft *)malloc(sizeof(ft); n->child->brother=NULL; n->child->child=NULL; saves(n->child,b,c,a);
14、elsen=n->child;while(n->brother!=NULL)n=n->brother;printf(" 孩子姓名與性別輸入 :n");scanf("%s %c",&b,&c);a+;m=search(root,b);!n");if(m!=NULL) printf(" 出現(xiàn)重名,添加失敗elset=(ft *)malloc(sizeof(ft);saves(t,b,c,a);t->brother=NULL;t->child=NULL;n->brother=t;void
15、Search() / 查詢ft *n;char dMAX;printf(" 輸入姓名,查找相關(guān)信息 :n"scanf("%s",&d);n=search(root,d);while(n=NULL):n");printf(" 此人不存在,請?jiān)俅屋斎雜canf("%s",&d);n=search(root,d);disp(n);void Change()/ 修改char aMAX,rMAX,c;ft *n;printf(" 請輸入要修改人的姓名 :");scanf("%s&
16、quot;,&a);n=search(root,a);while(n=NULL)printf(" 此人不存在 ,請重新輸入姓名 :n");scanf("%s",&a);n=search(root,a);printf(" 此人存在,請輸入新信息 :");scanf("%s %c",&r,&c);for(int i=0;i<MAX;i+)n->i=ri;n->l.sex=c;void Del() / 刪除ft *n,*m;int flag;char dMAX
17、,aMAX;printf(" 請輸入要刪除人的姓名 :");scanf("%s",a);n=search(root,a);while(n=NULL)printf(" 此人不存在 ,請重新輸入姓名 :n"); scanf("%s",&a);n=search(root,a);printf("n");printf(" 此人已找到 !n");printf("n");if(flag>0)刪除成功 !n"); m->brother=n->brother;printf("else if(flag<0) m->child=n->brother; printf(" 刪除成功 !n"); int main
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年工業(yè)自動化生產(chǎn)線廠房租賃合同4篇
- 2024離婚合同書:不含財(cái)產(chǎn)分割案例版B版
- 個(gè)人房產(chǎn)抵押合同
- 2024年04月交通銀行股份有限公司畢節(jié)分行(貴州)招考1名勞務(wù)人員筆試歷年參考題庫附帶答案詳解
- 2024物業(yè)公司收費(fèi)標(biāo)準(zhǔn)合同
- 2025年度不銹鋼復(fù)合材料應(yīng)用研發(fā)與推廣協(xié)議3篇
- 2024年03月貴州中國農(nóng)業(yè)銀行貴州省分行春季招考筆試歷年參考題庫附帶答案詳解
- 2025年度農(nóng)產(chǎn)品溯源體系建設(shè)合作協(xié)議范本3篇
- 二零二五年度草牧場資源綜合利用與承包合同3篇
- 專職護(hù)林員2024年度服務(wù)協(xié)議版B版
- 骨科手術(shù)后患者營養(yǎng)情況及營養(yǎng)不良的原因分析,骨傷科論文
- GB/T 24474.1-2020乘運(yùn)質(zhì)量測量第1部分:電梯
- GB/T 12684-2006工業(yè)硼化物分析方法
- 定崗定編定員實(shí)施方案(一)
- 高血壓患者用藥的注意事項(xiàng)講義課件
- 特種作業(yè)安全監(jiān)護(hù)人員培訓(xùn)課件
- (完整)第15章-合成生物學(xué)ppt
- 太平洋戰(zhàn)爭課件
- 封條模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖漿
- 貨代操作流程及規(guī)范
評論
0/150
提交評論