java 学生管理系统升级版(IDEA)

发布时间:2024年01月11日

?需求文档


学生管理系统升级版

需求:

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

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

分析:

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

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

注册功能:

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

验证要求:

用户名唯一

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

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

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

3,身份证号码需要验证。

验证要求:

长度为18位

不能以0为开头

前17位,必须都是数字

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

4,手机号验证。

验证要求:

长度为11位

不能以0为开头

必须都是数字

登录功能:

1,键盘录入用户名

2,键盘录入密码

3,键盘录入验证码

验证要求:

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

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

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

忘记密码:

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

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

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

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

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

验证码规则:

长度为5

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

数字可以出现在任意位置

比如:

aQa1K


分析

升级版在做到需求文档的实现后,还将登录功能与学生管理系统(增删改查功能)相连接。


代码实现

学生管理系统升级版(测试类)

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

public class StudengtSystemPlus {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();

        //登录界面

        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作 1登录 2注册 3忘记密码");
            String choose = sc.next();
            switch (choose) {
                case "1":
                    record(list);

                    //调用StudentSystem里面的mian方法
                    //传递一个String[] args的参数
                    StudentSystem.main(new String[1]);
                    break;
                case "2":
                    register(list);

                    System.out.println("用户名\t密码\t身份证\t手机号");
                    for (int i = 0; i < list.size(); i++) {
                        User user = list.get(i);
                        System.out.println(user.getUserName() + "\t" + user.getPassword() + "\t" + user.getIdCard() + "\t" + user.getPhoneNumber());
                    }
                    break;
                case "3":
                    forget(list);
                    break;
                default:
                    System.out.println("没有这个选项,请重新输入");
                    break;

            }
        }
    }
    //忘记密码功能
    public static void forget(ArrayList<User> list){
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入用户名");
        String userName = sc.next();
        if (list.isEmpty()) {
            System.out.println("用户未注册,请先注册");
            return;
        } else {
            for (int i = 0; i < list.size(); i++) {
                User user = list.get(i);
                if (user.getUserName().equals(userName)) {
                    break;
                } else {
                    System.out.println("用户未注册,请先注册");
                }
            }
        }

        System.out.println("请输入身份证号码");
        String idCard = sc.next();
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if (user.getIdCard().equals(idCard)){
                break;
            }else {
                System.out.println("账号信息不匹配,修改失败");
                return;
            }
        }

        System.out.println("请输入手机号码");
        String phoneNumber = sc.next();
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if (user.getPhoneNumber().equals(phoneNumber)){
                break;
            }else {
                System.out.println("账号信息不匹配,修改失败");
                return;
            }
        }

        System.out.println("请输入修改后的密码");
        String newPassWord = sc.next();

        int index = getIndex(list, userName);

        User user = new User(userName,newPassWord,idCard,phoneNumber);
        
        list.set(index,user);

        System.out.println("密码修改成功");
        return;
    }

    //注册功能
    public static void register(ArrayList<User> list) {

        User u = new User();

        Scanner sc = new Scanner(System.in);
        //注册功能
        //用户名的输入和判断
        String userName = null;
        while (true) {
            System.out.println("请输入要注册的用户名");
            userName = sc.next();

            //进行用户名的判断 唯一性
            boolean judgeUserName = judgeUserName(list, userName);
            if (judgeUserName) {
                System.out.println("用户名已经存在,请重新输入");
                continue;
            } else {
                //对用户名的长度进行判断 3~15之间
                int length = userName.length();
                if (length >= 3 && length <= 15) {
                    //用户名只能是数字+字母
                    boolean judegeUserNameType = judegeUserNameType(userName);
                    if (judegeUserNameType) {
                        break;
                    } else {
                        System.out.println("用户名格式错误,请重新输入");
                        continue;
                    }
                } else {
                    System.out.println("用户名长度不符合,请重新输入");
                    continue;
                }
            }
        }
        u.setUserName(userName);
        System.out.println("用户名输入正确");

        //进行密码的输入和判断
        String password1 = null;
        while (true) {
            System.out.println("请输入密码");
            password1 = sc.next();
            System.out.println("请再次输入密码");
            String password2 = sc.next();

            boolean judgePassWord = password1.equals(password2);
            if (judgePassWord) {
                System.out.println("密码输入正确");
                break;
            } else {
                System.out.println("两次密码输入不一致,请重新输入");
                continue;
            }
        }
        u.setPassword(password1);

        //身份证号码的输入和判断
        String idCard = null;
        while (true) {
            char a = 'a';
            System.out.println("请输入身份证号码");
            idCard = sc.next();
            //判断身份证号码的长度
            int length = idCard.length();
            if (length != 18) {
                System.out.println("身份证号码长度错误,请重新输入");
                continue;
            }
            //判断身份证号码第一位
            //不能为0
            char first = idCard.charAt(0);
            if (first == '0') {
                System.out.println("身份证号码第一位错误,请重新输入");
                continue;
            }
            //判断身份证号码前17位
            //都必须为数字
            for (int i = 0; i < idCard.length() - 1; i++) {
                char c = idCard.charAt(i);
                if (c >= '0' && c <= '9') {
                    if (i == idCard.length() - 2) {
                        a = 'b';
                    }
                    continue;
                } else {
                    System.out.println("身份证格式错误");
                    break;
                }
            }
            if (a == 'a') {
                continue;
            }
            //判断最后一位
            //可以为数字,也可以位X或x
            char end = idCard.charAt(idCard.length() - 1);
            if ((end >= '0' && end <= '9') || end == 'x' || end == 'X') {
                break;
            } else {
                System.out.println("身份证最后一位错误");
                continue;
            }

        }
        u.setIdCard(idCard);
        System.out.println("身份证输入正确");

        //手机号的输入与判断
        String phoneNumber = null;
        while (true) {
            char a = 'a';
            System.out.println("请输入手机号码");
            phoneNumber = sc.next();
            //判断手机号的长度
            int length = phoneNumber.length();
            if (length != 11) {
                System.out.println("手机号码长度错误,请重新输入");
                continue;
            }
            //判断手机号的第一位
            char first = phoneNumber.charAt(0);
            if (first == '0') {
                System.out.println("手机号第一位错误");
                continue;
            }
            //判断是否为数字
            for (int i = 0; i < phoneNumber.length(); i++) {
                char c = phoneNumber.charAt(i);
                if (c >= '0' && c <= '9') {
                    if (i == phoneNumber.length() - 1) {
                        a = 'b';
                    }
                    continue;
                } else {
                    System.out.println("手机号格式错误");
                    break;
                }
            }
            if (a == 'b') {
                break;
            } else if (a == 'a') {
                continue;
            }
        }
        u.setPhoneNumber(phoneNumber);
        System.out.println("手机号输入正确");

        list.add(u);

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

    //登录功能
    public static void record(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入用户名");
        String userName = sc.next();
        if (list.isEmpty()) {
            System.out.println("用户未注册,请先注册");
            return;
        } else {
            for (int i = 0; i < list.size(); i++) {
                User user = list.get(i);
                if (user.getUserName().equals(userName)) {
                    break;
                } else {
                    System.out.println("用户未注册,请先注册");
                }
            }
        }
//        for (User user :list) {
//            if(user.getUserName().equals(userName)){
//                break;
//            }else {
//                System.out.println("用户未注册,请先注册");
//            }
//
//        }

        int j = 0;
        loop:
        while (true && j < 3) {
            System.out.println("请输入密码");
            String passWord = sc.next();
            for (int i = 0; i < list.size(); i++) {
                User user = list.get(i);
                if (user.getPassword().equals(passWord)) {
                    break loop;
                } else {
                    System.out.println("密码输入错误");
                    System.out.println("当前还剩下" + (2 - j) + "次机会");
                    j++;
                    break;
                }
            }
        }
        //生成一个随机的验证码
        while (true && j < 3) {
            String getCode = changeLetter();
            System.out.println("验证码为" + getCode);

            System.out.println("请输入验证码");
            String code = sc.next();

            if (getCode.equals(code)) {
                break;
            } else {
                System.out.println("验证码输入错误");
                System.out.println("当前还剩下" + (2 - j) + "次机会");
                j++;
            }
        }
        if (j < 3) {
            System.out.println("登录成功");
            return;
        }


    }

    //将生成的字符数组内容放到一个字符串里面
    public static String changeLetter() {
        char[] code = getCode();

        String getcode = "";
        for (int i = 0; i < code.length; i++) {
            getcode = getcode + code[i];
        }
        return getcode;
    }

    //通过用户名得到要修改的id
    public static int getIndex(ArrayList<User> list,String userName){
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if (user.getUserName().equals(userName)){
                return i;
            }
        }
        return -1;
    }

    //生成验证码
    //4位大小写字母+1数字
    ///数字可以出现在任何位置
    public static char[] getCode() {
        //创建一个字符串数组,长度为5
        char[] arr = new char[5];

        Random r = new Random();

        //获得随机的一个数字
        int number = r.nextInt(9);
        //获得随机的一个字母数组
        char[] letter = getLetter();

        String result = "";
        //先将数字放在最后一位
        for (int i = 0; i < arr.length - 1; i++) {
            int letterNumber = r.nextInt(52);
            result = result + letter[letterNumber];
        }
        result = result + number;

        //将数字索引进行打乱
        int numberIndex = r.nextInt(arr.length - 1);
        //将结果变成一个字符串数组
        for (int i = 0; i < result.length(); i++) {
            char c = result.charAt(i);
            arr[i] = c;
        }

        //将最后一个索引的内容与前面交换
        char temp = arr[arr.length - 1];
        arr[arr.length - 1] = arr[numberIndex];
        arr[numberIndex] = temp;

        return arr;
    }


    //获得随机的一个字母数组
    public static char[] getLetter() {
        char[] arr = new char[52];
        for (int i = 0; i < arr.length; i++) {
            if (i <= 25) {
                arr[i] = (char) (97 + i);
            } else {
                arr[i] = (char) (65 + i - 26);
            }
        }
        return arr;
    }

    //判断用户名的格式
    public static boolean judegeUserNameType(String userName) {
        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') || (c >= '0' && c <= '9')) {
                //得到用户名是字母的个数
                if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
                    count++;
                }
            } else {
                return false;
            }
        }

        if (count > 0) {
            return true;
        } else {
            return false;
        }
    }

    //判断用户名是否重复
    public static boolean judgeUserName(ArrayList<User> list, String userName) {
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if (user.getUserName().equals(userName)) {
                return true;
            }
        }
        return false;
    }
}

javaBean标准类

public class User {
    private String userName;
    private String password;
    private String idCard;
    private String phoneNumber;

    public User() {
    }

    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 void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

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

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

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

文章来源:https://blog.csdn.net/weixin_70494888/article/details/135514920
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。