欢迎来到天天文库
浏览记录
ID:25658541
大小:3.54 MB
页数:23页
时间:2018-11-21
《数据结构课程设计-家谱的实现与设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、课程设计报告课程设计名称:数据结构课程设计系:三系学生姓名:朱强班级:13软件学号:20130311227成绩:指导教师:刘杰开课时间:2014-2015学年一学期设计题目一:家谱的实现与设计一、实习目的通过学习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、编码集成以及调试分析,熟练掌握数据结构的选择、设计、实现、以及操作方法,为进一步的开发应用打好基础。二、问题描述家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。可。基本功能如下:(1)家谱祖先数据的录入(树的根结点)。(2)家庭成员的添加:即添加某一人的儿女,儿女
2、的数目由控制台端给出,然后输入相应的儿女姓名(此处儿女的姓名不能重名)。(3)家庭成员的修改:可以修改某一成员的姓名。(4)员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。(5)家庭成员的删除:删除此成员时,若其有后代,将删除其所有后代成员。三、需求分析该程序所做的工作是对家族成员的的管理,为家族成员对各代成员的姓名,性别及子女情况的记录、查询提供方便。此程序规定:1.在姓名录入时,姓名为10个字母以内的字符串;性别以M/F表示;2.程序的输出信息主要为:输出家族成员在家族中的辈分(第几代),并能查询此成员的所有子女及这
3、一辈的所有成员。3.程序的功能主要包括:家谱祖先数据的录入、家庭成员的添加、家庭成员的修改、员的查询、家庭成员的删除;四、概要设计系统用到的数据有:charname[MAX];charsex;/intgeneration;1)typedefstructnode{}//定义data存储结构2)typedefstructft{}//创建结构体3)ft*search(ft*p,charch[])//搜索指针函数4)ft*parent(ft*p,ft*q,int*flag)//通过parent函数得到双亲结点。用flag标志,-1为左孩子,1为右孩子5)intgenera
4、tion(ft*p,charch[])//获得搜索到的成员的代目的返回值6)voidsaves(ft*p,charb[],charc,intd)//建立家谱孩子结点创建结点并对l赋值保存7)voidInitTree()//初始化8)voidAdd()//添加9)voidSearch()//查询10)voidChange()//修改11)voidDelete()//删除12)intmain()//主函数各程序模块之间的调用关系:主函数12)可以调用7)至11)。一、详细设计#include#include#include5、ing>#include#defineMAX10typedefstructnode{//定义data存储结构charname[MAX];//姓名charsex;//性别intgeneration;//代目}node;typedefstructft{//创建结构体structnodel;//家谱中直系家属structft*lchild;//用来指向兄弟structft*rchild;//用来指向孩子}ft;ft*root;//root是结构体ft的指针ft*search(ft*p,charch[])//搜索指针函数{ft*q;if(p==NULL6、)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->rchild,ch);//在孩子中找if(q!=NULL)returnq;}returnNULL;//没有找到}ft*parent(ft*p,ft*q,int*flag)//通过parent函数得到双亲结点。用flag标志,-1为左孩子,1为7、右孩子{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=-1;returnp;}else{if(p->lchild!=NULL){parent(p->lchild,q,*&flag);}if(p->rchild!=NULL){parent(p->rchild,q,*&flag);}}}}}intgeneration(ft*p,cha8、rch[]
5、ing>#include#defineMAX10typedefstructnode{//定义data存储结构charname[MAX];//姓名charsex;//性别intgeneration;//代目}node;typedefstructft{//创建结构体structnodel;//家谱中直系家属structft*lchild;//用来指向兄弟structft*rchild;//用来指向孩子}ft;ft*root;//root是结构体ft的指针ft*search(ft*p,charch[])//搜索指针函数{ft*q;if(p==NULL
6、)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->rchild,ch);//在孩子中找if(q!=NULL)returnq;}returnNULL;//没有找到}ft*parent(ft*p,ft*q,int*flag)//通过parent函数得到双亲结点。用flag标志,-1为左孩子,1为
7、右孩子{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=-1;returnp;}else{if(p->lchild!=NULL){parent(p->lchild,q,*&flag);}if(p->rchild!=NULL){parent(p->rchild,q,*&flag);}}}}}intgeneration(ft*p,cha
8、rch[]
此文档下载收益归作者所有