Notas de revisión de Java: sistema avanzado de gestión de estudiantes


Versión avanzada del sistema de gestión de estudiantes.

1. Parte de la demanda

(1) Demanda

Escriba una función de inicio de sesión, registro y contraseña olvidada para el sistema de gestión de estudiantes.

Solo después de que el usuario inicie sesión correctamente, podrá ingresar al sistema de gestión de estudiantes para realizar operaciones de agregar, eliminar, modificar y verificar.

(2) Análisis

1. Interfaz de inicio de sesión

System.out.println("-------------欢迎来到学生管理系统-------------");
System.out.println("请选择操作:1登录 2注册 3忘记密码");

2. clase de usuario

Atributos: nombre de usuario, contraseña, número de identificación, número de teléfono móvil

3. Función de registro

1. El nombre de usuario debe cumplir con los siguientes requisitos:
Requisitos de verificación:

  • El nombre de usuario es único
  • La longitud del nombre de usuario debe tener entre 3 y 15 caracteres.
  • Sólo puede ser una combinación de letras y números, pero no números puros.

2. Ingrese la contraseña dos veces en el teclado y podrá registrarse solo si las dos veces son consistentes.

3. Es necesario verificar el número de identificación.
Requisitos de verificación:

  • La longitud es de 18 bits.
  • No se puede empezar con 0
  • Los primeros 17 dígitos deben ser todos números.
  • El último dígito puede ser un número, X mayúscula o X minúscula.

4. Verificación del número de teléfono móvil.
Requisitos de verificación:

  • La longitud es de 11 dígitos.
  • No se puede empezar con 0
  • Todos deben ser números.

4. Función de inicio de sesión

1. Ingrese el nombre de usuario usando el teclado.

2. Ingrese la contraseña usando el teclado

3. Código de verificación de entrada del teclado

Requisitos de verificación:

  • Si el nombre de usuario no está registrado, el método finaliza directamente y solicita: El nombre de usuario no está registrado, regístrese primero.

  • Determine si el código de verificación es correcto. Si es incorrecto, vuelva a ingresarlo.

  • Luego verifique si el nombre de usuario y la contraseña son correctos, hay 3 posibilidades.

5. Olvidé mi contraseña

1. Ingrese el nombre de usuario con el teclado y determine si el nombre de usuario actual existe, si no existe, finalice el método directamente y solicite: No registrado.

2. Introduce el número de DNI y el número de teléfono móvil mediante el teclado

3. Determine si el número de identificación del usuario actual y el número de teléfono móvil son consistentes. Si son consistentes, le pedirá que ingrese la contraseña y la modifique; si son inconsistentes, le preguntará: La información de la cuenta no coincide y el la modificación falló.

6. Reglas del código de verificación

  • La longitud es 5

  • Consta de 4 letras mayúsculas o minúsculas y 1 número. Se puede repetir la misma letra.

  • Los números pueden aparecer en cualquier lugar.

  • Por ejemplo: aQa1K

2. Parte de implementación

(1) Interfaz de inicio de sesión

Para escribir una página de inicio de sesión para un sistema de gestión de estudiantes, puede seguir el siguiente ejemplo de código:

import java.util.Scanner;

public class LoginSystem {
    
    
    public static void main(String[] args) {
    
    
        Scanner input = new Scanner(System.in);

        System.out.println("-------------欢迎来到学生管理系统-------------");
        System.out.println("请选择操作:1登录 2注册 3忘记密码");

        int choice = input.nextInt();
        switch (choice) {
    
    
            case 1:
                login();
                break;
            case 2:
                register();
                break;
            case 3:
                forgetPassword();
                break;
            default:
                System.out.println("无效的选择");
                break;
        }
    }

    public static void login() {
    
    
        // TODO: 实现登录逻辑
    }

    public static void register() {
    
    
        // TODO: 实现注册逻辑
    }

    public static void forgetPassword() {
    
    
        // TODO: 实现忘记密码逻辑
    }
}

En el código anterior, primero usamos Scanneruna clase para crear un objeto que recibe la entrada del usuario input. Luego imprima el mensaje de bienvenida y las opciones de operación. A continuación, según la selección del usuario, utilice switchla declaración para llamar al método correspondiente, es decir login(), register()o forgetPassword().

Puede implementar la lógica específica de inicio de sesión, registro y contraseña olvidada en login()los métodos register()y . forgetPassword()Dependiendo de las necesidades reales, se puede utilizar una base de datos o un archivo para almacenar y verificar la información del usuario. Estos métodos quedan para que usted los implemente usted mismo.

(2) Escribir métodos para implementar la función de registro.

Puede seguir el siguiente ejemplo de código para escribir un método de registro:

public static void register() {
    
    
    Scanner input = new Scanner(System.in);

    System.out.print("请输入用户名:");
    String username = input.nextLine();

    // 校验用户名
    if (!validateUsername(username)) {
    
    
        System.out.println("用户名不符合要求,请重新注册");
        return;
    }

    System.out.print("请输入密码:");
    String password1 = input.nextLine();

    System.out.print("请再次输入密码:");
    String password2 = input.nextLine();

    // 校验密码
    if (!validatePassword(password1, password2)) {
    
    
        System.out.println("两次输入的密码不一致,请重新注册");
        return;
    }
    
    System.out.print("请输入身份证号码:");
    String idNumber = input.nextLine();
    
    // 校验身份证号码
    if (!validateIdNumber(idNumber)) {
    
    
        System.out.println("身份证号码不符合要求,请重新注册");
        return;
    }
    
    System.out.print("请输入手机号:");
    String phoneNumber = input.nextLine();
    
    // 校验手机号
    if (!validatePhoneNumber(phoneNumber)) {
    
    
        System.out.println("手机号码不符合要求,请重新注册");
        return;
    }

    // 注册成功
    System.out.println("注册成功");
}

public static boolean validateUsername(String username) {
    
    
    // 校验用户名是否唯一
    // TODO: 根据实际需求,编写判断用户名是否唯一的代码

    // 校验用户名长度
    int length = username.length();
    if (length < 3 || length > 15) {
    
    
        return false;
    }

    // 校验用户名是否是字母加数字的组合,但不能是纯数字
    if (!username.matches("^(?=.*[a-zA-Z])(?=.*\\d)[a-zA-Z\\d]+$") || username.matches("^\\d+$")) {
    
    
        return false;
    }

    return true;
}

public static boolean validatePassword(String password1, String password2) {
    
    
    // 校验两次输入的密码是否一致
    return password1.equals(password2);
}

public static boolean validateIdNumber(String idNumber) {
    
    
    // 校验身份证号码长度和开头是否满足要求
    if (idNumber.length() != 18 || idNumber.startsWith("0")) {
    
    
        return false;
    }

    // 校验前17位是否都是数字
    String idNumber17 = idNumber.substring(0, 17);
    if (!idNumber17.matches("^\\d{17}$")) {
    
    
        return false;
    }

    // 校验最后一位是否是数字或大写X或小写x
    String lastChar = idNumber.substring(17);
    if (!lastChar.matches("^\\d|[Xx]$")) {
    
    
        return false;
    }

    return true;
}

public static boolean validatePhoneNumber(String phoneNumber) {
    
    
    // 校验手机号码长度和开头是否满足要求
    if (phoneNumber.length() != 11 || phoneNumber.startsWith("0")) {
    
    
        return false;
    }

    // 校验是否都是数字
    if (!phoneNumber.matches("^\\d+$")) {
    
    
        return false;
    }

    return true;
}

En el código anterior, primero usamos Scanneruna clase para crear un objeto que recibe la entrada del usuario input. Luego, utilice validateUsername()el método para verificar si el nombre de usuario cumple con los requisitos. En este método, primero debemos escribir código para determinar si el nombre de usuario es único según las necesidades reales. Luego, verifique si el nombre de usuario tiene entre 3 y 15 caracteres de longitud y si es una combinación de letras y números, pero no puede ser números puros.

Luego, utilice validatePassword()el método para verificar si las contraseñas ingresadas dos veces son consistentes.

Luego, utilice validateIdNumber()métodos para verificar si el número de identificación cumple con los requisitos. En este método, primero verificamos si la longitud y el comienzo del número de identificación cumplen con los requisitos, luego verificamos si los primeros 17 dígitos son todos números y si el último dígito es un número o X mayúscula o X minúscula.

Finalmente, utilice validatePhoneNumber()métodos para verificar si el número de teléfono móvil cumple con los requisitos. En este método, verificamos si la longitud y el comienzo del número de teléfono móvil cumplen con los requisitos y si es un número puro.

Si se pasan todas las verificaciones, aparecerá un mensaje indicando que el registro se realizó correctamente.

Cabe señalar que la lógica de verificación en el código anterior es solo un ejemplo simple. En el desarrollo real, es posible que deba realizar una verificación más estricta y completa según necesidades específicas. Por ejemplo, puede utilizar expresiones regulares, bibliotecas externas, bases de datos, etc. para implementar una lógica de verificación más compleja.

(3) Escribir métodos para implementar la función de inicio de sesión.

Puede seguir el siguiente ejemplo de código para escribir un método de inicio de sesión:

public static void login() {
    
    
    String username = "admin"; // 假设已注册的用户名为admin
    String password = "123456"; // 假设密码为123456
    String verificationCode = "aQa1K"; // 假设验证码为aQa1K

    Scanner input = new Scanner(System.in);
    int attempts = 3; // 登录尝试次数

    while (attempts > 0) {
    
    
        System.out.print("请输入用户名:");
        String inputUsername = input.nextLine();

        // 判断用户名是否正确
        if (!inputUsername.equals(username)) {
    
    
            System.out.println("用户名未注册,请先注册");
            return;
        }

        System.out.print("请输入密码:");
        String inputPassword = input.nextLine();

        System.out.print("请输入验证码:");
        String inputVerificationCode = input.nextLine();

        // 判断验证码是否正确
        if (!inputVerificationCode.equals(verificationCode)) {
    
    
            System.out.println("验证码不正确,请重新输入");
            continue;
        }

        // 判断用户名和密码是否正确
        if (inputUsername.equals(username) && inputPassword.equals(password)) {
    
    
            System.out.println("登录成功");
            return;
        } else {
    
    
            attempts--;
            System.out.println("用户名或密码错误,剩余尝试次数:" + attempts);
        }
    }

    System.out.println("登录失败,已达到最大尝试次数");
}

En el código anterior, primero definimos el nombre de usuario registrado admin, la contraseña 123456y el código de verificación aQa1K. Luego use Scannerla clase para crear un objeto que reciba la entrada del usuario input. A continuación, utilice whileun bucle para controlar el número de intentos de inicio de sesión, con un valor inicial de 3.

En el bucle, primero pida al usuario que ingrese un nombre de usuario y luego determine si el nombre de usuario es correcto. Si el nombre de usuario no está registrado, el método finaliza directamente y se le solicita al usuario que se registre primero. Si el nombre de usuario es correcto, se le solicita al usuario que ingrese una contraseña y un código de verificación.

A continuación, determine si el código de verificación es correcto. Si el código de verificación es incorrecto, se le pide al usuario que ingrese el código de verificación nuevamente y el ciclo continúa. Si el código de verificación es correcto, determine si el nombre de usuario y la contraseña son correctos. Si el nombre de usuario y la contraseña son correctos, el inicio de sesión es exitoso y el método finaliza. Si el nombre de usuario o la contraseña son incorrectos, el número de intentos se reducirá en 1 y se solicitará el número de intentos restantes.

Cuando el número de intentos disminuye a 0, el ciclo finaliza y se solicita un error de inicio de sesión.

Este ejemplo simplemente demuestra la lógica del método de inicio de sesión. En el desarrollo real, es necesario combinar requisitos específicos para implementar una función de inicio de sesión más completa y segura. Por ejemplo, puede utilizar una base de datos para almacenar y verificar la información del usuario, utilizar algoritmos de cifrado para cifrar contraseñas, etc.

(4) Escribir métodos para implementar la función de contraseña olvidada

public static void forgetPassword() {
    
    
    Scanner input = new Scanner(System.in);

    System.out.print("请输入用户名:");
    String username = input.nextLine();

    // 判断用户名是否存在
    if (!userMap.containsKey(username)) {
    
    
        System.out.println("未注册");
        return;
    }

    System.out.print("请输入身份证号码:");
    String idNumber = input.nextLine();

    System.out.print("请输入手机号码:");
    String phoneNumber = input.nextLine();

    UserInfo userInfo = userMap.get(username);

    // 判断身份证号码和手机号码是否一致
    if (userInfo.getIdNumber().equals(idNumber) && userInfo.getPhoneNumber().equals(phoneNumber)) {
    
    
        System.out.print("请输入新密码:");
        String newPassword = input.nextLine();

        // 修改密码
        userInfo.setPassword(newPassword);

        System.out.println("密码修改成功");
    } else {
    
    
        System.out.println("账号信息不匹配,修改失败");
    }
}

public static void registerUser(String username, String password, String idNumber, String phoneNumber) {
    
    
    UserInfo userInfo = new UserInfo(username, password, idNumber, phoneNumber);
    userMap.put(username, userInfo);
}

static class UserInfo {
    
    
    private String username;
    private String password;
    private String idNumber;
    private String phoneNumber;

    public UserInfo(String username, String password, String idNumber, String phoneNumber) {
    
    
        this.username = username;
        this.password = password;
        this.idNumber = idNumber;
        this.phoneNumber = phoneNumber;
    }

    public String getUsername() {
    
    
        return username;
    }

    public String getPassword() {
    
    
        return password;
    }

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

    public String getIdNumber() {
    
    
        return idNumber;
    }

    public String getPhoneNumber() {
    
    
        return phoneNumber;
    }
}

(5) Escriba un método para generar un código de verificación.

public static void generateCaptcha() {
    
                      
    StringBuilder captcha = new StringBuilder();        
    Random random = new Random();                       
                                                        
    // 生成4位字母                                           
    for (int i = 0; i < 4; i++) {
    
                           
        char letter = (char) (random.nextInt(26) + 'a');
        captcha.append(letter);                         
    }                                                   
                                                        
    // 生成1位数字                                           
    captcha.append(random.nextInt(10));                 
                                                        
    System.out.println("验证码为:" + captcha.toString());   
}                                                       

(6) Integrar código e implementar el sistema.

package net.army.java.studentmanger;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;

/**
 * 功能:学生管理系统(注册、登录和忘记)
 * 日期:2023年09月02日
 * 作者:梁辰兴
 */

public class StudentManagementSystem {
    
    
    private static Map<String, User> userMap = new HashMap<>();
    private static String loggedInUser = null;
    private static int loginAttempts = 0;

    public static void main(String[] args) {
    
    
        Scanner input = new Scanner(System.in);

        while (true) {
    
    
            System.out.println("-------------欢迎来到学生管理系统-------------");
            System.out.println("请选择操作:1登录 2注册 3忘记密码");

            int choice = input.nextInt();
            input.nextLine(); // 清除输入缓冲区的换行符

            switch (choice) {
    
    
                case 1:
                    login();
                    break;
                case 2:
                    register();
                    break;
                case 3:
                    forgotPassword();
                    break;
                default:
                    System.out.println("无效的操作,请重新选择!");
            }
        }
    }

    public static void generateCaptcha() {
    
    
        StringBuilder captcha = new StringBuilder();
        Random random = new Random();

        // 生成4位字母
        for (int i = 0; i < 4; i++) {
    
    
            char letter = (char) (random.nextInt(26) + 'a');
            captcha.append(letter);
        }

        // 生成1位数字
        captcha.append(random.nextInt(10));

        System.out.println("验证码为:" + captcha.toString());
    }

    public static void login() {
    
    
        Scanner input = new Scanner(System.in);

        System.out.print("请输入用户名:");
        String username = input.nextLine();

        System.out.print("请输入密码:");
        String password = input.nextLine();

        generateCaptcha();
        System.out.print("请输入验证码:");
        String captcha = input.nextLine();

        if (!userMap.containsKey(username)) {
    
    
            System.out.println("用户名未注册,请先注册!");
            return;
        }

        if (!validateCaptcha(captcha)) {
    
    
            System.out.println("验证码错误,请重新输入!");
            return;
        }

        User user = userMap.get(username);
        if (user.getPassword().equals(password)) {
    
    
            loggedInUser = username;
            System.out.println("登录成功!");
        } else {
    
    
            loginAttempts++;
            if (loginAttempts < 3) {
    
    
                System.out.println("用户名或密码错误,请重新输入!");
            } else {
    
    
                System.out.println("登录失败次数过多,退出系统!");
                System.exit(0);
            }
        }
    }

    public static void register() {
    
    
        Scanner input = new Scanner(System.in);

        System.out.print("请输入用户名:");
        String username = input.nextLine();

        if (userMap.containsKey(username)) {
    
    
            System.out.println("用户名已存在,请重新输入!");
            return;
        }

        if (!validateUsername(username)) {
    
    
            System.out.println("用户名不符合要求,请重新输入!");
            return;
        }

        System.out.print("请输入密码:");
        String password1 = input.nextLine();

        System.out.print("请再次输入密码:");
        String password2 = input.nextLine();

        if (!password1.equals(password2)) {
    
    
            System.out.println("两次输入的密码不一致,请重新输入!");
            return;
        }

        System.out.print("请输入身份证号码:");
        String idCard = input.nextLine();

        if (!validateIdCard(idCard)) {
    
    
            System.out.println("身份证号码不符合要求,请重新输入!");
            return;
        }

        System.out.print("请输入手机号码:");
        String phoneNumber = input.nextLine();

        if (!validatePhoneNumber(phoneNumber)) {
    
    
            System.out.println("手机号码不符合要求,请重新输入!");
            return;
        }

        User user = new User(username, password1, idCard, phoneNumber);
        userMap.put(username, user);

        System.out.println("注册成功!");
    }

    public static void forgotPassword() {
    
    
        Scanner input = new Scanner(System.in);

        System.out.print("请输入用户名:");
        String username = input.nextLine();

        if (!userMap.containsKey(username)) {
    
    
            System.out.println("未注册的用户名,请先注册!");
            return;
        }

        User user = userMap.get(username);

        System.out.print("请输入身份证号码:");
        String idCard = input.nextLine();

        if (!user.getIdCard().equals(idCard)) {
    
    
            System.out.println("账号信息不匹配,修改失败!");
            return;
        }

        System.out.print("请输入手机号码:");
        String phoneNumber = input.nextLine();

        if (!user.getPhoneNumber().equals(phoneNumber)) {
    
    
            System.out.println("账号信息不匹配,修改失败!");
            return;
        }

        System.out.print("请输入新密码:");
        String newPassword = input.nextLine();

        user.setPassword(newPassword);
        System.out.println("密码修改成功!");
    }

    public static boolean validateUsername(String username) {
    
    
        // 验证用户名的规则
        // 用户名唯一
        // 用户名长度必须在3~15位之间
        // 只能是字母加数字的组合,但是不能是纯数字
        if (userMap.containsKey(username)) {
    
    
            return false;
        }

        int length = username.length();
        if (length < 3 || length > 15) {
    
    
            return false;
        }

        boolean containsLetter = false;
        boolean containsDigit = false;

        for (char c : username.toCharArray()) {
    
    
            if (Character.isLetter(c)) {
    
    
                containsLetter = true;
            } else if (Character.isDigit(c)) {
    
    
                containsDigit = true;
            }
        }

        if (!containsLetter || !containsDigit) {
    
    
            return false;
        }

        if (containsDigit && !containsLetter && length == 1) {
    
    
            return false;
        }

        return true;
    }

    public static boolean validateIdCard(String idCard) {
    
    
        // 验证身份证号码的规则
        // 长度为18位
        // 不能以0为开头
        // 前17位,必须都是数字
        // 最后一位可以是数字,也可以是大写X或小写x
        if (idCard.length() != 18) {
    
    
            return false;
        }

        if (idCard.startsWith("0")) {
    
    
            return false;
        }

        String idCardDigits = idCard.substring(0, 17);
        String idCardLastDigit = idCard.substring(17);

        if (!idCardDigits.matches("\\d+")) {
    
    
            return false;
        }

        if (!idCardLastDigit.matches("[\\dXx]")) {
    
    
            return false;
        }

        return true;
    }

    public static boolean validatePhoneNumber(String phoneNumber) {
    
    
        // 验证手机号码的规则
        // 长度为11位
        // 不能以0为开头
        // 必须都是数字
        if (phoneNumber.length() != 11) {
    
    
            return false;
        }

        if (phoneNumber.startsWith("0")) {
    
    
            return false;
        }

        if (!phoneNumber.matches("\\d+")) {
    
    
            return false;
        }

        return true;
    }

    public static boolean validateCaptcha(String captcha) {
    
    
        // 验证码的规则
        // 长度为5
        // 由4位大写或者小写字母和1位数字组成,同一个字母可重复
        // 数字可以出现在任意位置
        if (captcha.length() != 5) {
    
    
            return false;
        }

        int digitCount = 0;
        int letterCount = 0;
        char lastChar = '\0';

        for (char c : captcha.toCharArray()) {
    
    
            if (Character.isDigit(c)) {
    
    
                digitCount++;
            } else if (Character.isLetter(c)) {
    
    
                letterCount++;
                if (c == lastChar) {
    
    
                    return false;
                }
                lastChar = c;
            } else {
    
    
                return false;
            }
        }

        if (digitCount == 0 || letterCount == 0) {
    
    
            return false;
        }

        return true;
    }

    static class User {
    
    
        private String username;
        private String password;
        private String idCard;
        private String phoneNumber;

        public User(String username, String password, String idCard, String phoneNumber) {
    
    
            this.username = username;
            this.password = password;
            this.idCard = idCard;
            this.phoneNumber = phoneNumber;
        }

        public String getUsername() {
    
    
            return username;
        }

        public String getPassword() {
    
    
            return password;
        }

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

        public String getIdCard() {
    
    
            return idCard;
        }

        public String getPhoneNumber() {
    
    
            return phoneNumber;
        }
    }
}

Tenga en cuenta que el código anterior es solo un ejemplo simple; puede haber otras reglas de validación más complejas que deban implementarse y ajustarse de acuerdo con las necesidades reales.

resultado de ejecución:
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_62617719/article/details/132641154
Recomendado
Clasificación