JAVA实现QQ登录、注册等功能

JAVA实现QQ登录、注册等功能本文主要应用的技术有:GUI、JDBC、多线程实现的功能具体如下:1、登录功能2、注册功能3、是否隐藏密码的选择以及实现功能4、选择性别功能5、密码与确认密码功能6、登录页面实时展示当前的时间7、当登录时用户名与密码在数据库中没有相匹配的数据,则会跳转到注册页面上去。8、同样,注册完毕后,数据会运用JDBC将数据写入数据库中,然后跳转回登录页面。…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本文主要应用的技术有:GUI、JDBC、多线程

 实现的功能具体如下:

1、登录功能

2、注册功能

3、是否隐藏密码的选择以及实现功能

4、选择性别功能

5、密码与确认密码功能

6、登录页面实时展示当前的时间

7、当登录时用户名与密码在数据库中没有相匹配的数据,则会跳转到注册页面上去。

8、同样,注册完毕后,数据会运用JDBC将数据写入数据库中,然后跳转回登录页面。

 登录页面:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.time.LocalTime;

public class JDBC_登录功能 {
    public static void main(String[] args) {
        guitext3 gt=new guitext3();
       new Thread(new time1(gt.time)).start();//启动线程

    }
}
class guitext3 {
    JFrame jf;
    JLabel l1,l2,time;
    JTextField f1;
    JPasswordField f2;
    JButton jb1,jb2;
    JCheckBox jc;
    public guitext3() {
        jf = new JFrame("QQ登录窗口");
        jf.setSize(320,250);
        jf.setLocation(700,300);//设置窗口每次启动都显示在屏幕正中央
        jf.setLayout(null);
        Font font = new Font("仿宋", Font.BOLD, 20);//设置统一的字体,让代码更加整洁美观
        l1 = new JLabel("用户名:");
        l1.setBounds(10,10,100,40);
        l1.setFont(font);
        f1 = new JTextField(null,20);
        f1.setBounds(90,15,180,30);
        f1.setFont(font);
        l2 = new JLabel("密  码:");
        l2.setBounds(8,50,100,40);
        l2.setFont(font);
        f2=new JPasswordField(null,20);
        f2.setBounds(90,55,180,30);
        f2.setEchoChar('*');//设置密码的外显为*
        f2.setFont(font);
        jc=new JCheckBox("显示密码");
        jc.setBounds(230,130,80,40);
        jc.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {//被选中
                    f2.setEchoChar((char) 0);
                } else {
                    f2.setEchoChar('*');
                }
            }
        });
        ActionListener listener=new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        };
        jc.addActionListener(listener);
        jb1 = new JButton("登录");
        jb1.setBounds(30,100,80,40);
        time=new JLabel();
        time.setBounds(30,150,140,40);
        time.setFont(font);
        //匿名内部类
        jb1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                Statement st=null;
                Connection con=null;
                ResultSet rs=null;
                try {
                    //注册驱动
                    Class.forName("com.mysql.cj.jdbc.Driver");
                    //这里的3306/后跟的是数据库名
                    //获取数据库连接
                    String url="jdbc:mysql://localhost:3306/students?serverTimezone=GMT%2B8";
                    //通过DriverManager完成注册
                    con= DriverManager.getConnection(url,"root","123");//你自己的数据库用户名和密码
                    //执行SQL语句
                    String sql="select * from student";//from 后跟表名
                    st=con.createStatement();
                    rs=st.executeQuery(sql);
            boolean flag=false;
            while(rs.next()){
                //如果输入的用户名和密码与数据库中的用户和对应的密码相同,则弹出“登录成功!”的窗口
                if(f1.getText().equals(rs.getString(1))&&f2.getText().equals(rs.getString(2))){
                    JOptionPane.showMessageDialog(null, "登录成功!");
                    flag=true;//登陆成功后将标记改为true方便确认
                    break;
                }
            }
            if(flag==false){//如果标记为false,则表示用户名和密码在数据库中未找到,弹出“登录失败!请注册账户!”的窗口
                JOptionPane.showMessageDialog(null, "登录失败!请注册账户!");
                f1.setText(null);//清空用户栏
                f2.setText(null);//清空密码栏
                //这个账号不存在,需要注册,跳转到注册窗口
                guitext4 gt=new guitext4();
                jf.dispose();//关闭窗体,释放所有资源
            }
                } catch (ClassNotFoundException ex) {
                    ex.printStackTrace();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
        });
        jb1.setFont(font);
        jb2 = new JButton("退出");
        jb2.setBounds(150,100,80,40);
        //匿名内部类
        jb2.addMouseListener(new MouseAdapter() {
            //重写鼠标点击事件
            public void mouseClicked(MouseEvent e) {//如果点击了退出窗口,则弹出“退出成功!”的窗口
                JOptionPane.showMessageDialog(null, "退出成功!");
                //系统退出
                System.exit(0);
            }
        });
        jb2.setFont(font);
        //将这些按钮和文本等加入到窗体中
        jf.add(l1);
        jf.add(f1);
        jf.add(l2);
        jf.add(f2);
        jf.add(jb1);
        jf.add(jb2);
        jf.add(time);
        jf.add(jc);
        jf.setVisible(true);//让组件显示
    }
}
//写一个时间线程类
class time1 implements Runnable{
    JLabel time;//方便传参
    public time1(JLabel time) {
        this.time = time;
    }
    public void run(){
        while (true) {
            try {
                Thread.sleep(1000);//休眠1秒
                LocalTime time=LocalTime.now();//获取当前时间
                this.time.setText(time.toString());//设置JLabel文本
                //SimpleDateFormat t = new SimpleDateFormat ("HH:mm:ss");//格式化时间,把时间格式化为时:分:秒
               // this.time.setText(t.format(time));//给标签添加内容,即时间
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 注册页面:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class JDBC_注册功能 {
public static void main(String[] args) {
guitext4 gt=new guitext4();
}
}
class guitext4{
JFrame jf;
// JPanel jp;
JLabel l1,l2,l3;
JTextField f1;
JPasswordField f2,f3;
JButton jb1,jb2;
JRadioButton jr1,jr2;
JCheckBox jc;
public guitext4() {
jf = new JFrame("QQ注册窗口");
jf.setSize(320,280);//设置窗体大小
jf.setLocation(700,300);//设置窗口每次启动都显示在屏幕正中央
jf.setLayout(null);
// jp = new JPanel();
Font font = new Font("仿宋", Font.BOLD, 20);//设置统一的字体,让代码更加整洁美观
l1 = new JLabel("用户名:");
l1.setBounds(10,10,100,40);
l1.setFont(font);
f1 = new JTextField(null,20);
f1.setBounds(90,15,180,30);
f1.setFont(font);
l2 = new JLabel("密  码:");
l2.setBounds(8, 50, 100, 40);
l2.setFont(font);
f2 = new JPasswordField(null, 20);
f2.setBounds(90, 55, 180, 30);
f2.setEchoChar('*');//设置密码的外显为*
f2.setFont(font);
l3 = new JLabel("确认密码:");
l3.setBounds(8, 88, 130, 40);
l3.setFont(font);
f3 = new JPasswordField(null, 20);
f3.setBounds(120, 95, 160, 30);
f3.setEchoChar('*');//设置密码的外显为*
jc=new JCheckBox("显示密码");//创建一个复选按钮
jc.setBounds(230,130,80,40);
jc.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {//被选中
f2.setEchoChar((char) 0);//显示原本的数据
f3.setEchoChar((char)0);//显示原本的数据
} else {
f2.setEchoChar('*');//设置密码的外显为*
f3.setEchoChar('*');//设置密码的外显为*
}
}
});
f3.setFont(font);
ButtonGroup group = new ButtonGroup();
//创建两个单选按钮
jr1 = new JRadioButton("男");
jr1.setBounds(70, 130, 80, 40);
jr1.setFont(font);
jr2 = new JRadioButton("女");
jr2.setBounds(150, 130, 80, 40);
jr2.setFont(font);
//将两个单选按钮加入到同一个ButtonGroup组中
group.add(jr1);
group.add(jr2);
//实现监听接口
ActionListener listener = new AbstractAction() {
@Override
//actionPerformed==>发生动作时调用
public void actionPerformed(ActionEvent e) {
}
};
jr1.addActionListener(listener);
jr2.addActionListener(listener);
jc.addActionListener(listener);
jb1 = new JButton("注册");
jb1.setBounds(50, 170, 80, 40);
//匿名内部类
jb1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
PreparedStatement ps = null;//PreparedStatement==>表示预编译的SQL语句的对象。
// SQL语句已预编译并存储在PreparedStatement对象中。
Connection con = null;//Connection==>与特定数据库的连接
try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//这里的3306/后跟的是数据库名
//获取数据库连接
String url = "jdbc:mysql://localhost:3306/students?serverTimezone=GMT%2B8";
//通过DriverManager完成注册
con = DriverManager.getConnection(url, "root", "123");//你自己数据库的用户名和密码
//执行SQL语句
String sql = "insert into student(username,password,sex) values(?,?,?)";
ps = con.prepareStatement(sql);
if(f1.getText().length()!=0){
//注:这里的所有getText()都不能写成!=null
ps.setString(1, f1.getText());
}else{
JOptionPane.showMessageDialog(null, "姓名不能为空!");//弹出窗口
}
if(f2.getText().length()!=0) {
ps.setString(2, f2.getText());
}else{
JOptionPane.showMessageDialog(null, "密码不能为空!");
}
if(jr1.isSelected()||jr2.isSelected()) {//如果选择男或者女,就存入数据库。
if (jr1.isSelected()) {//isSelected()==>判断按钮有没有被选中
ps.setString(3, jr1.getText());//选中男,则将sex=男添加到数据
}
if (jr2.isSelected()) {
ps.setString(3, jr2.getText());//选中女,则将sex=女添加到数据
}
}else{//否则弹出窗口提醒“请选择性别!”
JOptionPane.showMessageDialog(null, "请选择性别!");
}
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
}
if (new String(f2.getPassword()).equals(new String(f3.getPassword()))) {//如果密码与确认密码一致
if (new String(f2.getPassword()).equals(new String(f3.getPassword()))&&f1.getText().length()!=0&&f2.getText().length()!=0
&&(jr1.isSelected()||jr2.isSelected())) {//如果密码与确认密码一致,用户名和密码不为空并且选择了性别,则注册成功
JOptionPane.showMessageDialog(null, "注册成功!");
//注册成功后跳转到登录窗口
guitext3 gt = new guitext3();
jf.dispose();//关闭窗体,释放所有资源
try {
int i = ps.executeUpdate();//将注册的账户存储到数据库中
} catch (SQLException ex) {
ex.printStackTrace();
}
}
} else {
JOptionPane.showMessageDialog(null, "注册失败!密码与确认密码不一致!");
f2.setText(null);//清空密码
f3.setText(null);//清空确认密码
}
}
});
jb1.setFont(font);
jb2 = new JButton("退出");
jb2.setBounds(170, 170, 80, 40);
//匿名内部类
jb2.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null, "退出成功!");
//系统退出
System.exit(0);
}
});
jb2.setFont(font);
jf.add(l1);
jf.add(f1);
jf.add(l2);
jf.add(f2);
jf.add(l3);
jf.add(f3);
jf.add(jr1);
jf.add(jr2);
jf.add(jc);
jf.add(jb1);
jf.add(jb2);
// jf.add(jp);
jf.setVisible(true);
}
}

 登录页面运行结果:

 faa4b668b0684aa190fbf4230d5b1c50.png

 注册页面运行结果:

 94c8fc0e52a8440e80ec729716f35e4e.png

 是否隐藏密码效果图:

50fc842306794501a0c5ae40b6897663.png ee5aeb93f2b041babac9c4611ebb6871.png

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169350.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 黑盒测试基础[通俗易懂]

    黑盒测试基础[通俗易懂]黑盒测试方法:黑盒测试也称为功能测试和数据驱动测试。它将被测软件视为一个无法打开的黑盒,主要根据功能需求设计测试用例和测试。把产品软件想象成一个只有出口和入口的黑盒。在测试过程中,你只需要知道向黑盒输入什么,知道黑盒会产生什么结果。黑盒测试方法主要有等价类划分、边界值分析、因果图、错误推测等,主要用于软件验证测试。“黑盒”法侧重于程序的外部结构,不考虑内部逻辑结构,针对测试软件界面和软件功能。“黑盒”方法是详尽的输入测试,只有当所有可能的输入都用作测试条件时,才能以这种方式检测程序中的所有错误。

    2022年10月20日
  • day04 JavaScript高级程序设计 阅读总结

    day04 JavaScript高级程序设计 阅读总结《JavaScript高级程序设计》(第四版)阅读总结额,据说这本是前端er必看书籍,花了20个小时简单把这本书过了一下,目前暂时很少用到的东西我这一遍就没有过了,等以后要用的时候再回来继续学了。先来谈谈这本书的缺点,书籍前面章节用到了一些后面才讲到的东西,比如第三章讲symbol对象时,就用到了后面才讲的iterator和generator。然后就是感觉讲的有点太广了,而且基本没有课后习题,看过就是看过了,顶多自己花时间把书里面的例子都敲一遍。所以我建议应该和现代JavaScript教程一起食用。反

  • c语言中strstr函数怎么实现_c语言strstr函数怎么写

    c语言中strstr函数怎么实现_c语言strstr函数怎么写首先,我们来看strstr函数的使用可见,strstr函数是用来查找字串的一个函数。因为字符串中有“cde”子串,所以代码运行起来结果就是”cdef”。现在,我们已经将strstr函数的作用大概了解了一下,下面开始函数的模拟实现。首先,在cplusplus中搜索strstr可以了解到她返回的类型及参数相关链接:strstr-C++Reference(cplusplus.com)接下来,我们分析实现思路直到s1到了下图的位置,两者相等当*s1==*s2时进入while循环,s1+

  • checkbox的attr("checked")一直以来,undefined问题解决

    checkbox的attr("checked")一直以来,undefined问题解决

  • 金蝶迷你版云服务器没有响应,连接云服务器异常金蝶迷你版

    连接云服务器异常金蝶迷你版内容精选换一换云服务器列表页面显示了所有已创建的GPU加速型云服务器信息。您可以参考如下操作查看云服务器详情。云服务器详情中展示了如下信息:云服务器名称、ID、状态等。云服务器上会话的状态、当前应用、连接设备、连接用户等。VR云渲游平台中涉及的云服务器状态如表1所示。云服务器状态一览云服务器状态说明正常设备与该云服务器正在连接中。闲置处于该状态的云服务云服务器列表页面,…

  • C++二维数组sort排序问题

    C++二维数组sort排序问题以往遇到行排列问题(按每行的字典序排序)的时候,总是使用结构体来进行排序,但是如何使用二维数组来达到同样的效果呢?实验内容:利用二维数组进行“三级排序”测试1:使用c++内置的普通型二维数组#include<algorithm>#include<iostream>usingnamespacestd;boolcmp(inta[],intb[]){ …

    2022年10月20日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号