第二次作业

发布时间 2023-12-03 20:43:22作者: 韩福明

一.流程图

  用户登录

    计算器

二。GUI界面

用户登录界面

 登陆成功

 登录失败

  (二)计算器

 实现计算1+2=3

 

 

 

 (二)数据库记录

 三。代码实现

(一)计算器代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CalculatorGUI extends JFrame {

    private JTextField displayField;

    private static double firstNumber;
    private static String operator;


    private Connection conn;


    public CalculatorGUI() {
        setTitle("Calculator");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);

        displayField = new JTextField();
        displayField.setPreferredSize(new Dimension(200, 30));
        displayField.setEditable(false);

        JPanel buttonPanel = new JPanel(new GridLayout(5, 5));

        String[] buttonLabels = {
                "7", "8", "9", "/",
                "4", "5", "6", "*",
                "1", "2", "3", "-",
                "0", ".", "=", "+",
                "√", "C"
        };

        for (String label : buttonLabels) {
            JButton button = new JButton(label);
            button.addActionListener(new ButtonClickListener());
            buttonPanel.add(button);
        }

        setLayout(new FlowLayout());
        add(displayField);
        add(buttonPanel);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3308", "root", "123456");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private class ButtonClickListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String buttonText = ((JButton) event.getSource()).getText();

            if (buttonText.matches("[0-9.]")) {
                displayField.setText(displayField.getText() + buttonText);
            }

            if (buttonText.matches("[/+*\\-]")) {
                firstNumber = Double.parseDouble(displayField.getText());
                operator = buttonText;
                displayField.setText("");
            }

            if (buttonText.equals("=")) {
                double secondNumber = Double.parseDouble(displayField.getText());
                double result = 0.0;

                switch (operator) {
                    case "+":
                        result = firstNumber + secondNumber;
                        break;
                    case "-":
                        result = firstNumber - secondNumber;
                        break;
                    case "*":
                        result = firstNumber * secondNumber;
                        break;
                    case "/":
                        result = firstNumber / secondNumber;
                        break;
                }

                displayField.setText(String.valueOf(result));
            try {
                 String sql = "INSERT INTO mysql.calculations (first_number, operator, second_number, result) VALUES (?, ?, ?, ?)";
                 PreparedStatement pstmt = conn.prepareStatement(sql);
                 pstmt.setDouble(1, firstNumber);
                 pstmt.setString(2, operator);
                 pstmt.setDouble(3, secondNumber);
                 pstmt.setDouble(4, result);
                 pstmt.executeUpdate();
            } catch (SQLException e) {
                 e.printStackTrace();
            }
            }
            if (buttonText.equals("C")) {
                displayField.setText("");
            }
            if (buttonText.equals("√")) {
                double number = Double.parseDouble(displayField.getText());
                double guess = number / 2.0;

                while (Math.abs(guess * guess - number) >= 0.0001) {
                    guess = (guess + number / guess) / 2.0;
                }

                displayField.setText(String.valueOf(guess));
            }
        }
    }

public class Main {
    public static void main(String[] args) {
        CalculatorGUI calculator  = new CalculatorGUI();
            SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                    new CalculatorGUI();
                }

            });
        String url = "jdbc:mysql://localhost:3308/calculations";
        String username = "root";
        String password = "123456";

    try {
         Connection conn = DriverManager.getConnection(url, username, password);

         String sql = "INSERT INTO your_table (column1, column2) VALUES (?, ?)";
         PreparedStatement pstmt = conn.prepareStatement(sql);
         pstmt.setDouble(1, firstNumber);
         pstmt.setString(2, operator);
         pstmt.executeUpdate();

         System.out.println("Data inserted successfully!");

         } catch (SQLException e) {
              e.printStackTrace();
         }

    }


    }
}

  (二)用户登录代码

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginGUI extends JFrame {
    private JTextField usernameField;
    private JPasswordField passwordField;

    public LoginGUI() {
        setTitle("用户登录");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 200);
        setLocationRelativeTo(null);

        JPanel panel = new JPanel(new GridLayout(3, 2));
        JLabel usernameLabel = new JLabel("用户名:");
        JLabel passwordLabel = new JLabel("密码:");
        usernameField = new JTextField(10);
        passwordField = new JPasswordField(10);
        JButton loginButton = new JButton("登录");

        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String username = usernameField.getText();
                String password = new String(passwordField.getPassword());

                if (username.equals("admin") && password.equals("123")) {
                    JOptionPane.showMessageDialog(null, "登录成功!");
                    CalculatorGUI cal = new CalculatorGUI();
                } else {
                    JOptionPane.showMessageDialog(null, "用户名或密码错误!");
                }
            }
        });

        panel.add(usernameLabel);
        panel.add(usernameField);
        panel.add(passwordLabel);
        panel.add(passwordField);
        panel.add(loginButton);

        getContentPane().add(panel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new LoginGUI().setVisible(true);
            }
        });
    }
}

  (三)数据库代码

CREATE TABLE mysql.calculations (
                                    id INT AUTO_INCREMENT,
                                    first_number DOUBLE,
                                    operator CHAR(1),
                                    second_number DOUBLE,
                                    result DOUBLE,
                                    PRIMARY KEY (id)
);
SELECT * FROM mysql.calculations;