题目要求:请完善实验给定代码,使得工程可以完成学生信息的管理功能,主要功能包括:添加学生数据、打印学生名单、删除学生数据三个功能。
方法:
(1)添加信息:每次空间不足时使用copyOf扩容或者每次都new一个数组来代替
(2)删除信息:删除第i个位置上的元素,此时,需要将从第i个位置之后的所有元素都要向前移动一个位置,并把最后一个位置赋空。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;

public class StudentManage2 {

    public static void main(String[] args) throws IOException {
        // TODO 自动生成的方法存根
        StuManage sm=new StuManage();

        Scanner sc = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = 0;

        do{
            System.out.println("************************************************");
            System.out.println("请选择需要的功能:");
            System.out.println("1.添加学生数据");
            System.out.println("2.打印学生名单");
            System.out.println("3.删除学生信息");
            System.out.println("************************************************");
            n = sc.nextInt();

            //因为要输入中文名称,使用空格,所以scanner不合适,改用BufferedReader读取输入
             switch(n){    
                case 1 : {
                System.out.print("名字:");
                String name=br.readLine();
                System.out.print("学号:");
                String stuNum=br.readLine();
                System.out.print("性别:");
                String sex=br.readLine();
                System.out.print("年龄:");
                String age=br.readLine();

                Stu stu=new Stu(name,stuNum,sex,age);
                sm.addStu(stu);}break;
                case 2 : sm.showStu();break;
                case 3 : {
                    System.out.println("请输入需要删除的学生的学号:");
                String stuNum=sc.next();
                if(sm.delStu(stuNum))
                        System.out.println("操作成功");
                else
                    System.out.println("操作失败");
                }break;
            }
                }
        while(true);
    }

}   
   class Stu{  //学生类

    String name ; 
    String stuNum ;
    String sex  ;
    String age ;
    public String getName() {
          return name;
         }

    public String getStuNum() {
          return stuNum;
         }


         public String getSex() {
          return sex;
         }

             public String getAge() {
              return age;
             }

         //构造函数
         public  Stu(String name,String stuNum,String sex,String age){
          this.name = name;
          this.stuNum = stuNum;
          this.sex = sex;
          this.age = age;
         }  
        /* public void print() {
             System.out.println(stuNum + "    " + name+"  " + sex +"  "+ age);
             }*/
}

class StuManage{  //学生管理类,对象数组的创建,添加,打印,删除
    private Stu[]a= new Stu[1];
    private int count;
//使用Arrays.copyOf对数组扩容
        /*
        if (count >= a.length){ //空间不足时,扩容 
        int newLength = a.length+1;  //新数组的长度
          a=Arrays.copyOf(a, newLength);  //扩容

          } 
        a[count] = student;  //对新扩容数组赋值(对象)
          count++;               //每添加一个对象,count加1
          System.out.println("操作成功");
          */
          //单纯使用数组扩容
        if (count >= a.length){
            Stu []b= new Stu [a.length+1];
            for(int i=0;i<a.length;i++)
                b[i]=a[i];
            a= b ;
        }
        a[count] = student;  //对新扩容数组赋值(对象)
          count++;               //每添加一个对象,count加1
          System.out.println("操作成功");
         }

    public void showStu(){  //打印学生信息

        System.out.println("学号            姓名       性别      年龄");
          for(int i=0;i<count;i++){
           Stu student=a[i];  //数组里存的都是对象的引用(地址)
             // a[i].print();   
           System.out.println(student.getStuNum() + "    " + student.getName()+"  " +student.getSex() +"  "+ student.getAge());
          }  
    }

    public boolean delStu(String delstuNum){  //删除学生信息

          for(int i=0;i<a.length;i++){
           Stu student=a[i];
           if(student.stuNum.equals(delstuNum)){ //(对象比较来说)equals表示比较两个对象实例化后的值是否相等
                                             //(对象比较来说)== 表示比较两个对象的内存地址(就是对象的引用变量存放的内存地址)

                /*for(int j=i;j<a.length;j++)  //删除原理:删除第i个位置上的元素,此时,需要将从第i个位置之后的所有元素都要向前移动一个位置
                    a[j]=a[j+1];*/


                for(int j=i+1;j<a.length;j++)
                    a[j-1]=a[j];

                a[count-1]=null;   // 将最后一个元素赋值为空,null
                count--;           // 删除一个元素,,count自减1
               return true;
              }
          }
        return false;
         }
    }   
Logo

快速构建 Web 应用程序

更多推荐