Java综合案例----学生管理系统

        在学习每门计算机语言的时候,总是绕不过学生管理系统的坎,对于学生管理系统,主要需求就是能够实现增删改查,在完成这些功能之后,这个系统的雏形就有了。可以说是管理系统的必备功能,新增功能也需要在其基础上进行扩展。

首先需求如下:

 如图所示,首先需要准备的是一个学生类,其次是一个存学生对象的数组,如何就是对每个对象进行操作的方法,以下开始逐步实现:(本次编码中的num代表题目中的id!)

1。创建学生类!(技巧:使用Idea进行编码时,可以通过alt+insert键进行快速创建标准Javabean。也可以通过安装“Ptg”插件进行一键生成。)

package com.wxy;

public class Student {
    private int num;//表示该对象的学号
    private String name;//表示该对象的姓名
    private int age;//表示该对象的年龄
//空参构造函数
    public Student() {
    }
//满参构造函数
    public Student(int num, String name, int age) {
        this.num = num;
        this.name = name;
        this.age = age;
    }
//以下为各个成员的getset()方法
    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

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

2.创建一个长度为3的学生类数组,专门存放学生对象:

Student[]arr = new Student[3];

3.实现学生信息的插入,在插入过程中,额外要求:

1.你需要确保学号的唯一性。

2.如果数组存满了,需要创建一个新的数组并且长度比原来的大一,这样就可以安置新的对象。

3.需要用户自己输入学生的信息(人机交互)

4.每次插入完需要能够显示已经插入的学生信息(此部分将在主函数中呈现,不在此呈现)

//以下为插入方法的主体
    public static Student[] insert(Student[]arr){
        if (ifOver(arr)){
            arr = create(arr);
        }
        System.out.println("请依次输入该学生的学号名字和年龄");
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==null)
            {
                Student s = new Student();
                System.out.println("你现在正在输入学生的学号");
                int num = sc.nextInt();
                while (contain(arr,num)){
                    System.out.println("学号重复啦!请重新输入!");
                    num = sc.nextInt();
                }
                    s.setNum(num);
                System.out.println("你现在正在输入学生的名字");
                s.setName(sc.next());
                System.out.println("你现在正在输入学生的年龄");
                s.setAge(sc.nextInt());
                arr[i] = s;
                break;
            }
        }
//通过以下方法进行拓展内存。
    public static Student[] create(Student[] arr){
        Student[] newArr = new Student[arr.length+1];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }
//判断数组是否满了
    public static boolean ifOver(Student[]arr)
    {
        if(arr[arr.length-1] != null){
            System.out.println("超过啦正在创建一个新的容器!");
            return true;
        }
        else
            return false;
    }
//判断是否存在重复学号的学生
   public static boolean contain(Student[]arr,int num){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]!=null)
            if(arr[i].getNum() == num){
                return true;
            }
        }
        return false;
    }

4.创建一个用于展现已经插入的学生信息(在主函数中调用)

    public static void showInfo(Student[]arr){
        System.out.println("当前的学生信息如下:");
        for (int i = 0; i < arr.length; i++) {
            if(arr [i] != null)
            {
                System.out.println(arr[i].getNum()+arr[i].getName()+arr[i].getAge());
            }
        }
    }

 5.定义一个根据学号的值可以删除该学号的信息的方法,额外要求:

1.当删除的学生对象存放的位置不在最后一个时,需要向上补齐,如删除的位置是第二个位置,需要将第三个位置的数据往上移一个单位,并将原来第三个位置的指针进行重定义。

2.能够由用户自己输入想要删除的学号。

3.如果该学号不存在,需要有一个简单的提示。

4.能够在删除后再次展现学生信息(在主函数中实现)。

    public static Student[] delate(int num,Student[]arr){
        int i = 0;
        for (i = 0; i < arr.length; i++) {
//第一步判断是否为空,如果是空的,则没有必要进行判断
            if(arr[i]!=null)
//第二步判断是否存在
                if(arr[i].getNum() == num){
                    arr[i] = null;
//第三判断是否位置在数组的最后一个位置,如果是,则直接让其指针置空,如果不是则进行下一步操作,有利于简化算法,提高效率
                    if(i == arr.length-1){
                        arr[i] = null;
                        break;
                    }
//位置在非最后则进行向上补齐
                    else{
                        for (int j=i+1; j < arr.length; j++) {
                            arr[i] = arr[j];//将删除的位置腾出来给后一位
                            arr[j] = null;//因为后一位的数据已经移动,所以就有两个后一位的数据,将后一位的数据清空,准备给后面来补上
                            i = j;//此步为将删除的元素后移,因为每个元素前移之后就代表多了一个重复元素,意味着我们需要再进行删除操作,直至到数组尾,则停止操作。
                        }
                        break;
                    }
                }
        }
//如果i=数组的长度,说明在上诉过程中,没有找到该学号,以至于没有执行break,以至于i被加到了数组的长度,所以就是没有该学号的意思,进行简单的提示
        if(i == arr.length)
            System.out.println("没有该学号噢");
//最后返回修改后的数组
        return arr;
    }

6.定义一个方法能够根据学号修改该学生的名字和年龄,由于题目所说只是年龄加一,这里改变一下要求,要求可以改变其所有的值,额外要求如下:

1.判断是否存在该学号,没有则进行简单的提示

2.提供提示能够让用户知道自己正在改哪个数据

3.由于此处为数组内容的修改,不需要返回新的数组,如果是重新开辟新空间的数组,则需要返回,让旧数组指向新数组的地址。

    public static void changeData(int num,Student[]arr){
        int i = 0;
        for (i = 0; i < arr.length; i++) {
            if(arr[i]!=null)
                if(arr[i].getNum() == num){
                    System.out.println("请重新输入该学号的姓名");
                    arr[i].setName(sc.next());
                    System.out.println("请重新输入该学号的年龄");
                    arr[i].setAge(sc.nextInt());
                    break;
                }
        }

7.以下编写主函数进行测试,额外要求: 

1.能够有一个简单的界面,提示用户选择模式

2.如果用户不选择退出,则会一直在该系统中

  public static void main(String[] args) {
        Student[]arr = new Student[3];
        boolean flag = true;
        while (flag){
            showInfo(arr);
            System.out.println("请选择模式:\n1:插入学生成绩\n2:删除学生信息\n3:修改学生信息\n0:退出");
//            System.out.println(arr.length);
//通过i能够判断用户选择的模式
            int i = sc.nextInt();
            switch (i){
//列四个模式:
                case 1 -> {
//                    System.out.println("你好");
                    arr = insert(arr);
                }
                case 2 -> {
                    System.out.println("请输入你想删除的学生信息的学号");
                    int num = sc.nextInt();
                    arr = delate(num,arr);
                }
                case 3 ->{
                    System.out.println("请输入需要需改学生信息的学号");
                    int num = sc.nextInt();
                    changeData(num,arr);
                }
                case 0 -> flag = false;
            }
        }
    }

 

 通过以上步骤便可以实现学生信息增删改查的功能,以下为完整代码:

public class Student {
    private int num;
    private String name;
    private int age;

    public Student() {
    }

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

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    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;
    }
}
import com.wxy.Student;
import java.util.Scanner;
public class Studenttest {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        Student[]arr = new Student[3];
        boolean flag = true;
        while (flag){
            showInfo(arr);
            System.out.println("请选择模式:\n1:插入学生成绩\n2:删除学生信息\n3:修改学生信息\n0:退出");
//            System.out.println(arr.length);
            int i = sc.nextInt();
            switch (i){
                case 1 -> {
//                    System.out.println("你好");
                    arr = insert(arr);
                }
                case 2 -> {
                    System.out.println("请输入你想删除的学生信息的学号");
                    int num = sc.nextInt();
                    arr = delate(num,arr);
                }
                case 3 ->{
                    System.out.println("请输入需要需改学生信息的学号");
                    int num = sc.nextInt();
                    changeData(num,arr);
                }
                case 0 -> flag = false;
            }
        }
    }
    public static void changeData(int num,Student[]arr){
        int i = 0;
        for (i = 0; i < arr.length; i++) {
            if(arr[i]!=null)
                if(arr[i].getNum() == num){
                    System.out.println("请重新输入该学号的姓名");
                    arr[i].setName(sc.next());
                    System.out.println("请重新输入该学号的年龄");
                    arr[i].setAge(sc.nextInt());
                    break;
                }
        }
        if(i == arr.length)
            System.out.println("没有该学号噢");
    }
    public static void showInfo(Student[]arr){
        System.out.println("当前的学生信息如下:");
        for (int i = 0; i < arr.length; i++) {
            if(arr [i] != null)
            {
                System.out.println(arr[i].getNum()+arr[i].getName()+arr[i].getAge());
            }
        }
    }
    public static Student[] delate(int num,Student[]arr){
        int i = 0;
        for (i = 0; i < arr.length; i++) {
            if(arr[i]!=null)
                if(arr[i].getNum() == num){
                    arr[i] = null;
                    if(i == arr.length-1){
                        arr[i] = null;
                        break;
                    }
                    else{
                        for (int j=i+1; j < arr.length; j++) {
                            arr[i] = arr[j];
                            arr[j] = null;
                            i = j;
                        }
                        break;
                    }
                }
        }
        if(i == arr.length)
            System.out.println("没有该学号噢");
        return arr;
    }
    public static boolean contain(Student[]arr,int num){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]!=null)
            if(arr[i].getNum() == num){
                return true;
            }
        }
        return false;
    }
    public static boolean ifOver(Student[]arr)
    {
        if(arr[arr.length-1] != null){
            System.out.println("超过啦正在创建一个新的容器!");
            return true;
        }
        else
            return false;
    }
    public static Student[] create(Student[] arr){
        Student[] newArr = new Student[arr.length+1];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }
    public static Student[] insert(Student[]arr){
        if (ifOver(arr)){
            arr = create(arr);
        }
        System.out.println("请依次输入该学生的学号名字和年龄");
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==null)
            {
                Student s = new Student();
                System.out.println("你现在正在输入学生的学号");
                int num = sc.nextInt();
                while (contain(arr,num)){
                    System.out.println("学号重复啦!请重新输入!");
                    num = sc.nextInt();
                }
                    s.setNum(num);
                System.out.println("你现在正在输入学生的名字");
                s.setName(sc.next());
                System.out.println("你现在正在输入学生的年龄");
                s.setAge(sc.nextInt());
                arr[i] = s;
                break;
            }
        }

        return arr;
    }
}

下面为效果图:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值