欢迎来到天天文库
浏览记录
ID:57574893
大小:442.50 KB
页数:9页
时间:2020-08-27
《家谱管理实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Project3家谱管理一、题目用树型结构实现家族成员信息管理,(如建立、删除、查询、统计、打印等)二、数据结构与算法1.定义树结点node{stringname;node*left;node*right;stringsex;//maleorfemaleintnum;//结点编号node(){name="";left=right=NULL;num=0;sex="male";}};2.定义classtree{};实现不同对树的操作其中,以staticintcount记录节点总数;以staticintheight记录树高度;以node*root作为
2、头指针;以node*arr[maxnode]将每个节点的指针记录在数组里。3.对于该树的操作:a.创建树:首先此project中树由男性为根结点。男性的左孩子是其兄弟,右孩子是其第一任妻子,第一任妻子的右孩子是其第二任妻子,每个妻子的左孩子是其与这位妻子的孩子。如此递归生成家谱。输入时,用0表示左孩子,1表示右孩子,以1010等的字符串输入结点位置来创造结点。创建后用函数cheak来检验创造的树是否正确,具体来说就是避免创建树时出现有结点没有父结点的情况。b.删除结点:以结点的name成员搜索结点,删除结点及其子树。c.查询结点:以结点的nam
3、e成员搜索结点,打印该结点的父母兄弟、妻子、男孩。d.统计函数:统计家谱总数。本project中通过#define定义打印屏幕宽度screen_width为96,最多结点maxnode为32,因此树高度不超过5层,总数count不超过32.(linux下测试,终端宽度可以任意,windows下的话只能是80)e.打印:采用广度优先搜索遍历来打印树。三、测试数据、结果及分析1.界面(注:单词“member”拼写错误已在代码中改正)2.初始化家族成员(注:初始化人数须大于1.)3.功能菜单(基于2中初始化的成员):(1)输出整棵树中的成员其中未存储
4、成员的树的节点用“no”来表示。(2)查找家谱中的成员及其亲缘关系测试用例1:father测试用例2::mother(女性成员)测试用例3:a(无匹配项用例)测试用例4:granddad(根节点)(3)获取家谱中成员总数:(4)删除家谱成员的测试:测试用例1:stma输出家谱:测试用例2:mother测试用例3:granddad(5)退出程序四、分工、贡献率%、自我评分100%五、项目总结本次项目解决的是一些跟我们的生活息息相关的问题。用树的结构来构造家族的族谱,是一个很好的例子。在完成本次项目的过程中,我们的小组成员互相协作,规定了族谱的建立
5、规则,并设计了软件界面,分工完成了代码编写,Bug测试和修补。在本次项目完成过程中,我们小组逐渐摸索到了如何高效合作的方式,即由不同的人完成不同部分的工作,各有侧重的部分。这样对于软件的编写和bug修补以及测试会更加方便。三人共同交流,也有助于我们讨论出更有效且完备的算法,并且使我们的测试用例测试更加全面。本次实验中我们小组存在的缺陷也是较为明显的,比如由于是在Linux环境下编写代码,没有考虑到Windows终端中的软件界面出现问题,对于树的显示也会出现一些问题。同时,我们团队的代码完成时间也较晚,代码的测试时间较短,导致最终的软件不够完美。
6、希望下一次在Project编写时,我们可以努力克服这些缺点,也希望每次的project都可以由不同的人负责代码的编写,使三个人都可以在每次的项目中学到不同的技能。另外,本程序还存有严重不足,一开始我们没有把女儿或者说是姐妹这种关系考虑进去,导致后来发现该点时程序难以更改;并且,对于删除这一功能,如果删除的是男性,则是将其本身及其右子树删去,将左子树补至其父节点;而如果是女性的话,则是将其本身及其左子树删除,将右子树补至其父节点。但是我们的程序只是单纯地将要删除的节点及其左右子树全部删除,这一点严重不足(其实在考虑算法的时候是有考虑的,只是组员在
7、编写代码时忘了这一点)。
此文档下载收益归作者所有