版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、家谱( 3-1)一、题目要求基本要求:从文件中读入家庭成员建立家谱,以孩子兄弟表示法存储。基本功能:家谱管理,如:( 1)在家谱中添加新成员,并追加到文件中。( 2)输出指定家庭的所有成员。( 3)确定指定成员在家族中的辈份(第几代)。尘尘等等。二概要设计(1)功能部分:本程序共实现了 6 个功能分别为:1 . 读出家谱并显示2 .确定指定成员在家族中的辈份3 .输出指定辈的所有成员4 .在家谱中添加新成员,并追加到文件中5 .输出指定家庭的所有成员6 .退出本系统(2)各功能的算法思想:1. 读出家谱并显示2 / 10存储结构用栈,按照先显示双亲,然后显示其所有孩子的顺序显示所有的家庭成员。
2、2 .确定指定成员在家族中的辈份用求成员所在的二叉树中的层数(按层遍历二叉树)来确定,这里采用的是递归算法3 .输出指定辈的所有成员此处定义了一个新的结构体类型(增加存储节点所在的层数),定义如下:structBTNode *q;intloc;/ 存结点所在的层数qu10;并用一个队列来比较显示同辈分的所有成员。4 .在家谱中添加新成员,并追加到文件中首先,输入一个新成员的名字;然后,输入其双亲;之后,再添加到整个存储二叉链表中。然后,再将新的存储结构写回到文件中。二叉链表的结点类型为:typedefstruct nodeElemType data10;/ 存放成员的名字struct node
3、 *child;/ 其孩子指针struct node *brother;/ 其兄弟指针BTNode;5 .输出指定家庭的所有成员首先,设一个栈,并设一个标记位,先置1;然后,找到输入的要待显示的成员,将标记位置0;再次,显示其孩子和兄弟,依次下去直到显示完其所有的亲戚。6 .退出本系统通过一个输入字符 q 来控制,每完成一个功能,系统提示是否要继续操作:当q为“微者“yk显示菜单,程序继续执行;当 q 为其他字符时,程序执行结束,退出本系统。三、详细设计:通过一个 do-while 语句来控制各个模块的选择和实现。1. 读出家谱并显示void display(BTNode *b)BTNode
4、*q10;/ 定义一个栈int front,rear;int k;BTNode *p;p=b;k=0;front=-1;rear=0;qrear=p;/ 头结点先入栈while(frontdata ); / 头结点出栈,并显示printf();disbr(p-child);printf()n);if(p-child!=NULL) / 显示其孩子rear+;qrear=p-child;if(p-brother!=NULL) / 显示其兄弟 rear+;qrear=p-brother;2 .确定指定成员在家族中的辈分int generation(BTNode *b,int h,ElemType x
5、)/ 用递归的思想 int i;if(b=NULL)return(0);i=strcmp(b-data,x); / 比较是否相等if(i=0)return(h);int L=generation(b-child,h+1,x);if(L=0)L=generation(b-brother,h,x);return(L);3 .输出指定辈的所有成员void layer(BTNode *t,int m) struct / 定义一个新的结点类型,在孩子兄弟存储结构的基础上添加一个数据域存其所在层数int loc;qu10;BTNode *q;int front,rear;BTNode *p;p=t;k=0
6、;front=-1;rear=0;qurear.q=p;qurear.loc=1;if( qurear.loc=m) / 找到 m 辈的即输出printf(%c,p-data);while(frontchild!=NULL)rear+;qurear.q=p-child;qurear.loc=qufront.loc+1;if(m= qurear.loc)printf(%s,p-child-data);if(p-brother!=NULL)rear+;qurear.q=p-brother;qurear.loc=qufront.loc;if( qurear.loc=m)printf(%s ,p-br
7、other-data);4 .在家谱中添加新成员,并追加到文件中void add(BTNode *&b,ElemType y,ElemType x)void DispBTNode(BTNode *b,FILE *fp)char a10;int i=0;if(b!=NULL)while(b-datai!=0)ai=b-datai;i+;char filename20= ;FILE *fp;BTNode *p,*q;int i;p=FindNode(b,y);q=(BTNode *)malloc(sizeof(BTNode);else p=p-child;printf( 向文件中读入新家谱 n);
8、scanf(%s,&filename);if(fp=fopen(filename,w)=NULL)elsefclose (fp);while(p-brother!=NULL)p=p-brother ;12 / 10for(i=0;xi!=0;i+)q-datai=xi;q-datai=0;q-child=q-brother=NULL;p-child=q;if(p-child =NULL)p-brother=q;display(b);printf(n input a filename:);puts(n cant open the file.);exit(0);DispBTNode(b,fp);a
9、i=0;if(b-child!=NULL | b-brother!=NULL)fputs(s,fp);DispBTNode(b-child,fp); / 递归写入其孩子fputs(a,fp); / 写入文件if (b-brother!=NULL)fputs(p,fp);DispBTNode(b-brother,fp); /fputs(t,fp);5 .输出指定家庭的所有成员void dispfamily(BTNode *b,ElemType x) BTNode *p;BTNode *qMaxSize;int top=-1,tap=1;if(b!=NULL)top+;qtop=b;while(t
10、op-1)p=qtop;top-;if(strcmp(p-data,x)=0) / 查找此人 top=-1;tap=0;if(p-child!=NULL)top+;qtop=p-child;if(tap=0)递归写入其兄弟display(p-child); 显示其孩子return ;top+;qtop=p-brother;if(tap=0)display(p-brother); / 显示其兄弟return ;if(p-brother!=NULL)6 .退出本系统此处通过一个输入字符q来控制,当q为“微者词号,显示菜单,程序继 续执行,当 q 为其他字符时,程序执行结束,退出本系统。此时q= N
11、。四:调试分析1 首先,将已有家谱存储文件写在一个txt 文档里,内容为:wu(wuchang(wuxin(wujia,wuhua),wuli)输出结果为:2调试时遇到的问题:( 1)当选择功能3(添加新成员),添加完成员后,写回文件时出现了错误,原本添加的为其中一个结点的孩子,结果写回文件时却成了该结点的孙子,也就是本是要添加为此结点的孩子的兄弟,结果却成了其孩子的孩子。最后经过单步跟踪发现写入文件的函数编写错误,缺少判断条件,经过修改后,此问题得到了解决。( 2)当选择功能0(显示此家谱),没有按照事先存储在txt 中的文件显示,通过认真检查程序中显示成员的函数(按层遍历)、不断调试,发现
12、并不是该显示函数的错误,因为在功能4(输出指定家庭的所有成员)中,也是通过调用该函数实现输出功能,于是,检查 txt 文件中事先存储的家谱成员,发现是由于 “( ”与 “) ”没有匹配好,导致没有按照预期想法创建二叉树造成的错误,通过修改 txt 文件,使得错误得以解决。五、课程设计总结通过本次课程设计,我觉得自己最大的收获就是:( 1)学会了怎样将课堂所学知识运用到较为实际的应用中来由于对二叉链表的存储比较感兴趣,我选做的是家谱,开始觉得无从下手,但是经过仔细分析后,渐渐找到一点思路(首先创建,然后分别实现各个功能,最后利用菜单实现选择功能并输出结果)。( 2)锻炼提出问题、解决问题和自学的能力家谱的实现要求读、写文件,于是 “如何将文件从文档中读出 ” , “怎么写入文件 ”都是要满足要求必须解决的问题。为此,我查找了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园劳动基地劳作实践场地大揭秘
- 小小朗诵社团练习课后语言活动记录
- 土遗址夯筑支顶加固及质量评价技术规范
- 新学期前置学习|代数进阶与分式运算练习资料
- 学校校车安全管理制度
- 学校食品安全管理制度
- 学校教师外出培训管理制度
- 物业管理区域物业服务工作邻里互助管理细则
- 新版三年级语文上册同步课本基础字词每日一练
- 高中化学非金属元素专题|必修一核心知识点精讲课件
- 湖南钢铁集团秋招面试题及答案
- 2021建筑隔震设计标准
- 2026年阿里云ACP认证练习题及答案
- 模袋混凝土护坡工程实施措施
- 雨课堂学堂在线学堂云《云计算与大数据技术(北京联合大学 )》单元测试考核答案
- 2024年德阳辅警协警招聘考试真题含答案详解(完整版)
- 安全真题汇编题库内蒙古呼和浩特市(含答案)2025年
- 2024人教版七年级数学上册全册教案
- 如何成为行业专家
- 强化训练人教版9年级数学上册【二次函数】章节测评试题(含解析)
- 球墨铸铁管安装单元工程施工质量验收评定表
评论
0/150
提交评论