学生管理系统
1.功能讲解
该部分是对于该系统主要功能的讲解,该系统的主要功能包括:添加学生、显示所有学生、按要求查询学生、删除学生以及退出该系统。下面将一一进行分析讲解。
1.1.添加学生
该功能使用户能够通过输入学生的姓名,年龄,学号将学生的信息添加到学生管理系统中。
通过方法addStudent
实现,该方法的代码如下:
private static void addStudent(Scanner scanner, StudentManagementSystem sms) {
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");
}
运行结果如下图所示:
1.2.显示学生
用户通过输入对应功能编号可实现获取系统中所有学生的相关信息,包括学生姓名,年龄,学号,性别,专业以及GPA。该功能通过方法showAllStudent
实现,代码如下:
private static void showAllStudent(StudentManagementSystem sms) {
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());
}
}
}
运行结果如下图所示:
1.3.查询学生
该功能分由三个子功能实现,用户可通过输入姓名或者专业名称或者GPA进行查询相应的学生信息,使查询结果更精准。
1.3.1.通过姓名查询学生
用户通过输入菜单中的相应功能编号后,可直接输入所要查询的学生姓名,进而获取指定学生的信息,该功能通过方法searchStudentByName
实现,实现代码如下:
private static void searchStudentByName(Scanner scanner, StudentManagementSystem sms) {
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);
}
}
}
运行结果如下图所示:
1.3.2.通过major查询学生
用户通过输入菜单中的相应功能编号后,可直接输入所要查询的学生major,进而获取指定学生的信息,该功能通过方法searchStudentByMajor
实现,实现代码如下:
private static void searchStudentByMajor(Scanner scanner, StudentManagementSystem sms) {
List<Student> searchResults;
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);
}
}
}
运行结果如下图所示:
1.3.3.通过GPA查询学生
用户通过输入菜单中的相应功能编号后,可直接输入所要查询的学生GPA,进而获取指定学生的信息,该功能通过方法searchStudentByGPA
实现,实现代码如下:
private static void searchStudentByGPA(Scanner scanner, StudentManagementSystem sms) {
List<Student> searchResults;
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);
}
}
}
运行结果如下图所示:
1.4.删除学生
用户在输入相应功能编号后,可进入该功能。该功能需要用户通过输入所要删除的学生的id,进而删除id对应的学生的信息。该功能通过方法 removeStudent
实现,该方法代码如下:
private static void removeStudent(Scanner scanner, StudentManagementSystem sms) {
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!");
}
}
运行结果如下图所示:
1.5.退出
用户在输入该功能编号后退出程序。
运行结果如下如所示:
2.基本语法讲解
2.1类和对象相关
- 类的定义和使用:
定义了Main类和StudentManagementSystem类、Student类。
在Main类的main方法中创建了StudentManagementSystem类的对象sms和Scanner类的对象scanner,通过对象来调用类中的方法实现相应功能。
- 构造函数:
public Student(String name, int age, String gender, String id, String
major, double gpa)是构造函数,用于在创建Student对象时初始化对象的各个属性。
- 封装:
类中的属性(name、age、gender、id、major、gpa)都被声明为private,这体现了封装的概念,将数据隐藏在类内部,通过公共的getter和setter方法来访问和修改这些属性。
- 成员变量:
定义了private List students;,这是一个私有的List集合,用于存储Student对象。
2.2流程控制相关
- 循环结构(while 循环):
使用while循环来持续运行程序,直到running变量变为false。在循环体中展示菜单选项,并根据用户输入执行相应操作。
- 选择结构(switch - case)
switch - case语句根据用户输入的不同整数值(choice)执行不同的操作,如添加学生、删除学生、按不同条件搜索学生等。
- 增强 for 循环:
在各个搜索方法(searchByName、searchByMajor、searchByGpa)中,使用增强型for循环for
(Student student :
students)遍历students集合中的每个Student对象,然后根据条件判断是否将该对象添加到结果集合中。
2.3输入输出相关
- 输入(Scanner 类):
使用Scanner类从控制台读取用户输入。通过scanner.nextInt()读取整数(如选择操作的数字、学生年龄等),scanner.next()读取字符串(如学生姓名、性别、专业等),scanner.nextDouble()读取双精度浮点数(如学生的平均绩点)。
- 输出(System.out.println):
使用System.out.println()在控制台输出提示信息、操作结果等。
2.4集合相关
- 列表(List)的使用:
在StudentManagementSystem类中(假设该类中有相应方法),使用List来存储多个学生对象。在删除学生、搜索学生以及展示所有学生信息的操作中,都涉及对List集合的遍历和操作。
- ArrayList 的使用:
在构造函数StudentManagementSystem()中,通过students = new ArrayList<>();初始化students集合,ArrayList是List接口的一个常用实现类,它可以动态地调整大小。
- 集合的添加和删除元素:
addStudent(Studentstudent)方法使用students.add(student);将学生对象添加到students集合中。
removeStudent(Student student)方法使用students.remove(student);从集合中删除指定的学生对象。
- 打印集合:
在输出语句中直接打印包含Student对象的List集合,System.out.println会自动调用集合元素的toString方法进行输出。
2.5字符串相关
- 字符串比较(equals 方法):
在删除学生的操作中,使用equals()方法比较学生的id字符串,以确定是否找到要删除的学生对象。
- 字符串比较:
在searchByName和searchByMajor方法中,使用equals()方法比较字符串,例如student.getName().equals(name)和student.getMajor().equals(major),这是比较字符串内容是否相等的正确方式。
- 浮点数比较
在searchByGpa方法中,使用==来比较浮点数student.getGpa() ==gpa,不过在浮点数比较时,由于浮点数的精度问题,这种方式可能存在风险,更好的做法是使用一个较小的差值范围来判断是否相等。
2.6方法相关
- getter 和 setter 方法:
提供了一系列的get方法(如getName()、getAge()等)和set方法(如setName()、setAge()等),用于获取和设置类中的私有属性。这是一种常见的编程实践,保证了数据的安全性和可维护性。
- 重写 toString 方法:
重写了Object类的toString()方法,用于返回对象的字符串表示形式。当需要将Student对象转换为字符串时(例如在打印输出时),会自动调用这个重写后的方法。在上述代码中,重写后的toString()方法返回了包含学生所有属性信息的字符串。
- 方法的返回值:
getStudents()方法返回存储学生对象的List集合。 searchByName(String
name)、searchByMajor(String major)和searchByGpa(double
gpa)方法分别根据姓名、专业和平均绩点进行搜索,它们都返回一个符合条件的Student对象的List集合。
- 调用方法:
通过sms.addStudent(s1)等语句调用StudentManagementSystem类中的addStudent方法添加学生对象。
通过sms.getStudents()调用getStudents方法获取所有学生的列表。
通过sms.searchByName(“John”)等语句调用相应的搜索方法。
通过sms.removeStudent(s2)调用removeStudent方法删除指定学生对象。
3.类功能讲解
该部分主要针对该系统中的四大类进行功能分析讲解。该系统的类主要包括:Main类,Student类,StudentManagementSystem类以及StudentManagementSystemTest类。下面将逐一进行分析讲解
3.1.Main类
这个Main类是学生管理系统的主入口点,它包含了主方法main和一些辅助方法来处理用户输入和显示系统菜单。以下是该类中的方法讲解:
1.main(String[] args):程序的主方法,程序的执行从这里开始。
初始化Scanner和StudentManagementSystem。
进入一个循环,显示菜单并处理用户的选择,直到用户选择退出。
2.menu():显示系统菜单给用户,让用户选择要执行的操作。
addStudent(Scanner scanner, StudentManagementSystem sms):允许用户添加一个新的学生到系统中。
请求用户输入学生的详细信息。
创建一个新的Student对象并使用sms添加到系统中。
3.removeStudent(Scanner scanner, StudentManagementSystem sms):允许用户通过学生ID删除一个学生。
请求用户输入要删除的学生的ID。
遍历学生列表并删除匹配ID的学生。
4.searchStudentByName(Scanner scanner, StudentManagementSystem sms):允许用户通过名字搜索学生。
请求用户输入要搜索的学生名字。
使用sms搜索并显示结果。
5.searchStudentByMajor(Scanner scanner, StudentManagementSystem sms):允许用户通过专业搜索学生。
请求用户输入要搜索的专业。
使用sms搜索并显示结果。
6.searchStudentByGPA(Scanner scanner, StudentManagementSystem sms):允许用户通过GPA搜索学生。
请求用户输入要搜索的GPA。
使用sms搜索并显示结果。
7.showAllStudent(StudentManagementSystem sms):显示系统中的所有学生。
使用sms获取学生列表并显示每个学生的信息。
3.2.Student类
Student类是一个简单的Java类,用于表示一个学生的实体。这个类包含了学生的基本信息,并提供了一系列的构造函数、getter和setter方法以及一个toString方法。
类成员变量: private String name;:表示学生的名字。 private int age;:表示学生的年龄。 private String gender;:表示学生的性别。 private String id;:表示学生的唯一标识符,如学号。
private String major;:表示学生的专业。 private double gpa;:表示学生的平均成绩点(GPA)。Getter和Setter方法: getName() / setName(String name):获取/设置学生的名字。 getAge() / setAge(int age):获取/设置学生的年龄。 getGender() /
setGender(String gender):获取/设置学生的性别。 getId() / setId(String
id):获取/设置学生的ID。 getMajor() / setMajor(String major):获取/设置学生的专业。
getGpa() / setGpa(double gpa):获取/设置学生的GPA。构造函数: public Student(String name, int age, String gender, String id, String major, double
gpa):这是一个参数化的构造函数,用于创建Student对象时初始化其属性。它接受学生的名字、年龄、性别、ID、专业和GPA作为参数,并将这些值赋给相应的成员变量。
3.3.StudentManagementSystem类
1.类的基本信息
StudentManagementSystem类用于管理学生信息相关的操作。它包含了一个List类型的私有成员变量students,用于存储学生对象。
2.构造函数
- public StudentManagementSystem():这是类的构造函数,在创建StudentManagementSystem类的对象时会被调用。它初始化students列表,通过newArrayList<>()创建了一个空的ArrayList来存储学生信息。
3.方法
- public List getStudents():该方法用于获取存储学生信息的students列表。它返回一个List类型的对象,调用者可以通过这个返回值来访问和操作存储在students列表中的学生信息。
- public List searchByName(String name):这个方法用于根据学生姓名进行搜索。它接受一个String类型的参数name,遍历students列表中的每个Student对象,检查其姓名是否与给定的name相等,如果相等则将该学生对象添加到结果列表result中,最后返回包含所有匹配学生对象的result列表。
- public List searchByMajor(String major):此方法用于按专业进行搜索。它接受一个String类型的参数major,通过遍历students列表,将专业与给定major匹配的学生对象添加到result列表中,最后返回result列表。
- public List searchByGpa(double gpa):该方法用于根据平均绩点(gpa)进行搜索。它接受一个double类型的参数gpa,在遍历students列表时,将平均绩点与给定gpa相等的学生对象添加到result列表中,最后返回result列表。
3.4.StudentManagementSystemTest类
1.类的基本信息
- StudentManagementSystemTest类是一个测试类,用于测试StudentManagementSystem类的功能。
标签:String,管理系统,sms,System,学生,初步,案例,println,out From: https://blog.csdn.net/2301_80052073/article/details/1423059462.main方法中的操作
- 创建StudentManagementSystem对象
StudentManagementSystem sms = new
StudentManagementSystem();:创建了一个StudentManagementSystem的实例sms,用于管理学生信息。
- 创建Student对象并添加到系统中
创建了三个Student对象s1、s2和s3,分别代表不同的学生信息,包括姓名、年龄、性别、学号、专业和平均绩点(GPA)。
通过sms.addStudent(s1)、sms.addStudent(s2)和sms.addStudent(s3)将这三个学生对象添加到sms管理系统中。
- 执行搜索操作并输出结果
System.out.println("All students: " +
sms.getStudents());:输出所有学生的信息,通过调用sms.getStudents()获取存储在StudentManagementSystem中的学生列表并打印。
System.out.println("Search by name: " +
sms.searchByName(“John”));:根据姓名进行搜索,调用sms.searchByName(“John”)在学生列表中查找姓名为John的学生,并输出结果。
System.out.println("Search by major: " +
sms.searchByMajor(“Mathematics”));:按专业进行搜索,通过sms.searchByMajor(“Mathematics”)查找专业为Mathematics的学生,并输出结果。
System.out.println("Search by GPA: " +
sms.searchByGpa(3.5));:根据平均绩点进行搜索,调用sms.searchByGpa(3.5)找到平均绩点为3.5的学生,并输出结果。
- 移除学生并输出结果
sms.removeStudent(s2);:从管理系统中移除s2(即Mary这个学生)。 System.out.println("All
students after removing Mary: " +
sms.getStudents());:输出移除Mary后的所有学生信息,通过再次调用sms.getStudents()获取并打印更新后的学生列表。