项目案例作业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语言中,通常需要手动使用malloc
和free
来管理链表或动态数组的内存。 - 类型安全:
ArrayList<Student>
是类型安全的集合,只能存储Student
对象。C语言的数组或链表通常使用void*
或特定的结构体指针,类型安全性较低。
- 封装性:Java使用
功能说明
程序启动后,会在控制台显示一个文本菜单,提供7个功能选项。
-
**主菜单界面 **
- 功能描述:程序启动后显示的界面。用户可以通过输入数字1-7来选择相应的操作。
-
**添加学生 **
- 功能描述:选择选项
1
后,程序会提示用户依次输入学生的姓名、年龄、性别、学号、专业和GPA。输入完成后,程序会创建一个新的Student
对象并将其添加到管理系统中,最后提示“Student added successfully!”。
- 功能描述:选择选项
-
**移除学生 **
- 功能描述:选择选项
2
后,程序会提示用户输入要删除的学生的学号(ID
)。然后程序会遍历学生列表,找到匹配ID的学生并将其移除。
- 功能描述:选择选项
-
按姓名搜索 (案例截图描述)
- 功能描述:选择选项
3
后,程序会提示用户输入要搜索的姓名。程序会返回所有姓名匹配的学生列表。
- 功能描述:选择选项
-
按专业搜索 & 按GPA搜索
- 功能描述:选项
4
和5
的功能与按姓名搜索类似,分别是根据专业和GPA来搜索学生。
- 功能描述:选项
-
显示所有学生
- 功能描述:选择选项
6
后,程序会调用getStudents()
方法并打印返回的列表,显示当前系统中所有学生的详细信息。
- 功能描述:选择选项
-
退出程序
- 功能描述:选择选项
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特有的语法和特性,体现了面向对象编程的思想。
-
包(Package):
package code;
- 用于组织相关的类,避免类名冲突。所有类都位于
code
包下。
- 用于组织相关的类,避免类名冲突。所有类都位于
-
导入(Import):
import java.util.List; import java.util.Scanner; import java.util.ArrayList;
- 用于引入其他包中的类,以便在当前类中使用。
-
类(Class):
public class Student { ... }
- Java程序的基本构建块,用于封装数据和行为。
-
访问修饰符(Access Modifiers):
public
:该类、方法或属性可以被任何其他类访问。private
:该属性或方法只能在定义它的类内部被访问。这是实现封装的关键。
-
ArrayList集合(Collection):
private List<Student> students = new ArrayList<>();
ArrayList
是Java集合框架的一部分,提供了一个可调整大小的动态数组。它比基础数组更强大、更灵活。List<Student>
使用了泛型,指定了这个列表只能包含Student
类型的对象,保证了类型安全。
-
Getter和Setter方法:
public String getName() { return name; } public void setName(String name) { this.name = name; }
- 这是JavaBean的标准约定,用于对外提供访问和修改私有属性的公共方法,是封装性原则的体现。
-
@Override
注解:@Override public String toString() { ... }
- 表示该方法是重写父类(
Object
)的方法。注解可以帮助编译器检查重写方法的正确性。
- 表示该方法是重写父类(
-
Scanner类:
Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt();
- 一个简单的文本扫描器,用于从输入流(如标准输入
System.in
)中解析基本类型和字符串。用于实现控制台交互。
- 一个简单的文本扫描器,用于从输入流(如标准输入