【娱乐大闯关】Java实现学生管理系统


一段路

本版本为初级状态,适合初学Java者查看!

需求

该系统主要功能如下:
添加学生:通过键盘录入学生信息,添加到集合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
查看学生:将集合中的学生对象信息进行展示
退出系统:结束程序

一、Student.java类

定义学生类,包含以下成员变量:学号、姓名、年龄、家庭地址

package com.burial.project;

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;
    }
	//get和set方法
    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;
    }
}

二、User_Student.java类

定义用户信息类,包含以下成员变量:用户名、密码、身份证号码、手机号码

package com.burial.project;

//用户类
public class User_Student {
    //成员变量
    private String userName;//用户名
    private String password;//密码
    private String personID;//身份证号码
    private String phoneNumber;//手机号码
    //空参和全参方法
    public User_Student() {//空参
    }

    public User_Student(String userName, String password, String personID, String phoneNumber) {//全参
        this.userName = userName;
        this.password = password;
        this.personID = personID;
        this.phoneNumber = phoneNumber;
    }
    //get和set方法
    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 getPersonID() {
        return personID;
    }

    public void setPersonID(String personID) {
        this.personID = personID;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

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

三、Main_Student

(一)初始界面

需求

设计一个菜单:登录、注册、忘记密码、退出功能

        //给定一个集合存储用户对象
        ArrayList<User_Student> list = new ArrayList<>();//创建集合--存储用户对象
        //选择系统
        while (true) {
            //初始界面菜单
            System.out.println("*****欢迎来到学生管理系统*****");
            System.out.println("   ****    1、登录    ****");
            System.out.println("   ****    2、注册    ****");
            System.out.println("******   3、忘记密码   ******");
            System.out.println("******   0、退出系统   ******");
            System.out.println("****************************");
            System.out.println("请选择:");
            Scanner sc = new Scanner(System.in);//创建对象--键盘录入
            int input = sc.nextInt();//录入选择项
            //选择
            switch (input){
                case 1:
                    login(list);//登录
                    break;
                case 2:
                    register(list);//注册
                    break;
                case 3:
                    forgetPassword(list);//忘记密码
                    break;
                case 0:
                    System.out.println("欢迎下次使用!");
                    System.exit(0);//退出系统
                default:
                    System.out.println("选择有误,请重新选择!");
                    break;
            }
        }

(二)注册功能

需求

  • 用户名需要满足以下要求:
    • 用户名唯一
    • 用户名长度必须在3~15位之间
    • 只能是字母加数字的组合,但是不能是纯数字
  • 密码键盘输入两次,两次一致才可以进行注册。
  • 身份证号码需要验证。
    • 长度为18位
    • 不能以0为开头
    • 前17位,必须都是数字
    • 最为一位可以是数字,也可以是大写X或小写x
  • 手机号验证。
    • 长度为11位
    • 不能以0为开头
    • 必须都是数字
    private static void register(ArrayList<User_Student> list) {//注册
        Scanner sc = new Scanner(System.in);//创建对象--键盘录入
        //1、键盘录入用户名
        String name;//定义姓名变量
        while (true) {
            System.out.println("请输入用户名:");
            name = sc.next();//录入用户名
            //验证用户名--先验证格式,再验证是否重复
            //验证长度和组合--符合返回true,否则返回false
            boolean flag = checkUsername(name);
            if(!flag){//false--重新录入
                System.out.println("用户名不符合要求,请重新输入!");
                continue;//若用户名格式不符合要求,则无需验证其唯一性
            }
            //验证用户名唯一性
            int index = contains(list,name);//重复返回下标,否则返回-1
            if(index < 0){//-1--未重复--合法
                break;
            }
            else{//重复
                System.out.println("用户名重复,请重新零输入!");
            }
        }
        //2、键盘录入密码
        String password;//定义密码变量
        while (true) {
            //录入两次密码
            System.out.println("请设置密码:");
            password = sc.next();//录入用户密码
            System.out.println("请再次输入已设置的密码:");
            String userPassword = sc.next();//再次录入用户密码
            //验证两次密码是否一致
            if(password.equals(userPassword)){//两次密码一致
                break;
            }
            else{//两次密码不一致
                System.out.println("两次密码不一致,请重新设置密码!");
            }
        }
        //3、键盘录入身份证号码
        String ID;//定义身份证号码变量
        while (true) {
            //录入身份证号码
            System.out.println("请输入身份证号码:");
            ID = sc.next();//录入身份证号码
            //验证身份证号码
            boolean flag = checkUserID(ID);//符合返回true,否则返回false
            if(flag){//合法
                break;
            }
            else{//不合法
                System.out.println("身份证号码有误,请重新输入!");
            }
        }
        //4、键盘录入手机号
        String phoneNumber;//定义手机号变量
        while (true) {
            //录入手机号码
            System.out.println("请输入手机号:");
            phoneNumber = sc.next();//录入用户手机号码
            //验证手机号码
            boolean flag = checkUserphoneNumber(phoneNumber);//符合返回true,否则返回false
            if(flag)
                break;
            else
                System.out.println("手机号码有误,请重新输入!");
        }
        //5、存入对象--创建用户对象
        User_Student user = new User_Student(name,password,ID,phoneNumber);
        //6、存入集合
        list.add(user);
        System.out.println("注册成功!");
        //6、显示当前集合中的对象信息
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的用户对象
            User_Student use = list.get(i);
            //打印用户对象中的数据
            System.out.println("用户名:" + use.getUserName() + "\t" + "密码:" + use.getPassword() + "\t" +
                    "身份证号码:" + use.getPersonID() + "\t"  + "手机号码:" + use.getPhoneNumber());
        }
    }

用户名格式验证

    private static boolean checkUsername(String userName) {//验证用户名长度和组合
        //1、验证长度--3~15位
        int len = userName.length();//用户名长度
        if(len < 3 || len > 15){//不满足3~15位,返回false
            return false;
        }
        //2、验证组合--只能是字母加数字的组合,但不能是纯数字
        //字母加数字--遍历
        char ch;
        for (int i = 0; i < userName.length(); i++) {
            //获取每一位字符--charAt
            ch = userName.charAt(i);
            //对比--只能是字母加数字
            if(!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))){
                return false;
            }
        }
        //纯数字--遍历统计字母
        int tag = 0;//统计字母
        for (int i = 0; i < userName.length(); i++) {
            //获取每一位字符--charAt
            ch = userName.charAt(i);
            //如果存在字母,则不是纯数字
            if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
                tag = 1;//若有字母出现,则将tag标记为1
                break;
            }
        }
        //如果tag大于0,说明有字母出现,返回true,否则返回false
        return tag > 0;
    }

用户名存在性验证

    private static int contains(ArrayList<User_Student> list, String name) {
        //集合中没有对象
        if(list.size() == 0)
            return -1;
        //验证用户名是否存在于集合中
        //遍历对比
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的每一个用户对象
            User_Student user = list.get(i);
            //对比
            if(name.equals(user.getUserName())){//找到了
                return i;//返回其下标
            }
        }
        return -1;//未找到
    }

身份证号码验证

    private static boolean checkUserID(String id) {
        //1、验证长度--18位
        if(id.length() != 18)
            return false;
        //2、验证开头第一位--不能以0开头--startsWith
        boolean flag = id.startsWith("0");//真的返回true,否则返回false
        if(flag)
            return false;
        //3、验证前17位--前17位必须是数字
        char ch;
        for (int i = 0; i < id.length() - 1; i++) {
            //获取字符串的每一位
            ch = id.charAt(i);
            //对比
            if(!(ch >= '0' && ch <= '9'))
                return false;
        }
        //4、验证最后一位--最后一位可以是数字,也可以是字母小写 x 或大写 X
        //获取最后一位
        ch = id.charAt(17);
		//验证
        if((ch >= '0' && ch <= '9') || ch =='x' || ch == 'X')
            return true;
        else
            return false;
    }

电话号码验证

private static boolean checkUserphoneNumber(String phoneNumber) {
        //1、验证长度--长度11位
        if(phoneNumber.length() != 11)
            return false;
        //2、验证开头第一位--不能以0开头
        char ch = phoneNumber.charAt(0);//获取开头字符
        if(ch == '0')
            return false;
        //验证组成--必须是数字
        for (int i = 0; i < phoneNumber.length(); i++) {
            //获取每一位字符
            ch = phoneNumber.charAt(i);
            //对比
            if(!(ch >= '0' && ch <= '9'))
                return false;
        }
        return true;
    }

(三)登录功能

需求

  • 键盘录入用户名
    • 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
  • 键盘录入密码与验证码
    • 判断验证码是否正确,如不正确,重新输入
    • 再判断用户名和密码是否正确,有3次机会
  • 验证码规则:
    • 长度为5 + 由4位大写或者小写字母和1位数字组成,同一个字母可重复
    • 数字可以出现在任意位置
    • 比如: aQa1K
    private static void login(ArrayList<User_Student> list) {//登录
        Scanner sc = new Scanner(System.in);//创建对象--录入登录信息
        while (true) {
            //1、录入用户名
            System.out.println("请输入用户名:");
            String userName = sc.next();//录入登录用户名
            //验证用户名是否存在
            int result  = contains(list,userName);
            if(result == -1){
                System.out.println("用户名:" + userName + " 未注册,请先注册!");
                return;
            }
            //2、录入密码
            System.out.println("请输入密码:");
            String passWord = sc.next();//录入登录密码
            while (true) {
                //3、生成验证码
                String rightCode = getCode();
                //4、录入验证码
                //显示验证码
                System.out.println(rightCode);
                //输入验证码
                System.out.println("请输入验证码:");
                String code = sc.next();//录入验证码
                //判断验证码是否正确
                if(!(code.equalsIgnoreCase(rightCode))){//不正确--重新输入
                    System.out.println("验证码有误,请重新输入!");
                }
                else{//验证码正确
                    break;
                }
            }
            //2、判断密码和用户名是否正确
            //封装思想:可把一些零散的金数据封装成一个对象
            User_Student useInfo = new User_Student(userName,passWord,null,null);
            //验证用户名和密码
            boolean flag = checkUserInfo(list,useInfo);
            if(flag){//用户名和密码正确
                System.out.println("登录成功!");
                //创建对象,启动学生系统
                Fun_Student fun = new Fun_Student();//创建对象--启动学生系统
                //启动学生系统主功能区
                fun.studentSystem();
                break;
            }
            else{//用户名和密码不正确
                System.out.println("用户名或密码有误,请重新输入!");
            }
        }
    }

生成随机验证码

    private static String getCode() {
        //运用集合生成一个验证码--4个字母一个数字组成
        //1、添加字符到集合
        //创建字符集合
        ArrayList<Character> list = new ArrayList<>();//字符集合--Character为Java中自己定义的字符类
        //添加字符到集合
        for (int i = 0; i < 26; i++) {
            list.add((char)('a' + i));//添加小写字母
            list.add((char)('A' + i));//添加大写字母
        }
        //2、从字符集合中抽取4次字符
        Random r = new Random();//创建对象--生成随机数
        int index;
        char ch;
        StringBuilder sb = new StringBuilder();//创建对象--字符串操作
        //抽取字符
        for (int i = 0; i < 4; i++) {
            //从集合中获取随机索引
            index = r.nextInt(list.size());
            //根据随机索引得到随机字符
            ch = list.get(index);
            //拼接字符--StringBuilder
            sb.append(ch);
        }
        //3、获取随机数字
        int number = r.nextInt(10);
        //拼接--把数字放到末尾
        sb.append(number);
        //4、将数字放到任意位置
        //将字符串转为字符数组--先用toString转为字符串,再用toCharArray转为字符数组
        char[] arr = sb.toString().toCharArray();
        //获取字符数组的随机索引
        int len = arr.length;//字符数组长度
        int randIndex = r.nextInt(len);//获取字符数组的随机索引
        //将字符数组的最大索引与随机索引指向的元素进行交换
        char temp = arr[len- 1];
        arr[len - 1] = arr[randIndex];
        arr[randIndex] = temp;
        //转为字符返回
        return new String(arr);
    }

验证用户名和密码

    private static boolean checkUserInfo(ArrayList<User_Student> list, User_Student useInfo) {
        //判断用户是否存在于集合中
        boolean flag1,flag2;
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的每一个用户对象
            User_Student user = list.get(i);
            //对比--用户和密码
            flag1 = useInfo.getUserName().equals(user.getUserName());//用户名对比
            flag2 = useInfo.getPassword().equals(user.getPassword());//密码对比
            if(flag1 && flag2)
                return true;
        }
        return false;
    }

(四)忘记密码

需求

  • 键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
  • 键盘录入身份证号码和手机号码
  • 判断当前用户的身份证号码和手机号码是否一致,
    • 如果一致,则提示输入密码,进行修改。
    • 如果不一致,则提示:账号信息不匹配,修改失败。
    private static void forgetPassword(ArrayList<User_Student> list) {//忘记密码
        Scanner sc = new Scanner(System.in);//创建对象--键盘录入
        //1、录入用户名
        System.out.println("请输入用户名:");
        String userName = sc.next();//录入用户名
        //验证用户名是否存在
        int index1 = contains(list,userName);
        if(index1 < 0){//不存在
            System.out.println("该用户名未注册!");
            return;
        }
        //2、录入手机号和身份证号码
        System.out.println("请输入身份证号码:");
        String ID = sc.next();//录入身份证号码
        System.out.println("请输入手机号:");
        String phoneNumber = sc.next();//录入手机号
        //验证身份证号手机号是否一致
        //获取用户对象的下标
        int index2 = findIndex(list,userName);
        //获取用户名为:userName 下的用户对象
        User_Student user = list.get(index2);
        //对比
        if(!(user.getPersonID().equals(ID) && phoneNumber.equals(user.getPassword()))){//不一致
            System.out.println("账号信息不匹配,修改失败!");
            return;
        }
        //3、修改密码
        String password;
        while (true) {
            //输入新密码
            System.out.println("请输入新的密码:");
            password = sc.next();//录入新密码
            System.out.println("请再次输入新的密码:");
            String againPassword = sc.next();//再次录入新密码
            //验证密码的一致性
            if(password.equals(againPassword)){
                break;
            }
            else{
                System.out.println("两次密码不一致,请重新输入");
            }
        }
        //修改对象里的数据
        user.setPassword(password);
        System.out.println("密码修改成功!");

    }

查询用户对象下标

    private static int findIndex(ArrayList<User_Student> list, String userName) {
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的用户对象
            User_Student user = list.get(i);
            //对比
            if(userName.equals(user.getUserName()))
                return i;
        }
        return -1;
    }

(五)Main_student.java示例代码

package com.burial.project;

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

public class Main_Student {
    public static void main(String[] args) {
        //给定一个集合存储用户对象
        ArrayList<User_Student> list = new ArrayList<>();//创建集合--存储用户对象
        //选择系统
        while (true) {
            //初始界面菜单
            System.out.println("*****欢迎来到学生管理系统*****");
            System.out.println("   ****    1、登录    ****");
            System.out.println("   ****    2、注册    ****");
            System.out.println("******   3、忘记密码   ******");
            System.out.println("******   0、退出系统   ******");
            System.out.println("****************************");
            System.out.println("请选择:");
            Scanner sc = new Scanner(System.in);//创建对象--键盘录入
            int input = sc.nextInt();//接收选择结果
            //选择功能
            switch (input){
                case 1:
                    login(list);//登录
                    break;
                case 2:
                    register(list);//注册
                    break;
                case 3:
                    forgetPassword(list);//忘记密码
                    break;
                case 0:
                    System.out.println("欢迎下次使用!");
                    System.exit(0);//退出系统
                default:
                    System.out.println("选择有误,请重新选择!");
                    break;
            }
        }
    }

    private static void forgetPassword(ArrayList<User_Student> list) {//忘记密码
        Scanner sc = new Scanner(System.in);
        //1、录入用户名
        System.out.println("请输入用户名:");
        String userName = sc.next();
        //验证用户名是否存在
        int index1 = contains(list,userName);
        if(index1 < 0){//不存在
            System.out.println("该用户名未注册!");
            return;
        }
        //2、录入手机号和身份证号码
        System.out.println("请输入身份证号码:");
        String ID = sc.next();
        System.out.println("请输入手机号:");
        String phoneNumber = sc.next();
        //验证身份证号手机号是否一致
        //获取用户对象的下标
        int index2 = findIndex(list,userName);
        //获取用户名为:userName 下的用户对象
        User_Student user = list.get(index2);
        //对比
        if(!(user.getPersonID().equals(ID) && phoneNumber.equals(user.getPassword()))){//不一致
            System.out.println("账号信息不匹配,修改失败!");
            return;
        }
        //3、修改密码
        String password;
        while (true) {
            //输入新密码
            System.out.println("请输入新的密码:");
            password = sc.next();
            System.out.println("请再次输入新的密码:");
            String againPassword = sc.next();
            //验证密码的一致性
            if(password.equals(againPassword)){
                break;
            }
            else{
                System.out.println("两次密码不一致,请重新输入");
            }
        }
        //修改对象里的数据
        user.setPassword(password);
        System.out.println("密码修改成功!");

    }

    private static int findIndex(ArrayList<User_Student> list, String userName) {
        for (int i = 0; i < list.size(); i++) {
            User_Student user = list.get(i);
            if(userName.equals(user.getUserName()))
                return i;
        }
        return -1;
    }

    private static void register(ArrayList<User_Student> list) {//注册
        Scanner sc = new Scanner(System.in);//创建对象--键盘录入
        //1、键盘录入用户名
        String name;
        while (true) {
            System.out.println("请输入用户名:");
            name = sc.next();//接收用户名
            //验证用户名--先验证格式,再验证是否重复
            //验证长度和组合--符合返回true,否则返回false
            boolean flag = checkUsername(name);
            if(!flag){//false--重新录入
                System.out.println("用户名不符合要求,请重新输入!");
                continue;
            }
            //验证用户名唯一性
            int index = contains(list,name);//重复返回下标,否则返回-1
            if(index < 0){//-1--未重复--合法
                break;
            }
            else{
                System.out.println("用户名重复,请重新零输入!");
            }
        }
        //2、键盘录入密码
        String password;
        while (true) {
            //录入两次密码
            System.out.println("请设置密码:");
            password = sc.next();
            System.out.println("请再次输入设置的密码:");
            String userPassword = sc.next();
            //验证两次密码是否一致
            if(password.equals(userPassword)){//合法
                break;
            }
            else{
                System.out.println("两次密码不一致,请重新设置密码!");
            }
        }
        //3、键盘录入身份证号码
        String ID;
        while (true) {
            //录入身份证号码
            System.out.println("请输入身份证号码:");
            ID = sc.next();
            //验证身份证号码
            boolean flag = checkUserID(ID);//符合返回true,否则返回false
            if(flag){//合法
                break;
            }
            else{
                System.out.println("身份证号码有误,请重新输入!");
            }
        }
        //4、键盘录入手机号
        String phoneNumber;
        while (true) {
            //录入手机号码
            System.out.println("请输入手机号:");
            phoneNumber = sc.next();
            //验证手机号码
            boolean flag = checkUserphoneNumber(phoneNumber);//符合返回true,否则返回false
            if(flag)
                break;
        }
        //5、存入对象
        User_Student user = new User_Student(name,password,ID,phoneNumber);
        //6、存入集合
        list.add(user);
        System.out.println("注册成功!");
        for (int i = 0; i < list.size(); i++) {
            User_Student use = list.get(i);
            System.out.println("用户名:" + use.getUserName() + "\t" + "密码:" + use.getPassword() + "\t" +
                    "身份证号码:" + use.getPersonID() + "\t"  + "手机号码:" + use.getPhoneNumber());
        }
    }

    private static boolean checkUserphoneNumber(String phoneNumber) {
        //长度11位
        if(phoneNumber.length() != 11)
            return false;
        //不能以0开头
        char ch = phoneNumber.charAt(0);//获取开头字符
        if(ch == '0')
            return false;
        //必须是数字
        for (int i = 0; i < phoneNumber.length(); i++) {
            //获取每一位字符
            ch = phoneNumber.charAt(i);
            //对比
            if(!(ch >= '0' && ch <= '9'))
                return false;
        }
        return true;
    }

    private static boolean checkUserID(String id) {
        //验证长度--18位
        if(id.length() != 18)
            return false;
        //不能以0开头--startsWith
        boolean flag = id.startsWith("0");//真的返回true,否则返回false
        if(flag)
            return false;
        //前17位必须是数字
        char ch;
        for (int i = 0; i < id.length() - 1; i++) {
            //获取字符串的每一位
            ch = id.charAt(i);
            //对比
            if(!(ch >= '0' && ch <= '9'))
                return false;
        }
        //最后一位可以是数字,也可以是字母小写 x 或大写 X
        //获取最后一位
        ch = id.charAt(17);
        if((ch >= '0' && ch <= '9') || ch =='x' || ch == 'X')
            return true;
        else
            return false;

    }

    private static int contains(ArrayList<User_Student> list, String name) {
        //集合中没有对象
        if(list.size() == 0)
            return -1;
        //遍历对比
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的每一个用户对象
            User_Student user = list.get(i);
            //对比
            if(name.equals(user.getUserName())){//找到了
                return i;
            }
        }
        return -1;//未找到
    }

    private static boolean checkUsername(String userName) {//验证用户名长度和组合
        //1、长度--3~15位
        int len = userName.length();//用户名长度
        if(len < 3 || len > 15){
            return false;
        }
        //2、只能是字母加数字的组合,但不能是纯数字
        //字母加数字--遍历
        char ch;
        for (int i = 0; i < userName.length(); i++) {
            //获取每一位字符--charAt
            ch = userName.charAt(i);
            //对比--只能是字母加数字
            if(!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))){
                return false;
            }
        }
        //纯数字--遍历统计字母
        int tag = 0;//统计字母
        for (int i = 0; i < userName.length(); i++) {
            //获取每一位字符--charAt
            ch = userName.charAt(i);
            //如果存在字母,则不是纯数字
            if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
                tag = 1;//若有字母出现,则将tag标记为1
                break;
            }
        }
        //如果tag大于0,说明有字母出现,返回true,否则返回false
        return tag > 0;
    }

    private static void login(ArrayList<User_Student> list) {//登录
        Scanner sc = new Scanner(System.in);//创建对象--录入登录信息
        while (true) {
            //1、录入用户名
            System.out.println("请输入用户名:");
            String userName = sc.next();//获取登录用户名
            //验证用户名是否存在
            int result  = contains(list,userName);
            if(result == -1){
                System.out.println("用户名:" + userName + " 未注册,请先注册!");
                return;
            }
            //2、录入密码
            System.out.println("请输入密码:");
            String passWord = sc.next();//获取登录密码
            while (true) {
                //3、生成验证码
                String rightCode = getCode();
                //4、录入验证码
                //显示验证码
                System.out.println(rightCode);
                System.out.println("请输入验证码:");
                String code = sc.next();
                //判断验证码是否正确
                if(!(code.equalsIgnoreCase(rightCode))){//不正确--重新输入
                    System.out.println("验证码有误,请重新输入!");
                }
                else{//验证码正确
                    break;
                }
            }
            //判断密码和用户名是否正确
            //封装思想:可把一些零散的金数据封装成一个对象
            User_Student useInfo = new User_Student(userName,passWord,null,null);
            boolean flag = checkUserInfo(list,useInfo);
            if(flag){
                System.out.println("登录成功!");
                //创建对象,启动学生系统
                Fun_Student fun = new Fun_Student();
                fun.studentSystem();
                break;
            }
            else{
                System.out.println("用户名或密码有误,请重新输入!");
            }
        }
    }

    private static boolean checkUserInfo(ArrayList<User_Student> list, User_Student useInfo) {
        //判断用户是否存在于集合中
        boolean flag1,flag2;
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的每一个用户对象
            User_Student user = list.get(i);
            //对比--用户和密码
            flag1 = useInfo.getUserName().equals(user.getUserName());//用户名对比
            flag2 = useInfo.getPassword().equals(user.getPassword());//密码对比
            if(flag1 && flag2)
                return true;
        }
        return false;
    }

    private static String getCode() {
        //运用集合生成一个验证码--4个字母一个数字组成
        //1、添加字符到集合
        ArrayList<Character> list = new ArrayList<>();//字符集合--Character为Java中自己定义的字符类
        for (int i = 0; i < 26; i++) {
            list.add((char)('a' + i));//添加小写字母
            list.add((char)('A' + i));//添加大写字母
        }
        //2、抽取4次字符
        Random r = new Random();//创建对象,生成随机数
        int index;
        char ch;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            //从集合中获取随机索引
            index = r.nextInt(list.size());
            //根据随机索引得到随机字符
            ch = list.get(index);
            //拼接字符--StringBuilder
            sb.append(ch);
        }
        //3、获取随机数字
        int number = r.nextInt(10);
        //拼接--把数字放到末尾
        sb.append(number);
        //4、将数字放到任意位置
        //将字符串转为字符数组--先用toString转为字符串,再用toCharArray转为字符数组
        char[] arr = sb.toString().toCharArray();
        //获取字符数组的随机索引
        int len = arr.length;//字符数组长度
        int randIndex = r.nextInt(len);
        //将字符数组的最大索引与随机索引指向的元素进行交换
        char temp = arr[len- 1];
        arr[len - 1] = arr[randIndex];
        arr[randIndex] = temp;
        //转为字符返回
        return new String(arr);
    }
}

四、Fun_student.java

(一)系统主界面

需求

设计一个菜单:添加学生、删除学生、修改学生、查看学生、退出功能

        //创建集合存储学生信息
        ArrayList<Student> list = new ArrayList<>();
        //功能选择
        Scanner sc = new Scanner(System.in);//创建对象--键盘录入
        int input = 0;
        while(true){
            menu();//调用功能界面菜单
            input = sc.nextInt();//录入选择项
            //选择
            switch(input){
                case 1:
                    System.out.println("请输入需要录入的学生个数:");
                    int num = sc.nextInt();//录入学生个数
                    for (int i = 1; i <= num; i++) {
                        addStu(list,i);//添加学生
                    }
                    break;
                case 2:
                    delStu(list);//删除学生
                    break;
                case 3:
                    modStu(list);//修改学生
                    break;
                case 4:
                    findStu(list);//查找所有学生
                    break;
                case 0:
                    System.exit(0);//退出系统
                default:
                    System.out.println("选择有误,请重试!");
                    break;
            }
        }

(二)添加学生信息功能

需求

通过键盘录入学生信息,添加到集合中,注:学号必须唯一

    public static void addStu(ArrayList<Student> list,int num){
        //保证程序的健壮性
        if(list == null){
            System.out.println("集合不存在,无法添加学生信息!");
            return;
        }
        //1、录入学生信息
        //录入学号
        Scanner sc = new Scanner(System.in);//创建对象--键盘录入
        String id = "";//定义接收学生学号的变量
        while(true){
            System.out.println("请输入第" + num + "个学生的学号:");
            id = sc.next();//录入学生学号
            //对学号的唯一性进行判断
            boolean flag = IsExit(list,id);//存在返回true,不存在返回false
            if(flag){//重复
                System.out.println("学号重复,请重新输入!");
            }
            else{//不重复--学号录入正确
                break;//跳出学号录入循环
            }
        }
        //录入姓名
        System.out.println("请输入第" + num + "个学生的姓名:");
        String name = sc.next();//录入学生姓名
        //录入年龄
        System.out.println("请输入第" + num + "个学生的年龄:");
        int age = sc.nextInt();//录入学生年龄
        //录入家庭地址
        System.out.println("请输入第" + num + "个学生的家庭地址:");
        String address = sc.next();//录入学生家庭地址
        //2、放入学生对象中
        //存入学生对象中--创建学生对象并赋值
        Student stu = new Student(id,name,age,address);
        //3、存入学生集合中
        list.add(stu);
        System.out.println("第" + num + "名学生信息添加完毕!");
    }

学号存在性判断

    public static boolean IsExit(ArrayList<Student> list,String id){
        //判断传递的参数是否为空,集合是否为空
        if(list == null || list.size() == 0)
            return false;
        //判断ID是否重复
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的学生对象
            Student stu = list.get(i);
            boolean flag = id.equals(stu.getId());//比较ID
            if(flag) {//true--重复
                return false;
            }
        }
        return false;//未重复
    }

(三)删除学生信息功能

需求

通过键盘录入要删除学生的学号,将该学生对象从集合中删除

    public static void delStu(ArrayList<Student> list){
        //1、判断传递的参数是否为空,集合是否为空
        if(list == null || list.size() == 0){
            System.out.println("当前系统暂无学生!");
            return;
        }
        //2、输入要删除的学号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学号:");
        String id = sc.next();
        //查询并删除
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的学生对象
            Student stu = list.get(i);
            //查询
            if(id.equals(stu.getId())){//找到
                //删除
                list.remove(i);
                System.out.println("已将学号为:" + id + " 的学生信息删除!");
                return;
            }
        }
        //未找到
        System.out.println("系统中查无此人!");
    }

(四)修改学生信息功能

需求

通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改

    public static void modStu(ArrayList<Student> list){
        //1、判断传递的参数是否为空,集合是否为空
        if(list == null || list.size() == 0){
            System.out.println("当前系统暂无学生!");
            return;
        }
        //2、输入要修改的学生学号
        Scanner sc = new Scanner(System.in);//创建对象--键盘录入
        System.out.println("请输入要修改的学生学号:");
        String id = sc.next();//录入学生学号
        //3、查询并修改
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的学生对象
            Student stu = list.get(i);
            //判断修改的学号是否存在
            if(id.equals(stu.getId())){//学号存在
                //修改--姓名、年龄、家庭地址
                //录入姓名
                System.out.println("请输入新的学生姓名:");
                String name = sc.next();//录入新的学生姓名
                //录入年龄
                System.out.println("请输入新的学生年龄:");
                int age = sc.nextInt();//录入新的学生年龄
                //录入家庭地址
                System.out.println("请输入新的学生家庭地址:");
                String address = sc.next();//录入新的学生家庭地址
                //添加到对象中--全参方法
                Student newStu = new Student(id,name,age,address);
                //添加到集合中
                list.add(newStu);
                System.out.println("学号为:" + id + " 的学生信息已修改!");
                return;
            }
        }
        //学号不存在
        System.out.println("系统中查无此人!");
    }

(五)查看所有学生信息功能

需求

将集合中的学生对象信息进行展示,格式如下:
学号:张三 姓名:一段路 年龄:6 家庭地址:华夏神州
。。。。。。

    public static void findStu(ArrayList<Student> list){
        //1、判断传递的参数是否为空,集合是否为空
        if(list == null || list.size() == 0){
            System.out.println("当前系统暂无学生!");
            return;
        }
        //2、打印--遍历
        System.out.println("所有学生信息如下:");
        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());
        }
    }

(六)Fun_student.java示例代码

package com.burial.project;

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

public class Fun_Student {
    public static void studentSystem() {
        //创建集合存储信息
        ArrayList<Student> list = new ArrayList<>();
        //功能选择
        Scanner sc = new Scanner(System.in);
        int input = 0;
        while(true){
            menu();
            input = sc.nextInt();
            switch(input){
                case 1:
                    System.out.println("请输入需要录入的学生个数:");
                    int num = sc.nextInt();
                    for (int i = 1; i <= num; i++) {
                        addStu(list,i);
                    }
                    break;
                case 2:
                    delStu(list);
                    break;
                case 3:
                    modStu(list);
                    break;
                case 4:
                    findStu(list);
                    break;
                case 0:
                    System.exit(0);
                default:
                    System.out.println("选择有误,请重试!");
                    break;
            }
        }
    }
    /*菜单
     */
    public static void menu(){
        System.out.println("***学生管理系统主功能区***");
        System.out.println("***    1、添加学生    ***");
        System.out.println("***    2、删除学生    ***");
        System.out.println("***    3、修改学生    ***");
        System.out.println("***    4、查看学生    ***");
        System.out.println("***    0、退出系统    ***");
        System.out.println("************************");
        System.out.println("请选择:");
    }
    /*添加学生:通过键盘录入学生信息,添加到集合中
     */
    public static void addStu(ArrayList<Student> list,int num){
        //1、录入学生信息
        //录入学号
        Scanner sc = new Scanner(System.in);
        String id = "";
        while(true){
            System.out.println("请输入第" + num + "个学生的学号:");
            id = sc.next();//录入学号
            //对学号的唯一性进行判断
            boolean flag = IsExit(list,id);//存在返回true,不存在返回false
            if(flag){//重复
                System.out.println("学号重复,请重新输入!");
            }
            else{//不重复
                break;
            }
        }
        //录入姓名
        System.out.println("请输入第" + num + "个学生的姓名:");
        String name = sc.next();
        //录入年龄
        System.out.println("请输入第" + num + "个学生的年龄:");
        int age = sc.nextInt();
        //录入家庭地址
        System.out.println("请输入第" + num + "个学生的家庭地址:");
        String address = sc.next();
        //2、放入学生对象中
        //创建学生对象并赋值
        Student stu = new Student(id,name,age,address);
        //3、放入学生集合中
        list.add(stu);
        System.out.println("第" + num + "名学生信息添加完毕!");
    }
    //学号唯一性判断
    public static boolean IsExit(ArrayList<Student> list,String id){
        //判断传递的参数是否为空,集合是否为空
        if(list == null || list.size() == 0)
            return false;
        //判断ID是否重复
        for (int i = 0; i < list.size(); i++) {
            //获取集合中的学生对象
            Student stu = list.get(i);
            boolean flag = id.equals(stu.getId());//比较ID
            if(flag) {//true--重复
                return false;
            }
        }
        return false;//未重复
    }
    /*删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
     */
    public static void delStu(ArrayList<Student> list){
        //判断传递的参数是否为空,集合是否为空
        if(list == null || list.size() == 0){
            System.out.println("当前系统暂无学生!");
            return;
        }
        //输入要删除的学号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学号:");
        String id = sc.next();
        //查询并删除
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            //查询
            if(id.equals(stu.getId())){//找到
                list.remove(i);
                System.out.println("已将学号为:" + id + " 的学生信息删除!");
                return;
            }
        }
        System.out.println("系统中查无此人!");
    }
    /*修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
     */
    public static void modStu(ArrayList<Student> list){
        //判断传递的参数是否为空,集合是否为空
        if(list == null || list.size() == 0){
            System.out.println("当前系统暂无学生!");
            return;
        }
        //输入要修改的学生学号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生学号:");
        String id = sc.next();
        //查询并修改
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            if(id.equals(stu.getId())){//存在
                //修改--姓名、年龄、家庭地址
                //录入姓名
                System.out.println("请输入学生的姓名:");
                String name = sc.next();
                //录入年龄
                System.out.println("请输入学生的年龄:");
                int age = sc.nextInt();
                //录入家庭地址
                System.out.println("请输入学生的家庭地址:");
                String address = sc.next();
                //放入对象中
                Student newStu = new Student(id,name,age,address);
                //放入集合中
                list.add(newStu);
                System.out.println("学号为:" + id + " 的学生信息已修改!");
                return;
            }
        }
        System.out.println("系统中查无此人!");
    }
    /*查看学生:将集合中的学生对象信息进行展示
     */
    public static void findStu(ArrayList<Student> list){
        //判断传递的参数是否为空,集合是否为空
        if(list == null || list.size() == 0){
            System.out.println("当前系统暂无学生!");
            return;
        }
        System.out.println("所有学生信息如下:");
        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());
        }
    }
}

执行结果部分截图
注册
注册
登录
登录
添加以下信息,显示结果

  • 23001 一一 11 中国
  • 23002 段段 22 中国
  • 23003 路路 33 中国

添加信息显示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一段路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值