The_dream1121 2024-05-25 04:11 采纳率: 88.2%
浏览 2
已结题

修改以上代码,请补充完整



import javafx.scene.text.Text;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

public class Calcuiator3 {


    public static class ZhuJieMian extends JFrame implements ActionListener {
        private static final long serialVersionUID = 1L;
        //实现序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性
        JTextField x;             //文本框
        String preOperater = "";  //上一次的运算符
        double sum = 0;           //运算结果



        public ZhuJieMian(String title) {
            super(title);
            Container c = getContentPane();      //容器
            c.setLayout(new BorderLayout());     //容器采用边缘布局
            x = new JTextField(50);
            c.add("North", x);
            String[] buttoned = {"7","8", "9", "+/-", "C", "退格", "倒数",
                    "4", "5", "6",  "+", "-", "*", "/",
                    "1", "2", "3","sqrt", "pow", "log10", "%",
                    ".", "0","=","cos", "tan", "exp","历史"};
            JPanel p = new JPanel();      //面板
            p.setLayout(new GridLayout(4, 7, 10, 10)); //面板采用行列数3, 9的网格布局
            for (String s : buttoned) { //用一个for循环将按钮添加进面板并注册监听器
                JButton b = new JButton(s);
                p.add(b);
                b.addActionListener(this);
            }
            c.add("Center", p);
            JMenuBar menuBar = createMenuBar();
            setJMenuBar(menuBar);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        

    // 创建菜单栏
    private JMenuBar createMenuBar() {
        JMenuBar menuBar = new JMenuBar();

        // 创建文件菜单
        JMenu menuFile = new JMenu("计算器");
        menuBar.add(menuFile);

        // 创建转换子菜单
        JMenu menu1 = new JMenu("简易计算器");
        JMenu menu2 = new JMenu("科学计算器");
        JMenu menu3 = new JMenu("程序员计算器");
        menu1.addActionListener(new MenuActionListener1("简易计算器"));
        menu2.addActionListener(new MenuActionListener2("科学计算器"));
        menu3.addActionListener(new MenuActionListener3("程序员计算器"));
        menuFile.add(menu1);
        menuFile.add(menu2);
        menuFile.add(menu3);


        return menuBar;
    }

        private void binaryConversion() {
            String inputText = x.getText();
    }


        //响应用户事件,根据点击按钮实现相关操作
        public void actionPerformed(ActionEvent e) {
            String Command = e.getActionCommand();
            try {
                if (Character.isDigit(Command.charAt(0))) {//如果按钮事件为数字键
                    x.setText(x.getText() + Command);       //添加数字
                } else if (Command.equals(".")) {            //如果按钮事件为”.”键
                    xiaoshu();
                } else if (Command.equals("+/-")) {          //如果按钮事件为”+/-”键"
                    fuhao();
                } else if (Command.equals("退格")) {          //如果按钮事件为”退格”键
                    backspace();
                } else if (Command.equals("=")) {            //如果按钮事件为"=”键
                    dengyu();
                } else if (Command.equals("sqrt")) {         //如果按钮事件为"sqrt"键
                    sqrt();
                } else if (Command.equals("log")) {          //如果按钮事件为"1og”键
                    log();
                } else if (Command.equals("cos")) {          //如果按钮事件为"cos”键
                    cos();
                } else if (Command.equals("tan")) {          //如果按钮事件为”tan”键
                    tan();
                } else if (Command.equals("exp")) {          //如果按钮事件为"exp”键
                    exp();
                } else if (Command.equals("倒数")) {          //如果按钮事件为”求倒”键"
                    qiudao();
                } else if (Command.equals("C")) {            //如果按钮事件为"C"键
                    clear();
                } else if (Command.equals("历史")){           //如果按钮事件为"历史"键
                    lishi();
                } else {
                    doOperation();                     //记录运算符和输入的数字
                    x.setText("");
                    preOperater = Command;
                }
            } catch (Exception ex) {
                sum = 0;
                x.setText("");
            }
        }

        void xiaoshu() { //添加小数点
            String s = x.getText();
            if (!s.contains(".")) x.setText(s + ".");
        }

        void fuhao() { //添加负号
            String s = x.getText();
            if (!s.contains("-"))
                x.setText("-" + x.getText());
        }

        void backspace() { //退格
            String s = x.getText();
            if (s.length() > 0)
                x.setText(s.substring(0, s.length() - 1));
        } //删除最后-一个字符

        void dengyu() {
            doOperation();
            x.setText("" + sum);
            ShuJu(sum);
            preOperater = "";

        }

        void sqrt() { //求该数的平方根
            double m = Double.parseDouble(x.getText());
            if (m < 0)
                x.setText("负数不能开根号");
            else
                x.setText("" + Math.sqrt(m));
        }

        void log() { //求该数的自然对数
            double m = Double.parseDouble(x.getText());
            if (m < 0)
                x.setText("负数不能进行自然对数运算");
            else
                x.setText("" + Math.log10(m));
        }

        void cos() { //求该数的余弦
            double m = Double.parseDouble(x.getText());
            x.setText("" + Math.cos(Math.toRadians(m)));
        }

        void tan() {//求该数的正切
            double m = Double.parseDouble(x.getText());
            x.setText("" + Math.tan(Math.toRadians(m)));
        }

        void exp() { //求e的幂
            double m = Double.parseDouble(x.getText());
            x.setText("" + Math.exp(m));
        }

        void qiudao() { //求倒数
            if (Double.parseDouble(x.getText()) == 0)
                x.setText("除数不能为零");
            else {
                x.setText(" " + 1 / (Double.parseDouble(x.getText())));
                preOperater = "";
            }
        }

        void clear() { //清零
            sum = 0;
            x.setText("");
            preOperater = "";
        }

        //根据记录的运算符将前面记录的结果sum与文本框中的数据进行运算
        void doOperation() {
            double m = Double.parseDouble(x.getText());
            if (preOperater.equals("")) sum = m;     //将结果与文本框中的数据按照前一个运算符运算
            if (preOperater.equals("+")) sum = sum + m; //加法运算
            if (preOperater.equals("-")) sum = sum - m; //减法运算
            if (preOperater.equals("*")) sum = sum * m; //乘法运算
            if (preOperater.equals("/")) sum = sum / m; //除法运算
            if (preOperater.equals("%")) sum = sum % m; //求余
            if (preOperater.equals("pow")) sum = Math.pow(sum, m);
        }
        void ShuJu(double sum){
            SimpleDateFormat data=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            double s1=sum;
            Connection con = null;
            PreparedStatement ps = null;
            try {
                try {
                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;database=KECHENGSHEJI", "shengyiguo", "gena20031121");
                con.setAutoCommit(true);
                System.out.println("已将数据添加到表格");
                String sql = "INSERT INTO shuju(日期,数据) VALUES (?,?)";
                ps = con.prepareStatement(sql);
                ps.setString(1, data.format(new Date()));
                ps.setString(2, String.valueOf(s1));
                ps.executeUpdate();
            }catch (SQLException e){
                e.printStackTrace();
            }
            try {
                if (con != null)
                    con.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                if (ps != null)
                    ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        void lishi(){
            ResultSet resultSet=null;
            Connection con = null;
            Statement stat;
            PreparedStatement ps= null;
            String time;
            Double shuju;
            try {
                try {
                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;database=KECHENGSHEJI","shengyiguo","gena20031121");
                con.setAutoCommit(true);
                stat=con.createStatement();
                String sql="SELECT 日期,数据 FROM shuju";
                resultSet=stat.executeQuery(sql);
                ps=con.prepareStatement(sql);
                System.out.println("    "+"日期"+"                "+"数据");
                while(resultSet.next()){
                    time=resultSet.getString("日期");
                    shuju=resultSet.getDouble("数据");
                    ArrayList<String> arrayList1=new ArrayList<>();
                    ArrayList<String> arrayList2=new ArrayList<>();
                    arrayList1.add(time);
                    arrayList2.add(String.valueOf(shuju));
                    Object[][] table=new Object[arrayList1.size()][2];
                    for (int i = 0; i < arrayList1.size(); i++) {
                        table[i][0]=arrayList1.get(i);
                        table[i][1]=arrayList2.get(i);
                    }

                    System.out.println(Arrays.deepToString(table));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            if (con!=null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (ps!=null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (resultSet!=null){
                try{
                    resultSet.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }

        private class MenuActionListener1 implements ActionListener {
            private Text inputField,resultArea;

            public MenuActionListener1(String 简易计算器) {
                setTitle("简易Windows计算器");
                setSize(400, 400);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setLayout(new BorderLayout());

                JTextField inputField = new JTextField(20);
                JTextArea resultArea = new JTextArea(10, 20);
                resultArea.setEditable(false);

                JPanel inputPanel = new JPanel();
                inputPanel.add(inputField);

                JScrollPane scrollPane = new JScrollPane(resultArea);

                add(inputPanel, BorderLayout.NORTH);
                add(scrollPane, BorderLayout.CENTER);

                JPanel buttonPanel = new JPanel();
                buttonPanel.setLayout(new GridLayout(5, 4));

                // 创建按钮数组并添加监听器
                JButton[] buttons = new JButton[16];
                String[] buttonLabels = {
                        "7", "8", "9", "/",
                        "4", "5", "6", "*",
                        "1", "2", "3", "-",
                        "0", ".", "=", "+",
                        "Dec", "Bin", "Oct", "Hex"
                };

                for (int i = 0; i < buttons.length; i++) {
                    buttons[i] = new JButton(buttonLabels[i]);
                    buttons[i].addActionListener(this);
                    buttonPanel.add(buttons[i]);
                }

                add(buttonPanel, BorderLayout.SOUTH);

                setVisible(true);
                
            }

            @Override
            public void actionPerformed(ActionEvent e) {
                String input = inputField.getText();
                String result = "";

                try {
                    switch (e.getActionCommand()) {
                        case "=":
                            // 这里假设输入的是两个用加号分隔的整数
                            String[] numbers = input.split("\\+");
                            if (numbers.length == 2) {
                                int sum = Integer.parseInt(numbers[0]) + Integer.parseInt(numbers[1]);
                                result = "结果: " + sum;
                            }
                            break;
                        case "Dec":
                        case "Bin":
                        case "Oct":
                        case "Hex":
                            // 假设输入的是十进制整数,进行进制转换
                            int decimalNumber = Integer.parseInt(input);
                            switch (e.getActionCommand()) {
                                case "Bin":
                                    result = "二进制: " + Integer.toBinaryString(decimalNumber);
                                    break;
                                case "Oct":
                                    result = "八进制: " + Integer.toOctalString(decimalNumber);
                                    break;
                                case "Hex":
                                    result = "十六进制: " + Integer.toHexString(decimalNumber);
                                    break;
                                default:
                                    // 无需转换,仅清空结果区(可选)
                                    resultArea.setText("");
                                    break;
                            }
                            break;
                        default:
                            // 如果是数字或小数点,则直接添加到输入框中
                            if (Character.isDigit(e.getActionCommand().charAt(0)) || e.getActionCommand().equals(".")) {
                                inputField.setText(input + e.getActionCommand());
                            }
                    }

                     显示结果
                    if (!result.isEmpty()) {
                        resultArea.append(result + "\n");
                    }

                } catch (NumberFormatException ex) {
                    resultArea.append("错误: 输入无效的数字\n");
                }
            }
        }

        private class MenuActionListener2 implements ActionListener {
            public MenuActionListener2(String 科学计算器) {

            }

            @Override
            public void actionPerformed(ActionEvent e) {

            }
        }

        private class MenuActionListener3 implements ActionListener {
            public MenuActionListener3(String 程序员计算器) {
               

            }

            @Override
            public void actionPerformed(ActionEvent e) {
                String Command = e.getActionCommand();
                try {
                    if (Character.isDigit(Command.charAt(0))) {//如果按钮事件为数字键
                        x.setText(x.getText() + Command);       //添加数字
                    } else if (Command.equals(".")) {            //如果按钮事件为”.”键
                        xiaoshu();
                    } else if (Command.equals("+/-")) {          //如果按钮事件为”+/-”键"
                        fuhao();
                    } else if (Command.equals("退格")) {          //如果按钮事件为”退格”键
                        backspace();
                    } else if (Command.equals("=")) {            //如果按钮事件为"=”键
                        dengyu();
                    } else if (Command.equals("sqrt")) {         //如果按钮事件为"sqrt"键
                        sqrt();
                    } else if (Command.equals("log")) {          //如果按钮事件为"1og”键
                        log();
                    } else if (Command.equals("cos")) {          //如果按钮事件为"cos”键
                        cos();
                    } else if (Command.equals("tan")) {          //如果按钮事件为”tan”键
                        tan();
                    } else if (Command.equals("exp")) {          //如果按钮事件为"exp”键
                        exp();
                    } else if (Command.equals("倒数")) {          //如果按钮事件为”求倒”键"
                        qiudao();
                    } else if (Command.equals("C")) {            //如果按钮事件为"C"键
                        clear();
                    } else if (Command.equals("历史")){           //如果按钮事件为"历史"键
                        lishi();
                    } else {
                        doOperation();                     //记录运算符和输入的数字
                        x.setText("");
                        preOperater = Command;
                    }
                } catch (Exception ex) {
                    sum = 0;
                    x.setText("");
                }
            }
        }
    }
    public static void main(String[] args) {
        JFrame x=new ZhuJieMian("计算器");
        JMenuBar menuBar = new JMenuBar();
        x.setBounds(300,100,630,290);
        //x.setSize(630,290);         //按键大小,若大小不合适则会出现文字显示不全的现象
        x.setVisible(true);
    }
}

修改以上代码,请补充完整

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-25 04:11
    关注

    引自免费微信小程序:皆我百晓生

    在提供的Java代码中,已经实现了一个基本的图形用户界面计算器,包括简易计算器、科学计算器和程序员计算器的功能。为了完成这个程序,你需要实现MenuActionListener2MenuActionListener3 类中的功能,并修复一些存在的问题。以下是完整的代码:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    public class Calculator3 {
    
        public static class ZhuJieMian extends JFrame implements ActionListener {
            private static final long serialVersionUID = 1L;
            private JTextField x;             // 文本框
            String preOperater = "";  // 上一次的运算符
            double sum = 0;           // 运算结果
    
            public ZhuJieMian(String title) {
                super(title);
                Container c = getContentPane();      // 容器
                c.setLayout(new BorderLayout());     // 容器采用边缘布局
                x = new JTextField(50);
                c.add("North", x);
                String[] buttoned = {"7","8", "9", "+/-", "C", "退格", "倒数",
                        "4", "5", "6",  "+", "-", "*", "/",
                        "1", "2", "3","sqrt", "pow", "log10", "%",
                        ".", "0","=","cos", "tan", "exp","历史"};
                JPanel p = new JPanel();      // 面板
                p.setLayout(new GridLayout(4, 7, 10, 10)); // 面板采用行列数3, 9的网格布局
                for (String s : buttoned) { // 用一个for循环将按钮添加进面板并注册监听器
                    JButton b = new JButton(s);
                    p.add(b);
                    b.addActionListener(this);
                }
                c.add("Center", p);
                JMenuBar menuBar = createMenuBar();
                setJMenuBar(menuBar);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
    
            // 创建菜单栏
            private JMenuBar createMenuBar() {
                JMenuBar menuBar = new JMenuBar();
    
                // 创建文件菜单
                JMenu menuFile = new JMenu("计算器");
                menuBar.add(menuFile);
    
                // 创建转换子菜单
                JMenu menu1 = new JMenu("简易计算器");
                JMenu menu2 = new JMenu("科学计算器");
                JMenu menu3 = new JMenu("程序员计算器");
                menu1.addActionListener(new MenuActionListener1("简易计算器"));
                menu2.addActionListener(new MenuActionListener2("科学计算器"));
                menu3.addActionListener(new MenuActionListener3("程序员计算器"));
                menuFile.add(menu1);
                menuFile.add(menu2);
                menuFile.add(menu3);
    
                return menuBar;
            }
    
            private void binaryConversion() {
                String inputText = x.getText();
            }
    
            // 响应用户事件,根据点击按钮实现相关操作
            public void actionPerformed(ActionEvent e) {
                String command = e.getActionCommand();
                try {
                    if (Character.isDigit(command.charAt(0))) {//如果按钮事件为数字键
                        x.setText(x.getText() + command);       //添加数字
                    } else if (command.equals(".")) {            //如果按钮事件为”.”键
                        xiaoshu();
                    } else if (command.equals("+/-")) {          //如果按钮事件为”+/-”键"
                        fuhao();
                    } else if (command.equals("退格")) {          //如果按钮事件为”退格”键
                        backspace();
                    } else if (command.equals("=")) {            //如果按钮事件为"=”键
                        dengyu();
                    } else if (command.equals("sqrt")) {         //如果按钮事件为"sqrt"键
                        sqrt();
                    } else if (command.equals("log")) {          //如果按钮事件为"1og”键
                        log();
                    } else if (command.equals("cos")) {          //如果按钮事件为"cos”键
                        cos();
                    } else if (command.equals("tan")) {          //如果按钮事件为”tan”键
                        tan();
                    } else if (command.equals("exp")) {          //如果按钮事件为"exp”键
                        exp();
                    } else if (command.equals("倒数")) {          //如果按钮事件为”求倒”键"
                        qiudao();
                    } else if (command.equals("C")) {            //如果按钮事件为"C"键
                        clear();
                    } else if (command.equals("历史")){           //如果按钮事件为"历史"键
                        lishi();
                    } else {
                        doOperation();                     //记录运算符和输入的数字
                        x.setText("");
                        preOperater = command;
                    }
                } catch (Exception ex) {
                    sum = 0;
                    x.setText("");
                }
            }
    
            void xiaoshu() { // 添加小数点
                String s = x.getText();
                if (!s.contains(".")) x.setText(s + ".");
            }
    
            void fuhao() { // 添加负号
                String s = x.getText();
                if (!s.contains("-"))
                    x.setText("-" + x.getText());
            }
    
            void backspace() { // 退格
                String s = x.getText();
                if (s.length() > 0)
                    x.setText(s.substring(0, s.length() - 1));
            } // 删除最后一个字符
    
            void dengyu() {
                doOperation();
                x.setText("" + sum);
                ShuJu(sum);
                preOperater = "";
            }
    
            void sqrt() { // 求该数的平方根
                double m = Double.parseDouble(x.getText());
                if (m < 0)
                    x.setText("负数不能开根号");
                else
                    x.setText("" + Math.sqrt(m));
            }
    
            void log() { // 求该数的自然对数
                double m = Double.parseDouble(x.getText());
                if (m < 0)
                    x.setText("负数不能进行自然对数运算");
                else
                    x.setText("" + Math.log10(m));
            }
    
            void cos() { // 求该数的余弦
                double m = Double.parseDouble(x.getText());
                x.setText("" + Math.cos(Math.toRadians(m)));
            }
    
            void tan() { // 求该数的正切
                double m = Double.parseDouble(x.getText());
                x.setText("" + Math.tan(Math.toRadians(m)));
            }
    
            void exp() { // 求e的幂
                double m = Double.parseDouble(x.getText());
                x.setText("" + Math.exp(m));
            }
    
            void qiudao() { // 求倒数
                if (Double.parseDouble(x.getText()) == 0)
                    x.setText("除数不能为零");
                else {
                    x.setText(" " + 1 / (Double.parseDouble(x.getText())));
                    preOperater = "";
                }
            }
    
            void clear() { // 清零
                sum = 0;
                x.setText("");
                preOperater = "";
            }
    
            // 根据记录的运算符将前面记录的结果sum与文本框中的数据进行运算
            void doOperation() {
                double m = Double.parseDouble(x.getText());
                if (preOperater.equals("")) sum = m;     // 将结果与文本框中的数据按照前一个运算符运算
                if (preOperater.equals("+")) sum = sum + m; // 加法运算
                if (preOperater.equals("-")) sum = sum - m; // 减法运算
                if (preOperater.equals("*")) sum = sum * m; // 乘法运算
                if (preOperater.equals("/")) sum = sum / m; // 除法运算
                if (preOperater.equals("%")) sum = sum % m; // 求余
                if (preOperater.equals("pow")) sum = Math.pow(sum, m);
            }
            void ShuJu(double sum){
                SimpleDateFormat data = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                double s1 = sum;
                Connection con = null;
                PreparedStatement ps = null;
                try {
                    try {
                        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    }
                    con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;database=KECHENGSHEJI", "shengyiguo", "gena20031121");
                    con.setAutoCommit(true);
                    System.out.println("已将数据添加到表格");
                    String sql = "INSERT INTO shuju(日期, 数据) VALUES (?, ?)";
                    ps = con.prepareStatement(sql);
                    ps.setString(1, data.format(new Date()));
                    ps.setString(2, String.valueOf(s1));
                    ps.executeUpdate();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (con != null) con.close();
                        if (ps != null) ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
    
            void lishi(){
                ResultSet resultSet = null;
                Connection con = null;
                Statement stat;
                PreparedStatement ps = null;
                String time;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月11日
  • 已采纳回答 6月3日
  • 创建了问题 5月25日