项目要求
能够实现以下四种需求:
1、添加学生信息
2、删除学生信息
3、修改学生信息
4、查询学生信息
代码展示
main类
import java.util.Scanner;//引包,使用scanner方法需要引包。
public class main {
static int index = 0;//静态方法使用静态变量。
static Student [] students = new Student[45];
public static void main(String[] args) {
System.out.println("***********************************");
System.out.println("* 欢迎使用学生管理系统 *");
System.out.println("***********************************");
for(; ;) {
menu();
}
}
private static void menu() {
System.out.println("1、添加学生信息");
System.out.println("2、删除学生信息");
System.out.println("3、修改学生信息");
System.out.println("4、查询学生信息");
System.out.println("请输入所需操作,并按下Enter键");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
switch(number){
case 1:{
if(index>students.length-1) {
System.out.println("班级成员已满,无法继续输入");
return;
}
else{
Student student = new Student();
System.out.println("请输入学生id");
String id = scanner.next();
student.setId(id);
System.out.println("请输入学生name");
String name = scanner.next();
student.setName(name);
System.out.println("请输入学生mobile");
String mobile = scanner.next();
student.setMobile(mobile);
System.out.println("请输入学生address");
String address = scanner.next();
student.setAddress(address);
if(index != 0){
for(Student stu : students) {
if(stu == null) {//座位不允许跳着坐。这样的话,可以不需要if(index!=0)的判断就可以满足。
break;
}
if(stu.getId().equals(student.getId())) {
System.out.println("该学生已存在,请重新输入");
return;
}
}
}
students[index] = student;
++index;
System.out.println("添加成功");
break;
}
}
case 2:{
System.out.println("请输入需要删除学生的学号:");
String id = scanner.next();
/*for(int i =0; students[i]!=null;i++) {
if(students[i]==null) {
System.out.println("未找到学号为:"+id+"的学生");
break;
}
if(i==students.length-1) {
students[i]=null;
System.out.println("删除成功");
index = index -1;
return;
}
else if(students[i].getId().equals(id)) {
students[i]=students[i+1];
System.out.println("删除成功");
index = index -1;
return;
}
}*/
boolean hasData = false;
int i =0;
for(; students[i]!=null;i++) {//判断是否找到学生学号
if(students[i]==null) {
break;
}
if(id.equals(students[i])) {
hasData = true;
break;
}
}
if(!hasData) {
System.out.println("未找到学生信息");
}
for(;i<students.length;i++) {
if(i==students.length-1) {
break;
}
students[i]=students[i+1];
if(students[i+1]==null) {
break;
}
}
System.out.println("删除成功");
index = index -1;
System.out.println("删除学生信息");
break;
}
case 3:{
System.out.println("请输入需要修改学生信息的学号:");
String id = scanner.next();
for(Student student : students) {
if(student == null) {
break;
}
if(student.getId().equals(id)) {
System.out.println("请输入需要修改学生的新名字:");
String name = scanner.next();
student.setName(name);
System.out.println("请输入需要修改学生的新电话:");
String mobile = scanner.next();
student.setMobile(mobile);
System.out.println("请输入需要修改学生的新住址:");
String address = scanner.next();
student.setAddress(address);
System.out.println("修改成功");
return;
}
}
System.out.println("学号为:"+id+"的学生不存在!");
System.out.println("修改学生信息");
break;
}
case 4:{
System.out.println("请输入要查询的学生学号:");
String id = scanner.next();
for(Student student: students) {
if(student == null) {
break;
}
if(student.getId().equals(id)) {
System.out.println(student);//在student类中重写toString方法,实现输出格式。
return;
}
}
System.out.println("该学生不存在。");
break;
}
default:
System.out.println("Can't find "+number+" option!");
}
}
}
student类
public class Student {
private String id;
private String name;
private String mobile;
private String address;
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 getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", mobile=" + mobile + ", address=" + address + "]";
}
}
代码功能分析
1、在main方法中显示功能部分,由其子方法来实现功能。其中,定义变量时使用static静态变量的原因:static修饰的Java元素优先于非static修饰的Java元素,且非静态的Java元素可以直接使用静态Java元素。
2、在子方法中选择使用switch来实现各个功能的实现。具体功能模块分析为:
a.添加:在进行添加时,规定每个学生数据必须连续,即不允许两个相邻数据之间有空位。对于学生是否重复的判定选择以学号作为判断标准,即学号的唯一性解决了重名等问题造成数据输入时的漏洞。每次添加成功之后,令index++;告诉系统对应存储区域已经有数据。每次输入都需要检查学号是否重复,若重复则不进行index+1的操作。
b.删除:对于删除操作,首先需要判断是否有与输入学号对应的学生id,需要使用boolean型的变量hasDate,之后根据hasData来进行有无学生的对应操作。删除学生数据后,需要将后面的数据前移,因此选择使用students[i]=students[i+1]的操作来实现。需要注意的是,每次删除之后需要将index-1,来告诉系统已经完成删除操作,从而进行其他操作。
c.修改:完成修改操作需要找到对应学生学号的位置之后进行对其他位置的修改,且学号不允许被修改。若未找到学生学号,则需要进行反馈输出。
d.查询:完成查询操作时需要在找到对应学生学号之后,直接输出学生的其他信息即可满足操作要求。若未找到学生学号,则需要进行反馈输出。