当前位置: 首页 > news >正文

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

集美大学课程实验报告-项目案例作业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. 根据要求,添加学生信息

image

2.根据输入的学生姓名,在数组中寻找该名学生对应的信息

image

3.根据科目的查找,输出对应科目的学生信息

image

4.根据绩点的查找,输出对应绩点的学生信息

image

5.展示所有信息

image

6.根据ID,删除学生信息

image

7.退出程序

image

StudentManagementSystemTest.java文件运行

根据要求,先后输出所有学生信息,查找John的信息,查找学科为Mathematics的学生信息,查找绩点为3.5的学生信息,去除一个学生信息后存储的所有学生信息
image


三、类功能讲解

  • 对于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)

四、附件-参考文件

  1. Java实验教学大纲

  2. PTA中提交Java程序的一些套路

  3. Java9相关资料(JShell简易教程等)

  4. IntelliJ IDEA的基本使用

http://www.wxhsa.cn/company.asp?id=2869

相关文章:

  • P1097 合唱队形
  • 一生一芯学习:pa2.1 RTFM
  • Linux网络:初识网络 - 详解
  • 20250909比赛总结
  • 又寸入生白勺司烤
  • Ubuntu 安装 GIPM
  • 手动下载vscode扩展的方法
  • GAS_Aura-Aura Projectile
  • CF1583F Defender of Childhood Dreams
  • scrollArea无法滚动
  • 时间序列分析(1)
  • 一行代码没写,做了一个小程序
  • 【置顶】欢迎来到 ziyaojia 的主页
  • copyparty 是一款使用单个 Python 材料实现的内网文件共享软件,具有跨平台、低资源占用等特点,适合需要本地化文件管理的场景
  • ZYNQ Ultrascale+系列部署yolo v10(暂定,若过于艰难则考虑降级或FQ)
  • 【EF Core】再谈普通实体关系与 Owned 关系的区别
  • qoj6104 Building Bombing
  • 必知必会:使用serializers.Serializer在views.py视图文件中序列化和反序列化过程的开发模板
  • Cursor小程序实战五:Cursor对接微信两大核心问题
  • 电商系统的Mysql表设计是怎么样呢
  • Docker应用 - CloudSaver
  • SQL查找是否存在,别再count了! - DAYTOY
  • Cursor小程序实战系列二:如何从原型界面到小程序界面
  • Cursor小程序实战系列三: 前后端对接保姆级拆解
  • 课前问题思考2
  • Cursor小程序实战四:如何让AI写好后端代码
  • Web 3
  • Cursor小程序实战系列一:0到1开发一个小程序,需求整理、小程序注册备案
  • 深入解析:MySQL 数据类型与运算符详解
  • 【前端Vue】如何优雅地在vue中引入ace-editor编辑器 - 指南