家譜管理系統(tǒng)_第1頁(yè)
家譜管理系統(tǒng)_第2頁(yè)
家譜管理系統(tǒng)_第3頁(yè)
家譜管理系統(tǒng)_第4頁(yè)
家譜管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、24洛陽(yáng)理工學(xué)院課程設(shè)計(jì)報(bào)告課程名稱(chēng)設(shè)計(jì)題目數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)家譜管理系統(tǒng)業(yè)級(jí)號(hào)名期日成 專(zhuān)班學(xué)姓完計(jì)算機(jī)科學(xué)與技術(shù)B150405B15080822宋士龍2016/1 30 H課 程設(shè)計(jì) 任務(wù)書(shū)設(shè)計(jì)題目:家譜管理系統(tǒng)設(shè)計(jì)內(nèi)容與要求:【問(wèn)題描述】:實(shí)現(xiàn)具有下列功能的家譜管理系統(tǒng).輸入文件以存放最初家譜中各成員的信息,成員的信息中均應(yīng)包含以下內(nèi) 容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加 其它信息、但不是必需的。.實(shí)現(xiàn)數(shù)據(jù)的存盤(pán)和讀盤(pán)。.顯示家譜。.按照出生日期查詢(xún)成員名單。.按照姓名查詢(xún),輸出成員信息(包括其本人、父親、孩子的信息)。.修改某成員信息?!净疽蟆浚航?/p>

2、面要求:有合理的提示,每個(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料中寫(xiě)明。指導(dǎo)教師:年 月 日課程設(shè)計(jì)評(píng)語(yǔ)成績(jī):指導(dǎo)教師:年 月 日一、算法思想本程序是一個(gè)管理家譜的系統(tǒng),通過(guò)這個(gè)系統(tǒng)可以對(duì)家族成員進(jìn)行創(chuàng)建、顯示、査 找、修改、以及保存家譜和讀取家譜功能。該系統(tǒng)分為以下幾個(gè)模塊,分別是:創(chuàng)建家譜, 顯示家譜、按姓名和生日查找家庭成員、修改家譜、存盤(pán)、讀盤(pán)以及退出系統(tǒng)。本程序用到 的

3、存儲(chǔ)形式為多叉樹(shù),因?yàn)榧易V中每個(gè)人既有父母又有孩子,而且孩子的個(gè)數(shù)并不確定,所 以用多叉樹(shù)來(lái)存儲(chǔ)最為介適。用多叉樹(shù)來(lái)存儲(chǔ),就用用到多叉樹(shù)的遞歸創(chuàng)建及遞歸遍歷。因 為是多叉樹(shù),所以遍歷時(shí)用廣度優(yōu)先搜索合適。本函數(shù)最主要的思想就是遞歸調(diào)用,每個(gè)子 函數(shù)中都會(huì)用到遞歸。左義結(jié)構(gòu)體時(shí)給定指針數(shù)組的最大容量,來(lái)規(guī)左家譜中最多可以存多 少人。左義一個(gè)家族樹(shù)的指針變量用來(lái)當(dāng)每個(gè)子函數(shù)的參數(shù),從而將其返回到主函數(shù)中。二、模塊劃分int main():主函數(shù)VOid CreatTree(TreeNOde *Tree):創(chuàng)建家族樹(shù)VOid OUtPUtAII(TreeNOde *Tree):顯示家譜VOid Me

4、nUe(TreeNOde *Tree):主菜單VOid SUbMenUeI(TreeNOde * Tree):副菜單(修改選項(xiàng)菜單)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;/記錄這個(gè)人擁有幾個(gè)兒女Char Name20;/記錄這個(gè)人的姓名Char birthday20;/生日int marriage;/婚否(1表示結(jié)婚,O表示沒(méi)結(jié)婚)intdeath;/生死(1表示活著,O

6、表示過(guò)世)Char Kind;/標(biāo)示節(jié)點(diǎn)的種類(lèi)有女G男BChar address100;/住址Char IiVemaSSage50;/死亡日期(如果其已經(jīng)死亡)StrUCt TreeNOde *NextNode20; /記錄這個(gè)人的兒女StrUCt TreeNOde * Parent;記錄這個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)JTreeNodez *tree;四、測(cè)試笫一組數(shù)據(jù)為:爺爺,奶奶,爸爸,媽媽?zhuān)?,二叔,二嬸,姐姐,三叔,三嬸,弟弟一?三代口個(gè)人。其中爺爺是根節(jié)點(diǎn),奶奶為爺爺?shù)呐渑?,同時(shí)也是爺爺?shù)牡谝粋€(gè)后繼節(jié)點(diǎn)。 爸爸,二叔,三叔為爺爺?shù)淖优?。爸爸的配偶是媽媽?zhuān)职值淖优俏摇6宓?配偶是二嬸,子女是

7、姐姐。三叔的的配偶是三嬸,三叔的的子女是弟弟。進(jìn)入程序之后,首先進(jìn)行創(chuàng)建家譜,然后進(jìn)行存盤(pán),之后進(jìn)行修改和查詢(xún)等 步驟。退出程序在進(jìn)入程序時(shí),進(jìn)行讀盤(pán)。之后在進(jìn)行其他操作,程序完成之后 退出即可。圖1家族樹(shù)笫一組數(shù)據(jù)測(cè)試截圖為:i C:U$er$ddmlnDeSlrtOPVkecheogexe4rx3*-*-:X-:-t-x-t-*姓名:爺爺出生日務(wù):1944.09.20冢庭住址I山東省臨沂市性別:B男妾子姓乞:奶奶是否吳在(1 -兌在O去世: 0第1個(gè)亍女的牲名:爸爸 出生日期:1963.03.06家庭住址:山東省臨沂市 性別喝第2個(gè)手女的姓名.二叔 岀生日期:1970. OS. 05戀庭住

8、址:山東省臨沂TlJ性別B勇第3個(gè)子女的姓名:三寂 出生日期: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女至今沒(méi)有配陽(yáng)和子女諄蠢才是翩瞿礙 嚴(yán)如山東省臨沂市第1個(gè)子女的姓名關(guān)曲 出生日期:2001. 03.25妄庭住址:山東省臨沂市性別:B男性別B男做獲音亠生/魚(yú)卑 世寶豆期:?0010325家庭住址:山東省臨沂市圖2顯示家譜 CzUsersodinDesktopkecheg.exe*=*&我迎使用家咲管理寒統(tǒng)*3*A:輸入妄譜侑總丟立機(jī) B :輸出整個(gè)京譜佶息C:按出生日期査找某人 D :按姓名査找某人 E:修該某個(gè)人的信息 p:#aG:讀盤(pán)H:退出整個(gè)程序D請(qǐng)輸入你要去找的人的姓名: 弟弟性別: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:鴛岀矗個(gè)寂諾信息C:確岀生B期言找艾人D:技姓名査找冬人E:修改茶個(gè)人的信息F:存盤(pán)G:讀盤(pán)H:ig出整個(gè)程扌*保存家譜C*=J入文件名及保存CLJE(eg: Dexaple. txt) DJIAPU. txt 新逹文伴成功文件及苴路徑為D: WJI.API;. txt圖4存盤(pán)第二組數(shù)據(jù)為:圖4王家家族樹(shù)第二組數(shù)據(jù)測(cè)試截屏為: , Czser%adminDesktOPvCeCbengGce:*笑一*請(qǐng)選擇你的操作*=*A:修改個(gè)人

12、的恰息一 7B:烽改父 .e- *8C:修改子女的信患、8*D:退 出-*8*S渚隸入倏改的姓名:如臬不需要條改就輸入0然后按EnterS 王小二是否要修改性別:如采秸要就輸入T*不離要傷改就報(bào)入0慾后按Entera 0 請(qǐng)治入修改的出生日期:如果不需旻僅改就為入0於后汝EntET徒逖續(xù)渚隸入倏改的左庭地址:如累不需頁(yè)修改就輸入P然肓按Enteri 0個(gè)人信息侈改成功請(qǐng)按EnlM笹維續(xù)隹作微軟拼音半:圖6修改某個(gè)人的具體信息 , CAUSefSvbdminDesktopkeheng.ee*r冷”歡IS使用康族管理系統(tǒng)林榊比耳IE 人立息共患 建信找人信iss序 信塞期找人 程 譜個(gè)m個(gè)妄整生名

13、基 空 入出出姓改盤(pán)盤(pán)岀 怨按修存讀退 A:B:UD:E:F:GH:請(qǐng)輸入你要玄找的出生日期:2008$*&*8(S所要找的人己經(jīng)找到信息如下所示:姓名:王小二岀生日期:2008家庭住址:洛陽(yáng)性別:B男彼軟拼音半:圖7按照生日查找某人 C:UseriadminDwktopkecbeng-ce* 迎使用 竅族管 理系 統(tǒng)*A:輜入家譜信息逢立檢B.旃岀整個(gè)U按出蘭日期宜找某人 D:技姓名音找其人G:讀盤(pán)H:退出整個(gè)樓序E條改英個(gè)人的f忌 FE昱心砲讀取家譜MC豹入文件名及其路徑U便從中汝取窺譜文件名及其(eg: DlWeXanpie. txt): EJI. txt圖8讀盤(pán)五、源程序#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/保存的文件名的最大長(zhǎng)度int FLAG=O;int a=l;typedef StrUCt TreeNOdeint ChiIdNum;/記錄這個(gè)人擁有幾個(gè)兒女Char Name20;/記錄這個(gè)人的姓名Char birthday20;/生日int marriage;/婚否(1表示結(jié)婚,O表示沒(méi)結(jié)婚)intdeath;/生死(1表示活著,O表示

16、過(guò)世)Char Kind;/標(biāo)示節(jié)點(diǎn)的種類(lèi)有女G男BChar address100;/住址Char IiVemaSSage50;/死亡日期(如果其已經(jīng)死亡)StrUCt TreeNOde *NextNode20; 記錄這個(gè)人的兒女StrUCt TreeNOde * Parent;記錄這個(gè)肖點(diǎn)的父盯點(diǎn)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:輸入家譜信息建立樹(shù));Printf(,nttB:輸岀整個(gè)家譜信息);Printf(,nttC:按岀生日期査找某人u);Printf(, nttD:按姓名查找某人u);Printf (,nttE:修改某個(gè)人的信息u);Printf(,nttF:存盤(pán));G:讀盤(pán)Printf (,nttPrintf (,nttH:退出整個(gè)程序nt);c=getchar();SWitCh(C)CaSe

20、,A,:TreeNOde * NewNode;NeWNOde=(TreeNOde *)malloc(sizeof(TreeNode);Pnntf(Hnt請(qǐng)輸入姓名門(mén);scanf(,%s,zTree-Name);Pnntf(,nt請(qǐng)輸入性別女G男B:M);getchar();scanf,%c, &(Tree-Kind);Tree-Parent=NewNode;Tree-Parent=NULL;/CreatTree(Tree); /Pnntf(Hnt-家譜圖已經(jīng)建立成功nnu);Printf(,lnnt請(qǐng)按 Enter 鍵繼續(xù)操作,);getchar();break;CaSe ,B,:if(str

21、cmp(Tree-Name,O)=O)Pnntf(Hnt家譜圖的多叉樹(shù)尚未建立請(qǐng)先建立樹(shù)r); getchar();break;Printf(Ilnnt整個(gè)家譜的主要信息如下:);OutPutAII(Tree);getchar();break;CaSe ,C,:if(strcmp(Tree-birthdayz,O)=O)Printf(,nt家譜圖的多叉樹(shù)尚未建立請(qǐng)先建立樹(shù)n); getchar();break;Printf(Ilnt請(qǐng)輸入你要査找的出生日期scanf(,%s,zbirth);OUtPUtMeSSagel(SearChTreeI(Treezbirthj20)zbirth,20);

22、Printf (,nnt*-*一*一*-*-*-*-*-*ntu);getchar();break;CaSe ,D,:if(strcmp(Tree-Name,O)=O)Printf(,nt家譜圖的多叉樹(shù)尚未建立請(qǐng)先建立樹(shù)n); getchar();break;Printf(,nt請(qǐng)輸入你要査找的人的姓名: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家譜圖的多叉樹(shù)尚未建立請(qǐng)先建立樹(shù)n);getchar();break;Cha nge(Tree);getchar();break;CaSe ,F,:if(strcmp(Tree-Name,O,)=O)Printf(,nt家譜圖的多叉樹(shù)尚未建立請(qǐng)先建立樹(shù)n);getchar();break;SaveFamiIy(Tree);getchar();break;CaSe ,G,:*if(strcmp(Tree-Name,O,)=O)Printf(,nt家譜圖的多叉樹(shù)尚未建立請(qǐng)先建立樹(shù)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-一對(duì)不起!你的選擇不在服務(wù)范圍之內(nèi)!);Printf(,nt請(qǐng)您再次選擇所需的服務(wù)項(xiàng)!);Printfc、nt謝謝n t);getchar();break;if (c=,H, I c=,fl)break;getchar();VOid CreatTree(TreeNOde *Node) /創(chuàng)建樹(shù)int i;TreeNOde *NewNode;NeWNOde

25、=(TreeNOde *)malloc(sizeof(TreeNode);Node-NextNode0=NewNode;Node-NextNode0=NULL;Printf(,nt請(qǐng)輸入出生日期:”);SCanf(,%s,IzNOde-birthday);Pnntf(,nt 請(qǐng)輸入家庭住址:H);getchar();scanf(,%sZNOde-address);Printf(,nt請(qǐng)輸入是否建在(I-是或O-否):);scaf(,%d,z8t(NOde-death);if(Node-death=0)Printf(,nt請(qǐng)輸入去世日期:);SCa nf(”%s:Node livemassage

26、);else if(Node-death=,l,)Printf(,nt 仍然建在);Printf(,nt請(qǐng)輸入s的配偶的姓名(輸入0代表沒(méi)結(jié)婚NOde-Name);SCanf(I,%s,NewNode-Name);訐(StrCmP(NeWNOde-Name,0,)!=0)printf(llt請(qǐng)輸入配偶的出生日期:);scanf(,%s,ZNeWNOde-birthday);Printf(,nt 請(qǐng)輸入家庭住址:,)jgetchar();scanf(%s,NewNode-address);Printf(,nt請(qǐng)輸入是否建在(1 是或O否):);scanf(,%d,&(NeWNOde-death)

27、;if(NewNode-death=0)Printf(,nt請(qǐng)輸入去世日期:);SCan f(,%snZNeWNOde-livemassage);else if(NewNode-death=,l,)Printf(,nt 仍然建在);Printf(IInt請(qǐng)輸入s的子女的數(shù)目(當(dāng)子女輸入O時(shí)便停止輸入該成員有關(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 請(qǐng)輸入s 的第d 子女的名字:,lZNOde-NameJ);scanf(,%s,NewNode-Name);Pnntf(,lnt請(qǐng)輸入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ù)目開(kāi)始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至今沒(méi)有配偶和子女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個(gè)子女的姓名: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*該家譜圖中沒(méi)有s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤*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é)點(diǎn)如果是的話就沒(méi)有父母兄弟信息Printf(nt是這個(gè)家譜圖里最年長(zhǎng)的人,name);els

37、eif (NeWNOde-Kind=,G, 11 NeWNOde-Kind=,g,) 判斷父親節(jié)點(diǎn)是父親還是母親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 至今還沒(méi)有孩子,name);elsePrintf(,nt%s 至今還沒(méi)有配偶和孩子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*該家譜圖中沒(méi)有岀生日期為s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤*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) /修改某個(gè)人的彳言息Char name20;

42、TreeNOde * NewNode;Printf(,nt請(qǐng)輸入你要修改的人的姓名:nf,);scanf(,%s,zname);NeWNOde=SearChTree(Tree,name,20);if(NewNode= N U LL)Pnntf(Hnnt*該家譜圖中沒(méi)有s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤*,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-*請(qǐng)選擇 你的操 作*Printf(,nb-*-*-*:修改個(gè)人的信息DD,);Printf(,nb-*-*-*-B:修改父母的信息粒D紅,);Printf(nt-*-*-C:修改子女的信息粒紅,);Pnntf (,rt-*-D:退岀nt);c=getchar();SWitCh(C)CaSe ,A,:Printf(,nnt請(qǐng)輸入修改的姓名:如果不需要修改就輸入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個(gè)人信息修改成功);break;CaSe ,B,:if(TreeParent=NULL) 判斷是不是頭節(jié)點(diǎn)Printf(Ilnt是這個(gè)家譜圖里最頂端的人沒(méi)有父母信息!,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請(qǐng)輸入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至今還沒(méi)有子女);break;if (TreeParent !=NULL)if (StrCmP(Tree-Name,TreePar

48、ent-NextNode0-Name)=0)如果他是入贅或者是嫁入的就需用配偶節(jié)點(diǎn)完成修改Tree=Tree-Pare nt;for(i=l;iChildNum;i+)Printf(,1nnt請(qǐng)輸入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本項(xiàng)服務(wù)到此結(jié)束);break;CaSe ,n,:break;default:Pri ntf(,nnt對(duì)不起!你的選擇不在服務(wù)范圍之內(nèi)!,);Printf(Ilnt請(qǐng)您再次選擇所需的服務(wù)項(xiàng)!);Printf(,nt謝謝合作!nt,);break;if(c=,D,c=ld,)break;Printf(,n

50、nt請(qǐng)按 Enter 鍵繼續(xù)操作,);getchar();getchar();VOid SaVeFamily(TreeNOde *root)/保存家譜至指定文件Char SaVeFiIeNameImaxFiIeNameLe n;FILE* fp;TreeNOde *queue50, *head;int i, front, rear;/隊(duì)列的頭指針,尾指針Printf(H *保存家譜*nn);/if(root=NULL)if (root = NULL)Printf(,tt家譜中無(wú)成員,無(wú)法保存! n);return;TiPFOrSaVeFiIePOSition;/文件及絕對(duì)路徑格式SCanf(,

51、%s,z SaveFiIeName);getchar();fp = fopen(saveFileName, w);/不存在則新建。存在,貝IJ從文件起始位置寫(xiě),原內(nèi)容將被覆 蓋。if(fp = NULL)Printf(,tt 新建文件失??! n);return;elsePrintf(,tt新建文件成功,文件及其路徑為:%sn, SaveFiIeName);/*利用寬度優(yōu)先搜索遍歷家族多叉樹(shù)*/fwrite(root, SiZeOf(TreeNode), 1, fp);將根結(jié)點(diǎn)存入文件(二進(jìn)制形式)front = rear = 0;初始化空隊(duì)queuerear+ = root;/ 根結(jié)點(diǎn)進(jìn)隊(duì)wh

52、ile(front != rear)/隊(duì)列不為空head = queuefrot+;/ 隊(duì)頭元素岀隊(duì)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”);/為讀而打開(kāi)文本文件(文件必須已存在) if(fp = NULL)Printf(,itt只讀形式打開(kāi)文

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論