Java课程设计——计算器

目录

简介:

一.基本要求

二.功能实现

三.设计思路

 四.具体步骤操作

 五.具体代码内容展示

1.设计计算器窗口,提供了基本的界面组件以及按钮的设置和添加。

 2.部分按钮的功能实现

3.三角函数计算的实现

4.进制转换的实现

5.细节处理

6.获取当前时间

六.界面展示

1.完整界面

2.功能展示

 七.项目git地址

八.git提交记录

九.总结


简介:

  在本博客中,我将使用Java Swing构建一个科学计算器,Java Swing是一种图形用户界面(GUI)工具包。通过这个项目,我们可以学习如何使用Java Swing创建一个交互式的计算器应用程序,并实现基本的数学运算功能和一些科学计算功能。

一.基本要求

  仿照Windows计算器,编写一具有GUI的计算器,能实现整数的加、减、乘、除四则运算,并且需要支持键盘快捷键,基本可取代windows计算器。支持复制、粘贴功能,方便输入长串数字。

二.功能实现

1.加减乘除的实现

2.三角函数,乘方开方等计算的实现

3.可以直接获取当前时间

4.可以进行进制的换算

5.实现从键盘的录入以及复制粘贴导入数据

三.设计思路

  1. 导入所需的Java库:在代码开头使用import语句导入所需的Java库,包括java.awtjavax.swing等库。

  2. 创建Calculator类并继承JFrame:创建一个名为Calculator的类,并继承JFrame类,以构建应用程序的主窗口。

  3. 定义类的成员变量:在Calculator类中定义一些成员变量,用于存储计算器的状态,如start表示是否重新开始计算,result表示当前的计算结果,command表示当前的运算符等。

  4. 创建窗口和布局:在Calculator类的构造方法中设置窗口的标题、大小和位置,并创建一个面板用于容纳按钮。

  5. 添加文本域:使用JTextField组件创建一个文本域,并设置其属性,如大小和编辑性。

  6. 创建按钮:使用JButton组件创建各种功能按钮,并为每个按钮设置事件监听器。

  7. 实现事件监听器:创建一个内部类MyActionListener,实现ActionListener接口,并编写各个按钮的事件处理逻辑。根据按钮的不同,执行相应的操作,如输入数字、选择运算符、执行计算等。

  8. 界面美化和异常处理:在添加按钮时,设置按钮的背景颜色和样式,以使界面更美观。在事件处理逻辑中,进行异常处理,如处理除数为零的情况或输入错误数字的情况,并给出相应的提示信息。

  9. 完善辅助方法:在Calculator类中添加辅助方法,如去除多余的小数位数、计算阶乘等。

  10. 实例化Calculator类:在main方法中创建Calculator对象,启动应用程序。

 四.具体步骤操作

  1. 创建Java项目并导入所需的库: 首先,我们需要创建一个Java项目,并导入Java Swing库以及其他所需的库文件。

  2. 创建Calculator类并继承JFrame: 在项目中创建一个名为Calculator的类,并继承JFrame类,这将作为我们的计算器应用程序的主窗口。

  3. 设置计算器的基本属性: 在Calculator类的构造方法中,设置计算器的标题、大小和位置等基本属性。

  4. 添加文本域和按钮: 使用JTextField组件添加一个文本域,用于显示计算结果或用户输入的数字。然后,使用JButton组件创建按钮,并将它们添加到一个面板中。

  5. 实现按钮的事件监听器: 创建一个内部类MyActionListener实现ActionListener接口,用于监听按钮的事件。根据按钮的不同功能,编写相应的操作逻辑,例如数字输入、运算符、三角函数、阶乘等。

  6. 实现数学运算功能: 在事件监听器中,根据用户的输入和选择的运算符,实现基本的数学运算功能,如加法、减法、乘法和除法。使用Math类的方法实现一些常见的数学运算,如平方、开方和三角函数等。

  7. 实现其他功能: 添加一些其他的科学计算功能,例如十进制与二进制的转换、获取当前时间等。

  8. 完善用户界面: 根据需要,设置按钮的背景颜色、布局和其他样式。

  9. 测试和调试: 运行程序,通过点击按钮进行数学运算和科学计算,检查结果是否正确。在测试过程中,注意捕获并处理可能出现的异常,例如除数为零或输入错误。

 五.具体代码内容展示

1.设计计算器窗口,提供了基本的界面组件以及按钮的设置和添加。

 public Calculator() {

        this.setTitle("科学计算器");
        this.setSize(600, 300);
        this.setLocationRelativeTo(null);

        //添加文本域
        jTextField = new JTextField(30);
        jTextField.setText("");
        jTextField.setEditable(true);
        this.add(jTextField,"North");

        //添加按钮
        jPanel.setLayout(new GridLayout(5,7,3,3));
        String name[] = {
                "+/-","PI","1/X","C","/","*","Back","X^2","X^3",
                "X^y","7","8","9","-","X!","√X","3^√X","4","5",
                "6","+","sin","cos","tan","1","2","3","%",
                "2进制","10进制","cot","time","0",".","="
        };
        jButtons = new JButton[name.length];
        MyActionListener actionListener= new MyActionListener();

 2.部分按钮的功能实现

 if(start) {
                if((int)input.charAt(0)>=48 && (int)input.charAt(0)<=57
                        && input.length() == 1 ) {
                    jTextField.setText(""+input);
                }
                if(input.equals("+/-")) {
                    jTextField.setText("-");
                }
                if(input.equals("PI")) {
                    jTextField.setText(""+Math.PI);
                }
                start = false;
                if(input.equals("C"))
                    jTextField.setText("");
            }
 //实现清零键
            else if(input.equals("C"))
                jTextField.setText("");
                //实现退格键
            else if(input.equals("Back")) {
                if(jTextField.getText().length() > 0){
                    jTextField.setText(jTextField.getText().substring(0,jTextField.getText().length()-1));
                }
            }

3.三角函数计算的实现

 else if(input.equals("sin")) {
                result = Math.sin(Double.parseDouble(jTextField.getText()));
                jTextField.setText(""+getPrettyNumber(Double.toString(result)));
                start = true;
            }
            //实现余弦三角函数
            else if(input.equals("cos")) {
                result = Math.cos(Double.parseDouble(jTextField.getText()));
                jTextField.setText(""+getPrettyNumber(Double.toString(result)));
                start = true;
            }
            //实现余切三角函数
            else if(input.equals("cot")) {
                result = 1.0/Math.tan(Double.parseDouble(jTextField.getText()));
                jTextField.setText(""+getPrettyNumber(Double.toString(result)));
                start = true;
            }
            //实现正切三角函数
            else if(input.equals("tan")) {
                result = Math.tan(Double.parseDouble(jTextField.getText()));
                jTextField.setText(""+getPrettyNumber(Double.toString(result)));
                start = true;
            }

4.进制转换的实现

 //实现十进制到二进制的转化
            else if(input.equals("2进制")) {
                String result2 = Integer.toBinaryString(Integer.parseInt(jTextField.getText()));
                jTextField.setText(""+getPrettyNumber(result2));
                start = true;
            }
            //实现二进制到十进制的转化
            else if(input.equals("10进制")) {
                try {
                    String result2 = Integer.valueOf(jTextField.getText(),2).toString();
                    jTextField.setText(""+getPrettyNumber(result2));
                }catch(NumberFormatException exception) {
                    JOptionPane.showMessageDialog(null, "对不起,数字错误,请重新输入!", "Error!", JOptionPane.ERROR_MESSAGE);
                    throw new NumberFormatException("数字格式错误");
                }finally {
                    start = true;
                }

            }

5.细节处理

    //去掉小数点后没用的0
    public static String getPrettyNumber(String number) {
        return BigDecimal.valueOf(Double.parseDouble(number))
                .stripTrailingZeros().toPlainString();
    }

6.获取当前时间

       //实现获取当前时间
            else if(input.equals("time")) {
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                jTextField.setText(df.format(System.currentTimeMillis()));
                start = true;
            }

六.界面展示

1.完整界面

2.功能展示

 (1).加减乘除运算(以1+1进行加法运算演示)

1+1结果输出

 

 (2).乘方开方运算(以对9进行开放演示)

 

 (3).进制换算的实现(以5的二进制为例)

 (4).时间功能的演示

 七.项目git地址

https://github.com/CanCanN33d/-1

八.git提交记录

九.总结

  通过使用Java Swing提供的组件和事件监听器,我们可以创建一个功能强大且用户友好的计算工具。无论是进行基本的数学运算还是执行一些科学计算,这个科学计算器都能够满足我们的需求。

  • 25
    点赞
  • 202
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的,我可以帮你设计一个简易的计算器,以下是基本的实现步骤: 1. 首先,你需要创建一个 Java 项目,并在其中创建一个 Calculator 类。 2. 在 Calculator 类中定义一个 main 方法,用来启动计算器应用程序。 3. 定义一个 display 方法,用来显示计算器的界面。 4. 定义一个 calculate 方法,用来执行计算操作。 5. 在 display 方法中,创建一个 JFrame 窗口,并在其中添加文本框和按钮。 6. 为每个按钮添加 ActionListener 监听器,用来响应用户的操作。 7. 在 calculate 方法中,解析用户输入的表达式,并计算出结果。 8. 将计算结果显示在文本框中。 以下是一个基本的实现代码示例: ``` import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator { public static void main(String[] args) { JFrame frame = new JFrame("简易计算器"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(4, 4)); JTextField textField = new JTextField(); String[] buttonLabels = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"}; for (String label : buttonLabels) { JButton button = new JButton(label); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String text = textField.getText() + label; textField.setText(text); } }); panel.add(button); } frame.getContentPane().add(BorderLayout.NORTH, textField); frame.getContentPane().add(BorderLayout.CENTER, panel); frame.setSize(400, 400); frame.setVisible(true); } public static double calculate(String expression) { // 解析表达式并计算结果 return 0.0; } } ``` 这个简易计算器的界面由一个文本框和一个按钮网格组成,用户可以通过按钮输入数字和运算符,计算结果会显示在文本框中。你可以根据自己的需要对界面进行修改和美化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值