首页 > 其他分享 >每日总结(c/s架构简单的登录模块)

每日总结(c/s架构简单的登录模块)

时间:2023-10-23 09:11:40浏览次数:37  
标签:password java 登录 模块 sql 架构 null public conn

单一职责原则实例——登录模块

 

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

1、新建 java project 

2、导入jar包

mysql-connector-java-8.0.22.jar

        * 此处注意jar包的版本不能过低,否则数据库连接失败

3、创建数据库和表

4、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 {

    public static String db_url = "jdbc:mysql://localhost:3308/first?serverTimezone=GMT%2B8&useSSL=false";
    public static String db_user = "root";
    public static String db_pass = "105819";

    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("连接失败");
        }
    }
}
复制代码

5、UserDao.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;
        }
}
复制代码

6、LoginForm.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, "用户名或密码错误");
             
          }
         
       }    
    
}
复制代码

7、MainClass.java

复制代码
package Test;

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

}
复制代码

 

效果截图:

标签:password,java,登录,模块,sql,架构,null,public,conn
From: https://www.cnblogs.com/azwz/p/17781626.html

相关文章

  • Python入门系列21-数学相关模块(math/decimal)
    一、math模块math库是Python提供的内置数学函数库,支持整数和浮点数运算。常用函数和属性如下图所示:函数/属性说明math.pi圆周率math.inf正无穷大math.ceil(浮点数)向上取整math.floor(浮点数)向下取整round(浮点数)四舍五入操作abs(数值)获取数值的绝对值math.fmod(x,y)返回x/y的......
  • 软考系列(系统架构师)- 2021年系统架构师软考案例分析考点
    试题一软件架构(架构风格、质量属性)【问题1】(9分)在架构评估过程中,质量属性效用树(utilitytree)是对系统质量属性进行识别和优先级排序的重要工具。请将合适的质量属性名称填入图1-1中(1)、(2)空白处,并从题干中的(a)-(i)中选择合适的质量属性描述,填入(3)-(6)空白处,完成该平台......
  • 架构师论文各主题核心要点(必背)
    论基于构件的软件开发方法问题:各种构件技术的优点、缺点,展望构件技术的发展趋势。回答:构件技术是指通过组装一系列可复用的软件构件来构造软件系统的软件技术。通过运用软件技术,开发人员可以有效地进行软件复用,减少重复开发,缩短开发时间,降低软件的开发成本。主流的软件架构有三种......
  • 前后端分离后模块开发
      编写页面这个程序设计工程师嘴上的口头禅是在2016年在建行刚开始最开发的时候听到的,因为大学的时候学习的程序设计语言是一C++为主,对于前端页面这种能看到效果只是一种很难体会的概念。学习C语言程序设计的时候显示在眼前的是一个命令行黑屏,学C++,C#都是。作为大学生......
  • 关于AI时代的程序架构的变化
    以ChatGPT为代表的AI出现,表示着AI的零点时刻已经突破。现在AI的使用已经不用再多说了,实际上是已经侵入到各行各业。所有人都在疯狂寻找本行业AI的使用场景,这样的盛景只在互联网刚出现的时候能感受到。马化腾说,这个AI有可能像电一样是重要的未来的基础元素。我感觉还是很有可能。......
  • 高性能处理器架构与编程(一)
    引言:云-端-边协同:同构协同(ARM、具体实例为鲲鹏)同操作系统(Vela,在物联网侧的统一)课时安排鲲鹏920和ARM处理器架构介绍(第一周)鲲鹏处理器基础实验(10课时)(第二、三周)鲲鹏处理器系统实验(8课时)(第四、五周)应用编程实验(8课时)上午华为海思的产品系列通用计算处理器:鲲鹏手机应用处......
  • ansible常见模块
    这里介绍一些ansible常用的模块,以后有用到其他的会再补充进来。1.shell在被管理机统一执行shell命令参数:命令chdir=目录切换到指定目录执行命令ansible[web]-mshell-a"uptime"-name:shell:uptime 2.command与shell命令类似,但是不支持一些特殊符号,比如......
  • 软考系列(系统架构师)- 2020年系统架构师软考案例分析考点
    试题一软件架构(架构风格、质量属性)【问题1】(13分)针对该系统的功能,李工建议采用管道-过滤器(pipeandfilter)的架构风格,而王工则建议采用仓库(reposilory)架构风格。请指出该系统更适合采用哪种架构风格,并针对系统的主要功能,从数据处理方式、系统的可扩展性和处理性能三个方面对......
  • Dubbo快速入门_在本工程模块中依赖另外子模块的接口报错java找不到符号
    场景:Dubbo入门案例项目结构:三个子模块dubbodemo_interfacedubbodemo_providerdubbodemo_consumer在消费者和提供者中引入dubbodemo_interface的依赖。dubbodemo_interface中定义了一个接口HelloServicedubbodemo_provider中有HelloService的实现类dubbodemo_consumer中定......
  • duogez架构图
    duogez├──duogez-auth--授权服务提供[3000]├──duogez-common--系统公共模块├├──duogez-common-biz-alert--业务预警├├──duogez-common-bom--公共依赖版本├├──duogez-common-core--公共工具类核心包├├──duogez-common-......