• Java图形界面开发—简易登录注册小程序


    登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象。本例中如果有注释不详细的地方,详见其它博客。

     

    Java程序操作数据库SQLserver详解

    功能介绍:简单的登录注册系统,使用了数据库sqlserver、单例模式、正则表达式以及图形化开发等知识。


    1、在登录界面,可以登录或者注册用户。 注册用户界面,按照正则表达式规定的格式要求来输入信息,若有误,则重新输入。 

    2、点击注册,首先连接SQLserver数据库,连接成功则会判断该用户名是否已经存在,若存在,则给出提示。反之则进行注册。 

    3、登录界面,点击登录按钮时,首先与数据库建立连接。按照用户名和密码来向数据库中查找,若有,则登录成功。反之给出提示。

    4、利用单例模式,实现了只创建类SQLserver的一个对象,大大节省了内存开销 。

    程序完整代码见:https://github.com/chaohuangtianjie994/A-login-register-System

    5、基于此,可以进行大量的拓展功能。

    代码如下:

    UserRegister.java  登录界面。

    package package1;
    /*
     * 功能:登录界面带着注册功能,弹出注册界面。
     *    将注册的信息保存在数据库中,并且可以进行登录操作。
     * author:ywq
     */
    import javax.swing.*;
    
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    
    public class UserRegister extends JFrame implements ActionListener{
    	
    	//定义登录界面的组件
    		JButton jb1,jb2,jb3=null;
    		JRadioButton jrb1,jrb2=null;
    		JPanel jp1,jp2,jp3=null;
    	    JTextField jtf=null;
    		JLabel jlb1,jlb2=null;
    		JPasswordField jpf=null;
    			
    	
    	public static void main(String[] args)
    	{
    		UserRegister ur=new UserRegister();
    	}
    	
    	public UserRegister()
    	{
    		//创建组件
    		 //创建组件
    		jb1=new JButton("登录");
    		jb2=new JButton("注册");
    		jb3=new JButton("退出");
    		//设置监听
    		jb1.addActionListener(this);
    		jb2.addActionListener(this);
    		jb3.addActionListener(this);
    		
    		jlb1=new JLabel("用户名:");
    		jlb2=new JLabel("密    码:");
    		
    		jtf=new JTextField(10);
    		jpf=new JPasswordField(10);
    		
    		jp1=new JPanel();
    		jp2=new JPanel();
    		jp3=new JPanel();
    		
    		jp1.add(jlb1);
    		jp1.add(jtf);
    		
    		jp2.add(jlb2);
    		jp2.add(jpf);
    		
    		jp3.add(jb1);
    		jp3.add(jb2);
    		jp3.add(jb3);
    		this.add(jp1);
    		this.add(jp2);
    		this.add(jp3);
    		
    		this.setVisible(true);
    		this.setResizable(false);
    		this.setTitle("注册登录界面");
    		this.setLayout(new GridLayout(3,1));
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setBounds(300, 200, 300, 180);
    		
    		
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		
    		//监听各个按钮
    		if(e.getActionCommand()=="退出")
    		{
    			System.exit(0);
    		}else if(e.getActionCommand()=="登录")
    		{
    			//调用登录方法
    			this.login();
    		}else if(e.getActionCommand()=="注册")
    		{
    			//调用注册方法
    			this.Regis();
    		}
    		
    	}
    	
    	//注册方法
         public void Regis() {
        	 
        	 
        	 this.dispose();  //关闭当前界面
        	 new UI();   //打开新界面
        	 
    		
    		
    	}
    
    	//登录方法
    	public void login() {
    		
    		SQLserver s=new SQLserver();
    		s.ConnectSQL();
    		s.SQLverify(jtf.getText(), jpf.getText());
    		
    		this.jtf.setText("");
    		this.jpf.setText("");
    		
    	}
    
    }
    


    UI.java   用于注册的页面显示。使用了正则表达式来规定输入的内容。注册时候,需要首先判断用户名是否存在,若存在,则给出提示,反之进行注册。

    package package1;
    
    import java.awt.event.*;
    import java.awt.*;
    
    import javax.swing.*;
    
    /*
     * 注册界面。
     */
    class UI extends JFrame implements ActionListener{
    
    	//定义组件
    	JFrame jf;
    	JPanel jp;
    	JLabel jl1,jl2,jl3,jl4;
    	JTextField jtf1,jtf2,jtf3,jtf4;
    	JButton jb1,jb2;
    	
    	public UI()
    	{
    		//初始化组件
    		jf=new JFrame();
    		jp=new JPanel();
    		jl1=new JLabel("请输入用户名:");
    		jtf1=new JTextField(10);
    		jtf1.setToolTipText("用户名必须为3-6位字母_或者数字");
    		jl2=new JLabel("请输入密码:");
    		jtf2=new JTextField(10);
    		jtf2.setToolTipText("密码必须为6位字母_或者数字");
    		jl3=new JLabel("请输入姓名:");
    		jtf3=new JTextField(10);
    		jtf3.setToolTipText("姓名必须汉字2-4位");
    		jl4=new JLabel("请输入学号:");
    		jtf4=new JTextField(10);
    		jtf4.setToolTipText("学号必须为3-6位数字");
    		
    		jb1=new JButton("返回");
    		jb1.setToolTipText("点我返回登录界面哦");
    		jb2=new JButton("注册");
    		jb1.addActionListener(this);
    		jb2.addActionListener(this);
    		
    		jp.setLayout(new GridLayout(5,2));
    		
    		jp.add(jl1);
    		jp.add(jtf1);
    		
    		jp.add(jl2);
    		jp.add(jtf2);
    		
    		jp.add(jl3);
    		jp.add(jtf3);
    		
    		jp.add(jl4);
    		jp.add(jtf4);
    		
    		jp.add(jb1);
    		jp.add(jb2);
    		
    		this.add(jp);
    		this.setTitle("注册界面");
    		this.setBounds(200, 100, 250, 150);
    		this.setVisible(true);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //		this.setResizable(false);
    		
    		
    		
    	}
    	
    	
    	
    	
    
    	public void actionPerformed(ActionEvent e) {
    	
    		if(e.getActionCommand()=="返回")
    		{
    			this.dispose();
    			new UserRegister();
    //			System.out.println("-------");
    			
    		}else if(e.getActionCommand()=="注册")
    		{
    				//调用注册方法
    			this.zhuce();
    			
    		}
    		
    	}
       public void zhuce()
       {
    	   String regex1="\w{3,6}"; //用户名必须是3-6位
    		boolean flag1=jtf1.getText().matches(regex1);
    		
    		String regex2="\w{6}"; //密码必须是6位
    		boolean flag2=jtf2.getText().matches(regex2);
    		
    		String regex3="[\u4e00-\u9fa5]{2,4}"; //姓名必须是汉字2-4个字
    		boolean flag3=jtf3.getText().matches(regex3);
    		
    		String regex4="\d{3,6}";  //学号必须是3-6位
    		boolean flag4=jtf4.getText().matches(regex4);
    		
    //		if(jtf1.getText()==null||jtf2.getText()==null||jtf3.getText()==null||jtf4.getText()==null)
    		if(flag1==false)
    		{
    			JOptionPane.showMessageDialog(null, "用户名填写错误,必须为3-6位字母_或者数字", "提示信息", JOptionPane.WARNING_MESSAGE);
    			jtf1.setText("");
    		}else if(flag2==false)
    		{
    			JOptionPane.showMessageDialog(null, "密码填写错误,必须为6位字母_或者数字", "提示信息", JOptionPane.WARNING_MESSAGE);
    			jtf2.setText("");
    		}else if(flag3==false)
    		{
    			JOptionPane.showMessageDialog(null, "姓名填写错误,必须汉字2-4位", "提示信息", JOptionPane.WARNING_MESSAGE);
    			jtf3.setText("");
    		}else if(flag4==false)
    		{
    			JOptionPane.showMessageDialog(null, "学号填写错误,必须为3-6位数字", "提示信息", JOptionPane.WARNING_MESSAGE);
    			jtf4.setText("");
    		}else
    		{			
    			//调用注册方法/先检查要注册的用户名是否存在
    			 SQLserver ss=new SQLserver();
    	    	 ss.ConnectSQL();
    	    	 ss.ZhuceVerify(jtf1.getText());
    	    	 
    //			ss.UserRegis(jtf1.getText(),jtf2.getText(),jtf3.getText(), jtf4.getText());
    		    this.jtf1.setText("");
    		    this.jtf2.setText("");
    		    this.jtf3.setText("");
    		    this.jtf4.setText("");
    		    
    		}
       }
    	
    }
    


    SQLserver.java实现了与数据库的连接以及查询验证等各个功能。

    package package1;
    
    import java.sql.*;
    
    import javax.swing.JOptionPane;
    /*
     * 与数据库相关的操作,单独封装成类
     */
    
    class SQLserver {
    
    	Connection ct;
    	PreparedStatement ps;
    	ResultSet rs;
    	String user,pwd;
    	
    	//将连接数据库的方法封装为一个方法
    	public void ConnectSQL()
    	{
    		try {
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动
    			
    			ct=DriverManager.getConnection("jdbc:odbc:ywq"); //得到连接
    			
    			System.out.println("已成功连接数据库...");
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	//注册用户的方法
    	public void UserRegis(String a,String b,String c,String d)
    	{
    		//创建火箭车
    		try {
    			ps=ct.prepareStatement("insert into users values(?,?,?,?)");
    			ps.setString(1,a);
    			ps.setString(2,b);
    			ps.setString(3,c);
    			ps.setString(4,d);
    			
    			//执行
    			int i=ps.executeUpdate();
    			if(i==1)
    			{
    				JOptionPane.showMessageDialog(null, "注册成功","提示消息",JOptionPane.WARNING_MESSAGE);
    			    
    			}else
    			{
    				JOptionPane.showMessageDialog(null, "注册失败","提示消息",JOptionPane.ERROR_MESSAGE);
    			}
    			
    			
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    //	登录验证方法
    	public void SQLverify(String a,String b)
    	{
    		try {
    			ps=ct.prepareStatement("select * from users where 用户名=? and 密码=? ");
    			ps.setString(1, a);
    			ps.setString(2, b);
    			
    			// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
    			rs = ps.executeQuery();
    			
    			if(rs.next())
    			{
    				user = rs.getString(1);
    				pwd = rs.getString(2);
    				JOptionPane.showMessageDialog(null, "登录成功!!!", "提示消息", JOptionPane.WARNING_MESSAGE);
    				System.out.println("成功获取到密码和用户名from数据库");
    				System.out.println(user + "	" + pwd + "	");
    			}else
    			{
    				JOptionPane.showMessageDialog(null, "用户名或者密码错误,请重新输入!", "提示消息", JOptionPane.ERROR_MESSAGE);
    			    
    			}
    			
    		} catch (SQLException e) {
    			
    			e.printStackTrace();
    		}
    	}
    	
    	//注册验证方法,判断用户名是否已经存在
    	public void ZhuceVerify(String a)
    	{
    		try {
    			ps=ct.prepareStatement("select * from users where 用户名=?");
    //			System.out.println(ps);
    			ps.setString(1, a);
    			
    			rs=ps.executeQuery();
    			if(rs.next())
    			{
    				JOptionPane.showMessageDialog(null, "该用户名已经存在", "提示信息", JOptionPane.WARNING_MESSAGE);
    			}else
    			{
    //				进行注册
    				UI ui=new UI();
    				this.UserRegis(ui.jtf1.getText(),ui.jtf2.getText(),ui.jtf3.getText(),ui.jtf4.getText());
    			}
    			
    		} catch (SQLException e) {
    			
    			e.printStackTrace();
    		}
    	}
    	
    	
    	
    	
    	
    }
    


     

  • 相关阅读:
    前端知识点回顾之重点篇——ES6的async函数和module
    前端知识点回顾——Javascript篇(五)
    前端知识点回顾之重点篇——ES6的Iterator和Generator
    前端知识点回顾之重点篇——ES6的Promise对象
    前端知识点回顾——Javascript篇(四)
    前端知识点回顾之重点篇——JavaScript异步机制
    前端知识点回顾之重点篇——面向对象
    JS设计模式(9)享元模式
    JS设计模式(8)模板方法模式
    JS设计模式(7)组合模式
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467318.html
Copyright © 2020-2023  润新知