(实现增删改查基本功能,加深对数组的理解,加深对构造器的理解,加深对方法形参的理解,更加灵活的对循环以及判断语句的使用)
代码阅览
main方法类
package 学生管理系统数组版;
import java.util.Scanner;
public class StudentManager {
public static void main(String[] args) {
Student[] person;
person = new Student[1];
while (true) {
System.out.println("添加【1】 遍历【2】 修改【3】 删除【4】");
switch (new Scanner(System.in).nextInt()) {
case 1:
for (int i = 0; i < person.length; i++) {
if (person[i] == null){
new Student().add(person);
break;
}
if (person.length-1 == i){
Student[] st = new Student[person.length+1];
System.arraycopy(person,0,st,0,person.length);
person = st;
}
}
break;
case 2:
new Student().list(person);
break;
case 3:
new Student().set(person);
break;
case 4:
new Student().delete(person);
break;
}
}
}
}
功能实现类
package 学生管理系统数组版;
import java.util.Scanner;
public class Student {
String name;
int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void add(Student[] person) {
Scanner sc = new Scanner(System.in);
System.out.println("输入姓名");
String name = sc.next();
for (int i = 0; i < person.length; i++) {
if (person[i] != null) {
if (person[i].name.equals(name)) {
System.out.println("成员重复");
break;
}
}
if (person.length - 1 == i) {
for (int j = 0; j < person.length; j++) {
if (person[j] == null) {
System.out.println("输入年龄");
int age = sc.nextInt();
person[j] = new Student(name, age);
System.out.println("添加成功");
break;
}
}
}
}
}
public void list(Student[] person) {
for (int i = 0; i < person.length; i++) {
if (person[i] != null) {
System.out.println(person[i].name + " " + person[i].age);
}
}
}
public void set(Student[] person) {
int age = -1;
Scanner sc = new Scanner(System.in);
System.out.println("要修改人的姓名");
String name = sc.next();
for (int i = 0; i < person.length; i++) {
if (person[i] != null) {
if (name.equals(person[i].name)) {
System.out.println("修改姓名");
String name2= sc.next();
for (int j = 0; j < person.length; j++) {
if (person[j] != null){
if (person[j].name.equals(name2)){
System.out.println("名字重复,无法修改");
age = person[j].age;
break;
}
if (person.length-1 == j){
person[i].name =name2;
System.out.println("修改年龄");
person[i].age = sc.nextInt();
age = person[i].age;
System.out.println("修改成功");
break;
}
}
}
}
}
if (i == person.length - 1 && age == -1) {
System.out.println("没有该数据");
}
}
}
public void delete(Student[] person) {
Scanner sc = new Scanner(System.in);
System.out.println("要删除人的姓名");
String name = sc.next();
for (int i = 0; i < person.length; i++) {
if (person[i] != null) {
if (name.equals(person[i].name)) {
System.out.println("学生" + person[i].name + "已删除");
person[i] = null;
break;
}
}
if (i == person.length - 1) {
System.out.println("没有该数据");
}
}
}
}
代码详解
首先进入main方法启动程序
while循环使程序能够一直运行下去
switch选择结构能够人为控制要运行的功能
红框圈起来的是数组能够在数组长度不够时自动扩容数组的全部代码实现{
-
实例化一个数组对象
-
给这个对象new一个长度为1的数组
-
循环判断是否给数组扩容
首先程序运行起来会创建一个长度为1的Student数组,当你选择添加功能的时候,会先遍历数组所有的索引,当有一个索引的位置的值为null时,就说明数组有空闲的位置,就会进去添加你想要添加的学生信息了,如果一直没有遍历到索引为null时,说明数组已经满了,此时就会进入第二个判断,这个判断里实现了创建一个新数组,只比原先的数组长度大一,并把原先数组的元素赋值到新数组里,最后这个新数组又把它的地址赋值给旧数组的变量person,而走完这个判断,for循环里person长度的值改变了,又会重新循环,就成功进入了第一个判断里,接下来就可以愉快的写学生信息了,全程自动,无感交互,数组空间不会直接增大太多占用内存。
}
未完待续...................