校园信息管理系统 Day02学生四大功能的实现

该博客详细介绍了学生管理系统中添加、查看、删除和修改功能的实现过程。通过客服、业务员和库管的角色模拟,实现了学号的判断、学生信息的查询、删除和修改。在每个功能的实现中,特别注意了数据的一致性和有效性,如利用死循环确保输入的学号不存在于系统中,以及在数组中查找并删除或修改指定学号的操作。此外,还针对代码重复进行了优化讨论。
摘要由CSDN通过智能技术生成
2.2.2.2 添加功能的优化
  • 需求,判断添加的学号是否已经存在于组中,若已经存在,则提示重新添加,若不存在,则正常添加
    在这里插入图片描述
  • 操作步骤
    • 客服接收到学生学号信息,交给业务员进行判断
    • 业务员则需要库管提供的数据进行判断
    • 判断的结果返回给客服,客服则根据这个结果反馈id的正确性
  • 代码实现
  • 1.客服接收到学生学号信息
    在客服接收学号的时候创建一个死循环
        while (true) {
            System.out.println("请输入姓名学号");
            String sid = sc.next();
            //把学号传给业务员,调用业务员的方法
           boolean flag = studentService.isExist(sid);
            //根据业务员返回的值来进行判断
            if (flag) {//存在
                System.out.println("请重新输入");
            } else {//不存在
                System.out.println("输入成功");
                break;
            }
        } 

需要注意
1:由于studentService(业务员)的创建对象在下面,要上提此代码
· StudentService studentService = new StudentService();
2:由于添加了死循环,限制了sid学号的范围,下面封装学生数据的sid报错
student.setSid(sid);
解决方案:提高sid的级别,先定义,在赋值

		String sid ;
        while (true) {
            System.out.println("请输入姓名学号");
             sid = sc.next();
            //把学号传给业务员,调用业务员的方法
            boolean flag = studentService.isExist(sid);
            //根据业务员返回的值来进行判断
            if (flag) {//存在
                System.out.println("请重新输入");
            } else {//不存在
                System.out.println("输入成功");
                break;
            }
        }
  • 2.编写业务员的业务逻辑
    • 1接收库管返回的数组,同理也要用到库管,所以要提升库管等级
    • 2根据数组判断sid是否存在,需要遍历数组,因为不需要赋值,所以无需像day01那样定义index
    • 3.返回结果.
        String sid;
        while (true) {
            System.out.println("请输入姓名学号");
            sid = sc.next();
            //把学号传给业务员,调用业务员的方法
            boolean flag = studentService.isExist(sid);
            //根据业务员返回的值来进行判断
            if (flag) {//存在
                System.out.println("请重新输入");
            } else {//不存在
                break;
            }
        }
  • 3补充库管的返回代码
   public Student[] retunAllStundet() {
        //返回即可
       return stus;
    }
  • 4测试发现无作业----寻找原因
  • 我们每次调用StudentDao这个类时都会新建一个数组,都会新在内存中开辟一块新的空间
  • 而我们则需要把数据都存储在一个数组中
    • 解决方法:使用static关键字
    • 把数组变为静态类
    • 特点
      • 随着类的加载而加载
      • 被类的所有对象共享
      • 可以通过类名调用,也可以通过对象名调用
        public static Student[] stus = new Student[5];//数组的创建更换为这个就行
2.2.2.3查看学生
  • 需求:客服接收到指令,返回学生信息,若没有信息,则返回无成员
    • 思路:客服接收,业余员调用库管给的数据,返回给客服
  • 代码实现:
    • 1客服接收
      添加方法:findAllStudent();
      创造方法
    • 任务–需要向业余员要去返回数组:空数组null 或者真实数组
    • 任务二-根据业余员的返回值,来进行人机交流
    public void findAllStudent() {
        //返回数组-----
        //数组有两种情况  1 有数据正常返回 2 没有数据 返回值为null
        Student[] stus = studentService.findAllStundent();
        if (stus == null) {//判断数组里有没有数据
            System.out.println("无信息,请先添加");
            return;//结束方法
        }
        System.out.println("学号\t姓名\t年龄\t生日");
        for (int i = 0; i < stus.length; i++) {
            Student stu = stus[i];
            if (stu != null) {
                stu = stus[i];
                System.out.println(stu.getSid() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getBirthday());
            }
        }
    }
  • 2业务员逻辑判断
    • 任务:1调取数据库的数组,2判断数组是不是空数组,并且返回给业务员
    //查询学生
    public Student[] findAllStundent() {
        //向库管要数据
        Student[] stu = studentDao.retunAllStundet();
        //假设没有数据
        boolean flag = false;
        //遍历stu
        for (int i = 0; i < stu.length; i++) {
            //接收学生对象
            Student student = stu[i];
            if (student != null) {//找到了一个不为零的值,说明数组里面有数据源
                flag = true;
                break;//一个足以,跳出循环
            }
        }
        //根据flag的值来进行返回数组的确定
        if (flag) {//存在
            return stu;//返回数组
        } else {
            return null;//没有 ,返回null
        }
    }
  • 3库管的方法上文已经写过
//返回数组
    public Student[] retunAllStundet() {
        //返回即可
        return stus;
    }
}
2.2.2.4删除代码的实现
  • 需求:用户输入要删除的id,进行删除,若没有要删除的则提示没有要删除的id,并重新输入,若数组没有数据,则提示先添加数据
  • 思路
    • 客服先要知晓数组里面有没有数据,但无需自己去做,让业务员返回给我
    • 把要删除的id给业余员,业务员把此id给库管,由库管来删除(此处需要定义一个方法,早出输入id所在的索引,随后服织物null,则可以进行删除)
    • 删除成功与否有业务员返回给用户
  • 代码实现
    • 1客服删除方法的添加
      delayStundet();
    • 2.删除方法的实现
    // 删除学生
    public void delayStundet() {
        //返回数组-----
        //数组有两种情况  1 有数据进行删除 2 没有数据 返回值为null
        Student[] stus = studentService.findAllStundent();
        if (stus == null) {//判断数组里有没有数据
            System.out.println("无信息,请先添加");
            return;//结束方法
        }
        //数组不是null,进行删除操作
        String sid;
        while (true) {
            System.out.println("请输入要删除的id");
             sid = sc.next();
            //把id给业务员,但业务员也无权修改数据库的信息
            boolean flag = studentService.isExist(sid);
            if (!flag) {//id不存在,则重新输入
                System.out.println("id不存在,请重新输入");
            } else {
                break;
            }
        }
        studentService.delayStundet(sid);
        System.out.println("删除成功");
    }
  • 3业务员进行传递
    public void delayStundet(String sid) {
        studentDao.delayStundent(sid);
    }
  • 4,查询索引的方法,在库管中哦
    //由于我们要查找sid所在的索引,先定义一个方法
    public int findIndex(String sid) {
        //假设不存在
        int index = -1;
        //遍历数组
        for (int i = 0; i < stus.length; i++) {
            //接收学生,但可能是null,需要进行判断
            Student stu = stus[i];
            if (stu != null && stu.getSid().equals(sid)) {//如果相同,则表示存在
                index = i;
                break;//跳出循环
            }
        }
        return index;
    }
  • 5库管进行删除操作,
   public void delayStundent(String sid) {
        //调用方法,查找索引
        int index = findIndex(sid);
            stus[index] = null;

    }
2.2.2.5修改功能的实现
  • 需求 :根据学生id,来修改其他三个属性,没有id发出提示,数组没数据也发出对应提示
  • 思路:与删除基本类似,直接代码实现
  • 代码实现
    • 1客服修改方法的添加
      changeStudent();
    • 2客服修改方法的添加
      • 先进行数组是否为空的判断
      • 循环要修改的id,
      • 录入新的学生对象
      • 把新的学生对象和学号传给业务员
      • 业务员再给数组
      • 由数组进行修改
    //返回数组-----
        //数组有两种情况  1 有数据进行修改 2 没有数据 返回值为null
        Student[] stus = studentService.findAllStundent();
        if (stus == null) {//判断数组里有没有数据
            System.out.println("无信息,请先添加");
            return;//结束方法
        }
        String sid;
        while (true) {
            System.out.println("请输入要修改的id");
            sid = sc.next();
            //把id给业务员,但业务员也无权修改数据库的信息
            boolean flag = studentService.isExist(sid);
            if (!flag) {//id不存在,则重新输入
                System.out.println("id不存在,请重新输入");
            } else {
                break;
            }
        }
        //录入
        System.out.println("请输入姓名");
        String name = sc.next();
        System.out.println("请输入年龄");
        String age = sc.next();
        System.out.println("请输入生日");
        String birthday = sc.next();
        //封装数据
        //创造一个学生
        Student student = new Student();
        student.setSid(sid);
        student.setName(name);
        student.setAge(age);
        student.setBirthday(birthday);
//        //创建一个业务员
//        StudentService studentService = new StudentService();
        //把数据给业务员,进行数据的修改
        studentService.changeStudent(sid,student);
        System.out.println("修改成功");
    }
  • 3.业务员的传递
   public void changeStudent(String sid, Student student) {
        studentDao.changeStundetn(sid, student);
    }
  • 4.库管修改学生
    public void changeStundetn(String sid, Student student) {
        int index = findIndex(sid);
        stus[index] = student;
    }

到此学生系统的建设已经完毕
接下来要针对代码的重复等部分进行修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gold 大龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值