楊老師課堂_Java核心技術下之控制台模擬微博用戶注冊案例


 案例設計背景介紹:

  編寫一個新浪微博用戶注冊的程序,要求使用HashSet集合實現。 
  假設當用戶輸入用戶名、密碼、確認密碼、生日(輸入格式yyyy-mm-dd為正確)、手機號碼(手機長度為11位,並且以13、15、17、或18開頭的手機號為正確)、

  郵箱(包含符號“@”為正確)信息之后,判斷信息是否輸入正確,

  正確校驗用戶是否重復注冊,如果不是重復注冊,則注冊成功。

案例效果預覽圖:

  注冊成功:

    

  注冊失敗:

    失敗1:

     

    失敗2:

    

     失敗3:

    

 

 

案例設計代碼:

  本案例共設計到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()方法:  將指定的數據以字符串形式返回。
    }
}

 

 

分割線 
作者: 楊校

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

分享是快樂的,也見證了個人成長歷程,文章大多都是工作經驗總結以及平時學習積累,基於自身認知不足之處在所難免,也請大家指正,共同進步。

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出, 如有問題, 可郵件(397583050@qq.com)咨詢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM