重学Java 18.学生管理系统项目

news2024/11/14 17:14:20

臣无祖母,无以至今日,祖母无臣,无以终余年

母孙二人,更相为命,是以区区不能废远

                                                ——  陈情表.李密

                                                             —— 24.2.20

一、编写JavaBean

public class Student {
    //学号
    private int id;
    //姓名
    private String name;
    //年龄
    private  int age;
    //性别
    private String sex;

    public Student() {
    }

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

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

二、添加功能 addStudent()

    private void addStudent() {
        System.out.println("添加功能");
        //1.键盘录入学生信息
        System.out.println("请您输入学生学号:");
        int id = sc.nextInt();
        System.out.println("请您输入学生姓名:");
        String name = sc.next();
        System.out.println("请您输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请您输入学生性别:");
        String sex = sc.next();
        //2.将学生信息封装到Student对象中
        Student student = new Student(id,name,age,sex);
        //3.将封装好的Student对象放到students数组中
        students[count] = student;
        //4.count记录存储了多少个对象
        count ++;
        System.out.println("添加成功!");
    }

三、查看功能 findAllStudent()

    private void findAllStudent() {
        System.out.println("学号"+"   "+"姓名"+"    "+"年龄"+"    "+"性别");

        //排序为了防止删除后在添加原序号代表学生导致发生乱序结果
        for (int i = 0; i < count-1; i++) {
            for (int j = 0; j < count-1-i; j++) {
                if(students[i].getId()>students[i+1].getId()){
                    Student temp = students[i];
                    students[i] = students[i+1];
                    students[i+1] = temp;
                }
            }

        }
        //如果count==0 证明没有添加学生
        if(count == 0){
            System.out.println("对不起,该班级尚未添加学生");
        }else {
            for (int i = 0; i < count; i++) {
                System.out.println("  "+students[i].getId()+"    "+students[i].getName()+"   "+students[i].getAge()+"    "+students[i].getSex());
            }
        }
    }

四、修改功能 deleteStudent

    private void updateStudent() {
        //1.录入要修改的学生学号
        System.out.println("请您录入要修改的学生学号:");
        int id = sc.nextInt();
        /*2.注意:修改之后不能直接将id当索引去存储新的学生对象
            原因:id和学生在数组中的索引不是对应的
            解决:根据id查询对应的学生在数组中的索引位置
        */
        int updateIndex = ArrayUtils.findIndexById(students,id,count);
        System.out.println("请您输入学生姓名:");
        String name = sc.next();
        System.out.println("请您输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请您输入学生性别:");
        String sex = sc.next();
        Student student = new Student(id,name,age,sex);
        students[updateIndex] = student;
        System.out.println("修改成功!");
    }

五、删除功能 deleteStudent

    private void deleteStudent() {
        //1.要输入要删除的学生学号
        System.out.println("请您输入要删除的学生学号:");
        int id = sc.nextInt();

        //2.根据id查询学生对应的索引位置
        int removeIndex = ArrayUtils.findIndexById(students,id,count);

        //复制被删除元素前面一部分
        System.arraycopy(students,0,newStudents,0,removeIndex);

        //在复制被删除元素后面一部分
        System.arraycopy(students,removeIndex+1,newStudents,removeIndex,students.length-removeIndex-1);

        //将新数组的地址值给老数组
        students = newStudents;
        //删除完之后,count--
        count--;
        System.out.println("删除成功!");
}

六、退出功能

    public void start(){
        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(" 请选择1~5: ");
            int num = sc.nextInt();
            System.out.println("——————————————————————————————");

            switch (num){
                case 1:
                    addStudent();
                    break;
                case 2:
                    updateStudent();
                    break;
                case 3:
                    deleteStudent();
                    break;
                case 4:
                    findAllStudent();
                    break;
                case 5:
                    System.out.println("是否退出?按0为退出/按9为取消");
                    int key = sc.nextInt();
                    if(key==0){
                        System.out.println("再见,欢迎下次使用!");
                        return;//结束方法
                    }else if(key == 9){
                        break;
                    }
                default:
                    System.out.println("输入数字有误");
            }
        }
    }

七、总代码

1.增删改查方法

import java.lang.reflect.Array;
import java.util.Scanner;

public class StudentView {
    //后面会反复键盘录入,所以Scanner键盘录入方法放在开头
    Scanner sc = new Scanner(System.in);

    /*
    老数组,长度为50,代表班级最多能放50个人
    后面每个功能都需要使用数组,所以可以将数组
    放到成员位置
     */
    Student[] students = new Student[50];

    /*
        定义一个count变量,记录数组中有多少个对象,遍历元素不能全部遍历
        因为没有存对象的位置遍历出来是null,在调用get xxx方法,会出现空指针
        所以我们应该记录存储对象的个数,存多少个对象,就遍历多少次
        而且,后面可能会反复使用count,所以提到成员位置
     */
    int count = 0;

    /*
        新数组,一会删除元素的时候需要将删除后剩下的元素复制到新数组中
        因为数组定长,不能直接在原来的数组基础上随意改变长度
        由于一次删一个,所以新数组长度为老数组长度-1
        后面可能会反复使用新数组,所以定义到成员位置
     */
    Student[] newStudents = new Student[students.length-1];

    //start方法用于展示页面以及调用对应功能
    public void start(){
        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(" 请选择1~5: ");
            int num = sc.nextInt();
            System.out.println("——————————————————————————————");

            switch (num){
                case 1:
                    addStudent();
                    break;
                case 2:
                    updateStudent();
                    break;
                case 3:
                    deleteStudent();
                    break;
                case 4:
                    findAllStudent();
                    break;
                case 5:
                    System.out.println("是否退出?按0为退出/按9为取消");
                    int key = sc.nextInt();
                    if(key==0){
                        System.out.println("再见,欢迎下次使用!");
                        return;//结束方法
                    }else if(key == 9){
                        break;
                    }
                default:
                    System.out.println("输入数字有误");
            }
        }
    }

    private void findAllStudent() {
        System.out.println("学号"+"   "+"姓名"+"    "+"年龄"+"    "+"性别");

        //排序
        for (int i = 0; i < count-1; i++) {
            for (int j = 0; j < count-1-i; j++) {
                if(students[i].getId()>students[i+1].getId()){
                    Student temp = students[i];
                    students[i] = students[i+1];
                    students[i+1] = temp;
                }
            }

        }
        //如果count==0 证明没有添加学生
        if(count == 0){
            System.out.println("对不起,该班级尚未添加学生");
        }else {
            for (int i = 0; i < count; i++) {
                System.out.println("  "+students[i].getId()+"    "+students[i].getName()+"   "+students[i].getAge()+"    "+students[i].getSex());
            }
        }
    }

    private void deleteStudent() {
        //1.要输入要删除的学生学号
        System.out.println("请您输入要删除的学生学号:");
        int id = sc.nextInt();

        //2.根据id查询学生对应的索引位置
        int removeIndex = ArrayUtils.findIndexById(students,id,count);

        //复制被删除元素前面一部分
        System.arraycopy(students,0,newStudents,0,removeIndex);

        //在复制被删除元素后面一部分
        System.arraycopy(students,removeIndex+1,newStudents,removeIndex,students.length-removeIndex-1);

        //将新数组的地址值给老数组
        students = newStudents;
        //删除完之后,count--
        count--;
        System.out.println("删除成功!");
}

    private void updateStudent() {
        //1.录入要修改的学生学号
        System.out.println("请您录入要修改的学生学号:");
        int id = sc.nextInt();
        /*2.注意:修改之后不能直接将id当索引去存储新的学生对象
            原因:id和学生在数组中的索引不是对应的
            解决:根据id查询对应的学生在数组中的索引位置
        */
        int updateIndex = ArrayUtils.findIndexById(students,id,count);
        System.out.println("请您输入学生姓名:");
        String name = sc.next();
        System.out.println("请您输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请您输入学生性别:");
        String sex = sc.next();
        Student student = new Student(id,name,age,sex);
        students[updateIndex] = student;
        System.out.println("修改成功!");
    }

    private void addStudent() {
        System.out.println("添加功能");
        //1.键盘录入学生信息
        System.out.println("请您输入学生学号:");
        int id = sc.nextInt();
        System.out.println("请您输入学生姓名:");
        String name = sc.next();
        System.out.println("请您输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请您输入学生性别:");
        String sex = sc.next();
        //2.将学生信息封装到Student对象中
        Student student = new Student(id,name,age,sex);
        //3.将封装好的Student对象放到students数组中
        students[count] = student;
        //4.count记录存储了多少个对象
        count ++;
        System.out.println("添加成功!");
    }
}

2.测试类 main函数

public class Test01 {
    public static void main(String[] args) {
        new StudentView().start();
    }
}

3.复制数组内容

public class Test02 {
    public static void main(String[] args) {
        int[] arr1 = {1,2,3,4,5,6,7,8};
        int[] arr2 = new int[8];
        /*
            工具类:System
            静态方法:arrayCopy
                参数1:源数组 -> 从哪个数组中开始复制
                参数2:从源数组的哪个索引开始复制
                参数3:目标数组 -> 复制到哪里去
                参数4:从目标数组的哪个索引开始粘贴
                参数5:复制多少个
         */
        System.arraycopy(arr1,0,arr2,0,3);
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }
    }
}

4.查找数组中与查询学号值相同的索引

public class ArrayUtils {
    private ArrayUtils(){

    }

    public static int findIndexById(Student[] students,int id,int count){
        //遍历,查找
        for (int i = 0; i < count; i++) {
            if(id == students[i].getId()){
                return i;
            }
        }
        return -1;
    }
}

5.测试运行结果

添加学生

查看学生

删除学生

修改学生

 退出系统

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

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

相关文章

MySQL死锁产生的原因和解决方法

一.什么是死锁 要想知道MYSQL死锁产生的原因,就要知道什么是死锁?在了解什么是死锁之前,先来看一个概念:线程安全问题 1.线程安全问题 1.1什么是线程安全问题 线程安全问题&#xff0c;指的是在多线程环境当中&#xff0c;线程并发访问某个资源&#xff0c;从而导致的原子性&a…

module ‘json‘ has no attribute ‘dumps‘

如果在使用Python的json模块时遇到AttributeError: module json has no attribute dumps错误&#xff0c;通常是因为在Python环境中json模块不支持dumps方法。这种情况可能是因为Python的json模块被重命名或修改过导致的。 解决方法可以尝试以下几种&#xff1a; 1.检查Pytho…

围剿尚未终止 库迪深陷瑞幸9.9阳谋

文|智能相对论 作者|霖霖 总能被“累了困了”的打工人优先pick的咖啡&#xff0c;刚复工就顺利站上话题C位。 #瑞幸9.9元一杯活动缩水#的话题才爬上新浪微博热搜&#xff0c;“库迪咖啡河北分公司运营总监带头坑害河北联营商”的实名举报帖就出现在了小红书&#xff0c;一时…

复旦大学MBA聚劲联合会:洞见智慧,拓宽思维格局及国际化视野

12月2日&#xff0c;“焕拥时代 俱创未来”聚劲联合会俱创会年度盛典暨俱乐部募新仪式圆满收官。16家复旦MBA俱乐部、200余名同学、校友、各界同仁齐聚复旦管院&#xff0c;一起在精彩纷呈的圆桌论坛里激荡思想&#xff0c;在活力四射的俱乐部风采展示中凝聚力量。      以…

第四十二回 假李逵翦径劫单身 黑旋风沂岭杀四虎-python读写csv和json数据

李逵答应了宋江三件事&#xff1a;不可吃酒&#xff0c;独自前行&#xff0c;不带板斧。李逵痛快答应了&#xff0c;挎一口腰刀&#xff0c;提着朴刀&#xff0c;带了一锭大银子&#xff0c;三五个小银子就下山去了。 宋江放心不下&#xff0c;于是请同乡朱贵也回家一趟&#…

Mybatis总结--传参

MyBatis 传递参数&#xff1a;从 java 代码中把参数传递到 mapper.xml 文件 六、一个简单参数&#xff1a; Dao 接口中方法的参数只有一个简单类型&#xff08; java 基本类型和 String &#xff09;&#xff0c; 占位符 #{ 任意字符 } &#xff0c;和方法的参数名无关…

浅谈SpringMVC

什么是MVC模式 MVC&#xff1a;MVC是一种设计模式 MVC的原理图&#xff1a; 分析&#xff1a; 1&#xff1a;M-Model 模型&#xff08;完成业务逻辑&#xff1a;有javaBean构成&#xff0c;servicedaoentity&#xff09; 2&#xff1a;V-View 视图&#xff08;做界面的展示…

MySQL sql注意点

本文列取了常用但是容易遗漏的一些知识点。另外关键词一般大写&#xff0c;为了便于阅读所以很多小写。也为了给自己查缺补漏。 distinct&#xff08;去重&#xff09; 也许你经常对单个字段去重&#xff0c;并且知道不建议用distinct&#xff0c;而是group by&#xff0c;因为…

Cesium 展示——加载 tileset.json 格式的模型数据

文章目录 需求分析需求 已给 tileset.json 文件,现需加载该模型文件, 该模型特点:模型上的各模块均可以进行点击设置,且相机视角拉近后可以看到内部隐藏的物件模块 分析 tileset.json :模型数据【模型加载】方法export function init3dTileLayer (option) {var tilesetMo…

让AI玩一千万次贪吃蛇

如果让人工智能来玩贪吃蛇游戏&#xff0c;会发生什么&#xff1f; 图源&#xff1a;DALLE 目录 贪吃蛇实现 游戏规则 游戏实现 Q学习算法实现 Q学习简介 Q表和Q值 Q学习更新规则 Q学习在贪吃蛇游戏中的应用 整体项目完整代码 运行过程截图 代码分析 环境设置 …

SORA技术报告

文档链接&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …

Linux使用C语言获取进程信息

Linux使用C语言获取进程信息 Author: OnceDay Date: 2024年2月22日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: Linux proc目录详解_/proc/mounts-CSDN博客Linux下/proc目录介绍 - 知乎 (zhihu.com)Linux内…

该如何选择适合的服务器

服务器&#xff0c;简单来说&#xff0c;就是一个专门用来为其他计算机提供服务的计算机。 我们熟悉的网站、应用和各种在线服务&#xff0c;绝大多数都运行在一台或多台服务器中&#xff0c;所以说服务器是整个网络世界的基石。 服务器一般具有高速的CPU运算、高数据吞吐、可扩…

CrossOver虚拟机软件2024有哪些功能?最新版本支持哪些游戏?

CrossOver由codewaver公司开发的类虚拟机软件&#xff0c;目的是使linux和Mac OS X操作系统和window系统兼容。CrossOver不像Parallels或VMware的模拟器&#xff0c;而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏&#xff0c;而不…

算法练习-组合【回溯算法】(思路+流程图+代码)

难度参考 难度&#xff1a;困难 分类&#xff1a;回溯算法 难度与分类由我所参与的培训课程提供&#xff0c;但需 要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0…

Code-Audit(代码审计)习题记录6-7

介绍&#xff1a; 自己懒得搭建靶场了&#xff0c;靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习&#xff0c;可以随地访问&#xff0c;本文所有的题目均来源于网站HSCSEC-Code Audit 6、习题6 题目内容如下&#xff1a; 源代…

Python+Flask低代码数据融合引擎工具

我用了2年多时间开发了一个低代码数据融合引擎工具 1.整体界面 2.主要功能 1)通过excel文件生成mysql数据表结构及数据保存 说明:功能细节包括(excel文件上传,文件内容预览,建表导入数据),难点在于对excel数据类型判断,并与mysql数据类型对应 2)建立数据表结构并批量导入数据 …

python程序设计基础:字符串与正则表达式

第四章&#xff1a;字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII&#xff0c;仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码&#xff0c;最多只能表示256个符号。 随着信息技…

Ubuntu20.04开启/禁用ipv6

文章目录 Ubuntu20.04开启/禁用ipv61.ipv62. 开启ipv6step1. 编辑sysctl.confstep2. 编辑网络接口配置文件 3. 禁用ipv6&#xff08;sysctl&#xff09;4. 禁用ipv6&#xff08;grub&#xff09;附&#xff1a;总结linux网络配置 Ubuntu20.04开启/禁用ipv6 1.ipv6 IP 是互联网…

openssl

最新版本3.0 使用 生成自签名的根证书 openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt -subj "/CCA/STCA/LCA/OCA/OUCA/CNCA" pem格式 BASE64&#xff0c;会有PUBLIC KEY表示公钥&#xff0c;PRIVATE KEY表示私钥 根据私钥生成公钥 openss…