案例設計背景介紹:
編寫一個新浪微博用戶注冊的程序,要求使用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)咨詢。