题目要求:请完善实验给定代码,使得工程可以完成学生信息的管理功能,主要功能包括:添加学生数据、打印学生名单、删除学生数据三个功能。
方法:
(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;
}
}