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

学生信息管理系统(面向对象初步接触)

学生管理系统初步分析报告

主要的几个类:
1、Main 类

package code;import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;public class Main {public static void main(String[] args) {/*** This program is a student management system that allows users to add, remove,* and search for students by name, major, and GPA. It uses the Student and* StudentManagementSystem classes to store and manage student data.*/// Initialize the scannerScanner scanner = new Scanner(System.in);StudentManagementSystem sms = new StudentManagementSystem();boolean running = true;while (running) {// Prompt user for input// 显示小组成员信息System.out.println("=== 小组成员信息 ===");System.out.println("学号: 02 | 姓名: ly");System.out.println("==================");System.out.println("Enter 1 to add a student");System.out.println("Enter 2 to remove a student");System.out.println("Enter 3 to search for a student by name");System.out.println("Enter 4 to search for a student by major");System.out.println("Enter 5 to search for a student by GPA");System.out.println("Enter 6 to show all students");System.out.println("Enter 7 to exit");// Get user inputint choice = scanner.nextInt();// Process user inputswitch (choice) {case 1:// Add a studentSystem.out.println("Enter student name:");String name = scanner.next();System.out.println("Enter student age:");int age = scanner.nextInt();System.out.println("Enter student gender:");String gender = scanner.next();System.out.println("Enter student ID:");String id = scanner.next();System.out.println("Enter student major:");String major = scanner.next();System.out.println("Enter student GPA:");double gpa = scanner.nextDouble();Student student = new Student(name, age, gender, id, major, gpa);sms.addStudent(student);System.out.println("Student added successfully!\n");break;case 2:// Remove a studentSystem.out.println("Enter student ID to remove:");String removeId = scanner.next();List<Student> students = sms.getStudents();boolean removed = false;for (Student s : students) {if (s.getId().equals(removeId)) {sms.removeStudent(s);removed = true;System.out.println("Student removed successfully!\n");break;}}if (!removed) {System.out.println("Student not found!");}break;case 3:// Search for a student by nameSystem.out.println("Enter student name to search:");String searchName = scanner.next();List<Student> searchResults = sms.searchByName(searchName);if (searchResults.isEmpty()) {System.out.println("No students found!");} else {System.out.println("Search results:");for (Student s : searchResults) {System.out.println(s);}}break;case 4:// Search for a student by majorSystem.out.println("Enter student major to search:");String searchMajor = scanner.next();searchResults = sms.searchByMajor(searchMajor);if (searchResults.isEmpty()) {System.out.println("No students found!");} else {System.out.println("Search results:");for (Student s : searchResults) {System.out.println(s);}}break;case 5:// Search for a student by GPASystem.out.println("Enter student GPA to search:");double searchGpa = scanner.nextDouble();searchResults = sms.searchByGpa(searchGpa);if (searchResults.isEmpty()) {System.out.println("No students found!");} else {System.out.println("Search results:");for (Student s : searchResults) {System.out.println(s);}}break;case 6:// Show all StudentsList<Student> studentList = sms.getStudents();if (studentList.size() == 0) {System.out.println("The System Data is empty Now!");}else {for (Student studentItem : studentList) {System.out.println(studentItem.toString());}}break;case 7:// Exit the programrunning = false;System.out.println("Exit Successfully!");break;default:// Invalid inputSystem.out.println("Invalid choice!");break;}}// Close scannerscanner.close();}
}

2、Student 类

package code;public class Student {private String name;private int age;private String gender;private String id;private String major;private double gpa;public Student(String name, int age, String gender, String id, String major, double gpa) {this.name = name;this.age = age;this.gender = gender;this.id = id;this.major = major;this.gpa = gpa;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public double getGpa() {return gpa;}public void setGpa(double gpa) {this.gpa = gpa;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +", id='" + id + '\'' +", major='" + major + '\'' +", gpa=" + gpa +'}';}
}

3、StudentManagementSystem 类

package code;import java.util.ArrayList;
import java.util.List;public class StudentManagementSystem {private List<Student> students;public StudentManagementSystem() {students = new ArrayList<>();}public void addStudent(Student student) {students.add(student);}public void removeStudent(Student student) {students.remove(student);}public List<Student> getStudents() {return students;}public List<Student> searchByName(String name) {List<Student> result = new ArrayList<>();for (Student student : students) {if (student.getName().equals(name)) {result.add(student);}}return result;}public List<Student> searchByMajor(String major) {List<Student> result = new ArrayList<>();for (Student student : students) {if (student.getMajor().equals(major)) {result.add(student);}}return result;}public List<Student> searchByGpa(double gpa) {List<Student> result = new ArrayList<>();for (Student student : students) {if (student.getGpa() == gpa) {result.add(student);}}return result;}
}

4、StudentManagementSystemTest 类

package code;import java.util.List;
import java.util.Scanner;public class StudentManagementSystemTest {public static void main(String[] args) {StudentManagementSystem sms = new StudentManagementSystem();Student s1 = new Student("John", 20, "Male", "001", "Computer Science", 3.5);Student s2 = new Student("Mary", 21, "Female", "002", "Mathematics", 3.8);Student s3 = new Student("Tom", 19, "Male", "003", "Physics", 3.2);sms.addStudent(s1);sms.addStudent(s2);sms.addStudent(s3);System.out.println("All students: " + sms.getStudents());System.out.println("Search by name: " + sms.searchByName("John"));System.out.println("Search by major: " + sms.searchByMajor("Mathematics"));System.out.println("Search by GPA: " + sms.searchByGpa(3.5));sms.removeStudent(s2);System.out.println("All students after removing Mary: " + sms.getStudents());}
}

功能讲解

数据处理:该程序主要处理什么数据?这些数据存储在哪里?与C语言程序相比,Java代码处理这些数据有何不同之处。

答:
1)主要是处理学生信息数据,比如姓名、年龄、性别、学号、专业和 GPA 等学生基本信息;
2)数据存储在 StudentManagementSystem 类的 students 属性中;
3)与 C 语言的不同之处:

  1. 数据结构的不同:Java 使用面向对象的 ArrayList 集合存储数据,支持动态扩容;而 C 语言通常使用数组或链表,需要手动管理内存大小。
  2. 数据封装的不同:Java 通过 Student 类封装学生数据,通过 getter/setter 方法访问;而 C 语言通常使用结构体,直接访问成员变量。

功能说明:程序运行截图(请在菜单显示出你们小组成员的学号与姓名),每张截图要配有简要文字说明其功能。

1、菜单显示:
运行截图
功能1:添加学生的基本信息,比如名字、年龄、性别等等。
功能1
功能2:通过学号删除学生的所有信息。
功能2

功能3:通过名字查询该生信息。
功能3
功能4:通过专业查询该生信息。
功能4
功能5:通过GPA查询该生信息。
功能5
功能6:展示所有学生信息。
功能6

类功能讲解

简述每个类的功能概述、属性的用途、所包含的方法。

1、Student 类

功能概述:
封装单个学生的信息。
属性用途:
name:存储学生姓名。
age:存储学生年龄。
gender:存储学生性别。
id:存储学生学号。
major:存储学生专业。
gpa:存储学生绩点。
包含方法:
构造方法(Student(…)):初始化学生的所有属性。
getter 方法(如getName()、getId()等):获取属性值。
setter 方法(可选,如setGpa(…)):修改属性值。
toString():用字符串的形式返回学生的信息。

2. StudentManagementSystem 类

功能概述:
核心业务逻辑类,用于管理所有学生的数据,提供添加、删除、查询等操作。
属性用途:
private List students,用于存储和管理系统中的所有学生对象。
包含方法:
addStudent(Student s):将学生对象添加到 students 列表中。
removeStudent(String id):根据学号从列表中删除学生。
searchByName(String name):根据姓名查询学生并返回结果。
searchByMajor(String major):根据专业查询学生。
getAllStudents():返回所有学生的列表。

3. Main 类

功能概述:
程序入口类,负责与用户交互,展示菜单、接收输入,并调用 StudentManagementSystem 的方法执行对应操作。
属性用途:
scanner:用于读取用户从控制台输入的内容。
sms:StudentManagementSystem 对象,通过它调用管理学生的方法。
running:布尔值,决定程序是否退出,控制主循环的运行。
包含方法:
main(String[] args):程序入口,初始化对象、启动主循环。

4. StudentManagementSystemTest 类

功能概述:
测试类,用于验证 StudentManagementSystem 的方法是否正确工作,如添加是否成功、查询是否准确等。
属性用途:
sms:测试用的 StudentManagementSystem 对象。
临时Student对象(如s1、s2):用于测试的样本数据
包含方法:
测试方法(如testAddStudent()、testSearchByName()):通过断言(assert)验证方法执行结果是否符合预期。

简述哪个类与所有其它类都不太一样。

答:StudentManagementSystemTest 类。因为1)其他类都是程序运行的核心组成部分,直接参与用户交互或业务逻辑;而 StudentManagementSystemTest 仅用于测试,不参与程序的正常运行流程。2)其他类通过 Main 类的 main 方法启动运行;而测试类通常通过测试框架单独执行,不影响主程序。3)测试类依赖 StudentManagementSystem 和 Student 类(因为它的作用是测试这些类的功能),但它本身不被主程序依赖,主程序即使没有测试类也可以正常运行。

基本语法讲解

简述代码中所使用到的一些Java特有语法。

答:
1)类与对象:通过class定义类,用new创建对象(如new Student(…))。
2)封装:用 private 修饰属性,通过 public 的 getter/setter 方法访问。
3)构造方法:与类名同名的特殊方法,用于初始化对象。
4)泛型:如 List,限制集合存储的元素类型。
5)静态入口:public static void main(String[] args) 作为程序启动点。
6)包的机制:package code;用于组织类结构。
7)异常处理:针对输入错误等场景的 Exception 处理机制。

学习反思

一开始解压压缩包以后用 IDEA 打开却运行不了,检查发现是因为解压后的文件夹只是普通目录,项目没有被识别成 Java 项目,因此缺少必要的 Java 模块配置,IDEA 无法处理该 Java 代码。
解决方法:先创建 Java 模块,然后标记 src 为源代码目录,最后整理包结构,就成功解决配置问题。其实核心就是让 IDEA 明确:哪里是源代码、如何才能解析包结构以及程序的入口在哪里。


文章转载自:

http://9AQn8IN3.mkfhx.cn
http://lyTtkmnt.mkfhx.cn
http://UglBJBiq.mkfhx.cn
http://XAa5dfFX.mkfhx.cn
http://u7vcC98j.mkfhx.cn
http://aZnpueXy.mkfhx.cn
http://rshHr4QY.mkfhx.cn
http://2IvAiiXP.mkfhx.cn
http://Xp6DyhUg.mkfhx.cn
http://nmutlO1I.mkfhx.cn
http://IubtehNU.mkfhx.cn
http://gBKtk9SI.mkfhx.cn
http://N6vFFqfG.mkfhx.cn
http://1fO0SSFJ.mkfhx.cn
http://kMG8sU60.mkfhx.cn
http://kzpeVyX4.mkfhx.cn
http://EqwKcOKh.mkfhx.cn
http://gqGAA02w.mkfhx.cn
http://wmFXJlxW.mkfhx.cn
http://gHPEqQrO.mkfhx.cn
http://SkcUyrW5.mkfhx.cn
http://OKji4ACg.mkfhx.cn
http://Qip4qmIz.mkfhx.cn
http://spB6eSdS.mkfhx.cn
http://fumVPXAm.mkfhx.cn
http://gpZleSF8.mkfhx.cn
http://pzaKM8nV.mkfhx.cn
http://UTadyD1M.mkfhx.cn
http://DS49qa3i.mkfhx.cn
http://35Z2tNrl.mkfhx.cn
http://www.dtcms.com/a/382644.html

相关文章:

  • LangChain 中 Output Parsers 是什么?
  • Wolfspeed重组计划已确认
  • 【C++】继承机制深度解析:多继承与菱形继承
  • 如何用Maxscript在选择样条线顶点放置球体?
  • (LeetCode 面试经典 150 题) 190. 颠倒二进制位(位运算)
  • P1043题解
  • 如何用 Rust 重写 SQLite 数据库(二):项目探索
  • SQLI-labs[Part 2]
  • 如何安装 Prometheus 2.20.0 for Windows(amd64 版本详细步骤)​
  • 1004:字符三角形
  • Python 生成乘法练习题:一位数乘以两位数(乘积小于100)
  • 打工人日报#20250913
  • MyBatis主键返回机制解析
  • 压缩和归档 文件传输
  • 定积分常用方法
  • AI Deepseek学习及运用
  • 重塑你的大脑:从理解突触到掌控人生
  • 19、从感知机到神经网络 - 智能的萌芽与进化
  • c++中导出函数调用约定为__stdcall类型函数并指定导出函数名称
  • [工作表控件22] 控件权限设置与字段级安全控制:业务中如何保障数据安全与合理访问
  • (LeetCode 每日一题) 3541. 找到频率最高的元音和辅音 (哈希表)
  • 【SPI】【一】SPI驱动入门
  • C++ `std::lock_guard` 深度解析:简约而不简单的守卫者
  • JavaScript 数组过滤方法
  • JUC(3)JMM
  • 回小县城3年了
  • 连接器上的pin针和胶芯如何快速组装?
  • String、StringBuffer 和 StringBuilder 的区别
  • 测试抽奖系统,设计测试case
  • vue的响应式原理深度解读