目录
这段Java代码定义了一个名为Student的类,它用于表示一个学生实体,并包含了学生的属性以及访问这些属性的getter和setter方法。
一、分析代码
①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.@Override
:Override
是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
中。