學生管理系統升級版
- 需求
- 分析:
- 注冊功能:
- 登錄功能:
- 驗證碼規則:
- 忘記密碼:
- 實操:
- 系統主頁面
- 注冊功能
- 登錄功能
- 忘記密碼
- 效果演示
需求
? ? 為學生管理系統書寫一個登陸、注冊、忘記密碼的功能。
? ? 只有用戶登錄成功之后,才能進入到學生管理系統中進行增刪改查操作。
分析:
注冊功能:
1,用戶名需要滿足以下要求:
? ?用戶名唯一
? ?用戶名長度必須在3~15位之間
? ?只能是字母加數字的組合,但是不能是純數字
2,密碼鍵盤輸入兩次,兩次一致才可以進行注冊
3,身份證號碼需要驗證
? ?長度為18位
? ?不能以0為開頭
? ?前17位,必須都是數字
? ?最為一位可以是數字,也可以是大寫X或小寫x
4,手機號驗證
? ?長度為11位
? ?不能以0為開頭
? ?必須都是數字
登錄功能:
1,鍵盤錄入用戶名
? ?用戶名如果未注冊,直接結束方法,并提示:用戶名未注冊,請先注冊。
2,鍵盤錄入密碼
3,鍵盤錄入驗證碼
? ?判斷驗證碼是否正確,如不正確,重新輸入
? ?再判斷用戶名和密碼是否正確,有3次機會
驗證碼規則:
? ?長度為5
? ?由4位大寫或者小寫字母和1位數字組成,同一個字母可重復
? ?數字可以出現在任意位置
? ?比如:aB1sa
忘記密碼:
? ?1,鍵盤錄入用戶名,判斷當前用戶名是否存在,如不存在,直接結束方法,并提示:未注冊
? ?2,鍵盤錄入身份證號碼和手機號碼
? ?3,判斷當前用戶的身份證號碼和手機號碼是否一致,
? ? ?如果一致,則提示輸入密碼,進行修改。
? ? ?如果不一致,則提示:賬號信息不匹配,修改失敗。
實操:
系統主頁面
歡迎來到用戶管理系統
1:注冊 2:登錄 3:忘記密碼 4:退出
請選擇操作:
通過while循環和switch語句實現
public static void main(String[] args) {ArrayList<User> list = new ArrayList<>();loop:while (true) {Scanner sc = new Scanner(System.in);System.out.println("歡迎來到用戶管理系統");System.out.println("1:注冊 2:登錄 3:忘記密碼 4:退出");System.out.println("請選擇操作:");String choice = sc.nextLine();switch (choice) {case "1"->register(list);case "2"->login(list);case "3"->forget(list);case "4"->{System.out.println("退出");break loop;}default->{System.out.println("輸入錯誤");}}}}
注冊功能
??這里需要調用自定義contains方法判斷需要注冊的用戶是否存在,在對錄入的username,password,personId,phone,進行根據需求,定義不同的檢驗方法,最后再將,用戶user添加入集合list。
//注冊public static void register(ArrayList<User> list) {Scanner scanner = new Scanner(System.in);User user = new User();//用戶名while (true) {System.out.println("請輸入用戶名:");String username = scanner.nextLine();boolean flag = contains(list, username);int length = username.length();if (flag) {System.out.println("用戶名已存在,請從新輸入用戶名");} else {if (checkUsername(username)) {user.setUsername(username);break;} else {System.out.println("用戶名不正確,請重新輸入");}}}//密碼while (true) {System.out.println("請輸入密碼:");String password1 = scanner.nextLine();System.out.println("請再次輸入密碼:");String password2 = scanner.nextLine();if (password1.equals(password2)) {user.setPassword(password1);break;} else {System.out.println("兩次密碼不一致,請重新輸入");}}//身份證號while (true) {System.out.println("請輸入身份證號:");String personId = scanner.nextLine();int length = personId.length();if (checkPersonId(personId)) {user.setPersonId(personId);break;} else {System.out.println("身份證號有誤,請重新輸入");}}//手機號while (true) {System.out.println("請輸入手機號:");String phone = scanner.nextLine();boolean flag = checkPhone(phone);if (flag) {user.setPhone(phone);break;} else System.out.println("手機號長度有誤,請重新輸入");}list.add(user);System.out.println("注冊成功");}
??判斷用戶名是否存在
??contains方法
//用戶名是否存在public static boolean contains(ArrayList<User> list, String username) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);if (user.getUsername().equals(username)) {return true;}}return false;}
??檢驗用戶名是否符合標準
//判斷用戶名是否正確public static boolean checkUsername(String username) {int length = username.length();if (length < 3 || length > 15) {return false;}for (int i = 0; i < username.length(); i++) {char c = username.charAt(i);if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))) {return false;}}int count = 0;for (int i = 0; i < username.length(); i++) {char c = username.charAt(i);if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {count++;break;}}return count > 0;}
??檢驗身份證號是否符合標準
//判斷身份證號是否正確public static boolean checkPersonId(String personId) {if ((personId.length() != 18)) {return false;hao}for (int i = 0; i < personId.length() - 1; i++) {char c = personId.charAt(i);if (!(c >= '0' && c <= '9')) {return false;}}if (personId.startsWith("0")) {return false;}char end = personId.charAt(personId.length() - 1);if ((end >= '0' && end <= '9') || (end == 'x') || (end == 'X')) {return true;} else {return false;}}
??檢驗手機號是否符合標準
//判斷手機號是否正確public static boolean checkPhone(String phone) {if (phone.length() != 11) {return false;}if (phone.startsWith("0")) {return false;}for (int i = 0; i < phone.length(); i++) {char c = phone.charAt(i);if (!(c >= '0' && c <= '9')) {return false;}}return true;}
??🆗,用戶注冊模塊,這就已經完成了。
登錄功能
??這里的登陸成功后調用 StudentTest1()進入學生管理系統。
??記得把之前的學生管理系統封裝為方法后在調用。
??鏈接: 學生管理系統
// 登錄public static void login(ArrayList<User> list) {loop:while (true) {int count = 0;Scanner sc = new Scanner(System.in);System.out.println("請輸入用戶名:");String username = sc.nextLine();System.out.println("請輸入密碼:");String password = sc.nextLine();while (true) {String s = yzmcreate();System.out.println("驗證碼為:" + s);System.out.println("請輸入驗證碼:");String yzm = sc.nextLine();if (s.equalsIgnoreCase(yzm)) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);if (username.equalsIgnoreCase(user.getUsername()) && password.equals(user.getPassword())) {System.out.println("登錄成功");StudentTest1();break loop;} else {System.out.println("用戶名或密碼錯誤,請重新輸入,你還剩" + (2 - count) + "次機會");count++;}if (count == 2) {System.out.println("登錄失敗,請聯系管理員");break loop;}}} else System.out.println("驗證碼錯誤,請重新輸入");}}}
??驗證碼生成
// 驗證碼public static String yzmcreate() {ArrayList<Character> yzm = new ArrayList<>();for (int i = 0; i < 26; i++) {yzm.add((char) ('a' + i));yzm.add((char) ('A' + i));}char[] yzm1 = new char[10];for (int i = 0; i < yzm1.length; i++) {yzm1[i] = (char) (i + '0');}StringBuilder sb = new StringBuilder();Random r = new Random();for (int i = 0; i < 4; i++) {int index = r.nextInt(yzm.size());sb.append(yzm.get(index));}sb.append(yzm1[r.nextInt(10)]);char[] chars = sb.toString().toCharArray();int index = r.nextInt(chars.length);char temp = chars[chars.length - 1];chars[chars.length - 1] = chars[index];chars[index] = temp;return new String(chars);}
??🆗,登錄功能模塊,這就已經完成了。
忘記密碼
??利用用戶名得到用戶名所在集合的索引來進行操作
// 忘記密碼public static void forget(ArrayList<User> list) {while (true) {Scanner sc = new Scanner(System.in);System.out.println("請輸入用戶名:");String xusername = sc.nextLine();if (contains(list, xusername)) {System.out.println("請輸入注冊手機號:");String xphone = sc.nextLine();System.out.println("請輸入注冊身份證號:");String xpersonId = sc.nextLine();User xuser = new User(xusername, "", xpersonId, xphone);if (checkUser(list, xuser)) {System.out.println("請輸入新密碼:");String xpassword = sc.nextLine();int count = index(list,xusername);list.get(count).setPassword(xpassword);System.out.println("修改成功");return;} else System.out.println("輸入信息與注冊不相符,請重新輸入");} else System.out.println("用戶名不存在,請重新輸入");}}
??檢驗注冊時的,手機號與身份證號是否正確
//判斷信息是否正確public static boolean checkUser(ArrayList<User> list, User user) {for (int i = 0; i < list.size(); i++) {User u = list.get(i);if (u.getPhone().equals(user.getPhone()) && u.getPersonId().equals(user.getPersonId())) {return true;}}return false;}
??根據用戶名返回索引
//查找用戶索引public static int index(ArrayList<User> list, String username) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);if (user.getUsername().equals(username)) {return i;}}return -1;}
??🆗, 忘記密碼模塊,這就已經完成了。
效果演示
歡迎來到用戶管理系統
1:注冊 2:登錄 3:忘記密碼 4:退出
請選擇操作:
1
請輸入用戶名:
zjj123
請輸入密碼:
123456
請再次輸入密碼:
123456
請輸入身份證號:
123456789012345678
請輸入手機號:
12345678900
注冊成功
歡迎來到用戶管理系統
1:注冊 2:登錄 3:忘記密碼 4:退出
請選擇操作:
2
請輸入用戶名:
zjj123
請輸入密碼:
123456
驗證碼為:uc3La
請輸入驗證碼:
uc3la
登錄成功
——————————————歡迎使用學生管理系統——————————————
1:添加學生
2:刪除學生
3:修改學生
4:查詢學生
5:退出系統
請輸入您的選擇:
5
退出系統
歡迎來到用戶管理系統
1:注冊 2:登錄 3:忘記密碼 4:退出
請選擇操作:
3
請輸入用戶名:
zjj123
請輸入注冊手機號:
12345678900
請輸入注冊身份證號:
123456789012345678
請輸入新密碼:
z123456
修改成功
歡迎來到用戶管理系統
1:注冊 2:登錄 3:忘記密碼 4:退出
請選擇操作:
2
請輸入用戶名:
zjj123
請輸入密碼:
z123456
驗證碼為:x1TUL
請輸入驗證碼:
x1tul
登錄成功
——————————————歡迎使用學生管理系統——————————————
1:添加學生
2:刪除學生
3:修改學生
4:查詢學生
5:退出系統
請輸入您的選擇:
5
退出系統
歡迎來到用戶管理系統
1:注冊 2:登錄 3:忘記密碼 4:退出
請選擇操作:
4
退出Process finished with exit code 0