学生管理系统(面向对象初步接触)

一、Main部分的简化

我们将原本在case部分的每一个选项的内容进行了调用,使Main部分看着更加的简便可观
case 3:
				// Search for a student by name
				searchByName(scanner, sms);
				break;
				
private static void searchByName(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!\n");
		} else {
			System.out.println("Search results:");
			for (Student s : searchResults) {
				System.out.println(s);
			}
		}
	}

这样在switch下面看到的页面更简洁

二、功能讲解

  • 本程序实现了一个较为基础的学生管理系统,允许用户通过命令行界面执行以下功能:
  • 添加学生(Addstudents):用户可以输入学生的姓名、年龄、性别、ID、专业和GPA来创建一个新的学生记录。
  • 删除学生(Removestudent):通过输入学生的ID来删除特定的学生记录。
  • 按姓名搜索学生(searchByName):用户可以通过输入学生姓名来搜索并显示所有匹配的学生信息。
  • 按专业搜索学生(searchByMajor):用户可以通过输入学生的专业来搜索并显示所有该专业的学生信息。
  • 按GPA搜索学生(searchByGpa):用户可以通过输入学生的GPA来搜索并显示所有GPA匹配的学生信息。
  • 显示所有学生(printAllStudents):列出当前系统中所有的学生记录。
  • 退出系统(Exit):允许用户退出程序。

三、基本语法讲解

  • 导入包
import java.util.List;
import java.util.Scanner;

List接口用于存储和操作元素集合,而Scanner类用于从标准输入(如键盘)

  • 类定义
public class Main 

Main类是程序的入口

  • 主方法
public static void main(String[] args)

此处是程序执行的开始

  • 变量声明和初始化
Scanner scanner = new Scanner(System.in);
StudentManagementSystem sms = new StudentManagementSystem();

此处声明并初始化了两个变量:scanner和sms。scanner用于从标准输入读取数据,而sms是StudentManagementSystem类的一个实例,用于管理学生数据。

  • 控制流语句

循环

while (running) {
			// Prompt user for input
			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");

分支

case 1:
				// Add a student
				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:
				// Remove a student
				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:
				// Search for a student by name
				searchByName(scanner, sms);
				break;
			case 4:
				// Search for a student by major
				searchByMajor(scanner, sms);
				break;
			case 5:
				// Search for a student by GPA
				searchByGpa(scanner, sms);
				break;
			case 6:
				// Show all Students
				printAllStudents(sms);
				break;
			case 7:
				// Exit the program
				running = false;
				System.out.println("Exit Successfully!");
				break;
			default:
				// Invalid input
				System.out.println("Invalid choice!");
				break;
			}

用户输入

System.out.println("Enter student ID to remove:");
String removeId = scanner.next();
System.out.println("Enter student GPA to search:");
double searchGpa = scanner.nextDouble();

输入的数据通过Scanner的next(), nextInt(), nextDouble()等方法读取并处理。

  • 方法调用

根据用户的输入(通过Scanner读取),main方法使用switch语句来选择并执行相应的操作。每个case分支都会调用一个或多个方法(如sms.addStudent(student))来处理用户的请求。
1.数据传递:
主要通过方法参数传递。例如,在添加学生时,用户输入的数据被封装成一个Student对象,然后传递给sms.addStudent(student)方法。StudentManagementSystem类的方法(如searchByName, getStudents)返回数据(如搜索结果或学生列表),这些数据随后被用于进一步的处理或显示。
2.方法依赖:
main方法依赖于StudentManagementSystem类的实例(sms)来管理学生数据。
3.方法封装和重用:
通过将搜索和显示逻辑封装在单独的方法中,代码变得更加模块化和可重用。例如,searchByName, searchByMajor, searchByGpa方法具有相似的结构。

private static void searchByMajor(Scanner scanner, StudentManagementSystem sms) {
		System.out.println("Enter student major to search:");
		String searchMajor = scanner.next();
		List<Student> searchResults = sms.searchByMajor(searchMajor);
		if (searchResults.isEmpty()) {
			System.out.println("No students found!\n");
		} else {
			System.out.println("Search results:");
			for (Student s : searchResults) {
				System.out.println(s);
			}
		}
	}

private static void searchByGpa(Scanner scanner, StudentManagementSystem sms) {
		System.out.println("Enter student GPA to search:");
		double searchGpa = scanner.nextDouble();
		List<Student> searchResults = sms.searchByGpa(searchGpa);
		if (searchResults.isEmpty()) {
			System.out.println("No students found!\n");
		} else {
			System.out.println("Search results:");
			for (Student s : searchResults) {
				System.out.println(s);
			}
		}
	}

private static void printAllStudents(StudentManagementSystem sms) {
		List<Student> studentList = sms.getStudents();
		if (studentList.isEmpty()) {
			System.out.println("The System Data is empty Now!");
		} else {
			System.out.println("All students:");
			for (Student studentItem : studentList) {
				System.out.println(studentItem.toString());
			}
		}
	}

类功能讲解

1.StudentManagementSystem 类

StudentManagementSystem 类是一个用于管理学生信息的系统,它封装了一系列方法来处理学生信息的增删查改。

private List<Student> students

该私有属性,用于存储系统中的所有学生对象。通过私有访问修饰符保护数据,防止外部直接访问和修改,而是通过公共方法来操作这些数据。

public class StudentManagementSystem

这是类的构造方法,用于初始化 students 列表为一个空的 ArrayList 实例。每当创建 StudentManagementSystem 类的新实例时,都会自动调用此方法,确保 students 列表被正确初始化。

2.Student 类

Student 类封装了与学生相关的多个属性,如姓名、年龄、性别、学号、主修专业和 GPA(成绩平均绩点),并提供了访问和修改这些属性的方法.

Getter 和 Setter 方法
对于每个私有属性,Student 类都提供了一对 getter 和 setter 方法。Getter 方法(如 getName())用于返回属性的值,而 setter 方法(如 setName(String name))用于设置属性的值。
public String getName() { return name; } public void setName(String name) { this.name = name; }

toString
public String toString():这是 Object 类的一个方法,被 Student 类重写。toString 方法返回一个表示该对象的字符串。在这个实现中,它返回了一个包含学生所有属性的格式化字符串。
public String toString() { return "Student{" +" "+ "name='" + name +'\'' + ", age=" + age + ", gender='" + gender + '\'' + ", id='" + id + '\'' + ", major='" + major + '\'' + ", gpa=" + gpa +" "+ '}'; }

3.Main 类

Main 类是这个学生管理系统的核心驱动类,它提供了一个基于控制台的界面,允许用户执行一系列操作来管理学生数据。

添加学生(Addstudent):读取学生信息(姓名、年龄、性别、学号、专业和GPA),创建一个 Student 对象,并调用 sms 的 addStudent 方法来添加这个学生。
double gpa = scanner.nextDouble(); Student student = new Student(name, age, gender, id, major, gpa); sms.addStudent(student);

删除学生(Removestudent):读取要删除学生的学号,遍历 sms 中的学生列表,找到并删除匹配的学生。如果找不到,则显示错误信息。

搜索学生:
按名称搜索:读取学生名称,调用 sms 的 searchByName 方法来查找并显示所有匹配的学生。

按专业搜索:类似地,读取学生专业,调用 searchByMajor 方法。

按GPA搜索:读取学生GPA,调用 searchByGpa 方法。

显示所有学生:调用 sms 的 getStudents 方法获取所有学生的列表,并遍历列表以显示每个学生的信息。

退出:设置 running 变量为 false,以退出主循环并结束程序。

总结

Main 类作为用户界面的核心,它通过控制台这一传统而强大的交互方式,与用户建立起直接的联系。在这个学生管理系统中,Main 类不仅充当了用户与系统之间沟通的桥梁,还巧妙地集成了 Student 类和 StudentManagementSystem 类的功能,实现了对学生信息的全面管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值