用Java写一个学籍管理系统代码,要求1. 有完整友好的图形化界面;2. 录入学生基本信息的功能;3. 修改学生基本信息的功能;4. 查询学生基本信息的功能;5. 删除学生基本信息的功能;6. 可以将学生基本信息导出到磁盘上
时间: 2024-03-20 22:42:35 浏览: 19
好的,下面是一个简单的Java学籍管理系统代码实现,满足您的要求:
```java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class StudentManager extends JFrame {
private static final long serialVersionUID = 1L;
private JTable table;
private DefaultTableModel model;
private List<Student> students = new ArrayList<Student>();
public StudentManager() {
setTitle("学籍管理系统");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(800, 600));
// 创建菜单栏
JMenuBar menubar = new JMenuBar();
JMenu fileMenu = new JMenu("文件");
JMenuItem exportItem = new JMenuItem("导出");
exportItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
exportStudents();
}
});
fileMenu.add(exportItem);
menubar.add(fileMenu);
setJMenuBar(menubar);
// 创建表格
String[] columnNames = { "学号", "姓名", "性别", "年龄" };
model = new DefaultTableModel(columnNames, 0);
table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
// 创建按钮
JButton addButton = new JButton("添加");
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addStudent();
}
});
JButton editButton = new JButton("修改");
editButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
editStudent();
}
});
JButton deleteButton = new JButton("删除");
deleteButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deleteStudent();
}
});
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonPanel.add(addButton);
buttonPanel.add(editButton);
buttonPanel.add(deleteButton);
// 创建主面板
JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(scrollPane, BorderLayout.CENTER);
mainPanel.add(buttonPanel, BorderLayout.SOUTH);
setContentPane(mainPanel);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
// 添加学生
private void addStudent() {
JDialog dialog = new JDialog(this, "添加学生", true);
dialog.setPreferredSize(new Dimension(300, 200));
JLabel idLabel = new JLabel("学号:");
JTextField idField = new JTextField();
JLabel nameLabel = new JLabel("姓名:");
JTextField nameField = new JTextField();
JLabel genderLabel = new JLabel("性别:");
JTextField genderField = new JTextField();
JLabel ageLabel = new JLabel("年龄:");
JTextField ageField = new JTextField();
JPanel panel = new JPanel(new BorderLayout());
JPanel inputPanel = new JPanel(new BorderLayout());
inputPanel.add(idLabel, BorderLayout.WEST);
inputPanel.add(idField, BorderLayout.CENTER);
inputPanel.add(nameLabel, BorderLayout.WEST);
inputPanel.add(nameField, BorderLayout.CENTER);
inputPanel.add(genderLabel, BorderLayout.WEST);
inputPanel.add(genderField, BorderLayout.CENTER);
inputPanel.add(ageLabel, BorderLayout.WEST);
inputPanel.add(ageField, BorderLayout.CENTER);
panel.add(inputPanel, BorderLayout.CENTER);
JButton okButton = new JButton("确定");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String id = idField.getText();
String name = nameField.getText();
String gender = genderField.getText();
String age = ageField.getText();
Student student = new Student(id, name, gender, age);
students.add(student);
model.addRow(new Object[] { id, name, gender, age });
dialog.dispose();
}
});
JButton cancelButton = new JButton("取消");
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
panel.add(buttonPanel, BorderLayout.SOUTH);
dialog.setContentPane(panel);
dialog.pack();
dialog.setLocationRelativeTo(this);
dialog.setVisible(true);
}
// 修改学生
private void editStudent() {
int row = table.getSelectedRow();
if (row == -1) {
JOptionPane.showMessageDialog(this, "请先选择一行数据", "提示", JOptionPane.WARNING_MESSAGE);
return;
}
String id = (String) model.getValueAt(row, 0);
String name = (String) model.getValueAt(row, 1);
String gender = (String) model.getValueAt(row, 2);
String age = (String) model.getValueAt(row, 3);
JDialog dialog = new JDialog(this, "修改学生", true);
dialog.setPreferredSize(new Dimension(300, 200));
JLabel idLabel = new JLabel("学号:");
JTextField idField = new JTextField(id);
JLabel nameLabel = new JLabel("姓名:");
JTextField nameField = new JTextField(name);
JLabel genderLabel = new JLabel("性别:");
JTextField genderField = new JTextField(gender);
JLabel ageLabel = new JLabel("年龄:");
JTextField ageField = new JTextField(age);
JPanel panel = new JPanel(new BorderLayout());
JPanel inputPanel = new JPanel(new BorderLayout());
inputPanel.add(idLabel, BorderLayout.WEST);
inputPanel.add(idField, BorderLayout.CENTER);
inputPanel.add(nameLabel, BorderLayout.WEST);
inputPanel.add(nameField, BorderLayout.CENTER);
inputPanel.add(genderLabel, BorderLayout.WEST);
inputPanel.add(genderField, BorderLayout.CENTER);
inputPanel.add(ageLabel, BorderLayout.WEST);
inputPanel.add(ageField, BorderLayout.CENTER);
panel.add(inputPanel, BorderLayout.CENTER);
JButton okButton = new JButton("确定");
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String newId = idField.getText();
String newName = nameField.getText();
String newGender = genderField.getText();
String newAge = ageField.getText();
if (!newId.equals(id)) {
// 更新学生列表和表格中的数据
for (Student student : students) {
if (student.getId().equals(id)) {
student.setId(newId);
student.setName(newName);
student.setGender(newGender);
student.setAge(newAge);
break;
}
}
model.setValueAt(newId, row, 0);
}
model.setValueAt(newName, row, 1);
model.setValueAt(newGender, row, 2);
model.setValueAt(newAge, row, 3);
dialog.dispose();
}
});
JButton cancelButton = new JButton("取消");
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
panel.add(buttonPanel, BorderLayout.SOUTH);
dialog.setContentPane(panel);
dialog.pack();
dialog.setLocationRelativeTo(this);
dialog.setVisible(true);
}
// 删除学生
private void deleteStudent() {
int[] rows = table.getSelectedRows();
if (rows.length == 0) {
JOptionPane.showMessageDialog(this, "请先选择行数据", "提示", JOptionPane.WARNING_MESSAGE);
return;
}
int option = JOptionPane.showConfirmDialog(this, "确定要删除选中的行数据吗?", "提示", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
for (int i = rows.length - 1; i >= 0; i--) {
String id = (String) model.getValueAt(rows[i], 0);
for (Student student : students) {
if (student.getId().equals(id)) {
students.remove(student);
break;
}
}
model.removeRow(rows[i]);
}
}
}
// 导出学生
private void exportStudents() {
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
for (Student student : students) {
writer.write(student.getId() + "," + student.getName() + "," + student.getGender() + ","
+ student.getAge());
writer.newLine();
}
writer.flush();
JOptionPane.showMessageDialog(this, "导出成功", "提示", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "导出失败:" + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
public static void main(String[] args) {
new StudentManager();
}
// 学生类
private static class Student {
private String id;
private String name;
private String gender;
private String age;
public Student(String id, String name, String gender, String age) {
this.id = id;
this.name = name;
this.gender = gender;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
}
```
代码中使用了Java Swing构建了一个简单的图形界面,通过表格显示学生的基本信息。在菜单栏上增加了一个导出功能,可以将学生信息导出为CSV文件。同时,界面上还提供了添加、修改、删除学生的操作。