Java学习_8_学生管理系统


前言

博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao


学生管理系统

需求:

​ 采取控制台的方式去书写学生管理系统。

分析:

初始菜单:

“-------------欢迎来到黑马学生管理系统----------------”
“1:添加学生”
“2:删除学生”
“3:修改学生”
“4:查询学生”
“5:退出”
“请输入您的选择:”

学生类:

属性:id、姓名、年龄、家庭住址

添加功能
​ 键盘录入每一个学生信息并添加,需要满足以下要求:

  • id唯一

删除功能

​ 键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除
  • id不存在,需要提示不存在,并回到初始菜单

修改功能

​ 键盘录入要修改的学生id,需要满足以下要求

  • id存在,继续录入其他信息
  • id不存在,需要提示不存在,并回到初始菜单

查询功能

​ 打印所有的学生信息,需要满足以下要求

如果没有学生信息,提示:当前无学生信息,请添加后再查询
如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)

id 姓名 年龄 家庭住址
heima001 张三 23 南京
heima002 李四 24 北京
heima003 王五 25 广州
heima004 赵六 26 深圳

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

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

登录界面:

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

用户类:

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

注册功能
​ 1,用户名需要满足以下要求(验证要求):

  • 用户名唯一

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

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

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

  • 身份证号码需要验证。

身份证 验证要求

  • 长度为18位
  • 不能以0为开头
  • 前17位,必须都是数字
  • 最为一位可以是数字,也可以是大写X或小写x

手机号 验证要求:

  • 长度为11位

  • 不能以0为开头

  • 必须都是数字

登录功能
​ 1,键盘录入用户名

​ 2,键盘录入密码

​ 3,键盘录入验证码

验证要求

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

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

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

忘记密码

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

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

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

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

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

验证码规则

  • 长度为5

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

  • 数字可以出现在任意位置

比如: aQa1K

实现代码:

package com.itheima.StudentSystemDemo;

public class MainSystem {
    public static void main(String[] args) {
        UserLogin userLogin = new UserLogin();

        userLogin.login();

    }
}

package com.itheima.StudentSystemDemo;

public class Student {
    private int studentId;
    private String studentName;
    private int studentAge;
    private String familyAddress;
    private boolean logicDelete;

    public Student() {
        this.studentId = 0;
        this.studentName = "default";
        this.studentAge = 0;
        this.familyAddress = "default";
        logicDelete = true;
    }

    public Student(int studentId, String studentName, int studentAge, String familyAddress) {
        this.studentId = studentId;
        this.studentName = studentName;
        this.studentAge = studentAge;
        this.familyAddress = familyAddress;
        logicDelete = false;
    }

    public String getFamilyAddress() {
        return familyAddress;
    }

    public void setFamilyAddress(String familyAddress) {
        this.familyAddress = familyAddress;
    }

    public boolean isLogicDelete() {
        return logicDelete;
    }

    public void setLogicDelete(boolean logicDelete) {
        this.logicDelete = logicDelete;
    }

    public int getStudentId() {
        return studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public int getStudentAge() {
        return studentAge;
    }

    public void setStudentAge(int studentAge) {
        this.studentAge = studentAge;
    }
}

package com.itheima.StudentSystemDemo;

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

public class StudentSystem {
    public static void MainSystem() {

        ArrayList<Student> studentArrayList = new ArrayList<>();

        Scanner sc = new Scanner(System.in);

        boolean flag = false;
        int j = 0;



        loop:
        while (true) {
            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("请输入您的选择:");

            mainSwitch:
            switch (sc.next()) {



                case "1":
                    try {
                    int newStudentId = 0;
                    String newStudentName;
                    int newStudentAge = 0;
                    String newStudentAddress;
                    System.out.println("添加学生:");

                    System.out.println("请输入id(数字):");
                    newStudentId = sc.nextInt();
                    if (studentArrayList.size() > 0) {
                        for (Student i : studentArrayList) {
                            if (i.getStudentId() == newStudentId) {
                                System.out.println("ID重复,退回主菜单");
                                break mainSwitch;
                            }
                        }
                    }

                    if (newStudentId == 0) {
                        System.out.println("学生ID不可以为0,返回主菜单");
                        break mainSwitch;
                    }

                    System.out.println("请输入姓名:");
                    newStudentName = sc.next();

                    System.out.println("请输入年龄:");
                    newStudentAge = sc.nextInt();

                    System.out.println("请输入家庭住址:");
                    newStudentAddress = sc.next();

                    studentArrayList.add(new Student(newStudentId, newStudentName, newStudentAge, newStudentAddress));

                    System.out.println("添加成功");

                    break;
                    } catch (Exception e) {
                        System.out.println("无效输入,返回主菜单");
                        break ;
                    }
                case "2":
                    try {


                    if (studentArrayList.size() == 0) {
                        System.out.println("目前表中没有学生,返回主菜单");
                        break;
                    }
                    System.out.println("删除学生:");
                    System.out.println("请输入学生ID:");
                    int delStudentId = sc.nextInt();
                    flag = false;
                    j = 0;
                    if (studentArrayList.size() > 0) {
                        for (Student i : studentArrayList) {
                            if (i.getStudentId() == delStudentId) {
                                flag = true;
                                studentArrayList.remove(j);
                                System.out.println("删除完成,返回主菜单");
                            }
                            j++;
                        }
                    }
                    if (flag) {
                        break;
                    } else {
                        System.out.println("没有发现该学生,返回主菜单");
                        break mainSwitch;
                    }
                    } catch (Exception e) {
                        System.out.println("无效输入,返回主菜单");
                        break ;
                    }

                case "3":
                    try {


                    if (studentArrayList.size() == 0) {
                        System.out.println("目前表中没有学生,返回主菜单");
                        break;
                    }
                    System.out.println("修改学生:");
                    System.out.println("请输入学生ID:");
                    int altStudentId = sc.nextInt();
                    flag = false;
                    j = 0;
                    if (studentArrayList.size() > 0) {
                        for (Student i : studentArrayList) {
                            if (i.getStudentId() == altStudentId) {
                                flag = true;

                                loop2:
                                while (true) {
                                    System.out.println("请输入需要修改的信息");
                                    System.out.println("1:学生ID");
                                    System.out.println("2:学生姓名");
                                    System.out.println("3:学生年龄");
                                    System.out.println("4:学生住址");
                                    System.out.println("其他:返回主菜单");

                                    subSwitch:
                                    switch (sc.next()) {
                                        case "1":
                                            System.out.println("请输入更改后的id(数字):");
                                            int secondStudentId = sc.nextInt();
                                            if (studentArrayList.size() > 0) {
                                                for (Student x : studentArrayList) {
                                                    if (x.getStudentId() == secondStudentId) {
                                                        System.out.println("ID重复,退回主菜单");
                                                        break mainSwitch;
                                                    }
                                                }
                                            }
                                            studentArrayList.get(j).setStudentId(secondStudentId);
                                            System.out.println("修改成功,返回主菜单");
                                            break mainSwitch;

                                        case "2":
                                            System.out.println("请输入更改后的姓名:");
                                            studentArrayList.get(j).setStudentName(sc.next());
                                            System.out.println("修改成功,返回主菜单");
                                            break mainSwitch;

                                        case "3":
                                            System.out.println("请输入更改后的年龄:");
                                            studentArrayList.get(j).setStudentAge(sc.nextInt());
                                            System.out.println("修改成功,返回主菜单");
                                            break mainSwitch;

                                        case "4":
                                            System.out.println("请输入更改后的住址:");
                                            studentArrayList.get(j).setFamilyAddress(sc.next());
                                            System.out.println("修改成功,返回主菜单");
                                            break mainSwitch;

                                        default:
                                            System.out.println("返回主菜单");
                                            break mainSwitch;

                                    }
                                }
                            }
                            j++;
                        }

                    }
                    if (flag) {
                        break;
                    } else {
                        System.out.println("没有发现该学生,返回主菜单");
                        break mainSwitch;
                    }}catch (Exception e) {
                        System.out.println("无效输入,返回主菜单");
                        break ;
                    }

                case "4":
                    try{


                    if (studentArrayList.size() == 0) {
                        System.out.println("目前表中没有学生,返回主菜单");
                        break;
                    }
                    System.out.println("查询学生:");
                    System.out.println("输入学生ID,或输入0以查询全体学生");
                    flag = false;
                    int selectStudentId = sc.nextInt();
                    System.out.println("id\t\t姓名\t年龄\t家庭住址");
                    if (selectStudentId == 0) {
                        for (Student k : studentArrayList) {
                            System.out.println(String.format("%d\t\t%s\t%d\t\t%s", k.getStudentId(), k.getStudentName(), k.getStudentAge(), k.getFamilyAddress()));
                        }
                        System.out.println("输入任意键返回主菜单");
                        if (sc.next() != null) {
                            break mainSwitch;
                        }
                    } else {
                        for (Student k : studentArrayList) {
                            if (k.getStudentId() == selectStudentId) {
                                flag = true;
                                System.out.println(String.format("%d\t\t%s\t%d\t\t%s", k.getStudentId(), k.getStudentName(), k.getStudentAge(), k.getFamilyAddress()));
                                System.out.println("输入任意键返回主菜单");
                                if (sc.next() != null) {
                                    break mainSwitch;
                                }
                            }
                        }
                        if (flag) {
                            break;
                        } else {
                            System.out.println("没有发现该学生,返回主菜单");
                            break mainSwitch;
                        }

                    }

                    break;
                    }catch (Exception e) {
                        System.out.println("无效输入,返回主菜单");
                        break ;
                    }

                case "5":
                    System.out.println("退出至登陆界面:");
                    System.out.println("系统关闭后,所有数据将清除,确定退出请输入 1,返回主菜单请输入任意值");
                    if (sc.next().equals("1")) {
                        System.out.println("exit");
                        break loop;
                    } else {
                        System.out.println("back");
                        break;
                    }
                default:
                    System.out.println("无效输入,返回主菜单");
                    break;
            }


        }

    }
}

package com.itheima.StudentSystemDemo;

public class User {

    private String userName;
    private String passWord;
    private String personNum;
    private String phoneNum;


    public User() {
        this.userName = "default";
        this.passWord = "123456";
        this.personNum = "123456123456123456";
        this.phoneNum = "12345678910";
    }

    public User(String userName, String passWord, String personNum, String phoneNum) {
        this.userName = userName;
        this.passWord = passWord;
        this.personNum = personNum;
        this.phoneNum = phoneNum;
    }

    public String getPersonNum() {
        return personNum;
    }

    public void setPersonNum(String personNum) {
        this.personNum = personNum;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

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

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

package com.itheima.StudentSystemDemo;

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

public class UserLogin {

    public static void login() {
        ArrayList<User> userArrayList = new ArrayList<>();

        Scanner sc = new Scanner(System.in);

        loop:
        while (true) {
            System.out.println("-----------欢迎来到学生管理系统------------");
            System.out.println("请选择操作:\n1.登录 \n2.注册 \n3.忘记密码 \n4.退出 ");
            System.out.println("请输入:");

            boolean flag = false;//判断是否存在
            int j = 0;//计数当前索引

            mainSwitch:
            switch (sc.next()) {
                case "1":
                    if (userArrayList.size() == 0) {
                        System.out.println("尚未添加用户,请先注册");
                        break;
                    }
                    System.out.println("请输入用户名:");
                    String loginUserName = sc.next();
                    for (User i : userArrayList) {
                        if (loginUserName.equals(i.getUserName())) {
                            flag = true;
                            break;
                        }
                        j++;
                    }
                    if (flag) {
                        for (int i = 0; i < 3; i++) {
                            System.out.println("请输入密码:");
                            String loginUserPassword = sc.next();

                            while (true) {
                                System.out.println("请输入以下验证码,输入0则返回主菜单:");
                                VerifyCode trueLoginVerifyCode = new VerifyCode();
                                String trueCode = trueLoginVerifyCode.verify();
                                String loginVerifyCode = sc.next();

                                if (loginVerifyCode.equals("0")) {
                                    break mainSwitch;
                                }

                                if (trueCode.equals(loginVerifyCode)) {
                                    System.out.println("验证码正确");
                                    break;
                                } else {
                                    System.out.println("验证码错误");
                                }
                            }

                            if (userArrayList.get(j).getPassWord().equals(loginUserPassword)) {
                                System.out.println("登录成功");
                                StudentSystem studentSystem = new StudentSystem();
                                studentSystem.MainSystem();
                                break mainSwitch;
                            } else {
                                System.out.println("密码错误,还有" + (2 - i) + "次机会");
                            }
                        }
                        System.out.println("登录多次失败,返回主菜单");
                    }
                    System.out.println("该用户不存在,返回主菜单");
                    break;

                case "2":

                    String newUserName = "";
                    String newPassWord = "";
                    String newPersonNum = "";
                    String newPhoneNum = "";



                    while (true) {
                        boolean invalidLengthFlag = false;
                        boolean allNum = false;
                        boolean specialChar = false;
                        int num = 0;
                        System.out.println("请输入想要使用的用户名:");
                        newUserName = sc.next();
                        if (newUserName.length() < 3 || newUserName.length() > 15) {
                            System.out.println("用户名长度需要在3-15之间");
                            invalidLengthFlag = true;
                        } else {
                            for (int i = 0; i < newUserName.length(); i++) {
                                char t = newUserName.charAt(i);
                                if (((t >= 'a') && (t <= 'z')) || ((t >= 'A') && (t <= 'Z')) || ((t >= '0') && (t <= '9'))) {
                                    if ((t >= '0') && (t <= '9')) {
                                        num++;
                                    }
                                } else {
                                    specialChar = true;
                                }
                            }
                            if (num == newUserName.length()) {
                                System.out.println("用户名不可以是纯数字");
                                allNum = true;
                            }
                        }
                        if (invalidLengthFlag || specialChar || allNum) {
                            if(specialChar) {
                                System.out.println("用户名只能包含英文大小写或数字");
                            }
                            System.out.println("输入0以重新键入用户名,输入其他则返回主菜单");
                            if (!sc.next().equals("0")) {
                                break mainSwitch;
                            }
                        } else {
                            break;
                        }
                    }

                    if (userArrayList.size() > 0) {
                        for (User i : userArrayList) {
                            if (i.getUserName().equals(newUserName)) {
                                System.out.println("用户名重复,退回主菜单");
                                break mainSwitch;
                            }
                        }
                    }

                    while (true) {
                        System.out.println("请输入密码:");
                        newPassWord = sc.next();
                        System.out.println("请再次输入密码:");
                        if (newPassWord.equals(sc.next())) {
                            break;
                        } else {
                            System.out.println("两次的输入不同,重试请按0,退出请按其他键");
                            if (!sc.next().equals("0")) {
                                break mainSwitch;
                            }
                        }
                    }


                    while (true) {
                        boolean invalidLengthFlag = false;
                        boolean specialCharin17 = false;
                        boolean spcialLastChar = false;
                        boolean zoreHead = false;
                        System.out.println("请输入身份证号:");
                        newPersonNum = sc.next();

                        if (newPersonNum.length() != 18) {
                            System.out.println("身份证号需要18位");
                            invalidLengthFlag = true;
                        } else {
                            if (newPersonNum.charAt(0) == '0') {
                                System.out.println("首位不能为0");
                                zoreHead = true;
                            } else {
                                for (int i = 0; i < newPersonNum.length() - 1; i++) {
                                    char t = newPersonNum.charAt(i);
                                    if ((t < '0') || (t > '9')) {
                                        specialCharin17 = true;
                                        break ;
                                    }
                                }

                                char t = newPersonNum.charAt(newPersonNum.length() - 1);

                                if ((t == 'X') || (t == 'x') || ((t >= '0') && (t <= '9'))) {

                                } else {
                                    System.out.println("最后一位只能是数字或者大小写X");
                                    spcialLastChar = true;

                                }
                            }

                        }
                        if (invalidLengthFlag || spcialLastChar || specialCharin17 || zoreHead) {
                            if (specialCharin17) {
                                System.out.println("身份证号前17位只能为数字");
                            }
                            System.out.println("输入0以重新键入用户名,输入其他则返回主菜单");
                            if (!sc.next().equals("0")) {
                                break mainSwitch;
                            }
                        } else {
                            break;
                        }

                    }

                    while (true) {
                        boolean invalidLengthFlag = false;
                        boolean specialCharin11 = false;
                        boolean zoreHead = false;
                        System.out.println("请输入手机号:");
                        newPhoneNum = sc.next();

                        if (newPhoneNum.length() != 11) {
                            System.out.println("手机号要求11位");
                            invalidLengthFlag = true;
                        } else {
                            if (newPhoneNum.charAt(0) == '0') {
                                System.out.println("首位不能为0");
                                zoreHead = true;
                            } else {
                                for (int i = 0; i < newPhoneNum.length(); i++) {
                                    char t = newPhoneNum.charAt(i);
                                    if ((t < '0') || (t > '9')) {
                                        specialCharin11 = true;
                                        break ;
                                    }
                                }
                            }

                        }
                        if (invalidLengthFlag || specialCharin11 || zoreHead) {
                            if (specialCharin11) {
                                System.out.println("手机号只能为数字");
                            }
                            System.out.println("输入0以重新键入手机号,输入其他则返回主菜单");
                            if (!sc.next().equals("0")) {
                                break mainSwitch;
                            }
                        } else {
                            break;
                        }
                    }

                    userArrayList.add(new User(newUserName, newPassWord, newPersonNum, newPhoneNum));

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

                case "3":
                    if (userArrayList.size() == 0) {
                        System.out.println("尚未注册用户,请先注册");
                        break;
                    } else {
                        System.out.println("请输入用户名:");
                        String forgetUserName = sc.next();
                        int k = 0;
                        for (User i : userArrayList) {
                            if (i.getUserName().equals(forgetUserName)) {
                                while (true) {
                                    System.out.println("请输入身份证号:");
                                    String forgetPersonNum = sc.next();
                                    System.out.println("请输入手机号:");
                                    String forgetPhoneNum = sc.next();

                                    boolean truePersonNum = false;
                                    boolean truePhoneNum = false;

                                    if (userArrayList.get(k).getPersonNum().equals(forgetPersonNum)) {
                                        truePersonNum = true;
                                    } else {
                                        System.out.println("身份证号不符合,请重新输入");
                                    }

                                    if (userArrayList.get(k).getPhoneNum().equals(forgetPhoneNum)) {
                                        truePhoneNum = true;

                                    }else {
                                        System.out.println("手机号不符合,请重新输入");
                                    }

                                    if (truePersonNum && truePhoneNum) {
                                        System.out.println("请输入新的密码:");
                                        userArrayList.get(k).setPassWord(sc.next());
                                        System.out.println("设置成功,返回主菜单");
                                        break mainSwitch;
                                    }
                                }
                            }
                            k++;
                        }
                        System.out.println("该用户尚未注册,返回主菜单");
                    }


                    break;

                case "4":
                    System.out.println("退出:");
                    System.out.println("系统关闭后,所有数据将清除,确定退出请输入 1,返回主菜单请输入任意值");
                    if (sc.next().equals("1")) {
                        System.out.println("exit");
                        break loop;
                    } else {
                        System.out.println("back");
                        break;
                    }

                default:
                    System.out.println("无效输入,返回登陆界面");
                    break;
            }
        }

    }
}

package com.itheima.StudentSystemDemo;

import java.util.Random;

public class VerifyCode {

    public static String verify() {

        char[] verChar = new char[5];

        for(int i = 0; i < 5; i++) {
            Random radmChar = new Random();
            int j = radmChar.nextInt(2);

            if(j == 0){
                verChar[i] = (char)('a' +radmChar.nextInt(26 ));
            } else {
                verChar[i] = (char)('A' +radmChar.nextInt(26 ));
            }

        }

        Random radmChar = new Random();

        verChar[radmChar.nextInt(5)] = (char)(radmChar.nextInt(10) + '0');

        String str = new String(verChar);

        System.out.println(str);

        return str;

    }
}

总结

不难但是类,写到凌晨4点,感觉回到了学生时代。
好熟悉又好陌生的学生管理系统,当时还是用C写的,后来JAVA+数据库写了一个。
纯JAVA写还是第一次。
各种逻辑总是出错,然后因为考虑各种地方的输入判定也花了很多时间。
当然我觉得让我写到这么晚最大的原因是IDEA噶了两次,直接给我倒档白花了几个小时。
渐渐熟悉起来吧,这速度肯定是太慢了。
好累,该休息了。
因为是很简单的项目就不写注释了,如果对这个项目有疑问或者改进建议可以评论区留言,谢谢。

  • 40
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值