这两天,跟着老师学习了一个小项目。算是对之前所学的Java知识做一个总结。项目:学生信息的添加、删除、修改和查询。
包含的成员变量有姓名、学号、手机号码和家庭住址,通过“封装”的方法完成。同时,重写输出,方便学生信息的查询。
package venus; public class Student { private String name; private String id; private String mobile; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } 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 [name=" + name + ", id=" + id + ", mobile=" + mobile + ", address=" + address + "]"; } }主函数通过死循环完成学生信息的操作。
public static void main(String[] args) {
System.out.println("*************************");
System.out.println("******欢迎使用学生管理系统******");
System.out.println("*************************");
for(;;) {//死循环,用于操作
menu();
}
}
首先,为用户添加提示信息:
System.out.println("1、添加学生信息");
System.out.println("2、删除学生信息");
System.out.println("3、修改学生信息");
System.out.println("4、查询学生信息");
System.out.println("请输入操作项,点击Enter键!");
建立Scanner类的输入对象,按住“Ctrl+Shift+O”添加Scanner路径。通过switch(),case获取指令。
Scanner scanner = new Scanner(System.in);
int option = scanner.nextInt();
switch (option) {
case 1:{
System.out.println("添加学生信息");
return;
}
case 2:{
System.out.println("删除学生信息");
return;
}
case 3:{
System.out.println("修改学生信息");
return; }
case 4:{
System.out.println("查询学生信息");
return;
}
default:
System.out.println("系统没有找到"+option+"操作项!");
return; }
建立一个Student类的数组,设置共有45个对象,每完成一个添加,index就加一。在添加信息时,学生的学号是唯一的,因此每添加一个学号,就和已添加的学号作比较。
case 1:{//加括号,使变量"name"在后面查询可用。 if(index>students.length-1) { System.out.println("已经没有座位了"); return; } Student student = new Student(); System.out.println("请输入学生姓名:"); String name = scanner.next(); student.setName(name); System.out.println("请输入学生学号:"); String id = scanner.next(); if(index!=0) { for(Student stu : students) { if(stu == null) {//null对象不允许调用方法,它是一个空指针 break; } if(stu.getId().equals(id)) { System.out.println("学号不允许重复!"); return; } } } student.setId(id); System.out.println("请输入学生手机号码:"); String mobile = scanner.next(); student.setMobile(mobile); System.out.println("请输入学生家庭地址:"); String address = scanner.next(); student.setAddress(address); students[index] = student;//添加学生 index = index +1;//添加成功,计数加一 System.out.println("添加学生信息成功"); return; }
通过用户输入,得到要删除学生的姓名(也可改为学号),然后比较找到该学生对象,最后通过算法将其删除掉。删除算法:得到要删除对象的位置,将其之后的对象向前依次覆盖,最后将原先最后一个对象设为null,不然会“索引超出维度范围”。
case 2:{ System.out.println("请输入要删除学生的姓名:"); String name = scanner.next(); int i = 0;//保存要删除对象的位置 boolean flag = false;//如果找到该学生,则置为true for(;i<students.length;i++) { if(students[i].getName()==null) { break; } if(students[i].getName().equals(name)) { flag = true; break; } } if(flag == false) { System.out.println("没有找到姓名为"+name+"的学生信息"); return; } for(;i<students.length;i++) { if(i == students.length-1) {//满员时,最后一个元素置为null students[i] = null; break; } students[i] = students[i+1]; if(students[i+1] == null) { break; } } System.out.println("删除信息成功"); index = index-1;//删除成功,计数减一 return; }
修改信息与删除信息相似,找到相关的学生后,修改信息即可。
case 3:{ boolean hasStu = false; System.out.println("请输入学号:"); String id = scanner.next(); for(Student stu:students) { if(stu==null) { break; } if(stu.getId().equals(id)) { System.out.println("请输入姓名:"); String name = scanner.next(); stu.setName(name); System.out.println("请输入手机号码:"); String mobile = scanner.next(); stu.setMobile(mobile); System.out.println("请输入家庭地址:"); String address = scanner.next(); stu.setAddress(address); hasStu = true; } } if(hasStu==false) { System.out.println("没有找到学号为"+id+"的相关信息"); } System.out.println("修改信息成功"); return; }
在Student类中,我们已经完成了对字符串输出方法的重写,使之能够按“重写”的格式输出。注:“重写”后,输入对象的地址信息,就可实现调用。
case 4:{ boolean hasStu = false; System.out.println("请输入学生姓名:"); String name = scanner.next(); for(Student stu:students) { if(stu==null) { break; } if(stu.getName().equals(name)) {//内容为null的对象无法调用,会出错 System.out.println(stu);//直接输出一个类的对象的时候,会调用这个类的toString()方法 hasStu = true; } } if(hasStu==false) { System.out.println("没有找到"+name+"的相关信息"); } return; }