编写一个查询类继承JFrame,类名为StudentSearch 要求:输入学生姓名,单击“查询”按钮,若学生姓名在数据文件(data.txt)中存在,则在多行文本框中显示查询到的学生成绩信息;若姓名在数据文件中不存在,显示查无此人,单击关闭按钮结束程序
时间: 2023-11-25 17:04:48 浏览: 71
一个学生信息查询的程序
以下是符合要求的代码:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class StudentSearch extends JFrame implements ActionListener {
private JTextField nameField;
private JTextArea resultArea;
public StudentSearch() {
setTitle("学生成绩查询");
setSize(400, 300);
setLocationRelativeTo(null);
// 姓名输入面板
JPanel namePanel = new JPanel();
JLabel nameLabel = new JLabel("姓名:");
nameField = new JTextField(10);
namePanel.add(nameLabel);
namePanel.add(nameField);
// 查询按钮
JButton searchButton = new JButton("查询");
searchButton.addActionListener(this);
// 结果显示面板
resultArea = new JTextArea();
resultArea.setEditable(false);
JScrollPane resultScrollPane = new JScrollPane(resultArea);
// 整体布局
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(namePanel, BorderLayout.NORTH);
contentPane.add(searchButton, BorderLayout.CENTER);
contentPane.add(resultScrollPane, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String name = nameField.getText();
String fileName = "data.txt";
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
String line;
boolean found = false;
while ((line = reader.readLine()) != null) {
String[] parts = line.split(",");
if (parts[0].equals(name)) {
resultArea.setText(line + "\n");
found = true;
break;
}
}
if (!found) {
resultArea.setText("查无此人\n");
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
new StudentSearch();
}
}
```
注意,代码中假设数据文件每行是以逗号分隔的两个部分,第一个部分是姓名,第二个部分是成绩。您需要根据实际情况进行修改。
阅读全文