学生管理系统
实现学生对象的增删改查
- 学生类:
public class Student {
static int num = 0;
int id ; //系统自动生成id;
String name;
boolean gender; //true 男, false 女
//当初始化对象的时候调用构造方法,通过num自动生成id;
public Student() {
this.id = num++;
}
//为了防止打印的是地址
@Override
public String toString() {
String temp = "男";
if (!gender) {
temp = "女";
}
String string = "学号是:" + this.id + "姓名是:" + this.name + "性别是:" + temp;
return string;
}
}
- 管理类
public class Control {
//数组
Student[] arr = new Student[2];
//记录当前数组中存放几个学生
int index = 0;
//初始化学生
void init (){
Student student = new Student();
student.name = "小敏";
student.gender = false;
student.id = 1;
Student student1 = new Student();
student1.name = "小张";
student1.gender = true;
student1.id = 2;
arr[0] = student;
arr[1] = student1;
this.index = 2; //存放两个学生;
}
public Control() {
this.init();
}
//1,显示所有学生
void show() {
System.out.println("--------------");
//遍历存储的学生;
for (int i = 0; i < this.index; i++) {
//打印学生信息
System.out.println(arr[i]);
}
}
//2,根据ID查找学生 (返回查找到的学生)
Student selectStudentById(int id) {
for (int i = 0; i < index; i++) {
//判断,传进去的ID和数组中的ID是否相同
if (this.arr[i].id == id) {
//如果相同,输出这个对象
System.out.println(this.arr[i]);
return this.arr[i];
}
}
//如果代码执行到这个位置没有找到学生,返回null;
return null;
}
//3,根据ID删除学生;并且返回被删除的元素对象
Student deleteStudentByid(int id) {
//如果ID小于0,直接返回空
if (id < 0) {
return null;
}
//先找到这个学生
int tag = -1; //假定的学生在数组中的位置,不可以为0;因为如果为0,当没有找到要删除的学生的时候,就会把第0个元素的学生删除.
for (int i = 0; i < index; i++) {
if (id == this.arr[i].id) { //找到这个学生
tag = i; //记录他的下标
break;
}
}
if (tag == -1) { //说明没有找到要删除的学生;
return null;
}
//记录要删除的元素对象,根据记录的tag去找
Student temp = this.arr[tag];
//删除学生,后边的元素向前移动一位;(如果有四个学生对象,删除一个,所以只需移动三次即可,所以index要减一)
for (int i = 0; i < index - 1; i++) {
//后边的元素前移;
this.arr[i] = this.arr[i+1];
}
index--;
return temp;
}
//4,增加学生对象
void addStudent(Student st) {
//如果index < 数组的长度,直接添加元素
if (index < this.arr.length) {
this.arr[index] = st;
index++;
}else { //数组没有空位置了
//扩充数组
this.expandArr();
//添加 当扩充完数组以后,index就小于数组的长度,上边的判断就可以成立,,所以这里调用方法自身;
this.addStudent(st);
}
}
//5,修改学生信息
void updateStudentByStudent(Student stu) {
//查找学生
Student st = this.selectStudentById(stu.id);
//修改
st.name = stu.name;
st.gender = stu.gender;
}
//扩充数组
void expandArr() {
//创建一个新数组 (直接给他的长度加10,避免多次增加长度)
Student[] stus = new Student[this.arr.length + 10];
//把元素复制过去
for (int i = 0; i < index; i++) {
//把旧数组的元素给新数组
stus[i] = this.arr[i];
}
//新数组名存放的是地址,把这个地址再赋值给旧数组,所以通过旧数组访问的也是新的元素
this.arr = stus; //把新数组赋值给数组;
}
}