1.2 功能要求
本项目的实质是完成兑家谱成员信息的建立,查找,插入,修改,删除等功能,可以首先定义家族成员数据结构,然后将每个功能作为一个成员函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得到运行结果。
二、设计
2.1 Node 类设计
Node 类是一个模板类,存储一个 T 类型的值和两个指针,分别是代表指向兄弟节点的 next 指针和指向自己子节点的 link 指针。
2.2 LinkedList 类设计
首先,LinkedList 依旧是模板类,它存储了两个成员变量,分别是代表家谱祖先的 root 节点,以及将来用于代表所操作的人物的 curFind。主要有六个 public 函数,分别是:
- add(T familyRoot) 传入的是祖先名字,创建家谱中第一个元素。
- void add(T familyName,T childName) 给家谱中的某个人添加子女。
- void deleteFromTree(T fatherName) 删除家谱中的某个人,连带子女一起从家谱中删除。
- void update(T fatherName,T updateName)更改家谱中某个人的姓名
- void show(T familyName)展示家谱中某个人的子女
- bool findFromTree(T familyName)找出在家谱中这个人是否存在
还有一个 private 函数:
void findFromTree(Node<T> * x,T familyName) 从家谱中找到某个人,并将它存在curFind中,供其他函数使用
2.3 主程序设计
首先需要打印出提示信息,让用户知道如何建立家谱树。接着,首先让用户输入家谱中祖先的姓名并展示。之后让用户通过指令自由选择对家谱的操作,完成增删改查等对家谱的基本操作,并且操作完能妥善退出。
三、实现
3.1 Node 类实现
其实就是在以前的 Node 类基础上添加了一个指向自己子类的指针 link。
template <class T> class Node
{
public:
T value;
Node<T> *next;
Node<T> *link;
Node(T value) : value(value), next(nullptr), link(nullptr) {}
};
源码和文档都托管在了【WRITE-BUG数字空间】上面了,有需要的可自取~