• 添加注册功能
import javax.naming.OperationNotSupportedException;
import java.util.ArrayList;
import java.util.Scanner;

public class useTest {
    public static void main(String[] args) {
        //创建用户类
        use use = new use();
        //集合记录用户名
        ArrayList<String> Aname = new ArrayList<>();
        //集合记录密码
        ArrayList<String> Apassword = new ArrayList<>();
        //集合记录身份证号码
        ArrayList<String> Acard = new ArrayList<>();
        //集合记录手机号码
        ArrayList<String> Aphone = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        //主界面
        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作1登录 2注册 3忘记密码 4退出");
            int i = sc.nextInt();
            switch (i) {
                case 1 -> System.out.println("登陆");
                case 2 -> Username(Aname,Apassword, Acard, Aphone);
                case 3 -> System.out.println("忘记密码");
                case 4 -> System.exit(0);
                default -> System.out.println("没有此选项");
            }
        }

    }
    public static void Username(ArrayList<String> Aname, ArrayList<String> Apassword, ArrayList<String> Acard, ArrayList<String> Aphone) {
        Scanner sc = new Scanner(System.in);
        //注册用户名
        while (true) {
            //键盘录入用户名
            int a = 0;
            System.out.println("请输入用户名");
            String name = sc.nextLine();
            //调用方法判断长度
            boolean length = length(name);
            //调用方法判断是否重复
            boolean repeat = repeat(Aname, name);
            //调用方法判断是否包含标点符号
            boolean combination1 = combination1(name);
            //
            boolean combination2 = combination2(name);
            //判断长度
            if (length) {
                System.out.println("用户名长度不符合要求,请重新输入");
            } else if (repeat) {
                System.out.println("用户名重复,请重新输入");
            } else if (combination1) {
                System.out.println("用户名不能包含标点符号等,请重新输入");
            } else if (combination2) {
                System.out.println("用户名不能为纯数字,请重新输入");
            } else {
                System.out.println("用户名输入正确");
                Aname.add(name);
                break;
            }
        }
        //注册密码
        while (true) {
            //键盘录入密码
            System.out.println("请输入密码");
            //输入第一遍密码
            String password1 = sc.next();
            System.out.println("请再次输入密码");
            //输入第二遍密码
            String password2 = sc.next();
            //将两次密码对比,一样的话提示密码注册成功,如果不一样就重新输入
            if (password1.equals(password2)) {
                System.out.println("密码注册成功");
                Apassword.add(password1);
                break;
            } else {
                System.out.println("两次输入的密码不同,请重新输入");
            }
        }
        //注册身份证号
        while (true) {
            System.out.println("请输入身份证号码");
            //键盘录入身份证号码
            String card = sc.next();
            //判断身份证的长度的是否为18,不是为true,是为false
            boolean b = card.length() != 18;
            //判断身份证的第一位是否为0,不是为true,是为false
            boolean b1 = card.charAt(0) != '0';
            //调用方法判断前17位是否为纯数字
            boolean num = num(card);
            //判断最后一位是否在0~9,x,X的范围内
            boolean last = last(card);
            if (b) {
                System.out.println("身份证长度错误,请重新输入");
            } else if (!b1) {
                System.out.println("身份证第一位格式错误,请重新输入");
            } else if (num) {
                System.out.println("身份证前17位格式错误,请重新输入");
            } else if (last) {
                System.out.println("身份证最后一位格式错误,请重新输入");
            } else {
                System.out.println("身份证录入成功!");
                Acard.add(card);
                break;
            }

        }
        //注册手机号
        while (true) {
            //键盘录入手机号
            System.out.println("请输入你的手机号码");
            String phone = sc.next();
            boolean b = phone.length() != 11;//相等为false,不相等为true
            boolean b1 = phone.charAt(0) != '0';//相等为false,不相等为true
            boolean digital = digital(phone);
            if (b) {
                System.out.println("手机号长度输入错误,请重新输入");
            } else if (!b1) {
                System.out.println("手机号第一位不能为0,请重新输入");
            } else if (digital) {
                System.out.println("手机号只能为纯数字");
            } else {
                System.out.println("手机号验证成功");
                Aphone.add(phone);
                break;
            }
        }
        System.out.println("账号注册成功!!!");
        System.out.println("请记住您的账户密码!!!");
    }


    //判断用户名的长度是否符合要求
    public static boolean length(String name) {
        if (name.length() > 15 || name.length() < 3) {
            return true;
        }
        return false;
    }

    //判断用户名是否存在  repeat-重复
    public static boolean repeat(ArrayList<String> Aname, String name) {
        //利用循环遍历用户名集合判断用户名是否重复
        for (int i = 0; i < Aname.size(); i++) {
            boolean panduan = Aname.get(i).equals(name);
            if (panduan) {
                System.out.println("用户名重复,请重新输入");
                return true;
            }
        }
        return false;
    }

    //判断用户名的组合是否正确 组合=combination
    public static boolean combination1(String name) {
        //创建一个数组用来记录数字和字母,然后遍历和输入的用户名进行对比
        //如果用户名里有一个在数组中不存在,那么就输入错误,需要重新输入
        char[] zmsz = new char[62];
        char a = 'a' - 1;
        char A = 'A' - 1;
        char num = '0' - 1;
        //将需要的数据添加到数组中
        for (int i = 0; i < zmsz.length; i++) {
            if (i > 51) {
                num++;
                zmsz[i] = num;
            } else if (i > 25) {
                A++;
                zmsz[i] = A;
            } else {
                a++;
                zmsz[i] = a;
            }
        }
        //将数组装换成字符串
        String s = "";
        for (int i = 0; i < zmsz.length; i++) {
            s = s + zmsz[i] + "";
        }
        //利用循环嵌套,将name里的每一个字符进行对比
        int b;
        boolean equals = true;
        for (int i = 0; i < name.length(); i++) {
            b = 0;
            for (int n = 0; n < zmsz.length; n++) {
                //转换成字符串形式
                String c = name.charAt(i) + "";
                String s1 = s.charAt(n) + "";
                equals = c.equals(s1);
                if (!equals) {
                    //将用户名的每一个字符进行对比
                    //当用户名的字符和数组中的字符不同时,输出false,相同时输出true
                    //当输出false时,b++;
                    //如果字符存在'a'~'b',A~B,0~9中 那么就只会有61个false
                    b++;
                }
                //当b==62时,说明用户名中有字符不符合要求
                if (b == 62) {
                    //如果有不同的,就说明不符合要求,返回true
                    return true;
                }
            }
        }
        //符合要求,返回false
        return false;
    }

    //判断用户名的组合是否为纯数字 组合=combination
    public static boolean combination2(String name) {
        char a = 'a' - 1;
        char A = 'A' - 1;
        char[] zm = new char[52];
        //利用循环将字母的大小写添加到数组中
        for (int i = 0; i < zm.length; i++) {
            if (i > 25) {
                a++;
                zm[i] = a;
            } else {
                A++;
                zm[i] = A;
            }
        }
        //定义一个变量用来记录
        int num1 = 0;
        //先利用循环将name遍历出来,在嵌套zm(字母的大小写).length的循环
        //将name里面的字符和zm(字母的大小写)数组进行对比
        for (int i = 0; i < name.length(); i++) {
            for (int n = 0; n < zm.length; n++) {
                //将char转换为String
                String sz = zm[n] + "";
                String sn = name.charAt(i) + "";
                //对比 当name字符为字母时,输出true
                //当name字符为数字时,输出false
                boolean equals = sn.equals(sz);
                //当对比结果为true时,num1++
                if (equals) {
                    num1++;
                }
            }
        }
        //当num1为0时,代表用户名为纯数字,返回true
        if (num1 == 0) {
            return true;
        }
        return false;
    }

    //判断身份证前17位是否为纯数字
    public static boolean num(String card) {
        //添加数组用来记录0~9的数字
        char[] num = new char[10];
        char num1 = '0' - 1;
        //利用循环将数字添加到数组中
        for (int i = 0; i < num.length; i++) {
            num1++;
            num[i] = num1;
        }
        //利用循环将身份证的字符遍历出来
        //在嵌套循环将身份证的每一个字符和数字数组对比
        //定义变量用来记录
        for (int i = 0; i < card.length() - 1; i++) {
            int numer = 0;
            for (int n = 0; n < num.length; n++) {
                //对比,相同为true,不同为false
                boolean equals = (card.charAt(i) + "").equals(num[n] + "");
                //当输出为false时,numer++
                if (!equals) {
                    numer++;
                }
            }
            //因为身份证前17位只能是数字(0~9),所以正常来说numer只能等于9
            //当numer等于10时,代表前17位有字母,所以返回true
            if (numer == 10) {
                return true;
            }
        }
        return false;
    }

    //判断身份证的最后一位
    public static boolean last(String card) {
        //添加数组用来记录0~9的数字
        char[] num = new char[12];
        char num1 = '0' - 1;
        char x = 'x';
        char X = 'X';
        //定义变量用来记录
        int numer = 0;
        //利用循环将数字添加到数组中
        for (int i = 0; i < num.length; i++) {
            num1++;
            num[i] = num1;
            if (i == 10) {
                num[i] = x;
            } else if (i == 11) {
                num[i] = X;
            }
        }
        //将身份证最后一位转为字符串
        String s = card.charAt(card.length() - 1) + "";
        //利用循环判断
        for (int i = 0; i < num.length; i++) {
            //将身份证的最后一位拿出来和数组中的值对比,相同为true
            boolean equals = s.equals(num[i] + "");
            //当equals==true时,numer++
            if (equals) {
                numer++;
            }
        }
        //因为身份证只能是0~9和x以及X,所以当格式正确的时候
        //numer==1,当numer==0时表示,输入的身份证最后一位不在0~9,x,X的范围中,返回true
        if (numer == 0) {
            return true;
        } else {
            return false;
        }
    }

    //判断手机号是否都为数字 数字-digital
    public static boolean digital(String phone) {
        //添加数组 记录0~9的数字
        char num = '0' - 1;
        char[] num1 = new char[10];
        //利用循环将数字添加到数组中
        for (int i = 0; i < num1.length; i++) {
            num++;
            num1[i] = num;
        }
        //定义变量记录数据
        int num2 = 0;
        //利用循环将手机号码的字符遍历出来
        //在嵌套循环将手机号的每一个字符和数字数组对比
        for (int i = 0; i < phone.length(); i++) {
            for (int n = 0; n < num1.length; n++) {
                //将字符转换为字符串
                String s = phone.charAt(i) + "";
                String s1 = num1[n] + "";
                //对比,数据相同时为true
                boolean equals = s.equals(s1);
                //当equals的值为true时,num2++
                if (equals) {
                    num2++;
                }
            }
        }
        /*
        对比举例:
        5---1 false     当equals的结果为true时
        5---2 false     num2++
        5---3 false     因为如果手机号是纯数字的话,num2必定加一
        5---4 false     又因为手机号一共有11位
        5---5 true      所以,当num2<11时,表示手机号不是纯数字
        5---6 false     所以返回true
        5---7 false
        5---8 false
        5---9 false
        5---0 false
        */
        if (num2 < 11) {
            return true;
        }
        return false;
    }
}

原文地址:http://www.cnblogs.com/Alluw/p/16897308.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性