天天看点

Java二维数组实现学生管理系统Java二维数组实现学生管理系统

Java二维数组实现学生管理系统

一、预备知识

1.二维数组的创建
	1) DataType [][] name=new DataType[10][];
	2) DataType [][] name=new DataType[9][5];
	3) DataType [][] name= {};
2.二维数组的初始化
	1) DataType [][] name= {{1,2,3,4},{1,2,3},{}};
	2) name[0]=new DataType[5];
	   name[1]=new DataType[]{4,5,6,7};
	3) name[0][0]=10;
	   name[5][2]=6;
3.二维数组的遍历
	通过双层循环遍历
4.需要注意的
	DataType [][] name=new DataType[9][5];
	当执行name[2]=null后该空间不能被使用
           

二、系统需求

通过控制台打印如下信息:

-------------------------学生管理系统------------------------------
1  添加学生 
2  查询学生 
3  修改学生 
4  删除学生 
5  查询所有学生 
6  退出
请输入编号!
           

要求:

1.该系统用数组的形式实现,数组长度为10
2.学生信息有:id name age,在系统初始化时有一条数据:10001 张三 18
3.添加学生:向系统中添加学生,并显示添加结果
4.查询学生 :查找学生信息并显示查询结果
5.修改学生 :修改学生信息
6.删除学生 :删除学生信息
7.查询所有学生: 打印所有学生的信息
8.退出:退出系统
           

三、代码实现

1.通过二维数组实现

MyStudent.java

StudentTool.java

import java.util.Scanner;

public class MyStudent {
	 Scanner in = new Scanner(System.in);
	 StudentTool studentTool = new StudentTool();

	public static void main(String[] args) {
		new MyStudent().menu();
	}
	
	void showMenu(){
		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("请输入编号!");
	}

	public void menu() {
		while (true) {
			showMenu();
			switch (in.next()) {
			case "1":
				System.out.println("请输入姓名");
				String name= in.next();
				System.out.println("请输入年龄");
				String age= in.next();
				String []stu={"",name,age};
				if(studentTool.addStudent(stu)){
					System.out.println("添加成功");
				}else {
					System.out.println("添加失败!!");
				}
				break;
			case "2":
				System.out.print("请输入学生ID:");
				String id=in.next();
				show(studentTool.searchStudentByID(id));
				break;
			case "3":
				System.out.println("请输入需要修改学生的ID");
				String[] searchResult=studentTool.searchStudentByID(in.next()+"");
				if(searchResult!=null){
					System.out.println("请输入name");
					searchResult[1]=in.next();
					System.out.println("请输入age");
					searchResult[2]=in.next();
					if(studentTool.updataStudent(searchResult)){
						System.out.println("修改成功");
					}else{
						System.out.println("修改失败");
					}
						
				}else {
					System.out.println("学生不存在");
				}				
				break;
			case "4":
				System.out.println("请输入要删除的学生的ID");
				if(studentTool.deleteStudentByID(in.next())) {
					System.out.println("删除成功");
				}
				else {
					System.out.println("删除失败");
				}
				break;
			case "5":
				String[][] stus= studentTool.searchAll();
				for (int i = 0; i < stus.length; i++) {
					show(stus[i]);
				}
				
				break;
				
			case "6":
				System.exit(0);
				break;
			default:
				System.out.println("输入有误请重新输入!!!");
			}
		}
	}
	
	void show(String[] stu) {
		try {
			System.out.println("ID:" + stu[0] + "\tname:" + stu[1] + "\tage:" + stu[2]);
		} catch (Exception e) {
			System.out.println("学生不存在");
		}
	}
}

           
public class StudentTool {

	String[][] stuDB;

	public StudentTool() {
		stuDB = new String[5][3];
		stuDB[0] = new String[] { "10001", "张三", "18" };
	}

	public boolean addStudent(String[] stu) {
		
		if(isEmpty()) {
			stu[0]="10001";
			stuDB[0]=stu;
			return true;
		}
		
		if (!this.isDBFlow()) {
			int index = this.getReallySize();
			stu[0] =(Integer.parseInt(stuDB[index-1][0])+1)+"";
			stuDB[index] = stu;
			return true;
		}
		return false;
	}

	public String[] searchStudentByID(String id) {
		/**
		 * 判断数组是否为空 如果为空就直接返回
		 */
		if (this.isEmpty()) {
			return null;
		}

		int length = this.getReallySize();
		for (int i = 0; i < length; i++) {
			if (this.stuDB[i][0].equals(id)) {
				return this.stuDB[i];
			}
		}
		return null;
	}
	
	public String[][] searchAll() {
		return this.stuDB;
	}

	/**
	 * 修改学生信息
	 * 
	 * @param id
	 * @return true:修改成功 false:修改失败
	 */
	public boolean updataStudent(String[] stu) {
		String[] thisStu = this.searchStudentByID(stu[0]);
		if (thisStu != null) {
			thisStu[1] = stu[1];
			thisStu[2] = stu[2];
			return true;
		} else {
			System.out.println("学生不存在");
			return false;
		}
	}

	public boolean deleteStudentByID(String id) {
		String[] stu = this.searchStudentByID(id);
		int stuLocation = -1;
		int size = getReallySize();
		if (stu != null) {
			for (int i = 0; i < this.getReallySize(); i++) {
				if (stuDB[i][0].equals(id)) {
					stuLocation = i;
					break;
				}
			}

			for (int i = stuLocation, j = size-1; i < j; i++) {
				stuDB[i] = stuDB[i + 1];
			}
			/**
			 * **********************************************bug**********************************************
			 * stuDB[size-1] = null;
			 * **********************************************bug**********************************************
			 * ********************************二维数组不能直接将一行置为null,只有将其每个最小空间置为空*************************************
			 **/
			for (int i = 0; i < stuDB[size-1].length; i++) {
				stuDB[size-1][i] = null;
			}
			return true;

		} else {
			System.out.println("学生不存在,删除失败");
			return false;
		}
	}

	/**
	 * 判断数组是否已经满了
	 * 
	 * @return true:数组已经满 false:数组未满
	 */
	public boolean isDBFlow() {
		int length = stuDB.length;
		return stuDB[length - 1][0] != null;
	}

	/**
	 * 获取数组的真实长度
	 * 
	 * @return 
	 */
	private int getReallySize() {
		int i=0 ;
		if(isEmpty()) {
			return 0;
		}
		if (isDBFlow()) {
			return stuDB.length;
		}
		
		int length = stuDB.length;
		for (; i < length; i++) {
			if (stuDB[i][0] == null) {
				break;
			}
		}
		return i;
	}
	

	/**
	 * 判断数组是否为空
	 * 
	 * @return true:空 false:非空
	 */
	private boolean isEmpty() {
		return stuDB[0][0] == null;
	}
}

           

2.通过对象数组实现

Main.java

Student.java

StudentUtil.java

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		new Main().menu();
	}
	
	Scanner in=new Scanner(System.in);
	
	void menu() {
		StudentUtil studentUtil = new StudentUtil(new Student[10]);
		Student student;
		String id;
		while (true) {
			showMenu();
			switch (in.next()) {
			case "1":
				student = new Student();
				System.out.print("请输入姓名:");
				student.setName(in.next());
				System.out.print("请输入年龄:");
				student.setAge(in.next());
				if (studentUtil.add(student)) {
					System.out.println("添加成功!");
				} else {
					System.out.println("添加失败");
				}
				break;
			case "2":
				System.out.print("请输入学生ID:");
				show(studentUtil.searchSingletonById(in.next()));
				break;
			case "3":
				System.out.print("请输入需要修改学生的ID:");
				id=in.next();
				if(studentUtil.isExist(id)) {
					student = new Student();
					student.setId(id);
					System.out.print("请输入姓名:");
					student.setName(in.next());
					System.out.print("请输入年龄:");
					student.setAge(in.next());
					System.out.println(studentUtil.updata(student)?"修改成功!":"修改失败!2");
				}else {
					System.out.println("修改失败!");
				}
				
				break;
			case "4":
				System.out.print("请输入需要删除学生的ID:");
				id=in.next();
				if(studentUtil.isExist(id)) {
					System.out.println(studentUtil.delete(id)?"删除成功!":"删除失败!");
				}else {
					System.out.println("学生不存在,删除失败!");
				}
				break;
			case "6":
				System.exit(0);
				break;
				
			case "5":
				Student[] students=studentUtil.searchAll();
				
				for (int i = 0; i < students.length; i++) {
					show(students[i]);
				}
				
				break;

			default:
				System.out.println("指令不正确,请重新输入");
				break;
			}
		}
	}
	
	void showMenu(){
		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("请输入编号!");
		
	}
	
	void show(Student stu){
		try{
			System.out.println("ID:"+stu.getId()+"\tname:"+stu.getName()+"\tage:"+stu.getAge());
				
		}catch (Exception e) {
			System.out.println("学生不存在");
			// TODO: handle exception
		}
	}
}

           
public class Student {
	
	private String id;
	private String name;
	private String age;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
}
           
public class StudentUtil {
	
	private Student[] students;
	
	public StudentUtil (Student[] students) {
		this.students=students;
	}
	
	public boolean add(Student student) {
		
		if(isEmpty()) {
			student.setId("10001"); 
			this.students[0] = student;
			return true;
		}
		
		if (!isFull()) {
			student.setId((Integer.parseInt(this.students[getReallySize()-1].getId())+1)+""); 
			this.students[getReallySize()] = student;
			return true;
		}
		return false;
	}
	
	public boolean delete(String id) {
		for (int i = 0; i < getReallySize(); i++) {
			if(this.students[i].getId().equals(id)) {
				for (int j = i; j < getReallySize()-1; j++) {
					this.students[j]=this.students[j+1];
				}
				this.students[getReallySize()-1]=null;
				return true;
			}
		}
		return false;
	}
	
	public boolean updata(Student student) {
		if (this.isEmpty()) {
			return false;
		}
		for (int i = 0; i < getReallySize(); i++) {
			if (students[i].getId().equals(student.getId())) {
				students[i].setAge(student.getAge());
				students[i].setName(student.getName());
				return true;
			}
		}
		return false;
	}
	
	public Student searchSingletonById(String id) {
		
		if(this.isEmpty()) {
			return null;
		}
		for (int i = 0; i < getReallySize(); i++) {
			if (students[i].getId().equals(id)) {
				return students[i];
			}
		}
		return null;
	}
	
	public Student[] searchAll() {
		return this.students;
	}
	
	/**
	 * 判断数组是否为空
	 * 看第一个元素是否为空
	 * @return
	 * true:空数组
	 * false:非空数组
	 */
	private boolean isEmpty() {
		return students[0]==null;
	}
	
	/**
	 * 判断数组是否满了
	 * 看最后一个元素是否不为空
	 * @return
	 * true:满了
	 * false:未满
	 */
	private boolean isFull() {
		return students[students.length-1]!=null;
	}
	
	/**
	 * 判断是否存在该对象中的数据
	 * @param t
	 * @return
	 * true:存在
	 * false:不存在
	 */
	public boolean isExist(String id) {
		//此处不能用遍历器
//		for (Student item : this.students) {
//			if(item.getId().equals(id)) {
//				return true;
//			}
//		}
//		return false;
		
		for (int i = 0; i < getReallySize(); i++) {
			if (students[i].getId().equals(id)) {
				return true;
			}
		}
		return false;
		
		
	}
	
	public int getReallySize() {
		int i=0 ;
		if(isEmpty()) {
			return 0;
		}
		if(isFull()) {
			return students.length;
		}
		for (; i < students.length; i++) {
			if(students[i]==null) {
				break;
			}
		}
		return i;
	}
}