Я создал программу Family Tree в Java, используя базу данных MySQL. Программа состоит в том, что пользователь вводит данные, такие как имя, имя отца, город, штат. Данные хранятся в базе данных. И тогда, если мы введем какое-либо имя, оно будет искать в базе данных и вернуть полное семейное древо.
Я создал для него логику, что, если какое-либо имя вводится пользователем, оно будет искать имя и распечатать данные, тогда оно назначит имя с именем отца и снова будет искать в базе данных до тех пор, пока не будет найдено никаких записей. Он работает нормально, но проблема возникает, когда есть общее имя двух членов. Как это решить, любой подход будет оценен.
Я прилагаю код для программы.
private void btnSearchActionPerformed(java.awt.event.ActionEvent evt) {
txtDisplay.setText("");
str="";
boolean b = false;
name = txtName.getText();
b = hasParent(name);
if(b==true)
getData();
else
JOptionPane.showMessageDialog(this, "No Records");
b = hasParent(name);
while(hasParent(name))
{
getData();
}
txtDisplay.setText(str);
}
public boolean hasParent(String name)
{
boolean b = false;
b = DBManager.searchParent(name);
return b;
}
public void getData(){
Family f = new Family();
f = DBManager.getFamily(name);
str = str+"Name: "+f.getName()+"\t|| "+"Father Name: "+f.getFatherName()+"\n\n";
name = f.getFatherName();
}
Методы доступа к базе данных:
public static boolean searchParent(String name){
boolean flag = false;
int count=0;
try(Connection con = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);){
PreparedStatement st = con.prepareStatement("select name from Family where Name=?");
System.out.println(name);
st.setString(1,name);
ResultSet rs = st.executeQuery();
if(rs.next()){
flag =true;
}
rs.close();
st.close();
}catch(Exception e){
}
return flag;
}
Используйте 2 таблицы.
Первый, содержащий данные пользователя: ID, имя, дата рождения, дата смерти (если применимо),...
где id
- только автогенерированный уникальный номер для каждого пользователя.
Другая таблица содержит "родительские" отношения. Эта таблица содержит столбцы father
и son
, например. (или если вы также хотите добавить мать и братьев и сестер, у вас могут быть person
otherPerson
и type
определяющие, является ли это отцом, матерью или родным братом). Эти столбцы имеют значение id
этого конкретного человека в первой таблице.
Затем в вашем "пользовательском интерфейсе" вы просматриваете всех людей с таким именем, распечатываете их и выбираете правильного, если это применимо. Вы вставляете id
выбранного человека вместе с id
вновь вставленного человека в эту таблицу отношений.
fatherID
.