java后端开发day18--学生管理系统

在这里插入图片描述
(以下内容全部来自上述课程)

1.业务分析并搭建主菜单

1.需求

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

2.分析

1.初始菜单

在这里插入图片描述

2.学生类

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

3.添加功能

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

  • id唯一
4.删除功能

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

  • id存在删除
  • id不存在,需要提示不存在,并返回的初始菜单
5.修改功能

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

  • id存在,继续录入其他信息
  • id不存在,需要提示不存在,并返回的初始菜单
6.查询功能

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

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

在这里插入图片描述

3.流程图

在这里插入图片描述

4.代码

1.Javabean
package xueshengguanli;

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;
    }

    /**
     * 获取
     * @return id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return address
     */
    public String getAddress() {
        return address;
    }

    /**
     * 设置
     * @param address
     */
    public void setAddress(String address) {
        this.address = address;
    }

    public String toString() {
        return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";
    }
}

2.测试类
package xueshengguanli;

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

public class StudentSystem {
    public static void main(String[] args) {
        // 将 ArrayList<Student> 移到循环外部,确保操作的是同一个列表
        ArrayList<Student> list = new ArrayList<>();
        loop: 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.退出");
            System.out.println("请输入你的选择:");
            Scanner sc = new Scanner(System.in);
            String choice = sc.next();  // 容错率
            switch (choice) {
                case "1":
                    System.out.println("添加学生");
                    // 调用添加学生的方法
                    addStudent(list);
                    break;
                case "2":
                    System.out.println("删除学生");
                    // 调用删除学生的方法
                    deleteStudent(list);
                    break;
                case "3":
                    System.out.println("修改学生");
                    // 调用修改学生的方法
                    updateStudent(list);
                    break;
                case "4":
                    System.out.println("查询学生");
                    // 调用查询学生的方法
                    queryStudent(list);
                    break;
                case "5":
                    System.out.println("退出");
                    break loop;
                // System.exit(0);  停止虚拟机运行
                default:
                    System.out.println("输入有误");
            }
        }
    }

    // 添加学生
    public static void addStudent(ArrayList <Student> list){
        // 利用空参构造方法创建一个新的学生对象
        Student newStudent = new Student();

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生学号:");
        String id = sc.next();
        boolean flag = isExist(list,id);
        if (flag) {
            System.out.println("当前学号已存在,请重新输入");
            return;
        }
        newStudent.setId(id);
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        newStudent.setName(name);
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        newStudent.setAge(age);
        System.out.println("请输入学生住址:");
        String address = sc.next();
        newStudent.setAddress(address);
        // 把新的学生对象添加到集合中
        list.add(newStudent);
        // 提示添加成功
        System.out.println("添加成功");
    }

    // 删除学生
    public static void deleteStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生学号:");
        String id = sc.next();
        // 查询 id 在集合中的索引位置
        int index = getIndex(list,id);
        if (index == -1) {
            System.out.println("当前学号不存在,请重新输入");
            return;
        }
        // 删除
        list.remove(index);
        // 提示删除成功
        System.out.println("删除成功");
    }

    // 修改学生
    public static void updateStudent(ArrayList<Student> list) {
        // 请输入要修改的 id
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生学号:");
        String id = sc.next();
        // 查询 id 在集合中的索引位置
        int index = getIndex(list,id);
        if (index == -1) {
            System.out.println("当前学号不存在,请重新输入");
            return;
        }
        // 获取要修改的学生对象
        Student student = list.get(index);
        // 请输入要修改的学生信息
        System.out.println("请输入要修改的学生姓名:");
        String name = sc.next();
        student.setName(name);
        System.out.println("请输入要修改的学生年龄:");
        int age = sc.nextInt();
        student.setAge(age);
        System.out.println("请输入要修改的学生住址:");
        String address = sc.next();
        student.setAddress(address);
        // 提示修改成功
        System.out.println("修改成功");
    }

    // 查询学生
    public static void queryStudent(ArrayList<Student> list){
        if (list.size() == 0) {
            System.out.println("当前无学生信息,请添加后重试");
            return;
        }
        // 输出表头
        System.out.println("学号\t姓名\t年龄\t住址");
        // 遍历原数组
        for (int i = 0; i < list.size(); i++) {
            // 获取当前学生对象
            Student student = list.get(i);
            // 输出当前学生对象的信息
            System.out.println(student.getId() + "\t" + student.getName() + "\t"
                    + student.getAge() + "\t" + student.getAddress());
        }
    }

    // 判断当前 id 是否存在
    public static boolean isExist(ArrayList<Student> list,String id){
        // 遍历原数组
        for (int i = 0; i < list.size(); i++) {
            // 判断当前学生对象的 id 是否等于要判断的 id
            if(list.get(i).getId().equals(id)){
                // 如果相等,就返回 true
                return true;
            }
        }
        // 如果遍历完都没有相等的,就返回 false
        return false;
    }

    // 通过 id 获取索引
    public static int getIndex(ArrayList<Student> list,String id){
        // 遍历原数组
        for (int i = 0; i < list.size(); i++) {
            // 判断当前学生对象的 id 是否等于要判断的 id
            if(list.get(i).getId().equals(id)){
                // 如果相等,就返回索引
                return i;
            }
        }
        // 如果遍历完都没有相等的,就返回 -1
        return -1;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/973711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式精讲】结构型模式之代理模式(静态代理、JDK动态代理、cglib动态代理)

文章目录 第五章 结构型模式5.1 代理模式5.1.1 代理模式介绍5.1.2 代理模式原理5.1.3 静态代理实现5.1.4 JDK动态代理5.1.4.1 JDK动态代理实现5.1.4.2 类是如何动态生成的5.1.4.3 代理类的调用过程 5.1.5 cglib动态代理5.1.5.1 cglib动态代理实现5.1.5.2 cglib代理流程 5.1.6 代…

业务流程中的流程管理

流程管理是业务流程管理中至关重要的一环。它专注于规划、组织、指导、控制和优化组织内的各项业务流程&#xff0c;以提高效率、降低成本、提升质量和增强客户满意度。简单来说&#xff0c;流程管理就是管理你的业务是如何完成工作的。 下面将从几个方面详细讲解业务流程中的…

2025年股指期货和股指期权合约交割的通知!

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 2025年股指期货和股指期权合约交割的通知&#xff01; 根据中国金融期货交易所规则及相关规定&#xff0c;以下股指期货和股指期权合约于指定日期进行交割&#xff0c;现将各合…

播放器系列1——总概述

播放器核心架构 模块解释 文件读取 读取视频文件、读取网络文件、读取音频文件&#xff0c;大概分为这三种&#xff0c;目前代码中仅实现了读取视频文件播放&#xff0c;也就是当没有video数据的时候播放器不可使用。 解复用 容器指的是多媒体文件中的封装格式&#xff0c;…

MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用

目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…

神经网络八股(三)

1.什么是梯度消失和梯度爆炸 梯度消失是指梯度在反向传播的过程中逐渐变小&#xff0c;最终趋近于零&#xff0c;这会导致靠前层的神经网络层权重参数更新缓慢&#xff0c;甚至不更新&#xff0c;学习不到有用的特征。 梯度爆炸是指梯度在方向传播过程中逐渐变大&#xff0c;…

第3章 3.3日志 .NET Core日志 NLog使用教程

3.3.1 .NET Core日志基本使用 书中介绍了把日志输出到控制台的使用方式&#xff1a; 安装 Microsoft.Extensions.Logging 和 Microsoft.Extensions.Logging.Console 日志记录代码&#xff1a; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.…

Springboot的jak安装与配置教程

目录 Windows系统 macOS系统 Linux系统 Windows系统 下载JDK&#xff1a; 访问Oracle官网或其他JDK提供商网站&#xff0c;下载适合Windows系统的JDK版本。网站地址&#xff1a;Oracle 甲骨文中国 | 云应用和云平台点击进入下滑&#xff0c;点击进入下载根据自己的系统选择&…

Vue2是如何利用Object.defineProperty实现数据的双向绑定?

我们之前说道过Object.defineProperty方法有一关键特性&#xff0c;就是数据劫持&#xff0c;通过get/set 拦截属性的读取和修改操作。Vue主要是通过数据劫持结合发布-订阅模式来实现的&#xff0c;利用Object.defineProperty来劫持各个属性的setter和getter&#xff0c;在数据…

Transformer解析——(四)Decoder

本系列已完结&#xff0c;全部文章地址为&#xff1a; Transformer解析——&#xff08;一&#xff09;概述-CSDN博客 Transformer解析——&#xff08;二&#xff09;Attention注意力机制-CSDN博客 Transformer解析——&#xff08;三&#xff09;Encoder-CSDN博客 Transforme…

Vue前端开发-Vant之Layout组件

在Vant 中&#xff0c;Layout组件用于元素的响应式布局&#xff0c;分别由van-row和van-col两个组件来实现&#xff0c;前者表示行&#xff0c;后者被包裹在van-row组件中&#xff0c;表示列&#xff0c;共有24列栅格组成&#xff0c;在van-col组件中&#xff0c;span属性表示所…

【YOLOv8】损失函数

学习视频&#xff1a; yolov8 | 损失函数 之 5、类别损失_哔哩哔哩_bilibili yolov8 | 损失函数 之 6、定位损失 CIoU DFL_哔哩哔哩_bilibili 2.13、yolov8损失函数_哔哩哔哩_bilibili YOLOv8 的损失函数由类别损失和定位损失构成 类别损失&#xff1a;BCE Loss 定位损失…

Mac系统下使用Docker快速部署MaxKB:打造本地知识库问答系统

随着大语言模型的广泛应用&#xff0c;知识库问答系统逐渐成为提升工作效率和个人学习的有力工具。MaxKB是一款基于LLM&#xff08;Large Language Model&#xff09;大语言模型的知识库问答系统&#xff0c;支持多模型对接、文档上传和自动爬取等功能。本文将详细介绍如何在Ma…

(Arxiv-2025)ImageRAG:用于参考引导图像生成的动态图像检索

ImageRAG&#xff1a;用于参考引导图像生成的动态图像检索 paper是Tel Aviv University发布在Arxiv 2025的工作 paper title:ImageRAG: Dynamic Image Retrieval for Reference-Guided Image Generation Code:链接 图 1&#xff1a;使用参考图像扩展图像生成模型的生成能力。 在…

企业知识管理平台重构数字时代知识体系与智能服务网络

内容概要 现代企业知识管理平台的演进呈现出全生命周期管理与智能服务网络构建的双重特征。通过四库体系&#xff08;知识采集库、加工库、应用库、评估库&#xff09;的协同运作&#xff0c;该系统实现了从知识沉淀、结构化处理到价值释放的完整闭环。其中&#xff0c;知识图…

高级推理的多样化推理与验证

25年2月来自波士顿大学、NotBadMath.AI、谷歌、哥伦比亚大学、MIT、Intuit公司和斯坦福大学的论文“Diverse Inference and Verification for Advanced Reasoning”。 OpenAI o1、o3 和 DeepSeek R1 等推理 LLM 在数学和编码方面取得重大进展&#xff0c;但仍发现 IMO 组合问题…

23.1 WebBrowser控件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 WebBrowser控件类似于IE浏览器的文档界面&#xff08;事实上IE也是使用的这个控件&#xff09;&#xff0c;它提供了显示网页及支持…

Django-Vue 学习-VUE

主组件中有多个Vue组件 是指在Vue.js框架中&#xff0c;主组件是一个父组件&#xff0c;它包含了多个子组件&#xff08;Vue组件&#xff09;。这种组件嵌套的方式可以用于构建复杂的前端应用程序&#xff0c;通过拆分功能和视图&#xff0c;使代码更加模块化、可复用和易于维…

计算机网络安全之一:网络安全概述

1.1 网络安全的内涵 随着计算机和网络技术的迅猛发展和广泛普及&#xff0c;越来越多的企业将经营的各种业务建立在Internet/Intranet环境中。于是&#xff0c;支持E-mail、文件共享、即时消息传送的消息和协作服务器成为当今商业社会中的极重要的IT基础设施。然而&#xff0…

AI学习指南DeepSeek篇(6)-DeepSeek论文介绍

1. DeepSeek LLM: Scaling Open-Source Language Models with Longtermism 发布时间: 2024 年 1 月 5 日 主要内容: 基于 Transformer 架构,采用分组查询注意力(GQA)优化推理成本。 支持多步学习率调度器,提升训练效率。 在预训练和对齐(监督微调与 DPO)方面进行了创新…