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

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

这次我们来尝试使用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.mrgr.cn/news/48766.html

相关文章:

  • uniapp-小程序开发0-1笔记大全
  • sklearn pipeline
  • 中科星图GVE(案例)——AI实现建筑用地变化前后对比情况
  • node.js服务器基础
  • C++笔记---红黑树的插入删除
  • 数据结构-5.2.树的性质
  • 【C语言教程】【常用类库】(四)数学函数库 - <math.h>
  • 浅谈钓鱼攻防之道-制作免杀word文件钓鱼
  • 幽默视频下载网站推荐
  • C#拓展方法
  • 一文搞懂什么是 classpath
  • 备受好评的 5 款安卓手机数据恢复工具推荐
  • vim实用笔记
  • Windows 下 cocos2d-x-3.17.2 VS2017开发环境搭建
  • 机器学习与神经网络:从技术前沿到诺贝尔奖的跨越与未来展望
  • Python酷库之旅-第三方库Pandas(145)
  • 【Adobe全家桶】 Adobe 全家桶 AE AU PR ME WIN MAC 各个版本
  • 安卓无障碍获取录屏权限
  • C语言中缓冲区底层实现以及数据输入的处理
  • Linux内核USB3.0驱动框架分析--USB主机控制器hcd驱动分析