Java学生信息管理系统

226 阅读10分钟

JAVA学生信息管理系统

前言

朋友们好,这个学生信息管理系统是我跟着黑马老师写的,大家可以通过这个链接看黑马阿伟老师的讲解: 学生信息管理系统

系统主要功能

首先是登录,注册界面: 1:登录 2:注册 3:忘记密码 4:退出程序

在这里插入图片描述 这个系统的逻辑是,你需要先登录,注册才能使用下面的功能: 1:添加学生 2:删除学生 3:修改学生 4:查询学生 5:打印学生 6:退出程序 在这里插入图片描述

演示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

注意

  • 身份证号一定是18位,否则会打印提示信息。 在这里插入图片描述
  • 手机号一定是11位,否则会打印提示信息。 在这里插入图片描述

Student类

package com.akbar.student_system;

public class Student {
    //成员变量属性
    private String name;            //姓名
    private int age;                //年龄
    private String studentNumber;   //学号
    private String major;           //专业
    private String phoneNumber;     //手机号

    //空参构造方法
    public Student() {
    }
    //带全部参数的构造方法
    public Student(String name, int age, String studentNumber, String major, String phoneNumber) {
        this.name = name;
        this.age = age;
        this.studentNumber = studentNumber;
        this.major = major;
        this.phoneNumber = phoneNumber;
    }
    //1.name
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    //2.age
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    //3.studentNumber
    public String getStudentNumber() {
        return studentNumber;
    }
    public void setStudentNumber(String studentNumber) {
        this.studentNumber = studentNumber;
    }

    //4.major
    public String getMajor() {
        return major;
    }
    public void setMajor(String major) {
        this.major = major;
    }

    //5.phoneNumber
    public String getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}

StudentSystem类

package com.akbar.student_system;
import java.util.Scanner;
import java.util.ArrayList;

public class StudentSystem {
    public static void main(String[] args) {
        //创建学生对象的集合
        ArrayList<Student> studentList=new ArrayList<>();

        //欢迎界面
        System.out.println("-----------------------欢迎使用学生管理系统----------------------------");
       loop:while (true) {  //给循环起个名字,方便管理
            //选项
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:打印学生");
            System.out.println("6:退出程序");
            System.out.println("请输入你选择的序号:");

            //接受用户的选择
            Scanner sc=new Scanner(System.in);
            String choose=sc.nextLine();        //使用nextLine是因为容错率高
           System.out.println("*********************************************");

            //用switch语句进行操作
            switch(choose){
                case "1"->addStudent(studentList);
                case "2"->deleteStudent(studentList);
                case "3"->updateStudent(studentList);
                case "4"->{
                    if(studentList.isEmpty()){
                        System.out.println("当前没有学生信息,请添加后再查询!");
                        break ;
                    }
                    System.out.println("请输入要查询学生的学号:");
                    String number=sc.next();
                    inquireStudent(studentList,number);
                }
                case "5"->printStudent(studentList);
                case "6"->{
                    System.out.println("程序已退出!");
                    break loop; //也可以使用System.exit(0);,这句语句可以停止虚拟机运行
                }
                default ->System.out.println("没有这个选项,请重新输入!");
            }
        }
    }

    //添加学生
    public static void addStudent(ArrayList<Student> studentList){
        Scanner sc=new Scanner(System.in);
        Student s=new Student();

        while(true){
            System.out.println("请输入学生的学号(按-1回到主菜单):");
            String studentNumber=sc.next();
            if(studentNumber.equals("-1")){
                System.out.println("*********************************************");
                return;
            }
            //判断学号是否已经存在
            boolean flag=contains(studentList,studentNumber);
            if(flag){
                System.out.println("该学生已经存在,请重新输入(按0回到菜单栏):");
            }else{
                s.setStudentNumber(studentNumber);
                break;
            }
        }
        System.out.println("请输入学生的姓名:");
        String name=sc.next();
        s.setName(name);
        System.out.println("请输入学生的年龄:");
        int age=sc.nextInt();
        s.setAge(age);
        System.out.println("请输入学生的专业:");
        String major=sc.next();
        s.setMajor(major);
        System.out.println("请输入学生的手机号:");
        String phoneNumber=sc.next();
        s.setPhoneNumber(phoneNumber);

        studentList.add(s);

        System.out.println("学生信息添加成功!");
        System.out.println("*********************************************");
    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> studentList){
        if(studentList.isEmpty()){
            System.out.println("当前没有学生信息,请添加后再删除!");
            System.out.println("*********************************************");
            return;
        }

        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要删除的学生学号:");
        String studentNumber=sc.next();

        //调用方法获取该学生集合中的方法
        int index=getIndex(studentList,studentNumber);
        //对index进行判断
        if(index>=0){
            //提示是否真的删除
            System.out.println("确定要删除该学生的信息吗?(\"否\"或者\"任意字符\"):");
            String sureOrNot=sc.next();
            if(sureOrNot.equals("否")){
                System.out.println("命令撤回成功!");
                System.out.println("*********************************************");
                return;
            }
            studentList.remove(index);
            System.out.println("学号为\""+studentNumber+"\"的学生的信息删除成功!");
            System.out.println("*********************************************");
        }else{
            System.out.println("该学生不存在,删除操作失败!");
            System.out.println("*********************************************");
        }

    }

    //修改学生
    public static void updateStudent(ArrayList<Student> studentList){
        if(studentList.isEmpty()){
            System.out.println("当前没有学生信息,请添加后再删除!");
            System.out.println("*********************************************");
            return;
        }

        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要修改学生的学号:");
        String studentNumber=sc.next();

        int index=getIndex(studentList,studentNumber);
        if(index==-1){
            System.out.println("该学生不存在,删除操作失败!");
            System.out.println("*********************************************");
            return;
        }

        //如果当前学号存在
        Student s=studentList.get(index);
        System.out.println("请输入新的学号(按-1回到主菜单):");
        String number=sc.next();
        if(number.equals("-1")){
            System.out.println("命令撤回成功!");
            System.out.println("*********************************************");
            return;
        }

        System.out.println("请输入新的姓名:");
        String newName=sc.next();
        s.setName(newName);

        System.out.println("请输入新的年龄:");
        int newAge=sc.nextInt();
        s.setAge(newAge);

        System.out.println("请输入新的专业:");
        String newMajor=sc.next();
        s.setMajor(newMajor);

        System.out.println("请输入新的的手机号:");
        String newPhoneNumber=sc.next();
        s.setPhoneNumber(newPhoneNumber);


    }

    //查询学生(已完成)
    public static void inquireStudent(ArrayList<Student> studentList,String number){


        System.out.println("姓名\t年龄\t学号\t专业\t手机号");
        for (int i = 0; i < studentList.size(); i++) {
            Student s=studentList.get(i);
            if(s.getStudentNumber().equals(number)){
                System.out.println(s.getName()+"\t"+s.getAge()+"\t\t"+s.getStudentNumber()+"\t"+s.getMajor()+"\t"+s.getPhoneNumber());
                break;
            }else{
                System.out.println("没有查询到该学生的信息!");
            }
        }
        System.out.println("*********************************************");
    }

    //打印学生(已完成)
    public static void printStudent(ArrayList<Student> studentList){
        if(studentList.isEmpty()){
            System.out.println("当前没有学生信息,请添加后再打印!");
            System.out.println("*********************************************");
            return;
        }

        System.out.println("姓名\t年龄\t学号\t专业\t手机号");
        for (int i = 0; i < studentList.size(); i++) {
            Student s=studentList.get(i);
            System.out.println(s.getName()+"\t"+s.getAge()+"\t\t"+s.getStudentNumber()+"\t\t"+s.getMajor()+"\t"+s.getPhoneNumber());
        }
        System.out.println("*********************************************");
    }

    //判断学号再集合中是否已经存在
    public static boolean contains(ArrayList<Student> studentList,String stuNumber){
        /*
        for (int i = 0; i < studentList.size(); i++) {
            Student s=studentList.get(i);
            if(s.getStudentNumber().equals(stuNumber)){
                return true;
            }
        }
        return false;
         */
        return getIndex(studentList,stuNumber)>0;

    }

    //通过学号获取索引的方法
    public static int getIndex(ArrayList<Student> studentList,String studentNumber){
        for (int i = 0; i < studentList.size(); i++) {
            Student s=studentList.get(i);
            if(s.getStudentNumber().equals(studentNumber)){
                return i;
            }
        }
        return -1;
    }
}

User类

package com.akbar.student_system;

public class User {
    private String userName;
    private String userPassword;
    private String userID;
    private String userPhoneNumber;

    public User() {
    }

    public User(String userName, String userPassword, String userID, String userPhoneNumber) {
        this.userName = userName;
        this.userPassword = userPassword;
        this.userID = userID;
        this.userPhoneNumber = userPhoneNumber;
    }

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPassword() {
        return userPassword;
    }
    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public String getUserID() {
        return userID;
    }
    public void setUserID(String userID) {
        this.userID = userID;
    }

    public String getUserPhoneNumber() {
        return userPhoneNumber;
    }
    public void setUserPhoneNumber(String userPhoneNumber) {
        this.userPhoneNumber = userPhoneNumber;
    }
}

APP类

package com.akbar.student_system;
import java.util.Random;
import java.util.Scanner;
import java.util.ArrayList;

public class APP {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        ArrayList<User> userList=new ArrayList<>();

        System.out.println("-----------------------欢迎使用学生管理系统----------------------------");

        while(true){
            System.out.println("请选择操作:");
            System.out.println("1:登录\t2:注册\t3:忘记密码\t4:退出程序");

            String userChoose=sc.next();

            switch(userChoose) {
                case "1" -> login(userList);
                case "2" -> register(userList);
                case "3" -> forgetPassword(userList);
                case "4" -> {
                    System.out.println("程序已退出,谢谢使用!");
                    System.exit(0);
                }
                default -> System.out.println("没有这个选项,请重新输入!");
            }
        }

    }

    //登录
    public static void login(ArrayList<User> userList){
        Scanner sc=new Scanner(System.in);
        for(int i=0;i<3;i++){   //密码或者用户名错误3次,账号被锁定

            System.out.println("请输入用户名:");
            String userName=sc.next();
            //判断用户是否已经注册
            boolean flag=contains(userList,userName);
            if(!flag){
                System.out.println("用户名"+userName+"未注册,请先注册再登录!");
                return;
            }

            System.out.println("请输入密码:");
            String password=sc.next();

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

                //比较验证码
                if(!code.equalsIgnoreCase(rightCode)){
                    System.out.println("验证码错误,请重新输入!");
                    continue;
                }
                else{
                    break;
                }
            }

            //验证密码是否正确
            User userInfo=new User(userName,password,null,null);
            boolean result=checkPassword(userList,userInfo);
            if(result){
                System.out.println("登录成功,可以开始使用学生信息管理系统!");
                StudentSystem ss=new StudentSystem();
                ss.startStudentSystem();
                break;
            }else{
                System.out.println("登录失败,用户名或者密码错误!");
                if(i==2){
                    System.out.println("您的当前账号被锁定,请联系管理员!");
                    return;
                }
            }
        }

    }


    //注册
    public static void register(ArrayList<User> userList){
        Scanner sc=new Scanner(System.in);
        String userName;
        String password;
        String id;
        String phoneNumber;
        //用户名处理
        while (true) {
            System.out.println("请输入用户名(按\"-1\"回到主菜单):");
            userName=sc.next();
            if(userName.equals("-1")){
                return;
            }

            //对用户名校验的结果进行判断
            boolean flag1=checkUserName(userName);
            if(!flag1){  //如果格式满足条件,继续判断用户名是否已经存在
                System.out.println("用户名格式有误,请重新输入!");
                continue;
            }

            boolean flag2=contains(userList,userName);
            if(flag2){  //flag2=tru表示当前用户名已经存在
                System.out.println("用户名\""+userName+"\"已存在,请重新输入!");
            }else{
                break;
            }
        }   //用户名校验完毕

        //密码处理
        while (true) {
            System.out.println("请输入密码(按\"-1\"回到主菜单):");
            password=sc.next();
            if(password.equals("-1")){
                return;
            }
            System.out.println("请再次输入密码(按\"-1\"回到主菜单):");
            String againPassword=sc.next();
            if(againPassword.equals("-1")){
                return;
            }

            if(!password.equals(againPassword)){
                System.out.println("两次密码输入不一致,请重新输入!");
                continue;
            }else{
                break;
            }
        }   //密码校验完毕

        //身份证号码处理
        while (true) {
            System.out.println("请输入身份证号码(按\"-1\"回到主菜单):");
            id=sc.next();
            if(id.equals("-1")){
                return;
            }

            boolean flag=checkId(id);
            if(!flag){
                System.out.println("身份证号码格式有误,请重新输入!");
                continue;
            }else{
                break;
            }
        }   //身份证号校验完毕

        //手机号码处理
        while (true) {
            System.out.println("请输入手机号(按\"-1\"回到主菜单):");
            phoneNumber=sc.next();
            if(phoneNumber.equals("-1")){
                return;
            }

            boolean flag4=checkPhone(phoneNumber);
            if(!flag4){
                System.out.println("手机号格式有误,请重新输入!");
                continue;
            }else{
                break;
            }
        }   //手机号校验完毕

        //把上面的信息都放到用户对象当找那个,然后把该对象放到
        User u=new User(userName,password,id,phoneNumber);
        userList.add(u);

        //检验用户的信息是否录入成功
        //printUserInfo(userList);

    }

    //忘记密码
    public static void forgetPassword(ArrayList<User> userList){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName=sc.next();
        boolean flag=contains(userList,userName);
        if(!flag){
            System.out.println("用户名"+userName+"未注册,请先注册!");
            return;
        }

        System.out.println("请输入身份证号码:");
        String idNumber=sc.next();
        System.out.println("请输入手机号码:");
        String phoneNumber=sc.next();

        //比较用户对象中的手机号码和身份证号码是否相同
        //需要把用户对象先拿出来
        int index=getIndex(userList,userName);
        User user=userList.get(index);

        //当输入有误的时候
        if(!(user.getUserID().equalsIgnoreCase(idNumber) && user.getUserPhoneNumber().equals(phoneNumber))){
            System.out.println("身份证号码或者手机号码输入有误,不能修改密码!");
            return;
        }

        //当输入正确的时候
        System.out.println("你的密码是:"+user.getUserPassword());
        System.out.println("你想修改密码吗(\"1\"表示确定)?");
        String sure=sc.next();

        String newId1;
        String newId2;
        if(sure.equals("1")){
            while (true) {
                System.out.println("请输入新的密码:");
                newId1=sc.next();
                System.out.println("请再次输入新的密码:");
                newId2=sc.next();

                if(newId1.equals(newId2)){
                    break;
                }else{
                    System.out.println("两次密码输入不一致,需要重新输入!");
                    continue;
                }
            }
        }else{
            return;
        }

        //密码校验完毕,可以修改
        user.setUserPassword(newId2);
        System.out.println("密码修改成功!");
    }

    //校验用户名书写格式是否准确
    public static boolean checkUserName(String userName){
        //校验长度
        int len=userName.length();
        if(len<3 || len>15){
            return false;
        }

        //校验字母加数字的格式
        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'))){
                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;
    }

    //判断用户名是否已经存在
    public static boolean contains(ArrayList<User> userList,String userName){
        for (int i = 0; i < userList.size(); i++) {
            User u=userList.get(i);
            if(u.getUserName().equals(userName)){
                return true;
            }
        }

        return false;   //当循环结束了,集合里面的每一个用户都比较完毕,就是没有跟用户名一样的,所以return false
    }

    //判断身份张号码是否合法
    public static boolean checkId(String idNumber){
        //校验长度
        if(idNumber.length()!=18){
            return false;
        }

        //判断是不是以零开头
        boolean flag=idNumber.startsWith("0");
        if(flag){
            return false;
        }

        //前面17为一定是数字
        for (int i = 0; i < idNumber.length()-1; i++) {
            char c=idNumber.charAt(i);
            if(!(c>='0' && c<='9')){
                return false;
            }
        }

        //身份证号码最后一位校验
        char endChar=idNumber.charAt(idNumber.length()-1);
        if((endChar>='0' && endChar<='9') || (endChar=='x') || (endChar=='X')){
            return true;
        }
        return false;
    }

    //判断手机号是否合法
    public static boolean checkPhone(String phoneNumber){
        //判断是不是11位
        if(phoneNumber.length()!=11){
            return false;
        }

        //判断是不是0开头
        boolean startNumber=phoneNumber.startsWith("0");
        if(startNumber){
            return false;
        }

        //必须都是数字
        for (int i = 0; i < phoneNumber.length(); i++) {
            char c=phoneNumber.charAt(i);
            if(!(c>='0' && c<='9')){
                return false;
            }
        }

        //当代码进行到这里,就表明,手机号都符合上面的要求
        return true;
    }

    //遍历用户对象,查看是不是成功添加信息
    public static void printUserInfo(ArrayList<User> userList){
        for (int i = 0; i < userList.size(); i++) {
            User u=userList.get(i);
            System.out.println(u.getUserName()+"\t"+u.getUserPassword()+"\t"+u.getUserID()+"\t"+u.getUserPhoneNumber());
        }
    }

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

        //随机抽取4个字符
        StringBuilder sb=new StringBuilder();
        Random r=new Random();
        for (int i = 0; i <4; i++) {
            int index=r.nextInt(randomList.size());
            //利用随机索引,抽取随机字符
            char c=randomList.get(index);
            //把随机字符添加到sb当中
            sb.append(c);
        }

        //把一个随机数字添加到sb的末尾
        int number=r.nextInt(10);
        sb.append(number);

        //数字再任意位置出现
        //先把字符串编程字符数组,再数组中修改,然后再创建一个新的字符
        char[] arr=sb.toString().toCharArray();
        //拿着最后索引,跟随机索引进行交换
        int randomIndex=r.nextInt(arr.length);

        char temp=arr[randomIndex];
        arr[randomIndex]=arr[arr.length-1];
        arr[arr.length-1]=temp;

        //创建一个新的字符串
        return new String(arr);
    }

    //验证密码是否正确
    public static boolean checkPassword(ArrayList<User> userList,User userInfo){
        for (int i = 0; i < userList.size(); i++) {
            User u=userList.get(i);
            if(u.getUserName().equals(userInfo.getUserName()) && u.getUserPassword().equals(userInfo.getUserPassword())){
                return true;
            }
        }
        return false;
    }

    //获取索引
    public static int getIndex(ArrayList<User> userList,String userName){
        for (int i = 0; i < userList.size(); i++) {
            User u=userList.get(i);
            if(u.getUserName().equals(userName)){
                return i;
            }
        }
        return -1;
    }

}