简单的用户注册和登录系统和忘记密码

文章详细描述了一个基于Java编写的简单用户管理系统,包括注册、登录功能,以及密码找回过程,通过验证用户输入并存储信息在集合中。
摘要由CSDN通过智能技术生成

 下面是一段简单的用户注册和登录系统以及忘记密码的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 + "}";
    }
}

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值