- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计报告(用二叉树实现家谱管理系统)[精品]
数据结构课程设计
题目:用二叉树实现家谱管理系统
姓名:郭志超
学号:031010151554042
完成日期:2005.7.3
一、需求分析
??建立输入文件以存放最初家谱中各成员的信息。
??成员的信息中均应包含以下内容:
姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)
也可附加其它信息、但不是必需的。
??能对修改后的家谱存盘以备以后使用。
??能从文件中读出已有的家谱,形成树状关系。
??家谱建立好之后,以图形方式显示出来。
??显示第n 代所有人的信息。
??按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
??按照出生日期查询成员名单。
??输入两人姓名,确定其关系。
??某人添加孩子。
??删除某人(若其还有后代,则一并删除)。
??修改某人信息。
??按出生日期对家谱中所有人排序。
??打开一家谱时,若家谱中某人的生日在打开家谱的那一天,应给出提示。
二、概要设计
采用二叉树进行家谱的管理、树形控件及列表控件进行家谱的显示。程序涉及以下三种类
型,但基本操作均在“家谱”类型中。
1.定义“个人信息”类型:
ADT Person{
数据对象:D={Pj | Pj={姓名、出生日期、婚否、地址、健在否(如过世,还应有其死亡日
期)},j=0,1,2,??n,其中n=0}
数据关系:R={}
基本操作:
无。
}ADT Person
2.定义“家谱类型文件”类型
ADT FamilytreeFile{
数据对象:D={Aj | Aj 属于 Person,j=1,2,3??,n 其中n=1}
数据关系:D 中每个对象用换行符隔开,
R={ Aj,String | Aj 属于D,j=1,3,??,n 其中n=1,String 属于字符串类型,为
Aj 父亲姓名(若String=-1,Aj 无父亲,若String=Aj 的姓名,表示家谱文件结束)}
基本操作:
1. 打开家谱类型文件,并建立兄弟、孩子二叉树。
2. 从内存中读取兄弟、孩子二叉树,并建立家谱类型文件。
}ADT FamilytreeFlie
3.定义“家谱”类型
ADT Familytree{
数据对象:D={Aj | Aj 属于Person,j=1,2,3,??,n 其中n=0}
数据关系:V={Aj-1,Aj | Aj-1,Aj 属于D,j=2,3,??n 其中n=2,且Aj-1 与Aj 为祖先与
后
代关系(parent)、后代与祖先关系(child)、兄弟之间关系(sibling)}
基本操作:
1. 显示某人信息。
2. 修改某人信息。
3. 增加某人孩子。
4. 删除某人。
5. 通过某人查找其双亲、孩子、兄弟。
}ADT Familytree
三、详细设计
1.定义“个人信息”类型:
struct Info{ //一个人的有关信息在内存中的存储结构
char name[MAX_CHARNUM]; //姓名
Date birthday; //出生日期
int marry; //婚否
char addr[MAX_CHARNUM]; //住址
int live; //健在否
Date deathday; //死亡日期
};
2.定义“家谱类型文件”类型
{ //一个人的有关信息在磁盘文件中存储结构
char name[MAX_CHARNUM]; //姓名
int birthday.year; //出生年份
int birthday.month; //出生月份
int birthday.day; //出生日期
int marry; //婚否
char addr[MAX_CHARNUM]; //住址
int live; //健在否
int deathday.year; //死亡年份
int deathday.month; //死亡月份
int deathday.day; //死亡日期
char fathername; //父亲名字
};
3.定义“家谱”类型
struct PersonNode{ //一个人的信息和与其他人关系的存储
结构
Info info; //自己的信息
PersonNode* parent; //指向父亲的指针
PersonNode* child; //指向孩子的指针
PersonNode* sibling; //指向兄弟的指针
}*Person;
4. 用结构Date 存储日期
struct Date{ //年、月、日存储结构
int year; //年
int month; //月
int day; //日
};
5.用结构QuickSortNode 存储快速排序数组值(为快速排序而设)
struct QuickSortNode{ //为以出生日期大小快速排序建立的存储结构
Date birthday;
文档评论(0)