Java简易登录注册小程序

作者:温柔狠角色 时间:2023-01-23 09:16:13 

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

功能介绍:简单的登录注册系统,使用了数据库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 + "\t" + pwd + "\t");
  }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();
 }
}

}

来源:http://blog.csdn.net/qq_25827845/article/details/51549278

标签:java,登录,注册
0
投稿

猜你喜欢

  • android图片处理 让图片变成圆形

    2023-10-03 00:47:30
  • 详解java 客户端链接不上redis解决方案

    2023-11-12 10:12:15
  • Java环境配置图文教程(推荐)

    2023-09-17 11:27:42
  • SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解

    2022-01-31 05:29:10
  • 利用C#操作WMI指南

    2022-05-07 18:02:42
  • 深入Android HandlerThread 使用及其源码完全解析

    2023-11-30 19:16:56
  • 深入了解C++智能指针的使用

    2023-04-07 01:41:46
  • React Native学习之Android的返回键BackAndroid详解

    2023-04-19 14:15:28
  • Java date format时间格式化操作示例

    2021-10-28 19:12:24
  • Spring Cloud + Nacos + Seata整合过程(分布式事务解决方案)

    2021-08-31 04:26:52
  • Java移动文件夹及其所有子文件与子文件夹

    2023-08-01 09:53:38
  • Unity Shader实现序列帧动画效果

    2021-10-31 22:50:18
  • Android巧用ActionBar实现下拉式导航

    2023-12-02 04:00:59
  • SpringBoot自动配置深入探究实现原理

    2023-08-06 09:59:58
  • Java 给PDF签名时添加可信时间戳的方法

    2022-04-03 12:38:48
  • 深入理解spring boot 监控

    2023-11-04 02:25:15
  • C#读写xml文件方法总结(超详细!)

    2023-11-23 13:16:40
  • 基于SpringBoot+Redis的Session共享与单点登录详解

    2023-09-22 18:13:48
  • Java最长公共子序列示例源码

    2023-08-20 13:25:37
  • Java中对象的序列化方式克隆详解

    2021-09-15 20:02:01
  • asp之家 软件编程 m.aspxhome.com