Day12-学生管理系统

基础版本:

需求:采取控制台的方式去书写学生管理系统。

分析:

(1)、初始菜单:

(2)、学生类:

属性:id、姓名、年龄、家庭住址。

(3)、添加功能:

键盘录入每一个学生信息并添加,满足以下要求:id唯一。

(4)、删除功能:

键盘录入要删除的学生id,需要满足以下要求:

id存在删除。

id不存在,需要提示不存在,并回到初始菜单。

(5)、修改功能:

键盘录入要修改的学生id,需要满足以下要求:

id存在,继续录入其他信息。

id不存在,需要提示不存在,并回到初始菜单。

(6)、查询功能:

打印所有的学生信息,满足以下要求:

如果没有学生信息,提示:当前无学生信息,请添加后再查询。

如果有学生信息,需要按照以下格式输出。(不用过于纠结对其的问题)

package XSGL;

public class Student {
    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(String id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
package XSGL;

import java.util.ArrayList;
import java.util.Scanner;

public class Dome {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        loop:while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:退出");

            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你的选择:");
            String choose = sc.next();
            switch (choose){
                case "1": {addStudent(list); break;}
                case "2": {deleteStudent(list); break;}
                case "3": {updateStudent(list); break;}
                case "4": {searchStudent(list); break;}
                case "5": {
                    System.out.println("退出");
                    //break loop;   //程序结束方法1:利用标记,然后break会跳出标记的循环
                    System.exit(0); //程序结束方法2:利用此语句停止虚拟机运行
                }
                default: System.out.println("没有这个选项");
            }
        }

    }

    //添加学生
    public static void addStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);

        String id = null;
        while (true) {
            System.out.println("请输入学生的id");
            id = sc.next();
            boolean flag = contions(list,id);
            if(flag){
                System.out.println("id已经存在");
            } else {
                break;
            }
        }

        System.out.println("请输入学生的名字");
        String name = sc.next();
        System.out.println("请输入学生的年龄");
        int age = sc.nextInt();
        System.out.println("请输入学生的家庭住址");
        String address = sc.next();

        Student stu1 = new Student(id,name,age,address);
        list.add(stu1);

        System.out.println("学生信息添加成功");
    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的id");
        String uid = sc.next();

        //获取查询的id在集合中对应的索引
        int index = getIndex(list,uid);
        if(index >= 0){
            list.remove(index);  //删除索引所对应的集合的元素
            System.out.println("id为" + uid + "的学生删除成功");
        } else {
            System.out.println("id不存在,删除失败");
        }
    }

    //修改学生
    public static void updateStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        String uid = null;
        System.out.println("请输入要修改的学生的id");
        uid = sc.next();
        //获取查询的id在集合中对应的索引
        int index = getIndex(list,uid);
        if(index == -1){
            System.out.println("要修改的id" + uid + "不存在");
            return ;
        }

        //代码执行到这的时候,说明要修改的id是存在的
        Student stu = list.get(index);
        System.out.println("请输入新的名字");
        String newName = sc.next();
        stu.setName(newName);

        System.out.println("请输入新的年龄");
        int newAge = sc.nextInt();
        stu.setAge(newAge);

        System.out.println("请输入新的家庭地址");
        String newAdress = sc.next();
        stu.setAddress(newAdress);

        System.out.println("学生信息修改成功");
    }

    //查询学生
    public static void searchStudent(ArrayList<Student> list){
        if(list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询");
            return ;
        }
        //打印表头信息
        System.out.println("id\t\t姓名\t\t年龄\t\t家庭住址");
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.println(s.getId() + "\t\t" + s.getName() + "\t\t" +s.getAge() + "\t\t" + s.getAddress());
        }
    }

    //判断id是否已经存在
    public static boolean contions(ArrayList<Student> list,String id){
//        for (int i = 0; i < list.size(); i++) {
//            Student stu2 = list.get(i);
//            String uid = stu2.getId();
//            if(uid.equals(id)){
//                return true;
//            }
//        }
//        return false;
        return getIndex(list,id) >= 0;
    }

    //通过id获取对应的索引
    public static int getIndex(ArrayList<Student> list,String id){
        for (int i = 0; i < list.size(); i++) {
            Student stu2 = list.get(i);
            String uid = stu2.getId();
            if(uid.equals(id)){
                return i;
            }
        }
        return -1;
    }
}

升级版本:

需求:

为学生管理系统书写一个登录、注册、忘记密码的功能。

只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

分析:

(1)、登录界面:

(2)、用户类:

属性:用户名、密码、身份证号码、手机号码。

(3)、注册功能:

1、用户名需要满足以下要求:

        验证要求:

                用户名唯一

(分析:Scanner键盘录入用户名username,先到list集合中判断是否存在  contains / getindex)

                用户名长度必须在3~15位之间

(分析:可以利用字符串的length() )

                只能是字母加数字的组合,但是不能是纯数字

(分析:先循环获取username里面的每个字符,如果有一个字符不在 'a'~'z'  'A'~'Z'  '0'~'9',那么当前用户名不符合条件。统计一下用户名username当中有多少个字符在 a-z A-Z ,判断一下个数,只有大于0才是满足要求的用户名)

2、密码键盘输入两次,两次一致才可以进行注册。

(分析:利用Scanner第一次输入密码,利用Scanner第二次输入密码,只有两次一致,才是符合要求的,否则就不符合要求。)

3、身份证号需要验证。

        验证要求:

                长度为18位

(分析:键盘录入身份证号码,调用字符串里面的 length() 方法获取长度,只有长度为18的时候才满足)

                不能以0为开头

(分析:可以调用 charAt(0) 获取第一个字符,跟  '0'  进行比较)

                前17位,必须都是数字

(分析:遍历前面17位,如果有一个不在 '0'~'9' 这个范围当中,那么就是不符合的)

                最后一位可以是数字,也可以是大写X或小写x

(分析:获取最后一个字符,如果这个字符在 '0'~'9' 之间或者 'X' 或者  'x'  那么就满足)

4、手机号验证。

        验证要求:

                长度为11位

(分析:键盘录入手机号码,调用字符串里面的 length() 方法获取长度)

                不能以0为开头

(分析:可以调用 charAt(0) 与  '0'  进行比较)

                必须都是数字

(分析:遍历手机号码,如果有一个字符不在 '0'~'9' 那么就是不行的)

分析:写完之后将属性添加到用户当中,然后把用户添加到集合当中。

User u = new User(username,password,personid,phoneNumber); 

list.add(u);  

(4)、登录功能:

1、键盘录入用户名

2、键盘录入密码

3、键盘录入验证码(分析:需要先获取一个验证码)

验证要求:

        用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册。

        判断验证码是否正确,如果不正确,请重新输入。

        再判断用户名和密码是否正确,有3次机会。

分析:先判断用户名是否存在,如果不存在,直接提示未注册。既然用户名存在,那么久判断密码和验证码是否正确,如果正确登陆成功,如果错误会有三次机会。)

(5)、忘记密码:

1、键盘录入用户名,判断当前用户是否存在,如果不存在直接结束方法,并提示:未注册。

(分析:键盘录入用户名,判断是否存在,不存在直接提示未注册。)

2、键盘录入身份证号码和手机号码。

(分析:当代码执行到第二步,就表明用户名是存在的。此时才能键盘录入身份证号码和手机号码)

3、判断当前用户的身份证号码和手机号码是否一致。

        如果一致,则提示输入密码,并进行修改。

        如果不一致,则提示:账号信息不匹配,修改失败。

(分析:判断身份证号码和手机号码是否正确,如果错误则修改失败,如果正确,才让用户继续键盘录入密码,提示修改成功。)

(6)、验证码规则:

长度为5

由4位大写或者小写字母和1位数字组成,同一个字母可重复。

数字可以出现在任意位置。

package XSGLSJB;

public class Student {
    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(String id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
package XSGLSJB;

import java.util.ArrayList;
import java.util.Scanner;

public class Dome {
    public static void startDome() {
        ArrayList<Student> list = new ArrayList<>();
        loop:while (true) {
            System.out.println("------欢迎来到学生管理系统功能界面------");
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:退出");

            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你的选择:");
            String choose = sc.next();
            switch (choose){
                case "1": {addStudent(list); break;}
                case "2": {deleteStudent(list); break;}
                case "3": {updateStudent(list); break;}
                case "4": {searchStudent(list); break;}
                case "5": {System.out.println("退出");
                    //break loop;   //程序结束方法1:利用标记,然后break会跳出被标记的循环
                    System.exit(0); //程序结束方法2:利用此语句停止虚拟机运行
                }
                default: System.out.println("没有这个选项");
            }
        }
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        String id;
        while (true) {
            System.out.println("请输入学生的id");
            id = sc.next();
            boolean flag = contions(list,id);
            if(flag){
                System.out.println("id已经存在");
            } else {
                break;
            }
        }

        System.out.println("请输入学生的名字");
        String name = sc.next();
        System.out.println("请输入学生的年龄");
        int age = sc.nextInt();
        System.out.println("请输入学生的家庭住址");
        String address = sc.next();
        Student stu1 = new Student(id,name,age,address);    //把学生的属性,添加到学生对象当中
        list.add(stu1);     //把学生对象添加到集合当中
        System.out.println("学生信息添加成功");
    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的id");
        String uid = sc.next();

        //获取查询的id在集合中对应的索引
        int index = getIndex(list,uid);
        if(index >= 0){     //索引的值大于等于0,代表该id在集合中是存在的
            list.remove(index);  //根据索引,删除索引所对应的集合中的对象
            System.out.println("id为" + uid + "的学生删除成功");
        } else {
            System.out.println("id不存在,删除失败");
        }
    }

    //修改学生
    public static void updateStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        String uid;
        System.out.println("请输入要修改的学生的id");
        uid = sc.next();
        //获取查询的id在集合中对应的索引
        int index = getIndex(list,uid);
        if(index == -1){
            System.out.println("要修改的id" + uid + "不存在");
            return ;
        }

        //代码执行到这的时候,说明要修改的id是存在的
        Student stu = list.get(index);  //根据索引,获得集合中对应的Student对象
        System.out.println("请输入新的名字");
        String newName = sc.next();
        stu.setName(newName);

        System.out.println("请输入新的年龄");
        int newAge = sc.nextInt();
        stu.setAge(newAge);

        System.out.println("请输入新的家庭地址");
        String newAdress = sc.next();
        stu.setAddress(newAdress);

        System.out.println("学生信息修改成功");
    }

    //查询学生
    public static void searchStudent(ArrayList<Student> list){
        if(list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询");
            return ;
        }
        //打印表头信息
        System.out.println("id\t\t姓名\t\t年龄\t\t家庭住址");
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.println(s.getId() + "\t\t" + s.getName() + "\t\t" +s.getAge() + "\t\t" + s.getAddress());
        }
    }

    //判断id是否已经存在,true表示存在
    public static boolean contions(ArrayList<Student> list,String id){
//        for (int i = 0; i < list.size(); i++) {
//            Student stu2 = list.get(i);
//            String uid = stu2.getId();
//            if(uid.equals(id)){
//                return true;
//            }
//        }
//        return false;
        return getIndex(list,id) >= 0;
    }

    //通过id获取对应的索引,返回值为对应的索引
    public static int getIndex(ArrayList<Student> list,String id){
        for (int i = 0; i < list.size(); i++) {
            Student stu2 = list.get(i);
            String uid = stu2.getId();
            if(uid.equals(id)){
                return i;
            }
        }
        return -1;
    }
}
package XSGLSJB;

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) {
        this.username = username;
        this.password = password;
        this.personid = personid;
        this.phoneNumber = phoneNumber;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPersonid() {
        return personid;
    }

    public void setPersonid(String personid) {
        this.personid = personid;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}
package XSGLSJB;

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<>();
        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作:1 登录  2 注册  3 忘记密码  4 退出");
            Scanner sc = new Scanner(System.in);
            String choose = sc.next();
            switch (choose){
                case "1" :login(list); break; //直接输入方法名,然后alt+回车可直接生成方法
                case "2" :zhuce(list); break;
                case "3" :forgetpassword(list); break;
                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 flag5 = contains(list,userName);
        if(!flag5){
            System.out.println("未注册,请先注册");
            return;
        }
        
        //键盘录入身份证号和手机号
        System.out.println("请输入身份证号:");
        String userID = sc.next();
        System.out.println("请输入手机号:");
        String userPhone = sc.next();
        
        //需要把用户对象先通过索引取出来
        int index = getindex(list,userName);    //根据输入用户名获得对应的索引
        User user = list.get(index);    //根据索引获得用户对象

        if(!(user.getPersonid().equalsIgnoreCase(userID) && user.getPhoneNumber().equals(userPhone))){
            System.out.println("身份证号或手机号错误,不能修改密码");
            return;
        }

        //代码到这里的时候,说明可以修改密码了
        String mima;
        while (true) {
            System.out.println("请输入新的密码:");
            mima = sc.next();
            System.out.println("请再次输入新的密码:");
            String mima2 = sc.next();
            if(mima.equals(mima2)){
                //System.out.println("两次输入密码一致");
                break;
            } else {
                System.out.println("两次密码输入不一致,请重新输入密码");
                continue;
            }
        }

        //直接修改即可
        user.setPassword(mima);
        System.out.println("修改密码成功");
    }

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

        for (int i = 0 ; i < 3 ; i++) {     //因为登录有3次机会,所以利用了for循环
            System.out.println("请输入用户名:");
            String userName = sc.next();
            //判断用户名是否存在
            boolean flag5 = contains(list,userName);
            if(!flag5){
                System.out.println("未注册,请先注册");
                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 useInfo = new User(userName,password,null,null);
            boolean flag6 = checkUserInfo(list,useInfo);
            if(flag6){
                //true为存在,登录成功
                System.out.println("登录成功,可以开始使用学生管理系统了");
                /**创建对象调用方法,启动学生管理系统
                 * 创建Dome类的对象,然后调用Dome中的startDome方法,
                 * 和创建User类对象,调用User中的getUsername()等方法,原理是一样的
                 */
                Dome dd = new Dome();   //创建对象
                dd.startDome();     //根据对象,调用相应的方法
                break;
            } else {
                System.out.println("登录失败,用户名或密码错误");
                if(i == 2){
                    System.out.println("当前帐号被锁定,请练习客服");
                    return;     //当前账号被锁定后,直接结束方法即可
                } else {
                    //因为有3次机会,当循环第一次执行时,已经用了一次机会,剩下2次机会,此时i的值为0,
                    //所以输出剩下 2-i 次机会,  模板:剩余 ( n-1 - i ) 次机会
                    System.out.println("剩下" + (2 - i) + "次机会");
                }
            }
        }
    }

    //注册
    public static void zhuce(ArrayList<User> list){
        //键盘录入用户名
        Scanner sc = new Scanner(System.in);
        /**开发细节:
         * 先验证格式是否正确,再验证是否唯一
         * 因为在以后所有的数据,都是存在数据库中,如果我们要校验,需要使用到网络资源。
         */
        //用户名输入
        String inName;  //如果inName定义在循环里面,它的作用只能是循环内,不方便直接添加到用户当中。
        while (true) {
            System.out.println("请输入用户名:");
            inName = sc.next();
            boolean flag1 = checkUsername(inName); //检验用户名格式是否正确
            if(!flag1){
                System.out.println("格式不正确,请重新输入");
                continue;
            }
            //代码执行到这时,表明用户名格式正确,接下来判断是否唯一
            //判断username在集合中是否已经存在
            boolean flag2 = contains(list,inName);
            if(flag2){
                //true,用户名存在
                System.out.println("用户名已经存在,请重新输入用户名");
                continue;
            } else {
                //false,用户名不存在
                //System.out.println("用户名可以使用");
                break;  //用户名可以使用时,不需要再输入,利用break跳出while循环,不再输入
            }
        }

        //密码输入
        String inmima1;
        while (true) {
            System.out.println("请输入密码:");
            inmima1 = sc.next();
            System.out.println("请再次输入密码:");
            String inmima2 = sc.next();
            if(!inmima1.equals(inmima2)){
                System.out.println("两次密码输入不一致,请重新输入");
                continue;
            } else{
                //System.out.println("两次密码输入一致,请输入其他数据");
                break;
            }
        }

        //身份证号码录入
        String inpersonID;
        while (true) {
            System.out.println("请输入身份证号");
            inpersonID = sc.next();
            boolean flag3 = checkPersonID(inpersonID);
            if(flag3){
                //System.out.println("身份证号码格式符合要求");
                break;
            } else {
                System.out.println("身份证号码不符合要求,请重新输入");
                continue;
            }
        }

        //手机号码录入
        String inPhoneNumber;
        while (true) {
            System.out.println("请输入手机号码:");
            inPhoneNumber = sc.next();
            boolean flag4 = checkPhoneNumber(inPhoneNumber);
            if(flag4){
                System.out.println("手机号码格式符合要求");
                break;
            } else {
                System.out.println("手机号码不符合要求,请重新输入");
                continue;
            }
        }

        //把用户属性添加到用户当中,进而添加到集合当中
        //若户名,密码,身份证号,手机号码都定义在循环内,则无法放到用户对象中
        User u = new User(inName,inmima1,inpersonID,inPhoneNumber);
        //把用户对象添加到集合中
        list.add(u);
        System.out.println("注册成功");

        //检查是否遍历成功,遍历集合
        printlist(list);
    }



    //定义一个方法,检测该整体在集合中是否存在,true为存在
    private static boolean checkUserInfo(ArrayList<User> list, User useInfo) {
        //遍历集合,判断用户是否存在,如果存在登录成功,如果不存在登录失败。
        for (int i = 0; i < list.size(); i++) {
            User uu = list.get(i);
            if(uu.getUsername().equals(useInfo.getUsername()) && (uu.getPassword().equals(useInfo.getPassword()))){
                return true;
            }
        }
        return false;
    }

    //打印集合中的内容
    private static void printlist(ArrayList<User> list) {
        for (int i = 0; i < list.size(); i++) {
            User us = list.get(i);
            System.out.println(us.getUsername() + "," + us.getPassword() + ","
                    + us.getPersonid() + "," + us.getPhoneNumber());
        }
    }

    //判断手机号码格式是否符合要求,true为符合
    private static boolean checkPhoneNumber(String inPhoneNumber) {
        int len = inPhoneNumber.length();
        //判断是否为11位
        if(len != 11){
            return false;
        }
        //判断开头是否为0
        if(inPhoneNumber.startsWith("0")){
            return false;
        }
        //判断是否都是数字
        for (int i = 0; i < inPhoneNumber.length(); i++) {
            char c = inPhoneNumber.charAt(i);
            if(!(c >= '0' && c <= '9')){
                return false;
            }
        }
        return true;
    }

    //检测身份证号码格式是否符合要求,true为符合要求
    private static boolean checkPersonID(String personID) {
        //长度为18
        if(personID.length() != 18){
            return false;
        }

        //不能以0开头
        char startch = personID.charAt(0);
        //boolean c = personID.startsWith("9");  //判断字符串第一个元素是否为9
        if(startch == '0'){
            return false;
        }

        //前17位必须为数字
        for (int i = 0; i < personID.length() - 1 ; i++) {
            char c2 = personID.charAt(i);
            if(!(c2 >= '0' && c2 <= '9')){
                return false;
            }
        }

        //最后一位可以是数字,也可以是X或x
        char endch = personID.charAt(personID.length() - 1 );
        if(!((endch >= '0' && endch <= '9') || (endch == 'X') || (endch == 'x'))){
            return  false;
        }
        return true;   //true为格式符合要求
    }

    //判断用户名在集合中是否已经存在,true为存在
    private static boolean contains(ArrayList<User> list,String username) {
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            String jhname = u.getUsername();
            if(username.equals(jhname)){
                return true;  //表示用户名在集合中已经存在
            }
        }
        return false; //表示用户名在集合中不存在
    }

    //检测用户名是否符合规范,true为符合规范
    private static boolean checkUsername(String username) {
        //判断用户名长度为3~15
        int len = username.length();
        if(len < 3 || len >15){
            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;
            }
        }
        //当代码执行到这里,表示用户名长度符合要求,而且是字母+数字的组合方式
        //判断是否全部为数字,当字母个数大于0时,即可满足要求
        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;  //if执行时表示已经有字母存在,此时可以直接跳出for循环
            }
        }
        return count >0 ;
    }

    //根据用户名找出其在集合中的索引,返回值为索引
    public static int getindex(ArrayList<User> list,String userName){
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            String un = u.getUsername();
            if(un.equals(userName)){
                return i;
            }
        }
        return -1;
    }

    //生成验证码
    private static String getCode(){
        //1、创建一个集合,添加所有的大写和小写字母
        ArrayList<Character> list = new ArrayList<>();
        //往集合内添加英文字母
        for (int i = 0; i < 26; i++) {
            list.add((char)('a' + i));
            list.add((char)('A' + i));
        }

        //随机抽取4个字符
        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);

        //调整验证码中数字的位置
        /**如果我们要修改字符串中的内容
         * 先把字符串变成字符数组,在数组中修改,然后再创建一个新的字符串
         */
        String newsb = sb.toString();   //将sb变成字符串newsb
        char[] arr = newsb.toCharArray();   //将字符串newsb变成字符数组arr[]
        //用最后一个索引与前面的索引随机调换
        int randomIndex = r.nextInt(arr.length);

        char temp = arr[randomIndex];
        arr[randomIndex] = arr[arr.length - 1];
        arr[arr.length - 1] = temp;

        String result = new String(arr);  //将字符数组转化为字符串
        return result;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值