25.text--学生管理系统

学生管理系统

一、登录界面

1.需求文档

需求:为学生管理系统书写一个登陆、注册、忘记密码的功能
     只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作

分析:登录界面:“欢迎来到学生管理系统!”
            “请选择操作1.登录,2.注册,3.忘记密码”
            
     用户类:属性有,用户名、密码、身份证号码、手机号码
     注册功能:1.用户名需要满足以下要求:1.用户名唯一
                                   2.用户名长度必须在3~15位之间
                                   3.只能是字母加数字的组合,但是不能是纯数字
             2.密码键盘输入两次,两次一致才可以进行注册
             3.身份证号码需要满足以下要求:1.长度为18位
                                      2.不能为0开头
                                      3.前17位,必须都是数字
                                      4.最后一位可以是数字,也可以是大写X或者小写x
             4.手机号需要满足以下要求:1.长度为11位
                                   2.不能为0开头
                                   3.必须都是数字 
     登录功能:1.键盘录入用户名
             2.键盘录入密码
             3.键盘录入验证码
             4.验证要求:用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
                       判断验证码是否正确,如不正确,重新输入
                       再判断用户名和密码是否正确,有3次机会
     忘记密码:1.键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
             2.键盘录入身份证号码和手机号码
             3.判断当前用户的身份证号码和手机号码是否一致,如果一致,则提示输入密码,进行修改,
               如果不一致,则提示:账号信息不匹配,修改失败  
     验证码规则:长度为5,由4位大写或者小写字母和1位数字组成,同一个字母可重复,数字可以出现在任意位置               

2.JavaBean

public class User {
    private String name;
    private String password;
    private String ID;
    private String phoneNum;

    public User() {
    }

    public User(String name, String password, String ID, String phoneNum) {
        this.name = name;
        this.password = password;
        this.ID = ID;
        this.phoneNum = phoneNum;
    }

    public String getName() {
        return name;
    }

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

    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 getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }
}

3.测试类

public class UserTest {
    public static void main(String[] args) {
        //创建集合
        ArrayList<User> list = new ArrayList<>();

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

            //键盘录入选择
            Scanner s = new Scanner(System.in);
            String choose = s.next();
            switch (choose){
                case "1":
                    login(list);
                    break;
                case "2":
                    register(list);
                    break;
                case "3":
                    forgetPW(list);
                    break;
                case "4":
                    System.out.println("退出!");
                    return;
                default:
                    System.out.println("没有这个选项!");
                    break;
            }
        }
    }

    //登录功能
    private static void login(ArrayList<User> list){
        Scanner s = new Scanner(System.in);
        //------------------------------1.键盘录入用户名并验证-----------------------------
        System.out.println("请输入用户名:");
        String username = s.next();
        //判断集合中是否为空,若为空直接提示未注册
        if(list.size() == 0){
            System.out.println("用户名未注册,请先注册!");
        }
        //验证是否在集合中存在,即是否注册
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if(!(username.equals(user.getName()))){
                //不存在,直接结束方法
                System.out.println("用户名未注册,请先注册!");
                return;
            }else{
                //存在,继续录入和判断验证码和密码
        //------------------------------2.键盘录入密码并验证,键盘录入验证码并验证------------------------------
                String password = user.getPassword();
                for (int i1 = 0; i1 < 3; i1++) {
                    boolean flag = matchLogin(password);
                    if(flag){
                        System.out.println("登录成功!");
                        StudentTest ss = new StudentTest();
                        ss.startStudentSystem();
                        break;
                    }else{
                        System.out.println("你还有" + (2-i1) + "次机会!");
                    }
                }
            }
        }
    }

    //注册功能
    private static void register(ArrayList<User> list){
        User user = new User();
        Scanner s = new Scanner(System.in);
        //------------------------------1.用户名验证------------------------------
        while (true) {
            //键盘录入用户名username
            System.out.println("请输入用户名:");
            String username = s.next();
            //判断长度是否符合要求 3~15
            if(username.length() >= 3 && username.length() <= 15){
                //判断username的格式是否正确
                boolean flag = adequateName(username);
                if(flag){
                    //调用方法进行判断唯一性
                    int index = getIndex(list, username);
                    if(index == -1){
                        //-1代表不存在,可以存入
                        System.out.println("用户名输入成功!");
                        user.setName(username);
                        break;
                    }else{
                        //不等于-1代表已存在,不能存入,需要重新输入
                        System.out.println("用户名已存在,请重新输入!");
                    }
                }else{
                    System.out.println("用户名输入错误,请重新输入!");
                }

            }else{
                System.out.println("用户名长度有误,请重新输入!");
            }
        }

        //------------------------------2.密码验证------------------------------
        System.out.println("接下来进行密码校验!");
        while (true) {
            System.out.println("请输入密码:");
            String firstPW = s.next();
            System.out.println("请再次输入密码:");
            String secondPW = s.next();
            if(secondPW.equals(firstPW)){
                user.setPassword(firstPW);
                System.out.println("密码设置成功!");
                break;
            }else{
                System.out.println("第二次输入的密码与第一次不一致,请重新输入!");
            }
        }

        //------------------------------3.身份证验证------------------------------
        System.out.println("请进行身份证校验!");
        while (true) {
            System.out.println("请输入身份证:");
            String userID = s.next();
            boolean flag = adequateID(userID);
            if(flag){
                user.setID(userID);
                System.out.println("身份证验证成功!");
                break;
            }else {
                System.out.println("身份证格式有误,请重新输入!");
            }
        }

        //------------------------------4.手机号验证------------------------------
        System.out.println("进行手机号码验证!");
        while (true) {
            System.out.println("请输入手机号码:");
            String userPhone = s.next();
            boolean flag = adequatePhoneNum(userPhone);
            if(flag){
                user.setPhoneNum(userPhone);
                System.out.println("手机号验证成功!");
                break;
            }else {
                System.out.println("手机号格式有误,请重新输入!");
            }
        }

        //------------------------------所有验证完成后,存入集合中------------------------------
        System.out.println("注册成功!");
        list.add(user);
    }

    //忘记密码功能
    private static void forgetPW(ArrayList<User> list){
        Scanner s = new Scanner(System.in);
        //------------------------------1.键盘录入用户名并验证-----------------------------
        System.out.println("请输入用户名:");
        String username = s.next();
        //判断集合中是否为空,若为空直接提示未注册
        if(list.size() == 0){
            System.out.println("用户名未注册,请先注册!");
        }
        //验证是否在集合中存在,即是否注册
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if (!(username.equals(user.getName()))) {
                //不存在,直接结束方法
                System.out.println("用户名未注册,请先注册!");
                return;
            } else {
                //存在,调用方法判断身份证号码、手机号码
        //------------------------------2.键盘录入密码并验证,键盘录入验证码并验证------------------------------
                for (int i1 = 0; i1 < 3; i1++) {
                    boolean flag = matchForgetPW(user);
                    if(flag){
                        //返回true,即可修改密码
                        System.out.println("请输入新的密码:");
                        String novelPW = s.next();
                        user.setPassword(novelPW);
                        System.out.println("修改成功!");
                        break;
                    }else{
                        //返回false,即提示错误
                        System.out.println("账号信息不匹配,修改失败!");
                        System.out.println("你还有" + (2-i1) + "次机会!");
                    }
                }
            }
        }
    }

    //判断方法,判断在集合中是否存在,若存在则返回索引,不存在则返回-1
    private static int getIndex(ArrayList<User> list, String username){
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            String name = user.getName();
            if(name.equals(username)){
                return i;
            }
        }
        return -1;
    }

    //功能方法,判断注册时username是否符合要求
    private static boolean adequateName(String username) { //adequate 满足要求的
        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++;
            }
            if ( !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) ) {
                //如果有一个字符不在字母和数字中,那么当前用户名不符合要求,返回false
                return false;
            }
        }
        //在for循环判断个数,以保证每个字符都在格式要求内
        if (count >= 1) {
            //至少存在一个字母,返回true
            return true;
        }else {
            //不存在至少一个字母,返回false
            return false;
        }
    }

    //功能方法,验证身份证号码,若通过验证则返回true,若不符合其中任何一项要求,则返回false
    private static boolean adequateID(String userID){
        //要求长度为18位
        if(userID.length() != 18){
            return false;
        }
        //不能以0为开头
        if(userID.startsWith("0")){
            return false;
        }
        //前17位必须都是数字
        for (int i = 0; i < userID.length()-1; i++) {
            char c = userID.charAt(i);
            if(!(c >= '0' && c <= '9')){
                return false;
            }
        }
        //最后一位可以是数字也可以是大写X或小写x
        char c = userID.charAt(17);
        if( !((c >= '0' && c <= '9') || c == 'X' || c == 'x') ){
            return false;
        }
        //当代码走到这里,证明符合要求
        return true;
    }

    //功能方法,验证手机号码,若通过验证则返回true,若不符合其中任何一项要求,则返回false
    private static boolean adequatePhoneNum(String userPhoneNum){
        //要求长度为11位
        if(userPhoneNum.length() != 11){
            return false;
        }
        //不能以0为开头
        if(userPhoneNum.startsWith("0")){
            return false;
        }
        //必须都是数字
        for (int i = 0; i < userPhoneNum.length(); i++) {
            char c = userPhoneNum.charAt(i);
            if(!(c >= '0' && c <= '9')){
                return false;
            }
        }
        //当代码走到这里,证明符合要求
        return true;
    }

    //功能方法,验证键盘录入的验证码和密码是否正确匹配
    private static boolean matchLogin(String password){
        Scanner s = new Scanner(System.in);
        //先录入密码进行验证
        System.out.println("请输入密码:");
        String userPW = s.next();
        if(userPW.equals(password)){
            System.out.println("密码验证成功!");
        }else{
            System.out.println("密码输入有误,请重新输入!");
            return false;
        }
        //再录入验证码进行验证
        String randomNums = getRandomNums();
        System.out.println("验证码是" + randomNums);
        System.out.println("请输入验证码:");
        String userRandomNums = s.next();
        if(userRandomNums.equals(randomNums)){
            System.out.println("验证码验证成功!");
        }else{
            System.out.println("验证码输入有误,请重新输入!");
            return false;
        }
        return true;
    }

    //功能方法,验证键盘录入的身份证号码和手机号码是否正确匹配
    private static boolean matchForgetPW(User user){
        Scanner s = new Scanner(System.in);
        System.out.println("请输入身份证号码:");
        String userID = s.next();
        if( !(userID.equals(user.getID())) ){
            //不匹配直接返回false
            System.out.println("身份证号码输入有误,请重新输入!");
            return false;
        }
        System.out.println("请输入手机号码:");
        String userPhoneNums = s.next();
        if( !(userPhoneNums.equals(user.getPhoneNum())) ){
            //不匹配直接返回false
            System.out.println("手机号码输入有误,请重新输入!");
            return false;
        }
        return true;
    }

    //生成验证码
    private static String getRandomNums(){
        Random r = new Random();
        StringBuilder sb = new StringBuilder();
        //创建一个含有大小写字母的字符集合
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a' + i));
            list.add((char)('A' + i));
        }
        //在含有大小写的字符数组中随机抽取五个并添加到字符串中
        for (int i = 0; i < 5; i++) {
            int index = r.nextInt(list.size());
            sb.append(list.get(index));
        }
        //获取一个随机数字,并转变为字符串形式
        int randomNum = r.nextInt(10);
        String str = randomNum + "";
        //在已生成的全部是字母的字符串中,通过随机索引,替换一个字母为数字
        int randomIndex = r.nextInt(5);
        String result = sb.replace(randomIndex, randomIndex+1, str).toString();
        return result;
    }

}

二、系统界面

1.需求文档

需求:采用控制台的方式去书写学生管理系统
分析:初始菜单:------------------欢迎来到学生管理系统------------------
             1.添加学生
             2.删除学生
             3.修改学生
             4.查询学生
             5.退出
             请输入您的选择:
学生类:属性有,id、姓名、年龄、家庭住址
添加功能:键盘录入每一个学生信息并添加,需要满足以下要求:
        > id唯一
删除功能:键盘录入要删除的学生id,需要满足以下要求:
        > id存在删除
        > id不存在,需要提示不存在,并回到初始菜单
修改功能:键盘录入要修改的学生id,需要满足以下要求:
        > id存在,继续录入其他信息
        > id不存在,需要提示不存在,并回到初始菜单
查询功能:打印所有的学生信息,需要满足以下要求
        > 如果没有学生信息,提示:当前无学生信息,请添加后再查询
        > 如果有学生信息,需要按照以下格式输出
        id         姓名       年龄       家庭住址
        heima001   张三        23         南京
        heima002   李四        24         北京
        heima003   王五        25         广州

2.JavaBean

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;
    }
}

3.测试类

放的是我自己写的,比较有成就感

public class StudentTest {
    public static void startStudentSystem() {
        //实现键盘录入
        Scanner s = new Scanner(System.in);

        //将用户输入的数据存入集合中
        ArrayList<Student> list = new ArrayList<>();

        //4.用循环包裹,增加可用性
        while (true) {
            //1.先把初始菜单打印出来
            System.out.println("------------------欢迎来到学生管理系统!------------------");
            System.out.println("1.添加学生");
            System.out.println("2.删除学生");
            System.out.println("3.修改学生");
            System.out.println("4.查询学生");
            System.out.println("5.退出");
            System.out.println("请输入您的选择:");

            //2.实现键盘录入选择
            String choose = s.next();

            //3.根据用户输入,选择方法
            switch (choose){
                //加入break以防穿透
                case "1":
                    addStudent(list);
                    break;
                case "2":
                    deleteStudent(list);
                    break;
                case "3":
                    upsetStudent(list);
                    break;
                case "4":
                    searchStudent(list);
                    break;
                case "5":
                    System.out.println("退出!");
                    return;
                default:
                    System.out.println("没有这个选项!");
            }
        }

        //5.查询功能要求比较简单,先完成查询方法
        //6.查询功能需要和添加功能共同测试,故接着完成添加功能
        //7.完成删除功能
        //8.完成修改功能

    }

    //添加功能
    public static void addStudent(ArrayList<Student> list){
        //键盘录入,实例化类
        Scanner s = new Scanner(System.in);
        Student stu = new Student();

        //输入学生的各项信息
        while (true) {
            //调用方法进行唯一性的判断,包裹循环,若存在则重新输入
            System.out.println("请输入学生的id:");
            String id = s.next();
            int index = getIndex(list,id);
            if(index >= 0){
                System.out.println("id已存在,请重新输入!");
            }else{
                stu.setId(id);
                //正确输入后,结束循环
                break;
            }
        }

        System.out.println("请输入学生的姓名:");
        stu.setName(s.next());
        System.out.println("请输入学生的年龄:");
        stu.setAge(s.nextInt());
        System.out.println("请输入学生的家庭住址:");
        stu.setAddress(s.next());

        //将学生信息存放在集合中
        list.add(stu);

        //提示成功添加
        System.out.println("学生信息添加成功!");

    }

    //删除功能
    public static void deleteStudent(ArrayList<Student> list){
        //键盘录入要删除的学生id
        Scanner s = new Scanner(System.in);
        System.out.println("请输入要删除的学生id:");
        String id = s.next();

        //调用判断方法,判断在集合中是否存在,若存在,根据索引删除
        int index = getIndex(list,id);
        if(index == -1){
            //无索引,即不存在,提示错误
            System.out.println("当前学生id不存在!");
            //返回初始菜单
            return;
        }else{
            //存在,执行删除操作
            list.remove(index);
            System.out.println("id为:" + id + "删除成功!");
        }
    }

    //修改功能
    public static void upsetStudent(ArrayList<Student> list){
        //键盘录入要修改的学生id
        Scanner s = new Scanner(System.in);
        System.out.println("请输入要修改的学生id:");
        String id = s.next();

        //调用判断方法,判断在集合中是否存在,若存在,根据索引修改
        int index = getIndex(list,id);
        if(index == -1){
            System.out.println("当前学生id不存在!");
            return;
        }else{
            Student stu = list.get(index);
            System.out.println("请输入修改后的姓名:");
            stu.setName(s.next());
            System.out.println("请输入修改后的年龄:");
            stu.setAge(s.nextInt());
            System.out.println("请输入修改后的家庭住址:");
            stu.setAddress(s.next());
        }
        System.out.println("修改成功!");
    }

    //查询功能
    public static void searchStudent(ArrayList<Student> list){
        //先进行判断是否为空
        if(list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询!");
            return;
        }
        //集合证明不为空,进行遍历
        System.out.println("id\t\t姓名\t\t年龄\t\t家庭住址");
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getId() + "\t" + stu.getName() + "\t"
                                + stu.getAge() + "\t" + stu.getAddress());
        }
    }

    //判断id在集合中是否存在,存在则返回索引,不存在则返回-1
    public static int getIndex(ArrayList<Student> list, String id){
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            String sid = stu.getId();
            if(id.equals(sid)){
                //已存在,返回索引
                return i;
            }
        }
        //遍历集合后,无匹配项,即不存在,返回-1
        return -1;
    }
}
posted on 2023-04-12 10:51  小黑确实不黑  阅读(74)  评论(0编辑  收藏  举报