怎么实现用输入人名查询人名的双亲和子孙
时间: 2024-04-21 13:29:06 浏览: 17
要实现用输入人名查询人名的双亲和子孙,首先需要有一个人物关系的数据库,数据库中保存每个人物的姓名、性别、出生日期、死亡日期等信息,以及每个人物和其双亲、配偶、子女等人物之间的关系。
查询双亲时,可以根据输入的人名在数据库中查找该人物的父母信息。如果该人物有父母,就可以找到他们的姓名、性别、生卒日期等信息。如果该人物没有父母,则查询结果为空。
查询子孙时,可以根据输入的人名在数据库中查找该人物的子女信息。如果该人物有子女,就可以找到他们的姓名、性别、生卒日期等信息。如果该人物没有子女,则查询结果为空。可以继续递归查询子孙的子孙,直到查询到最末端。
需要注意的是,数据库中的人物关系应该是完整的,包括所有祖先和后代的信息。同时,查询结果也需要根据不同需求进行过滤和排序,以便用户能够快速地找到所需信息。
相关问题
怎么用java的树知识实现用输入人名查询人名的双亲和子孙
可以使用Java中的树数据结构来实现用输入人名查询人名的双亲和子孙。以下是一种基本实现方式:
1. 定义Person类,包括姓名、性别、出生日期、死亡日期等信息。
```java
class Person {
String name;
String gender;
Date birth;
Date death;
List<Person> children;
Person father;
Person mother;
// 构造函数、getter和setter方法等
}
```
2. 定义FamilyTree类,用于构建家族树。家族树的根节点为最早的祖先,每个人物节点包含其父母节点和子女节点。
```java
class FamilyTree {
Map<String, Person> nameToPersonMap; // 用于快速查找Person对象
Person root; // 家族树的根节点
// 构造函数、初始化方法等
// 添加新成员到家族树中
public void addMember(Person person) {
nameToPersonMap.put(person.name, person);
if (person.father != null) {
person.father.children.add(person);
}
if (person.mother != null) {
person.mother.children.add(person);
}
}
// 根据姓名查找Person对象
public Person findPersonByName(String name) {
return nameToPersonMap.get(name);
}
// 查找某个人的双亲
public List<Person> findParents(String name) {
List<Person> parents = new ArrayList<>();
Person person = findPersonByName(name);
if (person != null) {
if (person.father != null) {
parents.add(person.father);
}
if (person.mother != null) {
parents.add(person.mother);
}
}
return parents;
}
// 查找某个人的子孙
public List<Person> findDescendants(String name) {
List<Person> descendants = new ArrayList<>();
Person person = findPersonByName(name);
if (person != null) {
Queue<Person> queue = new LinkedList<>();
queue.offer(person);
while (!queue.isEmpty()) {
Person p = queue.poll();
descendants.add(p);
for (Person child : p.children) {
queue.offer(child);
}
}
}
return descendants;
}
}
```
3. 使用FamilyTree类构建家族树,并调用它的方法查找双亲和子孙。
```java
FamilyTree tree = new FamilyTree();
// 添加成员到家族树中,构建家族树
...
// 查找某个人的双亲
List<Person> parents = tree.findParents("张三");
// 查找某个人的子孙
List<Person> descendants = tree.findDescendants("张三");
```
以上是一种简单的实现方式,还可以根据需求进行优化和扩展。例如,可以添加树的遍历方法、支持多种查询方式等。
用键盘输入怎么用java的树知识实现用输入人名查询人名的双亲和子孙
可以使用Java的Scanner类从键盘读取用户输入的人名,然后通过FamilyTree类进行查询。以下是一个示例代码:
```java
import java.util.*;
public class FamilyTreeDemo {
public static void main(String[] args) {
// 构建家族树
FamilyTree tree = new FamilyTree();
// 添加成员到家族树中,构建家族树
...
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要查询的人名:");
String name = scanner.nextLine();
List<Person> parents = tree.findParents(name);
List<Person> descendants = tree.findDescendants(name);
if (parents.isEmpty()) {
System.out.println(name + "没有双亲。");
} else {
System.out.println(name + "的父亲是:" + (parents.get(0) != null ? parents.get(0).getName() : "未知")
+ ",母亲是:" + (parents.get(1) != null ? parents.get(1).getName() : "未知"));
}
if (descendants.isEmpty()) {
System.out.println(name + "没有子孙。");
} else {
System.out.println(name + "的子孙有:");
for (Person p : descendants) {
System.out.println(p.getName());
}
}
}
}
```
以上代码中,使用Scanner类从键盘读取用户输入的人名,然后调用FamilyTree类的findParents()和findDescendants()方法进行查询。最后,根据查询结果输出相应的信息。