Java-学生管理系统[初阶]

news2024/10/12 21:43:52

这次我们来尝试使用Java实现一下"学生管理系统",顾名思义,就是实现一个能用来管理学生各种数据的系统。在后续学习中我们将对"学生管理系统"进行两种实现

📚 学生管理系统[初阶](不带模拟登录系统)

📚 学生管理系统[进阶](附带模拟登录系统)

在这篇文章学习实现"学生管理系统"之前,需要我们了解并学习过以下知识点:

📕 Java的输入输出

📕 Java的分支循环

📕 Java的数组

📕 Java的方法(定义 调用 重载)

📕 Java的初阶面向对象(类和对象 构造方法)

📕 Java的集合(基本使用)

一、学生管理系统[初阶]

在创建"学生管理系统"之前,我们需要知道这个系统要拥有哪些功能

① 在系统中添加学生

② 在系统中删除学生

③ 在系统中修改某学生信息

④ 对学生的信息进行查询(打印)

⑤ 退出学生管理系统

(注意:要求学生拥有"id","名字","年龄","成绩"四个属性)

① 创建学生类

那么既然是"学生"管理系统,我们自然要创建一个"学生类"用来代表学生:

对着"src"点击鼠标右键。

然后New一个JavaClass

取名为"Student"。

这样我们就可以在该文件中创建Student类啦

public class Student {
    private String id;
    private String name;
    private int age;
    private double score;
}

这里我们分享一个IDEA的小技巧

我们先按"NumLk"按键将键盘右侧的数字小键盘关闭,然后按住"ALT"+"INSERT"键:

点击Constructor: 

点击Shift全选中:

这样就会直接出现一个带参构造

但是创建了带参构造后,我们还得补充一个默认的无参构造才行,于是重复刚刚的步骤不选参数:

这样无参构造也完成啦~

然后我们接下来选择Getter and Setter

仍然全选:

这样Student的所有属性的get和set就都自动补全啦:

② 创建系统菜单

完成Student类的创建后,我们再回到Main文件中:

我们先写出一个基本的菜单

然后我们要知道,进行选择需要进行数据的输入,再分别判断是否为"1","2","3","4","5"来进行对应的操作,那么此时我们就可以使用switch语句

我们来运行一下

我们可以看到,明明我们想要的应该是重新选择而此时却结束了,那我们就可以在外面套用一层while循环

再次运行

虽然可以重复选择了,但好像...停不下来了?这是因为break就近原则:

我们可以看到:break离switch比while更近,所以break会优先跳出switch这个语句,从而导致了while一直循环。其实想解决这个问题也很简单,我们可以给while起个名字,然后让break指定跳出while就好了

再次调试:

这样就退出成功啦~

③ 对学生的信息进行查询(打印)

想要对学生的信息进行打印,我们就要确保有数据来存储学生的信息,并且能够随时进行存储,取出,删除。而进行此类工作,最最合适的也就是"集合"!!那么让我们现在创建一个学生类的集合

(注:String数组也能够实现该功能,但相较于"集合",代码量会多出一些,并且也没有"集合"便于理解,不过想尝试的小伙伴们也可以尝试一下,就当对String的用法训练了嘛~)

这样就创建好了~

然后我们进行"查询学生"的方法实现:

📌 要求

📕 如果集合中没有学生,则查询失败。

📕 如果集合中有学生,则显示学生信息。

📚 方法实现

    public static void print(ArrayList<Student> stu) {
        System.out.println("查询学生");
        if(stu.size() == 0){
            System.out.println("目前系统中暂无学生!");
        }
        for (int i = 0; i < stu.size(); i++) {
            Student s = stu.get(i);
            System.out.println("id:" +String.format("%-8s",s.getId())+
                    "姓名:"+String.format("%-8s",s.getName()) +
                    "年龄:"+String.format("%-8d",s.getAge()) +
                    String.format("%-8.2f",s.getScore())+ "成绩:");
        }
    }

实现思路

📕 当传进方法的集合"stu"长度为0时,代表集合中没有学生,于是则不打印学生。

📕 当传进方法的集合"stu"长度大于0时,代表集合中有学生,于是对学生进行打印。我们使用for循环,每一次循环都将集合中对应的"学生"取出,然后对数据进行打印,直到循环结束。

(待会儿完成"在系统中添加学生"方法后,与该功能一起演示~) 

在系统中添加学生

完成最简单的查询功能后,我们来完成稍微复杂一点"添加学生"功能:

📌 要求

📕 传入的 id 必须唯一 (如果有重复则传输失败)

📚 方法实现

通过要求我们可以得知,要完成此方法我们还需要知道传入id是否唯一,那么我们在写该方法前,先写出另一个用于实现"判断方法是否唯一"的方法

    public static int findnum(ArrayList<Student> stu,String id1) {
        for (int i = 0; i < stu.size(); i++) {
            Student s = stu.get(i);
            if(s.getId().equals(id1)){
                return i;
            }
        }
        return -1;
    }

思路:我们将集合"id1"都传入方法"findnum"中,遍历集合中的"学生类"

如果"id"与"id1"重复的,就说明此学生已存在,返回"i",添加失败。

如果没有"id"与"id1"重复的,就说明此学生未存在,返回"-1",添加成功。

(注意,查找id时使用的不是 " == ",而是" equals() ",这是因为对于String类进行比较时,只有同为初始化时才能够成功比较,如果String是new出来的,那么就无法进行比较。因为" == "比较String时,本质是比较地址,而" equals() "比较的才是内容)。

📌 注意:此方法非常重要!!!

因为后续我们在完成"在系统中修改某学生信息"方法时,还需要获取"对应学生的下标"才能够修改,而此方法不仅能够通过返回值的正负确定学生是否存在,还能够直接返回学生对应的下标

那么接下来,我们完成"在系统中添加学生"方法:

    public static void add(ArrayList<Student> stu) {
        System.out.println("添加学生");
        Scanner in = new Scanner(System.in);
        while (true) {
            System.out.println("请输入学生id:");
            String id1 = in.next();
            if(findnum(stu,id1) >= 0){
                System.out.println("该学生已经存在,请重新输入");
                continue;
            }
            System.out.println("请输入学生姓名:");
            String name1 = in.next();
            System.out.println("请输入学生年龄:");
            int age1 = in.nextInt();
            System.out.println("请输入学生成绩:");
            double score1 = in.nextDouble();
            Student s = new Student(id1,name1,age1,score1);
            stu.add(s);
            System.out.println("学生添加成功");
            break;
        }
    }

实现思路

📕 首先输入学生id,并通过"finenum"方法传回的值来确认该学生是否存在于"集合"中。

📕 (如果返回值 >=0 代表在"集合"中通过"id"找到了该学生,则添加失败,重新输入id)

📕 (如果返回值 <0 代表在"集合"中没能通过"id"找到该学生,则添加成功,继续输入剩余数据)

📕 创建一个临时使用的"学生"将新数据传递给"学生",再通过学生添加到集合中

那么写了这么久~让我们调试一下,看看我们的"学生管理系统"现在的两个功能是否有误吧~

当我们输入错误时,能够成功的循环进行再次输入。

当没有学生的时候,查询学生能正确显示。

那么接下来我们对"添加学生""信息查询"进行检测:

我们可以看到,查询学生和添加学生的功能是无误滴~

至此,两种方法成功~

⑤ 在系统中删除学生

📌 要求

📕 若id存在则进行删除

📕 若id不存在,则不删除,重新输入。

📚 方法实现

    public static void delete(ArrayList<Student> stu) {
        Scanner in = new Scanner(System.in);
        System.out.println("删除学生");
        while (true) {
            System.out.println("请输入学生id:");
            String id1 = in.next();
            int num = findnum(stu,id1);
            if(num >= 0){
                System.out.println("删除成功!");
                stu.remove(num);
                break;
            }else if(num < 0){
                System.out.println("未找到该学生,请重新输入");
            }
        }
    }

实现思路

📕 通过之前创建的"findnum"方法来确认是否存在该"学生"。

📕 (如果返回值 >=0 代表在"集合"中通过"id"找到了该学生,则删除成功)

📕 (如果返回值 <0 代表在"集合"中没能通过"id"找到该学生,则删除失败)

我们可以看到,删除方法也是没有问题的~

⑥ 在系统中修改某学生信息

接下来就要进行"学生管理系统[初阶]"中,四个功能中最难的一个功能的实现啦~不怕不怕,也没"最难"那么可怕啦~"难"这种词语,还是留着下一次做进阶版时再说也不迟~

📌 要求

📕 如果id存在,则进行新数据的传入

     (新数据的传入需要保证,新的 id 不与集合中现有其他学生 id 重复)

📕 如果id不存在,则重新输入

📚 方法实现

    public static void revise(ArrayList<Student> stu){
        Scanner in = new Scanner(System.in);
        System.out.println("修改学生");
        while(true){
            System.out.println("请输入学生id:");
            String id1 = in.next();
            int num = findnum(stu,id1);
            if(num < 0){
                System.out.println("未找到此id的学生,请重新输入:");
            }else{
                System.out.println("请输入学生新的id:");
                String id2 = in.next();
                int num1 = findnum(stu,id2);
                if(num1 >= 0) {
                    System.out.println("此id已经拥有,请重新输入:");
                }else{
                    System.out.println("请输入学生新的姓名:");
                    String name1 = in.next();
                    System.out.println("请输入学生新的年龄:");
                    int age1 = in.nextInt();
                    System.out.println("请输入学生新的成绩:");
                    double score1 = in.nextDouble();
                    Student s = new Student(id2,name1,age1,score1);
                    stu.set(num,s);
                    System.out.println("学生修改成功");
                    break;
                }
            }
        }
    }

实现思路

📕 先输入学生id,然后仍然是使用findnum方法来查找是否存在该学生:

📕 (如果返回值 >=0 代表在"集合"中通过"id"找到了该学生,则进行新数据的输入):

      (输入新的id,再用findnum进行查找,如果能找到该id,则告知"此id重复,请重新输入")

      (如果找不到该id,则此id为新学生id,然后继续修改其余数据)

📕 (如果返回值 <0 代表在"集合"中没能通过"id"找到该学生,则修改失败,重新输入)

那么最后让我们调试一下吧~:

没有任何滴失误~

那么关于"学生管理系统[初阶]"就完成啦~如果有哪里讲解的不够清楚,或者有的地方还能再加改进,还请各位在评论区多多指出。而关于"学生管理系统[进阶](模拟登录)"我们将在下一篇文章中进行讲解,大家敬请期待啦~

双手奉上源码!!!:

Student.java

public class Student {
    private String id;
    private String name;
    private int age;
    private double score;

    public Student(String id, String name, int age, double score) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.score = score;
    }
    public Student() {
    }

    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 double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}

Main.java

import java.sql.SQLOutput;
import java.util.*;
import java.util.stream.StreamSupport;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        ArrayList<Student> stu = new ArrayList<>();
   outside :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("请输入你的选择:");
            String num = in.next();
            switch (num){
                case "1" -> add(stu);
                case "2" -> delete(stu);
                case "3" -> revise(stu);
                case "4" -> print(stu);
                case "5" -> {
                    System.out.println("退出学生管理系统");
                    break outside;
                }
                default -> System.out.println("输入错误,请重新选择");
            }
        }
    }
    public static void add(ArrayList<Student> stu) {
        System.out.println("添加学生");
        Scanner in = new Scanner(System.in);
        while (true) {
            System.out.println("请输入学生id:");
            String id1 = in.next();
            if(findnum(stu,id1) >= 0){
                System.out.println("该学生已经存在,请重新输入");
                continue;
            }
            System.out.println("请输入学生姓名:");
            String name1 = in.next();
            System.out.println("请输入学生年龄:");
            int age1 = in.nextInt();
            System.out.println("请输入学生成绩:");
            double score1 = in.nextDouble();
            Student s = new Student(id1,name1,age1,score1);
            stu.add(s);
            System.out.println("学生添加成功");
            break;
        }
    }
    public static void delete(ArrayList<Student> stu) {
        Scanner in = new Scanner(System.in);
        System.out.println("删除学生");
        while (true) {
            System.out.println("请输入学生id:");
            String id1 = in.next();
            int num = findnum(stu,id1);
            if(num >= 0){
                System.out.println("删除成功!");
                stu.remove(num);
                break;
            }else if(num < 0){
                System.out.println("未找到该学生,请重新输入");
            }
        }
    }
    public static void revise(ArrayList<Student> stu){
        Scanner in = new Scanner(System.in);
        System.out.println("修改学生");
        while(true){
            System.out.println("请输入学生id:");
            String id1 = in.next();
            int num = findnum(stu,id1);
            if(num < 0){
                System.out.println("未找到此id的学生,请重新输入:");
            }else{
                System.out.println("请输入学生新的id:");
                String id2 = in.next();
                int num1 = findnum(stu,id2);
                if(num1 >= 0) {
                    System.out.println("此id已经拥有,请重新输入:");
                }else{
                    System.out.println("请输入学生新的姓名:");
                    String name1 = in.next();
                    System.out.println("请输入学生新的年龄:");
                    int age1 = in.nextInt();
                    System.out.println("请输入学生新的成绩:");
                    double score1 = in.nextDouble();
                    Student s = new Student(id2,name1,age1,score1);
                    stu.set(num,s);
                    System.out.println("学生修改成功");
                    break;
                }
            }
        }
    }
    public static void print(ArrayList<Student> stu) {
        System.out.println("查询学生");
        if(stu.size() == 0){
            System.out.println("目前系统中暂无学生!");
        }
        for (int i = 0; i < stu.size(); i++) {
            Student s = stu.get(i);
            System.out.println("id:" +String.format("%-8s",s.getId())+
                    "姓名:"+String.format("%-8s",s.getName()) +
                    "年龄:"+String.format("%-8d",s.getAge()) +
                    "成绩:"+String.format("%-8.2f",s.getScore()));
        }
    }
    public static int findnum(ArrayList<Student> stu,String id1) {
        for (int i = 0; i < stu.size(); i++) {
            Student s = stu.get(i);
            if(s.getId().equals(id1)){
                return i;
            }
        }
        return -1;
    }
}

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

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

相关文章

衡石分析平台系统管理手册-智能运维之系统日志

系统日志​ 点击系统设置->系统日志 在这个页面&#xff0c;从时间&#xff0c;操作者, IP&#xff0c;行为&#xff0c;结果&#xff0c;类别&#xff0c;对象&#xff0c;描述等方面记录了用户行为&#xff0c;系统管理员可以从此页面针对整个系统的用户行为进行审计工作…

【C++】set/map 与 multiset/multimap

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C 个人主页&#xff1a;Celias blog~ 目录 ​编辑 序列式容器和关联式容器 一、set 1.1 set介绍 1.2 …

大健康零售电商的智囊团:知识中台的应用与影响

在数字化浪潮席卷各行各业的今天&#xff0c;大健康零售电商行业也在积极探索转型升级的新路径。知识中台&#xff0c;作为一种集知识管理、数据挖掘与智能化应用于一体的新型技术架构&#xff0c;正逐渐成为推动这一转型的关键力量。本文将深入探讨知识中台在大健康零售电商中…

Light灯光组件+组件的相关操作+游戏资源的加载

Light灯光组件 Type: Directional:平行光&#xff0c;模仿的是太阳光 Spot:聚光灯 Area:区域光 Color&#xff1a; 颜色值 Mode: RealTime:实时 Mix:混合 Baked:烘焙 Intersity: 光照强度 Indirect Multiplier:光照强度乘数 Shadow Type:影子设置&#xff1a;…

CV方法再学习

轻量化模型 Mobile系列(V1~V3) MobileNetV1 MobileNetV1之所以轻量&#xff0c;与深度可分离卷积的关系密不可分 深度可分离卷积 主要是两种卷积变体组合使用&#xff0c;分别为逐通道卷积&#xff08;Depthwise Convolution&#xff09;和逐点卷积&#xff08;Pointwise C…

Nginx UI 一个可以管理Nginx的图形化界面工具

Nginx UI 是一个基于 Web 的图形界面管理工具&#xff0c;支持对 Nginx 的各项配置和状态进行直观的操作和监控。 Nginx UI 的功能非常丰富&#xff1a; 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 在线 ChatGPT 助理 一键申请和自动续签 Let’s encrypt 证书 在…

八、Python基础语法(判断语句-下)

一、if elif else 结构 应用场景&#xff1a;多个判断条件下&#xff0c;并且这些判断条件存在一定的关联。 语法&#xff1a; elif也是python中关键字&#xff0c;后面跟一个判断条件&#xff0c;判断条件后面跟冒号 存在冒号&#xff0c;需要换行缩进&#xff0c;处于elif…

金九银十软件测试面试题(800道)

今年你的目标是拿下大厂offer&#xff1f;还是多少万年薪&#xff1f;其实这些都离不开日积月累的过程。 为此我特意整理出一份&#xff08;超详细笔记/面试题&#xff09;它几乎涵盖了所有的测试开发技术栈&#xff0c;非常珍贵&#xff0c;人手一份 肝完进大厂 妥妥的&#…

QD1-P5 HTML 段落标签(p)换行标签(br)

本节视频 www.bilibili.com/video/BV1n64y1U7oj?p5 ‍ 本节学习 HTML 标签&#xff1a; p标签 段落br标签 换行 ‍ 一、p 标签-段落 1.1 使用 p 标签划分段落 <p>段落文本</p>示例 <!DOCTYPE html> <html><head><meta charset"…

算法剖析:滑动窗口

文章目录 前言一、长度最小的子数组二、无重复字符的最长子串三、最大连续1的个数 III四、将 x 减到 0 的最小操作数五、水果成篮六、找到字符串中所有字母异位词七、串联所有单词的子串八、最小覆盖子串总结 前言 滑动窗口可以看作为一种特殊的通向双指针&#xff0c;这两个指…

轻松翻译:顶尖翻译器评测!

在工作生活中如果遇到翻译需求&#xff0c;就少不了一些好用的翻译器&#xff0c;接下来是我们就来为大家推荐几款市面上口碑极佳的翻译软件&#xff01; 福昕在线翻译 直达链接&#xff1a; fanyi.pdf365.cn/ 操作教程&#xff1a;立即获取 福昕在线翻译是一款基于云端技…

关于部分股市买卖的演示和总结

本文是对上一文的补充&#xff1a;一个普通人的投资认知-CSDN博客 一、简介 假设公司A 向某交易所发行100股股票&#xff0c;每股5元&#xff0c;预计将融资500元。 股民a买了10股&#xff0c;付出50元。 股民b买了20股&#xff0c;付出100元。 股民c买了30股&#xff0c;付出…

【3维视觉】超级好用的3D模型交互式可视化工具viser

项目地址 https://github.com/nerfstudio-project/viser 功能 SMPL模型可视化编辑 点云可视化 3DGS实时渲染播放 安装和使用 安装viser git clone https://github.com/nerfstudio-project/viser.git使用 官方说明文档 1. SMPL模型可视化编辑 先下载SMPLX人体模型 下载解…

290. 单词规律【哈希表】

文章目录 290. 单词规律解题思路Go代码 290. 单词规律 290. 单词规律 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向…

小程序知识付费的优势 知识付费服务 知识付费平台 知识付费方法

在信息爆炸的时代&#xff0c;知识如同繁星点点&#xff0c;璀璨而散落。如何在这片知识的海洋中精准捕捞&#xff0c;成为现代人追求自我提升的迫切需求。小程序知识付费&#xff0c;正是这样一座桥梁&#xff0c;它以独特的优势&#xff0c;让智慧触手可及&#xff0c;轻触未…

metahuman如何导入UE5

1.启动 通过EPIC启动UE5(UE5内置有Bridge, 但是UE4是需要单独下在Bridge软件) 2.打开Quixel Bridge 在window(窗口)中打开Quixel Bridge 3.Bridge界面 在弹出的Bridge界面选择模型 需要先下载&#xff0c;然后再导入 4.下载模型 点击需要的模型右上方的绿色箭头下载 5.下…

TensorRT-LLM七日谈 Day1

Flag 利用7天时间熟悉tensort-llm的代码架构&#xff0c;cublas的使用方式以及flash attention的调优。 项目链接 https://github.com/NVIDIA/TensorRT-LLM 安装 https://nvidia.github.io/TensorRT-LLM/installation/linux.html 它的安装主要是需要下载相应的docker镜像&am…

金奖!实在Agent智能体问鼎华为昇腾AI创新大赛

为推动浙江计算产业高质量发展&#xff0c;激发行业数智化原生创新与规模化应用&#xff0c;华为于10月10日在杭州举办“激发原生创新&#xff0c;共赢数智浙里”浙江鲲鹏昇腾产业与人才创新论坛暨鲲鹏&昇腾创新大赛2024浙江总决赛颁奖仪式。 中国工程院院士、浙江大学教授…

STM32学习--5-1 对射式红外传感器计次

接线图 原理图&#xff1a; CountSensor.c #include "stm32f10x.h" // Device headeruint16_t CountSensor_Count;void CountSensor_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); // 开启APB2Periph外设GPIOB时钟RCC_APB2Pe…

react中css样式隔离

使用CSS Modules css模块化 1, 创建组件样式文件时以 xxx.module.css命名, 例如 Home.module.css 代替 Home.css 2, 在组件jsx导入样式文件时使用 import styles from ./xxx.module.css 导入 代替 import ./xxx.css 3, 在组件中需要设置样式的标签上添加class值, classNa…