新闻中心
J*a制作考试成绩录入界面_面向对象逻辑搭建实例
答案:通过设计ScoreRecord类封装成绩数据,ScoreManager类管理成绩记录并计算平均分,结合Swing构建图形界面实现输入与展示,最终在Main类中启动程序,形成结构清晰、易于扩展的成绩录入系统。

用J*a制作一个考试成绩录入界面,核心在于合理运用面向对象思想来组织代码结构。下面通过一个简单但完整的实例,展示如何从类设计到界面搭建,实现成绩录入功能。
1. 设计成绩信息类(ScoreRecord)
每个成绩记录应包含学生姓名、科目和分数。我们创建一个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;
}
}
2. 创建成绩管理类(ScoreManager)
这个类负责存储和管理所有成绩记录,体现“单一职责”原则。
功能包括: 添加成绩、查询全部记录、统计平均分等。
MedPeer科研绘图
生物医学领域的专业绘图解决方案,告别复杂绘图,专注科研创新
166
查看详情
import j*a.util.ArrayList;
import j*a.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)
.*erage()
.orElse(0.0);
}
}
3. 构建图形界面(Swing实现)
使用Swing创建一个简单的GUI界面,用户可输入信息并提交。
组件包括: 文本框、标签、按钮、文本域显示结果。
import j*ax.swing.*;
import j*a.awt.*;
import j*a.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);
}
}
}
4. 启动主程序
编写main方法启动窗口。
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new ScoreInputFrame().setVisible(true);
});
}
}
基本上就这些。通过把数据、业务逻辑和界面分离,代码更清晰、易维护。后续可以扩展功能,比如保存到文件、支持多科目统计、异常处理优化等。面向对象的设计让这些扩展变得自然。
以上就是J*a制作考试成绩录入界面_面向对象逻辑搭建实例的详细内容,更多请关注其它相关文章!
# 相关文章
# 松原公司网站建设招标
# 河南seo优化多少钱
# 过山峰seo博客
# 九江网站优化渠道
# 巴南知名网站建设师
# 武汉抖音seo哪家好做
# 挂画品类如何做营销推广
# 茂名网站建设论文总结
# 金华网站优化技术公司
# 医疗机构推广营销合法吗知乎
# 解决问题
# 请输入
# 中文网
# java
# 主程序
# 时长
# 创建一个
# 好了
# 考试成绩
# 面向对象
# stream
# win
# ai
# app
# seo
# js
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Go语言中Map存储的结构体如何调用指针方法:深入解析与实践
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
痛风发作了怎么办? 快速止痛和后期饮食调理
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
解决Python单元测试中Mock异常方法调用计数为零的问题
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
理解Python模块与全局变量的作用域管理
神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正
如何将HTML表格多行数据保存到Google Sheet
Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法
QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网
yandex入口引擎手机版 yandex安卓版下载入口
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
夸克浏览器网页版最新地址 夸克浏览器官方入口合集
在FastAPI中利用lifespan与依赖注入高效管理Redis连接池
Pandas DataFrame 多条件优先级排序与排名
天眼查企业查询官网入口 天眼查官方网页版查询
React Hooks最佳实践:动态组件状态管理的组件化方案
CSS Box Model与弹性按钮:维持布局稳定的动画实践
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项
电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】
Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突
在WordPress中通过REST API获取BasicAuth保护的远程文章
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
4399免费游戏网址入口 4399小游戏免费入口点开即玩
css链接悬停下划线样式如何自定义_使用::after结合content和transition
抖音网页版企业服务中心登录入口_抖音网页版企业登录平台
AO3网页版最新入口合集 Archive of Our Own在线访问指南
谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作
汽水音乐网页版使用入口_汽水音乐电脑版播放指南
QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
精准捕获:如何在页面中监听除特定元素外的所有点击事件
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构


2025-12-04
浏览次数:次
返回列表
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);
}
}
}