使用c++代码生成家族关系查询系统
时间: 2023-12-24 11:04:04 浏览: 162
家族关系查询系统
5星 · 资源好评率100%
好的,您需要一个基于传统家谱的家族关系查询系统,是吗?如果是这样的话,以下是一个简单的 C++ 代码示例,可以帮助您开始构建这样的系统。
```c++
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
class Person { // 人员类
public:
string name; // 姓名
string gender; // 性别
int age; // 年龄
string spouse; // 配偶
vector<Person*> children; // 孩子
Person* father; // 父亲
Person* mother; // 母亲
Person(string name, string gender, int age) { // 构造函数
this->name = name;
this->gender = gender;
this->age = age;
this->spouse = "";
this->father = nullptr;
this->mother = nullptr;
}
void setSpouse(string spouse) { // 设置配偶
this->spouse = spouse;
}
void addChild(Person* child) { // 添加孩子
this->children.push_back(child);
if (this->gender == "male") { // 如果是父亲,设置孩子的父亲为自己
child->father = this;
} else { // 如果是母亲,设置孩子的母亲为自己
child->mother = this;
}
}
};
class FamilyTree { // 家族树类
public:
Person* root; // 家族树的根节点
FamilyTree(Person* root) { // 构造函数
this->root = root;
}
void addSpouse(string name, string spouseName) { // 添加配偶
Person* person = findPerson(name);
Person* spouse = new Person(spouseName, person->gender == "male" ? "female" : "male", 0);
person->setSpouse(spouseName);
spouse->setSpouse(name);
}
void addChild(string name, string childName) { // 添加孩子
Person* person = findPerson(name);
Person* child = new Person(childName, person->gender == "male" ? "female" : "male", 0);
person->addChild(child);
}
void printFamilyTree() { // 打印家族树
printPerson(root);
}
private:
map<string, Person*> personMap; // 姓名到人员的映射表
Person* findPerson(string name) { // 根据姓名查找人员
if (personMap.find(name) != personMap.end()) {
return personMap[name];
} else {
Person* person = new Person(name, "", 0);
personMap[name] = person;
return person;
}
}
void printPerson(Person* person) { // 打印个人信息及其家族树
cout << person->name << " " << person->gender << " " << person->age << endl;
if (person->spouse != "") {
cout << "Spouse: " << person->spouse << endl;
}
if (person->father != nullptr) {
cout << "Father: " << person->father->name << endl;
}
if (person->mother != nullptr) {
cout << "Mother: " << person->mother->name << endl;
}
if (person->children.size() > 0) {
cout << "Children: ";
for (int i = 0; i < person->children.size(); i++) {
cout << person->children[i]->name << " ";
}
cout << endl;
for (int i = 0; i < person->children.size(); i++) {
printPerson(person->children[i]);
}
}
}
};
int main() {
Person* root = new Person("张三", "male", 50);
FamilyTree* familyTree = new FamilyTree(root);
familyTree->addSpouse("张三", "李四");
familyTree->addChild("张三", "张五");
familyTree->addChild("张三", "张六");
familyTree->addSpouse("李四", "王五");
familyTree->addChild("李四", "李五");
familyTree->addChild("李四", "李六");
familyTree->printFamilyTree();
return 0;
}
```
这个示例代码定义了两个类:Person(人员)和FamilyTree(家族树)。Person 类表示一个人员,包括姓名、性别、年龄、配偶、孩子、父亲和母亲等属性。FamilyTree 类表示一个家族树,包括根节点和一些操作,例如添加配偶、添加孩子和打印家族树等。
在示例代码的 main 函数中,我们创建了一个根节点为“张三”的家族树,并向其中添加了一些成员,最后打印了整个家族树。这只是一个简单的示例,您可以根据自己的需要修改代码并添加更多的操作来完善这个家族关系查询系统。
阅读全文