Java实现加权平均分计算程序WeightedAverageCalculator

成绩加权平均分计算程序,带UI界面和输入保存功能。

因为本人对成绩的加权均分有所关注,但学校的教务系统查分时往往又不显示个人的加权均分,加之每次手动敲计算器计算很麻烦就花了点时间写了一个加权均分计算程序自用,顺便开源。

UI界面通过Java的Swing类实现。

代码分享:

WeightedAverageCalculatorGUI.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Objects;public class WeightedAverageCalculatorGUI extends JFrame {private JTextField numSubjectsField;private JButton enterButton;private JScrollPane scrollPane;private JPanel inputPanel;private JButton calculateButton;private JLabel resultLabel;private JTextField filePathField;private JButton saveButton;public WeightedAverageCalculatorGUI() {setTitle("成绩加权平均分计算器");setSize(1600, 1200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);JPanel panel = new JPanel(new BorderLayout());// 添加科目数量输入框和确定按钮JPanel topPanel = new JPanel(new FlowLayout());JLabel numSubjectsLabel = new JLabel("科目数量:");numSubjectsLabel.setFont(Config.DEFAULT_FONT);numSubjectsField = new JTextField(5);numSubjectsField.setPreferredSize(new Dimension(140, 55));numSubjectsField.setFont(Config.FIELD_FONT);enterButton = new JButton("确定");enterButton.setFont(Config.DEFAULT_FONT);topPanel.add(numSubjectsLabel);topPanel.add(numSubjectsField);topPanel.add(enterButton);panel.add(topPanel, BorderLayout.NORTH);// 添加文件路径输入框和保存按钮JPanel bottomPanel = new JPanel(new FlowLayout());JLabel filePathLabel = new JLabel("文件保存路径:");filePathLabel.setFont(Config.DEFAULT_FONT);filePathField = new JTextField(20);filePathField.setFont(Config.FIELD_FONT);saveButton = new JButton("保存");saveButton.setFont(Config.DEFAULT_FONT);bottomPanel.add(filePathLabel);bottomPanel.add(filePathField);bottomPanel.add(saveButton);panel.add(bottomPanel, BorderLayout.SOUTH);// 添加事件监听器以响应确定按钮点击事件enterButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if(!Objects.equals(numSubjectsField.getText(), "")) {int numSubjects = Integer.parseInt(numSubjectsField.getText());createInputPanel(numSubjects);revalidate();}}});// 添加事件监听器以响应保存按钮点击事件saveButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {saveToFile();}});add(panel, BorderLayout.NORTH);setVisible(true);}private void createInputPanel(int numSubjects) {if (scrollPane != null) {getContentPane().remove(scrollPane);}inputPanel = new JPanel();inputPanel.setLayout(new GridLayout(0, 2));// 添加成绩和权重输入框Font labelFont = Config.DEFAULT_FONT;Font fieldFont = Config.FIELD_FONT;for (int i = 1; i <= numSubjects; i++) {JLabel scoreLabel = new JLabel("科目 " + i + " 成绩:");scoreLabel.setFont(labelFont);JTextField scoreField = new JTextField(5);scoreField.setFont(fieldFont);JLabel weightLabel = new JLabel("权重:");weightLabel.setFont(labelFont);JTextField weightField = new JTextField(10);weightField.setFont(fieldFont);inputPanel.add(scoreLabel);inputPanel.add(scoreField);inputPanel.add(weightLabel);inputPanel.add(weightField);}// 添加计算按钮和结果标签calculateButton = new JButton("计算");calculateButton.setFont(Config.DEFAULT_FONT);calculateButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {calculateWeightedAverage(numSubjects);}});inputPanel.add(calculateButton);resultLabel = new JLabel();inputPanel.add(resultLabel);scrollPane = new JScrollPane(inputPanel);scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);getContentPane().add(scrollPane, BorderLayout.CENTER);revalidate();}private void calculateWeightedAverage(int numSubjects) {try {double totalWeightedScore = 0;double totalWeight = 0;resultLabel.setFont(Config.DEFAULT_FONT);resultLabel.setForeground(Color.RED);Component[] components = inputPanel.getComponents();for (int i = 0; i < numSubjects; i++) {JTextField scoreField = (JTextField) components[i * 4 + 1];JTextField weightField = (JTextField) components[i * 4 + 3];double score = Double.parseDouble(scoreField.getText());double weight = Double.parseDouble(weightField.getText());totalWeightedScore += score * weight;totalWeight += weight;}double weightedAverage = totalWeightedScore / totalWeight;resultLabel.setText("加权平均分:" + String.format("%.6f", weightedAverage));// 保存结果到文件
//            saveToFile();} catch (NumberFormatException e) {resultLabel.setText("输入格式错误,请重新输入!");}}private void saveToFile() {String filePath = filePathField.getText() + Config.SAVE_PATH + System.currentTimeMillis() + ".txt";try {File file = new File(filePath);FileWriter writer = new FileWriter(file);writer.write("科目 | 成绩 | 权重\n");if(inputPanel == null) {JOptionPane.showMessageDialog(this, "请先输入成绩和权重进行计算!");return;}Component[] components = inputPanel.getComponents();for (int i = 0; i < components.length / 4; i++) {JTextField scoreField = (JTextField) components[i * 4 + 1];JTextField weightField = (JTextField) components[i * 4 + 3];double score = Double.parseDouble(scoreField.getText());double weight = Double.parseDouble(weightField.getText());writer.write("科目 " + (i + 1) + " | " + score + " | " + weight + "\n");}writer.write("\n");writer.write(resultLabel.getText());writer.close();JOptionPane.showMessageDialog(this, "文件保存成功!");} catch (IOException e) {JOptionPane.showMessageDialog(this, "保存文件时发生错误:" + e.getMessage());}}public static void main(String[] args) {UIManager.put("OptionPane.messageFont", Config.FIELD_FONT);// 设置全局对话框确认按钮大小UIManager.put("OptionPane.buttonFont", Config.FIELD_FONT);// 显示对话框SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new WeightedAverageCalculatorGUI();}});}
}

Config.java

import java.awt.*;public class Config {public static final int FONT_SIZE = 30;public static final String FONT_NAME = "Microsoft YaHei";public static final Font DEFAULT_FONT = new Font(FONT_NAME, Font.BOLD, FONT_SIZE);public static final Font FIELD_FONT = new Font(FONT_NAME, Font.PLAIN, FONT_SIZE);public static final String SAVE_PATH = "\\WeightAverageRecord";
}

相关代码以及jar包已开源至GitHub仓库,包括Config.java、WeightedAverageCalculatorGUI.java和WeightedAverageCalculator.jar。

GitHub地址:https://github.com/wyd333/WeightedAverageCalculator?tab=readme-ov-fileicon-default.png?t=N7T8https://github.com/wyd333/WeightedAverageCalculator?tab=readme-ov-file

如果需要要对代码进行操作,直接拷贝Config.java和WeightedAverageCalculatorGUI.java文件到Project的src目录下(这两个文件最好放在同一目录下),运行WeightedAverageCalculatorGUI.java即可。

如果只是使用功能而无需代码操作,运行WeightedAverageCalculator.jar即可。确定配置过Java环境变量后,直接cmd打开命令行窗口,执行命令:

java -jar WeightedAverageCalculator.jar的绝对路径

页面展示:  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434791.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【电子通识】学习网上《初学者学习电子的常见误区文章》有感

学习硬件电子电路过程中&#xff0c;特别是初级阶段&#xff0c;可能会走进一些误区&#xff0c;会比较迷茫和困惑。如果这时不能正确对待好这些困惑&#xff0c;就会影响正常的学习&#xff0c;干扰学习的进程&#xff0c;严重时可能会半途而废。今天我从网络上看到为初学者写…

兄弟DCP-7057黑白激光多功能一体机加粉后清零方法

硒鼓加粉机器上清零&#xff0c;方法如下&#xff1a; 打开安装硒鼓的前盖。按“清除”键&#xff0c;显示“更换硒鼓”。不用管提示&#xff0c;接着按“启用Start”&#xff0c;再按“”&#xff0c;屏幕上显示“01”。继续按“”&#xff0c;直到屏幕上显示“11”。按“OK”…

nodejs下载 安装 配置环境

目录 1.下载 2、配置环境 1.下载 下载地址&#xff1a;https://nodejs.org/en/download/ 下载完成后&#xff0c;双击安装包&#xff0c;开始安装&#xff0c;一直点next即可。我把安装路径设置为 D:\Program Files\nodejs\ 安装完之后打开终端 windowR cmd 回车&#xff1…

IS-IS:10 ISIS路由渗透

ISIS的非骨干区域&#xff0c;无明细路由&#xff0c;容易导致次优路径问题。可以引入明细路由。 在IS-IS 网络中&#xff0c;所有的 level-2 和 level-1-2 路由器构成了一个连续的骨干区域。 level-1区域必须且只能与骨干区域相连&#xff0c;不同 level-1 区域之间不能直接…

Java笔记 --- 一、双列集合

一、双列集合 双列集合的特点 Map 创建Map对象时&#xff0c;要规定键和值的泛型 Map是一个接口&#xff0c;不能直接创建&#xff0c;要创建实例化对象 Map的遍历 通过键找值 先获取到键的对象&#xff0c;并放到一个单列集合中&#xff08;map.KeySet()方法&#xff09;…

校招刷题指南

编程题训练逻辑思维能力&#xff0c;这是程序员需要具备的核心能力。校招还是比较看重算法能力的&#xff0c;刷题时建议分类型刷&#xff0c;先做简单题&#xff0c;再做比较困难的题&#xff1b;先刷数据结构相关的&#xff0c;然后是剑指offer的其他题目&#xff1b;刷题过程…

3分钟,学会一个测试员必懂 Lambda 小知识!

今天再来给大家介绍下函数式接口和方法引用。 前言 函数式接口 问&#xff1a;Lambda 表达式的类型是什么&#xff1f; 答&#xff1a;函数式接口 问&#xff1a;函数式接口是什么&#xff1f; 答&#xff1a;只包含一个抽象方法的接口&#xff0c;称为函数式接口 &#xf…

《合成孔径雷达成像算法与实现》Figure5.19

clc clear close all距离向参数 R_eta_c 20e3; % 景中心斜距 Tr 25e-6; % 发射脉冲时宽 Kr 0.25e12; % 距离向调频率 Fr 7.5e6; % 距离向采样率 Nrg 256; % 距离线采样点数 Bw abs(Kr*Tr); …

图像处理常用算法介绍

此篇简单回顾下图像处理领域常用到的一些算法&#xff0c;这边只对每个知识点重要的点做一些记录&#xff0c;便于快速的知其形&#xff0c;会其意。 一. SIFT&#xff08;Scale-Invariant feature transform)特征 重点是了解DOG(Difference of Gaussian)高斯差分图像是如何生…

如何解决Flutter应用程序的兼容性问题

随着移动应用开发领域的不断发展&#xff0c;Flutter作为一种跨平台框架&#xff0c;受到了越来越多开发者的青睐。要确保Flutter应用程序能够在不同的设备和操作系统上稳定运行&#xff0c;并提供一致的用户体验&#xff0c;我们需要重视应用程序的兼容性问题。下面将简单的介…

C++多态深度剖析

文章目录 1. 前言2. 多态的概念及定义2.1 概念2.2 多态的构成条件2.3 虚函数2.4 虚函数的重写2.5 override 和 final2.5 重载、覆盖(重写)、隐藏&#xff08;重定义&#xff09;的对比 3. 抽象类3.1 概念3.2 接口继承和实现继承 4. 多态的原理4.1 虚函数表4.2 多态的原理4.3 动…

计算机二级C语言的注意事项及相应真题-6-程序填空

目录 51.将参数num按升序插入到数组xx中52.在数组中找出两科成绩之和最高的学生并返回其在数组中的下标53.删除所有串长超过k的字符串&#xff0c;输出剩下的字符串54.根据所给的一组学生的成绩&#xff0c;计算出平均成绩&#xff0c;并计算低于平均成绩的学生的平均成绩55.将…