情景任务:用HashSet集合实行微博用户注册程序,假设当用户输入用户名、密码、确认密码、生日(输入格式为yyyy-mm-dd为正确)、邮箱(包含@为正确)信息之后,判断信息输入是否正确,正确验证用户是否重复注册,如果不是重复注册则注册成功。
方法一:
import java.util.*;
//面板类
public class Panel {
public static void main(String[] args) {
HashSet hs=new HashSet();
User user=new User();
Veri ver=new Veri(); //
Scanner sc=new Scanner(System.in);
while(true) {
System.out.println("1.注册");
System.out.println("2.退出");
System.out.println("请输入如你的操作:");
int choose=sc.nextInt();
switch(choose) {
case 1:
System.out.println("----微博注册-----");
System.out.println("");
System.out.println("请输入用户名:");
String name=sc.next();
user.setName(name); //姓名
ver.verificaPa(user); //密码
ver.verificapNumber(user); //手机号
ver.verificaBir(user); //生日
ver.vertificaMail(user); //邮箱
System.out.println("---------------");
hs.add(user);
break;
case 2:
System.out.println("退出系统!");
exit();
break;
default:
System.out.println("你输入有误!");
continue;
}
}
}
public static void exit() {
System.exit(0);
}
}
import java.util.*;
//模拟微博用户注册
class User{
private String name;
private String password;
String pass="111";
private String pNumber;
private String birthday;
private String mailBox;
public int hashCode() {
return pNumber.hashCode();
}
public boolean equals(Object obj) {
if(this==obj) {
return true;
}
if(!(obj instanceof User)) {
return false;
}
User user=(User ) obj;
boolean b=this.name.equals(user.pNumber);
return b;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getpNumber() {
return pNumber;
}
public void setpNumber(String pNumber) {
this.pNumber = pNumber;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getMailBox() {
return mailBox;
}
public void setMailBox(String mailBox) {
this.mailBox = mailBox;
}
}
import java.util.*;
//验证类
public class Veri {
Scanner sc=new Scanner(System.in);
// 验证第二次输入密码与第一次是不是一致的
public void verificaPa(User user) {
while(true) {
System.out.println("请输入密码:");
String password=sc.next();
System.out.println("请重复输入密码:");
String passwordTwo=sc.next();
if(passwordTwo.equals(password)) {
// System.out.println("两次输入密码一样");
user.setPassword(password);
break;
}else {
System.out.println("第一次输入密码和第二次输入密码不一样");
continue;
}
}
}
// 验证电话号码,以13、15、17、18开头格式
public void verificapNumber(User user) {
while(true) {
System.out.println("手机号码:");
String pNumber=sc.next();
if(pNumber.length()==11) {
if(pNumber.startsWith("13")||pNumber.startsWith("15")
||pNumber.startsWith("17")||pNumber.startsWith("18")) {
// System.out.println("zz");
user.setpNumber(pNumber);
break;
}else {
System.out.println("电话号码格式输入有误");
continue;
}
}else {
System.out.println("电话号码位数有问题");
}
}
}
// 验证生日,格式yyyy-mm-dd
public void verificaBir(User user) {
while(true) {
System.out.println("输入出生日期:");
String birthday=sc.next();
if(birthday.charAt(4)=='-'&&birthday.charAt(7)=='-') {
user.setBirthday(birthday);
System.out.println("birth");
break;
}else {
System.out.println("输入格式为:yyyy-mm-dd,请重新");
continue;
}
}
}
// 验证邮箱
public void vertificaMail(User user) {
System.out.println("电子邮箱:");
String mailBox=sc.next();
if(mailBox.contains("@")) {
user.setMailBox(mailBox);
System.out.println("mailBox");
}else {
System.out.println("输入的邮箱有问题");
}
}
}
方法二:
package daya4_Original;
import java.util.*;
//用户类
public class User_a {
private String userName; //用户名
private String password; //密码
private Date birthday; //生日
private String telNumber; //手机号码
private String email; //邮箱
public User_a() {
}
public User_a(String userName,String password,
Date birthday,String telNumber,String email) {
this.userName=userName;
this.password=password;
this.birthday=birthday;
this.telNumber=telNumber;
this.email=email;
}
// 重写hasCode equals方法
@Override
public int hashCode() {
return userName.hashCode();
}
@Override
// 理解重写equals方法思路
public boolean equals(Object obj) {
if(this==obj) { //确定地址是不是一样的
return true;
}
if(obj==null) { //判断是不是为空
return false;
}
if(getClass()!=obj.getClass()) { //判断对象是不是User类型
return false;
}
User_a other=(User_a) obj; //强制转换类型
if(userName==null) { //判断集合中的用户名是不是为空
if(other.userName!=null) { //判断对象中的用户名是不是为空
return false;
}
}else if(!userName.equals(other.userName)) { //判断用户名是否相等
return false;
}
return true;
}
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;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getTelNumber() {
return telNumber;
}
public void setTelNumber(String telNumber) {
this.telNumber = telNumber;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
package daya4_Original;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class CheckInfo {
public static HashSet<User_a> USER_DATA=new HashSet<User_a>();
public CheckInfo(HashSet<User_a> USER_DATA) {
this.USER_DATA=USER_DATA;
}
// 校验用户信息,返回登录状态信息
public String checkAction(String userName,
String password,String rePassword, String birthday,String phone,String email) {
StringBuilder result=new StringBuilder();
// 1代表成功,2代表失败
int state=1;
// 密码判断
if(!password.equals(rePassword)) {
result.append("两次输入的密码不一致!\r\n");
state=2;
}
// 生日判断
if(birthday.length()!=10) {
result.append("生日格式不正确!\r\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("生日格式不正确!\r\n");
state=2;
}
}else {
if(!(Character.isDigit(thisChar))) {
result.append("生日格式不正确!\\r\\n");
state=2;
}
}
}
}
// 手机号判断
if(phone.length()!=11) {
result.append("手机号码不正确!\r\n");
state=2;
}else if(!(phone.startsWith("13")||phone.startsWith("15")||
phone.startsWith("17")||phone.startsWith("18"))) {
result.append("手机号码不正确!\r\n");
state=2;
}
// 邮箱判断
if(!email.contains("@")) {
result.append("邮箱不正确!\\r\\n");
state=2;
}
// 如果以上信息校验正确,则将新用户加入集合
if(state==1) {
// 格式化日期返回Date对象
DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
Date dateBirthday=null;
try {
dateBirthday=format.parse(birthday);
}catch(java.text.ParseException e) {
e.printStackTrace();
}
User_a newUser=new User_a(userName,rePassword,dateBirthday,phone,email) ;
// 将用户添加到列表中,同时根据HashSet判断用户名有没有重复
if(!USER_DATA.add(newUser)) {
result.append("用户重复使用!");
state=2;
}
if(state==1) {
result.append("用户注册成功!");
}
}
return result.toString();
}
}
package daya4_Original;
import java.util.*;
//用户注册类
public class UserRegister {
public static HashSet<User_a> USER_DATA=new HashSet<User_a>(); //用户数据
public static void main(String[] args) {
initData(); //初始化用户信息
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String userName=sc.nextLine(); //获取用户名
System.out.println("密码:");
String password=sc.nextLine(); //获取密码
System.out.println("重复密码:");
String repassword=sc.nextLine(); //获取重复密码
System.out.println("生日:");
String birthday=sc.nextLine(); //获取生日
System.out.println("电话号码:");
String telNumber=sc.nextLine(); //获取电话号码
System.out.println("电子邮箱:");
String email=sc.nextLine(); //获取电子邮箱
// 验证用户信息,返回登录状态信息
CheckInfo checkInfo=new CheckInfo(USER_DATA);
String result =checkInfo.checkAction(userName, password,
repassword, birthday, telNumber, email);
System.out.println("注册结果:"+result);
}
// 初始化数据,创建两个已存在的用户信息
private static void initData() {
User_a user=new User_a("张正","zz,123",new Date(),
"18810319240","zhangzheng@itcast.cn");
User_a user2=new User_a("周琦","zq,123",new Date(),
"18618121193","zhouqi@itcast.cn");
USER_DATA.add(user);
USER_DATA.add(user2);
}
}