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

爱是小小的癌 2024-10-19 14:05:01 阅读 68

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

📚 学生管理系统[初阶](不带模拟登录系统)——(我们这次讲这个)

📚 学生管理系统[进阶](附带模拟登录系统)——(传送门:Java-学生管理系统[进阶](登录系统)-CSDN博客)

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

📕 Java的输入和输出

📕 Java的分支与循环

📕 Java的数组

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

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

📕 Java的集合(基本使用)

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

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

① 在系统中添加学生

② 在系统中删除学生

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

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

⑤ 退出学生管理系统

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

① 创建学生类

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

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

然后New一个JavaClass

取名为"Student"。

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

<code>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的用法训练了嘛~)

这样就创建好了~

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

📌 要求

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

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

📚 方法实现

<code> 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不存在,则不删除,重新输入。

📚 方法实现

<code> 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不存在,则重新输入

📚 方法实现

<code> 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

<code>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;

}

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。