臣无祖母,无以至今日,祖母无臣,无以终余年
母孙二人,更相为命,是以区区不能废远
—— 陈情表.李密
—— 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.测试运行结果
添加学生
查看学生
删除学生
修改学生
退出系统