版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、24洛陽理工學(xué)院課程設(shè)計報告課程名稱設(shè)計題目數(shù)據(jù)結(jié)構(gòu)課程設(shè)計家譜管理系統(tǒng)業(yè)級號名期日成 專班學(xué)姓完計算機(jī)科學(xué)與技術(shù)B150405B15080822宋士龍2016/1 30 H課 程設(shè)計 任務(wù)書設(shè)計題目:家譜管理系統(tǒng)設(shè)計內(nèi)容與要求:【問題描述】:實現(xiàn)具有下列功能的家譜管理系統(tǒng).輸入文件以存放最初家譜中各成員的信息,成員的信息中均應(yīng)包含以下內(nèi) 容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加 其它信息、但不是必需的。.實現(xiàn)數(shù)據(jù)的存盤和讀盤。.顯示家譜。.按照出生日期查詢成員名單。.按照姓名查詢,輸出成員信息(包括其本人、父親、孩子的信息)。.修改某成員信息?!净疽蟆浚航?/p>
2、面要求:有合理的提示,每個功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān) 的功能要求。存儲結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計,但是要求相關(guān)數(shù)據(jù)要存儲在 數(shù)據(jù)文件中。測試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、局部非法數(shù)據(jù)。進(jìn)行程序測試,以 保證程序的穩(wěn)定。測試數(shù)據(jù)及測試結(jié)果請在上交的資料中寫明。指導(dǎo)教師:年 月 日課程設(shè)計評語成績:指導(dǎo)教師:年 月 日一、算法思想本程序是一個管理家譜的系統(tǒng),通過這個系統(tǒng)可以對家族成員進(jìn)行創(chuàng)建、顯示、査 找、修改、以及保存家譜和讀取家譜功能。該系統(tǒng)分為以下幾個模塊,分別是:創(chuàng)建家譜, 顯示家譜、按姓名和生日查找家庭成員、修改家譜、存盤、讀盤以及退出系統(tǒng)。本程序用到 的
3、存儲形式為多叉樹,因為家譜中每個人既有父母又有孩子,而且孩子的個數(shù)并不確定,所 以用多叉樹來存儲最為介適。用多叉樹來存儲,就用用到多叉樹的遞歸創(chuàng)建及遞歸遍歷。因 為是多叉樹,所以遍歷時用廣度優(yōu)先搜索合適。本函數(shù)最主要的思想就是遞歸調(diào)用,每個子 函數(shù)中都會用到遞歸。左義結(jié)構(gòu)體時給定指針數(shù)組的最大容量,來規(guī)左家譜中最多可以存多 少人。左義一個家族樹的指針變量用來當(dāng)每個子函數(shù)的參數(shù),從而將其返回到主函數(shù)中。二、模塊劃分int main():主函數(shù)VOid CreatTree(TreeNOde *Tree):創(chuàng)建家族樹VOid OUtPUtAII(TreeNOde *Tree):顯示家譜VOid Me
4、nUe(TreeNOde *Tree):主菜單VOid SUbMenUeI(TreeNOde * Tree):副菜單(修改選項菜單)VOid Change(TreeNOde * Tree):修改家譜TreeNOde * SearChTree(TreeNOde *Tree,char namezint length):按照姓名 查找家譜成員TreeNOde * SearChTreel(TreeNOde *Tree,char birth,int length):按照生 日查找家譜成員VOid OUtPUtMeSSage(TreeNOde * Tree,char nameJnt length):輸出按
5、姓 名査找到的家譜成員VOid OUtPUtMeSSageI(TreeNOde * Tree,char birth,int length):輸出按生 日查找到的家譜成員VOid SaVeFamiIy(TreeNOde *root):保存家譜VOid ReadFamiIy(TreeNOde *root):讀取家譜三、數(shù)據(jù)結(jié)構(gòu)typedef StrUCt TreeNOdeint ChiIdNum;/記錄這個人擁有幾個兒女Char Name20;/記錄這個人的姓名Char birthday20;/生日int marriage;/婚否(1表示結(jié)婚,O表示沒結(jié)婚)intdeath;/生死(1表示活著,O
6、表示過世)Char Kind;/標(biāo)示節(jié)點的種類有女G男BChar address100;/住址Char IiVemaSSage50;/死亡日期(如果其已經(jīng)死亡)StrUCt TreeNOde *NextNode20; /記錄這個人的兒女StrUCt TreeNOde * Parent;記錄這個節(jié)點的父節(jié)點JTreeNodez *tree;四、測試笫一組數(shù)據(jù)為:爺爺,奶奶,爸爸,媽媽,我,二叔,二嬸,姐姐,三叔,三嬸,弟弟一共 三代口個人。其中爺爺是根節(jié)點,奶奶為爺爺?shù)呐渑?,同時也是爺爺?shù)牡谝粋€后繼節(jié)點。 爸爸,二叔,三叔為爺爺?shù)淖优0职值呐渑际菋寢?,爸爸的子女是我。二叔?配偶是二嬸,子女是
7、姐姐。三叔的的配偶是三嬸,三叔的的子女是弟弟。進(jìn)入程序之后,首先進(jìn)行創(chuàng)建家譜,然后進(jìn)行存盤,之后進(jìn)行修改和查詢等 步驟。退出程序在進(jìn)入程序時,進(jìn)行讀盤。之后在進(jìn)行其他操作,程序完成之后 退出即可。圖1家族樹笫一組數(shù)據(jù)測試截圖為:i C:U$er$ddmlnDeSlrtOPVkecheogexe4rx3*-*-:X-:-t-x-t-*姓名:爺爺出生日務(wù):1944.09.20冢庭住址I山東省臨沂市性別:B男妾子姓乞:奶奶是否吳在(1 -兌在O去世: 0第1個亍女的牲名:爸爸 出生日期:1963.03.06家庭住址:山東省臨沂市 性別喝第2個手女的姓名.二叔 岀生日期:1970. OS. 05戀庭住
8、址:山東省臨沂TlJ性別B勇第3個子女的姓名:三寂 出生日期:1977.02. 148妄寡住址:山東省臨沂審 性別B刃- Ab 一爸名女 *:爸姓子 : 卜 -*名子Iz 一姓S第r冷*H)M4審M(N!媽媽是普住址山東省蹄市勺姓名我 出生日期1996.10. 23京疙住址:山東省臨沂市性別:B男性別B刃*料*M(v榊ri996o23冬慮住址:山東省臨沂市性別- ! 一叔名女一姓妾第-c8* 88*8=岀生日期:1970. 08. 05家庭住址:是否5?在(I-譴在,O-): 1:姐姐 出生日期:1991.02.14寒庭住址山東省臨沂巾:山東省臨沂市性別:B男 性別G女4:用:*卄 88 甘8
9、8*:甘88甘$8*姓名:姐姐岀生日期:1991.02. 14家庭住址,山東省臨沂巾 性別:G女至今沒有配陽和子女諄蠢才是翩瞿礙 嚴(yán)如山東省臨沂市第1個子女的姓名關(guān)曲 出生日期:2001. 03.25妄庭住址:山東省臨沂市性別:B男性別B男做獲音亠生/魚卑 世寶豆期:?0010325家庭住址:山東省臨沂市圖2顯示家譜 CzUsersodinDesktopkecheg.exe*=*&我迎使用家咲管理寒統(tǒng)*3*A:輸入妄譜侑總丟立機(jī) B :輸出整個京譜佶息C:按出生日期査找某人 D :按姓名査找某人 E:修該某個人的信息 p:#aG:讀盤H:退出整個程序D請輸入你要去找的人的姓名: 弟弟性別:B男
10、是否健在(l-.是否健在1-健在, 是否健在U 健在是否健在1 健在.是否健在1 健在是否健在1 健在是否健在1 健在是否健在U 健在, 是否(S(l-t?在,是否健在 健在在在在 卜1-1- s 在在在 tttil 否否否 矍是 0去世):0 A0去世):0 O-去世h O0去世):0O 去世h 10 去世):1O-tt): 1O 去世h 10 去世)* 1O 去世h 1O 去世* 1O 去惟):10 去世):17您所要找的人己經(jīng)找到(SSfe)下所示:姓名:弟弟出生日期:2001.03.25姦庭住址】山東省他沂市性別:B男是否健在(I-傕左0去世)* 1母親姓名:三蚌條鎗至今玉義有配偶和孩
11、子微軟拼音半:圖3按照姓名查找家族成員 C U er sadminDes kt opkec bmg.exe*e選使用涼族管理妄統(tǒng)甘8打P桿=A:靠入家譜信息達(dá)立林B:鴛岀矗個寂諾信息C:確岀生B期言找艾人D:技姓名査找冬人E:修改茶個人的信息F:存盤G:讀盤H:ig出整個程扌*保存家譜C*=J入文件名及保存CLJE(eg: Dexaple. txt) DJIAPU. txt 新逹文伴成功文件及苴路徑為D: WJI.API;. txt圖4存盤第二組數(shù)據(jù)為:圖4王家家族樹第二組數(shù)據(jù)測試截屏為: , Czser%adminDesktOPvCeCbengGce:*笑一*請選擇你的操作*=*A:修改個人
12、的恰息一 7B:烽改父 .e- *8C:修改子女的信患、8*D:退 出-*8*S渚隸入倏改的姓名:如臬不需要條改就輸入0然后按EnterS 王小二是否要修改性別:如采秸要就輸入T*不離要傷改就報入0慾后按Entera 0 請治入修改的出生日期:如果不需旻僅改就為入0於后汝EntET徒逖續(xù)渚隸入倏改的左庭地址:如累不需頁修改就輸入P然肓按Enteri 0個人信息侈改成功請按EnlM笹維續(xù)隹作微軟拼音半:圖6修改某個人的具體信息 , CAUSefSvbdminDesktopkeheng.ee*r冷”歡IS使用康族管理系統(tǒng)林榊比耳IE 人立息共患 建信找人信iss序 信塞期找人 程 譜個m個妄整生名
13、基 空 入出出姓改盤盤岀 怨按修存讀退 A:B:UD:E:F:GH:請輸入你要玄找的出生日期:2008$*&*8(S所要找的人己經(jīng)找到信息如下所示:姓名:王小二岀生日期:2008家庭住址:洛陽性別:B男彼軟拼音半:圖7按照生日查找某人 C:UseriadminDwktopkecbeng-ce* 迎使用 竅族管 理系 統(tǒng)*A:輜入家譜信息逢立檢B.旃岀整個U按出蘭日期宜找某人 D:技姓名音找其人G:讀盤H:退出整個樓序E條改英個人的f忌 FE昱心砲讀取家譜MC豹入文件名及其路徑U便從中汝取窺譜文件名及其(eg: DlWeXanpie. txt): EJI. txt圖8讀盤五、源程序#in ClU
14、de #include #include #ifdef WIN32 #define CLEAR SyStem(,cls,1)#define TiPFOrSaVeFiIePOSitiOn Printf(,tt 輸入文件名及保存位置(eg: D:Wexample.txt):,)#define TiPFOrReadFilePOSitiOn Printf(I,tt 文件名及其路徑(eg: D:Wexample.txt): ,l)#else#define CLEAR SyStem(,clear)#define TiPFOrSaVeFiIePOSitiOnPrintf(,tt輸入文件需及保存位宜(eg:h
15、omeiongexample.txt):,)#define TiPFOrReadFiIePOSitiOn Printf(,ltt 文件名及其路徑(eg: homeiongexample.tt):)#endif#define maxFileNameLen 50/保存的文件名的最大長度int FLAG=O;int a=l;typedef StrUCt TreeNOdeint ChiIdNum;/記錄這個人擁有幾個兒女Char Name20;/記錄這個人的姓名Char birthday20;/生日int marriage;/婚否(1表示結(jié)婚,O表示沒結(jié)婚)intdeath;/生死(1表示活著,O表示
16、過世)Char Kind;/標(biāo)示節(jié)點的種類有女G男BChar address100;/住址Char IiVemaSSage50;/死亡日期(如果其已經(jīng)死亡)StrUCt TreeNOde *NextNode20; 記錄這個人的兒女StrUCt TreeNOde * Parent;記錄這個肖點的父盯點JTreeNodez *tree;VOid CreatTree(TreeNOde *Tree);VOiCl OUtPUtAll(TreeNOde *Tree);VOid MenUe(TreeNOde *Tree);VOld SUbMenUeI(TreeNOde * Tree);VOid SUbMen
17、Ue2(TreeNOde *Tree);VOid Change(TreeNode * Tree);VOid AddNeW(TreeNOde * Tree);TreeNOde * SearChTree(TreeNOde *Treezchar nameJnt Iength);TreeNOde * SearChTreeI(TreeNOde *Tree,char birthZint Iength);VOid OUtPUtMeSSage(TreeNOde * TreeJChar namezint Iength);VOid OUtPUtMeSSageI(TreeNOde * TreeZChar birth
18、Jnt Iength);VOid SaVeFamily(TreeNOde *root);VOid ReadFamily(TreeNOde *root);Int main()/主函數(shù)TreeNOde *Tree;/TreeNOde *Treel;/Treel=&(*Tree);Tree=(TreeNOde *)malloc(sizeof(TreeNode);Tree-Parent =NULL;StrCPy(Tree-Name,0);Menue(Tree);return O;VOid MenUe(TreeNOde *Tree)/輸岀主菜單*TreeNode *Treel;TreeI=&Tree;*
19、/Char c;Char name20;Char birth20;While(I)SyStem(cIsh);Printf(,lt);Pnntf(Hnntt* 歡迎使用家族管理系統(tǒng) *nn);Printf (,nttA:輸入家譜信息建立樹);Printf(,nttB:輸岀整個家譜信息);Printf(,nttC:按岀生日期査找某人u);Printf(, nttD:按姓名查找某人u);Printf (,nttE:修改某個人的信息u);Printf(,nttF:存盤);G:讀盤Printf (,nttPrintf (,nttH:退出整個程序nt);c=getchar();SWitCh(C)CaSe
20、,A,:TreeNOde * NewNode;NeWNOde=(TreeNOde *)malloc(sizeof(TreeNode);Pnntf(Hnt請輸入姓名門;scanf(,%s,zTree-Name);Pnntf(,nt請輸入性別女G男B:M);getchar();scanf,%c, &(Tree-Kind);Tree-Parent=NewNode;Tree-Parent=NULL;/CreatTree(Tree); /Pnntf(Hnt-家譜圖已經(jīng)建立成功nnu);Printf(,lnnt請按 Enter 鍵繼續(xù)操作,);getchar();break;CaSe ,B,:if(str
21、cmp(Tree-Name,O)=O)Pnntf(Hnt家譜圖的多叉樹尚未建立請先建立樹r); getchar();break;Printf(Ilnnt整個家譜的主要信息如下:);OutPutAII(Tree);getchar();break;CaSe ,C,:if(strcmp(Tree-birthdayz,O)=O)Printf(,nt家譜圖的多叉樹尚未建立請先建立樹n); getchar();break;Printf(Ilnt請輸入你要査找的出生日期scanf(,%s,zbirth);OUtPUtMeSSagel(SearChTreeI(Treezbirthj20)zbirth,20);
22、Printf (,nnt*-*一*一*-*-*-*-*-*ntu);getchar();break;CaSe ,D,:if(strcmp(Tree-Name,O)=O)Printf(,nt家譜圖的多叉樹尚未建立請先建立樹n); getchar();break;Printf(,nt請輸入你要査找的人的姓名:nf,);SCa nf(%s 蔦 name);OUtPUtMeSSage(SearChTree(Tree, name,20),name,20);Pnntf (,nnt*-*-*-*-*-*-*-*-ntu);getchar();break;CaSe ,E,:if(strcmp(Tree-Nam
23、e,O,)=O)Printf(,t家譜圖的多叉樹尚未建立請先建立樹n);getchar();break;Cha nge(Tree);getchar();break;CaSe ,F,:if(strcmp(Tree-Name,O,)=O)Printf(,nt家譜圖的多叉樹尚未建立請先建立樹n);getchar();break;SaveFamiIy(Tree);getchar();break;CaSe ,G,:*if(strcmp(Tree-Name,O,)=O)Printf(,nt家譜圖的多叉樹尚未建立請先建立樹n);getchar();break;*/ReadFamily( &Tree);get
24、char();break;CaSe ,H:Printf(,lnnt本次服務(wù)到此結(jié)束);Printf(,lnt歡迎下次使用,);Printf(,nt謝謝nnu);break;CaSe ,n,:break;default:Printf(,1nnt-一對不起!你的選擇不在服務(wù)范圍之內(nèi)!);Printf(,nt請您再次選擇所需的服務(wù)項!);Printfc、nt謝謝n t);getchar();break;if (c=,H, I c=,fl)break;getchar();VOid CreatTree(TreeNOde *Node) /創(chuàng)建樹int i;TreeNOde *NewNode;NeWNOde
25、=(TreeNOde *)malloc(sizeof(TreeNode);Node-NextNode0=NewNode;Node-NextNode0=NULL;Printf(,nt請輸入出生日期:”);SCanf(,%s,IzNOde-birthday);Pnntf(,nt 請輸入家庭住址:H);getchar();scanf(,%sZNOde-address);Printf(,nt請輸入是否建在(I-是或O-否):);scaf(,%d,z8t(NOde-death);if(Node-death=0)Printf(,nt請輸入去世日期:);SCa nf(”%s:Node livemassage
26、);else if(Node-death=,l,)Printf(,nt 仍然建在);Printf(,nt請輸入s的配偶的姓名(輸入0代表沒結(jié)婚NOde-Name);SCanf(I,%s,NewNode-Name);訐(StrCmP(NeWNOde-Name,0,)!=0)printf(llt請輸入配偶的出生日期:);scanf(,%s,ZNeWNOde-birthday);Printf(,nt 請輸入家庭住址:,)jgetchar();scanf(%s,NewNode-address);Printf(,nt請輸入是否建在(1 是或O否):);scanf(,%d,&(NeWNOde-death)
27、;if(NewNode-death=0)Printf(,nt請輸入去世日期:);SCan f(,%snZNeWNOde-livemassage);else if(NewNode-death=,l,)Printf(,nt 仍然建在);Printf(IInt請輸入s的子女的數(shù)目(當(dāng)子女輸入O時便停止輸入該成員有關(guān)信 息):11ZNOde-Name);scanf(%d,1,&(NOde-ChildNum);if(Node-ChildNum)=0&StrCmP(NeWNOde-Name,0,)=0)return;if(Node-Kind=,G, Node-Kind=,g,)NeWNOde-Kind=,
28、B,;elseNeWNOde-Kind=,G,;NeWNOde-Child Num=O;NeWNOde-NextNode0=N U LL;Node-NextNode0=NewNode;Node-NextNode0-Pare nt=Node;/ 孩子的父母 for(i=l;iChildNum;i+)NeWNOde=(TreeNOde *)malloc(sizeof(TreeNode);a+;Pnntf(,t 請輸入s 的第d 子女的名字:,lZNOde-NameJ);scanf(,%s,NewNode-Name);Pnntf(,lnt請輸入s的第d子女的性別女G男B:,NOde-Name,i);
29、getchar();SCanf (,%c,z 8tNewNode-Kind);NeWNOde-ChildNum=-l;NeWNOde-Pare nt= Node;Node-NextNodei=NewNode;CreatTree(NOde-NetNodei); /從子女的數(shù)目開始VOid OUtPUtAII(TreeNOde *Tree)int i, flag=O;Printf(,nt*HjPrintf(,t 姓名:%S出生日期:%S家庭住址:%s 性別:%cl,zTree-Name,Tree-birthday,Tree-addreSSZTree-Kind);if (Tree-Kind=,G,
30、11Tree-Kind=,g,)fag=l;Printf(II 女冷;elsePrintf (男);Printf(,t是否健在健在,O-去世):);if(Tree-death=l) Printf(I1);else if(Tree-death=0) Printf(,0);訐(!(Tree-NextNode0)Printf(,nt至今沒有配偶和子女n);return;if(flag=l)Printf(,nt 丈夫姓名 %s,zTreNeXtNOde0-Name);elsePrintf(Hnt 妻子 姓名 r%s,Jree-NextNode0-Name);Pnntf(,t是否健在健在,O-去世):)
31、;if(Tree-death=l) Printf(1,1);else if(Tree-death=O) Printf(,0);for(i=l;iChildNum;i+)Printf(,nt第d個子女的姓名:s 岀生日期:%S 家庭住址:%s 性 別 %c,JZTree-NextNodei-NameJree-NextNodei-birthdayZTree-NextNodei-addreSSZTree-N etNodei-Kind);if (Tree-NextNodei-Kind=,G,I ITree-NetNodei-Kind=,g,)Printf(*);elsePrintf(男“);Print
32、f(,t是否健在健在,O-去世):);if(Tree-death=l) Pnntf(,1);else if(Tree-death=O) Printf(,0n);Pnntf(Ilnt);for(i=l;iChildNum;i+)OUtPUtAII(Tree-NextNodei);TreeNOde * SearChTree(TreeNOde *Treezchar nameJnt Iength)int i;TreeNOde *NewNode;if(strcmp(TreeNamez name)=。)if(length=O)FLAG=I;elseFLAG=O;return Tree;if(Tree-Ne
33、xtNode0=NULL)return NULL;for(i=0;iChildNum;i+)if (i=0)NeWNOde=SearChTree(Tree-NextNodei,name,0); elseNeWNOde=SearChTree(Tree-NextNodeiZnameZ20);if (NewNodei=NULL)return NewNode;return NULL;VOid OUtPUtMeSSage(TreeNOde * TreezChar name,int Iength)int flag=0J;TreeNOde *NewNode;Printf(,nnt*-*-*一*-*-*一*-
34、*-*-*-);If(Tree=NULL)Pnntf(,nnt*該家譜圖中沒有s這個人的信息請確認(rèn)是否輸入錯誤*1,narne);return;Printf(,nnt您所要找的人已經(jīng)找到信息如下所示:);Printf(nt姓 名:s出生 日期:s家庭 住址:%s 性別:c: name.Tree birthdayrTree-address,Tree-Ki nd);if (Tree-Kind=,G, ITree-Kind=,g,)fag=l;標(biāo)記他(她)的性別Printf (女”);elsePnntf(IIW);Printf(,t是否健在健在,O-去世):);if(Tree-death=l) Pr
35、intf(I1);else if(Tree-death=O) Printf(0);NeWNOde=Tree-Parent;If(FLAG=I)if(flag=l)Printf(nnt她是嫁入此家族的所以親生父母信息不在家譜內(nèi)包括ll);Printf(,t 丈夫姓名:s:NeWNOdeName);elsePrintf(,1nnt他是入贅此家族的所以親生父母信息不在家譜內(nèi)包括);Printf,lnt 妻子姓名:%szNewNode-Name);訐(NeWNOde-ChildNum)O) /判斷他(她)是否有孩子Printf(IInt的孩子的信息如下:);/輸出他(她)的孩子的信息 for(i=l;
36、iChildNum;i+)Printf(,nt 姓名:s 性另IJ:ZNeWNOde-NextNodei-Name);if (NeWNOde-NextNodei-Kind=,G, 11 NeWNOde-Kind=,g,)Printf(女”);elsePrintf(男”);Printf(,t是否健在健在,O-去世):,);if(Tree-death=l) Pnntf(,ln);else if(Tree-death=O) Printf(O1);return;If(NewNode=NULL)/判斷它是不是根節(jié)點如果是的話就沒有父母兄弟信息Printf(nt是這個家譜圖里最年長的人,name);els
37、eif (NeWNOde-Kind=,G, 11 NeWNOde-Kind=,g,) 判斷父親節(jié)點是父親還是母親Printf(nt母親 姓洛:s:NeWNode-Name);/輸出他(她)的父母親的信息Printf(,t 父親姓名 %s,NewNode-NetNode0-Name);Printf(,t 母親姓名:s:NeWNOdeNetNode0卜Name);Printf(,t 父親姓名:s:NeWNOCleName);if(Tree-NextNode0 !=NULL) /判斷他(她)是否有配偶if(fa滬“)輸出他(她)的配偶的信息Printf(,nt 丈夫 姓 %s,zTree-NextN
38、ode0-Name);Printf,nt 妻子姓名:%szTree-NextNode0-Name);if (Tree-ChildNumO) /J 斷他(她)是否有孩子Printf(I,nt的孩子的信息如下:”);/輸出他(她)的孩子的信息 for(i=l;iChildNum;i+)Printf(,nt 姓名:s 性別:Jree-NextNodei-Name);if (Tree-NextNodei-Kind=,G, ITree-Kind=,g,)Printf(,*h);elsePrintfr男”);Pnntf(,t是否健在健在,O-去世):);if(Tree-death=l) Printf(,1
39、,);else if(Tree-death=O) Printf(,0);2424elsePrintf(,t%s 至今還沒有孩子,name);elsePrintf(,nt%s 至今還沒有配偶和孩子n,Tree-Name);TreeNOde * SearChTreeI(TreeNOde *Treezchar birth,int Iength)int i;TreeNOde *NewNode;if(strcmp(Tree-birthdayZbirth)=O)if(length=O)FLAG=I;elseFLAG=O;return Tree;if(Tree-NextNode0=NULL)return N
40、ULL;for(i=0;iChildNum;i+)if (i=0)NeWNOde=SearChTreeI(Tree-NextNodeiZbirthz0); elseNeWNOde=SearChTreeI(Tree-NetNodeiZbirth,20);if (NewNodei=NULL)return NewNode;return NULL;VOid OUtPUtMeSSageI(TreeNOde * TreezChar birth,int Iength)int flag=0J;TreeNOde *NewNode;Printf(,nnt*-*-*一一*-*-*-*-*-*-);If(Tree=N
41、ULL)Pnntf(,lnnt*該家譜圖中沒有岀生日期為s這個人的信息請確認(rèn)是否輸入錯誤*n,birth);return;Printf(,nnt您所要找的人已經(jīng)找到信息如下所示:);Printf(nnt姓名:s 出生 日期:s 家庭 住址:%s 性別:c,Tree-Name,Tree-birthday,Tree-address,Tree-Kind);if (Tree-Kind=lG, ITree-Kind=,g,)fag=l;標(biāo)記他(她)的性別Printf(,);elsePrintf(”男);VOid Change(TreeNOde * Tree) /修改某個人的彳言息Char name20;
42、TreeNOde * NewNode;Printf(,nt請輸入你要修改的人的姓名:nf,);scanf(,%s,zname);NeWNOde=SearChTree(Tree,name,20);if(NewNode= N U LL)Pnntf(Hnnt*該家譜圖中沒有s這個人的信息請確認(rèn)是否輸入錯誤*,narn);return;elseSUbMenUeI(NeWNode);VOid SUbMenUeI(TreeNOde * Tree)/輸出副菜單Char c;it fag,i;Char name20;Char birth20;Char addressl50;Char Parent220;Tre
43、eNOde * NewNode;getchar();WhiIe(I)SyStemcis”);Printf(,f,);Printf(,nnt-*請選擇 你的操 作*Printf(,nb-*-*-*:修改個人的信息DD,);Printf(,nb-*-*-*-B:修改父母的信息粒D紅,);Printf(nt-*-*-C:修改子女的信息粒紅,);Pnntf (,rt-*-D:退岀nt);c=getchar();SWitCh(C)CaSe ,A,:Printf(,nnt請輸入修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nf,);SCa nf( ,%s,name);if(strcmp(name
44、z,O) !=0)StrCPy(Tree-Namez name);Printf(,1nnt是否要修改性別:如果需要就輸入T不需要修改就輸入O然后按Enter鍵 繼續(xù) nt);SCanf (%d:&flag);if (flag=l)if(Tree-Kind=,G, ITree-Kind=lg,)Tree-Kind=,B;else Tree-Kind=,G,;Printf(,1nnt輸入修改的岀生日期:如果不需要修改就輸入0然后按Enter鍵繼續(xù) nt);scanf(%s,birth);if(strcmp(birth,O,)!=O)StrCPy(Tree-birthdayzbirth);Print
45、f(,1nnt輸入修改的家庭地址:如果不需要修改就輸入0然后按Enter鍵繼續(xù) nt);SCanf(I,%sladdressl);if (StrCmP(addresslz,O) !=0)StrCPy(Tree-addreSSzaddreSS1);Printf(,nnt個人信息修改成功);break;CaSe ,B,:if(TreeParent=NULL) 判斷是不是頭節(jié)點Printf(Ilnt是這個家譜圖里最頂端的人沒有父母信息!,name);break;if (FLAG=I)判斷是不是入贅或加入此間的if(Tree-Kind=,G ITree-Kind=g,)Printf(,1nnt她是嫁入
46、此間的所以父母信息不在家譜內(nèi)包括”);elsePrintf(nnt他是入贅此間的所以父母信息不在家譜內(nèi)包括”);break;if(Tree-Parent-Kind=,G, Tree-Parent-Kind=lg,)StrCPy(Parent0/* 母親”);StrCPy(Parent 父親”);elseStrCPy(Parent 0/1 父親,);StrCPy(ParentI/1 母親,);Printf(nnt請輸入s要修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù)nt,Parent0);SCa nf( ,%s, name);if(strcmp(name,O,)!=O)StrCPy(
47、Tree-Parent-Name, name);Printf(,nnt i輸入s要修改的姓名:如果不需要修改就輸入0然后按Enter鍵繼續(xù) nt,Parent(IJ);SCanf(%s,name);if(strcmp(namez,0l,)!=0)StrCPy(Tree-Pare ntNextNode0 卜 Name, name);Printf(,lnnt-父母的信息修改成功,);break;CaSe ,C,:if(Tree-ChildNum=O)Printf(,nt至今還沒有子女);break;if (TreeParent !=NULL)if (StrCmP(Tree-Name,TreePar
48、ent-NextNode0-Name)=0)如果他是入贅或者是嫁入的就需用配偶節(jié)點完成修改Tree=Tree-Pare nt;for(i=l;iChildNum;i+)Printf(,1nnt請輸入s修改的姓名:如果不需要修改就輸入0然后按Enter 鍵繼續(xù)nt,zTreNetNodei-Name);scanf(,%s,Zname);if(strcmp(name,O)!=O)StrCPy(Tree-NetNodei-Namez name);Printf(nnt是否要修改性別:如果需要就輸入T不需要修改就輸入。然 后按Enter鍵繼續(xù)nt);SCanf(,%dl,flag);if (flag=l
49、)if(Tree-NextNodei-Kind=G, ITree-NetNodei-Kind=,g,)Tree-NetNodei-Kind=,B,;else Tree-NetNodei-Kind=,G,;Printf(,t子女的信息修改成功);break;CaSe ,D,:Printf(,nnt本項服務(wù)到此結(jié)束);break;CaSe ,n,:break;default:Pri ntf(,nnt對不起!你的選擇不在服務(wù)范圍之內(nèi)!,);Printf(Ilnt請您再次選擇所需的服務(wù)項!);Printf(,nt謝謝合作!nt,);break;if(c=,D,c=ld,)break;Printf(,n
50、nt請按 Enter 鍵繼續(xù)操作,);getchar();getchar();VOid SaVeFamily(TreeNOde *root)/保存家譜至指定文件Char SaVeFiIeNameImaxFiIeNameLe n;FILE* fp;TreeNOde *queue50, *head;int i, front, rear;/隊列的頭指針,尾指針Printf(H *保存家譜*nn);/if(root=NULL)if (root = NULL)Printf(,tt家譜中無成員,無法保存! n);return;TiPFOrSaVeFiIePOSition;/文件及絕對路徑格式SCanf(,
51、%s,z SaveFiIeName);getchar();fp = fopen(saveFileName, w);/不存在則新建。存在,貝IJ從文件起始位置寫,原內(nèi)容將被覆 蓋。if(fp = NULL)Printf(,tt 新建文件失??! n);return;elsePrintf(,tt新建文件成功,文件及其路徑為:%sn, SaveFiIeName);/*利用寬度優(yōu)先搜索遍歷家族多叉樹*/fwrite(root, SiZeOf(TreeNode), 1, fp);將根結(jié)點存入文件(二進(jìn)制形式)front = rear = 0;初始化空隊queuerear+ = root;/ 根結(jié)點進(jìn)隊wh
52、ile(front != rear)/隊列不為空head = queuefrot+;/ 隊頭元素岀隊if (head-NextNode0 != NULL)fwrite(head-NextNode0, SiZeOf(TreeNOde)Z Iz fp);for(i=l; iChildNum; i+)fwrite(head-NetNodeiz SiZeOf(TreeNode), If fp);queuerear+ = Head-NextNodei;fclose(fp);fp = NLL;VOid ReadFamily(tree *root)/從指定文件中讀取家譜FILE*fp;Char readFileName50;tree queue50Zhead;int iz front, rear;Pn ntf(, * 讀取家譜 * *nnu);Pnntf(,tt輸入文件名及其路徑,以便從中讀取家譜。nlt);TiPFOrReadFilePOSition;scanf(,%s,z TeadFiIeName);getchar();fp = fopen(readFileNamez I”);/為讀而打開文本文件(文件必須已存在) if(fp = NULL)Printf(,itt只讀形式打開文
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 太空垃圾監(jiān)測與防范-洞察分析
- 藥物副作用機(jī)制研究-洞察分析
- 網(wǎng)絡(luò)視覺文化的性別表達(dá)研究-洞察分析
- 土地利用分類技術(shù)-洞察分析
- 冬季防火精彩講話稿(10篇)
- 太陽能技術(shù)工作總結(jié)
- 《會計基礎(chǔ)講解》課件
- 辦公效率提升以設(shè)計思維解決實際問題
- 辦公環(huán)境下的德育教育案例分享
- 《電信詐騙小知識》課件
- 基于深度學(xué)習(xí)算法的垃圾分類圖像識別
- 畢業(yè)設(shè)計(論文)-復(fù)方氨基酸注射液車間工藝設(shè)計
- 進(jìn)擊的巨人優(yōu)質(zhì)獲獎?wù)n件
- 浙江省園林綠化工程施工質(zhì)量驗收規(guī)范
- 國開電大電氣傳動與調(diào)速系統(tǒng)形考任務(wù)1-4答案
- 山東省成人高等教育畢業(yè)生登記表
- FDMA衛(wèi)星通信網(wǎng)絡(luò)系統(tǒng)
- 【小學(xué)數(shù)學(xué) 】《扇形統(tǒng)計圖的認(rèn)識》說課(課件)六年級上冊數(shù)學(xué)人教版
- 證據(jù)清單模板
- 學(xué)校學(xué)生心理危機(jī)干預(yù)實施方案
- 教育教學(xué)工作會議記錄
評論
0/150
提交評論