当前位置: 首页 > news >正文

重学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.测试运行结果

添加学生

查看学生

删除学生

修改学生

 退出系统

相关文章:

  • Windows 获取内存 API 汇总及使用方法
  • Python编程技巧 – 装饰器
  • HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO
  • 深入理解java虚拟机---自动内存管理
  • 一.重新回炉Spring Framework: 理解Spring IoC
  • Python第十九章(模块)
  • PyCharm 新建目录 (directory or folder)
  • JavaScript 设计模式之组合模式
  • ubuntu 22.04 图文安装
  • Java使用Redis实现分页功能
  • 微服务中4种应对跨库Join的思路
  • 如何选择最适合的图纸加密软件?用户体验及性价比
  • 同一台宿主机上虚拟机CPU资源分配方式介绍
  • 【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
  • 剑指offer面试题16 反转链表
  • CentOS7简单部署NFS
  • es6(二):字符串的扩展
  • Java超时控制的实现
  • Java面向对象及其三大特征
  • Netty 4.1 源代码学习:线程模型
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Odoo domain写法及运用
  • Spark学习笔记之相关记录
  • Travix是如何部署应用程序到Kubernetes上的
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 两列自适应布局方案整理
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序开发问题汇总
  • 因为阿里,他们成了“杭漂”
  • 在Unity中实现一个简单的消息管理器
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #include
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (图)IntelliTrace Tools 跟踪云端程序
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)Neo4j下载安装以及初次使用
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .net FrameWork简介,数组,枚举
  • .NET分布式缓存Memcached从入门到实战
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET学习教程二——.net基础定义+VS常用设置
  • /run/containerd/containerd.sock connect: connection refused
  • ;号自动换行
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @软考考生,这份软考高分攻略你须知道
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504