下面是一段简单的用户注册和登录系统以及忘记密码的java代码,设用于课程设计等一系列应用场所,仅供娱乐学习使用,无其他用途。
如有不足之处请批评指正。
这段代码实现了一个简单的用户注册和登录系统,通过一系列的方法来验证输入的格式和正确性,并将用户信息存储在集合中。
package endday;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class studenttestpro {
public static void main(String[] args) {
ArrayList<studentpro> list = new ArrayList<>();
while (true) {
System.out.println("欢迎来到学生管理系");
System.out.println("请输入您的选择 1:登录 2:注册 3: 忘记密码 4: 退出");
//输入选择
Scanner sc = new Scanner(System.in);
int choose = sc.nextInt();
switch (choose) {
case 1 -> denglu(list);
case 2 -> zhuce(list);
case 3 -> forgetPassword(list);
case 4 -> {
System.out.println("感谢您的使用,拜拜!!!");
System.exit(0);
}
default -> System.out.println("您输入的选项有误,请重新输入:");
}
}
}
//创建注册方法
public static void zhuce(ArrayList<studentpro> list) {
//创造stu对象利用空参构造调用set方法存放用户名,密码,身份证号,手机号
studentpro stu = new studentpro();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入用户名:");
String userName = sc.next();
//对用户名进行规则判断
boolean flag1 = checkUsername(userName);
if (flag1) {
//继续判断用户名是否唯一
boolean flag2 = alone(userName, list);
if (flag2) {
System.out.println(userName + "可用请继续操作");
stu.setUserName(userName);
break;
} else {
System.out.println("您输入的用户" + userName + "名不唯一请重新输入");
continue;
}
} else {
System.out.println("您输入的用户名有误,请重新输入");
continue;
}
}
//对注册时密码进行判断,两次输入一样的密码才可以进行注册
while (true) {
System.out.println("请输入您的密码:");
String password1 = sc.next();
System.out.println("请确认您的密码:");
String password2 = sc.next();
boolean flag3 = determinePassword(password1, password2);
if (flag3) {
System.out.println("您输入的密码正确,请继续操作");
stu.setPassWord(password1);
break;
} else {
System.out.println("您两次输入的密码不一致请重新输入");
continue;
}
}
//对输入的身份证格式进行判断
while (true) {
System.out.println("请输入您的身份证号码");
String userId = sc.next();
boolean flag4 = determineUserid(userId);
if (flag4) {
System.out.println("您输入的身份证号正确,请继续操作");
stu.setUserId(userId);
break;
} else {
System.out.println("您输入的身份证号格式错误,请重新输入");
continue;
}
}
//对输入的手机号格式进行判断
while (true) {
System.out.println("请输入您的手机号");
String userPhone = sc.next();
boolean flag5 = determineUserphone(userPhone);
if (flag5) {
System.out.println("您输入的手机号码正确,请继续");
stu.setUserPhone(userPhone);
break;
} else {
System.out.println("您输入的手机号码格式错误,请从新输入");
continue;
}
}
//将stu用户对象添加到集合中
list.add(stu);
System.out.println("恭喜您注册成功" + stu);
}
//判断手机号格式是否正确
public static boolean determineUserphone(String userPhone) {
//手机号长度为11
if (userPhone.length() != 11)
return false;
//手机号不能以0开头
if (userPhone.charAt(0) == 0)
return false;
//手机号必须都为数字
for (int i = 0; i < userPhone.length(); i++) {
char c = userPhone.charAt(i);
if (c >= '0' && c <= '9')
return true;
}
return false;
}
//判断身份证号是否一样
public static boolean determineUserid(String userid) {
//身份证号长度必须为18
if (userid.length() != 18)
return false;
//身份证首位不能是0
if (userid.charAt(0) == '0')
return false;
//身份证前17位必须是数字
for (int i = 0; i < userid.length() - 1; i++) {
if (!(userid.charAt(i) >= '0' && userid.charAt(i) <= '9'))
return false;
}
//身份证最后一位是数字或者x或者X
if (userid.charAt(17) == 'x' || userid.charAt(17) == 'X' || (userid.charAt(17) >= '0' && userid.charAt(17) <= '9'))
return true;
else
return false;
}
//判断输入密码是否一样
public static boolean determinePassword(String password1, String password2) {
if (password2.equals(password1))
return true;
else
return false;
}
//判断用户名格式是否正确
public static boolean checkUsername(String username) {
//1.用户名长度在3-15之间
if (username.length() < 3 || username.length() > 15)
return false;
//2.用户名只能是数字加字母
for (int i = 0; i < username.length(); i++) {
if (!((username.charAt(i) >= '0' && username.charAt(i) <= '9')
|| (username.charAt(i) >= 'a' && username.charAt(i) <= 'z') ||
(username.charAt(i) >= 'A' && username.charAt(i) <= 'Z')))
return false;
}
//3.用户名不能只是数字
int count = 0;
for (int i = 0; i < username.length(); i++) {
if ((username.charAt(i) >= 'a' && username.charAt(i) <= 'z') ||
(username.charAt(i) >= 'A' && username.charAt(i) <= 'Z'))
count++;
}
if (count == 0)
return false;
else
return true;
}
//判断用户名是否唯一
public static boolean alone(String username, ArrayList<studentpro> list) {
//判断username和集合中的username有无重复
for (int i = 0; i < list.size(); i++) {
if (username.equals(list.get(i).getUserName()))
return false;
}
return true;
}
//创建登录方法
public static void denglu(ArrayList<studentpro> list) {
Scanner sc = new Scanner(System.in);
//记录错误次数是否为3次
int count = 0;
while (true) {
System.out.println("请输入您的用户名");
String useName = sc.next();
System.out.println("请输入您的密码");
String passWord = sc.next();
System.out.println("请输入您的身份证");
String userId = sc.next();
System.out.println("请输入您的手机号");
String userPhone = sc.next();
//判断键盘录入的信息和集合中的信息是否存在一致
boolean flag6 = determineInformation(useName, passWord, userId, userPhone, list);
if (flag6) {
//输入的信息正确继续输入验证码
System.out.println("请输入验证码");
String code1 = getCode();
System.out.println("验证码为" + code1);
String code = sc.next();
//判断两此输入的验证码是否相同
boolean flag7 = compareCode(code, code1);
if (flag7) {
//判断用户名和密码是否正确,一共有三次输入机会
boolean flag8 = determineInformation(useName, passWord, userId, userPhone, list);
if (flag8) {
System.out.println("登录成功");
break;
} else {
System.out.println("您输入的信息有误,登录失败,您还有" + (count - 1) + "次机会");
count++;
if (count == 3) {
System.out.println("您的3此机会已用完,账户锁定");
break;
}
}
} else {
System.out.println("您输入的验证码有误,请重新输入");
continue;
}
} else {
System.out.println("您还未注册,请重新输入");
continue;
}
}
}
//判断两此输入的验证码是否相同
public static boolean compareCode(String code, String code1) {
if (code.equals(code1))
return true;
else
return false;
}
//产生一个验证码
public static String getCode() {
//利用集合产生一个验证码
ArrayList<Character> list = new ArrayList<>();
//在集合中存储26个小写字母
for (int i = 0; i < 26; i++) {
list.add((char) ('a' + i));
}
//在集合中存储26个大写字母
for (int i = 0; i < 26; i++) {
list.add((char) ('A' + i));
}
//生成一个随机数0-9
Random sc = new Random();
int number = sc.nextInt(10);
//将集合变为数组,把生成的随机数放入数组之中
Object[] arr = list.toArray();
//将数组整合为字符串,方便将随机数放如字符串的任何一个位置之中
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
//生成一个随机.范围在0-52
int number2 = sc.nextInt(52);
//将数组存入sb类中
sb.append(arr[number2]);
}
//利用截取字符串方法把随机数放进去字符串
//生成一个随机数用来截取sb类中的字符串
int number1 = sc.nextInt(5);
String start = sb.substring(0, number1);
String end = sb.substring(number1);
String result = start + number + end;
return result;
}
//判断用户输入信息是否正确
public static boolean determineInformation(String useName, String passWord, String userId, String userPhone, ArrayList<studentpro> list) {
for (int i = 0; i < list.size(); i++) {
if (useName.equals(list.get(i).getUserName()) &&
passWord.equals(list.get(i).getPassWord())
&& userId.equals(list.get(i).getUserId()) &&
userPhone.equals(list.get(i).getUserPhone()))
return true;
}
return false;
}
//创建忘记密码方法
public static void forgetPassword(ArrayList<studentpro> list) {
//键盘输入用户名判断是否存在
System.out.println("请输入您的账号");
Scanner sc = new Scanner(System.in);
String userName = sc.next();
//调用alone判断用户名是否存在
boolean flag = alone(userName, list);
if (!flag) {
//存在录入身份证号码和手机号码
System.out.println("请输入您的身份证号");
String userId = sc.next();
System.out.println("请输入您的手机号码");
String userPhone = sc.next();
//判断键盘录入的身份证号码和手机号码是否正确
int flag2= determineexist(userId,userPhone,list);
if(flag2==-1){
System.out.println("您输入的信息有误,修改失败");
}
else {
System.out.println("您输入的信息正确,请修改密码");
String userPassword = sc.next();
list.get(flag2).setPassWord(userPassword);
System.out.println("密码修改成功");
}
} else {
System.out.println("您输入的用户名不存在");
}
}
//判断身份证号码和手机号码是否存在
public static int determineexist(String userId, String userPhone, ArrayList<studentpro> list) {
for (int i = 0; i < list.size(); i++) {
if (userId.equalsIgnoreCase(list.get(i).getUserId()))
if (userPhone.equals(list.get(i).getUserPhone()))
return i;
}
return -1;
}
}
package endday;
public class studentpro {
private String userName;
private String passWord;
private String userId;
private String userPhone;
public studentpro(){}
public studentpro(String userName,String passWord, String userId,String userPhone ){
this.userName =userName;
this.passWord =passWord;
this.userId= userId;
this.userPhone= userPhone;
}
/**
* 获取
* @return userName
*/
public String getUserName() {
return userName;
}
/**
* 设置
* @param userName
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* 获取
* @return passWord
*/
public String getPassWord() {
return passWord;
}
/**
* 设置
* @param passWord
*/
public void setPassWord(String passWord) {
this.passWord = passWord;
}
/**
* 获取
* @return userId
*/
public String getUserId() {
return userId;
}
/**
* 设置
* @param userId
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取
* @return userPhone
*/
public String getUserPhone() {
return userPhone;
}
/**
* 设置
* @param userPhone
*/
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
public String toString() {
return "姓名 = " + userName + ", 密码 = " + passWord + ", 身份证号 = " + userId + ", 手机号 = " + userPhone + "}";
}
}