Java课要求的设计,自己技术不过关,希望可以帮一下,不需要太复杂,不需要实现界面,学校教的是eclipse,中间始终有些部分自己无法实现,要求如图
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.查询人名方法只能查询三代,第四代查询不了
我记得在众多算法中,有一种叫并查集的,可以轻而易举的解决归属问题。
如果可以可以抽一些时间去了解一下并查集的实现方法和它的意义。
建议把遇到的问题整理出来!“中间出了问题,不知道哪里有问题”,具体是什么问题,这样可以给回答者缩小范围,大家也更愿意帮你解答