【学生管理系统-java】

学生管理系统

    • 需求
    • 实战操作
      • Student配置类
      • 系统主界面
      • 退出系统
      • 查询学生
      • 添加学生
      • 删除学生
      • 修改学生
      • 运行结果

需求

采用控制台的方式取书写学生管理系统。

初始菜单

——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:

学生类
 属性:学号id,姓名,年龄,家庭地址

添加功能:
 键盘录入一个学生信息并添加,且满足以下需求:
  id唯一

删除功能:
 键盘录入删除学生的id,且满足以下需求:
  id存在删除
  id不存在,需提示不存在,并返会到初始菜单

修改功能:
 键盘录入要修改的学生id,需要满足以下要求:
  id存在,继续录入其他信息
  id不存在,需要提示不存在,并回到初始菜单

查询功能:
打印所有的学生信息,需要满足以下要求:
如果没有学生信息,提示:当前无学生信息,请添加后再查询
如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)

学号	姓名	年龄	地址
001		张三	18		北京
002		李四	19		上海
003		王五	20		深圳

实战操作

Student配置类

public class Student {
    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(String id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = 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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String toString() {
        return id+"\t" + name +"\t"+ age+"\t"+ address;
    }
}

系统主界面

采用while循环嵌套switch
通过choice接收的字符串与switch中字符串匹配,从而执行不同语句
优点:采用while循环嵌套switch语句进行系统开发,可以结合两种控制结构的优势,实现灵活的条件判断、高效的循环控制以及清晰的代码逻辑,从而提升系统的开发效率和代码质量。

public static void main(String[] args) {

        while (true) {
            System.out.println("——————————————欢迎使用学生管理系统——————————————");
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:退出系统");
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入您的选择:");
            String choice = sc.next();
            switch (choice) {//jdk版本大于12采用箭头函数,省事
                case "1" -> System.out.println("添加学生");
                case "2" -> System.out.println("删除学生");
                case "3" -> System.out.println("修改学生");
                case "4" -> System.out.println("查询学生");
                case "5" -> System.out.println("退出系统");
                default -> System.out.println("sorry,您的输入有误,请重新输入");
            }
        }
    }

此时在控制台已能显示系统雏形

——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:

退出系统

loop:while (true) {
//省略...
		switch (choice) {
				case "5" ->{
				//省略...
                    System.out.println("退出系统");
                    break loop;//在前面设置loop,从而得知需要终止循环的位置
//                    System.exit(0);//结束程序的运行
                }
    }
 }

带标签的break语句:
在嵌套循环中,可以使用标签来指定要终止的循环层次。(只写一个break,只能跳出当前循环)
例如:

   outerLoop: while (i < 10) {
         while (j < 10) {
             if (i == j) break outerLoop; // 终止外层循环
             j++;
         }
         i++;
     }

查询学生

定义学生集合用来储存学生

 public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
 //省略... 

   					

定义queryStudent方法,判断集合长度是否为0,如果为0,则没有学生返回,如果不为0则返回查询结果

public static void queryStudent(ArrayList<Student> list) {
        if (list.size() == 0) {
            System.out.println("当前无学生信息,请添加后再查询");
            return;
        }else {
            System.out.println("学号"+"\t"+"姓名"+"\t"+"年龄"+"\t"+"地址");
            for (int i = 0; i < list.size(); i++) {
                Student s = list.get(i);
                System.out.println(s);
            }
        }

    }

这里返回到while循环中修该为:

	case "4" ->queryStudent(list);

欧克欧克,查询方法已经书写完毕了!⭐

添加学生

这里我们要定义一个方法contains,来判断学生id是否存在,来保证id唯一,存在返回true,不存在返回false;

  //判断id是否存在
    public static boolean contains(ArrayList<Student> list,String id) {
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            if (s.getId().equals(id)) {
                return true;
            }
        }
        return false;
    }

,接下来书写学生添加方法
采用while循环判断id是存在,存在显示,id已存在,请重新输入,不存在则跳出循环,继续录入信息

// 添加学生
    public static void addStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        Student s = new Student();
        while (true) {
            System.out.println("请输入学生id:");
            String id = sc.next();
            if (contains(list,id)) {// 判断id是否重复
                System.out.println("id已存在,请重新输入");
            }else {
                s.setId(id);
                break;
            }
        }
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        s.setName(name);
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        s.setAge(age);
        System.out.println("请输入学生地址:");
        String address = sc.next();
        s.setAddress(address);
        list.add(s);
        System.out.println("添加成功");
    }

不要忘记修改前面的语句

case "1" ->addStudent(list);

删除学生

再次之前优先书写一个根据学生id返回学生对象在集合内索引的方法getIndex()

//根据id返回索引
    public static int getIndex(ArrayList<Student> list,String id) {
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            if (s.getId().equals(id)) {
                return i;
            }
        }
        return -1;
    }

在根据此方法书写删除,和修改都变得非常easy;

// 删除学生
    public static void deleteStudent(ArrayList<Student> list) {

        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入要删除的学生id:");
            String xid = sc.next();
            int xIndex =getIndex(list,xid);
            if (xIndex != -1) {
                list.remove(xIndex);
                System.out.println("删除成功");
                return;
            }
            if (xIndex == -1) {
                System.out.println("当前id无学生信息,请重新输入");
            }
        }
    }

不要忘记修改前面的语句

case "2" ->deleteStudent(list);

修改学生

   // 修改学生
    public static void updateStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生id:");
        String xid = sc.next();
        int xIndex =getIndex(list,xid);
        while (true) {
            if(xIndex != -1){
                Student s = list.get(xIndex);
                System.out.println("请输入学生姓名:");
                String xname = sc.next();
                s.setName(xname);
                System.out.println("请输入学生年龄:");
                int xage = sc.nextInt();
                s.setAge(xage);
                System.out.println("请输入学生地址:");
                String xaddress = sc.next();
                s.setAddress(xaddress);
                System.out.println("修改成功");
                return;
            }else if (xIndex == -1) {
                System.out.println("当前id无学生信息");
                return;
            }

        }


    }

不要忘记修改前面的语句

case "3" ->updateStudent(list);

,这样学生管理系统就书写完毕了,让我们来爽一下:

运行结果

——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
1
请输入学生id:
z001
请输入学生姓名:
张三
请输入学生年龄:
18
请输入学生地址:
周口
添加成功
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
1
请输入学生id:
l002
请输入学生姓名:
李四
请输入学生年龄:
20
请输入学生地址:
驻马店
添加成功
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
4
学号	姓名	年龄	地址
z001	张三	18	周口
l002	李四	20	驻马店
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
3
请输入要修改的学生id:
z001
请输入学生姓名:
王五
请输入学生年龄:
18
请输入学生地址:
南阳
修改成功
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
4
学号	姓名	年龄	地址
z001	王五	18	南阳
l002	李四	20	驻马店
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
2
请输入要删除的学生id:
l002
删除成功
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
4
学号	姓名	年龄	地址
z001	王五	18	南阳
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
5
退出系统

Process finished with exit code 0

你可能感兴趣的:(java,java,开发语言,学习,学习方法)