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.mzph.cn/news/651219.shtml

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

相关文章

STM32标准库——(5)EXTI外部中断

1.中断系统 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 中断优先级&#xff…

《WebKit 技术内幕》学习之十五(6):Web前端的未来

6 Chromium OS和Chrome的Web应用 6.1 基本原理 HTML5技术已经不仅仅用来编写网页了&#xff0c;也可以用来实现Web应用。传统的操作系统支持本地应用&#xff0c;那么是否可以有专门的操作系统来支持Web应用呢&#xff1f;当然&#xff0c;现在已经有众多基于Web的操作系统&…

uniapp小程序:内存超过2mb解决方法(简单)message:Error: 上传失败:网络请求错误 代码包大小超过限制。

分析&#xff1a;这种情况是代码文件内存超过2mb无法进行预览上传 解决方法&#xff1a; 1、Hbuilder中点击运行-->运行到小程序模拟器--->运行时是否压缩代码 2、在微信小程序中点击详情--->本地设置&#xff1a; 3、点击预览即可运行了

两个近期的计算机领域国际学术会议(软件工程、计算机安全):欢迎投稿

近期&#xff0c;受邀担任两个国际学术会议的Special session共同主席及程序委员会成员&#xff08;TPC member&#xff09;&#xff0c;欢迎广大学界同行踊跃投稿&#xff0c;分享最新研究成果。期待这个夏天能够在夏威夷檀香山或者加利福尼亚圣荷西与各位学者深入交流。 SERA…

南方故乡吹来的风

故乡的风 - 张明敏 词&#xff1a;刘因国 曲&#xff1a;刘因国 南方故乡吹来的风 带着潮水的呼唤 吹着你的秀发 飘散着茉莉的香 茉莉的香哟 南方故乡吹来的风 带着渔船的归航 吹着你的欢畅 吹着渔帆点点醉哟 点点的醉哟 远方的姑娘 你是否听见 我的心在嘿哟 你…

上位机图像处理和嵌入式模块部署(c/c++ opencv)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 opencv可以运行在多个平台上面&#xff0c;当然windows平台也不意外。目前来说&#xff0c;opencv使用已经非常方便了&#xff0c;如果不想自己编译…

81 C++对象模型探索。数据语义学 - 静态成员变量的存取,非静态成员变量的存取

一&#xff0c;静态成员变量的存取 静态成员变量只有一个实体&#xff0c;保存在可执行文件的数据段中&#xff0c;如果没有初始化则保存在数据段的BBS中&#xff0c;由于存储在执行文件的数据段中&#xff0c;因此在编译阶段就会确定地址。当程序编译完成后&#xff0c;不管运…

20240127如何在线识别德语字幕?

20240127如何在线识别德语字幕&#xff1f; 2024/1/27 11:42 1945[科尔贝格]Kolberg 01:48:49 接近109分钟 德语视频的字幕OCR适配&#xff1a; 1、whisper&#xff0c;8:39-8:58&#xff0c;使用GTX1080需要接近20分钟。对整机性能要求比较重&#xff0c;特别吃显卡&#xff…

LabVIEW信号时间间隔测量

用LabVIEW软件平台开发一个用于测量两路信号时间间隔的系统。系统利用LabVIEW的数据采集和处理能力&#xff0c;能够准确测量并分析来自不同硬件板卡的信号时间间隔&#xff0c;这对于精确控制和数据分析至关重要。 系统主要由以下几部分组成&#xff1a;数据采集卡、信号处理…

MySQL:事务隔离级别详解

事务一共有四个特性&#xff1a;原子性、隔离性、持久性、一致性。简称ACID。本文所将就是其中的隔离性。 1、事务中因为隔离原因导致的并发问题有哪些&#xff1f; 脏读&#xff1a;当事务A对一个数据进行修改&#xff0c;但这个操作还未提交&#xff0c;但此时事务B就已经读…

ArrayList集合简单源码分析+一道面试题

ArrayList类中的属性 public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable {java.io.Serialprivate static final long serialVersionUID 8683452581122892189L;/*** DEFAULT_CAPACITY表…

【ASP.NET Core 基础知识】--数据库连接--数据迁移和代码优先开发

一、数据迁移 1.1 定义和用途 数据迁移是指将数据从一个存储系统、数据格式、应用程序或硬件平台转移到另一个的过程。这个过程可以涉及数据的转换、清洗和验证&#xff0c;以确保数据的完整性和一致性。一般用于如下情况&#xff1a; 系统升级&#xff1a; 当企业需要更新其…

力扣(LeetCode)227. 基本计算器 II

给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将字符串作为数学表达式计算的内置函数&#…

第二百八十九回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取视频文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …

三角函数、反三角函数

一、三角函数 二、反三角函数&#xff1a;已知三角函数值&#xff0c;反算角度大小 因为严格单调函数才有反函数一个y对应一个x&#xff0c;显然ysinx&#xff0c;ycosx&#xff0c;ytanx在其定义域并不是严格单调&#xff0c;所以需要人为划定范围。 1. 研究yarcsinx、yarcco…

CSS优先级内容

定义CSS样式时&#xff0c;经常出现两个或多个样式规则应用在同一元素的情况&#xff0c;这时就会出现优先级的情况&#xff0c;那么应用的元素应该显示哪一个样式呢&#xff1f; 一.下面举例对优先级进行具体讲解。 p{color:red;} .blue{color:orange;} #header{color:blu…

嵌入式学习-C++-Day3

嵌入式学习-CDay3 一、思维导图 二、作业 1.设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #inclu…

桌面型物联网智能机器人设计(预告)

相关资料 桌面级群控机器人CoCube探索-2022--CSDN博客 视频&#xff1a; 能&#xff01;有&#xff01;多&#xff01;酷&#xff01;CoCube桌面级群控机器人 让我看看谁在SJTU里划水… 简要介绍 设计一个桌面型物联网智能机器人&#xff0c;以ESP32芯片为核心&#xff0c;配…

Redis的SDS你了解吗?

初识SDS&#xff1a; Redis的String和其他很多编程语言中的语义相似&#xff0c;它能够表达3种值的类型&#xff1a; 1.字符串 2.整数 3.浮点数 三种类型根据具体场景由Redis完成相互之间的自动转换&#xff0c;并且根据需要选取底层的承载方式&#xff0c;Redis内部&#x…

pip 安装出现报错 SSLError(SSLError(“bad handshake

即使设置了清华源&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplepip 安装包不能配置清华源&#xff0c;出现报错: Retrying (Retry(total2, connectNone, readNone, redirectNone, statusNone)) after connection broken by ‘SSLE…