JAVA 学生管理系统

1 整体框架

2 初级版

学生类属性:

package com.bjpowernode;

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

public class StudentSystem {
    public static void main(String[] args) {
        //创建集合  保存学生信息
        ArrayList<Student> list = new ArrayList<>();
        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("请输入您的选择: ");
            Scanner sc = new Scanner(System.in);
            String choose = sc.next();

            switch (choose){
                case "1":
                    addStuudent(list);
                    break;
                case "2":
                    delectStuudent(list);
                    break;
                case "3":
                    updateStuudent(list);
                    break;
                case "4":
                    queryStuudent(list);
                    break;
                case "5":
                    System.out.println("已经退出");
//                    break;   // break 只会退出单层 switch,不会退出 while
                    //break loop;
                    System.exit(0);   //停止虚拟机运行
                default:
                    System.out.println("没有这个选项");
            }
        }

    }

    //添加学生
    public static void addStuudent(ArrayList<Student> list){
        //创建学生对象
        Student stu = new Student();

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入学生的 id:");
            String id = sc.next();
            //判断 id 的唯一性   抽成方法
            boolean flag = contains(list,id);
            if(flag){  //id 不存在
                stu.setId(id);
                break;
            } else {  //已经存在,重 新录入
                System.out.println("ID已经存在,请重新输入");
            }
        }
        System.out.println("请输入学生的姓名:");
        String name = sc.next();
        stu.setName(name);
        System.out.println("请输入学生的年龄:");
        int age = sc.nextInt();
        stu.setAge(age);
        System.out.println("请输入学生的家庭住址:");
        String address = sc.next();
        stu.setAddress(address);

        //再把学生对象添加到集合中
        list.add(stu);

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

    //删除学生
    public static void delectStuudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的 id:");
        String id = sc.next();
        // 判断 id 是否存在,如果存在,还需要拿到 id 对应的索引,方便删除
        int index = getIndex(list, id);
        if(index == -1){  //id 不存在
            System.out.println("ID 不存在,删除失败");
            return;
        } else {
            list.remove(index);     //集合的 remove() 删除方法
            System.out.println("ID 为:" + id + "的学生删除成功");
        }
    }

    //修改学生
    public static void updateStuudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改学生信息的ID:");
        String id = sc.next();
        int index = getIndex(list, id);
        if(index != -1){  //学生存在,需要修改 ID
            //获取要修改的学生对象
            Student stu = list.get(index);
            System.out.println("请输入要修改的学生姓名");
            String newName = sc.next();
            stu.setName(newName);
            System.out.println("请输入要修改的学生年龄");
            int newAge = sc.nextInt();
            stu.setAge(newAge);
            System.out.println("请输入要修改的学生住址");
            String newAddress = sc.next();
            stu.setAddress(newAddress);
            System.out.println("学生信息修改成功");
        } else {
            System.out.println("要修改的 ID" + id + "不存在,请重新输入");
            return;
        }
    }

    //查询学生
    public static void queryStuudent(ArrayList<Student> list){
        if(list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询");
            return;
        }
        System.out.println("id\t\t姓名\t年龄\t家庭住址");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getId() + "\t" + list.get(i).getName() + "\t" +
                    list.get(i).getAge() + "\t" + list.get(i).getAddress());
        }
    }

    //获取 ID 的索引
    public static int getIndex(ArrayList<Student> list, String id){
        for (int i = 0; i < list.size(); i++) {
            if(id.equals(list.get(i).getId())){  //ID存在
                return i;   //返回索引
            }
        }
        return -1;
    }

    //判断 ID 在集合中是否存在
    public static boolean contains(ArrayList<Student> list, String id){
        // 这段 for 循环和 getIndex 方法内重复,可以调用 getIndex()
//        for (int i = 0; i < list.size(); i++) {
//            if(id.equals(list.get(i).getId())){  //id重复
//                return false;
//            }
//        }
//        return true;

        //调用 getIndex() !!
        if(getIndex(list,id) == -1){   //id 不存在
            return true;
        } else {
            return false;
        }
    }

}

3 升级版

用户类属性:

package com.bjpowernode;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

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

public class StudentSystem {
    public static void main(String[] args) {
        //创建用户集合 保存用户信息
        ArrayList<User> userList = new ArrayList<>();

        //创建集合  保存学生信息
        ArrayList<Student> list = new ArrayList<>();

        Scanner sc = new Scanner(System.in);  //创建对象可以移到循环外边,没有必要反复创建
        while (true) {
            System.out.println("----------------欢迎来到学生管理系统----------------");
            System.out.println("请选择操作:1登录  2注册  3忘记密码  4退出");
            String select = sc.next();
            switch (select){
                case "1":
                    //先登录
                    boolean flag = login(userList);  //为真则登录成功,跳转学生界面
                    if(flag) {
                        menu(list);
                    }

                    //登录成功进菜单
                    break;
                case "2":
                    ///注册
                    register(userList);
                    break;
                case "3":
                    //修改密码
                    updatePasswprd(userList);
                    break;
                case "4":
                    System.exit(0);
                default:
                    System.out.println("没有这个选项");
            }
        }

    }

    //菜单
    public static void menu(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        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("请输入您的选择: ");

            String choose = sc.next();

            switch (choose){
                case "1":
                    addStuudent(list);
                    break;
                case "2":
                    delectStuudent(list);
                    break;
                case "3":
                    updateStuudent(list);
                    break;
                case "4":
                    queryStuudent(list);
                    break;
                case "5":
                    System.out.println("已经退出");
//                    break;   // break 只会退出单层 switch,不会退出 while
                    //break loop;
                    System.exit(0);   //停止虚拟机运行
                default:
                    System.out.println("没有这个选项");
            }
        }
    }

    //添加学生
    public static void addStuudent(ArrayList<Student> list){
        //创建学生对象
        Student stu = new Student();

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入学生的 id:");
            String id = sc.next();
            //判断 id 的唯一性   抽成方法
            boolean flag = contains(list,id);
            if(flag){  //id 不存在
                stu.setId(id);
                break;
            } else {  //已经存在,重 新录入
                System.out.println("ID已经存在,请重新输入");
            }
        }
        System.out.println("请输入学生的姓名:");
        String name = sc.next();
        stu.setName(name);
        System.out.println("请输入学生的年龄:");
        int age = sc.nextInt();
        stu.setAge(age);
        System.out.println("请输入学生的家庭住址:");
        String address = sc.next();
        stu.setAddress(address);

        //再把学生对象添加到集合中
        list.add(stu);

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

    //删除学生
    public static void delectStuudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的 id:");
        String id = sc.next();
        // 判断 id 是否存在,如果存在,还需要拿到 id 对应的索引,方便删除
        int index = getIndex(list, id);
        if(index == -1){  //id 不存在
            System.out.println("ID 不存在,删除失败");
            return;
        } else {
            list.remove(index);     //集合的 remove() 删除方法
            System.out.println("ID 为:" + id + "的学生删除成功");
        }
    }

    //修改学生
    public static void updateStuudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改学生信息的ID:");
        String id = sc.next();
        int index = getIndex(list, id);
        if(index != -1){  //学生存在,需要修改 ID
            //获取要修改的学生对象
            Student stu = list.get(index);
            System.out.println("请输入要修改的学生姓名");
            String newName = sc.next();
            stu.setName(newName);
            System.out.println("请输入要修改的学生年龄");
            int newAge = sc.nextInt();
            stu.setAge(newAge);
            System.out.println("请输入要修改的学生住址");
            String newAddress = sc.next();
            stu.setAddress(newAddress);
            System.out.println("学生信息修改成功");
        } else {
            System.out.println("要修改的 ID" + id + "不存在,请重新输入");
            return;
        }
    }

    //查询学生
    public static void queryStuudent(ArrayList<Student> list){
        if(list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询");
            return;
        }
        System.out.println("id\t\t姓名\t年龄\t家庭住址");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getId() + "\t" + list.get(i).getName() + "\t" +
                    list.get(i).getAge() + "\t" + list.get(i).getAddress());
        }
    }


    //登录
    public static boolean login(ArrayList<User> userList){
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入用户名");
        String name = sc.next();
        //判度用户名是否注册  判度唯一性
        boolean flagName = containsUser(userList, name);
        if(flagName){   //不存在返回 true
            System.out.println("用户名未注册,请先注册");
            return false;
        }

        //验证密码
        for (int i = 0; i < 3; i++) {
            boolean flag = true;
            System.out.println("请输入密码");
            String password = sc.next();
            //判度密码是否输入正确
            //返回用户名对应的索引
            int index = getIndexUser(userList, name);
            if(!password.equals(userList.get(index).getPassword())){  //密码正确
                flag = false;
            }

            //验证验证码
            System.out.println("验证码为");
            String rightYzm = randomNunber();   //生成验证码
            System.out.println(rightYzm);
            System.out.println("请输入验证码:");
            String yzm = sc.next();
            if(!yzm.equals(rightYzm)){     // 字符串对象
                flag = false;
            }

            if(flag){
                System.out.println("登录成功");
                break;
            } else {
                System.out.println("密码或者验证码有误,请重新输入");
            }
        }
        return true;

    }

    //注册
    public static void register(ArrayList<User> userList){
        //创建用户对象
        User user = new User();

        Scanner sc = new Scanner(System.in);

        //验证用户名
        while (true) {
            System.out.println("请输入用户名:");
            String name = sc.next();
            //要对用户名做一些判断,才可以存入用户对象
            //判断唯一性
            boolean flag = judgeUsername(userList, name);
            if(flag){   //用户名没有重复
                user.setUsername(name);
                break;
            } else {
                System.out.println("用户名输入错误,请重新输入");
            }
        }

        //验证密码
        while (true) {
            System.out.println("请输入密码:");
            String password1 = sc.next();
            System.out.println("请再次输入密码:");
            String password2 = sc.next();
            if(password1.equals(password2)){  //一样 则密码正确
               user.setPassword(password1);
               break;
            } else {
                System.out.println("两次密码输入不一致,请重新输入");
            }
        }

        //验证身份证号
        while (true) {
            System.out.println("请输入身份证号:");
            String ID = sc.next();
            //判度身份证是否符合要求
            boolean flagID  = judgeID(ID);
            if(flagID){  //符合要求
                user.setID(ID);
                break;
            } else {
                System.out.println("身份证输入有误,请重新输入");
            }
        }

        //验证手机号
        while (true) {
            System.out.println("请输入手机号:");
            String phone = sc.next();
            //判度手机号是否符合要求
            boolean flagPhone = judgePhone(phone);
            if(flagPhone){
                user.setPhone(phone);
                break;
            } else {
                System.out.println("手机号输入有误,请重新输入");
            }
        }

        //将用户对象添加进集合中
        userList.add(user);

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

    }

    //修改密码
    public static void updatePasswprd(ArrayList<User> userList){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");

        String name = sc.next();
        //判度用户名是否注册  判度唯一性
        boolean flagName = containsUser(userList, name);
        if(flagName){   //不存在返回 true
            System.out.println("用户名未注册,请先注册");
            return;
        }

        //获取用户对应的索引号
        int index = getIndexUser(userList, name);
        System.out.println("请输入身份证号");
        String id = sc.next();
        System.out.println("请输入手机号");
        String phone = sc.next();
        if(id.equals(userList.get(index).getID()) && phone.equals(userList.get(index).getPhone())){
            //可以修改密码
            System.out.println("请输入新密码:");
            String newPasswprd = sc.next();
            User u1 = new User();
            u1.setUsername(name);
            u1.setID(id);
            u1.setPhone(phone);
            u1.setPassword(newPasswprd);
            userList.set(index, u1);   //这个集合添加的只能是对象
            System.out.println("修改成功");
        } else {
            System.out.println("账号信息不匹配,修改失败");
        }


    }

    //获取 用户类 对应 的索引
    public static int getIndexUser(ArrayList<User> userList, String name){
        for (int i = 0; i < userList.size(); i++) {
            if(name.equals(userList.get(i).getUsername())){  //ID存在
                return i;   //返回索引
            }
        }
        return -1;
    }


    //判断 用户类 是否唯一
    public static boolean containsUser(ArrayList<User> list, String name){
        if(getIndexUser(list,name) == -1){   //id 不存在
            return true;
        } else {
            return false;
        }
    }

    //获取 学生类 的索引
    public static int getIndex(ArrayList<Student> list, String id){
        for (int i = 0; i < list.size(); i++) {
            if(id.equals(list.get(i).getId())){  //ID存在
                return i;   //返回索引
            }
        }
        return -1;
    }

    //判断 学生类内 是否存在   可以判度一切 String 类型
    public static boolean contains(ArrayList<Student> list, String id){
        //调用 getIndex() !!
        if(getIndex(list,id) == -1){   //id 不存在
            return true;
        } else {
            return false;
        }
    }


    // 验证用户名 验证要求:
    //用户名唯一、用户名长度必须在3~15位之间、只能是字母加数字的组合,但是不能是纯数字
    public static boolean judgeUsername(ArrayList<User> userList, String name){
        //判度长度
        boolean flag2 = false;
        int len = name.length();
        if(len >= 3 && len <= 15){
            flag2 = true;
        }
        //只能是字母加数字的组合,不能是纯数字
        boolean flag3 = judgeUsernameLN(name);

        //判断唯一性
        boolean flag = containsUser(userList, name);


        if(flag && flag2 && flag3){
            return true;
        } else {
            return false;
        }
    }

    //判度用户名是不是字母加数字的组合
    public static boolean judgeUsernameLN(String name){
        int num = 0;
        int c = 0;
        for (int i = 0; i < name.length(); i++) {
            if((name.charAt(i) >= '0' && name.charAt(i) <= '9') ||
                    (name.charAt(i) >= 'a' && name.charAt(i) <= 'z') ||
                    (name.charAt(i) >= 'A' && name.charAt(i) <= 'Z')){    //是字母或者数字
                if((name.charAt(i) >= '0' && name.charAt(i) <= '9') ){
                    num++;          //是数字,num++
                } else {
                    c++;            //是字母,c++
                }
            } else {   //不是字母也不是数字
                return false;
            }
        }
        if(num != 0 && c != 0){
            return true;   //有字母有数字
        } else {
            return false;  //只有字母或者只有数字
        }
    }

    //判度身份证号是否合法
    public static boolean judgeID(String ID){
        if(ID.length() != 18){
            return false;
        }
        if(ID.charAt(0) == '0'){
            return false;
        }
        for (int i = 0; i < ID.length(); i++) {
            if(i == ID.length() -1){
                if((ID.charAt(i)  >= '0' && ID.charAt(i) <= '9') || ID.charAt(i) == 'x'
                || ID.charAt(i) == 'X'){
                    return true;
                } else {
                    return false;
                }

            }
            if(ID.charAt(i) >= '0' && ID.charAt(i) <= '9'){
                continue;
            } else {
                return false;
            }
        }
        return true;
    }

    //判断手机号是否合法
    public static boolean judgePhone(String phone){
        if(phone.length() != 11){
            return false;
        }
        if(phone.charAt(0) == '0'){
            return false;
        }
        for (int i = 0; i < phone.length(); i++) {
            if(phone.charAt(i) >= '0' && phone.charAt(i) <= '9'){
                continue;
            } else {
                return false;
            }
        }
        return true;
    }

    //生成一个五位数的验证码并返回
    public static String randomNunber(){
        //随机生成一个验证码   可以抽成一个方法
        String[] str = new String[5];
        String[] a = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
                "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
        String [] b ={"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
        //先在0-4随机生成一个下标来保存一位数字
        Random r1 = new Random();   //随机生成一个保存数字的下标
        int indexNumber = r1.nextInt(5);
        int indexNumber_b = r1.nextInt(10);
        str[indexNumber] = b[indexNumber_b];

        for (int i = 0; i < 5; i++) {
            if(i == indexNumber)  continue;
            Random r = new Random();
            int index = r.nextInt(52);
            str[i] = a[index];
        }
        String rightYzm = "";
        for (int i = 0; i < str.length; i++) {
            rightYzm = rightYzm + str[i];   //字符串数组转成字符串,方便比较
        }
        return rightYzm;
    }
}

运行结果

3.1 注册

3.2 登录

3.3 修改密码

4 小的开发细节

4.1 校验

先验证格式是否正确,再验证是否唯一
因为在以后所有的数据,都是存在数据库中,如果我们要校验,需要使用到网络资源。

4.2 会两次调用方法

两次调用 length() 方法,可以事先将 length 先保存一下

if(name.length() >= 3 && name.length() <= 15){    
            flag2 = true;
        }

改写为:

int len = name.length();
if(len >= 3 && len) <= 15){    
            flag2 = true;
        }

4.3 通过集合自动添加所有大小写字母

String[] a = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
                "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

可以改为:

//创建一个集合添加所有的大小写字母
ArrayList<Character> a = new ArrayList<>();
for (int i = 0; i < 26; i++) {
    a.add((char)('a' + i));  // 'a' + 0  = 97 强转成字符 还是 a
    a.add((char)('A' + i));  
}

4.4 黑马的随机生成验证码

随机生成 3 次验证码

要求:

  1. 长度为5
  2. 由4位大写或者小写字母和1位数字组成,同一个字母可重复
  3. 数字可以出现在任意位置
package com.bjpowernode;

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

public class GetCode {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            String str = getCode();
            System.out.println(str);
        }
    }
    public static String getCode(){
        //创建一个集合添加所有的大小写字母
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a' + i));
            list.add((char)('A' + i));
        }

        StringBuilder sb = new StringBuilder();   //用于拼接字符串

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

        //把一个随机数字添加到末尾
        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);    //最后再创建一个新的字符串,把 arr 传入  !!

    }
}

4.5 封装思想在传参时的应用

封装思想的应用:
我们可以把一些零散的数据,封装成一个对象,进行传参
以后传递参数的时候,只要传递一个整体就可以了,不需要管这些零散的数据。

//验证用户名和密码是否正确
1/集合中是否包含用户名和密码
1/定义一个方法验证用户名和密码是否正确

//封装思想的应用:
//我们可以把一些零散的数据,封装成一个对象
//以后传递参数的时候,只要传递一个整体就可以了,不需要管这些零散的数据。
User useInfo = new User(username,password, personlD: null, phoneNumber: null);
boolean result = checkUserInfo(useInfo);

参考链接:

学生管理系统-01-业务分析并搭建主菜单_哔哩哔哩_bilibili

学生管理系统-02-查询和添加_哔哩哔哩_bilibili

学生管理系统-03-删除和修改_哔哩哔哩_bilibili

学生管理系统升级-02-完整代码实现_哔哩哔哩_bilibili

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值