项目案例作业1:学生信息管理系统(面向对象初步接触)

项目案例作业1:学生信息管理系统(面向对象初步接触)

小组成员:202421336012-李天瑞

功能讲解

数据处理

该程序主要处理的是学生数据

  • 数据类型:程序处理的学生数据包含以下属性:

    • name (String): 学生姓名
    • age (int): 学生年龄
    • gender (String): 学生性别
    • id (String): 学生学号(作为唯一标识符)
    • major (String): 学生专业
    • gpa (double): 学生平均绩点
  • 数据存储位置:该Java程序的数据存储在运行时内存中的一个ArrayList<Student>集合中。

  • 与C语言的对比

    • 封装性:Java使用Student类将数据和对数据的操作(getter/setter方法)封装在一起,而C语言通常使用结构体来存储数据,函数来操作数据,两者是分离的。
    • 内存管理:Java使用ArrayList自动处理动态内存分配和扩容,无需手动管理内存。在C语言中,通常需要手动使用mallocfree来管理链表或动态数组的内存。
    • 类型安全ArrayList<Student>是类型安全的集合,只能存储Student对象。C语言的数组或链表通常使用void*或特定的结构体指针,类型安全性较低。

功能说明

程序启动后,会在控制台显示一个文本菜单,提供7个功能选项。

  1. **主菜单界面 **
    53524d74665c126da9be1894fcf9b4f

    • 功能描述:程序启动后显示的界面。用户可以通过输入数字1-7来选择相应的操作。
  2. **添加学生 **
    c467fd56ec9063d22c8e84d617a14f4

    • 功能描述:选择选项1后,程序会提示用户依次输入学生的姓名、年龄、性别、学号、专业和GPA。输入完成后,程序会创建一个新的Student对象并将其添加到管理系统中,最后提示“Student added successfully!”。
  3. **移除学生 **
    c75fe36a75239529dfe1c18ae232074

    • 功能描述:选择选项2后,程序会提示用户输入要删除的学生的学号(ID)。然后程序会遍历学生列表,找到匹配ID的学生并将其移除。
  4. 按姓名搜索 (案例截图描述)
    00f0262ef0bf1cc09d484fa70750771

    • 功能描述:选择选项3后,程序会提示用户输入要搜索的姓名。程序会返回所有姓名匹配的学生列表。
  5. 按专业搜索 & 按GPA搜索
    78a9b37b4aa65dd101c7e73521886c4
    70ef00c4a94b25ac371592b225ce314

    • 功能描述:选项45的功能与按姓名搜索类似,分别是根据专业和GPA来搜索学生。
  6. 显示所有学生
    f179608481905f9505edcfede4dc70d

    • 功能描述:选择选项6后,程序会调用getStudents()方法并打印返回的列表,显示当前系统中所有学生的详细信息。
  7. 退出程序
    17ddc95b9092620ddc1543021eee9ab

    • 功能描述:选择选项7后,会将循环变量running设置为false,从而结束循环,程序正常退出。

类功能讲解

该系统包含三个核心类:Student, StudentManagementSystem, Main。还有一个测试类StudentManagementSystemTest

1. Student类

  • 功能概述:这是一个数据模型类(Model),用于表示一个学生的实体,封装了学生的所有属性。

  • 属性用途

    • name, age, gender, id, major, gpa:分别用于存储学生的姓名、年龄、性别、学号、专业和平均绩点。
  • 包含的方法

    • 构造方法 Student(...):用于创建一个新的学生对象,初始化所有属性。
    • Getter和Setter方法 (如getName(), setName()):用于读取和修改对象的私有属性。这是封装性的体现。
    • toString()方法:重写了Object类的toString()方法,返回一个包含对象所有属性值的字符串,便于打印和调试。

2. StudentManagementSystem类

  • 功能概述:这是一个服务类(Service)管理类,负责核心业务逻辑,包括对学生集合的增、删、查等操作。

  • 属性用途

    • private List<Student> students:一个Student类型的List(具体实现为ArrayList),用于在内存中存储和管理所有学生对象。
  • 包含的方法

    • addStudent(Student student):向列表中添加一个学生。
    • removeStudent(Student student):从列表中移除指定的学生对象。
    • getStudents():返回当前存储的所有学生的列表。
    • searchByName(String name):根据姓名进行精确匹配搜索,返回匹配的学生列表。
    • searchByMajor(String major):根据专业进行精确匹配搜索,返回匹配的学生列表。
    • searchByGpa(double gpa):根据GPA进行精确匹配搜索,返回匹配的学生列表。

3. Main类

  • 功能概述:这是程序的入口点表示层(View)控制器(Controller) 的混合体。它负责处理用户的输入和输出,并调用StudentManagementSystem中的相应方法来执行操作。

  • 属性用途:无持久属性。在main方法中创建了局部变量。

  • 包含的方法:仅包含main方法,是程序的启动入口。

4. StudentManagementSystemTest类

  • 功能概述:这是一个测试类,用于对StudentManagementSystem类的功能进行单元测试。它包含了预定义的数据和操作,用来验证其他类的方法是否正确工作。

与所有其它类都不太一样的类

Main与所有其他类都不太一样。

  • Student是纯数据模型。
  • StudentManagementSystem是纯业务逻辑。
  • StudentManagementSystemTest是纯测试代码。
  • Main类包含了程序的启动入口用户交互逻辑(UI)和控制流程。它耦合了视图和控制器的功能,是唯一一个直接与用户(通过控制台)进行交互的类。

基本语法讲解

该代码使用了一些Java特有的语法和特性,体现了面向对象编程的思想。

  1. 包(Package)

    package code;
    
    • 用于组织相关的类,避免类名冲突。所有类都位于code包下。
  2. 导入(Import)

    import java.util.List;
    import java.util.Scanner;
    import java.util.ArrayList;
    
    • 用于引入其他包中的类,以便在当前类中使用。
  3. 类(Class)

    public class Student { ... }
    
    • Java程序的基本构建块,用于封装数据和行为。
  4. 访问修饰符(Access Modifiers)

    • public:该类、方法或属性可以被任何其他类访问。
    • private:该属性或方法只能在定义它的类内部被访问。这是实现封装的关键。
  5. ArrayList集合(Collection)

    private List<Student> students = new ArrayList<>();
    
    • ArrayList是Java集合框架的一部分,提供了一个可调整大小的动态数组。它比基础数组更强大、更灵活。List<Student>使用了泛型,指定了这个列表只能包含Student类型的对象,保证了类型安全。
  6. Getter和Setter方法

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    • 这是JavaBean的标准约定,用于对外提供访问和修改私有属性的公共方法,是封装性原则的体现。
  7. @Override注解:

    @Override
    public String toString() { ... }
    
    • 表示该方法是重写父类(Object)的方法。注解可以帮助编译器检查重写方法的正确性。
  8. Scanner类

    Scanner scanner = new Scanner(System.in);
    int choice = scanner.nextInt();
    
    • 一个简单的文本扫描器,用于从输入流(如标准输入System.in)中解析基本类型和字符串。用于实现控制台交互。
posted @ 2025-09-21 18:41  糯米鸡加鸡蛋  阅读(13)  评论(0)    收藏  举报