用java实现类似于QQ的登录注册功能

        在去食堂的路上想到的一个点子,觉得很有意思就写了出来。要学会在代码中找乐趣嘛,很有意思的一个小程序。

由于是用Java实现的所以图形显示界面是通过java的GUI实现的。

        首先先来介绍一下我们的最终成果。写了四个类文件分别是Constant.java(用于存放数据)、Account.java(一个简单的账户类)、Login.java(用来实现登录界面和功能)Register.java(用来实现注册界面和功能),其中Register和Login才是重点。熟悉QQ的同学都知道我们打开主程序都是显示登录界面,然后在登录界面可跳转到注册界面,但我们必须先注册了才能登录,所以我们先来实现注册界面,在实现注册界面之前先简单介绍一下Constant类和Account类。

一、Constant.java和Account.java

Account类一个简单的账户类,一共有ID、username、password三个属性。

public class Account {
	private int ID;
	private String username;
	private String password;

	public Account() {
	}

	public Account(int iD, String password) {
		super();
		ID = iD;
		this.password = password;
	}

	public Account(int iD, String username, String password) {
		super();
		ID = iD;
		this.username = username;
		this.password = password;
	}

	public int getID() {
		return ID;
	}

	public void setID(int iD) {
		ID = iD;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

 

Constant类存放了两个map数据,mapPass用来存放账号和密码,mapUser用来存放账号和用户名。

 

附上代码:

import java.util.HashMap;

public class Constant {
	public static HashMap<Integer, String> mapPass = new HashMap<>();

	public static HashMap<Integer, String> mapUser = new HashMap<>();

}

 

二、Register.java

 

首先先来展示一下Register的最终界面:

两个JLabel标签用于显示文字,两个JTextField的文本输入框用来输入用户名和密码,最下面个按钮实现注册功能,由于是用javaGUI实现的所以界面比较简陋,不过不要在意这不是重点。整个界面的实现的就是GUI的布局没什么好说的。下面说下注册功能的核心思想:

我们都知道QQ的注册是不能自己填写QQ号码的,是由系统随机分配的,所以我们这也由系统随机分配号码,主要使用到了Math.random()方法实现这个功能。代码如下:

int ID = (int) (90000 * Math.random() + 10000);

这行代码是随机生成一个五位数的整形数据,可以用来当做我们的账号号码。那么怎么关联我们的账号和用户名以及密码呢?这就用到了我们Constant类中的两个map,我们可以用两个map来关联三个属性。

我们需要为按钮注册一个ActionListener来监听用户事件,由于我们只使用这一次,所以可以用匿名内部类来实现,在用户点击确定按钮时,我们可以用JTextField提供的getText()方法来获得用户输入的数据,再将系统自动生成的账户ID和用户输入的数据一块存入我们创建的Account实例中。这样就实现了用户的注册。

代码中,我创建了一个creatAccount()方法,来实现以上功能,在事件发生后调用creatAccount方法,即实现了用户的注册,在方法最后把创建的账户的ID、username、password放入我们Constant类的map中储存起来,留待之后使用。

最后通过JOptionPane弹出一个提示框,告诉用户注册成功以及注册得到的ID。

附上全部代码:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Register extends JFrame {

	private JTextField user_f, pass_f;
	private JPanel p1,p2;
	private Container c;
	private JLabel user_l, pass_l;
	private JButton ok;

	public Register() {
		super("注册");

		c = getContentPane();
		p1=new JPanel();
		p2=new JPanel();
		p1.setLayout(new GridLayout(2,2));
		
		
		user_l = new JLabel("请输入用户名");
		user_f = new JTextField();
		p1.add(user_l);
		p1.add(user_f);

		pass_l = new JLabel("请输入密码");
		pass_f = new JTextField();

		p1.add(pass_l);
		p1.add(pass_f);

		ok = new JButton("确定");
		ok.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				creatAccount();
				JOptionPane.showMessageDialog(c, "注册成功,您的账号为" + Constant.a.getID());

			}
		});
		p2.add(ok);

		
        c.add(p1, BorderLayout.CENTER);
        c.add(p2, BorderLayout.SOUTH);
		setSize(250, 120);
		setLocationRelativeTo(null);
		setVisible(true);
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

	}

	public void creatAccount() {

		int ID = (int) (90000 * Math.random() + 10000);
		String username = user_f.getText();
		String password = pass_f.getText();
		Constant.a.setID(ID);
		Constant.a.setPassword(password);
		Constant.a.setUsername(username);
		Constant.mapPass.put(ID, password);
		Constant.mapUser.put(ID, username);
	}
}

 

三、Login.java

首先先来展示一下Login的最终界面:

在这个界面我们可以输入账号ID和密码来登录,界面上的注册按钮可以转到注册界面,然后让用户注册后在登录。

登录的时候我们需要做几个异常检测,如,“账号不存在”,“账号密码不一致”。这需要在用户点击登录按钮时实现。

我们需要去到mapPass里面去找到用户所输入的ID,如果未找到则弹出“账号不存在”错误。如果账号存在,再检测账号与密码是否匹配,如果不匹配弹出“账号与密码不一致”错误。如果没有错误

这就用到了我们Constant类中用于存放数据的两个map。

详见代码:

			public void actionPerformed(ActionEvent e) {
				int tempId = Integer.parseInt(user.getText());
				if (!Constant.mapPass.containsKey(tempId)) {
					JOptionPane.showMessageDialog(c, "该账号尚未注册!", "错误", JOptionPane.ERROR_MESSAGE);
				} else if (!Constant.mapPass.get(tempId).equals(pass.getText())) {
					JOptionPane.showMessageDialog(c, "账号与密码不一致!", "错误", JOptionPane.ERROR_MESSAGE);
				} else {
					JOptionPane.showMessageDialog(c, "登录成功!");
				}

			}
<strong>最后附上Login的全部代码:</strong>

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Login extends JFrame {
	private JTextField user, pass;
	private JPanel u, p, b;
	private Container c;
	private JLabel ID, password;
	private JButton login, register;

	public Login() {
		super("登录");
		c = getContentPane();
		u = new JPanel();
		p = new JPanel();
		b = new JPanel();
		u.setLayout(new BorderLayout());
		p.setLayout(new BorderLayout());
		ID = new JLabel("账号");
		user = new JTextField();
		u.add(ID, BorderLayout.WEST);
		u.add(user, BorderLayout.CENTER);

		password = new JLabel("密码");
		pass = new JTextField();

		p.add(password, BorderLayout.WEST);
		p.add(pass, BorderLayout.CENTER);
		login = new JButton("登录");
		login.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				int tempId = Integer.parseInt(user.getText());
				if (!Constant.mapPass.containsKey(tempId)) {
					JOptionPane.showMessageDialog(c, "该账号尚未注册!", "错误", JOptionPane.ERROR_MESSAGE);
				} else if (!Constant.mapPass.get(tempId).equals(pass.getText())) {
					JOptionPane.showMessageDialog(c, "账号与密码不一致!", "错误", JOptionPane.ERROR_MESSAGE);
				} else {
					Client c = new Client();
				}

			}
		});
		register = new JButton("注册");
		register.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				Register r = new Register();

			}
		});
		b.add(login);
		b.add(register);

		c.add(u, BorderLayout.NORTH);
		c.add(p, BorderLayout.CENTER);
		c.add(b, BorderLayout.SOUTH);
		setSize(250, 120);
		setLocationRelativeTo(null);
		setVisible(true);
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
	}

	public static void main(String[] args) {
		Login a = new Login();
	}

}

看到好多要源码的,在此贴一下这个项目的github地址,感兴趣的可以自己去下载,可以运行无bug的:

https://github.com/wuud/myJavaProject

第一个chatRoom就是这个项目的升级版。是在注册登录的基础上又加了多线程聊天室功能。

如果大家只是想运行注册登录功能的话,项目下载解压后,会有个Login类,运行这个类就可以体验注册登录功能了。弹出登录面板后,再点击注册按钮就可以了。

如果大家想要运行聊天室项目的话,需要先启动服务类Server,再启动Login类,下面的步骤和上面一样。

最后,Java实现五子棋小游戏:https://blog.csdn.net/wuud__/article/details/105209813 ,也是适合新手哦。

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值