Xem thêm

PTB2UI và PTB2Engine: Code thiết kế giao diện và giải phương trình bậc 2

Huy Erick
Trong ví dụ này, chúng ta sẽ thực hiện code Java để thiết kế giao diện và giải phương trình bậc 2. Để tăng tính tương tác và trực quan cho người dùng, chúng ta...

PTB2UI

Trong ví dụ này, chúng ta sẽ thực hiện code Java để thiết kế giao diện và giải phương trình bậc 2. Để tăng tính tương tác và trực quan cho người dùng, chúng ta sẽ tạo 2 class, PTB2UI và PTB2Engine.

PTB2UI: Thiết kế giao diện

Đầu tiên, chúng ta sẽ tạo class PTB2UI để thiết kế giao diện cho chương trình. Class này sẽ kế thừa từ class JFrame để tạo cửa sổ giao diện.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class PTB2UI extends JFrame {
    private static final long serialVersionUID = 1L;

    public PTB2UI(String title) {
        setTitle(title);
    }

    public void doShow() {
        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        addControl();
        setResizable(false);
        setVisible(true);
    }

    public void addControl() {
        JPanel pnBorder = new JPanel();
        pnBorder.setLayout(new BorderLayout());

        JPanel pnNorth = new JPanel();
        JLabel lblTitle = new JLabel("Giải phương trình bậc 2");
        pnNorth.add(lblTitle);
        pnBorder.add(pnNorth, BorderLayout.NORTH);

        lblTitle.setForeground(Color.BLUE);
        Font ft = new Font("arial", Font.BOLD, 25);
        lblTitle.setFont(ft);

        JPanel pnSouth = new JPanel();
        JButton btnGiai = new JButton("Giải");
        JButton btnXoa = new JButton("Xóa");
        JButton btnThoat = new JButton("Thoát");
        pnSouth.add(btnGiai);
        pnSouth.add(btnXoa);
        pnSouth.add(btnThoat);
        pnBorder.add(pnSouth, BorderLayout.SOUTH);

        pnSouth.setBackground(Color.LIGHT_GRAY);
        Border southborder = BorderFactory.createLineBorder(Color.RED);
        TitledBorder southTitleBorder = new TitledBorder(southborder, "Chọn tác vụ");
        pnSouth.setBorder(southTitleBorder);

        JPanel pnCenter = new JPanel();
        pnCenter.setLayout(new BoxLayout(pnCenter, BoxLayout.Y_AXIS));
        pnBorder.add(pnCenter, BorderLayout.CENTER);

        Border centerborder = BorderFactory.createLineBorder(Color.RED);
        TitledBorder centerTitleBorder = new TitledBorder(centerborder, "nhập a - b- c:");
        pnCenter.setBorder(centerTitleBorder);

        JPanel pna = new JPanel();
        JLabel lbla = new JLabel("nhập a:");
        final JTextField txta = new JTextField(15);
        pna.add(lbla);
        pna.add(txta);
        pnCenter.add(pna);

        JPanel pnb = new JPanel();
        JLabel lblb = new JLabel("nhập b:");
        final JTextField txtb = new JTextField(15);
        pnb.add(lblb);
        pnb.add(txtb);
        pnCenter.add(pnb);

        JPanel pnc = new JPanel();
        JLabel lblc = new JLabel("nhập c:");
        final JTextField txtc = new JTextField(15);
        pnc.add(lblc);
        pnc.add(txtc);
        pnCenter.add(pnc);

        JPanel pnkq = new JPanel();
        JLabel lblkq = new JLabel("kết quả nè:");
        final JTextField txtkq = new JTextField(15);
        pnkq.add(lblkq);
        pnkq.add(txtkq);
        pnCenter.add(pnkq);

        lbla.setPreferredSize(lblkq.getPreferredSize());
        lblb.setPreferredSize(lblkq.getPreferredSize());
        lblc.setPreferredSize(lblkq.getPreferredSize());

        btnThoat.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                int ret = JOptionPane.showConfirmDialog(null, "Muốn thoát hả?", "Thoát", JOptionPane.YES_NO_OPTION);
                if (ret == JOptionPane.YES_OPTION)
                    System.exit(0);
            }
        });

        btnXoa.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                txtb.setText("");
                txtc.setText("");
                txtkq.setText("");
                txta.requestFocus();
            }
        });

        btnGiai.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String sa = txta.getText();
                int a = 0, b = 0, c = 0;

                try {
                    a = Integer.parseInt(sa);
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(null, "Nhập sai định dạng!");
                    txta.selectAll();
                    txta.requestFocus();
                    return;
                }

                String sb = txtb.getText();
                try {
                    b = Integer.parseInt(sb);
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(null, "Nhập sai định dạng!");
                    txtb.selectAll();
                    txtb.requestFocus();
                    return;
                }

                String sc = txtc.getText();
                try {
                    c = Integer.parseInt(sc);
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(null, "Nhập sai định dạng!");
                    txtc.selectAll();
                    txtc.requestFocus();
                    return;
                }

                String kq = "";
                PTB2Engine engine = new PTB2Engine(a, b, c);
                kq = engine.compute();
                txtkq.setText(kq);
            }
        });

        Container con = getContentPane();
        con.add(pnBorder);
    }

    public static void main(String[] args) {
        PTB2UI ui = new PTB2UI("ptb2");
        ui.doShow();
    }
}

PTB2Engine: Giải phương trình bậc 2

Tiếp theo, chúng ta sẽ tạo class PTB2Engine để giải phương trình bậc 2. Class này sẽ chứa phương thức compute() để tính toán và trả về kết quả phương trình.

public class PTB2Engine {
    private int a;
    private int b;
    private int c;

    public PTB2Engine(int a, int b, int c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public String compute() {
        String kq = "";

        if (this.a == 0) {
            if (this.b == 0) {
                if (this.c == 0) {
                    kq = "Vô số nghiệm";
                } else {
                    kq = "Vô nghiệm";
                }
            } else {
                kq = "Pt co 1 no x1=" + (-this.c / this.b);
            }
        } else {
            double delta = this.b * this.b - 4 * this.a * this.c;
            if (delta < 0)
                kq = "Vô nghiệm";
            else if (delta == 0)
                kq = "No kép x1=x2=" + (-this.b / (2 * this.a));
            else {
                kq = "x1 = " + ((-this.b - Math.sqrt(delta)) / (2 * this.a));
                kq += " x2 = " + ((-this.b + Math.sqrt(delta)) / (2 * this.a));
            }
        }
        return kq;
    }
}

Với cả PTB2UI và PTB2Engine, chúng ta đã có thể thiết kế giao diện cho chương trình và giải phương trình bậc 2. Hy vọng các bạn đã hiểu và thích bài viết này.

1