項目:用戶登錄和注冊(含驗證碼)
第一步:創建一個對應的用戶模型類
用戶的對應模型類:User
屬性:賬號:username
屬性:密碼:password
屬性:聯系方式:phoneNumber
屬性:郵箱:email
1 package cn.aurn.demo02; 2 /* 3 * 用戶模型類 4 */ 5 public class User { 6 //屬性 7 private String username;//賬號 8 private String password;//密碼 9 private String phoneNumber;//手機號 10 private String email;//郵件 11 12 //有參構造方法 13 public User(String username, String password, String phoneNumber, String email) { 14 this.username = username; 15 this.password = password; 16 this.phoneNumber = phoneNumber; 17 this.email = email; 18 } 19 20 //set和get方法 21 public String getUsername() { 22 return username; 23 } 24 25 public void setUsername(String username) { 26 this.username = username; 27 } 28 29 public String getPassword() { 30 return password; 31 } 32 33 public void setPassword(String password) { 34 this.password = password; 35 } 36 37 public String getPhoneNumber() { 38 return phoneNumber; 39 } 40 41 public void setPhoneNumber(String phoneNumber) { 42 this.phoneNumber = phoneNumber; 43 } 44 45 public String getEmail() { 46 return email; 47 } 48 49 public void setEmail(String email) { 50 this.email = email; 51 } 52 53 54 }
第二步:測試類:UserTest
提示用戶選擇操作,登錄之前要判斷存儲用戶信息的集合如果為空,那就提示用戶當前沒有賬戶,需要先注冊。
1 package cn.aurn.demo02; 2 /** 3 * 用戶操作測試類 4 */ 5 import java.util.ArrayList; 6 import java.util.Scanner; 7 8 public class UserTest { 9 10 //用戶輸入對象 11 public static Scanner scanner = new Scanner(System.in); 12 13 //集合存儲用戶信息 14 public static ArrayList<User> users = new ArrayList<User>(); 15 16 //驗證碼工具對象 17 public static CodeUtils codes = new CodeUtils(); 18 19 //主函數 20 public static void main(String[] args) { 21 //用戶提示 22 System.out.println("*****歡迎來到打死你戰隊****** "); 23 24 while(true) { 25 System.out.println("請進行如下操作:1、登錄 2、注冊"); 26 //用戶輸入操作 27 String flag = scanner.nextLine(); 28 //判斷用戶操作 29 if (flag.equals("1")) { 30 //登錄,判斷集合中是否有用戶 31 if (users.isEmpty()) { 32 System.out.println("當前沒有用戶信息,請先注冊!"); 33 }else { 34 login(); 35 } 36 }else if (flag.equals("2")) { 37 regist(); 38 } 39 } 40 }
第三步:驗證碼工具類:CodeUtils
利用隨機數生成6位驗證碼(注冊時用)和4位驗證碼(登錄時用)。
1 package cn.aurn.demo02; 2 3 import java.util.Random; 4 5 /** 6 * 驗證碼生成工具類 7 */ 8 public class CodeUtils { 9 10 //創建一個數組對象 11 private char[] codes = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 12 '0','1','2','3','4','5','6','7','8','9', 13 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 14 15 //創建一個隨機數對象 16 private Random random = new Random(); 17 18 /* 19 * 隨機生成4位驗證碼 20 */ 21 public String getStringCode4() { 22 //空字符串 23 String code = ""; 24 //循環生成4位數驗證碼 25 for(int i = 0; i < 4; i++) { 26 //每循環一次,隨機拿一個驗證碼 27 int index = random.nextInt(codes.length); 28 //每拿到一個,就添加到空的字符串中拼接 29 code += codes[index]; 30 } 31 return code; 32 } 33 34 /* 35 * 隨機生成6位數驗證碼 36 */ 37 public String getStringCode6() { 38 //空字符串 39 String code = ""; 40 //循環生成4位數驗證碼 41 for(int i = 0; i < 6; i++) { 42 //每循環一次,我就隨機拿一個驗證碼 43 int index = random.nextInt(codes.length); 44 //每拿到一個,就添加到空的字符串中拼接 45 code += codes[index]; 46 } 47 return code; 48 } 49 }
第四步:注冊方法:regist()
1、提示用戶,輸入賬號,密碼,確認密碼,注冊手機號,驗證碼。
2、設置兩個開關:賬號是否重復:isFlag(默認是關的false,即賬號不重復);
注冊是否通過:isRegist(默認是開的true,即注冊通過)。
3、先判斷用戶驗證碼輸入的是否正確,不正確就關閉isRegist開關,不進行后面的,提醒用戶重新再來。
4、再判斷用戶輸入的密碼與確認密碼是否一樣,不一樣就關閉isRegist開關,不注冊,提示用戶重新再來。
5、for循環存儲用戶信息的集合,判斷用戶輸入的賬號是否已經存在在集合中,如果存在打開isFlag開關,關閉isRegist開關,提示用戶當前賬號已存在,重新輸入,
跳出循環; 如果不存在,就直接注冊,將用戶輸入的信息存儲在集合中。
1 /* 2 * 注冊方法 3 */ 4 private static void regist() { 5 //提示用戶 6 //賬號 7 System.out.println("請輸入您要注冊的賬號:"); 8 String username = scanner.nextLine(); 9 10 //密碼 11 System.out.println("請輸入您要注冊的密碼:"); 12 String password = scanner.nextLine(); 13 14 //確認密碼 15 System.out.println("請輸入您要注冊的確認密碼:"); 16 String repassword = scanner.nextLine(); 17 18 //手機號 19 System.out.println("請輸入您要注冊的手機號:"); 20 String phoneNumber = scanner.nextLine(); 21 22 //郵箱 23 System.out.println("請輸入您要注冊的郵箱:"); 24 String email = scanner.nextLine(); 25 26 //生成6位驗證碼 27 String code = codes.getStringCode6(); 28 System.out.println("請輸入驗證碼信息(區分大小寫):"+code); 29 String code1 = scanner.nextLine(); 30 31 //賬戶是否重復開關 32 boolean isFlag = false;//默認是關閉的,即賬號不重復 33 34 //是否通過注冊開關 35 boolean isRegist = true;//默認是打開的,即通過注冊 36 37 //判斷 38 if (code1.equals(code)) { 39 //驗證碼正確 40 if (password.equals(repassword)) { 41 //密碼與確認密碼正確 42 //循環遍歷賬戶信息存儲集合 43 for (User user : users) { 44 //判斷是否已經注冊過了 45 if (user.getUsername().equals(username)) { 46 //用戶輸入賬號已注冊存在 47 //打開重復開關 48 isFlag = true; 49 //關閉注冊 50 isRegist = false; 51 //跳出循環 52 break; 53 } 54 } 55 }else { 56 System.out.println("確認密碼與密碼不一致,請重新操作!"); 57 //關閉注冊按鈕 58 isRegist = false; 59 } 60 }else { 61 System.out.println("驗證碼輸入錯誤,請重新操作!"); 62 //關閉注冊按鈕 63 isRegist = false; 64 } 65 //賬號已注冊存在 66 if (isFlag) { 67 System.out.println("很遺憾,您輸入的賬號已注冊過,請重新輸入!"); 68 }else { 69 //賬號不存在,注冊 70 if (isRegist) { 71 User user = new User(username, repassword, phoneNumber, email); 72 //添加信息進集合 73 users.add(user); 74 //提示用戶 75 System.out.println("恭喜您,注冊成功!"); 76 } 77 } 78 }
第五步:登錄方法:login()
1、提示用戶,輸入賬號,密碼,驗證碼。
2、設置一個開關:是否登錄成功:isLogin(默認是關閉的false)。
3、先判斷用戶輸入的驗證碼是否正確,如果不正確,提示用戶驗證碼輸入錯誤,請重新操作。
4、for循環遍歷用戶信息集合,然后判斷用戶輸入的賬號和密碼與集合中的賬號與密碼是否一樣,如果一樣,打開IsLogin開關,提示用戶登錄成功,退出循環;
否則,提示用戶的賬號或密碼輸入錯誤,請重新操作。
1 /* 2 * 登錄方法 3 */ 4 private static void login() { 5 //提示用戶 6 // 賬號 7 System.out.println("請輸入登錄的賬號:"); 8 String username = scanner.nextLine(); 9 10 // 密碼 11 System.out.println("請輸入登錄的密碼:"); 12 String password = scanner.nextLine(); 13 14 // 生成4位驗證碼 15 String code = codes.getStringCode4(); 16 System.out.println("請輸入驗證碼信息(區分大小寫):" + code); 17 String code1 = scanner.nextLine(); 18 19 //設置登錄成功開關 20 boolean isLogin = false;//默認關閉的,即登陸失敗 21 22 //判斷驗證碼 23 if (code1.equals(code)) { 24 //驗證碼正確 25 //遍歷集合 26 for (User user : users) { 27 //判斷輸入的賬號與密碼與注冊的信息進行匹配 28 if (user.getUsername().equals(username) && user.getPassword().equals(password)) { 29 //登錄成功 30 isLogin = true; 31 System.out.println("登陸成功!"); 32 //退出循環 33 break; 34 } 35 } 36 //賬戶密碼輸入錯誤 37 if (!isLogin) { 38 System.out.println("賬號或密碼輸入錯誤,請重新登錄"); 39 } 40 }else { 41 System.out.println("驗證碼輸入錯誤,請重新操作!"); 42 } 43 }