Java采取控制台的方式书写简单学生管理系统(全流程详细讲解)#java基础练习

       

目录

需求文档

需求:

分析:

初始菜单:

学生类:

添加功能:

删除功能:

修改功能:

查询功能:

准备工作

分析需求

启动项目

创建一个Student类

测试类实现

运行


         为了练习和巩固Java的基础语法,我们来上手制作一个取控制台方式操作的简易的学生管理系统(参考黑马程序员),其中涉及了:

Java的基础知识(如JVM工作原理)、idea的使用
关键字、变量、数据类型
运算符和表达式
流程控制语句(for、while、switch等)
数组
方法
类和对象(面向对象)
String字符串类型和引用数据类型
集合ArrayList

需求文档


需求:

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

分析:

初始菜单:
"-------------欢迎来到学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
学生类:

属性:id、姓名、年龄、家庭住址

添加功能:

键盘录入每一个学生信息并添加,需要满足以下要求:

  • id唯一

删除功能:

键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除

  • id不存在,需要提示不存在,并回到初始菜单

修改功能:

键盘录入要修改的学生id,需要满足以下要求

  • id存在,继续录入其他信息

  • id不存在,需要提示不存在,并回到初始菜单

查询功能:

打印所有的学生信息,需要满足以下要求

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询

  • 如果有学生信息,打印。

准备工作


分析需求

根据需求文档做出下图分析

启动项目


打开idea,新建一个Java项目

点击创建后进入项目,创建一个学生类和一个测试类

创建完成后根据需求分析的内容,我们要先创建一个学生类

打开Student.java

创建一个Student类

下面按照创建类的三步骤创建一个Student类:

  1. 输入成员变量
  2. 创建该类的构造方法(带参和无参)
  3. 创建getter and setter方法
public class Student {
    private String id;
    private String name;
    private int age;
    private String address;

    //全参构造
    public Student(String id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }
    //无参构造
    public Student() {
    }

    //getter and setter
    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;
    }
}

拓展:同时按下 Alt+Ins 键可以快速打开快捷构造方法栏,里面有我们需要创建的构造方法以及getter and setter方法

测试类实现

完成了Student类的书写后,我们对测试类StudentManagementTest.java进行实现

  • 根据需求分析,我们先书写main方法,完成一个基本的框架

main方法语句:

public static void main(String[] args) {
        //创建一个集合放置Student类型的数据
        ArrayList<Student> list = new ArrayList<>();

        //创建Scanner类,为下方选择流程的输入操作服务
        Scanner sc = new Scanner(System.in);

        //循环操作
        while (true){
            System.out.println("-------欢迎进入Joe学生管理系统-------");
            System.out.println("1:添加学生信息");
            System.out.println("2:删除学生信息");
            System.out.println("3:修改学生信息");
            System.out.println("4:查询所有学生信息");
            System.out.println("5:退出");
            System.out.println("请输入您的选择:");
            //输入选择
            String chose = sc.next();

            //选择流程(->格式自带break;)
            switch (chose){
                case "1" -> addStudent(list);       //添加学生信息
                case "2" -> deleteStudent(list);    //删除学生信息
                case "3" -> updateStudent(list);    //修改学生信息
                case "4" -> selectStudent(list);    //查询所有学生信息
                case "5" -> {                       //退出系统
                    System.out.println("##### 退出 #####");
                    System.exit(0);
                }
                default -> System.out.println("没有这个选项!");
            }
        }
    }
  • 通过我们对需求的分析发现,我们需要创建一个判断id是否存在的方法,以便后续方法的实现以及整个系统功能的优化实现

下面是这个方法judgment的实现代码:

注意list.size()一开始就为0(因为集合里面没有元素),不会执行循环,会直接返回-1,在有一些情境中这会是一个坑

/*注意list.size()一开始就为0(因为集合里面没有元素),不会执行循环,会直接返回-1*/
    //判断id是否已经存在
    //需求:id值,list
    //返回?如果id存在则返回id所在的索引值,如果不存在则返回-1
    public static int judgment(ArrayList<Student> list, String id){
        //遍历集合寻找是否存在相同的id
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            String judgmentId = stu.getId();
            if (judgmentId.equals(id)){
                //如果id存在则返回id所在的索引值
                return i;
            }
        }
        //如果不存在则返回-1
        return -1;
    }
}
  • 下面我们接着对增删改查四个核心功能进行一一实现
  •  
    • 添加学生信息addStudent:
      //添加方法:对键盘录入的学生信息进行添加,要求id唯一
          //需求:list
          //返回?void
          public static void addStudent(ArrayList<Student> list){
              //打印提示信息
              System.out.println("##### 添加学生信息 #####");
      
              //创建Scanner类键入学生信息
              Scanner sc = new Scanner(System.in);
      
              //判断唯一性:如果id已经存在则需要重新输入一个新的id
              //循环直到输入一个在集合中不存在的id
              String id = null; //在循环外创建String,不然循环结束后,在循环中创建的String字符串会消失!!!
              while (true){
                  //输入id
                  System.out.println("输入id:");
                  id = sc.next();
                  //判断id唯一性
                  int judgment = judgment(list,id);
                  //judgment < 0代表不存在相同的id,退出循环,执行添加操作
                  if (judgment < 0){
                      break;
                  }else {
                      //id已经存在,继续输入
                      System.out.println("id重复,请重新输入!");
                  }
              }
              //输入姓名
              System.out.println("输入姓名:");
              String name = sc.next();
              //输入年龄
              System.out.println("输入年龄:");
              int age = sc.nextInt();
              //输入地址
              System.out.println("输入地址:");
              String address = sc.next();
      
              //创建一个学生对象stu,将属性值放进对象中
              Student stu = new Student(id,name,age,address);
      
              //再将Student类的stu对象存放进list(集合)当中
              list.add(stu);
      
              //提示插入成功
              System.out.println("+++++添加成功+++++");
          }
    • 删除学生信息deleteStudent: 
    • //删除输入id对应的学生信息
          //需求:list
          //返回?void
          public static void deleteStudent(ArrayList<Student> list){
              //打印提示信息
              System.out.println("##### 删除学生信息 #####");
      
              //获取要删除的学生id
              Scanner sc = new Scanner(System.in);
              System.out.println("输入要删除的学生id:");
              String sid = sc.next();
      
              //判断id是否存在
              int index = judgment(list, sid);
              if (index < 0){
                  //id不存在,不能删除对应id的学生信息
                  System.out.println("id不存在,删除失败");
              }else {
                  //id存在,删除
                  list.remove(index);
                  System.out.println("-----删除成功-----");
              }
          }
    •  修改学生信息updateStudent: 
      //修改输入id对应的学生信息
          //需求:list
          //返回?void
          public static void updateStudent(ArrayList<Student> list){
              //打印提示信息
              System.out.println("##### 修改学生信息 #####");
      
              //获取要修改的学生id
              Scanner sc = new Scanner(System.in);
              System.out.println("输入要修改的学生id:");
              String sid = sc.next();
      
              //判断id是否存在
              int index = judgment(list, sid);
              if (index < 0){
                  //id不存在,不能修改对应id的学生信息
                  System.out.println("id不存在,修改失败");
              }else {
                  //id存在,修改
                  //创建学生类
                  Student stu = list.get(index);//list.get(index)的地址值给了stu,
                                                //所以stu用setter方法更改属性值后存放在地址中后
                                                //集合中遍历学生信息找到这个地址打印出来的就是修改后的属性值
      
                  //输入要修改的属性值
                  System.out.println("输入姓名:");
                  String name = sc.next();
                  stu.setName(name);
                  System.out.println("输入年龄:");
                  int age = sc.nextInt();
                  stu.setAge(age);
                  System.out.println("输入地址:");
                  String address = sc.next();
                  stu.setAddress(address);
      
                  //提示信息
                  System.out.println("uuuuu 修改成功 uuuuu");
              }
          }

      这里有一个需要注意的点是:在Student stu = list.get(index);中list.get(index)的地址值给了stu,所以stu用setter方法更改属性值后存放在地址中,集合中遍历学生信息找到这个地址打印出来的就是修改,所以最后不必再把stu放进list集合里面,不同于添加方法

    •  查询所有学生信息selectStudent:
      //查询打印所有学生信息
          //需求:list
          //返回?void
          public static void selectStudent(ArrayList<Student> list){
              //打印提示信息
              System.out.println("##### 查询所有学生信息 #####");
      
              //如果没有学生信息则提示:当前无学生信息,请添加后再查询
              if (list.size() == 0){
                  System.out.println("当前无学生信息,请添加后再查询!");
                  return;//如果没有学生信息就退出方法
              }
      
              //打印表头
              System.out.println("id\t姓名\t年龄\t家庭住址");
              //如果有学生信息则打印
              for (int i = 0; i < list.size(); i++) {
                  Student stu = list.get(i);
                  System.out.println(stu.getId()+'\t'+stu.getName()+'\t'+stu.getAge()+'\t'+stu.getAddress());
              }
          }

        这样,我们的测试类也书写完成了,下面是测试类的完整代码:

import java.util.ArrayList;
import java.util.Scanner;

public class StudentManagementTest {
    public static void main(String[] args) {
        //创建一个集合放置Student类型的数据
        ArrayList<Student> list = new ArrayList<>();

        //创建Scanner类,为下方选择流程的输入操作服务
        Scanner sc = new Scanner(System.in);

        //循环操作
        while (true){
            System.out.println("-------欢迎进入Joe学生管理系统-------");
            System.out.println("1:添加学生信息");
            System.out.println("2:删除学生信息");
            System.out.println("3:修改学生信息");
            System.out.println("4:查询所有学生信息");
            System.out.println("5:退出");
            System.out.println("请输入您的选择:");
            //输入选择
            String chose = sc.next();

            //选择流程(->格式自带break;)
            switch (chose){
                case "1" -> addStudent(list);       //添加学生信息
                case "2" -> deleteStudent(list);    //删除学生信息
                case "3" -> updateStudent(list);    //修改学生信息
                case "4" -> selectStudent(list);    //查询所有学生信息
                case "5" -> {                       //退出系统
                    System.out.println("##### 退出 #####");
                    System.exit(0);
                }
                default -> System.out.println("没有这个选项!");
            }
        }
    }


    //添加方法:对键盘录入的学生信息进行添加,要求id唯一
    //需求:list
    //返回?void
    public static void addStudent(ArrayList<Student> list){
        //打印提示信息
        System.out.println("##### 添加学生信息 #####");

        //创建Scanner类键入学生信息
        Scanner sc = new Scanner(System.in);

        //判断唯一性:如果id已经存在则需要重新输入一个新的id
        //循环直到输入一个在集合中不存在的id
        String id = null; //在循环外创建String,不然循环结束后,在循环中创建的String字符串会消失!!!
        while (true){
            //输入id
            System.out.println("输入id:");
            id = sc.next();
            //判断id唯一性
            int judgment = judgment(list,id);
            //judgment < 0代表不存在相同的id,退出循环,执行添加操作
            if (judgment < 0){
                break;
            }else {
                //id已经存在,继续输入
                System.out.println("id重复,请重新输入!");
            }
        }
        //输入姓名
        System.out.println("输入姓名:");
        String name = sc.next();
        //输入年龄
        System.out.println("输入年龄:");
        int age = sc.nextInt();
        //输入地址
        System.out.println("输入地址:");
        String address = sc.next();

        //创建一个学生对象stu,将属性值放进对象中
        Student stu = new Student(id,name,age,address);

        //再将Student类的stu对象存放进list(集合)当中
        list.add(stu);

        //提示插入成功
        System.out.println("+++++添加成功+++++");
    }


    //删除输入id对应的学生信息
    //需求:list
    //返回?void
    public static void deleteStudent(ArrayList<Student> list){
        //打印提示信息
        System.out.println("##### 删除学生信息 #####");

        //获取要删除的学生id
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要删除的学生id:");
        String sid = sc.next();

        //判断id是否存在
        int index = judgment(list, sid);
        if (index < 0){
            //id不存在,不能删除对应id的学生信息
            System.out.println("id不存在,删除失败");
        }else {
            //id存在,删除
            list.remove(index);
            System.out.println("-----删除成功-----");
        }
    }


    //修改输入id对应的学生信息
    //需求:list
    //返回?void
    public static void updateStudent(ArrayList<Student> list){
        //打印提示信息
        System.out.println("##### 修改学生信息 #####");

        //获取要修改的学生id
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要修改的学生id:");
        String sid = sc.next();

        //判断id是否存在
        int index = judgment(list, sid);
        if (index < 0){
            //id不存在,不能修改对应id的学生信息
            System.out.println("id不存在,修改失败");
        }else {
            //id存在,修改
            //创建学生类
            Student stu = list.get(index);//list.get(index)的地址值给了stu,
                                          //所以stu用setter方法更改属性值后存放在地址中后
                                          //集合中遍历学生信息找到这个地址打印出来的就是修改后的属性值

            //输入要修改的属性值
            System.out.println("输入姓名:");
            String name = sc.next();
            stu.setName(name);
            System.out.println("输入年龄:");
            int age = sc.nextInt();
            stu.setAge(age);
            System.out.println("输入地址:");
            String address = sc.next();
            stu.setAddress(address);

            //提示信息
            System.out.println("uuuuu 修改成功 uuuuu");
        }
    }


    //查询打印所有学生信息
    //需求:list
    //返回?void
    public static void selectStudent(ArrayList<Student> list){
        //打印提示信息
        System.out.println("##### 查询所有学生信息 #####");

        //如果没有学生信息则提示:当前无学生信息,请添加后再查询
        if (list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询!");
            return;//如果没有学生信息就退出方法
        }

        //打印表头
        System.out.println("id\t姓名\t年龄\t家庭住址");
        //如果有学生信息则打印
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getId()+'\t'+stu.getName()+'\t'+stu.getAge()+'\t'+stu.getAddress());
        }
    }


    /*注意list.size()一开始就为0(因为集合里面没有元素),不会执行循环,会直接返回-1*/
    //判断id是否已经存在
    //需求:id值,list
    //返回?如果id存在则返回id所在的索引值,如果不存在则返回-1
    public static int judgment(ArrayList<Student> list, String id){
        //遍历集合寻找是否存在相同的id
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            String judgmentId = stu.getId();
            if (judgmentId.equals(id)){
                //如果id存在则返回id所在的索引值
                return i;
            }
        }
        //如果不存在则返回-1
        return -1;
    }
}

运行


书写完成后我们来测试一下运行情况:

  • 添加测试
  • 删除测试
  • 修改测试
  • 查询测试

1.添加与查询测试,进入后输入1进行学生添加,尝试添加3个学生信息

然后输入4查询学生是否添加成功(查询测试)

如图,查询成功信息添加成功

2.删除测试,输入要删除的id,删除完成后再查询验证是否完成删除

如图,查询成功信息删除成功

2.修改测试,输入要修改的id,修改完成后再查询验证是否完成修改

然后输入4查询学生是否修改成功(查询测试)

如图,查询成功信息修改成功

到此,整个简易的学生管理小项目就完成啦!~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值