学生管理系统案例初步分析报告

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

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());
			}
		}
	}

运行结果如下图所示:
功能2运行结果

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);
			}
		}
	}

运行结果如下图所示:
查询学生信息-name

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);
			}
		}
	}

运行结果如下图所示:
查询学生信息-major

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);
		}
	}
}

运行结果如下图所示:
查询学生信息-GPA

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类

  1. Student类是一个简单的Java类,用于表示一个学生的实体。这个类包含了学生的基本信息,并提供了一系列的构造函数、getter和setter方法以及一个toString方法。

  2. 类成员变量: private String name;:表示学生的名字。 private int age;:表示学生的年龄。 private String gender;:表示学生的性别。 private String id;:表示学生的唯一标识符,如学号。
    private String major;:表示学生的专业。 private double gpa;:表示学生的平均成绩点(GPA)。

  3. 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。

  4. 构造函数: 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类的功能。

2.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()获取并打印更新后的学生列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值