杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例

案例设计背景介绍:

  编写一个新浪微博用户注册的程序,要求使用HashSet集合实现。 
  假设当用户输入用户名、密码、确认密码、生日(输入格式yyyy-mm-dd为正确)、手机号码(手机长度为11位,并且以13、15、17、或18开头的手机号为正确)、

  邮箱(包含符号“@”为正确)信息之后,判断信息是否输入正确,

  正确校验用户是否重复注册,如果不是重复注册,则注册成功。

案例效果预览图:

  注册成功:

    杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例

  注册失败:

    失败1:

     杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例

    失败2:

    杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例

    失败3:

    杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例

案例设计代码:

  本案例共设计到3个类,用户实体类、用户注册类、用户信息校验类。

  用户注册类:

package cn.javabs.setdemo;

import java.util.HashSet;
import java.util.Scanner;
/**
* Date:2018-05-14
* @author Mryang
*
*
*思路分析:
1.为了便于存储用户信息,需要创建一个用户类,在类中重写其中的HashCode()方法,
其返回用户名的哈希值,再重写equals()方法,来比较对象的用户名属性是否相等。 2.有了用户类之后,再需要1一个用户注册类来模拟注册信息,
该类中可以用HashSet集合来创建一个数据列表,然后向列表中添加两条初始注册信息。 3.从控制台获取用户填写信息,可以通过Scanner类的nextLine()方法来实现,获取后,需要将获取的信息校验。 4.校验信息可以创建一个检验类,在类中实现用户输入的信息的方法。
检验结束后,如果检验结果错误就直接返回错误信息,
这里可以声明一个检验结果变量和一个检验状态变量。
检验结果变量用于存储提示信息,检验状态变量用于存储结果的判断标识。 5.当用户输入的信息不满足格式时,需要修改变量1状态并存储错误信息。 6.判断校验状态,如果所有信息都通过校验,则将用户信息创建成为用户对象,
通过将对象添加到用户列表返回结果来判断用户名是否重复,并记录下返回结果信息。 */
public class UserRegister {
public static HashSet<User> USER_DATE =new HashSet<User>();
public static void main(String[] args) {
initData(); //初始化人员信息
Scanner scanner = new Scanner(System.in);
System.out.print("请输入用户名:");
String userName = scanner.nextLine(); //获取用户名
System.out.print("请输入登录密码:");
String password = scanner.nextLine(); //获取登录密码
System.out.print("请重复密码:");
String rePassword = scanner.nextLine(); // 获取重复密码
System.out.print("出生日期:");
String birthday = scanner.nextLine(); //获取出生日期
System.out.print("请输入手机号:");
String telNumber = scanner.nextLine(); // 获取手机号
System.out.print("请输入邮箱:");
String email = scanner.nextLine(); // 获取邮箱账号
//校验信息,返回登录状态信息
CheckInfo checkInfo = new CheckInfo(USER_DATE);
String result = checkInfo.checkAction(userName,password,rePassword,birthday,telNumber,email);
System.out.println("注册结果:"+result);
}
/**
* 初始化数据
* 已经存在的用户
*/
private static void initData() {
User user1 = new User("小明", "123456", "1998-02-06", "18810319240", "2690582170@qq.com");
User user2 = new User("小王", "654321", "1997-01-01", "15379648332", "1234567890@qq.com");
USER_DATE.add(user1);
USER_DATE.add(user2);
} }

  用户实体类  

package cn.javabs.setdemo;
/**
* 用户类
*/
public class User {
private String userName ; //用户名
private String password ; //密码
private String birthday ; //生日
private String telNumber ; //手机号
private String email ; //邮箱
public User(){
}
public User(String userName, String password, String birthday, String telNumber, String email) {
super();
this.userName = userName;
this.password = password;
this.birthday = birthday;
this.telNumber = telNumber;
this.email = email;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((userName == null) ? 0 : userName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (userName == null) {
if (other.userName != null)
return false;
} else if (!userName.equals(other.userName))
return false;
return true;
}
}

注册用户信息校验类

  

package cn.javabs.setdemo;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet; /**
* @author MrYang
* @version 创建时间:2018年5月14日
*
*/
/**
* 校验信息类
*/
public class CheckInfo {
public static HashSet<User> USER_DATE = new HashSet<User>();
public CheckInfo(HashSet<User> USER_DATE) {
this.USER_DATE = USER_DATE;
}
//校验用户信息返回登录状态
public String checkAction(String userName, String password, String rePassword, String birthday, String telNumber,
String email) {
StringBuilder result = new StringBuilder(); //字符串构造器
// 1 代表成功 ,2 代表失败
int state = 1;
//密码判断
if (!password.equals(rePassword)) {
System.out.println("两次输入的密码不一致! \r\n");
state = 2 ;
}
//生日判断
if (birthday.length() != 10) {
System.out.println("生日格式不正确!\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 (telNumber.length()!=11) {
result.append("手机号码不正确!\r\n");
state =2 ;
//默认有效手机号为13,15,17和18开头的手机号
}else if (!(telNumber.startsWith("13")||telNumber.startsWith("15")||telNumber.startsWith("17")
|| telNumber.startsWith("18"))) {
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);//parse()从给定的字符串开始解析文本,以生成一个日期。
} catch (ParseException e) {
e.printStackTrace();
}
User newUser = new User(userName, password, birthday, telNumber, email);
//将新用户添加到列表中,同时根据HashSet判断出用户名是否重复
if (!USER_DATE.add(newUser)) {
result.append("用户重复!");
state = 2 ;
}
if (state ==1 ) {
result.append("注册成功!");
}
}
return result.toString();//toString()方法: 将指定的数据以字符串形式返回。
}
}

杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例 
作者: 杨校

出处: http://www.cnblogs.com/xiaoxiao5016

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

上一篇:C++转换unicode utf-8 gb2312编码


下一篇:Java学习笔记之:Java流程控制