集美大学课程实验报告-项目案例作业1:学生信息管理系统(面向对象初步接触)
项目名称 | 内容 |
---|---|
课程名称 | 数据结构 |
班级 | 网安2413 |
指导教师 | 郑如滨 |
学生姓名 | 林沁茹 |
学号 | 202421336067 |
实验项目名称 | 项目案例作业1:学生信息管理系统(面向对象初步接触) |
上机实践日期 | |
上机实践时间 | 2学时 |
一、目的(本次实验所涉及并要求掌握的知识点)
- 运行、读懂学生管理系统
- 掌握学生管理系统里的基本语法与逻辑
二、功能解答
数据处理
问题1-该程序主要处理什么数据?
该程序主要处理自定义类StudentManagementSystem和Student里的数据
问题2-这些数据存储在哪里?
自定义类的数据(对象本身)存储在堆中,而我们用来操作这些对象的引用(变量名)和基本类型变量则存储在栈中
问题3-与C语言程序相比,Java代码处理这些数据有何不同之处?
-
对于StudentManagementSystem.java的对比分析
1.在Java中,数据和操作被封装在StudentManagementSystem这一类里面;而C语言没有类这一概念,而是定义一个数据结构,再使用函数来实现以上功能
2.在Java中,使用了List<Student>和ArrayList,这是一个动态数组,可以根据输入的内容自动扩容;而C语言没有内置动态数组,想要达到类似的效果需要使用链表,自己手动来写逻辑,实现扩容
3.在Java中,会自动分配内存,不需要人为干预;而C语言则需要自己手动请求内存,最后还需要手动释放内存
-
对于Student.java的对比分析
1.在Java中,使用访问控制(private)来强制使数据被隐藏,保证数据的安全性;而在C语言中,没有访问控制,所有内容默认公开
2.在Java中,使用this方法,将传进来的局部变量的值,赋给我(当前对象)自己的成员变量,可以在此时加点判断,保证数据的正确性;在C语言中,没有这种this方法,是直接就可以对变量赋值,不进行封装,不可以内置检查算法
3.在Java中,在类中的方法中返回对象的引用;在C语言中,返回的是整个结构体的完整拷贝
-
对于StudentManagementSystemTest.java的对比分析
1.在Java中,采取System.out.println来进行输出和换行;在C语言中,使用printf("\n")来进行输出和换行
2.在Java中,使用new来创建一个类型,并启动了一个完整的生命周期,其构建的是一个已经构造好、处于可用状态的对象;在C语言中,使用malloc来进行内存的申请,其是在堆上动态分配指定字节数的内存块,并返回这块内存的起始地址
-
对于Main.java的对比分析
1.在Java中,采用scanner类型来进行面板的读取;在C语言中,使用scanf来进行面板的读取
2.在Java中,==永远可以用来比较任何类型的变量,但对于引用类型,它比较的是内存地址,如果想比较其内容是否相等,应该使用 equals() 方法。但要注意,equals() 方法的行为是否满足我们的要求取决于它是否在类中被正确地重写;C语言对于任何类型都可以使用==来进行比较,但对于结构体需要逐个成员进行比较
功能说明
Main.java文件运行
1. 根据要求,添加学生信息
2.根据输入的学生姓名,在数组中寻找该名学生对应的信息
3.根据科目的查找,输出对应科目的学生信息
4.根据绩点的查找,输出对应绩点的学生信息
5.展示所有信息
6.根据ID,删除学生信息
7.退出程序
StudentManagementSystemTest.java文件运行
根据要求,先后输出所有学生信息,查找John的信息,查找学科为Mathematics的学生信息,查找绩点为3.5的学生信息,去除一个学生信息后存储的所有学生信息
三、类功能讲解
-
对于Student.java的分析(Student类)
1. public Student(String name, int age, String gender, String id, String major, double gpa)
方法:类的构造方法
功能概述:对对象的属性进行初始化
属性用途:存储学生的具体数据
2.public String getName()
方法:类中的一个getter方法
功能概述:获取并返回当前Student对象的name属性的值
属性用途:name是String类型的私有成员变量,用于存储学生的姓名
3.public void setName(String name)
方法:类中的一个setter方法
功能概述:给当前的Student对象的name属性赋一个新值
属性用途:用于存储学生的姓名
4.public int getAge()
方法:类中的一个getter方法
功能概述:获取并返回当前Student对象的age属性的值
属性用途:age是String类型的私有成员变量,用于存储学生的年龄
5.public void setAge(int age)
方法:类中的一个setter方法
功能概述:给当前的Student对象的age属性赋一个新值
属性用途:用于存储学生的年龄
6.public String getGender()
方法:类中的一个getter方法
功能概述:获取并返回当前Student对象的gender属性的值
属性用途:gender是String类型的私有成员变量,用于存储学生的性别
7.public void setGender(String gender)
方法:类中的一个setter方法
功能概述:给当前的Student对象的gender属性赋一个新值
属性用途:用于存储学生的性别
8.public String getId()
方法:类中的一个getter方法
功能概述:获取并返回当前Student对象的id属性的值
属性用途:id是String类型的私有成员变量,用于存储学生的学号
9.public void setId(String id)
方法:类中的一个setter方法
功能概述:给当前的Student对象的id属性赋一个新值
属性用途:用于存储学生的学号
10.public String getMajor()
方法:类中的一个getter方法
功能概述:获取并返回当前Student对象的major属性的值
属性用途:major是String类型的私有成员变量,用于存储学生的科目
11.public void setMajor(String major)
方法:类中的一个setter方法
功能概述:给当前的Student对象的major属性赋一个新值
属性用途:用于存储学生的项目
12.public double getGpa()
方法:类中的一个getter方法
功能概述:获取并返回当前Student对象的gpa属性的值
属性用途:gpa是String类型的私有成员变量,用于存储学生的绩点
13.public void setGpa(double gpa)
方法:类中的一个setter方法
功能概述:给当前的Student对象的gpa属性赋一个新值
属性用途:用于存储学生的绩点
14.public String toString()
方法:重写了Java中所有类都默认继承自Object类的toString()方法
功能概述:将当前Student对象的所有属性信息,格式化成一个易于阅读的字符串形式并返回
属性用途:私有属性被直接访问,并通过字符串拼接的方式组合成一个完整的表达形式
-
对于StudentManagementSystem.java的分析(StudentManagementSystem类)
1.public StudentManagementSystem()
方法:类的构造方法
功能概述:对对象进行初始化,确保在students内部已经被正确创建
属性用途:存储所有学生的具体数据
2.public void addStudent(Student student)
方法:类中的一个setter方法
功能概述:添加一名学生信息到数组中
3.public void removeStudent(Student student)
方法:类中的一个setter方法
功能概述:去除数组中一名学生信息
4.public List getStudents()
方法:类中的一个getter方法
功能概述:获取并返回数组中一名学生的信息
5.public List searchByName(String name)
方法:类中的一个setter方法
功能概述:在数组中根据输入的名字查找学生的信息,并返回所有符合条件的学生信息
6.public List searchByMajor(String major)
方法:类中的一个setter方法
功能概述:在数组中根据输入的科目查找学生的信息,并返回所有符合条件的学生信息
7.public List searchByGpa(double gpa)
方法:类中的一个setter方法
功能概述:在数组中根据输入的绩点查找学生的信息,并返回所有符合条件的学生信息
-
对于StudentManagementSystemTest.java的分析(测试类)
public static void main(String[] args)
方法:类中的一个main方法
功能概述:给当前的StudentManagementSystem对象存入三个Student对象信息,并展示所有信息和StudentManagementSystem类里方法调用后的结果
属性用途:用于存储学生的年龄
-
对于Main.java的分析(Main类)
public static void main(String[] args)
方法:类中的一个main方法
功能概述:使用Scanner读取面板,调用while循环和switch方法,实现功能的选取,并根据面板输入内容调用相应StudentManagementSystem类里的方法,并展示
属性用途:读取面板和用于存储学生的年龄
-
对于Main类不同于其它类的分析
Main类是整个应用程序的启动器和用户交互层,负责启动和运行整个程序,它的存在不是为了解决问题本身,而是为了让问题能够在一个特定的环境(这里是命令行)中被用户使用和解决;其它类都属于应用程序的核心领域模型,它们共同定义了“学生管理”这个问题的本质
四、基本语法讲解
List
1.是Java中最核心、最常用的接口之一
2.是一个有序的、允许重复元素的集合,可以把它想象成一个动态数组或者一个序列
3.需要使用new ArrayList<>()来进行实例化
方法
- 方法的分类
1.构造方法,实现对象的初始化
2.普通方法,可以对于输入内容进行自定义判断和返回格式(即定义对象的行为,让对象能执行操作),可以被反复的调用
- 方法重写
子类对父类中允许访问的方法的实现过程进行重新编写,其中返回值和形参都不能改变
读取
采用Scanner类来读取命令行内容
输出
采用System.out.println来进行输出和换行
五、实验使用环境(本次实验所使用的平台和相关软件)
以下请根据实际情况编写
- 操作系统:Windows 11专业版
- 编程语言:Java
- 开发工具:[eclipse)
四、附件-参考文件
-
Java实验教学大纲
-
PTA中提交Java程序的一些套路
-
Java9相关资料(JShell简易教程等)
-
IntelliJ IDEA的基本使用