zoukankan      html  css  js  c++  java
  • 单一职责原则(Java)

    单一职责原则

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

    一模块。

    1.类图:

     

    2.java代码实现:

    1DBUtil.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 {
    
     
    
    public static String db_url = "jdbc:mysql://localhost:3306/first?serverTimezone=GMT%2B8&useSSL=false";
    
    public static String db_user = "root";
    
    public static String db_pass = "root";
    
     
    
    public static Connection getConn () {
    
    Connection conn = null;
    
     
    
    try {
    
    Class.forName("com.mysql.cj.jdbc.Driver");
    
    conn = DriverManager.getConnection(db_url, db_user, db_pass);
    
    } catch (Exception e) {
    
    e.printStackTrace();
    
    }
    
     
    
    return conn;
    
    }//end getConn
    
     
    
    public static void close (Statement state, Connection conn) {
    
    if (state != null) {
    
    try {
    
    state.close();
    
    } catch (SQLException e) {
    
    e.printStackTrace();
    
    }
    
    }
    
     
    
    if (conn != null) {
    
    try {
    
    conn.close();
    
    } catch (SQLException e) {
    
    e.printStackTrace();
    
    }
    
    }
    
    }
    
     
    
    public static void close (ResultSet rs, Statement state, Connection conn) {
    
    if (rs != null) {
    
    try {
    
    rs.close();
    
    } catch (SQLException e) {
    
    e.printStackTrace();
    
    }
    
    }
    
     
    
    if (state != null) {
    
    try {
    
    state.close();
    
    } catch (SQLException e) {
    
    e.printStackTrace();
    
    }
    
    }
    
     
    
    if (conn != null) {
    
    try {
    
    conn.close();
    
    } catch (SQLException e) {
    
    e.printStackTrace();
    
    }
    
    }
    
    }
    
     
    
    public static void main(String[] args) throws SQLException {
    
    Connection conn = getConn();
    
    PreparedStatement pstmt = null;
    
    ResultSet rs = null;
    
    String sql ="select * from user";
    
    pstmt = conn.prepareStatement(sql);
    
    rs = pstmt.executeQuery();
    
    if(rs.next()){
    
    System.out.println("连接成功");
    
    }else{
    
    System.out.println("连接失败");
    
    }
    
    }
    
    }

    2UserDao.java:

    package test;
    
     
    
    import java.sql.Connection;
    
    import java.sql.ResultSet;
    
    import java.sql.SQLException;
    
    import java.sql.Statement;
    
     
    
    public class UserDao {
    
    public boolean findUser(String username, String password) {
    
    //准备SQL语句
    
    String sql = "select * from user where username ='" + username + "'";
    
    Connection conn= DBUtil.getConn();
    
    //创建语句传输对象
    
    Statement state = null;
    
    ResultSet rs= null;
    
    int flag=0;
    
    String c_password=null;
    
    try {
    
    state = conn.createStatement();
    
    rs = state.executeQuery(sql);
    
    while(rs.next()) {
    
    ++flag;
    
        c_password=rs.getString("password");
    
    } if (flag == 0) {
    
    return false;
    
    }
    
    if (!password.equals(c_password)) {   //判断密码
    
    return false;
    
    }
    
    }catch (SQLException e) {
    
    // TODO Auto-generated catch block
    
    e.printStackTrace();
    
    }finally {
    
     DBUtil.close(rs, state, conn);
    
    }
    
    return true;
    
    }
    
    }

    3LoginForm.java:

    package test;
    
     
    
    import java.awt.*;
    
    import java.awt.event.*;
    
    import javax.swing.*;
    
     
    
    public class LoginForm extends JFrame {
    
     
    
    private static final long serialVersionUID = 1L;
    
    private  UserDao dao = new UserDao();
    
    //设置按钮组件
    
        
    
        private  JButton jb=new JButton("登录"); //添加一个登录按钮
    
        private JButton button=new JButton("重置"); //添加一个确定按钮
    
        //设置文本框组件
    
        private JTextField username = new JTextField();//用户名框
    
        private JPasswordField password = new JPasswordField();//密码框:为加密的***
    
        
    
        JLabel user_name=new JLabel("账号:");//设置左侧用户名文字
    
        JLabel pass_word=new JLabel("密码:");//设置左侧密码文字
    
        
    
        public void init()
    
        {
    
    /* 组件绝对位置  */
    
    user_name.setBounds(50, 70, 300, 25);
    
    pass_word.setBounds(50, 130, 200, 25);
    
     
    
    username.setBounds(110, 70, 300, 25);//设置用户名框的宽,高,x值,y值
    
    password.setBounds(110, 130, 300, 25);//设置密码框的宽,高,x值,y值
    
     
    
    button.setBounds(315, 225, 90, 20);//设置确定按钮的宽,高,x值,y值
    
    jb.setBounds(95, 225, 90, 20);//设置确定按钮的宽,高,x值,y值
    
     
    
     
    
    /* 组件透明化*/
    
    user_name.setOpaque(false);
    
    pass_word.setOpaque(false);
    
     
    
     
    
     //监听事件
    
    jb.addActionListener(new ActionListener(){ //为确定按钮添加监听事件
    
     
    
    @SuppressWarnings("deprecation")
    
    public void actionPerformed(ActionEvent arg0) {
    
        validate(username.getText().trim(),password.getText().trim());
    
    }
    
    });
    
     
    
     
    
    //重置按钮
    
    button.addActionListener(new ActionListener(){ //为重置按钮添加监听事件
    
    //同时清空name、password的数据
    
    public void actionPerformed(ActionEvent arg0) {
    
    // TODO 自动生成方法存根
    
    username.setText("");
    
    password.setText("");
    
    }
    
    });
    
     
    
        }
    
     
    
        public void display()
    
         {
    
    JFrame f =new JFrame();
    
    f.setTitle("登录页面");
    
            //窗口退出行为
    
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            //设置窗口大小不可变
    
            f.setResizable(false);
    
            //设置窗口打开居中
    
            f.setLocationRelativeTo(null);
    
            //窗口大小
    
            f.setSize(500, 300);
    
           
    
            init();
    
            
    
            //添加组件
    
            Container contentPanel= new Container();//添加一个contentPanel容器
    
     contentPanel.setLayout(null);//设置添加的contentPanel容器为流布局管理器
    
     contentPanel.add(user_name);
    
     contentPanel.add(pass_word);
    
     contentPanel.add(username);
    
     contentPanel.add(password);
    
     contentPanel.add(jb);
    
     contentPanel.add(button);
    
     
    
    f.add(contentPanel);
    
     //展示窗口
    
            f.setVisible(true);
    
    }
    
     
    
     
    
       public  void  validate(String username,String password)
    
     {
    
     
    
               if(username.trim().length()==0||password.trim().length()==0){
    
       JOptionPane.showMessageDialog(null, "用户名,密码不允许为空");
    
     
    
    return;
    
         }
    
     
    
       if(dao.findUser(username, password))
    
        {
    
      
    
    JOptionPane.showMessageDialog(null, "登录成功!");
    
      
    
     
    
      }else {
    
      JOptionPane.showMessageDialog(null, "用户名或密码错误");
    
     
    
      }
    
     
    
       }
    
     
    
    }

    4MainClass.java:

    package test;
    
     
    
    public class MainClass {
    
     
    
     public static void main(String[] args)
    
     {
    
    LoginForm loginForm=new LoginForm() ; //调用
    
    loginForm.display();
    
       
    
     }
    
     
    
    }

    数据库设计:

    实现截图:

     

     

     

  • 相关阅读:
    UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
    UVa 1658 (拆点法 最小费用流) Admiral
    UVa 11082 (网络流建模) Matrix Decompressing
    UVa 753 (二分图最大匹配) A Plug for UNIX
    UVa 1451 (数形结合 单调栈) Average
    UVa 1471 (LIS变形) Defense Lines
    UVa 11572 (滑动窗口) Unique Snowflakes
    UVa 1606 (极角排序) Amphiphilic Carbon Molecules
    UVa 11054 Wine trading in Gergovia
    UVa 140 (枚举排列) Bandwidth
  • 原文地址:https://www.cnblogs.com/marr/p/15403018.html
Copyright © 2011-2022 走看看