学生信息管理系统
功能讲解
数据处理
该程序主要处理什么数据?这些数据存储在哪里?与C语言程序相比,Java代码处理这些数据有何不同之处。
核心数据
- name String类型
- age int类型
- gender String类型
- id String类型
- major String类型
- gpa double类型
数据的存储位置
- 单个学生数据:存储在Student类的对象中(通过new Student(...)创建的实例),每个对象在堆内存(Heap)中占据独立空间。
- 学生集合数据:所有学生对象的引用(地址)存储在StudentManagementSystem类的students变量中,其实际类型是ArrayList(动态数组),同样在堆内存中分配空间。
不同之处
| 维度 | Java处理方式 | C语言处理方式 |
|---|---|---|
| 数据类型 | 存在基本数据类型和引用数据类型,例如String类型的数据指向堆中的字符串对象,而基本数据类型基本存储在数据常量池中 | 只存在基本数据类型和指针 |
| 数据封装 | 通过类(class)封装数据和操作方法,如Student类将学生属性和getName()等方法封装在一起,对外隐藏实现细节(private修饰属性) | 用结构体(struct)仅封装数据,操作数据的函数需在结构体外部定义,无法实现 “数据 + 方法” 的统一封装 |
| 内存管理 | 当对象无引用时,会有垃圾回收机制自动回收内存 | 需要手动释放 |
| 数据处理 | 提供丰富的集合框架(List、ArrayList等),无需手动管理数组大小:ArrayList会自动扩容,add()/remove()方法简化操作;泛型(List |
需用数组或链表手动实现集合功能:数组大小固定,扩容需手动重新分配内存并复制元素;无泛型机制,需通过指针强制转换操作不同类型数据,易出错。 |
| 字符串处理 | String类封装了字符串操作(equals()、length()等),字符串是不可变对象,操作安全便捷。 | 字符串本质是char数组,需通过strcpy()、strcmp()等库函数手动处理,且需注意数组越界问题。 |
功能说明

1.功能:展示菜单

2.功能:添加学生,分别输入学生姓名,年龄,性别,学号,专业,绩点,对学生大体情况进行录入。

3.功能:展示所有在册学生信息

4.功能:通过输入学生id,删除学生信息。

删除后我通过功能6测试了一下学生信息是否已经删除,通过结果可以看出确实已经删除。


5.功能: 通过姓名查找学生,以上两张图分别为查找成功展示信息和查无此人的测试结果。


6.功能: 通过专业查找学生,以上两张图分别为查找成功展示信息和没有查找到有该相关专业的测试结果。


7.功能: 通过绩点查找学生,以上两张图分别为查找成功展示信息和没有查找到有该相关绩点的测试结果。

8.功能: 退出程序。
类功能讲解
| 类 | 功能概述 | 属性的用途 | 所包含的方法 |
|---|---|---|---|
| Student | 对姓名、年龄、性别、id、专业、绩点这几个变量进行封装,保证数据的安全性;通过设置器、访问器控制对属性的读写;通过toString()方法,以字符串形式直观展示学生信息 | 姓名、年龄、性别、id、专业、绩点分别存储学生的姓名、年龄、性别、id、专业、绩点,但我个人觉得此处不太严谨,可以通过枚举规定性别和专业,不然会造成male/female/boy/girl/的不统一,会造成对下面查找功能的误区,尽管目前没有设置通过性别查找的功能 | toString();以字符串形式直观打印学生信息 ,getName();getAge();getGender();getId();getMajor();getGpa();setName();setAge();setGender();setId();setMajor();setGpa() |
| StudentManagementSystem | 提供List接口,并初始化ArrayList类型的动态数组,可以使用List接口提供的add(),remove()等用法,实现输入姓名或者是专业或者是绩点来查找学生信息 | private List |
addStudent(Student student);removeStudent(Student student);getStudents();searchByMajor(String major);searchByGpa(double gpa) ; |
| StudentManagementSystemTest 类(测试类) | 通过硬编码方式创建学生对象、调用 StudentManagementSystem 的业务方法,快速验证系统核心功能(新增、查询、删除)是否正常工作,属于 “功能验证工具类”。 | 无自定义属性(仅在 main 方法中定义局部变量,如 StudentManagementSystem 实例、Student 实例)。 | 初始化管理系统实例、创建 3 个学生对象、调用 addStudent () 新增学生、调用 getStudents ()/searchByName () 等方法验证功能、调用 removeStudent () 验证删除功能,最后打印结果。 |
| Main类 | 作为系统的 “用户交互界面”,通过控制台接收用户输入,解析用户操作指令,调用 StudentManagementSystem 的业务方法完成对应操作,是用户与系统交互的唯一入口。 | 无自定义属性(仅在 main 方法中定义局部变量,如 Scanner 实例、StudentManagementSystem 实例、boolean 类型的运行状态标记等)。 | 1.初始化 Scanner(用于接收用户输入)和 StudentManagementSystem 实例;2.通过 while 循环维持程序运行,打印操作菜单(1-7 对应增删查等功能);3.接收用户输入的指令,通过 switch 分支执行对应操作(如输入 1 则调用 addStudent () 新增学生,输入 7 则退出程序);4.处理用户输入的异常情况(如输入非 1-7 的数字时提示 “无效选择”);5.程序结束时关闭 Scanner,释放资源。 |
Main 类是 “用户交互层” 类,唯一负责接收用户输入、展示操作结果,是系统与用户的 “桥梁”。
基本语法讲解
Java特有语法
-
类与对象的定义:
使用class关键字定义类(如Student、Main),通过new关键字创建对象(如new Student(...)、new StudentManagementSystem()),这是 Java 纯面向对象编程的基础语法。 -
访问控制修饰符:使用private和public控制成员的访问权限
-
构造方法:重载
-
设置器、访问器:为私有属性提供公共的访问和修改接口
-
接口与实现类的结合:使用List接口声明变量,通过ArrayList实现类初始化(List
students = new ArrayList<>()),体现 Java 面向接口编程的思想,依赖抽象而非具体实现。 -
自动装箱和自动拆箱

浙公网安备 33010602011771号