学生信息管理系统(已测试可运行)
思路:
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角标的位置就没有被利用起来,
所以我们应该在扩容之前再写一个这样的功能:如果数组被判断已满,那么我们遍历数组,找到为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];
}
}
}