[Java学习日记]控制台上的学生管理系统与登陆系统(主要使用集合存储数据)

目录

学生管理系统:

实体类:

听课前的版本:

听课后的版本(黑马程序员):

登陆系统:

实体类:

听课前的版本:

听课后的版本(黑马程序员):


学生管理系统:

实体类:
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;
    }
    public String toString() {
        return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";
    }
}
听课前的版本:
public class Management {
    public static void main(String[] args) {
        ArrayList<Student> list=new ArrayList<>();
        System.out.println("-------------欢迎来到黑马学生管理系统----------------");
        boolean flag= true;
        while (flag) {
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:退出");
            System.out.println("请输入您的选择:");
            try {//这里try-catch,后面再出错统一输出一句话。
                int i= new Scanner(System.in).nextInt();
                switch (i){
                    case 1->add(list);
                    case 2->delete(list);
                    case 3->change(list);
                    case 4->show(list);
                    case 5->flag=false;
                    default -> System.out.println("没有这个选项");
                }
            }catch (Exception e){
                System.out.println("输入错误!");
            }
        }
    }
    private static void add(ArrayList<Student> list){
        System.out.println("添加信息:id name age address");
        Scanner scanner = new Scanner(System.in);
        String id =scanner.next();
        for (Student student : list) {
            if (student.getId().equals(id)) {
                System.out.println("id输入重复!");
                return;
            }
        }
        String name=scanner.next();
        int age=scanner.nextInt();
        String address=scanner.next();
        Student student = new Student(id,name,age,address);
        list.add(student);
        show(list);
    }
    private static void delete(ArrayList<Student> list){
        System.out.println("删除id:");
        String id =new Scanner(System.in).next();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)){
                System.out.println("id找到");
                list.remove(i);
                show(list);
                return;
            }
        }
        System.out.println("id找不到");
        show(list);
    }
    private static void change(ArrayList<Student> list){
        System.out.println("改变id:");
        String id =new Scanner(System.in).next();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)){
                System.out.println("id找到");
                System.out.println("输入添加信息: name age address");
                Scanner scanner = new Scanner(System.in);
                String name=scanner.next();
                int age=scanner.nextInt();
                String address=scanner.next();
                Student student=new Student(list.get(i).getId(),name,age,address);
                list.set(i,student);
                show(list);
                return;
            }
        }
        System.out.println("id找不到");
        show(list);
    }
    private static void show(ArrayList<Student> list){
        System.out.println("--------------------------------");
        if (list.isEmpty()) {
            System.out.println("没有任何信息");
        }else {
            System.out.println("id\t姓名\t年龄\t家庭地址");
            for (Student student : list) {
                System.out.print(student.getId() + '\t' + student.getName() + '\t' + student.getAge() + '\t' + student.getAddress() + '\n');
            }
        }
        System.out.println("--------------------------------");
    }
}
听课后的版本(黑马程序员):

在需要改进的地方添加了注释

//添加了两个方法,在完成add功能添加了contains方法判断是否使用了相同id
//在完成delete方法的时候又需要用到id对应的下标来删除,故添加getIndex功能
//这里可以把add功能中原本的代码注释掉,引用getIndex功能减少重复代码。
//先画图再敲代码,或许现在的功能实现简单,不需要,但是后期或许会需要这种习惯
public class Management2 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        System.out.println("-------------欢迎来到黑马学生管理系统----------------");
        //使用标号:跳出外层循环---相较于boolean flag设置循环终止条件更加方便高校
        loop: while (true) {
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:退出");
            System.out.println("请输入您的选择:");
            try {
                int i = new Scanner(System.in).nextInt();
                switch (i) {
                    case 1 -> add(list);
                    case 2 -> delete(list);
                    case 3 -> update(list);
                    case 4 -> show(list);
                    case 5 -> {
                        System.out.println("退出系统");
                        break loop;
                        //第二种写法:System.exit(0) 或者 return;
                    }
                    default -> System.out.println("没有这个选项");
                }
            } catch (Exception e) {
                System.out.println("输入错误!");
            }
        }
    }
    private static void add(ArrayList<Student> list) {
        Scanner scanner = new Scanner(System.in);
        String id = null;
        while (true) {
            System.out.println("增加学生,输入id:");
            id = scanner.next();
            if (contains(list,id)){
                System.out.println("id重复,重新输入:");
            }else {
                break;
            }
        }
        System.out.println("依次输入姓名,年龄,住址");
        String name = scanner.next();
        int age = scanner.nextInt();
        String address = scanner.next();
        Student student = new Student(id, name, age, address);
        list.add(student);
        show(list);
    }
    private static void delete(ArrayList<Student> list){
        System.out.println("输入删除对象的id:");
        String id = new Scanner(System.in).next();
        if(contains(list,id)){
            System.out.println("id找到,删除成功");
            int i=getIndex(list,id);
            list.remove(i);
        }
        else {
            System.out.println("id找不到,删除失败");
        }
        show(list);
    }
    private static void update(ArrayList<Student> list) {
        System.out.println("输入改变对象的id:");
        String id = new Scanner(System.in).next();
        if (contains(list,id)){
            System.out.println("id找到:");
            System.out.println("输入添加信息:姓名,年龄,住址");
            Scanner scanner = new Scanner(System.in);
            String name = scanner.next();
            int age = scanner.nextInt();
            String address = scanner.next();
            int i=getIndex(list,id);
            //之前我是创建新对象,再使用set修改的集合,这里直接修改对象内容,更省空间
            Student student = list.get(i);
            student.setName(name);
            student.setAge(age);
            student.setAddress(address);
            list.set(i, student);
        }else {
            System.out.println("id找不到,修改失败");
        }
        show(list);
    }
    private static void show(ArrayList<Student> list) {
        System.out.println("--------------------------------");
        if (list.isEmpty()) {
            System.out.println("没有任何信息");
        } else {
            System.out.println("id\t姓名\t年龄\t家庭地址");
            for (Student student : list) {
                System.out.print(student.getId() + '\t' + student.getName() + '\t' + student.getAge() + '\t' + student.getAddress() + '\n');
            }
        }
        System.out.println("--------------------------------");
    }
    //判断集合中是否存在该对象id
    private  static  boolean  contains(ArrayList<Student> list, String id){
        /*for (Student student : list) {
            if (student.getId().equals(id)) {
                return true;
            }
        }
        return false;*/
        if (getIndex(list,id)==-1){
            return false;
        }else return true;
    }
    //根据集合的id返回对应下标
    private static int getIndex(ArrayList<Student> list, String id){
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getId().equals(id)){
                return i;
            }
        }
        return -1;
    }
}


登陆系统:

实体类:
public class User {
    private String username;
    private String password;
    private String ID;
    private String phoneNumber;
    public User() {
    }
    public User(String username, String password, String ID, String phoneNumber) {
        this.username = username;
        this.password = password;
        this.ID = ID;
        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 getID() {
        return ID;
    }
    public void setID(String ID) {
        this.ID = ID;
    }
    public String getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
    public String toString() {
        return "User{username = " + username + ", password = " + password + ", ID = " + ID + ", phoneNumber = " + phoneNumber + "}";
    }
}
听课前的版本:
//不会使用正则表达式,写起来很繁杂。
public class LoginAndRegister {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        list.add(new User("zhangsan","123456","430945222245647897","18888888888"));
        list.add(new User("lisi","654321","430945222245647891","18888888889"));
        list.add(new User("wangwu","12345678","430945222245647892","18888888880"));
        list.add(new User("zhaoliu","87654321","430945222245647893","18888888881"));
        System.out.println("-------------欢迎来到黑马学生管理系统----------------");
        loop:while (true) {
            System.out.println("请选择操作  1登录  2注册  3忘记密码");
            Scanner scanner = new Scanner(System.in);
            try {
                int i = scanner.nextInt();
                switch (i) {
                    case 1 -> {
                        if (login(list)) break loop;
                    }
                    case 2 -> register(list);
                    case 3 -> forget(list);
                }
            }catch (Exception e){
                System.out.println(e);
            }
        }
        System.out.println("欢迎登录!");
    }
    //登录选项
    private static boolean login(ArrayList<User> list) {
        System.out.println("欢迎登录");
        for (int i = 0; i < 3; i++) {
            System.out.println("输入用户名:");
            Scanner scanner = new Scanner(System.in);
            String username = scanner.next();
            System.out.println("输入密码:");
            String password = scanner.next();
            String str = getString();
            System.out.println("输入验证码:" + str);
            String myStr = scanner.next();
            int index = getIndex(list, username);
            if (index >= 0) {
                if (list.get(index).getPassword().equals(password) && str.equalsIgnoreCase(myStr)) {
                    System.out.println("用户名密码验证码正确");
                    return true;
                } else {
                    System.out.println("密码或者验证码错误,请重新输入密码和验证码:还有" + (2 - i) + "次机会");
                }
            } else {
                System.out.println("用户名未注册,请先注册");
                return false;
            }
        }
        System.out.println("输入次数已经用完!");
        return false;
    }
    //注册选项
    private static void register(ArrayList<User> list) {
        System.out.println("欢迎注册");
        String username, password1, ID, phoneNumber;
        username = inputUsername(list);
        password1 = inputPassword();
        ID = inputID();
        phoneNumber = inputPhoneNumber();
        User user = new User(username, password1, ID, phoneNumber);
        list.add(user);
    }
    //输入用户名
    private static String inputUsername(ArrayList<User> list) {
        String username;
        Scanner scanner = new Scanner(System.in);
        char[] chars = getChars();
        while (true) {
            System.out.println("请输入用户名(3-15位字母加数字且不能为纯数字):");
            username = scanner.next();

            boolean flag1 = false;
            for (int i = 0; i < username.length(); i++) {
                if (username.charAt(i) > '9' || username.charAt(i) < '0') {
                    flag1 = true;
                    break;
                }
            }
            if (flag1==false){
                System.out.println("不能为纯数字");
            }

            boolean flag2 = true;
            loop:for (int i = 0; i < username.length(); i++) {
                for (int j = 0; j < chars.length; j++) {
                    if (username.charAt(i) == chars[j]) {
                        break;
                    }
                    if (j == chars.length - 1) {
                        System.out.println("只能为字母或者数字");
                        flag2 = false;
                        break loop;
                    }
                }
            }

            boolean flag3=true;
            if (username.length() < 3 || username.length() > 15) {
                System.out.println("用户名长度不符合标准");
                flag3 = false;
            }

            boolean flag4=true;
            if (contains(list,username)){
                System.out.println("用户名已经存在");
                flag4=false;
            }

            if (flag1 && flag2 && flag3 && flag4) {
                System.out.println("用户名正确");
                break;
            } else {
                System.out.println("用户名错误,再次输入:");
            }
        }
        return username;
    }
    //输入密码:
    private static String inputPassword() {
        String password1;
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入用密码两次:");
            password1 = scanner.next();
            String password2 = scanner.next();
            if (password1.equals(password2)) {
                System.out.println("密码符合要求");
                break;
            } else {
                System.out.println("两次输入密码不一致,重输");
            }
        }
        return password1;
    }
    //输入身份证号码:
    private static String inputID() {
        String ID;
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("输入身份证号码:");
            ID = scanner.next();
            boolean flag1 = true;
            if (ID.length() != 18) {
                flag1 = false;
                System.out.println("身份证长度需要18位");
                continue;
            }
            boolean flag2 = true;
            if (ID.charAt(0) == '0') {
                flag2 = false;
                System.out.println("身份证第一位不能为0!");
            }
            boolean flag3 = true;
            for (int i = 0; i < ID.length() - 1; i++) {
                if (ID.charAt(i) < '0' || ID.charAt(i) > '9') {
                    flag3 = false;
                    System.out.println("身份证前十七位必须为数字!");
                }
            }
            boolean flag4 = true;
            char c = ID.charAt(17);
            if ((c>'9'||c<'0')&&c!='x'&&c!='X') {
                flag4 = false;
                System.out.println("身份证最后一位不是数字也不是X或者x!");
            }
            if (flag1 && flag2 && flag3 && flag4) {
                System.out.println("身份证正确");
                break;
            } else System.out.println("身份证错误,重输");
        }
        return ID;
    }
    //输入电话号码:
    private static String inputPhoneNumber() {
        String phoneNumber;
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("输入电话号码:");
            phoneNumber = scanner.next();
            boolean flag1 = true;
            if (phoneNumber.length() != 11) {
                flag1 = false;
                System.out.println("电话号码长度必须为11");
            }
            boolean flag2 = true;
            if (phoneNumber.charAt(0) == '0') {
                flag2 = false;
                System.out.println("电话号码第一位必须不为0");
            }
            boolean flag3 = true;
            for (int i = 0; i < phoneNumber.length(); i++) {
                if (phoneNumber.charAt(i) > '9' || phoneNumber.charAt(i) < '0') {
                    flag3 = false;
                    System.out.println("电话号码长度必须全部是数字!");
                }
            }
            if (flag1 && flag2 && flag3) {
                System.out.println("电话号码正确");
                break;
            } else System.out.println("电话号码错误");
        }
        return phoneNumber;
    }
    //忘记密码选项
    private static void forget(ArrayList<User> list) {
        System.out.println("输入用户名:");
        Scanner scanner = new Scanner(System.in);
        String username = scanner.next();
        int index = getIndex(list, username);
        if (index >= 0) {
            System.out.println("输入身份证和手机号码:");
            String ID = scanner.next();
            String phoneNumber = scanner.next();
            if (list.get(index).getID().equals(ID) && list.get(index).getPhoneNumber().equals(phoneNumber)) {
                System.out.println("输入密码进行修改:");
                String password = scanner.next();
                list.get(index).setPassword(password);
            } else {
                System.out.println("信息不对,修改失败");
            }
        } else {
            System.out.println("用户名未注册,请先注册");
        }
    }
    //根据用户名返回下标
    private static int getIndex(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getUsername().equals(username)) {
                return i;
            }
        }
        return -1;
    }
    //根据用户名判断是否存在于集合中
    private static boolean contains(ArrayList<User> list, String username){
        if (getIndex(list,username)==-1){
            return false;
        }else return true;
    }
    //得到随机字母加数字五位字符串
    private static String getString() {
        char[] str=new char[5];
        Random random = new Random();
        char[] chars = getChars();
        for (int i = 0; i < 4; i++) {
            str[i]=chars[random.nextInt(52)];
        }
        str[4]=chars[random.nextInt(52,62)];
        int i=random.nextInt(5);
        char temp=str[4];
        str[4]=str[i];
        str[i]=temp;
        return new String(str);
    }
    //得到全部字母加数字的字符数组
    private static char[] getChars() {
        char[] chars = new char[62];//存储字母加数字
        for (int i = 0; i < 26; i++) {
            chars[i] = (char) ('a' + i);
        }
        for (int i = 0; i < 26; i++) {
            chars[i + 26] = (char) ('A' + i);
        }
        for (int i = 0; i < 10; i++) {
            chars[i + 52] = (char) ('0' + i);
        }
        return chars;
    }
}
听课后的版本(黑马程序员):
//加入打印功能,重构内部代码
public class LoginAndRegister2 {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        list.add(new User("zhangsan", "123456", "888888888888888888", "18888888888"));
        list.add(new User("lisi", "654321", "430945222245647891", "18888888889"));
        list.add(new User("wangwu", "12345678", "430945222245647892", "18888888880"));
        list.add(new User("zhaoliu", "87654321", "430945222245647893", "18888888881"));
        System.out.println("-------------欢迎来到黑马学生管理系统----------------");
        printList(list);
        loop:
        while (true) {
            System.out.println("请选择操作  1登录  2注册  3忘记密码 4退出");
            Scanner scanner = new Scanner(System.in);
            try {
                int i = scanner.nextInt();
                switch (i) {
                    case 1 -> {
                        if (login(list)) break loop;
                    }
                    case 2 -> register(list);
                    case 3 -> forgetPassword(list);
                    case 4 -> {
                        //这里用System.exit(0)也行,chatGPT说用return好一点:
                        //在Java中结束主方法建议使用return,而不是System.exit(0)。
                        //原因是System.exit(0)会直接退出JVM,而不管正在进行的线程是否已经完成,这可能会产生不可预料的结果,比如有些数据还没有被写回文件,或者数据库连接还没有关闭。
                        //相比之下,return 会让当前线程返回到调用点,JVM 会在所有线程都执行完毕之后自动退出,确保程序可以正常结束而不会导致不必要的问题。
                        System.out.println("欢迎再来");
                        return;
                    }
                    default -> System.out.println("没有这个选项");
                }
            } catch (Exception e) {
                System.out.println("输入错误!");
            }
        }
        System.out.println("欢迎用户登录!");
    }

    //选项:注册
    private static void register(ArrayList<User> list) {
        System.out.println("欢迎注册");
        String username, password, ID, phoneNumber;
        Scanner scanner = new Scanner(System.in);
        //在先前的做法中我的username是直接通过方法来得到的。
        //但是老师的做法是通过方法检查username那么是否正确,在这个方法中来录入数。
        //先前的做法当中,每一个方法里面都要写scanner,还是老师的方法更好。
        //用户名输入与检测,下面四个部分的检测基本上都是if else的逻辑,输入正确停止循环,密码的输入稍微有些不一样(因为那个模块比较简单)
        while (true) {
            System.out.println("请输入用户名(3-15位字母加数字且不能为纯数字):");
            username = scanner.next();
            if (!checkUsername(username)) {
                continue;
            }
            if (contains(list, username)) {
                System.out.println("已存在该用户名");
                continue;
            }
            break;
        }
        //密码的输入与检测
        while (true) {
            System.out.println("请输入用密码两次:");
            password = scanner.next();
            String password2 = scanner.next();
            if (password.equals(password2)) {
                System.out.println("密码符合要求");
                break;
            } else {
                System.out.println("两次输入密码不一致,重输");
            }
        }
        //身份证的输入与检测
        while (true) {
            System.out.println("输入身份证号码:");
            ID = scanner.next();
            if (checkID(ID)) {
                System.out.println("身份证正确");
                break;
            } else System.out.println("身份证错误,重输");
        }
        //电话号码的输入与检测
        while (true) {
            System.out.println("输入电话号码:");
            phoneNumber = scanner.next();
            if (checkPhoneNumber(phoneNumber)) {
                System.out.println("电话号码正确");
                break;
            } else System.out.println("电话号码错误");
        }
        //加入集合
        User user = new User(username, password, ID, phoneNumber);
        list.add(user);
        printList(list);
    }

    //功能:检查用户名
    private static boolean checkUsername(String username) {
        //1.一般来讲是先验证格式是否正确,再去校验是否唯一:数据一般存储在数据库当中,需要使用网络资源
        //我的之前的做法是,全部检验一遍。。。。。
        //2.去除flag,使用return用来判断输入,提升效率

        //使用变量存储数据提高运行效率
        int len = username.length();
        if (len < 3 || len > 15) {
            System.out.println("用户名长度不符合标准");
            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')) {
                System.out.println("只能为字母或者数字");
                return false;
            }
        }

        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if (c > 'a' && c < 'z' || c > 'A' && c < 'Z') {
                return true;
            }
        }
        System.out.println("不能为纯数字");
        return false;
    }

    //功能:检查身份证
    private static boolean checkID(String ID) {
        //看看两种不同的写法:这一种returnID的方式的结构更加清晰,主要是面向重点不同
        //之前的版本里面重点在于录入,这里的重点在于判断字符串
        //之前的版本要创建多个Scanner,这个版本不需要
        //之前的版本要创建多个flag判断对错,这个不需要,遇到错误直接return就可以了
        // (之前的版本在使用charAt的时候出现了数组越界的错误。但是被我统一try-catch掉了。花了一点时间才发现。)
        if (ID.length() != 18) {
            System.out.println("身份证长度需要18位");
            return false;
        }
        if (ID.startsWith("0")) {//也可以用charAt,这里是新知识点,是0开头返回true,否则返回false
            System.out.println("身份证第一位不能为0!");
            return false;
        }
        for (int i = 0; i < ID.length() - 1; i++) {
            if (ID.charAt(i) < '0' || ID.charAt(i) > '9') {
                System.out.println("身份证前十七位必须为数字!");
                return false;
            }
        }
        char c = ID.charAt(ID.length() - 1);
        if ((c > '9' || c < '0') && c != 'x' && c != 'X') {
            System.out.println("身份证最后一位不是数字也不是X或者x!");
            return false;
        }
        return true;
    }

    //功能:检查电话号码
    private static boolean checkPhoneNumber(String phoneNumber) {
        if (phoneNumber.length() != 11) {
            System.out.println("电话号码长度必须为11");
            return false;
        }
        if (phoneNumber.startsWith("0")) {
            System.out.println("电话号码第一位必须不为0");
            return false;
        }
        for (int i = 0; i < phoneNumber.length(); i++) {
            char c = phoneNumber.charAt(i);
            if (c > '9' || c < '0') {
                System.out.println("电话号码长度必须全部是数字!");
                return false;
            }
        }
        return true;
    }

    //选项:登录
    private static boolean login(ArrayList<User> list) {
        //这个模块本来是用户名密码验证码同时判断
        System.out.println("欢迎登录");
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入用户名:");
        String username = scanner.next();
        int index = getIndex(list, username);
        //这里把注册用户提到前面
        if (index < 0) {
            System.out.println("用户名未注册,请先注册");
            return false;
        }
        for (int i = 0; i < 3; i++) {
            System.out.println("输入密码:");
            String password = scanner.next();
            //判断验证码:验证码错误不减少机会
            while (true) {
                String str = getString();
                System.out.println("输入验证码:" + str);
                String myStr = scanner.next();
                if (!str.equalsIgnoreCase(myStr)) {
                    System.out.println("验证码输入错误");
                    continue;
                }
                break;
            }
            if (list.get(index).getPassword().equals(password)) {
                System.out.println("用户名密码验证码正确");
                return true;
            }
            System.out.println("密码或者验证码错误,请重新输入密码和验证码:还有" + (2 - i) + "次机会");
        }
        System.out.println("输入次数已经用完!");
        return false;
    }

    //选项:忘记密码
    private static void forgetPassword(ArrayList<User> list) {
        System.out.println("输入用户名:");
        Scanner scanner = new Scanner(System.in);
        String username = scanner.next();
        int index = getIndex(list, username);
        //先判断错误:再进行接下来的操作:主要是为了避免在if里面的多层嵌套导致代码繁杂
        if (index < 0) {
            System.out.println("用户名未注册,请先注册");
            return;
        }
        System.out.println("输入身份证和手机号码:");
        String ID = scanner.next();
        String phoneNumber = scanner.next();
        User user = list.get(index);
        //在进行身份证号码比较的时候忽略大小写:主要是最后的X的判断不区分大小写
        //你可以对比一下,少了if的嵌套循环,代码清晰很多:主要是使用了return返回结束方法。
        //这才发现:原来我的if else都写不好。。。。
        //重要的一课:if后能尽量免除else减少嵌套(当代码量多的时候)
        if (!(user.getID().equalsIgnoreCase(ID) && user.getPhoneNumber().equals(phoneNumber))) {
            System.out.println("信息不对,修改失败");
            return;
        }
        String password;
        while (true) {
            System.out.println("输入密码进行修改:");
            password = scanner.next();
            System.out.println("再次输入密码进行验证:");
            String password2 = scanner.next();
            if (password.equals(password2)) {
                user.setPassword(password);
                System.out.println("密码输入正确,修改完成!");
                break;
            }
            System.out.println("两次密码不一致,重新输入:");
        }
    }

    //功能;根据用户名返回下标
    private static int getIndex(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getUsername().equals(username)) {
                return i;
            }
        }
        return -1;
    }

    //功能:根据用户名判断是否存在于集合中
    private static boolean contains(ArrayList<User> list, String username) {
        return getIndex(list, username) >= 0;
    }

    //功能;得到随机字母加数字共五位的字符串(一个数字随机位置):
    private static String getString() {
        /*char[] chars = new char[52];
        for (int i = 0; i < 26; i++) {
            chars[i] = (char) ('a' + i);
            chars[i + 26] = (char) ('A' + i);
        }*/
        //存储字符:这里使用集合代替数组,空间占用更大一点:不过,意在方便与练习
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            //同样是循环26次,两个代码可以写道同一行
            list.add((char) ('a' + i));
            list.add((char) ('A' + i));
        }
        //老师这里是用的StringBuilder:但是我不知道怎么给最后一位的数字换位置
        //老师的方法是把sb转换成String再转换成toCharArray再去调整。觉得有些许麻烦,这里就不改了。
        char[] str = new char[5];
        Random random = new Random();
        for (int i = 0; i < 4; i++) {
            //JDK5之后,char与Character可以相互转换,后面会学习
            str[i] = list.get(random.nextInt(list.size()));
        }
        str[4] = (char) ('0' + random.nextInt(10));
        //随机数字出现位置
        int i = random.nextInt(5);
        char temp = str[str.length - 1];
        str[str.length - 1] = str[i];
        str[i] = temp;
        return new String(str);
    }

    //功能:打印集合
    private static void printList(ArrayList<User> list) {
        System.out.println("姓名" + '\t' + "密码" + '\t' + "身份证" + '\t' + "手机号");
        for (User user : list) {
            System.out.println(user.getUsername() + '\t' + user.getPassword() + '\t' + user.getID() + '\t' + user.getPhoneNumber());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值