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

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

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

                                                ——  陈情表.李密

                                                             —— 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.mzph.cn/news/692085.shtml

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

相关文章

Codeforces Round 925 (Div. 3)(A,B,C,D,E,F,G)

比赛链接 这场打的很顺&#xff0c;感觉难度和 div 4 差不多&#xff0c;不是很难。D题稍微考了考同余的性质&#xff0c;E题直接模拟过程即可&#xff0c;F题也可以暴力模拟或者拓扑排序&#xff0c;G题是个数学题&#xff0c;是个简单隔板法。A到F题都可以直接模拟就有点离谱…

「WinCC报警系统专题」简述“消息系统”

WinCC通过报警给操作员提供了有关过程故障和错误的信息。它们有助于尽早检测重要情况和避免停机时间。 一、消息系统 消息&#xff08;报警&#xff09;系统由组态和运行系统组件组成。 1、组态系统 报警记录编辑器&#xff08;如图1所示&#xff09;是报警系统的组态组件。报…

docker (九)-进阶篇-docker-compos最佳实践部署zabbix

一 部署docker环境 关闭防火墙、selinux、开启docker&#xff0c;并设置开机自启动 注意点&#xff1a;docker部署的时候&#xff0c;bip要指定&#xff0c;不然会导致虚拟机ip和容器ip冲突&#xff0c;ssh连不上虚拟机 部署请参考 docker &#xff08;二&#xff09;-yum…

为什么程序员不能一次性写好,需要不停改bug?

写程序不是一次性完成的原因有很多&#xff0c;其中包括了解不充分、需求变更、复杂性、人为因素等多个方面的原因。 需求不明确&#xff1a; 在项目一开始&#xff0c;对需求可能存在歧义或不完整的理解。有时候&#xff0c;业务需求会在开发过程中发生变化&#xff0c;导致…

Go应用性能分析实战

Go很适合用来开发高性能网络应用&#xff0c;但仍然需要借助有效的工具进行性能分析&#xff0c;优化代码逻辑。本文介绍了如何通过go test benchmark和pprof进行性能分析&#xff0c;从而实现最优的代码效能。原文: Profiling Go Applications in the Right Way with Examples…

【Vuforia+Unity】AR03-圆柱体物体识别

1.创建数据库模型 这个是让我们把生活中类似圆柱体和圆锥体的物体进行AR识别所选择的模型 Bottom Diameter:底部直径 Top Diameter:顶部直径 Side Length:圆柱侧面长度 请注意&#xff0c;您不必上传所有三个部分的图片&#xff0c;但您需要先为侧面曲面关联一个图像&#…

工具分享:在线键盘测试工具

在数字化时代&#xff0c;键盘作为我们与计算机交互的重要媒介之一&#xff0c;其性能和稳定性直接影响到我们的工作效率和使用体验。为了确保键盘的每个按键都能正常工作&#xff0c;并帮助用户检测潜在的延迟、连点等问题&#xff0c;一款优质的在线键盘测试工具显得尤为重要…

Java后端底座从无到有的搭建(随笔)

文章目录 开发模式的演变草创时期1.0时期&#xff08;基座时期&#xff09;1.1时期&#xff08;低代码时期&#xff09;2.0时期&#xff08;无代码时期&#xff09; 前言&#xff1a;本文是笔者在初创公司&#xff0c;一年多来Java后端服务底座搭建过程的总结&#xff0c;如有不…

四旋翼无人机控制-零散笔记整理

四旋翼无人机控制-零散笔记整理 说明仿真框架 说明 这是低创文章&#xff0c;本意是整理本科留下来的一堆零碎的纸质笔记&#xff0c;整理完就把纸质的扔了。所以前后不连贯&#xff0c;也可能有错误&#xff0c;图片都是直接拍的笔记照片&#xff0c;很丑。如果想系统学习的可…

【C++】STL- > string类(超详解!!!)

文章目录 前言1、string类的出现1.1 C语言中的字符串1.2 平时使用 2. 标准库中的string类2.1 string类的常用文档&#xff08;重要&#xff09;&#xff01;&#xff01;&#xff01;&#xff01;2.2 string类的常用接口说明(接口原型我这里就不展示了&#xff0c;文档中都有可…

前后端分离(delivery-management)部署文档

1. 前端项目:delivery-management 1.1. 前端项目打包 执行命令:npm run build 或者yarn run build,生成dist目录。 构建流程如下图: 1.2. 文件上传 将打包好的前端项目(dist目录),上传到服务器,并拷贝到nginx安装目录html目录下。 执行上传命令(sftp):put -r E:\…

展示用HTML编写的个人简历信息

展示用HTML编写的个人简历信息 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

Windows 自带的 Linux 子系统(WSL)安装与使用

WSL官网安装教程&#xff1a; https://learn.microsoft.com/zh-cn/windows/wsl/install Windows 自带的Linux子系统&#xff0c;比用VM什么的香太多了。可以自己看官方教程&#xff0c;也可以以下步骤完成。 如果中间遇到我没遇到的问题百度&#xff0c;可以在评论区评论&#…

Redis(03)——发布订阅

基础命令 基于频道 publish channel message&#xff1a;将信号发送到指定的频道pubsub subcommand [argument [argyment]]&#xff1a;查看订阅或发布系统状态subscribe channel [channel]&#xff1a;订阅一个或多个频道的信息unsubscribe [channel [channel]]&#xff1a;退…

Java——Stream流的学习

在开发过程中&#xff0c;经常或忽略流的使用&#xff0c;导致用的不熟练&#xff0c;于是抽时间系统的学习下stream的使用&#xff0c;找了哔哩哔哩的教程跟着看看练练。 准备工作 创建Book、Aurhor实体类&#xff0c;初始化数据 public static List<Author> getAuth…

解锁文档处理新境界:ONLYOFFICE编辑功能为开发者带来新机遇

引言 ONLYOFFICE最新发布的文档8.0版本带来了一系列引人注目的功能和优化&#xff0c;为用户提供了更强大、更高效的在线编辑体验。这次更新涵盖了多个方面&#xff0c;包括PDF表单、RTL支持、单变量求解、图表向导以及插件界面设计更新等。这些新功能不仅提升了文档处理的便利…

职业资格高级执法考试试题及答案,分享几个实用搜题和学习工具 #知识分享#微信

作为当代大学生&#xff0c;我们常常面临着繁重的学业压力和众多的学习任务。在这个信息爆炸的时代&#xff0c;如何高效地进行搜题和学习成了我们迫切需要解决的问题。幸运的是&#xff0c;随着科技的不断进步&#xff0c;我们拥有了许多方便、实用的日常搜题和学习软件。 1.…

旗舰配置,巅峰性能 | 一文玩转铁威马 『F4-424 Pro』强大的Docker虚拟机功能【附产品开箱】

旗舰配置&#xff0c;巅峰性能 | 一文玩转铁威马 『F4-424 Pro』强大的Docker&虚拟机功能【附产品开箱】 哈喽小伙伴们&#xff0c;我是Stark-C~ 开篇 记得还在两个月之前&#xff0c;我为大家介绍了国产“开箱即用”的国民专业级NAS『铁威马』&#xff1a; &#x1f53…

idea代码review工具Code Review Helper使用介绍

之前在团队里面遇到一个关于代码review的问题&#xff0c;使用gitlab自己的还是facebook的Phabricator&#xff0c;很难看到整体逻辑&#xff0c;因为业务逻辑代码可能不在这次改动范围内&#xff0c;在去源库中找不好找。针对这个刚需&#xff0c;在网上找了一个idea的代码工具…

kali安装awvs报错error creating the database

修改host文件 vim /etc/hosts 加入 127.0.0.1 kali 重启再安装即可解决