学员管理系统的设计 39

学员管理系统的设计

案例需求

完成一个综合案例:学生管理系统!该系统主要功能如下:
1、添加学生:通过键盘录入学生信息,添加到集合中
2、删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
3、修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
4、查看学生:将集合中的学生对象信息进行展示
5、退出系统:结束程序。

实现步骤
  1. 定义学生类,包含以下成员变量(Java是面向对象的设计语言,数据实体通常需要创建对象代表)
  • private String sid // 学生id
  • private String name // 学生姓名
  • private String age // 学生年龄
  • private String address // 学生所在地
  1. 学生管理系统主界面的架构搭建步骤
  2. 功能实现

完整代码:

Student类:

/**
    目标:学生类的设计,用于创建学生对象,封装学的对象需要的数据。
 */
public class Student {
    // 成员变量封装属性信息的。
    private String sid; // 学生id
    private String name; // 学生姓名
    private String age; // 学生年龄
    private String address; // 学生所在地

    public Student() {
    }

    public Student(String sid, String name, String age, String address) {
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

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

    public String getAddress() {
        return address;
    }

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

StudentManager类:

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

/**
    目标:学生管理系统实现步骤
    案例需求
         针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:
         1、添加学生:通过键盘录入学生信息,添加到集合中
         2、删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
         3、修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
         4、查看学生:将集合中的学生对象信息进行展示
         5、退出系统:结束程序。

     实现步骤
         1. 定义学生类,包含以下成员变量(Java是面向对象的设计语言,数据实体通常需要创建对象代表)
             private String sid // 学生id
             private String name // 学生姓名
             private String age // 学生年龄
             private String address // 学生所在地
         2. 学生管理系统主界面的架构搭建步骤
         3. 功能实现
 */
public class StudentManager {
    public static void main(String[] args) {
        // 1、定义一个集合存储学生对象的数据
        ArrayList<Student> students = new ArrayList<>();
        // 2、学生管理系统主界面的搭建
        // 写一个死循环让系统一直运行着
        while(true){
            System.out.println("欢迎您进入系统,请您选择如下操作命令:");
            System.out.println("1、添加学生:add");
            System.out.println("2、删除学生:delete");
            System.out.println("3、修改学生:update");
            System.out.println("4、查看学生:query");
            System.out.println("5、退出系统:exit");
            System.out.print("请您输入您的操作命令:");
            Scanner sc = new Scanner(System.in);
            String command = sc.nextLine();
            // 3、单值匹配判断用户的分支选择
            switch (command){
                case "add":
                    // 添加学生信息
                    addStudent(students);
                    break;
                case "delete":
                    // 删除学生信息
                    deleteStudent(students);
                    break;
                case "update":
                    // 修改学生信息  alt+enter
                    updateStudent(students);
                    break;
                case "query":
                    // 查询学生信息
                    queryStudent(students);
                    break;
                case "exit":
                    System.out.println("退出系统完成,欢迎下次光临!");
                    System.exit(0); // 终止当前运行的Java虚拟机
                    break;
                default:
                    System.out.println("您输入的操作命令有误,请重新确认!");
            }
        }
    }

    /**
     * 删除学生对象的逻辑
     * @param students 接收到的集合对象
     */
    public static void deleteStudent(ArrayList<Student> students) {
        // 判断是否存在学生对象,不存在不能删除
        if(students.size() == 0 ){
            System.out.println("对不起,根本没有学生对象可供删除,请添加后再来!");
            return; // 结束本方法!
        }
        queryStudent(students); // 方法中可以调用其他方法:查询一下学生信息给用户看一下!!
        // 1、按照学号去删除学生对象。
        // 通过键盘录入要删除学生的学号,将该学生对象进行删除。
        // 定义一个变量存储需要删除的学生对象的学号。
        String sid;
        // 定义一个死循环让用户一直输入到一个存在的学号为止!
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.print("请您输入您要删除的学生对象的学号:");
            sid = sc.nextLine();
            // 判断这个学号是否存在。 true说明该学号不存在, false说明该学号存在了!
            boolean result = isSIdRepeat(sid , students);
            if(result){
                System.out.println("对不起,不存在该学号的学生,无法删除!");
            }else{
                // 说明该学号存在了
                break; // 结束死循环,因为已经找到了存在的学号的学生修改,无需再找!
            }
        }
        // 2、拿着这个存在的学号去集合对象中删除学生对象!!
        // 遍历集合对象如果发现该对象的学号就是我们要删除的学号,从集合对象中干掉该对象。
        for(int i = 0 ; i < students.size() ; i++ ) {
            // 得到当前遍历的对象
            Student s = students.get(i);
            if(s.getSid().equals(sid)){
                // s定位的当前对象就是需要被删除的对象,直接让集合干掉他
                students.remove(s);
                // 查询一下是否删除了!
                queryStudent(students);
                System.out.println("恭喜您,您已经成功删除了:"+s.getName()+"同学的信息!");
                break; // 删除已然完成,无需再找!
            }
        }

    }

    /**
     * 修改学生对象的信息
     * @param students 接收到的集合对象
     */
    public static void updateStudent(ArrayList<Student> students) {
        // 极端情况,用户一来就修改。
        if(students.size() == 0){
            System.out.println("对不起,当前没有任何学生对象数据可供修改!");
            return; // 直接终止本方法的执行!
        }

        // 通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改。
        // 1.让用户输入要修改学生的学号:要求是学号必须存在才能修改。
        // 定义一个变量存储需要修改的学生对象的学号。
        String sid;
        // 定义一个死循环让用户一直输入到一个存在的学号为止!
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.print("请您输入您要修改的学生对象的学号:");
            sid = sc.nextLine();
            // 判断这个学号是否存在。 true说明该学号不存在, false说明该学号存在了!
            boolean result = isSIdRepeat(sid , students);
            if(result){
                System.out.println("对不起,不存在该学生,无法修改!");
            }else{
               // 说明该学号存在了
                break; // 结束死循环,因为已经找到了存在的学号的学生修改,无需再找!
            }
        }

        // 2、已经找到了存在的学号,定位该学生对象,修改他!
        // 定义一个变量存储最终定位的学生对象。
        Student stu = null; // 引用类型的默认值用null,建议初始化!
        // 根据学号找到该学生对象交给stu指向,stu就能够指向被修改的对象了
        for(int i = 0 ; i < students.size() ; i++ ) {
            // 得到当前遍历到的学生对象
            Student s = students.get(i);
            if(s.getSid().equals(sid)){
                // s即是用户需要找的需要修改的学生对象
                stu = s; // 找到该学生对象交给stu指向,stu就能够指向被修改的对象了
                break;
            }
        }

        // 3.stu指向的就是需要修改的对象,直接提示用户修改他即可!
        System.out.print("请您输入修改学生的名称:");
        String name = sc.nextLine();
        System.out.print("请您输入修改学生的年龄:");
        String age = sc.nextLine();
        System.out.print("请您输入修改学生的地址:");
        String address = sc.nextLine();
        stu.setName(name);
        stu.setAddress(address);
        stu.setAge(age);
        System.out.println("修改学生对象完成!!");
    }

    /**
     * 查询出里面全部的学生信息并展示
     * @param students 接收到的集合对象
     */
    public static void queryStudent(ArrayList<Student> students){
        System.out.println("------------查询学生信息-----------------");
        // 1、判断集合对象中是否存在学生对象。
        if(students.size() == 0){
            System.out.println("当前没有任何学生数据,请您录入再查询!");
        }else{
            // 存在学生对象!查询出全部学生对象信息。
            System.out.println("学号\t名称\t\t年龄\t地址");
            // 遍历全部学生对象数据,一个学生对象占一行数据
            for(int i = 0 ; i < students.size() ; i++ ) {
                // 根据索引得到当前位置处的学生对象
                Student s = students.get(i);
                System.out.println(s.getSid()+"\t\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getAddress());
            }
        }
        System.out.println("----------------------------------------");
    }

    /**
     * 添加学生对象数据
     * @param students 集合容器,放置学生对象的
     */
    public static void addStudent( ArrayList<Student> students){
        // 通过键盘录入学生信息,添加到集合中
        // sid name age address
        // 1、让用户输入添加学生的学号。如果重复了,请用户重新输入一个。
        Scanner sc = new Scanner(System.in);
        // 定义一个变量存储最终没有重复的学号
        String sid;
        // 定义一个死循环,一直找到一个没有重复的学号为止
        while(true){
            // 先让用户输入一个学号
            System.out.print("请您输入一个添加学生的学号:");
            sid = sc.nextLine();
            // 判断接收的这个学号是否重复了,拿着这个学号去集合中看是否已经存在这个学号!
            boolean result = isSIdRepeat(sid , students);
            if(result){
                // 说明该学号没有重复了!可以使用了!结束死循环,不用再输入了!
                break;
            }
            System.out.println("您输入的学号已经存在,请重新再来!");
        }
        // 2、接收学生的名称,年龄,地址信息封装成学生对象,存入到学生对象的集合中去
        System.out.print("请您输入添加学生的名称:");
        String name = sc.nextLine();
        System.out.print("请您输入添加学生的年龄:");
        String age = sc.nextLine();
        System.out.print("请您输入添加学生的地址:");
        String address = sc.nextLine();
        // 创建学生对象封装该信息。
        Student s = new Student(sid , name , age , address);
        // 把学生对象添加到集合中去
        students.add(s);
        System.out.println("恭喜您,添加学生数据成功!");
    }

    /**
     * @param sid 判断是否重复的学号
     * @param students 学生集合对象
     * @return true 该学号不重复 false 代表该学号重复了
     */
    public static boolean isSIdRepeat(String sid , ArrayList<Student> students){
        // 遍历集合中的每个学生对象,看其学生对象中有没有包含本学号,有则重复,无则不重复
        for(int i = 0 ; i < students.size() ; i++ ){
            // 当前学生对象
            Student s = students.get(i);
            // 判断这个学生对象的学号是否与传入进来的一致,一致则重复
            if(s.getSid().equals(sid)){
                return false;
            }
        }
        return true ;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值