数据结构实训指导_家谱树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计Y104班数据结构实训指导

广西工学院计算机工程系阳树洪

2011年12月

1 实训目的

本次实训的总体目的在于通过系统的编程训练,培养学生编写一个具有一定难度的小型系统的能力,培养学生从编写单个程序,实现单个程序功能到进行系统开发,整体调试的能力。从知识点的角度来说,目的在于通过本实训项目,让学生对二叉树这一重要数据结构的运用更加熟练。

2 实训题目:树状家谱管理系统。

本次实训的题目是树状家谱管理系统。要求利用数据结构的知识,通过将树转换为二叉树的概念,采用孩子兄弟二叉树的方式实现家谱管理系统。不容许采用数据库实现家谱管理。每个树结点表示一个家族成员,成员基本信息可包含,姓名、出生日期、死亡日期、性别、出生地、家庭住址、职业、职位、辈分、简历、父亲姓名、其他。具体属性自行确定。

要求实现的总体基本功能包括:

家谱信息的录入,修改,删除;

家谱树的层次化显示;

家谱树保存到文件;

从文件中读取数据重建家谱树;

按各种关键字进行查询;

某一成员的所有祖先(直系祖先)的查询;

某一成员的所有直系亲属的查询

确定两个成员的关系;

统计成员人数;

家谱成员的年龄,身高;

选做功能包括:

在打开家谱的当天,提醒当天有哪些人过生日;

对已经去世的成员以寿命为关键字进行排序(寿命精确到天,采用快速排序算法);

对简历的内容进行用KMP算法进行字符搜索;

编写基于MFC的图形界面。(没有MFC基础的同学不做);

其它自由发挥的功能,如果有意义有难度可以提高最后成绩。

3 成绩评定办法

总成绩由最终答辩成绩,平时抽检成绩,实训报告成绩3部分组成,比例为:4:3:3。

3.1最终版本程序的考核标准:

1、没有完成基本功能,编程风格较差,例如:如采用全局变量,采用goto 语句,缺少必要的注释语句,程序结构混乱等。成绩评定为D(不及格)。

2、完成基本功能,系统框架设计基本合理,人机接口友好,但存在不多于3个bug,编程风格较好,成绩评定为C(及格)。

3、完成基本功能,系统框架设计合理,人机接口友好,并实现至少2项选做功能,编程风格良好,测试用例丰富,测试结果完整。成绩评定为B(良好)。

4、完成基本功能,系统框架设计合理,人机接口友好,实现至少3项选做功能,并能在老师给出的选做功能的基础上,提出自己其它有意义的功能并实现。编程风格良好,测试用例丰富,测试结果完整。成绩评定为A(良好)。

3.2实训报告的考核标准:

1、没有按规定的格式编写实训报告,内容敷衍了事,测试用例记载不详细,成绩评定为D(不及格)。

2、按规定的格式编写实训报告,内容能充分描述作者所做系统,所用图表和算法几乎与教师所给指导材料雷同,测试用例记载详细,成绩评定为C(及格)。

3、按规定的格式编写实训报告,内容能充分描述作者所做系统,根据所提文档能方便的进行系统重现,文理较通顺,图表基本完备,所用图表和算法与教师所给指导材料不尽雷同,测试用例记载详细,并能基本覆盖所有程序的所有可能出错情况。成绩评定为B(良好)。

4、按规定的格式编写实训报告,内容能充分描述作者所做系统,根据所提交文档能方便的进行系统重现,文理通顺,图表完备,所用图表和算法与教师所给指导材料不尽雷同,测试用例记载详细,并能覆盖所有程序的所有可能出错情况。程序调试过程,作者实训体会编写真实深刻,对以后做这一实训题目的同学具有一定借鉴意义。成绩评定为A(良好)。

3.3 平时抽检成绩的评价标准:

1、总体上来说,不能按时完成各阶段任务基本功能,需要延迟提交的最高成绩降低一个档次,也就是说最高成绩只能为B。

2、能按时完成基本功能,没有BUG;或者能完成该任务阶段的所有选做功能,但存在不多于3个BUG,成绩评定为A。

3、能按时完成基本功能,但存在不多于2个BUG;或者能完成该任务阶段的一半以上选做功能,但存在不多于3个BUG,成绩评定为B。

3、能按时完成基本功能,但存在不多于3个BUG;或者能完成该任务阶段的任一选做功能,但存在不多于4个BUG,成绩评定为C。

4、分阶段任务基本功能没有实现,且延时4学时后仍不能完成,成绩评定为D 。

4 系统功能模块结构

这里给出的功能模块结构示意图只供参考,个人可以根据自己的想法另行设计,只要能实现给定的功能即可。

系统界面

新建家谱家谱保存到文件从文件重建家谱

层次化显示家谱

家谱节点的增删改查家谱总体信息查询家谱总体信息统计

家谱信息存储文件(二进制)

家谱信息查询统计结果显示文本文件

图1 系统总体结构示意图

5 数据结构 5.1 总体数据结构

1、家谱树采用孩子兄弟二叉树表来实现,如图2 所示的家谱采用图3所示的孩子兄弟二叉树来存储。

李甲天

李一河李一福李二铁

李一山

李二金李二银李三国李三家李三建

图2 树状形式的家谱示意图

图2中同一父亲的亲兄弟已经按年龄从大到小排序,即最左边的孩子是父节点的第一个孩子。将其转化为孩子兄弟二叉树的方法是:对某一个节点,令其左子树指针指向该节点的第一个孩子,右子树指针指向该节点的下一个兄弟。按这种方法,图2所示的家谱树可用如图3所示的孩子兄弟二叉树来实现:

李甲天

李一河

李一福

李二铁李一山

李二金

李二银

李三国

李三家

李三建

图3 孩子兄弟二叉树表示的家谱树

2、节点数据结构:

建议将节点信息中个人信息作为一个结构体。日期信息作为一个包含年、月、日三个成员的结构体。

节点包括三个成员域:

节点个人信息(结构体);

第一个孩子指针;

下一个兄弟指针;

其中节点个人信息结构体可包括:姓名、出生日期、死亡日期、性别、出生地、家庭住址、职业、职位、辈分、简历、父亲姓名、其他等。

为方便操作,可在节点中加入指向父亲的指针。

6 分阶段任务分解及其关键算法提示

6.1阶段任务一(6学时)

6.1.1基本功能

相关文档
最新文档