大三打卡(11.15)

[实验任务二]:单一职责原则

登录模块在实际项目开发中很常见,请按照教材28页(PPT49页)利用单一职责原则重构后的类图实现这一模块。

实验要求:

1.提交源代码和对应的数据库文件(注意将此模块保存,以备以后使用);

2.注意编程规范。

DBUtil.java

 

package Test;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

public class DBUtil {

 

    private static final String DB_URL = "jdbc:mysql://localhost:3306/design?serverTimezone=GMT%2B8&useSSL=false";

    private static final String DB_USER = "root";

    private static final String DB_PASS = "123456";

 

    public static Connection getConn() {

        try {

            Class.forName("com.mysql.cj.jdbc.Driver");

            return DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);

        } catch (Exception e) {

            e.printStackTrace();

            return null;

        }

    }

 

    public static void close(AutoCloseable... closeables) {

        for (AutoCloseable closeable : closeables) {

            if (closeable != null) {

                try {

                    closeable.close();

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }

    }

 

    public static void main(String[] args) throws SQLException {

        try (Connection conn = getConn();

             PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM user");

             ResultSet rs = pstmt.executeQuery()) {

            if (rs.next()) {

                System.out.println("连接成功");

            } else {

                System.out.println("连接失败");

            }

        }

    }

}

 

LoginForm.java

 

package Test;

 

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

 

public class LoginForm extends JFrame {

 

    private static final long serialVersionUID = 1L;

    private UserDao dao = new UserDao();

 

    private JButton loginButton = new JButton("登录");

    private JButton resetButton = new JButton("重置");

    private JTextField usernameField = new JTextField();

    private JPasswordField passwordField = new JPasswordField();

    private JLabel usernameLabel = new JLabel("账号:");

    private JLabel passwordLabel = new JLabel("密码:");

 

    public LoginForm() {

        Color color1 = new Color(0xf1f4f9);

        Color color2 = new Color(0x599ce0);

 

        usernameLabel.setBounds(50, 70, 300, 25);

        passwordLabel.setBounds(50, 130, 200, 25);

 

        usernameField.setBounds(110, 70, 300, 25);

        passwordField.setBounds(110, 130, 300, 25);

 

        resetButton.setBounds(315, 200, 90, 20);

        loginButton.setBounds(95, 200, 90, 20);

 

        usernameLabel.setOpaque(false);

        passwordLabel.setOpaque(false);

 

        usernameLabel.setForeground(color2);

        passwordLabel.setForeground(color2);

        resetButton.setForeground(color2);

        loginButton.setForeground(color2);

        resetButton.setBackground(color1);

        loginButton.setBackground(color1);

        usernameField.setBackground(color1);

        passwordField.setBackground(color1);

 

        loginButton.addActionListener(this::validate);

        resetButton.addActionListener(e -> {

            usernameField.setText("");

            passwordField.setText("");

        });

    }

 

    private void validate(ActionEvent e) {

        String username = usernameField.getText().trim();

        String password = new String(passwordField.getPassword()).trim();

 

        if (username.isEmpty() || password.isEmpty()) {

            JOptionPane.showMessageDialog(this, "用户名,密码不能为空");

            return;

        }

 

        if (dao.findUser(username, password)) {

            JOptionPane.showMessageDialog(this, "登录成功!");

        } else {

            JOptionPane.showMessageDialog(this, "用户名或密码错误");

        }

    }

 

    public void display() {

        setTitle("登录");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setResizable(false);

        setLocationRelativeTo(null);

        setSize(500, 300);

 

        Container contentPanel = getContentPane();

        contentPanel.setBackground(Color.WHITE);

        contentPanel.setLayout(null);

 

        contentPanel.add(usernameLabel);

        contentPanel.add(passwordLabel);

        contentPanel.add(usernameField);

        contentPanel.add(passwordField);

        contentPanel.add(loginButton);

        contentPanel.add(resetButton);

 

        setVisible(true);

    }

}

 

MainClass.java

 

package Test;

 

public class MainClass {

 

    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> {

            LoginForm loginForm = new LoginForm();

            loginForm.display();

        });

    }

}

 

UserDao.java

 

package Test;

 

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

 

public class UserDao {

    public boolean findUser(String username, String password) {

        String sql = "SELECT * FROM user WHERE username = ?";

        try (Connection conn = DBUtil.getConn();

             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, username);

            try (ResultSet rs = pstmt.executeQuery()) {

                if (rs.next()) {

                    String dbPassword = rs.getString("password");

                    return password.equals(dbPassword);

                }

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return false;

    }

}

posted @   夏季彼岸德  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示