java在版本2的基础上设计实现一个具有GUI界面的人员信息管理系统,要求实现基本的人员增、删、改、查的功能,人员信息列表应采用TableView组件。
时间: 2024-03-31 19:37:52 浏览: 12
好的,以下是一个基于JavaFX的人员信息管理系统的实现,它包括GUI界面和基本的人员增、删、改、查功能,人员信息列表采用TableView组件显示。
首先,我们需要创建一个Person类,该类包含人员信息的属性,例如姓名、性别、出生日期、电话号码等。
```java
public class Person {
private String name;
private String gender;
private LocalDate birthDate;
private String phoneNumber;
public Person(String name, String gender, LocalDate birthDate, String phoneNumber) {
this.name = name;
this.gender = gender;
this.birthDate = birthDate;
this.phoneNumber = phoneNumber;
}
// getter and setter methods
}
```
接下来,我们需要创建一个Database类,该类负责与数据库交互,包括添加、删除、修改和查询人员信息。
```java
public class Database {
private Connection connection;
public Database(String url, String user, String password) throws SQLException {
connection = DriverManager.getConnection(url, user, password);
}
public void addPerson(Person person) throws SQLException {
String query = "INSERT INTO persons(name, gender, birth_date, phone_number) VALUES (?, ?, ?, ?)";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, person.getName());
statement.setString(2, person.getGender());
statement.setDate(3, Date.valueOf(person.getBirthDate()));
statement.setString(4, person.getPhoneNumber());
statement.executeUpdate();
}
public void deletePerson(Person person) throws SQLException {
String query = "DELETE FROM persons WHERE name = ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, person.getName());
statement.executeUpdate();
}
public void updatePerson(Person oldPerson, Person newPerson) throws SQLException {
String query = "UPDATE persons SET name = ?, gender = ?, birth_date = ?, phone_number = ? WHERE name = ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, newPerson.getName());
statement.setString(2, newPerson.getGender());
statement.setDate(3, Date.valueOf(newPerson.getBirthDate()));
statement.setString(4, newPerson.getPhoneNumber());
statement.setString(5, oldPerson.getName());
statement.executeUpdate();
}
public List<Person> searchPerson(String name) throws SQLException {
List<Person> result = new ArrayList<>();
String query = "SELECT name, gender, birth_date, phone_number FROM persons WHERE name LIKE ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, "%" + name + "%");
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
String personName = resultSet.getString("name");
String gender = resultSet.getString("gender");
LocalDate birthDate = resultSet.getDate("birth_date").toLocalDate();
String phoneNumber = resultSet.getString("phone_number");
result.add(new Person(personName, gender, birthDate, phoneNumber));
}
return result;
}
public void close() throws SQLException {
connection.close();
}
}
```
然后,我们需要创建一个JavaFX的主界面,该界面包含用于添加、删除、修改和查询人员信息的组件,以及用于显示人员信息列表的TableView组件。
```java
public class Main extends Application {
private Database database;
private ObservableList<Person> personList;
private TableView<Person> tableView;
private TextField nameTextField;
private TextField genderTextField;
private DatePicker birthDatePicker;
private TextField phoneNumberTextField;
@Override
public void start(Stage primaryStage) throws Exception {
// create database
database = new Database("jdbc:mysql://localhost:3306/persons", "root", "password");
// create TableView
TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<Person, String> genderColumn = new TableColumn<>("Gender");
genderColumn.setCellValueFactory(new PropertyValueFactory<>("gender"));
TableColumn<Person, LocalDate> birthDateColumn = new TableColumn<>("Birth Date");
birthDateColumn.setCellValueFactory(new PropertyValueFactory<>("birthDate"));
TableColumn<Person, String> phoneNumberColumn = new TableColumn<>("Phone Number");
phoneNumberColumn.setCellValueFactory(new PropertyValueFactory<>("phoneNumber"));
tableView = new TableView<>();
tableView.getColumns().addAll(nameColumn, genderColumn, birthDateColumn, phoneNumberColumn);
personList = FXCollections.observableArrayList();
tableView.setItems(personList);
// create form for adding, updating and searching person
Label nameLabel = new Label("Name:");
nameTextField = new TextField();
HBox nameHBox = new HBox(nameLabel, nameTextField);
Label genderLabel = new Label("Gender:");
genderTextField = new TextField();
HBox genderHBox = new HBox(genderLabel, genderTextField);
Label birthDateLabel = new Label("Birth Date:");
birthDatePicker = new DatePicker();
HBox birthDateHBox = new HBox(birthDateLabel, birthDatePicker);
Label phoneNumberLabel = new Label("Phone Number:");
phoneNumberTextField = new TextField();
HBox phoneNumberHBox = new HBox(phoneNumberLabel, phoneNumberTextField);
Button addButton = new Button("Add");
addButton.setOnAction(event -> addPerson());
Button updateButton = new Button("Update");
updateButton.setOnAction(event -> updatePerson());
Button searchButton = new Button("Search");
searchButton.setOnAction(event -> searchPerson());
HBox buttonHBox = new HBox(addButton, updateButton, searchButton);
VBox formVBox = new VBox(nameHBox, genderHBox, birthDateHBox, phoneNumberHBox, buttonHBox);
// create main layout
VBox mainVBox = new VBox(tableView, formVBox);
// create scene
Scene scene = new Scene(mainVBox);
// show stage
primaryStage.setScene(scene);
primaryStage.show();
}
private void addPerson() {
String name = nameTextField.getText();
String gender = genderTextField.getText();
LocalDate birthDate = birthDatePicker.getValue();
String phoneNumber = phoneNumberTextField.getText();
if (name != null && !name.isEmpty() && birthDate != null) {
try {
database.addPerson(new Person(name, gender, birthDate, phoneNumber));
personList.add(new Person(name, gender, birthDate, phoneNumber));
clearForm();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void updatePerson() {
Person selectedPerson = tableView.getSelectionModel().getSelectedItem();
if (selectedPerson != null) {
String name = nameTextField.getText();
String gender = genderTextField.getText();
LocalDate birthDate = birthDatePicker.getValue();
String phoneNumber = phoneNumberTextField.getText();
if (name != null && !name.isEmpty() && birthDate != null) {
try {
database.updatePerson(selectedPerson, new Person(name, gender, birthDate, phoneNumber));
personList.set(personList.indexOf(selectedPerson), new Person(name, gender, birthDate, phoneNumber));
clearForm();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
private void searchPerson() {
String name = nameTextField.getText();
if (name != null && !name.isEmpty()) {
try {
List<Person> result = database.searchPerson(name);
personList.setAll(result);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void clearForm() {
nameTextField.clear();
genderTextField.clear();
birthDatePicker.setValue(null);
phoneNumberTextField.clear();
}
@Override
public void stop() throws Exception {
super.stop();
database.close();
}
public static void main(String[] args) {
launch(args);
}
}
```
在这个JavaFX应用程序中,我们首先创建了一个Database对象,然后创建了一个TableView来显示人员信息列表,以及一个表单用于添加、删除、修改和查询人员信息。在添加、删除、修改和查询人员信息时,我们使用Database对象来与数据库交互。最后,我们将TableView和表单组合在一起,创建了一个主界面,并将其显示在Stage中。
需要注意的是,此JavaFX应用程序使用了JavaFX 11及以上版本,因此您需要在项目中包含JavaFX库,并在运行时使用--module-path和--add-modules参数来指定JavaFX库的路径和模块。