資源描述:
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-家譜的實現(xiàn)與設(shè)計_畢業(yè)論文.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學術(shù)論文-天天文庫。
1、課程設(shè)計報告課程設(shè)計名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計系:三系學生姓名:朱強班級:13軟件學號:20130311227成績:指導教師:劉杰開課時間:2014-2015學年一學期設(shè)計題目一:家譜的實現(xiàn)與設(shè)計一、實習目的通過學習,了解并初步掌握設(shè)計、實現(xiàn)較大系統(tǒng)的完整過程,包括系統(tǒng)分析、編碼設(shè)計、編碼集成以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計、實現(xiàn)、以及操作方法,為進一步的開發(fā)應(yīng)用打好基礎(chǔ)。二、問題描述家譜的設(shè)計主要是實現(xiàn)對家庭成員信息的建立、查找、插入、修改、刪除等功能??伞;竟δ苋缦拢海?)家譜祖先數(shù)據(jù)的錄入(樹的根結(jié)點)。(2)
2、家庭成員的添加:即添加某一人的兒女,兒女的數(shù)目由控制臺端給出,然后輸入相應(yīng)的兒女姓名(此處兒女的姓名不能重名)。(3)家庭成員的修改:可以修改某一成員的姓名。(4)員的查詢:查詢某一成員在家族中的輩分(第幾代),并能查詢此成員的所有子女及這一輩的所有成員。(5)家庭成員的刪除:刪除此成員時,若其有后代,將刪除其所有后代成員。三、需求分析該程序所做的工作是對家族成員的的管理,為家族成員對各代成員的姓名,性別及子女情況的記錄、查詢提供方便。此程序規(guī)定:1.在姓名錄入時,姓名為10個字母以內(nèi)的字符串;性別以M/F表示;2.程序的輸
3、出信息主要為:輸出家族成員在家族中的輩分(第幾代),并能查詢此成員的所有子女及這一輩的所有成員。3.程序的功能主要包括:家譜祖先數(shù)據(jù)的錄入、家庭成員的添加、家庭成員的修改、員的查詢、家庭成員的刪除;四、概要設(shè)計系統(tǒng)用到的數(shù)據(jù)有:charname[MAX];charsex;/intgeneration;1)typedefstructnode{}//定義data存儲結(jié)構(gòu)2)typedefstructft{}//創(chuàng)建結(jié)構(gòu)體3)ft*search(ft*p,charch[])//搜索指針函數(shù)4)ft*parent(ft*p,ft*q
4、,int*flag)//通過parent函數(shù)得到雙親結(jié)點。用flag標志,-1為左孩子,1為右孩子5)intgeneration(ft*p,charch[])//獲得搜索到的成員的代目的返回值6)voidsaves(ft*p,charb[],charc,intd)//建立家譜孩子結(jié)點創(chuàng)建結(jié)點并對l賦值保存7)voidInitTree()//初始化8)voidAdd()//添加9)voidSearch()//查詢10)voidChange()//修改11)voidDelete()//刪除12)intmain()//主函數(shù)各程序
5、模塊之間的調(diào)用關(guān)系:主函數(shù)12)可以調(diào)用7)至11)。一、詳細設(shè)計#include#include#include#include#defineMAX10typedefstructnode{//定義data存儲結(jié)構(gòu)charname[MAX];//姓名charsex;//性別intgeneration;//代目}node;typedefstructft{//創(chuàng)建結(jié)構(gòu)體structnodel;//家譜中直系家屬structft*lchild;//用來指向兄
6、弟structft*rchild;//用來指向孩子}ft;ft*root;//root是結(jié)構(gòu)體ft的指針ft*search(ft*p,charch[])//搜索指針函數(shù){ft*q;if(p==NULL)returnNULL;//沒有家譜,頭指針下為空if(strcmp(p->l.name,ch)==0)returnp;//家譜不為空,頭指針下有這個人if(p->lchild){q=search(p->lchild,ch);//在兄弟中找if(q)returnq;//找到}if(p->rchild){q=search(p->r
7、child,ch);//在孩子中找if(q!=NULL)returnq;}returnNULL;//沒有找到}ft*parent(ft*p,ft*q,int*flag)//通過parent函數(shù)得到雙親結(jié)點。用flag標志,-1為左孩子,1為右孩子{if(p==NULL)returnNULL;//沒有家譜,頭指針下為空if(p->rchild==NULL){*flag=0;returnNULL;}else{if(p->lchild==q){*flag=1;returnp;}else{if(p->rchild==q){*flag
8、=-1;returnp;}else{if(p->lchild!=NULL){parent(p->lchild,q,*&flag);}if(p->rchild!=NULL){parent(p->rchild,q,*&flag);}}}}}intgeneration(ft*p,charch[]