学生信息管理系统代码分析

目录

一、分析代码

①main.java

②Student.java

这段Java代码定义了一个名为Student的类,它用于表示一个学生实体,并包含了学生的属性以及访问这些属性的getter和setter方法。

③Students.java

④StudentManagementSystem.java


一、分析代码

①main.java

这段代码实现了学生信息的管理系统的菜单,包括了对学生信息的增、删、查找和展示。

package code;

import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		StudentManagementSystem sms = new StudentManagementSystem();
		boolean running = true;
		while (running) {
			System.out.println("Enter 1 to add a student");
			System.out.println("Enter 2 to remove a student");
			System.out.println("Enter 3 to search for a student by name");
			System.out.println("Enter 4 to search for a student by major");
			System.out.println("Enter 5 to search for a student by GPA");
			System.out.println("Enter 6 to show all students");
			System.out.println("Enter 7 to exit");
			int choice = scanner.nextInt();
			switch (choice) {
			case 1:
				System.out.println("Enter student name:");
				String name = scanner.next();
				System.out.println("Enter student age:");
				int age = scanner.nextInt();
				System.out.println("Enter student gender:");
				String gender = scanner.next();
				System.out.println("Enter student ID:");
				String id = scanner.next();
				System.out.println("Enter student major:");
				String major = scanner.next();
				System.out.println("Enter student GPA:");
				double gpa = scanner.nextDouble();
				Student student = new Student(name, age, gender, id, major, gpa);
				sms.addStudent(student);
				System.out.println("Student added successfully!\n");
				break;
			case 2:
				System.out.println("Enter student ID to remove:");
				String removeId = scanner.next();
				List<Student> students = sms.getStudents();
				boolean removed = false;
				for (Student s : students) {
					if (s.getId().equals(removeId)) {
						sms.removeStudent(s);
						removed = true;
						System.out.println("Student removed successfully!\n");
						break;
					}
				}
				if (!removed) {
					System.out.println("Student not found!");
				}
				break;
			case 3:
				System.out.println("Enter student name to search:");
				String searchName = scanner.next();
				List<Student> searchResults = sms.searchByName(searchName);
				if (searchResults.isEmpty()) {
					System.out.println("No students found!");
				} else {
					System.out.println("Search results:");
					for (Student s : searchResults) {
						System.out.println(s);
					}
				}
				break;
			case 4:
				System.out.println("Enter student major to search:");
				String searchMajor = scanner.next();
				searchResults = sms.searchByMajor(searchMajor);
				if (searchResults.isEmpty()) {
					System.out.println("No students found!");
				} else {
					System.out.println("Search results:");
					for (Student s : searchResults) {
						System.out.println(s);
					}
				}
				break;
			case 5:
				System.out.println("Enter student GPA to search:");
				double searchGpa = scanner.nextDouble();
				searchResults = sms.searchByGpa(searchGpa);
				if (searchResults.isEmpty()) {
					System.out.println("No students found!");
				} else {
					System.out.println("Search results:");
					for (Student s : searchResults) {
						System.out.println(s);
					}
				}
				break;
			case 6:
				List<Student> studentList = sms.getStudents();
				if (studentList.size() == 0) {
					System.out.println("The System Data is empty Now!");
				}else {
					for (Student studentItem : studentList) {
						System.out.println(studentItem.toString());
					}
				}
				break;
			case 7:
				running = false;
				System.out.println("Exit Successfully!");
				break;
			default:
				System.out.println("Invalid choice!");
				break;
			}
		}
		scanner.close();
	}
}

基本语法分析
1.switch,case语句实现多种选择

2.package code  //定义了类所属的包,通常用于组织类,以避免类名冲突。

3.import java.util.List;  
import java.util.Scanner;      //引入了 List 和 Scanner 类。Scanner 用于从控制台接收用户输入,List 是一个接口,通常用于存储学生对象的集合。

4.Scanner scanner = new Scanner(System.in);  
StudentManagementSystem sms = new StudentManagementSystem();  
boolean running = true;                      //创建 Scanner 实例用于读取用户输入。创建 StudentManagementSystem 实例,负责管理学生数据。boolean running 用于表示程序运行状态,初始值设为 true

5.double gpa = scanner.nextDouble();

// 这行代码使用名为scanner的对象来读取用户输入的下一个双精度浮点数(double),并将其存储在名为gpa的变量中。这里的scanner通常是一个`java.util.Scanner`类的实例,用于获取用户的输入。
6. Student student = new Student(name, age, gender, id, major, gpa);

/这行代码创建了一个新的Student类的实例。Student类可能是一个自定义的类,它有一个构造函数,该构造函数接受以下参数:`name`(学生姓名),`age`(学生年龄),`gender`(学生性别),`id`(学生ID),`major`(学生专业),和`gpa`(学生平均成绩点数)。这个新创建的Student对象被赋值给名为student的变量。
7.sms.addStudent(student);
   //调用了名为sms的对象的addStudent方法,并将前面创建的student对象作为参数传递给这个方法。sms可能是代表一个学生管理系统的对象,addStudent方法的功能是将一个学生对象添加到学生管理系统中。
8.String removeId = scanner.next();`:
//使用`scanner`对象读取用户输入的下一个字符串(要删除的),并存储在名为removeId的变量中
List<Student> students = sms.getStudents();`:
 // 调用`sms`对象的`getStudents`方法,该方法返回一个包含所有学生对象的List<Student>集合。这个集合被赋值给名为students的变量。
boolean removed = false;`:
 //声明了一个布尔类型的变量`removed,并将其初始化为false。用于标记是否移除了学生。
for (Student s : students) { ... }`:
   - 这是一个增强型for循环,它遍历`students`列表中的每一个Student对象,并将当前迭代的对象赋值给变量`s`。
if (s.getId().equals(removeId)) { ... }`:
   //这是一个条件判断,它检查当前迭代的`Student`对象的getId方法返回的ID是否与`removeId`相等。如果相等,则执行下面的代码块。
sms.removeStudent(s);`:
   // 当找到了与`removeId`相匹配的学生的时候,调用sms对象的removeStudent方法,并将当前迭代的`Student`对象s作为参数传递,从而从学生管理系统中移除这个学生。
removed = true;`:
   //将`removed`变量的值设置为`true`,表示已经成功移除了一个学生。
System.out.println("Student removed successfully!\n");`:
   //这行代码在控制台输出一条消息,通知用户学生已被成功移除。
 

类功能讲解
1.int choice = scanner.nextInt();  //读取用户输入,并存储在choice变量中。

2.case 1:    
    String name = scanner.next();  
    int age = scanner.nextInt();  
    Student student = new Student(name, age, gender, id, major, gpa);  
    sms.addStudent(student);  //从用户处获取学生信息,创建 Student 对象并使用 StudentManagementSystem 的 addStudent 方法添加到系统中。

3.case 2:  
    String removeId = scanner.next();  
    // 遍历学生列表查找并删除

case 3:  
    String searchName = scanner.next();  
    List<Student> searchResults = sms.searchByName(searchName);//搜索学生

4.case 7:  
    running = false;  
    System.out.println("Exit Successfully!");

//设置 running 为 false,结束主循环并退出程序。  

5.scanner.close();   /在程序结束前关闭 Scanner 以释放资源。

②Student.java


这段Java代码定义了一个名为Student的类,它用于表示一个学生实体,并包含了学生的属性以及访问这些属性的getter和setter方法。

package code;

public class Student {
    private String name;
    private int age;
    private String gender;
    private String id;
    private String major;
    private double gpa;

    public Student(String name, int age, String gender, String id, String major, double gpa) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.id = id;
        this.major = major;
        this.gpa = gpa;
    }

    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 String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getId() {
        return id;
    }

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

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public double getGpa() {
        return gpa;
    }

    public void setGpa(double gpa) {
        this.gpa = gpa;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", id='" + id + '\'' +
                ", major='" + major + '\'' +
                ", gpa=" + gpa +
                '}';
    }
}

基本语法讲解

1.package code;:指定当前Java文件所在的包名为code

2.@OverrideOverride是Java的一个注解,不需要导入,直接使用。

3.public class Student { ... }:定义了一个名为Student的公共类。

4.private String name;声明了一个私有成员变量name,它的类型是String

5.public Student(...) { ... }:这是Student类的构造函数,用于创建类的实例时初始化成员变量。

6.public String getName() { ... }:这是一个公共方法,称为getter方法,用于获取name属性的值。

7.return "Student{...}";toString方法返回一个包含学生信息的字符串。

类功能讲解

1.成员变量(属性):类中定义的private变量用于存储每个Student对象的属性值。

2.构造函数:用于创建Student对象时设置其初始状态。

3.getter方法:允许外部代码安全地读取Student对象的属性值。

4.setter方法:允许外部代码安全地修改Student对象的属性值。

5.toString方法:重写了从Object类继承的toString方法,用于提供Student对象的字符串表示,这对于调试和日志记录非常有用。

③StudentManagement.java
 

这段Java代码可以管理学生列表,包括添加、移除和检索学生(可以根据学生的姓名、专业或GPA搜索学生。)

package code;

import java.util.ArrayList;
import java.util.List;

public class StudentManagementSystem {
    private List<Student> students;

    public StudentManagementSystem() {
        students = new ArrayList<>();
    }

    public void addStudent(Student student) {
        students.add(student);
    }

    public void removeStudent(Student student) {
        students.remove(student);
    }

    public List<Student> getStudents() {
        return students;
    }

    public List<Student> searchByName(String name) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (student.getName().equals(name)) {
                result.add(student);
            }
        }
        return result;
    }

    public List<Student> searchByMajor(String major) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (student.getMajor().equals(major)) {
                result.add(student);
            }
        }
        return result;
    }

    public List<Student> searchByGpa(double gpa) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (student.getGpa() == gpa) {
                result.add(student);
            }
        }
        return result;
    }
}

基本语法讲解

1.package code;:指定当前Java文件所在的包名为code

2.import java.util.ArrayList;导入ArrayList类,用于实现可调整大小的数组列表。

3.import java.util.List;导入List接口,它定义了列表的操作。

4.public class StudentManagementSystem { ... }:定义了一个名为StudentManagementSystem的公共类。

5.private List<Student> students;声明了一个私有成员变量students,它是一个List,用于存储Student对象。

6.public StudentManagementSystem() { ... }:这是StudentManagementSystem类的构造函数,用于创建类的实例时初始化成员变量。

7.students = new ArrayList<>();:使用ArrayList实现List接口,并初始化students变量。

8.public void addStudent(Student student) { ... }:定义了一个公共方法addStudent,用于向学生列表中添加一个学生。

9.students.add(student);:调用List接口的add方法,将一个Student对象添加到列表中。

10.public List<Student> getStudents() { ... }:定义了一个公共方法getStudents,返回学生列表。

类功能讲解

1.students成员变量:用于存储系统中所有学生的列表。

2.构造函数StudentManagementSystem():在创建StudentManagementSystem对象时,初始化students列表。

3.addStudent(Student student)方法:接受一个Student对象作为参数,并将其添加students列表中。

4.removeStudent(Student student)方法:接受一个Student对象作为参数,并从students列表中移除该对象。

5.getStudents()方法:返回系统中所有学生的列表。

6.searchByName(String name)方法:接受一个字符串作为参数,搜索并返回所有姓名匹配的学生列表。

7.searchByMajor(String major)方法:接受一个字符串作为参数,搜索并返回所有专业匹配的学生列表。

8.searchByGpa(double gpa)方法:接受一个double值作为参数,搜索并返回所有GPA匹配的学生列表。

每个搜索方法都创建了一个新的ArrayList来存储搜索结果,然后遍历students列表,根据给定的条件(姓名、专业或GPA)检查每个学生,如果条件匹配,则将该学生添加到结果列表中。最后,返回结果列表。

④StudentManagementSystem.java

功能如下
创建一个StudentManagementSystem对象,用于管理学生。

创建三个Student对象,分别表示不同的学生。

将这些学生添加到StudentManagementSystem中。

打印所有学生的列表。

搜索并打印姓名为"John"的学生。

搜索并打印专业为"Mathematics"的学生。

搜索并打印GPA为3.5的学生。

从系统中移除名为"Mary"的学生。

再次打印所有学生的列表,以展示移除操作后的结果。

package code;

import java.util.List;
import java.util.Scanner;

public class StudentManagementSystemTest {
	public static void main(String[] args) {
		StudentManagementSystem sms = new StudentManagementSystem();
		Student s1 = new Student("John", 20, "Male", "001", "Computer Science", 3.5);
		Student s2 = new Student("Mary", 21, "Female", "002", "Mathematics", 3.8);
		Student s3 = new Student("Tom", 19, "Male", "003", "Physics", 3.2);
		sms.addStudent(s1);
		sms.addStudent(s2);
		sms.addStudent(s3);
		System.out.println("All students: " + sms.getStudents());
		System.out.println("Search by name: " + sms.searchByName("John"));
		System.out.println("Search by major: " + sms.searchByMajor("Mathematics"));
		System.out.println("Search by GPA: " + sms.searchByGpa(3.5));
		sms.removeStudent(s2);
		System.out.println("All students after removing Mary: " + sms.getStudents());
	}
}

基本语法讲解
1.package code;:指定当前Java文件所在的包名为code

2.import java.util.List;:导入List接口,用于表示可序列化的元素集合。

3.import java.util.Scanner;:导入Scanner类,用于读取用户输入(尽管在此代码中未使用)。

4.public class StudentManagementSystemTest { ... }定义了一个名为StudentManagementSystemTest的公共类。

5.public static void main(String[] args) { ... }:定义了Java程序的入口点,即主方法。

6.StudentManagementSystem sms = new StudentManagementSystem();:创建了一个StudentManagementSystem类的实例。

7.Student s1 = new Student(...);创建了三个Student类的实例。

8.sms.addStudent(s1);:调用StudentManagementSystem对象的addStudent方法,将学生添加到管理系统中。

9.System.out.println(...);:打印输出到控制台。

10.sms.removeStudent(s2);:调StudentManagementSystem对象的removeStudent方法,从管理系统中移除指定的学生。

类功能讲解

1.StudentManagementSystem类:虽然代码中没有显示这个类的定义,但从使用情况来看,这个类应该提供了管理学生信息的功,包括添加学生、搜索学生、移除学生和获取所有学生的列表等方法。

2.Student类:代表单个学生,包含学生的属性,如姓名、年龄、性别、ID、专业和GPA等。

StudentManagementSystemTest类中:

3.main方法:是程序的入口点,用于测试StudentManagementSystem类的功能。

4.Student对象:是Student类的实例,代表具体的单个学生。

注意:代码中使用了StudentManagementSystem类和Student类,、位于同一个包code中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值