学生管理系统的登录,注册,忘记密码页面

学生管理系统的登录,注册,以及忘记密码页面

这是一个众人皆知的一个代码了,在这里不太提页面要求了,有关注意的我都会写在注释哪里.欢迎大家多多讨论

用户类

首先我们先定一个一个用户类,用来乘放用户名,密码,身份证号以及电话号码,代码如下

public class User {
    private String UserName;
    private String Password;
    private String PersonID;
    private String PhoneNumber;

    public User() {
    }

    public User(String userName, String password, String personID, String phoneNumber) {
        UserName = userName;
        Password = password;
        PersonID = personID;
        PhoneNumber = phoneNumber;
    }

    public String getUserName() {
        return UserName;
    }

    public void setUserName(String userName) {
        UserName = userName;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }

    public String getPersonID() {
        return PersonID;
    }

    public void setPersonID(String personID) {
        PersonID = personID;
    }

    public String getPhoneNumber() {
        return PhoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        PhoneNumber = phoneNumber;
    }

这样我们就定义了一个用户类,我们后面就会不断地去调用这个用户类

主页面

用户类我们定义完成之后,后面就是我们的主页面了

public class Login {
    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("请选择操作:1,登录 2,注册 3,忘记密码");
            String Choice = sc.nextLine();
            switch (Choice) {
                case "1"-> LoGin(list);
                case "2"-> Makeit(list);
                case "3"-> Changepassword(list);
                case "4"-> {
                    System.out.println("退出");
                    System.exit(0);
                }
                default -> System.out.println("您输入的内容有误,请重新输入,选择范围在1-4之间");
            }
        }
    }
    //修改密码
    private static void Changepassword(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        String username;
        System.out.println("请输入用户名");
        username = sc.nextLine();
        //判断用户名是否存在
        boolean flag = contains(list,username);
        if (!flag) {
            System.out.println("用户名不存在,请在注册后重新尝试");
            return;
        }

        //录入身份证号和手机号
        System.out.println("请输入身份证号");
        String personID = sc.nextLine();
        System.out.println("请输入手机号码");
        String phonenumber = sc.nextLine();
        //获取用户名所在集合的索引
        int index = login(list,username);
        if (personID.equals(list.get(index).getPersonID())&&phonenumber.equals(list.get(index).getPhoneNumber())) {
            System.out.println("请输入你要修改的密码");
            String password = sc.nextLine();
            list.get(index).setPassword(password);
        }else {
            System.out.println("验证信息有误,无法修改密码,请在检查信息后重新输入");
        }
    }

    //注册
    private static void Makeit(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        String Username = null;
        while (true) {
            //输入用户名并进行验证
            System.out.println("请输入用户名");
            Username = sc.nextLine();
            //对用户名长度进行验证
            if (!(Username.length()>= 3 && Username.length()<=15) ) {
                System.out.println("用户名长度应该在3~15之间,请重新输入");
                continue;
            }
            //对用户名的内容进行验证
            boolean flagnum = Usernumber(Username);
            if (!flagnum) {
                System.out.println("用户名不能为纯数字,并且不能带有特殊字符");
                continue;
            }
            //对用户名重复验证
            boolean flag = contains(list,Username);
            if (flag) {
                System.out.println("用户名已存在,请重新输入用户名");
                continue;
            }else{
                System.out.println("用户名登记成功");
                break;
            }

        }
        //验证密码
        String Password = null;
        while (true) {
            System.out.println("请输入密码");
            Password = sc.nextLine();
            System.out.println("请再次输入密码");
            String Password2 = sc.nextLine();
            if (Password.equals(Password2)) {
                System.out.println("密码输入成功");
                break;
            }else {
                System.out.println("两次密码输入不一致,请重新输入");
                continue;
            }
        }

        //身份证号验证
        String personID = null;
        while (true) {
            System.out.println("请输入身份证号");
            personID = sc.nextLine();
            //验证长度
            if (!(personID.length() == 18)){
                System.out.println("身份证号长度不正确,请重新输入");
                continue;
            }
            //不能0开头
            char c = personID.charAt(0);
            boolean flagID = ID0(c);
            if (flagID) {
                System.out.println("身份证号首位不能为0,请重新输入");
                continue;
            }
            //前17位为数字,最后一位可以是X或者x
            boolean flag = containsX(personID);
            if (!flag) {
                System.out.println("身份证号前17位是数字,最后一位可以使X或者x,请重新输入");
                continue;
            }else{
                System.out.println("身份证号输入成功");
                break;
            }
        }

        //手机号验证
        String PhoneNumber = null;
        while (true) {
            System.out.println("请输入手机号码");
            PhoneNumber = sc.nextLine();
            //判断手机号长度是否是11位
            if (PhoneNumber.length()!=11) {
                System.out.println("手机号长度不正确,请重新输入");
                continue;
            }
            //判断手机号是否0开头
            char c = PhoneNumber.charAt(0);
            boolean flag = ID0(c);
            if (flag) {
                System.out.println("手机号开头不能是0开头,请重新输入");
                continue;
            }
            //判断手机号是否全部都为数字
            boolean flag1 = num(PhoneNumber);
            if (!flag1) {
                System.out.println("手机号必须是纯数字,请重新输入");
                continue;
            }else {
                System.out.println("手机号输入成功");
                break;
            }
        }
        User u1 = new User(Username,Password,personID,PhoneNumber);
        list.add(u1);
        System.out.println("用户注册成功");
    }

    //登录
    private static void LoGin(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入用户名");
        String username = sc.nextLine();
        //验证用户名是否存在(是否重复)
        boolean flag = contains(list,username);
        if (!flag){
            System.out.println("用户名不存在,请重新输入");
            return;
        }
        //重复验证验证码,直到正确为止
        while (true) {
            String index = samenum();
            System.out.println(index);
            System.out.println("请输入验证码");
            String index2 = sc.nextLine();
            if (!index.equalsIgnoreCase(index2)) {
                System.out.println("验证码输入错误,请重新输入");
                continue;
            }else {
                System.out.println("验证码输入正确");
                break;
            }
        }
        //验证用户名和密码是否正确,3次机会
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入密码");
            String password = sc.nextLine();
            int n  = login(list,username);
            if (!password.equals(list.get(n).getPassword())){
                System.out.println("用户名或密码不正确,请重新输入");
                System.out.println("您还剩下"+(2-i)+"次机会");
                if (i==2){
                    System.out.println("您的账户"+username+"已经被锁定,请联系管理员");
                    return;
                }
                continue;
            }else {
                System.out.println("身份验证成功,登录成功");
                StudentSyetem ss = new StudentSyetem();
                ss.startStudentSystem();
                break;
            }
        }

    }

    //判断身份证号的内容
    private static boolean containsX(String personID) {
        char[] chars = personID.toCharArray();
        for (int i = 0; i < chars.length-1; i++) {
            if(!(chars[i]>='0' && chars[i]<='9')){
                return false;
            }
        }
        if (!((chars[17] >= '0'&&chars[17] <= '9')||(chars[17]=='X')||(chars[17]=='x'))) {
            return false;
        }
        return true;
    }
    //验证首位是否为0
    private static boolean ID0(char c) {
        if (c == '0'){
            return true;
        }
        return false;
    }
    //验证用户名是否重复
    public static boolean contains(ArrayList<User> list, String Username) {
        //当集合中的元素数量为0的时候代表一定不会重复
        if (list.size() == 0) {
            return false;
        }
        //当上面的判断结束后代表集合中的长度不为0,那就依次进行判断
        for(int i = 0; i < list.size(); i++) {
            String Username2 = list.get(i).getUserName();
            if (Username.equals(Username2)) {
                return true;
            }
        }
        return false;
    }
    //判断用户名内部是否符合要求
    public static boolean Usernumber(String Username) {
        //将用户名字符串拆分成各个字符
        char[] ch = Username.toCharArray();
        //计数器
        int count = 0;
        //这个循环判断是不是纯数字
        for (int i = 0; i < ch.length; i++) {
            if (ch[i] >= '0' && ch[i] <= '9') {
                count++;
            }
        }
        //当计数器的值等于字符数组的长度的时候,代表整个字符串全部都是数字,不符合要求
        if (count == ch.length) {
            return false;
        }
        //这个循环判断是不是有其他的字符
        for (int i = 0; i < ch.length; i++) {
            //意思就是除了数字,小写字母,大写字母意外其余所有的字符全部是错误的
            if (!((ch[i] >= '0' && ch[i] <= '9')||(ch[i] >= 'a' && ch[i] <= 'z')||(ch[i] >= 'A' && ch[i] <= 'Z'))) {
                return false;
            }
        }
        return true;
    }
    //判断是否纯数字
    public static boolean num(String PhoneNumber){
        char[] ch = PhoneNumber.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            if (!(ch[i] >= '0' && ch[i] <= '9')) {
                return false;
            }
        }
        return true;
    }
    //获取验证码
    public static String samenum(){
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a'+i));
            list.add((char)('A'+i));
        }
        Random r = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int c = r.nextInt(list.size());
            char ch = list.get(c);
            sb.append(ch);
        }
        int a = r.nextInt(10);
        sb.append(a);
        char[] arr = sb.toString().toCharArray();
        int index = r.nextInt(arr.length);
        char temp = arr[index];
        arr[index] = arr[arr.length-1];
        arr[arr.length-1]= temp;
        return new String(arr);
    }
    //获取用户名的索引
    public static int login(ArrayList<User> list,String Username) {
        for (int i = 0; i < list.size(); i++) {
            String Username2 = list.get(i).getUserName();
            if (Username.equals(Username2)) {
                return i;
            }
        }
        return -1;
    }
}

这个登录界面的是由最简单的代码组成的,主要是用来给初学者一个很好的一个练习用来记住各个代码的应用,以便提升使用的熟练度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值