帮我写一个java问题描述:编写一个基于图形用户界面的简易学生信息查询系统。基本业务功能为:用户输入账号密码登录,只有登录成功才能进入系统,否则需重新登录;系统通过读取文件导入学生数据;系统具有学生信息查询功能。包括代码
时间: 2024-02-19 11:59:36 浏览: 250
一、问题描述
本实验旨在编写一个基于图形用户界面的简易学生信息查询系统。该系统具有登录功能,只有登录成功才能进入系统,否则需重新登录。系统通过读取文件导入学生数据,实现学生信息的查询功能。
二、设计思路
1. 登录功能
在登录界面中设置账号和密码输入框,用户输入正确的账号和密码才能进入系统。如果账号和密码错误,需要弹出提示框提示用户重新输入。
2. 导入学生数据功能
在系统启动时,通过读取文件的方式导入学生数据。可以使用Java中的Scanner类读取文件,将学生的姓名、学号、性别、年龄等信息保存在一个ArrayList或者HashMap中,方便后续的查询操作。
3. 学生信息查询功能
在系统主界面中设置查询框,用户输入学号或者姓名等关键词,系统会自动根据关键词进行模糊查询,并将查询结果展示在界面上。
三、实现步骤
1. 创建登录界面
使用Java Swing框架创建登录界面,设置账号和密码输入框,添加登录按钮和重置按钮。在登录按钮的ActionListener中,判断用户输入的账号和密码是否正确,如果正确则跳转到系统主界面,否则弹出提示框提示用户重新输入。
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LoginFrame extends JFrame implements ActionListener {
private JLabel userLabel, passwordLabel;
private JTextField userText;
private JPasswordField passwordText;
private JButton loginButton, resetButton;
public LoginFrame() {
setTitle("Login");
setSize(300, 150);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
userLabel = new JLabel("Username:");
passwordLabel = new JLabel("Password:");
userText = new JTextField(15);
passwordText = new JPasswordField(15);
loginButton = new JButton("Login");
resetButton = new JButton("Reset");
JPanel panel = new JPanel(new GridLayout(3, 2));
panel.add(userLabel);
panel.add(userText);
panel.add(passwordLabel);
panel.add(passwordText);
panel.add(loginButton);
panel.add(resetButton);
loginButton.addActionListener(this);
resetButton.addActionListener(this);
add(panel);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == loginButton) {
String username = userText.getText();
String password = new String(passwordText.getPassword());
if (username.equals("admin") && password.equals("123456")) {
JOptionPane.showMessageDialog(this, "Login successful!");
dispose();
new MainFrame();
} else {
JOptionPane.showMessageDialog(this, "Incorrect username or password!");
}
} else if (e.getSource() == resetButton) {
userText.setText("");
passwordText.setText("");
}
}
public static void main(String[] args) {
new LoginFrame();
}
}
```
2. 导入学生数据
在系统启动时,使用Scanner类读取文件,将学生信息保存在一个ArrayList或者HashMap中。可以使用Java IO流进行文件读取操作。
```java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentData {
private ArrayList<Student> students;
public StudentData() {
students = new ArrayList<>();
loadData();
}
private void loadData() {
try {
File file = new File("students.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] data = line.split(",");
String name = data[0];
String id = data[1];
String gender = data[2];
int age = Integer.parseInt(data[3]);
students.add(new Student(name, id, gender, age));
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("File not found!");
}
}
public ArrayList<Student> getStudents() {
return students;
}
}
```
3. 学生信息查询功能
在系统主界面中设置查询框,添加查询按钮。在查询按钮的ActionListener中,根据用户输入的关键词进行模糊查询操作,将查询结果展示在界面上。
```java
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;
public class MainFrame extends JFrame implements ActionListener {
private JTextField searchField;
private JButton searchButton;
private JTable table;
private StudentTableModel tableModel;
private StudentData studentData;
public MainFrame() {
setTitle("Student Information System");
setSize(600, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
searchField = new JTextField();
searchButton = new JButton("Search");
searchButton.addActionListener(this);
JPanel searchPanel = new JPanel(new BorderLayout());
searchPanel.add(searchField, BorderLayout.CENTER);
searchPanel.add(searchButton, BorderLayout.EAST);
studentData = new StudentData();
tableModel = new StudentTableModel(studentData.getStudents());
table = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(table);
add(searchPanel, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == searchButton) {
String keyword = searchField.getText();
ArrayList<Student> result = new ArrayList<>();
for (Student student : studentData.getStudents()) {
if (student.getName().contains(keyword) || student.getId().contains(keyword)) {
result.add(student);
}
}
tableModel.setStudents(result);
}
}
public static void main(String[] args) {
new MainFrame();
}
}
```
四、实验结果
实验结果为一个基于图形用户界面的简易学生信息查询系统,具有登录功能、导入学生数据功能和学生信息查询功能。用户可以输入账号和密码登录系统,系统会自动读取文件导入学生数据,方便用户进行学生信息查询。
五、实验总结
本实验通过使用Java Swing框架和IO流,实现了一个简易的学生信息查询系统。在实现过程中,需要注意一些细节问题,比如输入输出流的关闭操作、异常处理等。同时,还可以进一步完善系统的功能,比如添加学生信息的增加、修改和删除功能,提高系统的实用性和用户体验。
阅读全文