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;
}
}