家譜管理系統(tǒng)-數(shù)據(jù)構(gòu)架大作業(yè)_第1頁(yè)
家譜管理系統(tǒng)-數(shù)據(jù)構(gòu)架大作業(yè)_第2頁(yè)
家譜管理系統(tǒng)-數(shù)據(jù)構(gòu)架大作業(yè)_第3頁(yè)
家譜管理系統(tǒng)-數(shù)據(jù)構(gòu)架大作業(yè)_第4頁(yè)
家譜管理系統(tǒng)-數(shù)據(jù)構(gòu)架大作業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、任務(wù):實(shí)現(xiàn)具有下列功能的家譜管理系統(tǒng)功能要求:1) .輸入文件以存放最初家譜中各成員的信息,成員的信息中均應(yīng)包含以 下內(nèi)容:也可姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),附加其它信息、但不是必需的。2) .實(shí)現(xiàn)數(shù)據(jù)的存盤和讀盤。3) .以圖形方式顯示家譜。4) .顯示第n代所有人的信息。5) .按照姓名查詢,輸出成員信息(包括其本人、父親、孩子的信息)6) .按照出生日期查詢成員名單。7) .輸入兩人姓名,確定其關(guān)系。8) .某成員添加孩子。9) .刪除某成員(若其還有后代,則一并刪除)。10) .修改某成員信息。11) .按出生日期對(duì)家譜中所有人排序。12) .打開一家譜時(shí)

2、,提示當(dāng)天生日的健在成員。要求:建立至少 30個(gè)成員的數(shù)據(jù),以較為直觀的方式顯示結(jié)果,并提供 文稿形式以便檢查。界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成 相關(guān)的功能要求。精心整理存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì),但是要求相關(guān)數(shù)據(jù)要存 儲(chǔ)在數(shù)據(jù)文件中。測(cè)試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試, 以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫明;*/I#include<stdio.h>一| 廣if 5l'嚴(yán) X .r #include<stdlib.h>aJ 一 一J J孑 /#include<

3、;string.h>: '#include<time.h>#include"map.h"#defineMAXN100#defineMAXMEM100'I '#defineElemtypechar I'-1/樹typedefstructBiTNodeJintmark;/ 標(biāo)記intlevel;charname50; 姓名charbirthday50; 生日charaddressMAXN;住址精心整理boolmarriage;/ 婚否(true表示結(jié)婚,false表示沒結(jié)婚) boollive;/ 建在(true表示活著,fal

4、se表示過世) boolsex;/ 性別(true表示男,false表示女) charlivemassage50;死亡日期(如果其已經(jīng)死亡)Elemtypedata;/ structBiTNode*lc,*rc;IBiTNode,*BiTree;/樹的相關(guān)操作. 一 "i ''".J“7 X 才"T"二_ charnametemp50;姓名charbirthdaytemp50;生日charaddresstempMAXN;住址boolmarriagetemp;/ 婚否(true表示結(jié)婚,false 表示沒結(jié)婚) boollivetemp;/

5、 建在(true表示或者,false表示過世) boolsextemp;' I'-1charlivemassagetempMAXN;死亡日期(如果其已經(jīng)死亡)charch;/ 額外使用 intleveltemp;/ 人的代數(shù) intNth;/ 顯示第n代人時(shí)要用 charsearchdata50;charsearchname50;intcount;/ 計(jì)數(shù) intchoice;/各種選擇intuse;精心整理BiTreetemp;structBiTNodeList BiTreedata;BiTNodeList*next;;IBiTNodeList*List;-voidCreat

6、BiTree(BiTree &T,FILE*in)建立雙鏈二叉樹fscanf(in,"%c", &ch);printf("%cn",ch);if(ch=)II . .'I -''T=NULL;fscanf(in,"%c", &ch);JelseT=(BiTree)malloc(sizeof(BiTNode);fscanf(in,"%s%s%s%d%d",nametemp,birthdaytemp,addresstemp,&mar riagetemp,&

7、livetemp);fscanf(in,"%s",nametemp);精心整理strcpy(T->name,nametemp);fscanf(in,"%s",birthdaytemp);strcpy(T->birthday,birthdaytemp);fscanf(in,"%s",addresstemp);strcpy(T->address,addresstemp);fscanf(in,"%d%d%d%d",&marriagetemp,&livetemp,&leveltem

8、p, &sextemIp);T->marriage=marriagetemp;X /*' i"-T->live=livetemp;T->level=leveltemp;T->sex=sextemp;printf("%s%s%s%d%dn",nametemp,birthdaytemp,addresstemp,marriagetemp,livetemp);II if(!livetemp)' I'-1fscanf(in,"%s",livemassagetemp);printf("%sn

9、",livemassagetemp);.Jif(!T->live)strcpy(T->livemassage,livemassagetemp);fscanf(in,"%c", &ch);CreatBiTree(T->lc,in);CreatBiTree(T->rc,in);精心整理voidPrintlnfo(BiTreeT)printf("%-10s出于:%-10s%-10s",T->name,T->birthday,T->address);if(T->marriage)printf(&q

10、uot;t 已婚");if(!T->marriage): 'printf("t未婚");if(T->sex)printf("t男");if(!T->sex)II printf("t女");'INif(T->live)printf("t健在 n");if(!T->live)Jprintf("t 去世于:%sn",T->livemassage);(檢查建樹voidPreOrderTraverse_recursion(BiTreeT)遞歸先

11、序遍歷是否正確)printf("PreOrderTraverse_recursionn");精心整理if(T)/*printf("%-10s出于:%-10s%-10s",T->name,T->birthday,T->address); if(T->marriage)printf("t已婚");if(!T->marriage)printf("t未婚");jT"'if(T->sex)printf("t男");if(!T->sex)print

12、f("t女");if(T->live)II printf("t 健在 n"); Iif(!T->live)printf("t 去世于:%sn",T->livemassage);*/Printlnfo(T);JPreOrderTraverse_recursion(T->lc); PreOrderTraverse_recursion(T->rc);voidShowFamilyTree(BiTreeT)/ 以圖形的方式顯示家譜精心整理inti,lev;BiTreep;P=T;if(T)lev=T->lev

13、el;for(i=0;i<lev;i+)printf("t");printf("%-5s",p->name);if(p->lc)p=T->lc;printf(" 伙 %5s%n",p->name);IIif(p->rc)' I'p=p->rc;ShowFamilyTree(p);Jelseprintf("( 未婚)n");if(T->rc)精心整理p=T->rc;ShowFamilyTree(p);voidShowNth(BiTreeT)/ 顯示

14、第n代所有人的信息Iif(T). 一 "i ""-.j,« 卜.: / J .;if(T->level=Nth)Printlnfo(T);printf("%-10s%-10s%-10s%5d%5d%5dn",T->name,T->birthday,T->adII idress,T->marriage,T->live,T->sex);count+;ShowNth(T->lc);JShowNth(T->rc);voidSearchByName(BiTreeT)/按照姓名查詢,輸出成員信

15、息(包括其本人、父親、孩子的信息)。不能查詢祖先信息精心整理if(T)if(T->lc)if(T->lc->rc)Itemp=T->lc->rc;while(temp),« r-.:, / / .;if(strcmp(temp->name,searchname)=O)count+;printf("n 此人的信息為:n");Printlnfo(temp);: I'-1printf("%-10s%-10s%-10s%5d%5d%5dnn",temp->name,temp->birthd ay,

16、temp->address,temp->marriage,temp->live,temp->sex);printf("此人父母的信息為:n");JPrintInfo(T);Printlnfo(T->lc);printf("%-10s%-10s%-10s%5d%5d%5dn",T->name,T->birthday,T->ad dress,T->marriage,T->live,T->sex);printf("%-10s%-10s%-10s%5d%5d%5dnn",T-&

17、gt;lc->name,T->lc->birthday,T->lc->address,T->lc->marriage,T->lc->live,T->lc->sex);精心整理if(!temp->livemassage)printf("此人還沒有妻室n");elseprintf("此人妻子的信息為:n");Printlnfo(temp->lc);Iprintf("%-10s%-10s%-10s%5d%5d%5dnn",temp->lc->name,

18、temp->lc->birthday,temp->lc->address,temp->lc->marriage,temp->lc->live,7: /”二-_ temp->lc->sex);: 'if(temp->lc->rc)printf("此人孩子的信息為:n");temp=temp->lc->rc;I lI *1while(temp)I'-1PrintInfo(temp);printf("%-10s%-10s%-10s%5d%5d%5dn",temp

19、->name,temp->birthdayJ,temp->address,temp->marriage,temp->live,temp->sex);temp=temp->rc;return;精心整理elsetemp=temp->rc;ISearchByName(T->lc);SearchByName(T->rc);:卜.? / J .;voidSearchByBirthday(BiTreeT)/按照出生日期查詢成員名單if(T)1I . .'J -''if(strcmp(T->birthday,searc

20、hdata)=O)Printlnfo(T);.Jprintf("%-10s%-10s%-10s%5d%5d%5dn",T->name,T->birthday,T->ad dress,T->marriage,T->live,T->sex);count+;SearchByBirthday(T->lc);SearchByBirthday(T->rc);精心整理 voidAddChild(BiTre e&T)/某成員添加孩子if(T)if(strcmp(T->name,searchname)=O)count+;if(!T

21、->lc)printf("該成員還沒有結(jié)婚,不能添加孩子n");return;. .'I -''if(!T->sex)printf("不能為該家譜中的女性添加孩子n");Jreturn;elsetemp=(BiTree)malloc(sizeof(BiTNode);printf("請(qǐng)輸入添加孩子的姓名n");精心整理scanf("%s",temp->name);printf("請(qǐng)輸入添加孩子的出生年月(格式形如:2010-1-1)n");scanf(&q

22、uot;%s",temp->birthday);printf("請(qǐng)輸入添加孩子的家庭住址n");scanf("%s",temp->address);printf(" 請(qǐng)輸入添加孩子的婚姻狀況 0/1(0表示未婚,1表示已婚)n");J Y 1scanf("%d",&temp->marriage);printf("請(qǐng)輸入添加孩子的在世情況0/1(0表示去世,1表示在世)n");-J Xjf' .- scanf("%d",&te

23、mp->live);.Jif(!temp->live)printf("請(qǐng)輸入添加孩子的去世時(shí)間(格式形如:2010-1-1)n");scanf("%s",temp->livemassage);I |'A.I . .'I -''printf("請(qǐng)輸入添加孩子的性別0/1(0表示女,1表示男)n");scanf("%d",&temp->sex);temp->level=T->level+1;Jtemp->rc=T->lc->r

24、c;temp->lc=NULL;T->lc->rc=temp;printf("孩子添加成功n");return;精心整理AddChild(T->lc);AddChild(T->rc);voidAddWife(BiTre e&T)某成員添加妻子Iif(T)I f-_ ? / I s' *if(strcmp(T->name,searchname)=O)count+;if(T->lc).i -''printf("該成員已有妻子,可以通過修改的方式替換該妻子n");return;Jelse

25、temp=(BiTree)malloc(sizeof(BiTNode);printf("請(qǐng)輸入添加妻子的姓名n");scanf("%s",temp->name);printf("請(qǐng)輸入添加妻子的出生年月(格式形如:2010-1-1)n");精心整理scanf("%s",temp->birthday);printf("請(qǐng)輸入添加妻子的家庭住址scanf("%s",temp->address);printf("請(qǐng)輸入添加妻子的婚姻狀況scanf("%d

26、",&temp->marriage);printf("請(qǐng)輸入添加妻子的在世情況scanf("%d",&temp->live);if(!temp->live)printf("請(qǐng)輸入添加妻子的去世時(shí)間scanf("%s",temp->livemassage);n");0/1(0表示未婚,1表示已婚)n"); (0表示去世,1表示在世)n");I'7 X X '-L' - -. I I / ,* I J:L / ./ '(格式形如

27、:2010-1-1)n");printf("請(qǐng)輸入添加妻子的性別0/1(0表示女,1表示男)n");scanf("%d",&temp->sex); I temp->level=T->level;temp->lc=NULL;temp->rc=NULL;T->lc=temp;T->marriage=true;printf("妻子添加成功n");return;精心整理AddWife(T->lc);AddWife(T->rc);voidDeleteByName(BiTre

28、e&T)刪除某成員(若其還有后代,則一并刪除)Iprintf("PreOrderTraverse_recursionn");if(T)I f-_ ? / I s' *if(strcmp(T->name,searchname)=0)count+;T=NULL;return;: I'-1printf("%-10s%-10s%-10s%5d%5d%5dn",T->name,T->birthday,T->ad dress,T->marriage,T->live,T->sex);JDeleteByN

29、ame(T->lc);DeleteByName(T->rc);voidFixLevel(BiTreeT)精心整理if(T)if(strcmp(T->name,searchname)=O)count=T->level;FixLevel(T->lc);FixLevel(T->rc);jf"'/I I I:r-.:, /voidFixRelation(BiTreeT)/輸入兩人姓名,確定其關(guān)系intlevo,levt;charlevone50,levtwo50;printf("請(qǐng)輸入第一個(gè)人的姓名n");scanf("

30、;%s",searchname);strcpy(levone,searchname);JFixLevel(T);levo=count;if(levo=-1)printf("家譜無此人,請(qǐng)從新進(jìn)入 n");return;精心整理printf("請(qǐng)輸入第二個(gè)人的姓名n");scanf("%s",searchname);strcpy(levtwo,searchname);FixLevel(T);levt=count;if(levt=-1)printf("家譜無此人n");return;if(levovlevt)

31、printf("%s比 %s 大 %d¥ n",levone,levtwo,levt-levo);elseif(levo>levt)' I'-1printf("%s比 %s 大 %d¥ n",levtwo,levone,levo-levt);elseif(levo=levt)printf("%s 和 %s 平輩 n",levone,levtwo);JvoidShowAmend()printf("1.修改姓名 n");printf("2.修改出生年月n")

32、;printf("3.修改家庭住址n");精心整理printf("4.修改婚姻狀況n");printf("5.修改在世情況n");printf("6.修改性別n");printf("7.返回上一級(jí)n");printf("請(qǐng)輸入選項(xiàng)(1-7):");voidDoAmend(BiTree&T)while(1)system("cls");ShowAmend();scanf("%d",&choice);switch(choice

33、)' I'-1case1:printf(" 請(qǐng)輸入修改后的姓名:");Jscanf("%s",T->name);break;case2:printf("請(qǐng)輸入修改后的出生年月:");scanf("%s",T->birthday);break;精心整理case3:printf(" 請(qǐng)輸入修改后的住址:");scanf("%s",T->address);break;case4:printf("請(qǐng)輸入修改后的婚姻狀況:");sc

34、anf("%d", &T->marriage);break;case5:printf("請(qǐng)輸入修改后的在世情況:");scanf("%d", &T->live);if(!T->live)printf("請(qǐng)輸入本人的過世時(shí)間:”);scanf("%s",T->livemassage);break;J0表示女):”);case6:printf(" 請(qǐng)輸入修改后的性別(1表示男,scanf("%d", &T->sex);case

35、7:return;default:精心整理printf(”輸入非法,請(qǐng)重新輸入 n");break;voidAmendlnfo(BiTre e& T)修改某成員信息。if(T)I I”- ? .fif(strcmp(T->name,searchname)=O)count+;DoAmend(T);return;: I'-1Amendlnfo(T->lc);AmendInfo(T->rc);JvoidSequence(BiTreeT)/ 按出生日期對(duì)家譜中所有人排序if(T)精心整理BiTNodeList*temp;BiTNodeList*p;temp=

36、(BiTNodeList*)malloc(sizeof(BiTNodeList); temp->data=T;p=List;while(p->)j , Ifor(p=List;(p->next!=NULL )&&(strcmp(p->next->data->birthday,temp->data->birthday)<O);p=p->n ext);temp->next=p->next;: 'p->next=temp;Sequence(T->lc);Sequence(T->rc);.

37、i -''voidPrintSequence(BiTreeT)BiTNodeList*p;Jp=List;Sequence(T);printf("tttt排序結(jié)果 nn");PrintLine();printf("n");while(p->next!=NULL)精心整理printf("");Printlnfo(p->next->data);printf("t%-10s%-10s%-10s%5d%5d%5dn",p->next->data->name,p->

38、next->data->birthday,p->next->data->address,p->next->data->marr iage,p->next->data->live,p->next->data->sex);Ip=p->n ext;4 'E 一 l '-.J丿j*"'-printf("n");PrintLine();voidLocateTime()time_tt=time(0);' I'-1strftime(birthdayt

39、emp,64,"%Y-%m-%d",localtime(&t);voidBirthToday(BiTreeT)/打開一家譜時(shí),提示當(dāng)天生日的健在成員Jif(T)if(strcmp(T->birthday,birthdaytemp)=0)count+;精心整理printf("%sn",T->name);BirthToday(T->lc);BirthToday(T->rc);voidShowMenu()fPrintBat();4一 一 叫二< M 1 / H ,J- X)j J1 1 J 1:L.打 /:printf(&

40、quot;n");V*ff"PrintLine();/printf("n");printf("ttt歡迎進(jìn)入家譜管理系統(tǒng)nn");printf("1.顯示今天生日成員2.顯示家譜n");printf("3.顯示第n代所有人的信息4.按姓名查找成員n");printf("5.按出生日期查找成員6.為成員添加孩子n");printf("7.為成員添加妻子8.刪除成員n");printf("9.修改成員信息10.確定兩個(gè)人的關(guān)系n");pri

41、ntf("11.按出生年月排序家譜成員12.退出程序n");printf("n");PrintLine();printf("n");printf("已經(jīng)從文件讀入初始家譜信息,請(qǐng)輸入您的操作(1-12):"精心整理intmain(void)intchoice;FILE*in;in=fopen("7.out","r");BiTreeT;CreatBiTree(T,in);PreOrderTraverse_recursion(T);while(1)system("cls

42、");ShowMenu();scanf("%d",&choice);getchar();system("cls");switch(choice)Jcase1:LocateTime();count=0;BirthToday(T);if(count=0)精心整理printf(”今天家譜中沒有成員過生日n");system("pause");break;case2:ShowFamilyTree(T);system("pause");break;case3:printf("請(qǐng)輸入需要查

43、詢第幾代人:");count=0;scanf("%d",&Nth);ShowNth(T);if(count=0)printf("第4 代尚未有人。n",Nth);system("pause");break;case4:printf("請(qǐng)輸入要查詢?nèi)说男彰?quot;);scanf("%s",searchname);if(strcmp(T->name,searchname)=0)printf(" 此人為家譜的祖先,其信息為:n");printf("%-

44、10s%-10s%-10s%5d%5d%5dn",T->name,T->birthday,T->a精心整理ddress,T->marriage,T->live,T->sex);printf("他妻子的信息為:n");printf("%-10s%-10s%-10s%5d%5d%5dn",T->lc->name,T->lc->birthday,T->lc->address,T->lc->marriage,T->lc->live,T->lc->sex);temp=T->lc;if(temp->rc)Iprintf("他孩子的信息為:n"); *>* "I 叫._/:h&qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論