需求
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
分析:
注册功能:
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