答案:通过设计ScoreRecord类封装成绩数据,ScoreManager类管理成绩记录并计算平均分,结合Swing构建图形界面实现输入与展示,最终在Main类中启动程序,形成结构清晰、易于扩展的成绩录入系统。

用Java制作一个考试成绩录入界面,核心在于合理运用面向对象思想来组织代码结构。下面通过一个简单但完整的实例,展示如何从类设计到界面搭建,实现成绩录入功能。
每个成绩记录应包含学生姓名、科目和分数。我们创建一个ScoreRecord类来封装这些数据。
关键点: 提供构造方法、getter/setter,并可添加验证逻辑。
public class ScoreRecord {
private String studentName;
private String subject;
private double score;
public ScoreRecord(String studentName, String subject, double score) {
if (studentName == null || studentName.trim().isEmpty()) {
throw new IllegalArgumentException("姓名不能为空");
}
this.studentName = studentName;
this.subject = subject;
this.score = score;
}
// Getter 和 Setter
public String getStudentName() { return studentName; }
public String getSubject() { return subject; }
public double getScore() { return score; }
@Override
public String toString() {
return "姓名:" + studentName + ",科目:" + subject + ",成绩:" + score;
}
}
这个类负责存储和管理所有成绩记录,体现“单一职责”原则。
立即学习“Java免费学习笔记(深入)”;
功能包括: 添加成绩、查询全部记录、统计平均分等。
import java.util.ArrayList;
import java.util.List;
public class ScoreManager {
private List<ScoreRecord> records;
public ScoreManager() {
records = new ArrayList<>();
}
public void addRecord(ScoreRecord record) {
records.add(record);
}
public List<ScoreRecord> getAllRecords() {
return new ArrayList<>(records); // 返回副本避免外部修改
}
public double getAverageScore() {
return records.stream()
.mapToDouble(ScoreRecord::getScore)
.average()
.orElse(0.0);
}
}
使用Swing创建一个简单的GUI界面,用户可输入信息并提交。
组件包括: 文本框、标签、按钮、文本域显示结果。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class ScoreInputFrame extends JFrame {
private JTextField nameField = new JTextField(10);
private JTextField subjectField = new JTextField(10);
private JTextField scoreField = new JTextField(10);
private JTextArea outputArea = new JTextArea(10, 30);
private ScoreManager manager = new ScoreManager();
public ScoreInputFrame() {
setTitle("成绩录入系统");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
add(new JLabel("姓名:")); add(nameField);
add(new JLabel("科目:")); add(subjectField);
add(new JLabel("分数:")); add(scoreField);
JButton addButton = new JButton("录入");
addButton.addActionListener(this::addScore);
add(addButton);
outputArea.setEditable(false);
add(new JScrollPane(outputArea));
pack();
setLocationRelativeTo(null);
}
private void addScore(ActionEvent e) {
try {
String name = nameField.getText().trim();
String subject = subjectField.getText().trim();
double score = Double.parseDouble(scoreField.getText().trim());
ScoreRecord record = new ScoreRecord(name, subject, score);
manager.addRecord(record);
outputArea.append(record.toString() + "\n");
outputArea.append("当前平均分:" + String.format("%.2f", manager.getAverageScore()) + "\n\n");
// 清空输入框
nameField.setText("");
subjectField.setText("");
scoreField.setText("");
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(this, "请输入有效的数字分数", "输入错误", JOptionPane.ERROR_MESSAGE);
} catch (IllegalArgumentException ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(), "输入错误", JOptionPane.ERROR_MESSAGE);
}
}
}
编写main方法启动窗口。
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new ScoreInputFrame().setVisible(true);
});
}
}
基本上就这些。通过把数据、业务逻辑和界面分离,代码更清晰、易维护。后续可以扩展功能,比如保存到文件、支持多科目统计、异常处理优化等。面向对象的设计让这些扩展变得自然。
以上就是Java制作考试成绩录入界面_面向对象逻辑搭建实例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号