Java案例-学生管理系统

功能展示

启动类

java 复制代码
public class Test {
    public static void main(String[] args) {
        new StudentView().start();
    }
}

学生类

java 复制代码
package StudentManager;

public class Student {
    //学号
    private int id;
    //姓名
    private String name;
    //性别
    private String sex;
    //年龄
    private int age;

    public Student() {
    }

    public Student(int id, String name, int age,String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


}

菜单与前期准备

java 复制代码
    //获取键盘录入
    Scanner sc = new Scanner(System.in);

    //定义一个数组,用于存储学生信息
    Student[] students = new Student[50];

    //定义一个计数变量,用统计对学生数组的操作次数
    //为什么定义新数组:没存对象的位置遍历出来的是null,调用getter方法会出现空指针
    int count = 0;

    //定义新数组,用于存储操作之后的学生数组
    //原因:数组定长
    Student[] newStudents = new Student[students.length - 1];

    public void start() {
        //界面显示
        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("请选择(1-5):");
            int num = sc.nextInt();
            System.out.println("----------------------------------");
            switch (num) {
                case 1:
                    addStudnet();
                    break;
                case 2:
                    updateStudent();
                    break;
                case 3:
                    removeStudent();
                    break;
                case 4:
                    findAddStudent();
                    break;
                case 5:
                    System.out.println("是否退出程序?退出按0,不退出按9");
                    int key = sc.nextInt();
                    if (key == 0) {
                        return; //退出方法
                    } else if (key == 9) {
                        break; //退出循环
                    }
            }
        }
    }

添加功能

java 复制代码
    private void addStudnet() {
        //添加功能
        System.out.println("添加功能");
        //1、键盘录入学生信息
        System.out.println("请输入学生学号:");
        int id = sc.nextInt();
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请输入学生性别:");
        String sex = sc.next();
        //将学生信息封装到Student对象中
        Student student = new Student(id, name, age, sex);
        //3、将封装好的student对象放到students中
        students[count] = student;
        //4、count++ 记录存储了多少个对象
        count++;
        System.out.println("添加成功!!!");
    }

修改功能

java 复制代码
   private void updateStudent() {
        System.out.println("修改功能");
        System.out.println("请输入需要修改的学生学号:");
        int id = sc.nextInt();
        for (int i = 0; i < count; i++) {
            if (id == students[i].getId()) {

                int updateindex = ArrayUtils.fiandIndexById(students, id, count);
                System.out.println("请输入学生姓名:");
                String name = sc.next();
                System.out.println("请输入学生年龄:");
                int age = sc.nextInt();
                System.out.println("请输入学生性别:");
                String sex = sc.next();
                //将修改之后的信息,封装成一个新的student对象

                Student student = new Student(id, name, age, sex);
                students[updateindex] = student;
                System.out.println("修改成功!!");
            } else {
                System.out.println("学号不存在,请核对后修改");
            }
        }
    }

删除功能

java 复制代码
    private void removeStudent() {
        System.out.println("删除功能");
        System.out.println("输入要删除的学生学号:");
        int id = sc.nextInt();
        for (int i = 0; i < count; i++) {
            if (id == students[i].getId()) {
        //获取删除学号的下标
        int deleteIndex = ArrayUtils.fiandIndexById(students, id, count);
        //因为数组不支持删除,所以将数组中除删除元素外的元素复制到新的数组中
        //第一次复制:复制删除学号之前的
        System.arraycopy(students, 0, newStudents, 0, deleteIndex);
        //第二次复制:复制删除学号之后的
        System.arraycopy(students, deleteIndex + 1, newStudents, deleteIndex, students.length - deleteIndex - 1);
        //将新数组的地址值给老数组
        students = newStudents;
        //删除学生之后,count--
        count--;
        System.out.println("删除成功");
            } else {
                System.out.println("学号不存在,请核对后删除");
            }
        }
    }

查看功能

java 复制代码
    private void findAddStudent() {
        System.out.println("查看功能");
        System.out.println("学号" + "\t" + "姓名" + "\t" + "年龄" + "\t" + "性别");

        //增加冒泡排序
        for (int i = 0; i < count; i++) {
            for (int j = 0; j < count - 1 - i; j++) {
                if (students[j].getId() > students[j + 1].getId()) {
                    Student temp = students[j];
                    students[j] = students[j + 1];
                    students[j + 1] = temp;
                }
            }
        }

        //count代表班级中的实际人数,故不能通过students.length 来进行判断
        if (count == 0) {
            System.out.println("班级人数为0,待开班");
        } else {
            //循环元的是班级中实际的人数
            for (int i = 0; i < count; i++) {
                System.out.println(students[i].getId() + "\t" + students[i].getName() + "\t" + students[i].getAge() + "\t" + students[i].getSex());
            }
        }
    }

工具类

java 复制代码
public class ArrayUtils {
    private ArrayUtils() {

    }
    public static int fiandIndexById(Student[] students, int id, int count) {
        //遍历查找下标值
        for (int i = 0; i < count; i++) {
            if (id == students[i].getId()) {
                return i;
            }
        }
        return -1;
    }
}

数组复制

java 复制代码
public class Test02 {
    public static void main(String[] args) {
        int[] arr1 ={1,2,3,4,5,8,6,7};
        int[] arr2 = new int[7];
        /**
         * 工具类:System
         * 静态方法:arrayCopy
         *      参数1;原数组
         *      参数2:开始索引
         *      参数3:目标数组
         *      参数4:目标数字的哪个索引开始粘贴
         *      参数5;复制多少
         */

        System.arraycopy(arr1,2,arr2,1,4);
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i]);
        }


    }
}
相关推荐
骇客野人2 小时前
IntelliJ IDEA 菜单中英对照
java·ide·intellij-idea
我命由我123452 小时前
Kotlin 面向对象 - 枚举排序
android·java·开发语言·java-ee·kotlin·android studio·android-studio
Sam_Deep_Thinking2 小时前
用Java 17从0到1写一个mini版RPC,理解远程调用的本质
java·面试·rpc·程序员·系统架构
敲代码的嘎仔3 小时前
从零搭建微服务:Spring Cloud Alibaba 全家桶踩坑实录(Nacos + OpenFeign + Gateway + Sentinel)
java·spring boot·spring·spring cloud·微服务·gateway·sentinel
一条泥憨鱼3 小时前
苍穹外卖【day7| 对购物车进行操作】
java·后端·mysql·苍穹外卖
都叫我大帅哥15 小时前
Java JJWT 完全指南:从入门到生产级实践
java
前端开发张小七16 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
ThsPool17 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
赤壁小虾17 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库