[实验任务二]:单一职责原则
登录模块在实际项目开发中很常见,请按照教材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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律