版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、任務:實現具有下列功能的家譜管理系統功能要求:1) .輸入文件以存放最初家譜中各成員的信息,成員的信息中均應包含以 下內容:也可姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),附加其它信息、但不是必需的。2) .實現數據的存盤和讀盤。3) .以圖形方式顯示家譜。4) .顯示第n代所有人的信息。5) .按照姓名查詢,輸出成員信息(包括其本人、父親、孩子的信息)6) .按照出生日期查詢成員名單。7) .輸入兩人姓名,確定其關系。8) .某成員添加孩子。9) .刪除某成員(若其還有后代,則一并刪除)。10) .修改某成員信息。11) .按出生日期對家譜中所有人排序。12) .打開一家譜時
2、,提示當天生日的健在成員。要求:建立至少 30個成員的數據,以較為直觀的方式顯示結果,并提供 文稿形式以便檢查。界面要求:有合理的提示,每個功能可以設立菜單,根據提示,可以完成 相關的功能要求。精心整理存儲結構:學生自己根據系統功能要求自己設計,但是要求相關數據要存 儲在數據文件中。測試數據:要求使用1、全部合法數據;2、局部非法數據。進行程序測試, 以保證程序的穩(wěn)定。測試數據及測試結果請在上交的資料中寫明;*/I#include<stdio.h>一| 廣if 5l'嚴 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;/ 標記intlevel;charname50; 姓名charbirthday50; 生日charaddressMAXN;住址精心整理boolmarriage;/ 婚否(true表示結婚,false表示沒結婚) boollive;/ 建在(true表示活著,fal
4、se表示過世) boolsex;/ 性別(true表示男,false表示女) charlivemassage50;死亡日期(如果其已經死亡)Elemtypedata;/ structBiTNode*lc,*rc;IBiTNode,*BiTree;/樹的相關操作. 一 "i ''".J“7 X 才"T"二_ charnametemp50;姓名charbirthdaytemp50;生日charaddresstempMAXN;住址boolmarriagetemp;/ 婚否(true表示結婚,false 表示沒結婚) boollivetemp;/
5、 建在(true表示或者,false表示過世) boolsextemp;' I'-1charlivemassagetempMAXN;死亡日期(如果其已經死亡)charch;/ 額外使用 intleveltemp;/ 人的代數 intNth;/ 顯示第n代人時要用 charsearchdata50;charsearchname50;intcount;/ 計數 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("該成員還沒有結婚,不能添加孩子n");return;. .'I -''if(!T->sex)printf("不能為該家譜中的女性添加孩子n");Jreturn;elsetemp=(BiTree)malloc(sizeof(BiTNode);printf("請輸入添加孩子的姓名n");精心整理scanf("%s",temp->name);printf("請輸入添加孩子的出生年月(格式形如:2010-1-1)n");scanf(&q
22、uot;%s",temp->birthday);printf("請輸入添加孩子的家庭住址n");scanf("%s",temp->address);printf(" 請輸入添加孩子的婚姻狀況 0/1(0表示未婚,1表示已婚)n");J Y 1scanf("%d",&temp->marriage);printf("請輸入添加孩子的在世情況0/1(0表示去世,1表示在世)n");-J Xjf' .- scanf("%d",&te
23、mp->live);.Jif(!temp->live)printf("請輸入添加孩子的去世時間(格式形如:2010-1-1)n");scanf("%s",temp->livemassage);I |'A.I . .'I -''printf("請輸入添加孩子的性別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("請輸入添加妻子的姓名n");scanf("%s",temp->name);printf("請輸入添加妻子的出生年月(格式形如:2010-1-1)n");精心整理scanf("%s",temp->birthday);printf("請輸入添加妻子的家庭住址scanf("%s",temp->address);printf("請輸入添加妻子的婚姻狀況scanf("%d
26、",&temp->marriage);printf("請輸入添加妻子的在世情況scanf("%d",&temp->live);if(!temp->live)printf("請輸入添加妻子的去世時間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("請輸入添加妻子的性別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)/輸入兩人姓名,確定其關系intlevo,levt;charlevone50,levtwo50;printf("請輸入第一個人的姓名n");scanf("
30、;%s",searchname);strcpy(levone,searchname);JFixLevel(T);levo=count;if(levo=-1)printf("家譜無此人,請從新進入 n");return;精心整理printf("請輸入第二個人的姓名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.返回上一級n");printf("請輸入選項(1-7):");voidDoAmend(BiTree&T)while(1)system("cls");ShowAmend();scanf("%d",&choice);switch(choice
33、)' I'-1case1:printf(" 請輸入修改后的姓名:");Jscanf("%s",T->name);break;case2:printf("請輸入修改后的出生年月:");scanf("%s",T->birthday);break;精心整理case3:printf(" 請輸入修改后的住址:");scanf("%s",T->address);break;case4:printf("請輸入修改后的婚姻狀況:");sc
34、anf("%d", &T->marriage);break;case5:printf("請輸入修改后的在世情況:");scanf("%d", &T->live);if(!T->live)printf("請輸入本人的過世時間:”);scanf("%s",T->livemassage);break;J0表示女):”);case6:printf(" 請輸入修改后的性別(1表示男,scanf("%d", &T->sex);case
35、7:return;default:精心整理printf(”輸入非法,請重新輸入 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)/ 按出生日期對家譜中所有人排序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排序結果 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)/打開一家譜時,提示當天生日的健在成員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歡迎進入家譜管理系統nn");printf("1.顯示今天生日成員2.顯示家譜n");printf("3.顯示第n代所有人的信息4.按姓名查找成員n");printf("5.按出生日期查找成員6.為成員添加孩子n");printf("7.為成員添加妻子8.刪除成員n");printf("9.修改成員信息10.確定兩個人的關系n");pri
41、ntf("11.按出生年月排序家譜成員12.退出程序n");printf("n");PrintLine();printf("n");printf("已經從文件讀入初始家譜信息,請輸入您的操作(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("請輸入需要查
43、詢第幾代人:");count=0;scanf("%d",&Nth);ShowNth(T);if(count=0)printf("第4 代尚未有人。n",Nth);system("pause");break;case4:printf("請輸入要查詢人的姓名:");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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色交通合伙清算合作協議3篇
- 二零二五年度全款購房合同:房地產項目投資并購及整合協議3篇
- 2025年度農業(yè)現代化貸款擔保協議3篇
- 2025年度全新官方版二零二五年度離婚協議書與子女監(jiān)護權協議3篇
- 二零二五年度知識產權侵權律師費協議3篇
- 二零二五年度農村土地占用與農村文化傳承合同協議
- 2025年度航空航天公司干股分紅與飛行器研發(fā)合作協議3篇
- 二零二五年度衛(wèi)浴安裝與智能家居系統集成與優(yōu)化服務協議3篇
- 二零二五年度太陽能電池板加工服務合同3篇
- 二零二五年度物聯網解決方案公司轉讓合同3篇
- 社會學概論期末復習題及答案
- 五輸穴與臨床應用課件
- 物料吊籠安全技術標準
- 工程項目施工方案比選
- 盾構始發(fā)施工技術要點PPT(44頁)
- 甲烷(沼氣)的理化性質及危險特性表
- 某鋼鐵有限責任公司管理專案報告書---提升配電系統管理水平降低變配電裝置事故率
- 促銷費用管理辦法15
- 《三國演義》整本書閱讀任務單
- GB 13296-2013 鍋爐、熱交換器用不銹鋼無縫鋼管(高清版)
- 中醫(yī)院中藥的飲片處方用名與調劑給付規(guī)定
評論
0/150
提交評論