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

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 + "\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();
}
} }

Java图形界面开发—简易登录注册小程序的更多相关文章

  1. Java图形界面学习---------简易登录界面

    /** * @author Administrator * Java图形界面学习---------简易登录界面 * date:2015/10/31 */ import java.awt.BorderL ...

  2. Java图形界面开发—简易记事本

          在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: ...

  3. Java 图形界面开发--图文并茂建立学生管理系统

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客) 图形用户界面(Graphics U ...

  4. JAVA 图形界面开发基础详解

    与C的win32一样,JAVA也有自己的图形界面开发,将在此篇博客中对基础部分进行讲解. 1.Java提供的图形界面类有哪些? Java提供了两套图形界面 (1)AWT组建(基础) AWT组件是jdk ...

  5. java使用window builder图形界面开发简易计算器

    界面效果: /** * */ package calculator; import java.awt.BorderLayout; import java.awt.EventQueue; import ...

  6. Java图形界面开发—列出指定目录

    代码如下: package com.packageTemp; import javax.swing.*; import java.awt.*; import java.awt.event.*; imp ...

  7. Java GUI图形界面开发工具

    Applet 应用程序     一种可以在 Web 浏览器中执行的小程序,扩展了浏览器中的网页功能. 缺: 1.需要下载 Applet 及其相关文件 2.Applet 的功能是受限制的 优: 3.无需 ...

  8. JAVA与图形界面开发(Applet应用程序、AWT库、Swing)

    Applet 1)简单说,Applet就是嵌入到网页中的小程序,Java代码. 2)编写Applet程序,要继承JApplet类,并根据自己需要覆写相关方法(init.start.stop.destr ...

  9. Java Swing 图形界面开发(目录)

    Java Swing 图形界面开发(目录) 2017年05月30日 23:50:42 阅读数:5228 本文链接: http://blog.csdn.net/xietansheng/article/d ...

随机推荐

  1. Angular08 依赖注入

    1 angular应用中依赖注入的工作原理 技巧01:在模块级别进行注册时所有在应用级别的组件都可以使用,因为主模块会导入其他模块,所以在模块中注入就相当于在主模块进行注入操作:懒加载的模块除外 技巧 ...

  2. 15、Linux 文件属性和测试( chgrp,chown,chmod和-e -f -d -s

    一.更改文件属性 1.chgrp:更改文件属组 语法: chgrp [-R] 属组名文件名 参数选项 -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件 ...

  3. PAM认证

    PAM认证 摘自: http://www.cnblogs.com/shenxm/p/8451889.html PAM(Pluggable Authentication Modules) Sun公司于1 ...

  4. virtio使用

    Windows 参考文档 下载virtio驱动 下载地址 如果是在Fedora或CentOS环境下,可使用yum的方式下载驱动 [root@centos centos]#wget https://fe ...

  5. 2018上海大都会邀请赛J(数位DP)

    #include<bits/stdc++.h>using namespace std;int num[20];//按位储存数字int mod;long long dp[20][110][1 ...

  6. java 提取(解压)rar文件中特定后缀的文件并保存到指定目录

    内容简介 本文主要介绍使用junrar来提取rar压缩文件中特定后缀(如:png,jpg)的文件并保存到指定目录下. 支持v4及以下版本压缩文件,不支持v5及以上. 在rar文件上右键,查看属性,在压 ...

  7. Glusterfs冗余镜像(AFR)修复原理以及脑裂分析

    研究Glusterfs半年多了,通过实际操作以及源代码分析,对它有了越来越深的了解,由衷的赞叹Gluster的整体架构.今天时间不早了,想写点关于Glusterfs的冗余镜像产生脑裂的原因. 首先,简 ...

  8. 洛谷P1312 Mayan游戏

    P1312 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他 ...

  9. JDK源码-java.lang.String

    1.开篇明志 本文来看看String的源码. 2.Java7 API String介绍 String 类代表字符串.Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现. 字符串 ...

  10. Spring学习和应用

    Java EE轻量级框架. 核心:反转控制(IOC),依赖注入. 功能:增删改查bean,   功能: 1.容器功能:    代替了EJB容器,负责管理用户基于POJO方式写的业务逻辑组件,具有类似E ...