Java基础案例教程 第六章集合类———【任务6-2】模拟新浪微博用户注册 (HashSet集合)

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

一、任务描述:

假设当用户输入用户名、密码、确认密码,生日(输入格式必须为 yyyy-mm-dd)、手机号码(长度为11位,并且以13,15,17或者18开头)、邮箱(包含字符 @)、信息之后,判断信息输入是否正确,

如果正确,验证用户是否重复注册,

      如果不是重复注册则注册成功,

      如果失败则输出"注册结果:用户重复"

        

二、运行结果:

三、实现思路:

1、class User

    用户注册需要实现用户对象,新建User类,

    封装成员变量,

    空参构造方法,含参构造方法

    用户不能重复,使用HashCode集合存储

    重写hashCode() ,equals(),用userName作为判断条件

2、class UserRegister

    用户注册具体实现类,即测试类

    新建 Hash集合,存放User对象

    初始化哈希数组,已有2位用户

    输出注册提示语句,

    新建checkInfo对象,调用checkAction()方法

3、class checkInfo

         class内需要构造方法,被调用的是类内函数

         获取字符串某个指定字符

     char ch=birthday.charAt(i);

        判断某个字符是否是数字

    Character.isDigit(ch)

        判断字符串是否以某个子字符串开头

    phoneNumber.startsWith("13")

   字符窜内是否包含某个指定字符

    email.contains("@")

   String--->Date

    DateFormat format=new SimpleDateFormat("yyyy-mm-dd");//定义日期格式

    //会报错,自动生成try catch
    //Date dateBirthday = format.parse(birthday);


    Date dateBirthday=null;
    try {
        dateBirthday = format.parse(birthday);
    } catch (ParseException e) {
        e.printStackTrace();
    }

 

四、实现代码:

package cn.itcast.task02;

import java.util.Date;

/**
 * @author wangyue
 * @version 1.0
 * @date 2019/6/26 13:52
 * @describe: 用户类,封装用户参数
 */
public class User {
    private String userName;
    private String password;
    private Date birthday;
    private String phoneNumber;
    private String email;

    public User() {
    }

    public User(String userName, String password, Date birthday, String phoneNumber, String email) {
        this.userName = userName;
        this.password = password;
        this.birthday = birthday;
        this.phoneNumber = phoneNumber;
        this.email = email;
    }


    //重写hashCode() 根据用户名判断
    @Override
    public int hashCode() {
        return userName.hashCode();
    }

    // 重写equals() , 判断对象是否重复
    @Override
    public boolean equals(Object o) {
        if (this == o)   //是否为同一个对象
            return true;
        if (o == null || getClass() != o.getClass())  //新对象为空 或者 不是User类型
            return false;
        User user = (User) o;
        return userName.equals(user.userName);
    }
}
package cn.itcast.task02;

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

/**
 * @author wangyue
 * @version 1.0
 * @date 2019/6/26 16:04
 * @describe: 用户注册具体实现类,即测试类
 */
public class UserRegister {
    public static HashSet<User> USER_DATA = new HashSet<User>();  //静态变量用全大写

    public static void main(String[] args) {
        //初始化哈希数组
        initData();

        Scanner sc = new Scanner(System.in);
        System.out.print("请输入用户名:");  //we
        String userName = sc.nextLine();
        System.out.print("请输入密码:");
        String password = sc.nextLine();
        System.out.print("请重复密码:");
        String rePassword = sc.nextLine();
        System.out.print("出生日期:");   //1999-09-08
        String birthday = sc.nextLine();
        System.out.print("手机号码:");  //13515544146
        String phoneNumber = sc.nextLine();
        System.out.print("电子邮箱:");   //123@qq
        String email = sc.nextLine();

        CheckInfo checkInfo = new CheckInfo(USER_DATA);
        String resault = checkInfo.checkAction(userName, password, rePassword, birthday, phoneNumber, email);
        System.out.println(resault);

    }


    private static void initData() {
        User user1 = new User("liming", "li123", new Date(), "13515544146", "[email protected]");
        User user2 = new User("chenyang", "chen123", new Date(), "13515544146", "[email protected]");
        USER_DATA.add(user1);
        USER_DATA.add(user2);
        System.out.println("已初始化,当前用户有:" + USER_DATA.size() + "位");
    }

}
package cn.itcast.task02;

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

/**
 * @author wangyue
 * @version 1.0
 * @date 2019/6/26 16:55
 * @describe: 检验数据
 */
public class CheckInfo {
    //用户数据
    public static HashSet<User> USER_DATA;

    //构造方法
    public CheckInfo(HashSet<User> USER_DATA) {
        this.USER_DATA = USER_DATA;

    }

    //自定义方法,判断某字符串你是否全为数字    override不熟悉???
    public static boolean isDigit(String str) {
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (!Character.isDigit(ch)) {
                return false;
            }
        }
        return true;
    }


    //验证方法,得到注册的结果
    public String checkAction(String userName, String password, String rePassword, String birthday, String phoneNumber, String email) {

        int state = 1;
        StringBuilder resault = new StringBuilder("注册结果:");  //不知道为什么用这个???

        //1、检查 password
        if (!rePassword.equals(password)) {             //比较字符串内容用equals, 比较是否是同一个对象,用“==”
            state = 2;
            resault.append("两次输入密码不一致!\r\n");
        }

        //2、检查 birthday  长度,除了两个“-”,其他都是数字   1999-02-12
        if (birthday.length() == 10) { //检查长度
            for (int i = 0; i < birthday.length(); i++) {
                char ch = birthday.charAt(i);
                if (i == 4 || i == 7) {  //检查连接符
                    if (ch != '-') {
                        state = 2;
                        resault.append("生日格式不正确 \r\n");
                    }
                } else {  //判断全是除了第4位和第7位,是否全是数字
                    if (!Character.isDigit(ch)) {
                        state = 2;
                        resault.append("生日格式不正确  \r\n");
                    }
                }

            }
        } else {//日期字符串长度不为10
            state = 2;
            resault.append("生日格式不正确 \r\n");
        }


        //3、检查 phoneNumber
        if (phoneNumber.length() == 11) { //检查长度
            if (phoneNumber.startsWith("13") || phoneNumber.startsWith("15") || phoneNumber.startsWith("18")) {  //检查开头
                if (!isDigit(phoneNumber)) { //检查是否全为数字
                    state = 2;
                    resault.append("手机号码格式不正确 \r\n");
                }
            } else {
                state = 2;
                resault.append("手机号码格式不正确 \r\n");
            }

        } else {
            state = 2;
            resault.append("手机号码格式不正确 \r\n");
        }


        //4、检查 email
        if (!email.contains("@")) {
            state = 2;
            resault.append("邮箱格式不正确 \r\n");
        }


        //数据没问题,添加进数组
        if (state == 1) {
            //string 转换成 DATE
            DateFormat format = new SimpleDateFormat("yyyy-mm-dd");//定义日期格式
            Date dateBirthday = null;
            try {
                dateBirthday = format.parse(birthday);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            User user = new User(userName, password, dateBirthday, phoneNumber, email);
            if (USER_DATA.add(user)) {
                resault.append("注册成功");
            } else {
                resault.append("用户重复");
            }
        }
        return resault.toString();

    }


}

猜你喜欢

转载自blog.csdn.net/wangpailiulanqi8/article/details/93713509
今日推荐