每日总结-23.11.29

发布时间 2023-11-29 09:59:44作者: lao_bing
package kousuanti;

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

public class GUI extends JFrame {
    private JTextField[] answerFields;
    private JLabel[] questionLabels;
    private JButton resetButton;
    private JButton submitButton;
    private JButton exportButton;
    private JButton importButton;
    private JComboBox<String> importComboBox;

    public GUI() {
        setTitle("口算题");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        JPanel questionPanel = new JPanel(new GridLayout(10, 2));
        questionLabels = new JLabel[10];
        answerFields = new JTextField[10];
        for (int i = 0; i < 10; i++) {
            questionLabels[i] = new JLabel();
            answerFields[i] = new JTextField();
            questionPanel.add(questionLabels[i]);
            questionPanel.add(answerFields[i]);
        }
        add(questionPanel, BorderLayout.CENTER);

        JPanel buttonPanel = new JPanel(new FlowLayout());
        resetButton = new JButton("重置");
        submitButton = new JButton("提交");
        exportButton = new JButton("导出");
        importButton = new JButton("导入");

        resetButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                generateQuestions();
            }
        });

        submitButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                checkAnswers();
            }
        });

        exportButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                exportQuestions(getQuestionString());
            }
        });

        importButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                showImportDialog();
            }
        });

        buttonPanel.add(resetButton);
        buttonPanel.add(submitButton);
        buttonPanel.add(exportButton);
        buttonPanel.add(importButton);
        add(buttonPanel, BorderLayout.SOUTH);

        pack();
        setVisible(true);

        generateQuestions();
    }

    private void generateQuestions() {
        for (int i = 0; i < 10; i++) {
            int a = (int) (Math.random() * 100);
            int b = (int) (Math.random() * Math.min(100, 100 - a));
            boolean isAddition = Math.random() < 0.5;

            String operator;
            int answer;
            if (isAddition) {
                operator = " + ";
                answer = a + b;
            } else {
                operator = " - ";
                answer = a - b;
            }

            questionLabels[i].setText(a + operator + b + " = ");
            answerFields[i].setText("");
            answerFields[i].setEditable(true);
            answerFields[i].setBackground(Color.WHITE);
        }
    }

    private void checkAnswers() {
        for (int i = 0; i < 10; i++) {
            int a = Integer.parseInt(questionLabels[i].getText().split(" ")[0]);
            int b = Integer.parseInt(questionLabels[i].getText().split(" ")[2]);
            boolean isAddition = questionLabels[i].getText().contains("+");
            int answer = isAddition ? a + b : a - b;

            try {
                int userAnswer = Integer.parseInt(answerFields[i].getText());

                if (userAnswer == answer) {
                    answerFields[i].setBackground(Color.GREEN);
                } else {
                    answerFields[i].setBackground(Color.RED);
                }
                answerFields[i].setEditable(false);
            } catch (NumberFormatException e) {
                answerFields[i].setBackground(Color.YELLOW);
            }
        }
    }

    private String getQuestionString() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            sb.append(questionLabels[i].getText());
            sb.append(answerFields[i].getText());
            sb.append(",");
        }
        return sb.toString();
    }

    private void showImportDialog() {
        JFrame dialogFrame = new JFrame();
        dialogFrame.setLayout(new FlowLayout());
        JLabel label = new JLabel("选择题目序号:");

        int num = 1;
        try {
            Thesql thesql = new Thesql();
            num = thesql.GetNum();
        } catch (Exception e) {
            e.printStackTrace();
        }

        String[] options = new String[num];
        for (int i = 0; i < num; i++) {
            options[i]=(i+1)+"";
        }

        importComboBox = new JComboBox<>(options);
        JButton confirmButton = new JButton("确定");
        JButton cancelButton = new JButton("取消");

        confirmButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                importQuestions(Integer.parseInt(importComboBox.getSelectedItem().toString()));
                dialogFrame.dispose();
            }
        });

        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dialogFrame.dispose();
            }
        });

        dialogFrame.add(label);
        dialogFrame.add(importComboBox);
        dialogFrame.add(confirmButton);
        dialogFrame.add(cancelButton);
        dialogFrame.pack();
        dialogFrame.setVisible(true);
    }

    private void importQuestions(int questionNumber) {
        String importedQuestions = "";

        try {
            Thesql thesql = new Thesql();
            importedQuestions=thesql.daoru_timu(questionNumber+"");
        } catch (Exception e) {
            e.printStackTrace();
        }

        String[] questions = importedQuestions.split(",");

        if (questions.length == 10) {
            for (int i = 0; i < 10; i++) {
                questionLabels[i].setText(questions[i].split("=")[0] + " = ");
                answerFields[i].setText("");
                answerFields[i].setEditable(true);
                answerFields[i].setBackground(Color.WHITE);
            }
        } else {
            JOptionPane.showMessageDialog(null, "导入题目数量不正确", "错误", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void exportQuestions(String string) {
        try {
            Thesql thesql = new Thesql();
            thesql.add(string);
        } catch (Exception e) {
            e.printStackTrace();
        }
        JOptionPane.showMessageDialog(null, "导出成功", "提示", JOptionPane.INFORMATION_MESSAGE);
        System.out.println(string);
    }

    public static void main(String[] args) {
        GUI gui = new GUI();
    }
}