HashSet模拟新浪微博用户注册

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_42680327

/**
 * @author 志
 * @version 创建时间:2018年10月12日上午 11:12:59
 * 
 */

1、任务描述

编写一个新浪微博用户注册的程序,要求使用HashSet集合实现。 
假设当用户输入用户名、密码、确认密码、生日(输入格式yyyy-mm-dd为正确)、手机号码(手机长度为11位,并且以13、15、17、或18开头的手机号为正确)、邮箱(包含符号“@”为正确)信息之后,判断信息是否输入正确,正确校验用户是否重复注册,如果不是重复注册,则注册成功。例如:用户信息列表中已经存在用户“lisi”,当lisi再次注册时,则输出“注册结果:用户重复!”。

2、运行结果

 

任务目标

  1. 学会分析"模拟新浪微博用户注册"程序的实现思路
  2. 根据思路独立完成"模拟新浪微博用户注册"程序源代码的编写、编译及运行
  3. 掌握Hashset存储数据的流程

实现思路

(1)为了便于存储用户信息,需要创建一个用户类,在类中重写其中的HashCode()方法,令其返回用户名的哈希值,再重写equals()方法,来比较对象的用户名属性是否相等。 
(2)有了用户类之后,再需要1一个用户注册类来模拟注册信息,该类中可以用HashSet集合来创建一个数据列表,然后向列表中添加两条初始注册信息。 
(3)从控制台获取用户填写信息,可以通过Scanner类的nextLine()方法来实现,获取后,需要将获取的信息校验。 
(4)校验信息可以创建一个检验类,在类中实现用户输入的信息的方法。检验结束后,如果检验结果错误就直接返回错误信息,这里可以声明一个检验结果变量和一个检验状态变量。检验结果变量用于存储提示信息,检验状态变量用于存储结果的判断标识。 
(5)当用户输入的信息不满足格式时,需要修改变量1状态并存储错误信息。 
(6)判断校验状态,如果所有信息都通过校验,则将用户信息创建成为用户对象,通过将对象添加到用户列表返回结果来判断用户名是否重复,并记录下返回结果信息。

下面来看看代码

User类: 创建用户类,并重写其hashCode()方法和equals()方法。

package cn.itcast.chapter011;

import java.util.Date;

/**
 * @author 志
 * @version 创建时间:2018年10月12日上午 11:12:59
 * 
 */

public class user {
	private String name;//用户名
	private String mima;//密码
	private Date birthday;         //生日
	private String telephone;//电话号码
	private String email;//邮箱
	
	//自己手动输入生日Date birthday
	public user(String name, String mima, Date birthday, String telephone, String email) {

		this.name = name;
		this.mima = mima;
		this.birthday = birthday;
		this.telephone = telephone;
		this.email = email;
	}

	//重写hashcode与equals方法
	public int hashCode() {
		return name.hashCode();
		
	}
	public boolean equals(Object obj) {
		if(this==obj) {                       //判断是否为同一个对象
			return true;
		}
		if(obj==null) {                       //判断这个对象是否为空
			return false;
		}
		if(getClass()!=obj.getClass()) {       //判断这个对象是否为user类型
			return false;
		}
		user u1=(user)obj;                     //强制类型转换
		if(name==null) {                      //判断集合中用户名是否为空
			if(u1.name!=null) {               //判断对象中用户名是否为空    
				return false;
			}
			else if(!name.equals(u1.name)) {       //判断用户名是否相同
				return false;
			}
		}		
		return true;		
	}

}

用户注册类:创建用户注册完类,模拟注册信息。

package cn.itcast.chapter011;

import java.util.Date;
import java.util.HashSet;
import java.util.Scanner;

//注册类信息
public class userregister {
	public static HashSet<user> hs=new HashSet<user>();    //用户数据---无序
	
	public static void main(String[] args) {
		initdata();                                     //初始化人员信息
		Scanner scan=new Scanner(System.in);
		
		System.out.print("请输入用户名: ");
		String name=scan.nextLine();
		
		System.out.print("请输入密码: ");
		String mima=scan.nextLine();
		
		System.out.print("请重复密码: ");
		String remima=scan.nextLine();
		
		System.out.print("请输入出生日期: ");
		String birthday=scan.nextLine();
		
		System.out.print("请输入手机号码: ");
		String telephone=scan.nextLine();
		
		System.out.print("请输入电子邮箱: ");
		String email=scan.nextLine();
		
		//检验用户信息,返回登录信息
		checkinfo checkinfo=new checkinfo(hs);       
		
		String result=checkinfo.checkaction(name, mima, 
				remima, birthday, telephone, email);
		
		System.out.println("注册结果: "+result);
				
	}
	//初始化数据,创建用户信息
	private static void initdata() {
		user use1=new user("zhangsan", "zz.123", new Date(), "18810319249", "zhaowu@itcasat.cn");
		user use2=new user("lisi", "xx.123", new Date(), "18810319240", "liliu@itcasat.cn");
		
		hs.add(use1);		
		hs.add(use2);
	}
	
			
			
}

创建信息校验类:

package cn.itcast.chapter011;

import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashSet;

public class checkinfo {
	public static HashSet<user> hs=new HashSet<user>();    //用户数据---无序

	public checkinfo(HashSet<user> hs) {           
		this.hs=hs;
	}
	
	//检验用户信息,返回登录信息
	public String checkaction(String name, String mima, 
							String remima, String birthday, 
							String telephone, String email) {
		
		//StringBuilder是一个类,可以用来处理字符串
		StringBuilder result=new StringBuilder();               
		
		int state=1;          //1代表成功, 2代表失败
		
		//密码判断
		if(!mima.equals(remima)) {
			result.append("两次输入密码不一致!\n");
			state=2;
		}
		
		//生日判断
		if(birthday.length()!=10) {
			result.append("生日格式不正确!\n");
			state=2;
		}else {
			for(int i=0;i<birthday.length();i++) {
				
				Character thischar=birthday.charAt(i);             
				if(i==4 || i==7) {
					if(!(thischar=='-')) {
						result.append("生日格式不正确!\n");
						state=2;
					}else {
						if((Character.isDigit(thischar))) {            
							result.append("");
							state=2;						
						}
						
					}
					
				}
						
				
			}
			
		}
		//手机号判断
		if(telephone.length()!=11) {
			result.append("手机号不正确!\n");
			state=2;
		}
		else if(!(telephone.startsWith("13") 
					||telephone.startsWith("15")           
					||telephone.startsWith("17") 
					||telephone.startsWith("18"))) {
			result.append("手机号不正确!\n");
			state=2;
		}
		
		//邮箱判断
		if(!email.contains("@")) {             //判断邮箱地址,默认不带@符号的邮箱为无效邮箱
			result.append("邮箱不正确!\n");
			state=2;
			
		}
		
		//如果信息正确
		if(state==1) {
			DateFormat format=new SimpleDateFormat("yyy-MM-dd");    
			
			//databirthday--------------注意
			Date databirthday=null;            
	
				try {
					databirthday=format.parse(birthday);
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	
			
			//databirthday--------------注意
			user newuser=new user(name, remima, databirthday, telephone, email);
			
			if(!hs.add(newuser)) {
				result.append("用户重复");
				state=2;
			}
			if(state==1) {
				result.append("注册成功!");
			}		
		}
	
		return result.toString();
		
	}
	

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小智解说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值