项目案例作业2:对案例进行面向对象分析

集美大学课程实验报告-项目案例作业2:对案例进行面向对象分析

项目名称 内容
课程名称 Java
班级 网安2413
指导教师 郑如滨
学生姓名 林沁茹
学号 202421336067
实验项目名称 项目案例作业2:对案例进行面向对象分析
上机实践日期
上机实践时间 2学时

一、目的(本次实验所涉及并要求掌握的知识点)

  • 解读案例信息,了解其中的知识点

题目1—案例中哪里体现出了封装性及其好处(姓名:林沁茹 学号:202421336067)

1. Student 类的封装

image

2.StudentManagementSystem 类的封装

image

通过private使这些属性只能在类内部被访问,使任何外部类无法直接访问,提高了数据的安全性和代码的可维护性


题目2—案例中的setter/getter模式与封装性(姓名:林沁茹 学号:202421336067)

1.什么是setter/getter?

setter 和 getter 是类中两种特殊的方法,它们被用于访问和修改类中 private 属性的 public 方法

2.有什么用?

  • getter 通常用于读取私有属性的值,一般有一个返回值,返回值的类型与属性的类型相同,并且它不接收任何参数。
  • setter 通常用于设置私有属性的值,一般没有返回值(返回类型为 void),并且它接收一个参数,参数的类型与属性的类型相同,这个参数就是要赋予属性的新值

3.怎么自动生成?

1.在IntelliJ IDEA中按 Alt + Insert
2.选择目标属性和方法
3.创建完成


题目3—案例中某些类的toString()方法(姓名:林沁茹 学号:202421336067)

1.简述toString方法有什么用?

toString()方法的主要作用是将一个对象转换成其自己需要的字符串表示形式(诺不重写,返回的会是数据的地址)

2.toString一般应包含什么内容?

toString() 一般包含数据的返回格式和明确的对象信息

3.toString()方法从哪里来?

toString()方法来源于Java中的数据库java.lang.Object( 重写时用@Override 注解来标记)


题目4—案例中几个常用方法解析(姓名:林沁茹 学号:202421336067)

  1. Student类
  • Student.Student(String name, int age, String gender, String id, String major, double gpa)
    在创建一个新的 Student 对象时,对其进行初始化
  • Student.getName()
    获取当前 Student 对象的 name 属性的值
  • public void setName(String name)
    修改当前Student 对象的name的值
  • toString()
    根据要求返回符合要求的字符串格式
  1. StudentManagementSystem 类
  • StudentManagementSystem.StudentManagementSystem()
    构建了一个新的 ArrayList 实例,并将其赋值给私有属性 students
  • StudentManagementSystem.addStudent(Student student)
    传入的学生对象添加到内部的学生列表中
  • StudentManagementSystem.removeStudent(Student student)
    从内部的students列表中移除指定的学生对象
  • StudentManagementSystem.searchByName(String name)
    在内部的students列表中寻找同名学生对象
  • StudentManagementSystem.searchByMajor(String major)
    在内部的students列表中寻找同科目学生对象
  • StudentManagementSystem.getStudents()
    获取系统中所有学生数据的列表

5. 案例中的面向对象设计(姓名:林沁茹 学号:202421336067)

5.1 尝试用一段话描述案例所解决的问题。找到其中的名词与动词。

  • 该案例旨在构建一个简易的学生信息管理系统,用于解决如何结构化地存储、管理(增加和删除)和查询学生数据的问题。通过StudentManagementSystem 类来集中管理学生的所有数据,通过Student类来关联一个学生的所有数据,使之成为一个整体。
  • 名词:学生,学号,姓名,年龄,性别,科目,绩点
  • 动词:存储,增加,删除,查询,获取,修改,输出

5.2 如果让你设计,根据上面的分析你会抽象出什么类?各具备什么功能?

  • 一个包含学生的全部信息,使之具有单独获取和修改实例中每一个信息的功能
  • 入口,直接在此实现案例中StudentManagementSystem 类中的功能,并会有一个展示功能选项的功能

三、实验使用环境(本次实验所使用的平台和相关软件)

以下请根据实际情况编写

  • 操作系统:Windows 11专业版
  • 编程语言:Java
  • 开发工具:[eclipse)

四、附件-参考文件

  • Main.java
点击查看代码
package code;

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

public class Main {
	public static void main(String[] args) {

		/**
		 * This program is a student management system that allows users to add, remove,
		 * and search for students by name, major, and GPA. It uses the Student and
		 * StudentManagementSystem classes to store and manage student data.
		 */
		// Initialize the scanner
		Scanner scanner = new Scanner(System.in);
		StudentManagementSystem sms = new StudentManagementSystem();
		boolean running = true;
		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");

			// Get user input
			int choice = scanner.nextInt();

			// Process user input
			switch (choice) {
			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
				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:
				// Search for a student by major
				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:
				// Search for a student by GPA
				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:
				// Show all Students
				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:
				// Exit the program
				running = false;
				System.out.println("Exit Successfully!");
				break;
			default:
				// Invalid input
				System.out.println("Invalid choice!");
				break;
			}
		}
		// Close scanner
		scanner.close();
	}
}

  • Student.java
点击查看代码
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 +
                '}';
    }
}

  • StudentManagementSystem.java
点击查看代码
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;
    }
}

  • StudentManagementSystemTest.java
点击查看代码
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());
	}
}

posted @ 2025-09-24 18:19  穗和  阅读(9)  评论(0)    收藏  举报