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

news2025/5/20 10:28:01

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工厂车辆排队系统

工厂车辆排队系统是一种智能化调度管理系统&#xff0c;用于管理工厂内部所有车辆的进出和排队方式。采用JAVA语言开发&#xff0c;对接了仰邦控制卡硬件。 工厂车辆排队系统是一种智能化调度管理系统&#xff0c;用于管理工厂内部所有车辆的进出和排队方式。该系统可以提高车…

深度理解多态的底层实现

前言 首先先回顾一下上次的知识 一、多态的概念 多态(polymorphism)的概念&#xff1a;通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)&#xff0c;这⾥我们重点讲运⾏时多态&#xff0c;编译时多态(静态多态)和运⾏时多态(动态多态…

空字符串““、空白字符串“ “和 null 三者的区别

空字符串、空白字符串和 null 三者的区别表格&#xff1a; 类型定义示例长度是否有值空字符串字符串长度为 0&#xff0c;但不是 null&#xff0c;即存在一个有效的空字符串对象。""0有值&#xff08;空值&#xff09;空白字符串字符串包含空格、制表符等空白字符&a…

在mfc中使用自定义三维向量类和计算多个三维向量的平均值

先添加一个普通类, Vector3.h, // Vector3.h: interface for the Vector3 class. // //#if !defined(AFX_VECTOR3_H__53D34D26_95FF_4377_BD54_57F4271918A4__INCLUDED_) #define AFX_VECTOR3_H__53D34D26_95FF_4377_BD54_57F4271918A4__INCLUDED_#if _MSC_VER > 1000 #p…

多线程和并发篇

多线程和并发篇 创建一个对象时底层汇编指令实现步骤&#xff08;cpu可能会进行指令重排序&#xff09;&#xff1a;一、二、三级缓存的实现&#xff1a;并发编程三要素&#xff1a;线程的五大状态&#xff1a;创建线程的三种方式&#xff1a;线程的特征和状态&#xff1a;Thre…

【3.5JavaScript】JavaScript字符串对象

文章目录 1.获取字符串长度2.大小写转换3.获取某一个字符4.截取字符串5.替换字符串6.分割字符串7.检索字符串位置8.例题&#xff1a;统计某一个字符的个数 在 JavaScript 中&#xff0c;对象是非常重要的知识点。对象分为两种&#xff1a;一种是 ”自定义对象“&#xff0c;另…

路由基本配置

学习目标 • 根据拓扑图进行网络布线。 • 清除启动配置并将路由器重新加载为默认状态。 • 在路由器上执行基本配置任务。 • 配置并激活以太网接口。 • 测试并检验配置。 • 思考网络实施方案并整理成文档。 任务 1&#xff1a;网络布线 使用适当的电缆类型连接网络设备。…

windows上vscode cmake工程搭建

安装vscode插件&#xff1a; 1.按装fastc&#xff08;主要是安装MinGW\mingw64比较方便&#xff09; 2.安装C&#xff0c;cmake&#xff0c;cmake tools插件 3.准备工作完成之后&#xff0c;按F1&#xff0c;选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…

VUE3+TS+element-plus项目从0开始入门 - 创建项目、认识基本结构

文章目录 写在前面1、创建vue3项目npm create vuelatestnpm i 2、项目结构.vscodevue3结构a、项目树结构b、package.jsonc、tsconfig.jsond、index.htmld、srce、main.tsf、App.vue 写在前面 开前请自行下载vs code、node.js, 在vs code里面安装Vue - Official插件。本文使用的…

shared_ptr 不析构的问题记录

片段1&#xff1a; 片段2&#xff1a; 你们猜 哪个有问题 &#xff1f;

原生稀疏注意力机制(NSA):硬件对齐且可原生训练的稀疏注意力机制-论文阅读

摘要 长上下文建模对于下一代语言模型至关重要&#xff0c;但标准注意力机制的高计算成本带来了巨大的计算挑战。稀疏注意力提供了一种在保持模型能力的同时提高效率的有前途的方向。本文提出了一种名为 NSA&#xff08;原生可训练稀疏注意力机制&#xff09; 的方法&#xff…

从0到1:固件分析

固件分析 0x01 固件提取 1、从厂商官网下载 例如D-link的固件&#xff1a; https://support.dlink.com/resource/products/ 2、代理或镜像设备更新时的流量 发起中间人攻击MITM #启用IP转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward#配置iptables&#xff0c;将目…

conda、anaconda、pip、pytorch、tensorflow有什么区别?

先画一张图&#xff0c;可以大致看出它们的区别和关联&#xff1a; pytorch、tensorflow都是Python的第三方库&#xff0c;相当于封装的代码工具集库&#xff0c;通过import导入使用。这两个都是深度学习框架&#xff0c;用来搭建AI模型什么的&#xff0c;使用范围非常之广&…

项目设置内网 IP 访问实现方案

在我们平常的开发工作中&#xff0c;项目开发、测试完成后进行部署上线。比如电商网站、新闻网站、社交网站等&#xff0c;通常对访问不会进行限制。但是像企业内部网站、内部管理系统等&#xff0c;这种系统一般都需要限制访问&#xff0c;比如内网才能访问等。那么一个网站应…

Vue面试2

1.跨域问题以及如何解决跨域 跨域问题&#xff08;Cross-Origin Resource Sharing, CORS&#xff09;是指在浏览器中&#xff0c;当一个资源试图从一个不同的源请求另一个资源时所遇到的限制。这种限制是浏览器为了保护用户安全而实施的一种同源策略&#xff08;Same-origin p…

合合信息2025届春季校园招聘全面启动!

世界因你而AI&#xff0c;合合信息2025届春季校园招聘启动&#xff01; 我们是谁&#xff1f; 我们是一家行业领先的人工智能及大数据科技企业 18年深耕AI领域&#xff0c;C端产品与B端服务布局矩阵完善 9.4亿全球累计用户首次下载量&#x1f4a5; 来到这里你能得到什么&a…

shiro代码层面追踪

文章目录 环境漏洞分析硬编码 反序列化Gadget构造 环境 环境搭建&#xff1a;https://blog.csdn.net/qq_44769520/article/details/123476443 漏洞分析 硬编码 shiro是对rememberMe这个cookie进⾏反序列化的时候出现了问题。 相应代码 // // Source code recreated from …

虚拟机网络ssh连接失败,没有网络

vscode进行ssh时连接失败&#xff0c;发现是虚拟机没有网络。 虚拟机ping不通www.baidu.com但可以ping通内网 ping 8.8.8.8ping不通。 sudo dhclient -r ens33 sudo dhclient ens33 ip route show可以了。 20250221记录&#xff1a;不知道是不是重启了虚拟机还是咋了&#…

已知点矩阵的三个顶点坐标、行列数和行列的间距,计算得出剩余所有点的坐标

已知点矩阵的三个顶点坐标、行列数和行列的间距&#xff0c;计算得出剩余所有点的坐标 计算矩阵中每个点的坐标代码实现案例图调用验证 计算矩阵中每个点的坐标 给定左上角、左下角和右上角三个点的坐标&#xff0c;以及矩阵的行数、列数、行间距和列间距&#xff0c;我们可以…

go 并发 gorouting chan channel select Mutex sync.One

goroutine // head&#xff1a; 前缀 index&#xff1a;是一个int的指针 func print(head string, index *int) {for i : 0; i < 5; i {// 指针对应的int *indexfmt.Println(*index, head, i)// 暂停1stime.Sleep(1 * time.Second)} }/* Go 允许使用 go 语句开启一个新的运…