编写一个查询类继承JFrame,类名为StudentSearch 要求:输入学生姓名,单击“查询”按钮,若学生姓名在数据文件(data.txt)中存在,则在多行文本框中显示查询到的学生成绩信息;若姓名在数据文件中不存在,显示查无此人,单击关闭按钮结束程序
时间: 2023-11-25 12:04:48 浏览: 58
西南科技大学Java程序设计与实践 实验三 类的继承与多态的应用
5星 · 资源好评率100%
以下是一个可能的实现:
```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() {
super("学生查询");
JLabel nameLabel = new JLabel("姓名:");
nameField = new JTextField(20);
JButton searchButton = new JButton("查询");
searchButton.addActionListener(this);
JPanel inputPanel = new JPanel();
inputPanel.add(nameLabel);
inputPanel.add(nameField);
inputPanel.add(searchButton);
resultArea = new JTextArea(10, 30);
resultArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(resultArea);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(inputPanel, BorderLayout.NORTH);
getContentPane().add(scrollPane, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
String name = nameField.getText().trim();
if (name.length() == 0) {
JOptionPane.showMessageDialog(this, "请输入学生姓名");
return;
}
try {
BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
String line;
boolean found = false;
while ((line = reader.readLine()) != null) {
String[] fields = line.split("\\s+");
if (fields[0].equals(name)) {
resultArea.setText(line);
found = true;
break;
}
}
reader.close();
if (!found) {
resultArea.setText("查无此人");
}
} catch (IOException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(this, "读取数据文件出错:" + ex.getMessage());
}
}
public static void main(String[] args) {
new StudentSearch();
}
}
```
这个程序的界面包含一个文本框和一个按钮,用户输入学生姓名后单击按钮进行查询。查询结果在一个多行文本框中显示。查询实现的具体过程是读取数据文件的每一行,按空格分隔出姓名和成绩信息,逐行比较姓名是否与输入相同。如果找到了匹配的行,则将该行信息显示在多行文本框中;否则显示“查无此人”。如果读取数据文件出错,则弹出一个消息框提示错误信息。
阅读全文