学生信息管理系统(已测试可运行)

思路:

1.菜单部分
通过使用switch来调用不同的方法。在外部写死循环来进行重复操作,在菜单内通过return结束运行。
2.保存学生信息
通过一个一维数组对象数组来存学生信息;
1)创建学生类(描述学生的基本信息)
2)创建学生对象数组(此时对象数组的内容为初始值null)
Student[]stu = new Student[100];
通过访问学生对象数组里的学生对象来进行增删改查,此处要注意的是,新创建的学生对象数组的初始值为null,如果不进行是否为null的判断就进行访问,也就是如果访问到了null对象,就会报空指针异常,这是不被允许的。

public void add() {	
		//数组扩容
		if(stu[stu.length-1]!=null) {
			Student[] st = new Student[stu.length*2];
			change(stu,st);
			stu = st;
		}
		stu[num] = new Student();
		System.out.println("请输入学号:");
		stu[num].setNo(sc.next());
		System.out.println("请输入姓名:");
		stu[num].setName(sc.next());
		System.out.println("请输入性别:");
		stu[num].setSex(sc.next());
		System.out.println("请输入年龄:");
		stu[num].setAge(sc.nextInt());
		num++;

	}

3.添加学生信息
1)通过判断对象数组的最后一位是否为空来判断数组是否满,如果数组已满,那么此时创建一个长度比原数组大的新数组,把原数组的内容给新数组,然后再给新数组赋值。
4.查询指定学生信息
遍历学生信息数组,通过equals()方法来判断遍历的学号与键入学号是否相等,相等则输出对应对象的内容。

public void find() {
		int n = 0;
		System.out.println("请输入你要查询的学生的学号:");
		String a = sc.next();
		for(int i=0;i<stu.length;i++) {
			if(stu[i]!=null) {
				if(stu[i].getNo().contentEquals(a)) {
					System.out.println("学号\t姓名\t性别\t年龄 ");
					System.out.println(stu[i].getNo()+"\t"+stu[i].getName()+"\t"+stu[i].getSex()+"\t"+stu[i].getAge());
				}
			}
		}

		for(int i=0;i<stu.length;i++) {
			if(stu[i]!=null&&stu[i].getNo().equals(a)) 
				n++;
		}
		if(n==0)
			System.out.println("无此学生");
	}

3.查询所有学生信息
遍历学生对象数组并输出。

public void showAll() {
		for(int i = 0;i<stu.length;i++) 
			if(stu[i]!=null){
				{
					System.out.println("学号\t姓名\t性别\t年龄 ");
					System.out.println(stu[i].getNo()+"\t"+stu[i].getName()+"\t"+stu[i].getSex()+"\t"+stu[i].getAge());
				}
			}
	}

4.删除指定学生的信息
遍历学生对象数组,把对应的学生对象赋值为null。

public void del() {
		System.out.println("请输入你要删除的学生的学号:");
		String a = sc.next();
		for(int i=0;i<stu.length;i++) {
			if(stu[i]!=null&&stu[i].getNo().equals(a)) {
				stu[i] = null;
				break;
			}
		}
	}

5.修改学生信息
遍历学生对象数组,把对应的学生对象重新进行赋值操作。

public void modify() {
		System.out.println("请输入你要修改信息的学生学号");
		String a = sc.next();
		for(int i=0;i<stu.length;i++) {
			if(stu[i]!=null&&stu[i].getNo().equals(a)) {
				stu[i] = new Student();
				System.out.println("请输入学号:");
				stu[i].setNo(sc.next());
				System.out.println("请输入姓名:");
				stu[i].setName(sc.next());
				System.out.println("请输入性别:");
				stu[i].setSex(sc.next());
				System.out.println("请输入年龄:");
				stu[i].setAge(sc.nextInt());

			}
		}

	}

6.退出系统
使用return结束运行。

**小细节:**我们在写代码的过程中会发现一个小问题,那就是添加学生信息的功能,是通过角标的累加挨个添加的,那么如果我们给定一个学生对象数组长度10,也就是Student[]stu = new Student[10];当我们添加了3个学生的信息,也就是数组角标为0,1,2被赋值,如果删除0角标的学生,把stu[0]赋值为null,而当我们赋值到9时,数组就进行扩容并继续向后赋值,此时0角标的位置就没有被利用起来,

java新增学生信息 java学生数据增删改查_数据结构

所以我们应该在扩容之前再写一个这样的功能:如果数组被判断已满,那么我们遍历数组,找到为null的数组对象,再对它进行赋值。有了这样一段代码之后,我们之前删除掉的0角标学生的空间就能被利用起来,这样才能真正的在数组全满之后再进行扩容。

附:完整代码及运行结果图

完整代码:

import java.util.Scanner;
public class Demo {
	public static void main(String[] args) {
    new Menu().menu();
}
}

class Menu{
	Student[]stu = new Student[100];//创建一个一维数组来存储信息,
	//先写死,然后再add()方法里进行数组扩容。
	Scanner sc = new Scanner(System.in);
	static int num = 0;
	public void menu() {
		do{
			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("        6.【退出系统】:");
			System.out.println("          【请选择】:");
			int key = sc.nextInt();
			switch(key) {
			case 1:add();      break;
			case 2:find();     break;
			case 3:showAll();  break;
			case 4:del();      break;
			case 5:modify();   break;
			case 6:System.out.println("感谢使用。");return;
			default:System.out.println("请输入正确的选择【1-5】!!");
			}
		}while(true);
	}

	public void add() {	
		if(stu[stu.length-1]!=null) {
			Student[] st = new Student[stu.length*2];
			change(stu,st);
			stu = st;
		}//数组扩容。
        
		stu[num] = new Student();
		System.out.println("请输入学号:");
		stu[num].setNo(sc.next());
		System.out.println("请输入姓名:");
		stu[num].setName(sc.next());
		System.out.println("请输入性别:");
		stu[num].setSex(sc.next());
		System.out.println("请输入年龄:");
		stu[num].setAge(sc.nextInt());
		num++;

	}

	public void find() {
		int n = 0;
		System.out.println("请输入你要查询的学生的学号:");
		String a = sc.next();
		for(int i=0;i<stu.length;i++) {
			if(stu[i]!=null) {
				if(stu[i].getNo().contentEquals(a)) {
					System.out.println("学号\t姓名\t性别\t年龄 ");
					System.out.println(stu[i].getNo()+"\t"+stu[i].getName()+"\t"+stu[i].getSex()+"\t"+stu[i].getAge());
				}
			}
		}

		for(int i=0;i<stu.length;i++) {
			if(stu[i]!=null&&stu[i].getNo().equals(a)) 
				n++;
		}
		if(n==0)
			System.out.println("无此学生");
	}

	public void del() {
		System.out.println("请输入你要删除的学生的学号:");
		String a = sc.next();
		for(int i=0;i<stu.length;i++) {
			if(stu[i]!=null&&stu[i].getNo().equals(a)) {
				stu[i] = null;
				break;
			}
		}
	}

	public void modify() {
		System.out.println("请输入你要修改信息的学生学号");
		String a = sc.next();
		for(int i=0;i<stu.length;i++) {
			if(stu[i]!=null&&stu[i].getNo().equals(a)) {
				stu[i] = new Student();
				System.out.println("请输入学号:");
				stu[i].setNo(sc.next());
				System.out.println("请输入姓名:");
				stu[i].setName(sc.next());
				System.out.println("请输入性别:");
				stu[i].setSex(sc.next());
				System.out.println("请输入年龄:");
				stu[i].setAge(sc.nextInt());

			}
		}

	}

	public void showAll() {
		for(int i = 0;i<stu.length;i++) 
			if(stu[i]!=null){
				{
					System.out.println("学号\t姓名\t性别\t年龄 ");
					System.out.println(stu[i].getNo()+"\t"+stu[i].getName()+"\t"+stu[i].getSex()+"\t"+stu[i].getAge());
				}
			}
	}



	public void change(Student[]a,Student[]b) {
		for(int i=0;i<a.length;i++) {
			b[i]=a[i];
		}

	}
}

java新增学生信息 java学生数据增删改查_数据结构_02