Java简易登录注册小程序

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

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

} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2016-10-27

Java+mysql用户注册登录功能

最近刚刚开始学习mysql,所以就写了这个很基本的用户注册登录的功能来练练手.虽然这个很简单,但是我还是看到了自己学习的进步,很开心.哈哈哈. 这里要注意数据表的建立: 直接上代码吧,里面注释很详细了. package client; import java.sql.*; import java.util.*; public class Client { /** * 用以实现用户的注册和登录 */ private static String username;//用户登录注册的姓名 privat

注册验证java代码[针对上篇文章]

http://www.jb51.net/article/19801.htm 复制代码 代码如下: <%@ page contentType="text/html; charset=gb2312" language="java"%> <%@ page import="java.sql.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional/

JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

Servlet+JavaBean+JSP打造Java Web注册与登录功能

采用Java Web所实现的MVC结构图如下,其中控制器部分采用Servlet来实现,模型部分采用JavaBean来实现,而大部分的视图采用Jsp页面来实现. 思想基础 JSP+JavaBean两层结构工作原理应该是比较熟悉的,也比较好理解. 但是有一点必须要清楚就是用户通过浏览器来发送网页的请求,此请求到达服务器后在服务器端查找对应的网页,如果是首次请求(第二次就不用解释执行了),对于JSP来说要生成Servlet,然后通过Servlet引擎来执行 Servlet,把调用JavaBean的结果

java中使用Filter控制用户登录权限具体实例

学jsp这么长时间,做的项目也有七八个了,可所有的项目都是用户登录就直接跳转到其拥有权限的页面,或者显示可访问页面的链接.使用这种方式来幼稚地控制访问权限.从来没有想过如果我没有登录,直接输入地址也可以直接访问用户的页面的. 在jsp中权限的控制是通过Filter过滤器来实现的,所有的开发框架中都集成有Filter,如果不适用开发框架则有如下实现方法: LoginFilter.java 复制代码 代码如下: public class LoginFilter implements Filter {

JAVA简单链接Oracle数据库 注册和登陆功能的实现代码

复制代码 代码如下: //User 用户的基本信息,也是USERINFO表中的3个列package 登陆判断; public class User { private String name;  private String loginname;  private String loginpsw;  public String getName() {   return name;  }  public void setName(String name) {   this.name = name;

java中servlet实现登录验证的方法

login.java: 复制代码 代码如下: package com.ncu;import java.io.PrintWriter; import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class login extends HttpServlet{ public void do

JAVA实现简单系统登陆注册模块

前期准备 首先要先明确有个大体的思路,要实现什么样的功能,了解完成整个模块要运用到哪些方面的知识,以及从做的过程中去发现自己的不足.技术方面的进步大都都需要从实践中出来的. 功能:用户注册功能+系统登录功能+生成验证码 知识:窗体设计.数据库设计.JavaBean封装属性.JDBC实现对数据库的连接.验证码(包括彩色验证码)生成技术,还有就些比如像使用正则表达式校验用户注册信息.随机获得字符串.对文本可用字符数的控制等 设计的模块预览图: 彩色验证码预览图: 所用数据库:MySQL 数据库设计

java模拟post请求登录猫扑示例分享

复制代码 代码如下: import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;im

java(jsp)整合discuz同步登录功能详解

最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块,正好在开源中国上看到了一个利用discuz的UCenter功能实现同步登录的开源项目(https://code.google.com/p/discuz-ucenter-api-for-java/),不禁大喜,于是花了几个小时照着教程操作了一遍,居然很轻松的成功了,特写此文以做纪念.. Uenter是Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,实现用户的一站

基于Java回顾之多线程同步的使用详解

首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控制同步,接下来我们会仿照回顾网络通信时那样,构建一个服务器端的"线程池",JDK为我们提供了一个很大的concurrent工具包,最后我们会对里面的内容进行探索. 为什么要线程同步? 说到线程同步,大部分情况下, 我们是在针对"单对象多线程"的情况进行讨论,一般会将其分成两部分,一部分是关于"共享变量",一部分关于"执行步骤". 共享变量 当我们在线程对象(Run

Java实现用户不可重复登录功能

 总述 前些天,无意之间想到这个问题,感觉挺实用,有必要整理一下.随手写了一个简单的mode,感觉并不算难.思路理顺其实挺简单的. 为实现用户不可同时登陆,只要想想现实中新浪,百度等,只要一处登陆就将另一处的给"挤"下去,就可以知道实现结果为何.然后再逆推之,即可形成较为清晰的思路.我们一起来探讨一下. 首先,我们得明白用户登录使用什么登陆的,即用户在线的原理.这只是将用户的对象存放在了session中而已,然后再frame中进行调用,其他特定页面也进行直接引用就行.那么实现"

Java 同步锁(synchronized)详解及实例

Java 同步锁(synchronized)详解及实例 Java中cpu分给每个线程的时间片是随机的并且在Java中好多都是多个线程共用一个资源,比如火车卖票,火车票是一定的,但卖火车票的窗口到处都有,每个窗口就相当于一个线程,这么多的线程共用所有的火车票这个资源.如果在一个时间点上,两个线程同时使用这个资源,那他们取出的火车票是一样的(座位号一样),这样就会给乘客造成麻烦.比如下面程序: package com.pakage.ThreadAndRunnable; public class Ru

Java同步函数代码详解

/* 同步函数 当函数中的代码全部放在了同步代码块中,那么这个函数就是同步函数 */ //同步函数的锁是this锁,this是一个引用,this指向的对象就是锁 //下面证明一下同步函数的锁就是this //创建两个线程,一个在同步代码块中执行,另一个在同步函数中执行 //同步代码块用的锁是obj,同步函数用的所是this //这就导致了两个线程存在两把锁,会出现上次所说的安全问题,即出现错误数据 //只有两个线程同时用一把锁,才能解决多线程的安全问题 class Ticket implemen

java 制作验证码并进行验证实例详解

java 制作验证码并进行验证实例详解 在注册.登录的页面上经常会出现验证码,为了防止频繁的注册或登录行为.下面是我用java制作的一个验证码,供初学者参考,做完验证码之后,我们可以用ajax进行验证码验证. 功能一:验证码制作的代码,点击图片,验证码进行更换 /** * 显示验证码图片 */ public void showCheckCode(HttpServletRequest req, HttpServletResponse resp) throws ServletException, I

JSP中param动作的实例详解

JSP中param动作的实例详解 一 语法 <jsp:param name="参数名" value="参数值"> 常常与<jsp:forward>一起使用,作为其子标签存在. 二 代码 1.login.jsp <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"

JSP中EL表达式的用法详解(必看篇)

EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );

Socket+JDBC+IO实现Java文件上传下载器DEMO详解

该demo实现的功能有: 1.用户注册: 注册时输入两次密码,若两次输入不一致,则注册失败,需要重新输入.若用户名被注册过,则提示用户重新输入用户名: 2.用户登录: 需要验证数据库中是否有对应的用户名和密码,若密码输错三次,则终止用户的登录操作: 3.文件上传: 从本地上传文件到文件数据库中 4.文件下载: 从数据库中下载文件到本地 5.文件更新: 根据id可更新数据库中的文件名 6.文件删除: 根据id删除数据库中某一个文件 7.看数据库所有文件; 8.查看文件(根据用户名); 9.查看文件

Java编程思想对象的容纳实例详解

Java提供了容纳对象(或者对象的句柄)的多种方式,接下来我们具体看看都有哪些方式. 有两方面的问题将数组与其他集合类型区分开来:效率和类型.对于Java来说,为保存和访问一系列对象(实际是对象的句柄)数组,最有效的方法莫过于数组.数组实际代表一个简单的线性序列,它使得元素的访问速度非常快,但我们却要为这种速度付出代价:创建一个数组对象时,它的大小是固定的,而且不可在那个数组对象的"存在时间"内发生改变.可创建特定大小的一个数组,然后假如用光了存储空间,就再创建一个新数组,将所有句柄从