当前位置: 首页 > article >正文

java后端开发day19--学生管理系统升级

在这里插入图片描述
(以下内容全部来自上述课程)

1.要求及思路

1.总体框架

请添加图片描述

2.注册

请添加图片描述

3.登录

请添加图片描述

4.忘记密码

请添加图片描述

2.代码

1.javabean

public class User1 {
    private String username;
    private String password;
    private String personID;
    private String phoneNumber;

    public User1() {
    }

    public User1(String username, String password, String personID, String phoneNumber) {
        this.username = username;
        this.password = password;
        this.personID = personID;
        this.phoneNumber = phoneNumber;
    }

    /**
     * 获取
     * @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 personID
     */
    public String getPersonID() {
        return personID;
    }

    /**
     * 设置
     * @param personID
     */
    public void setPersonID(String personID) {
        this.personID = personID;
    }

    /**
     * 获取
     * @return phoneNumber
     */
    public String getPhoneNumber() {
        return phoneNumber;
    }

    /**
     * 设置
     * @param phoneNumber
     */
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String toString() {
        return "User1{username = " + username + ", password = " + password + ", personID = " + personID + ", phoneNumber = " + phoneNumber + "}";
    }
}

2.测试类

1.注册
1.检查用户名是否唯一
private static boolean checkUsernameIsExist(String username, ArrayList<User1> list) {
        //遍历集合,获取每一个用户名,和输入的用户名进行比较
        for (int i = 0; i < list.size(); i++) {
            User1 user = list.get(i);
            String name = user.getUsername();
            if (name.equals(username)) {
                return true;
            }
        }
        return false;
    }
2.检查用户名格式是否正确
 private static boolean checkUsername (String username){
        //用户名必须是3-15位的数字和字母
        int length = username.length();
        if (length < 3 || length > 15) {
            System.out.println("用户名必须是5-15位的数字和字母");
            return false;
        }
        //用户名必须是数字和字母组成
        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;
            }
        }
        //用户名满足要求
        return count > 0;
    }
3.检查身份证号格式是否正确
private static boolean checkPersonID(String personID) {
        //身份证号必须是18位的数字和字母
        int length = personID.length();
        if (length != 18) {
            System.out.println("身份证号必须是18位的数字和字母");
            return false;
        }
        //不能以0开头
        if (personID.startsWith("0")) {
            System.out.println("身份证号不能以0开头");
            return false;
        }
        //前17位必须是数字
        for (int i = 0; i < personID.length() - 1; i++) {
            char c = personID.charAt(i);
            if (!(c >= '0' && c <= '9')) {
                System.out.println("身份证号前17位必须是数字");
                return false;
            }
        }
        //最后一位可以是数字或者大写X或者小写x
        char c = personID.charAt(personID.length() - 1);
        if ((c >= '0' && c <= '9') || (c == 'X') || (c =='x')) {
            return true;
        } else {
            return false;
        }
    }

4.检查手机格式是否正确
 private static boolean checkPhoneNumber(String phoneNumber) {
        //手机号必须是11位的数字
        int length = phoneNumber.length();
        if (length!= 11) {
            System.out.println("手机号必须是11位的数字");
            return false;
        }
        //不能以0开头
        if (phoneNumber.startsWith("0")) {
            System.out.println("手机号不能以0开头");
            return false;
        } else {
            return true;
        }
    }
5.注册完整代码
 //注册
    public static void register(ArrayList<User1> list) {
        System.out.println("注册");
        User1 user = new User1();
        //1.键盘录入用户名
        Scanner sc = new Scanner(System.in);
        String username ;
        while (true) {
            System.out.println("请输入用户名:");
            username = sc.next();
            //开发细节:先验证格式是否正确,再验证是否唯一
            //因为在以后的所有数据,都是存在数据库中,如果我们要校验,需要使用网络资源

            boolean flag1 = checkUsername(username);
            if (!flag1) {
                System.out.println("用户名格式不正确,请重新输入:");
                continue;
            }
            //用户名格式正确,需要验证是否唯一
            boolean flag2 = checkUsernameIsExist(username, list);
            if (flag2) {
                //用户名已存在
                System.out.println("用户名"+username+"已经存在,请重新输入:");
            } else {
                //不存在,可用
                System.out.println("用户名"+username+"可以使用");
            }
            break;
        }

        //2.键盘录入密码
        String password ;
        while (true) {
            System.out.println("请输入密码:");
            password = sc.next();
            System.out.println("请再次输入密码:");
            String password2 = sc.next();
            if (password.equals(password2)) {
                System.out.println("密码输入正确");
                break;
            } else {
                System.out.println("密码输入错误,请重新输入:");
                continue;
            }
        }

        //3.键盘录入身份证号
        String personID ;
        while (true) {
            System.out.println("请输入身份证号:");
            personID = sc.next();
            boolean flag3 = checkPersonID(personID);
            if (flag3) {
                System.out.println("身份证号格式正确");
                break;
            } else {
                System.out.println("身份证号格式不正确,请重新输入:");
                continue;
            }
        }

        //4.键盘录入手机号
        String phoneNumber ;
        while (true) {
            System.out.println("请输入手机号:");
            phoneNumber = sc.next();
            boolean flag4 = checkPhoneNumber(phoneNumber);
            if (flag4) {
                System.out.println("手机号格式正确");
                break;
            } else {
                System.out.println("手机号格式不正确,请重新输入:");
                continue;
            }
        }

        //将用户对象添加到集合中
        User1 user1 = new User1(username, password, personID, phoneNumber);
        list.add(user1);
        System.out.println("注册成功");
    }

2.登录
1.检查用户名和密码是否正确
private static boolean checkUserInfo(User1 userInfo, ArrayList<User1> list) {
        //遍历集合,判断用户是否存在,如果不存在登陆失败
        for (int i = 0; i < list.size(); i++) {
            User1 user = list.get(i);
            if (user.getUsername().equals(userInfo.getUsername()) && user.getPassword().
                    equals(userInfo.getPassword())) {
                return true;
            }
        }
        return false;
    }
2.生成随机验证码
public static String getRandomCode() {
        //1.创建一个集合添加所有的大写字母和小写字母
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char) ('a' + i));
            list.add((char) ('A' + i));
        }

        StringBuilder sb = new StringBuilder();
        //2.随机抽取4个字母
        Random r = new Random();
        String code = "";
        for (int i = 0; i < 4; i++) {
            //获取随机索引
            int index = r.nextInt(list.size());
            //获取随机字符
            char c = list.get(index);
            //添加到字符串中
            sb.append(c);
        }
        //3.把一个随机数字添加到末尾
        int number = r.nextInt(10);
        sb.append(number);
        //4.如果我们要修改字符串中的内容
        //先把字符串变成字符数组,在数组中修改,然后把字符数组变成字符串
        char[] chars = sb.toString().toCharArray();
        //拿着最后一个索引,跟随机索引进行交换
        int index2 = r.nextInt(chars.length);
        char temp = chars[index2];
        chars[index2] = chars[chars.length - 1];
        chars[chars.length - 1] = temp;
        //5.把字符数组变成字符串
        String result = new String(chars);
        return result;
    }

登录完整代码
private static void login(ArrayList<User1> list) {
        System.out.println("登录");
        Scanner sc = new Scanner(System.in);
        //1.键盘录入用户名
        while (true) {
            System.out.println("请输入用户名:");
            String username = sc.next();
            //判断用户名是否存在
            boolean result = checkUsernameIsExist(username, list);
            if (!result) {
                System.out.println("用户名"+username+"不存在,请先注册再登录");
                return;
            }
            //2.输入密码和验证码
            System.out.println("请输入密码:");
            String password = sc.next();

            while (true) {
                //输入验证码
                String rightcode = getRandomCode();
                System.out.println("验证码:"+rightcode);
                System.out.println("请输入验证码:");
                String code = sc.next();

                //比较验证码
                String randomCode = getRandomCode();
                if (code.equalsIgnoreCase(rightcode)) {
                    System.out.println("验证码正确");
                    break;
                } else {
                    System.out.println("验证码错误");
                    return;
                }
            }
            //3.判断用户名和密码是否正确
            //封装思想的应用:
            //我们把一些零散的数据,封装成一个对象
            //以后传递参数的时候,只要传递一个整体就可以了,不需要管这些零散的数据
            User1 userInfo = new User1(username, password,null,null);
            if (checkUserInfo(userInfo, list)) {
                System.out.println("登录成功,欢迎使用学生管理系统");
            } else {
                System.out.println("用户名或密码错误");
            }
        }
    }
3.忘记密码
1.根据用户名和身份证号和手机号查找用户的索引
private static int findUserIndex(String username, ArrayList<User1> list) {
        for (int i = 0; i < list.size(); i++) {
            User1 user = list.get(i);
            if (user.getUsername().equals(username)) {
                return i;
            }
        }
        return -1;
    }
2.忘记密码整体代码
private static void forgetPassword(ArrayList<User1> list) {
        System.out.println("忘记密码");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = sc.next();
        boolean flag = checkUsernameIsExist(username, list);
        if (!flag) {
            System.out.println("用户名"+username+"不存在,请先注册再登录");
            return;
        }
        System.out.println("请输入身份证号:");
        String personID = sc.next();
        System.out.println("请输入手机号:");
        String phoneNumber = sc.next();

        //比较用户名和身份证号和手机号是否正确
        int index = findUserIndex(username, list);
        User1 user = list.get(index);
        if (user.getPhoneNumber().equals(phoneNumber) && user.getPersonID().equalsIgnoreCase(personID)) {
            System.out.println("用户名或身份证号或手机号错误");
            return;
        }
        //修改密码
        String password;
        while (true) {
            System.out.println("请输入新密码:");
            password = sc.next();
            System.out.println("请再次输入新密码:");
            String password2 = sc.next();
            if (password.equals(password2)) {
                System.out.println("两次密码一致,修改成功");
                break;
            } else {
                System.out.println("密码输入错误,请重新输入:");
                continue;
            }
        }
        //修改密码
        user.setPassword(password);
        System.out.println("密码修改成功");

    }

3.测试类完整代码

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

public class StudentUpdate {
    public static void main(String[] args) {

        //1.登录界面
        System.out.println("欢迎使用学生管理系统");
        System.out.println("请选择操作:1.登录 2.注册 3.忘记密码 4.退出");
        ArrayList<User1> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        String choose = sc.next();
        while (true) {
            switch (choose) {
                case "1":
                    login(list);
                    break;
                case "2":
                    register(list);
                    break;
                case "3":
                    forgetPassword(list);
                    break;
                    case "4":
                    System.out.println("退出系统");
                    System.exit(0);
                default:
                    System.out.println("输入有误");
            }
            //重新获取输入
            System.out.println("请选择操作:1.登录 2.注册 3.忘记密码 4.退出");
            choose = sc.next();
        }
    }

    //注册
    public static void register(ArrayList<User1> list) {
        System.out.println("注册");
        User1 user = new User1();
        //1.键盘录入用户名
        Scanner sc = new Scanner(System.in);
        String username ;
        while (true) {
            System.out.println("请输入用户名:");
            username = sc.next();
            //开发细节:先验证格式是否正确,再验证是否唯一
            //因为在以后的所有数据,都是存在数据库中,如果我们要校验,需要使用网络资源

            boolean flag1 = checkUsername(username);
            if (!flag1) {
                System.out.println("用户名格式不正确,请重新输入:");
                continue;
            }
            //用户名格式正确,需要验证是否唯一
            boolean flag2 = checkUsernameIsExist(username, list);
            if (flag2) {
                //用户名已存在
                System.out.println("用户名"+username+"已经存在,请重新输入:");
            } else {
                //不存在,可用
                System.out.println("用户名"+username+"可以使用");
            }
            break;
        }

        //2.键盘录入密码
        String password ;
        while (true) {
            System.out.println("请输入密码:");
            password = sc.next();
            System.out.println("请再次输入密码:");
            String password2 = sc.next();
            if (password.equals(password2)) {
                System.out.println("密码输入正确");
                break;
            } else {
                System.out.println("密码输入错误,请重新输入:");
                continue;
            }
        }

        //3.键盘录入身份证号
        String personID ;
        while (true) {
            System.out.println("请输入身份证号:");
            personID = sc.next();
            boolean flag3 = checkPersonID(personID);
            if (flag3) {
                System.out.println("身份证号格式正确");
                break;
            } else {
                System.out.println("身份证号格式不正确,请重新输入:");
                continue;
            }
        }

        //4.键盘录入手机号
        String phoneNumber ;
        while (true) {
            System.out.println("请输入手机号:");
            phoneNumber = sc.next();
            boolean flag4 = checkPhoneNumber(phoneNumber);
            if (flag4) {
                System.out.println("手机号格式正确");
                break;
            } else {
                System.out.println("手机号格式不正确,请重新输入:");
                continue;
            }
        }

        //将用户对象添加到集合中
        User1 user1 = new User1(username, password, personID, phoneNumber);
        list.add(user1);
        System.out.println("注册成功");
    }

    //检查用户名格式是否正确
    private static boolean checkUsername (String username){
        //用户名必须是3-15位的数字和字母
        int length = username.length();
        if (length < 3 || length > 15) {
            System.out.println("用户名必须是5-15位的数字和字母");
            return false;
        }
        //用户名必须是数字和字母组成
        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;
            }
        }
        //用户名满足要求
        return count > 0;
    }

    //检查用户名是否唯一
    private static boolean checkUsernameIsExist(String username, ArrayList<User1> list) {
        //遍历集合,获取每一个用户名,和输入的用户名进行比较
        for (int i = 0; i < list.size(); i++) {
            User1 user = list.get(i);
            String name = user.getUsername();
            if (name.equals(username)) {
                return true;
            }
        }
        return false;
    }

    //检查身份证号格式是否正确
    private static boolean checkPersonID(String personID) {
        //身份证号必须是18位的数字和字母
        int length = personID.length();
        if (length != 18) {
            System.out.println("身份证号必须是18位的数字和字母");
            return false;
        }
        //不能以0开头
        if (personID.startsWith("0")) {
            System.out.println("身份证号不能以0开头");
            return false;
        }
        //前17位必须是数字
        for (int i = 0; i < personID.length() - 1; i++) {
            char c = personID.charAt(i);
            if (!(c >= '0' && c <= '9')) {
                System.out.println("身份证号前17位必须是数字");
                return false;
            }
        }
        //最后一位可以是数字或者大写X或者小写x
        char c = personID.charAt(personID.length() - 1);
        if ((c >= '0' && c <= '9') || (c == 'X') || (c =='x')) {
            return true;
        } else {
            return false;
        }
    }

    //检查手机号格式是否正确
    private static boolean checkPhoneNumber(String phoneNumber) {
        //手机号必须是11位的数字
        int length = phoneNumber.length();
        if (length!= 11) {
            System.out.println("手机号必须是11位的数字");
            return false;
        }
        //不能以0开头
        if (phoneNumber.startsWith("0")) {
            System.out.println("手机号不能以0开头");
            return false;
        } else {
            return true;
        }
    }



    //登录
    private static void login(ArrayList<User1> list) {
        System.out.println("登录");
        Scanner sc = new Scanner(System.in);
        //1.键盘录入用户名
        while (true) {
            System.out.println("请输入用户名:");
            String username = sc.next();
            //判断用户名是否存在
            boolean result = checkUsernameIsExist(username, list);
            if (!result) {
                System.out.println("用户名"+username+"不存在,请先注册再登录");
                return;
            }
            //2.输入密码和验证码
            System.out.println("请输入密码:");
            String password = sc.next();

            while (true) {
                //输入验证码
                String rightcode = getRandomCode();
                System.out.println("验证码:"+rightcode);
                System.out.println("请输入验证码:");
                String code = sc.next();

                //比较验证码
                String randomCode = getRandomCode();
                if (code.equalsIgnoreCase(rightcode)) {
                    System.out.println("验证码正确");
                    break;
                } else {
                    System.out.println("验证码错误");
                    return;
                }
            }
            //3.判断用户名和密码是否正确
            //封装思想的应用:
            //我们把一些零散的数据,封装成一个对象
            //以后传递参数的时候,只要传递一个整体就可以了,不需要管这些零散的数据
            User1 userInfo = new User1(username, password,null,null);
            if (checkUserInfo(userInfo, list)) {
                System.out.println("登录成功,欢迎使用学生管理系统");
            } else {
                System.out.println("用户名或密码错误");
            }
        }
    }

    //检查用户名和密码是否正确
    private static boolean checkUserInfo(User1 userInfo, ArrayList<User1> list) {
        //遍历集合,判断用户是否存在,如果不存在登陆失败
        for (int i = 0; i < list.size(); i++) {
            User1 user = list.get(i);
            if (user.getUsername().equals(userInfo.getUsername()) && user.getPassword().
                    equals(userInfo.getPassword())) {
                return true;
            }
        }
        return false;
    }


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

        StringBuilder sb = new StringBuilder();
        //2.随机抽取4个字母
        Random r = new Random();
        String code = "";
        for (int i = 0; i < 4; i++) {
            //获取随机索引
            int index = r.nextInt(list.size());
            //获取随机字符
            char c = list.get(index);
            //添加到字符串中
            sb.append(c);
        }
        //3.把一个随机数字添加到末尾
        int number = r.nextInt(10);
        sb.append(number);
        //4.如果我们要修改字符串中的内容
        //先把字符串变成字符数组,在数组中修改,然后把字符数组变成字符串
        char[] chars = sb.toString().toCharArray();
        //拿着最后一个索引,跟随机索引进行交换
        int index2 = r.nextInt(chars.length);
        char temp = chars[index2];
        chars[index2] = chars[chars.length - 1];
        chars[chars.length - 1] = temp;
        //5.把字符数组变成字符串
        String result = new String(chars);
        return result;
    }

   //忘记密码
    private static void forgetPassword(ArrayList<User1> list) {
        System.out.println("忘记密码");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = sc.next();
        boolean flag = checkUsernameIsExist(username, list);
        if (!flag) {
            System.out.println("用户名"+username+"不存在,请先注册再登录");
            return;
        }
        System.out.println("请输入身份证号:");
        String personID = sc.next();
        System.out.println("请输入手机号:");
        String phoneNumber = sc.next();

        //比较用户名和身份证号和手机号是否正确
        int index = findUserIndex(username, list);
        User1 user = list.get(index);
        if (user.getPhoneNumber().equals(phoneNumber) && user.getPersonID().equalsIgnoreCase(personID)) {
            System.out.println("用户名或身份证号或手机号错误");
            return;
        }
        //修改密码
        String password;
        while (true) {
            System.out.println("请输入新密码:");
            password = sc.next();
            System.out.println("请再次输入新密码:");
            String password2 = sc.next();
            if (password.equals(password2)) {
                System.out.println("两次密码一致,修改成功");
                break;
            } else {
                System.out.println("密码输入错误,请重新输入:");
                continue;
            }
        }
        //修改密码
        user.setPassword(password);
        System.out.println("密码修改成功");

    }

    //根据用户名和身份证号和手机号查找用户的索引
    private static int findUserIndex(String username, ArrayList<User1> list) {
        for (int i = 0; i < list.size(); i++) {
            User1 user = list.get(i);
            if (user.getUsername().equals(username)) {
                return i;
            }
        }
        return -1;
    }
}


3.总结思考

1.总体框架

这个其实比较好思考,switch直接分几个板块,然后再分别写方法类。
难的是具体代码的实现,需要用到的条件判断,关系语句,还有各种循环嵌套。
尤其是continue,break,return各自运用的时候。(是的,总踩坑。)
while(true)一定要记得break,否则下面的代码就会报错。(无法到达此语句)

2.具体细节

调用的API必须明白同类不同名之间的不同,比如equals和另外一个不区分大小写的。
心里必须清楚自己所命名的各个变量表示的真实含义,比较做判断的时候避免误用。
条件语句中,重要的是字符之间的表现形式:都是数字,必须有字母,大小写什么的。
结束后能重新输入,就需要用到while(true)。
循环结束后才能进行判断的,需要在循环外返回。
flag作为判断值,要自己弄明白true和false各具体代表什么,不同板块需要换不同的名称表示判断值。
还有,方法类中不要加输出语句。(痛)

3.最后

总之就是多动脑。
写不出来就画个图,然后想想每个变量之间的联系。
每个代码块感觉可以变成简单的算法题,所以又拆开复制了一遍。
其实每个大的系统都是由这种基础的代码块拼凑成的。
(终于搞完了,谢天谢地)


http://www.kler.cn/a/558534.html

相关文章:

  • [MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction
  • Linux命令大全完整版(02)
  • 【漫话机器学习系列】101.特征选择法之Lasso(Lasso For Feature Selection)
  • 【力扣Hot 100】堆
  • 【uni-app】对齐胶囊容器组件
  • Future和FutureTask实现类详解以及使用。
  • 阿里云CDN转https个人测试证书过期更换
  • CentOS 7.9 解决 python3 报错 ModuleNotFoundError: No module named ‘_ssl‘ 的问题
  • Gradio全解11——使用transformers.agents构建Gradio UI(6)
  • 字节跳动2面、美团2面Java面试真题总结
  • 跟着 Lua 5.1 官方参考文档学习 Lua (7)
  • vscode settings(一):全局| 用户设置常用的设置项
  • UE_C++ —— Delegates
  • Selenium控制已经打开的浏览器(Chrome,Edge)
  • 计算机网络之路由协议(RIP路由协议)
  • 选择排序(详解)c++
  • 智能控制基础应用-C#Codesys共享内存实现数据高速交互
  • 十、OSG学习笔记-多线程(OpenThreads)
  • android 网络防护 手机网络安全怎么防
  • ArcGIS Pro在洪水淹没分析中的应用与实践