C++实现的数据结构大作业:家谱管理系统的图形界面应用

需积分: 22 71 下载量 9 浏览量 更新于2024-07-18 11 收藏 97KB DOCX 举报
"一个使用C++编程语言开发的数据结构大作业,实现了一个家谱管理系统,具备简单的图形界面,用户可以通过键盘进行操作。系统基于c++11标准,包含Member类来表示家庭成员,并且有一个FamilySystem类来管理整个家谱。系统支持添加、删除成员以及查询等功能。" 在数据结构大作业中,设计一个家谱管理系统涉及到多种数据结构和算法的应用。在这个系统中,C++被用来实现核心功能,包括类的设计和成员之间的关系管理。以下是该系统中关键的知识点: 1. **类的设计**:`Member` 类是用于表示家庭成员的核心数据结构。它包含了成员的基本信息,如姓名、出生地、生日、性别、身高、年龄、教育背景、职业以及父亲的名字。此外,`Member` 类还定义了指向儿子和兄弟的指针,这表明系统采用了链式结构来表示家庭成员之间的关系。 2. **C++11 标准**:代码遵循C++11标准,这意味着它使用了C++11引入的一些新特性,如默认和删除的构造函数和析构函数,以及更简洁的类型声明。 3. **友元函数**:`Friend` 关键字被用来声明`FamilySystem`类是`Member`类的友元,这样`FamilySystem`类可以访问`Member`类的私有和保护成员。同时,`ostream& operator<<` 和 `istream& operator>>` 被声明为友元,使得可以方便地将`Member`对象输入和输出到文件或控制台。 4. **结构体(Struct)**:`Birthday` 结构体用来存储成员的生日信息,包含年、月、日三个整数成员变量。 5. **动态内存管理**:在`FamilySystem`类的析构函数中,`deleteroot` 表示系统负责释放由它创建的所有成员对象,确保了内存的有效管理。 6. **文件操作**:系统支持从文件中初始化数据,可能使用了输入输出流对象(`istream` 和 `ostream`)来读取和写入文件。 7. **菜单驱动系统**:系统提供了一个主菜单,允许用户选择不同的操作,如添加成员、删除成员等。这通常涉及到循环和条件判断,以根据用户的输入执行相应的功能。 8. **链表数据结构**:通过`Member`类中的指针成员,系统可能实现了链表数据结构来存储家庭成员,以便高效地插入和删除成员,同时维护成员之间的关系。 9. **成员函数**:`FamilySystem` 类还包含了一系列的成员函数,如`addMem()`、`deleteMem()`等,这些函数实现了家谱管理的核心功能,例如添加新的家庭成员或删除现有成员。 10. **继承和多态**:虽然没有明确提及,但为了扩展系统功能,可能会使用继承来创建其他类,如`ExtendedFamilySystem`,以实现更复杂的家谱关系或特性。此外,C++的多态性可以用来实现更灵活的操作,比如通用的成员操作。 这个家谱管理系统展示了C++中面向对象编程的基本概念和高级特性,同时也融入了数据结构和文件操作的知识,是学习和实践C++编程的好例子。
2013-07-21 上传
家谱管理系统,主要用来管理家族成员的基本信息 1、确定整个程序的功能模块。实现程序的主界面,要对主界面的功能选择输入进行容错处理。 2、实现单个结点信息的录入。 3、对录入日期信息进行合法性检验。 4、采用改变字体颜色的方式突出显示主界面的功能项。 5、计算从出生日期到死亡日期的实际天数 6、若家谱树为空,则新建家谱树。实现成员节点的添加。基本功能中可以 强制要求所有成员不同名,即不考虑同名情况(符合小家族的实际情况)。 7、添加成员节点时,可以选择将新添加的节点作为整个家谱的上一代祖先, 或者将新添加的节点作为某个现有成员的孩子。 8、作为某个现有成员的孩子,根据给出的父节点的姓名将该结点添加到相 应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。 9、要求在孩子兄弟二叉树中按各个孩子的年龄进行排序。 10、将家谱树保存到二进制文件。注意,不能保存空白节点。 11、从文件读入家谱信息,重建孩子兄弟二叉树形式的家谱。 12.从文件中读出所有节点信息到一个数组中,然后按一年中生日的先后进 行快速排序。 13、按姓名查询家谱成员并显示该成员的各项信息。 14、给出某一成员的姓名,删除该成员和该成员的所有子孙。 15、成员信息的修改。信息修改时要给出选择界面让用户选择需要修改的信 息项。基本功能中可以限定不容许修改父亲姓名和本人姓名。对日期信 息进行修改时要进行检验。 16、实现层次递进的方式显示整个家谱,显示结果应该体现家谱树的结构。 17、按各种关键字进行查询,要求给出关键字选择界面,并显示符合查询条 件的节点信息。 18、信息统计基本要求包括:平均身高,平均寿命,男女成员各多少,平均 家庭人口数目(假定每个成员构成一个家庭,该家庭的家庭成员是指成 员本人和他的孩子,即家庭人口数=孩子数+1)。要给出统计项的选择界 面. 19、查询某一成员的所有直系亲属。 20、给出某一成员的所有嫡系祖先。 21、确定两人关系。若两人辈分不等,则应指出甲是乙的多少代长辈(晚辈), 甲是否是乙的直系长辈(晚辈),若辈分相同,则应指出是亲兄弟还是多 少代的堂兄弟。