要求
user类
public class User {
private String UserName;
private String PassWord;
private String Id;
private String PhoneNumber;
public User() {
}
public User(String userName, String passWord, String id, String phoneNumber) {
this.UserName = userName;
this.PassWord = passWord;
this.Id = id;
this.PhoneNumber = phoneNumber;
}
public String getUserName() {
return UserName;
}
public void setUserName(String userName) {
UserName = userName;
}
public String getPassWord() {
return PassWord;
}
public void setPassWord(String passWord) {
this.PassWord = passWord;
}
public String getId() {
return Id;
}
public void setId(String id) {
this.Id = id;
}
public String getPhoneNumber() {
return PhoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.PhoneNumber = phoneNumber;
}
}
代码块
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("---------欢迎来到学生管理系统---------");
System.out.println("请选择操作:");
System.out.println("1.登录");
System.out.println("2.注册");
System.out.println("3.忘记密码");
System.out.println("4.退出系统");
String choose = sc.next();
switch (choose) {
case "1" -> login(list);
case "2" -> register(list);
case "3" -> forgetPassword(list);
case "4" -> {
System.out.println("已退出");
System.exit(0);
}
default -> System.out.println("没有这个选项,请重新选择");
}
}
}
private static void forgetPassword(ArrayList<User> list) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名");
String userName= sc.next();
boolean flag=contains(list,userName);
if(!flag){System.out.println("用户名"+userName+"不存在,请先注册");return;}
System.out.println("请输入身份证号码");
String personId=sc.next();
System.out.println("请输入手机号码");
String phoneNumber=sc.next();
int index=findIndex(list,userName);
User user=list.get(index);
if(!(user.getId().equalsIgnoreCase(personId)&&user.getPhoneNumber().equals(phoneNumber))) {
System.out.println("身份证号码或手机号码输入有误,不能修改密码");return;}
System.out.println("信息校验成功");
String passWord;
while (true) {
System.out.println("请输入新的密码");
passWord= sc.next();
System.out.println("请再次输入新的密码");
String againPassWord=sc.next();
if(passWord.equals(againPassWord)){System.out.println("更改成功");break;}
else {System.out.println("两次密码输入不一致,请重新输入");continue;}
}
user.setPassWord(passWord);
System.out.println("密码修改成功");
}
private static int findIndex(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;
}
private static void login(ArrayList<User> list) {
Scanner sc=new Scanner(System.in);
for (int i = 0; i<3; i++) {
System.out.println("请输入用户名");
String userName=sc.next();
boolean flag=contains(list,userName);
if(!flag){System.out.println("用户名"+userName+"未注册,请先注册再登录");return;}
System.out.println("请输入密码");
String passWord=sc.next();
while (true) {
String rightCode=getCode();
System.out.println("您的验证码为"+rightCode);
System.out.println("请输入验证码");
String code=sc.next();
if(code.equalsIgnoreCase(rightCode)){System.out.println("验证码正确");break;}
else {System.out.println("验证码错误");continue;}
}
User userInfo=new User(userName,passWord,null,null);//封装
boolean result=checkUserInfo(list,userInfo);
if(result){
System.out.println("登录成功,可以开始使用学生管理系统");
StudentSystem ss=new StudentSystem();
ss.startStudentSystem();
break;}
else {System.out.println("登陆失败,用户名或密码错误");
if(i==2){System.out.println("错误次数太多,当前账户已锁定");return;}else{System.out.println("还剩下"+(2-i)+"次机会");}}
}
}
private static boolean checkUserInfo(ArrayList<User> list, User userInfo) {
for (int i = 0; i < list.size(); i++) {
User user=list.get(i);
if(user.getUserName().equals(userInfo.getUserName())&&user.getPassWord().equals(userInfo.getPassWord())){
return true;
}
}return false;
}
private static void register(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
String username;
while (true) {
System.out.println("请输入用户名");
username = sc.next();
boolean flag = checkName(username);
if (!flag) {
System.out.println("用户名格式不满足条件,需要重新输入");
continue;
}
boolean flag1 = contains(list, username);
if (flag1) {
System.out.println("用户名" + username + "已存在,请重新输入");
} else {
System.out.println("用户名可用,请继续录入");
break;
}
}
String passWord;
while (true) {
System.out.println("请输入要注册的密码");
passWord = sc.next();
System.out.println("请再次输入要注册的密码");
String passWord2 = sc.next();
if (!passWord.equals(passWord2)) {
System.out.println("两次输入的密码不一致,请重新输入");
continue;
} else {
System.out.println("两次密码一致,请继续录入其他数据");
break;
}
}
String id;
while (true) {
System.out.println("请输入您的身份证号码");
id = sc.next();
boolean flag2 = checkId(id);
if (flag2) {
System.out.println("输入的身份证号满足要求");
break;
} else {
System.out.println("身份证号格式有误,请重新输入");
continue;
}
}
String phoneNumber;
while (true) {
System.out.println("请输入手机号码");
phoneNumber = sc.next();
boolean flag3 = checkPhoneNumber(phoneNumber);
if (flag3) {
System.out.println("手机号码正确");
break;
} else {
System.out.println("手机号码有误,请重新输入");
continue;
}
}
User u = new User(username, passWord, id, phoneNumber);
list.add(u);
System.out.println("注册成功");
}
private static boolean checkPhoneNumber(String phoneNumber) {
if (phoneNumber.length() != 11) {
return false;
}
if (phoneNumber.startsWith("0")) {
return false;
}
for (int i = 0; i < phoneNumber.length(); i++) {
char n = phoneNumber.charAt(i);
if (!((n >= '0') && (n <= '9'))) {
return false;
}
}
return true;
}
private static boolean checkId(String id) {
if (id.length() != 18) {
return false;
}
if (id.startsWith("0")) {
return false;
}
for (int i = 0; i < id.length() - 1; i++) {
char c = id.charAt(i);
if (!(c >= '0' && c <= '9')) {
return false;
}
}
char endChar = id.charAt(id.length() - 1);
if ((endChar >= '0' && endChar <= '9') || (endChar == 'x') || (endChar == 'X')) {
return true;
} else {
return false;
}
}
private static boolean contains(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String rightUserName = user.getUserName();
if (rightUserName.equals(username)) {
return true;
}
}
return false;
}
private static boolean checkName(String username) {
int len = username.length();
if (len > 15 || len < 3) {
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;
}
private static String getCode(){
ArrayList<Character> list=new ArrayList();
for (int i = 0; i < 26; i++) {
list.add((char)('a'+i));
list.add((char)('A'+i));
}
StringBuilder sb=new StringBuilder();
Random r=new Random();
for (int i = 0; i < 4; i++) {
int index=r.nextInt(list.size());
char c=list.get(index);
sb.append(c);
}
int number=r.nextInt(10);
sb.append(number);
char[] arr=sb.toString().toCharArray();
int randomIndex=r.nextInt(arr.length);
char temp=arr[randomIndex];
arr[randomIndex]=arr[arr.length-1];
arr[arr.length-1]=temp;
return new String(arr);
}
}