臣无祖母,无以至今日,祖母无臣,无以终余年
母孙二人,更相为命,是以区区不能废远
—— 陈情表.李密
—— 24.2.20
一、编写JavaBean
public class Student {//学号private int id;//姓名private String name;//年龄private int age;//性别private String sex;public Student() {}public Student(int id,String name,int age,String sex) {this.age = age;this.name = name;this.id = id;this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}
二、添加功能 addStudent()
private void addStudent() {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();//2.将学生信息封装到Student对象中Student student = new Student(id,name,age,sex);//3.将封装好的Student对象放到students数组中students[count] = student;//4.count记录存储了多少个对象count ++;System.out.println("添加成功!");}
三、查看功能 findAllStudent()
private void findAllStudent() {System.out.println("学号"+" "+"姓名"+" "+"年龄"+" "+"性别");//排序为了防止删除后在添加原序号代表学生导致发生乱序结果for (int i = 0; i < count-1; i++) {for (int j = 0; j < count-1-i; j++) {if(students[i].getId()>students[i+1].getId()){Student temp = students[i];students[i] = students[i+1];students[i+1] = temp;}}}//如果count==0 证明没有添加学生if(count == 0){System.out.println("对不起,该班级尚未添加学生");}else {for (int i = 0; i < count; i++) {System.out.println(" "+students[i].getId()+" "+students[i].getName()+" "+students[i].getAge()+" "+students[i].getSex());}}}
四、修改功能 deleteStudent
private void updateStudent() {//1.录入要修改的学生学号System.out.println("请您录入要修改的学生学号:");int id = sc.nextInt();/*2.注意:修改之后不能直接将id当索引去存储新的学生对象原因:id和学生在数组中的索引不是对应的解决:根据id查询对应的学生在数组中的索引位置*/int updateIndex = ArrayUtils.findIndexById(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 = new Student(id,name,age,sex);students[updateIndex] = student;System.out.println("修改成功!");}
五、删除功能 deleteStudent
private void deleteStudent() {//1.要输入要删除的学生学号System.out.println("请您输入要删除的学生学号:");int id = sc.nextInt();//2.根据id查询学生对应的索引位置int removeIndex = ArrayUtils.findIndexById(students,id,count);//复制被删除元素前面一部分System.arraycopy(students,0,newStudents,0,removeIndex);//在复制被删除元素后面一部分System.arraycopy(students,removeIndex+1,newStudents,removeIndex,students.length-removeIndex-1);//将新数组的地址值给老数组students = newStudents;//删除完之后,count--count--;System.out.println("删除成功!");
}
六、退出功能
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:addStudent();break;case 2:updateStudent();break;case 3:deleteStudent();break;case 4:findAllStudent();break;case 5:System.out.println("是否退出?按0为退出/按9为取消");int key = sc.nextInt();if(key==0){System.out.println("再见,欢迎下次使用!");return;//结束方法}else if(key == 9){break;}default:System.out.println("输入数字有误");}}}
七、总代码
1.增删改查方法
import java.lang.reflect.Array;
import java.util.Scanner;public class StudentView {//后面会反复键盘录入,所以Scanner键盘录入方法放在开头Scanner sc = new Scanner(System.in);/*老数组,长度为50,代表班级最多能放50个人后面每个功能都需要使用数组,所以可以将数组放到成员位置*/Student[] students = new Student[50];/*定义一个count变量,记录数组中有多少个对象,遍历元素不能全部遍历因为没有存对象的位置遍历出来是null,在调用get xxx方法,会出现空指针所以我们应该记录存储对象的个数,存多少个对象,就遍历多少次而且,后面可能会反复使用count,所以提到成员位置*/int count = 0;/*新数组,一会删除元素的时候需要将删除后剩下的元素复制到新数组中因为数组定长,不能直接在原来的数组基础上随意改变长度由于一次删一个,所以新数组长度为老数组长度-1后面可能会反复使用新数组,所以定义到成员位置*/Student[] newStudents = new Student[students.length-1];//start方法用于展示页面以及调用对应功能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:addStudent();break;case 2:updateStudent();break;case 3:deleteStudent();break;case 4:findAllStudent();break;case 5:System.out.println("是否退出?按0为退出/按9为取消");int key = sc.nextInt();if(key==0){System.out.println("再见,欢迎下次使用!");return;//结束方法}else if(key == 9){break;}default:System.out.println("输入数字有误");}}}private void findAllStudent() {System.out.println("学号"+" "+"姓名"+" "+"年龄"+" "+"性别");//排序for (int i = 0; i < count-1; i++) {for (int j = 0; j < count-1-i; j++) {if(students[i].getId()>students[i+1].getId()){Student temp = students[i];students[i] = students[i+1];students[i+1] = temp;}}}//如果count==0 证明没有添加学生if(count == 0){System.out.println("对不起,该班级尚未添加学生");}else {for (int i = 0; i < count; i++) {System.out.println(" "+students[i].getId()+" "+students[i].getName()+" "+students[i].getAge()+" "+students[i].getSex());}}}private void deleteStudent() {//1.要输入要删除的学生学号System.out.println("请您输入要删除的学生学号:");int id = sc.nextInt();//2.根据id查询学生对应的索引位置int removeIndex = ArrayUtils.findIndexById(students,id,count);//复制被删除元素前面一部分System.arraycopy(students,0,newStudents,0,removeIndex);//在复制被删除元素后面一部分System.arraycopy(students,removeIndex+1,newStudents,removeIndex,students.length-removeIndex-1);//将新数组的地址值给老数组students = newStudents;//删除完之后,count--count--;System.out.println("删除成功!");
}private void updateStudent() {//1.录入要修改的学生学号System.out.println("请您录入要修改的学生学号:");int id = sc.nextInt();/*2.注意:修改之后不能直接将id当索引去存储新的学生对象原因:id和学生在数组中的索引不是对应的解决:根据id查询对应的学生在数组中的索引位置*/int updateIndex = ArrayUtils.findIndexById(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 = new Student(id,name,age,sex);students[updateIndex] = student;System.out.println("修改成功!");}private void addStudent() {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();//2.将学生信息封装到Student对象中Student student = new Student(id,name,age,sex);//3.将封装好的Student对象放到students数组中students[count] = student;//4.count记录存储了多少个对象count ++;System.out.println("添加成功!");}
}
2.测试类 main函数
public class Test01 {public static void main(String[] args) {new StudentView().start();}
}
3.复制数组内容
public class Test02 {public static void main(String[] args) {int[] arr1 = {1,2,3,4,5,6,7,8};int[] arr2 = new int[8];/*工具类:System静态方法:arrayCopy参数1:源数组 -> 从哪个数组中开始复制参数2:从源数组的哪个索引开始复制参数3:目标数组 -> 复制到哪里去参数4:从目标数组的哪个索引开始粘贴参数5:复制多少个*/System.arraycopy(arr1,0,arr2,0,3);for (int i = 0; i < arr2.length; i++) {System.out.println(arr2[i]);}}
}
4.查找数组中与查询学号值相同的索引
public class ArrayUtils {private ArrayUtils(){}public static int findIndexById(Student[] students,int id,int count){//遍历,查找for (int i = 0; i < count; i++) {if(id == students[i].getId()){return i;}}return -1;}
}
5.测试运行结果
添加学生
查看学生
删除学生
修改学生
退出系统