关于#java#的问题:Java课要求的设计,自己技术不过关,学校教的是eclipse,Java家谱管理系统,不需要实现界面

Java课要求的设计,自己技术不过关,希望可以帮一下,不需要太复杂,不需要实现界面,学校教的是eclipse,中间始终有些部分自己无法实现,要求如图

img


中间出了问题,不知道哪里有问题,下面是我写的源码,希望可以帮忙纠正一下


package 家谱;
import java.awt.geom.Ellipse2D;
import java.lang.module.FindException;
import java.nio.channels.Pipe;
import java.sql.SQLSyntaxErrorException;
import java.util.Scanner;

class Person{
    private String name;
    private String sex;
    private int num;
    Person[] child = new Person[2];
    private String peiou;
    public Person(String name, String sex,String peiou,int num ) {
        this.setName(name);
        this.setSex(sex);
        this.setNum(num);
        this.setPeiou(peiou);
    }
    public String getName() {
        return name;
    }
    public void setName(String name2) {
        this.name = name2;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getPeiou() {
        return peiou;
    }

    public void setPeiou(String peiou) {
        this.peiou = peiou;
    }
}

public class family{
    static int flag = 0;
    private static final Person Person = null;
    static Person p1 = new Person("name", "男", "ren", 2);
    public static void main(String[] args) {
        caidan();
    }
    public static void caidan() {
        System.out.print("\n    主菜单");
        System.out.print("\n A.建立家谱");
        System.out.print("\n B.查找个人信息");
        System.out.print("\n C.创建家庭成员");
        System.out.print("\n D.输出全部的家谱");
        System.out.print("\n E.退出程序");
        System.out.print("\n 请输入您的选择:");
        Scanner sc_xuanze =new Scanner(System.in);
        String xuanze = sc_xuanze.nextLine();
        switch(xuanze) {
            case "A":
                System.out.print(" 您选择了A");
                p1 = creat(p1);
                caidan();
                break;
            case"B":
                flag = 0;
                System.out.print("请输入您要查找的人的姓名:");
                Scanner sc_fdname = new Scanner(System.in);
                String findname = sc_fdname.nextLine();
                find(findname);
                if(flag == 1) System.out.print("有此人");
                else {
                    System.out.print("无此人");
                }
                caidan();
                break;
            case"C":
                flag=0;
                System.out.print("请输入你想建立家庭的成员姓名:");
                sc_fdname = new Scanner(System.in);
                findname = sc_fdname.nextLine();
                tianjia(find_02(findname));
                caidan();
                break;
            case"D":
                System.out.print("现在进行家谱输出:");
                System.out.print("\n                  当前家谱");
                System.out.print("\n第一代:"+p1.getName()+"和"+p1.getPeiou()+"拥有孩子 "+p1.child[1].getName());
                if (p1.child[1] != null) {
                    System.out.print("\n第二代:"+p1.child[1].getName());
                    if (p1.child[1].child[1] != null) {
                        System.out.print("\n第三代:"+p1.child[1].child[1].getName());
                        if (p1.child[1].child[1].child[1] != null) {
                            System.out.print("第四代: "+p1.child[1].child[1].child[1].getName());
                        }
                    }
                }
            case"E":
                System.exit(0);
        }
    }
public static Person creat(Person p11)
    {
        Scanner sc_name = new Scanner(System.in);
        System.out.print("\n请输入您要建立家谱祖先的姓名:");
        String name = sc_name.nextLine();
        System.out.print("请输入性别:");
        Scanner sc_sex = new Scanner(System.in);
        String sex = sc_sex.nextLine();
        System.out.print("请输入"+name+"配偶的姓名(没有配偶请输入无):");
        Scanner sc_po = new  Scanner(System.in);
        String peiou = sc_po.nextLine();
        System.out.print("请输入此人孩子的数量:");
        Scanner sc_num = new Scanner(System.in);
        int num = sc_num.nextInt();
        p11= new Person(name,sex,peiou,num);
        return p11;
    }
public static Person tianjia (Person p21) {
        if (p21.getNum()!=0) {
            System.out.print("\n请输入"+p21.getName()+"的孩子的名字:");
            Scanner sc_name=new Scanner(System.in);
            String name = sc_name.nextLine();
            System.out.print("\n请输入"+name+"的性别:");
            Scanner sc_sex= new Scanner(System.in);
            String sex=sc_sex.nextLine();
            System.out.print("请输入"+name+"配偶的姓名(没有配偶请输入无):");
            Scanner sc_po = new  Scanner(System.in);
            String peiou = sc_po.nextLine();
            System.out.print("请输入此人孩子的数量:");
            Scanner sc_num = new Scanner(System.in);
            int num = sc_num.nextInt();
            String psex = p21.getSex();
            String psex_0="男";
            if(psex.equals(psex_0)) {
                psex_0 = "女";
            }
            p21.child[0]=new Person(p21.getPeiou(),psex_0,p21.getName(), p21.getNum());
            p21.child[1]= new Person(name, sex,peiou ,num);
            psex = p21.child[1].getSex();
            psex_0="男";
            if(psex.equals(psex_0)) {
                psex_0 = "女";
            }
            p21.child[1].child[0]=new Person(p21.child[1].getPeiou(),psex_0,p21.child[1].getName(), p21.child[1].getNum());
            //System.out.print(p11.getName()+"配偶的名字是:"+p11.getPeiou()+" 孩子的数量是"+p11.getNum()+"  孩子名字是:"+p11.child[1].getName());
            System.out.print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            System.out.print("家谱建立完成\n");
            //p11.child[1].child[1]=new Person("hahah", "nan", "wu", 1);
        }
        else {
            System.out.print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            System.out.print(p21.getName()+"配偶的名字是:"+p21.getPeiou()+" 孩子数量是:"+p21.getNum());
            System.out.print(p21.getName()+"\n暂时没有后代\n");
        }
        return p21;
    }
    
public  static void find(String findname) {
        String bname= p1.getName();
        if (findname.equals( bname )) {
            System.out.print("\n找到此人:");
            System.out.print("\n"+p1.getName()+"的配偶是"+p1.getPeiou()+" 有"+p1.getNum()+"个孩子");
            if (p1.child[1] !=null) {
                System.out.print("\n"+p1.getName()+"的孩子是"+p1.child[1].getName());
            }
            flag =1;
            return;
        }
        else if (flag == 0 && p1.child!=null ){
            for (int i = 0; i < p1.child.length; i++) {
                String bname_01 = p1.child[i].getName();
                if (findname.equals(bname_01)) {
                    System.out.print("\n找到此人:");
                    System.out.print("\n"+p1.child[i].getName()+" 性别_"+p1.child[i].getSex()+" 配偶是"+p1.child[i].getPeiou()+" 有"+p1.child[i].getNum()+"个孩子");
                    flag=1;
                    return ;
                }
                else continue;
            }
            
            if (flag == 0) {
                for (int i = 1; i < p1.child.length; i++) {
                    if (p1.child[i].child != null) {
                        for (int l = 0; l< p1.child[i].child.length; l++) {
                            String bname_01 = p1.child[i].child[l].getName();
                            if (findname.equals(bname_01)) {
                                System.out.print("\n找到此人:");
                                System.out.print("\n"+p1.child[i].child[l].getName()+" 性别_"+p1.child[i].child[l].getSex()+
                                        " 配偶是"+p1.child[i].child[l].getPeiou()+" 有"+p1.child[i].child[l].getNum()+"个孩子");
                                flag=1;
                                break;
                            }
                            else continue;
                        }
                    }
                }
            }
        }
    }

    public  static Person find_02(String findname) {
        //System.out.print(p1.getName()+p1.getNum()+p1.getPeiou());//+p1.child[1].getName()+p1.child[1].getName()+p1.child[1].getNum()+p1.child[1].getSex()+p1.child[1].getPeiou());
        int fog = 0;
        String bname= p1.getName();
        if (findname.equals( bname )) {
            System.out.print("\n★现在开始创建"+p1.getName()+"的家庭信息★:");
            fog = 1;
            return p1;
        }
        else {
            for (int i = 0; i < p1.child.length; i++) {
                String bname_01 = p1.child[i].getName();
                if (findname.equals(bname_01)) {
                    System.out.print("\n找到此人:");
                    System.out.print("\n★现在开始建立"+p1.child[i].getName()+"的家庭信息★:");
                    return p1.child[i];

                }
                else continue;
            }
            if (fog== 0) {
                for (int i = 1; i < p1.child.length; i++) {
                    if (p1.child[i].child != null) {
                        for (int l = 0; l< p1.child[i].child.length; l++) {
                            String bname_01 = p1.child[i].child[l].getName();
                            if (findname.equals(bname_01)) {
                                fog = 1;
                                System.out.print("\n找到此人:");
                                System.out.print("\n★现在开始建立"+p1.child[i].getName()+"的家庭信息★:");
                                return p1.child[i].child[l];

                            }
                            else continue;
                        }
                    }
                }
            }
        }
        System.out.print("查无此人");
        return null;
    }
    public static void familyshuchu() {
    }
}

1.整体设计的数据结构有问题,固定只能有两个孩子
2.查询人名方法只能查询三代,第四代查询不了

我记得在众多算法中,有一种叫并查集的,可以轻而易举的解决归属问题。
如果可以可以抽一些时间去了解一下并查集的实现方法和它的意义。

建议把遇到的问题整理出来!“中间出了问题,不知道哪里有问题”,具体是什么问题,这样可以给回答者缩小范围,大家也更愿意帮你解答