java课程设计GUI学生信息管理系统

news2024/10/6 19:56:42

目录

系统内容.. 3

用户界面模块... 4

数据存储模块... 4

信息管理模块... 4

管理模块.. 4

主要模块的算法描述... 4

–简要的语言描述... 4

运行及调试分析(测试数据及测试结果).. 5

课程设计总结... 7

参考文献(至少三个).. 8

附录  程序的源代码清单... 8

Bei.java 界面背景设置... 8

Mune.java 主菜单页面为各程序入口... 9

Search.java 实现搜索功能... 15

Student.java 实现学生数据类型和文件读写... 21

StudentChane.java 实现改变学生信息功能... 26

StudentDele.java 实现删除功能... 30

StudentForm.java  实现添加学生功能.. 37

StudentViewer.java 实现查看所有学生信息... 42

Test.java 实现测试各种功能.. 46

系统内容

题目五:学生信息管理系统设计

学生信息包括:学号,姓名,年龄,性别 等。试设计学生信息管理系统,使之能提供以下功能:

1、系统以菜单方式工作

2、学生信息录入功能--输入

3、学生信息浏览功能--输出

4、学生信息查询功能--算法

按学号查询

按姓名查询

5、学生信息的删除与修改(可选项)

模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)

 用户界面模块

  • 功能:负责与用户交互,展示菜单选项,接收用户输入等。
  • 入口参数:无
  • 出口参数:根据用户的选择,返回相应的结果或触发相应的功能。
  • 函数调用关系:根据用户输入调用相应的功能模块。

 数据存储模块

  • 功能:负责存储学生信息。
  • 入口参数:学生信息。
  • 出口参数:无
  • 函数调用关系:被其他模块调用以存储或检索数据。

 信息管理模块

  • 功能:提供信息的录入、浏览和查询功能。
  • 入口参数:信息、查询条件(学分/课程性质)。
  • 出口参数:课程信息列表或查询结果。
  • 函数调用关系:被用户界面模块调用,根据用户选择执行相应的功能。

 管理模块

  • 功能:提供学生查询功能。
  • 入口参数:学生信息、ID。
  • 出口参数:查询结果(成功/失败)。
  • 函数调用关系:被用户界面模块调用,根据用户选择执行相应的功能

主要模块的算法描述

–简要的语言描述

信息管理模块

录入信息

初始化数据存储模块中的课程信息表。

提示用户输入信息。

接收用户输入的信息。

将信息存储到数据存储模块中的信息表中。

浏览信息

从数据存储模块中的信息表中选择所有信息。

按照一定的格式(如表格)展示信息给用户。

查询信息

提示用户输入查询条件(学分/课程性质)。

根据查询条件从数据存储模块中的课程信息表中选择相应的课程信息。

将查询结果展示给用户。

学生管理模块

学生

提示用户输入学生姓名和ID。

检查输入的学生姓名和ID是否有效。

将学生姓名、学号存储到数据存储模块中。

提示用户成功或失败。

运行及调试分析(测试数据及测试结果)

 

 

 

课程设计总结

本次课程设计的主要目标是设计一个学生选修课程系统,以满足学生、教师和管理员等不同用户的需求。通过本次设计,我深入了解了系统设计和开发的整个过程,从需求分析、设计、实现到测试和部署,每个步骤都让我学到了很多知识。

在设计过程中,我遇到了一些困难和挑战。例如,在设计数据结构时,需要考虑如何合理地存储课程信息和学生选课信息,以及如何设计查询条件以满足按学分查询和按课程性质查询的需求。此外,我还需要考虑如何实现用户界面的友好性和易用性,以及如何保证系统的安全性和稳定性。

在未来的学习和工作中,我将继续应用所学的知识和技能,不断提高自己的能力。同时,我也将不断探索新的技术和方法,以更好地满足用户的需求和提高系统的性能。

《面向对语言程序设计》

《算法导论》是2013年机械工业出版社出版的图书,作者是(美)科曼(Cormen,T.H.)

《软件工程》是2013年机械工业出版社出版的图书 作    者 lan Sommervillez

附录  程序的源代码清单 

Bei.java 界面背景设置

package guiks;

import javax.swing.*;

import java.awt.*;

public class bei extends JPanel {

    private Image backIcon;

    public bei(Image backIcon){

        this.backIcon=backIcon;

    }

    public void paintComponent(Graphics g){

        super.paintComponent(g);

        //绘制背景

        g.drawImage(backIcon,0,0,this.getWidth(),this.getHeight(),null);

    }

}

   

Mune.java 主菜单页面为各程序入口

package guiks;

import javax.imageio.ImageIO;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.lang.reflect.Array;

import java.util.ArrayList;

public class Menu extends JFrame {

    public Menu() throws IOException {

        initializeUI();

        // 假设 students 是从文件或数据库中获取的现有学生信息数组

    }

    private void initializeUI() throws IOException {

        setTitle("学生信息管理");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setSize(700, 500);

        setLocationRelativeTo(null);

        BufferedImage img = ImageIO.read(new File("C:\\Users\\HP\\Desktop\\workcodej\\R.jpg"));

        bei panel = new bei(img);

        // 设置窗口图标

        this.setIconImage(img);

        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        // 添加学生信息按钮

        JButton addBtn = new JButton("添加学生信息");

        addBtn.addActionListener(e -> new StudentForm());

        // 搜索学生信息按钮

        JButton searchBtn = new JButton("搜索学生信息");

        searchBtn.addActionListener(e -> new Search());

        // 查看所有学生信息按钮

        JButton viewAllBtn = new JButton("查看学生信息");

        ArrayList<Student> students = Student.readArrayListFromFile("students.txt");

        viewAllBtn.addActionListener(e -> new StudentViewer(students));

        // 修改学生信息按钮

        JButton modifyBtn = new JButton("修改学生信息");

        modifyBtn.addActionListener(e -> new StudentChange());

        // 删除学生信息按钮

        JButton deleteBtn = new JButton("删除学生信息");

        deleteBtn.addActionListener(e -> new StudentDelete());

        // 设置按钮的字体样式

        Font font = new Font("微软雅黑", Font.PLAIN, 18);

        addBtn.setFont(font);

        searchBtn.setFont(font);

        viewAllBtn.setFont(font);

        modifyBtn.setFont(font);

        deleteBtn.setFont(font);

        // 设置按钮的边距

        addBtn.setMargin(new Insets(10, 10, 10, 10));

        searchBtn.setMargin(new Insets(10, 10, 10, 10));

        viewAllBtn.setMargin(new Insets(10, 10, 10, 10));

        modifyBtn.setMargin(new Insets(10, 10, 10, 10));

        deleteBtn.setMargin(new Insets(10, 10, 10, 10));

        // 添加按钮到面板上

        panel.add(Box.createHorizontalStrut(200)); // 添加20像素宽的水平空白

        panel.add(addBtn);

        panel.add(Box.createRigidArea(new Dimension(0, 10))); // 再次创建一个垂直方向上固定高度为10像素的间距

        panel.add(searchBtn);

        panel.add(Box.createRigidArea(new Dimension(0, 10))); // 再次创建一个垂直方向上固定高度为10像素的间距

        panel.add(viewAllBtn);

        panel.add(Box.createRigidArea(new Dimension(0, 10))); // 再次创建一个垂直方向上固定高度为10像素的间距

        panel.add(modifyBtn);

        panel.add(Box.createRigidArea(new Dimension(0, 10))); // 再次创建一个垂直方向上固定高度为10像素的间距

        panel.add(deleteBtn);

        panel.add(Box.createRigidArea(new Dimension(0, 150))); // 再次创建一个垂直方向上固定高度为10像素的间距

        this.add(panel);

        this.setVisible(true);

    }

    public static void main(String[] args) throws IOException {

        // 用进程launch方法启动菜单窗口创建菜单窗口

        Menu menu = new Menu();

       

           

    }

}

Search.java 实现搜索功能

package guiks;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.io.Serializable;

import java.lang.reflect.Array;

import java.util.ArrayList;

import java.util.List;

public class Search extends JFrame {

    private JTextField searchField;

    private JTextArea resultArea;

    private ArrayList<Student> students; // 使用List来动态管理学生数据

    public Search() {

        initializeUI();

        loadStudents();

    }

    private void initializeUI() {

        setTitle("学生搜索");

        setSize(400, 300);

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setLocationRelativeTo(null);

        JPanel panel = new JPanel(new BorderLayout(10, 10));

        searchField = new JTextField(20);

        JButton searchButton = new JButton("搜索");

        // 使用lambda表达式简化事件监听器

        searchButton.addActionListener((ActionEvent e) -> {

            String keyword = searchField.getText();

            ArrayList<Student> searchResult = searchStudents(keyword);

            displaySearchResult(searchResult);

        });

        resultArea = new JTextArea(10, 30);

        resultArea.setEditable(false);

        JScrollPane scrollPane = new JScrollPane(resultArea);

        panel.add(new JLabel("输入学生姓名:"), BorderLayout.NORTH);

        panel.add(searchField, BorderLayout.CENTER);

        panel.add(searchButton, BorderLayout.SOUTH);

        panel.add(scrollPane, BorderLayout.EAST);

        add(panel);

        setVisible(true);

    }

    private void loadStudents() {

        students = new ArrayList<>();

        try {

            ArrayList<Student> loadedStudents = Student.readArrayListFromFile("students.txt");

            if (loadedStudents != null) {

                for (Student student : loadedStudents) {

                    students.add(student);

                }

            }

        } catch (Exception e) {

            // 记录异常堆栈,有助于调试

            e.printStackTrace();

            JOptionPane.showMessageDialog(this, "加载学生信息时出错: " + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);

        }

    }

    private ArrayList<Student> searchStudents(String keyword) {

        ArrayList<Student> result = new ArrayList<>();

        for (Student student : students) {

            if (student.getName() != null && student.getName().contains(keyword)) {

                result.add(student);

            }

        }

        return result;

    }

    private void displaySearchResult(List<Student> result) {

        resultArea.setText(""); // 清空结果区域

        if (!result.isEmpty()) {

            for (Student student : result) {

                resultArea.append("ID: " + student.getId() + ", 姓名: " + student.getName() + ", 年龄: " + student.getAge() + "\n");

            }

        } else {

            resultArea.setText("未找到匹配的学生信息。");

        }

    }

    public static void main(String[] args) {

        // 使用SwingUtilities.invokeLater确保GUI创建和更新在事件调度线程上执行

        SwingUtilities.invokeLater(() -> new Search());

    }

}

Student.java 实现学生数据类型和文件读写

package guiks;

import java.io.*;

import java.util.ArrayList;

public class Student implements Serializable {

    private String name;

    private int age;

    private String id;

    // 构造函数

    public Student(String name, int age, String id) {

        this.name = name;

        this.age = age;

        this.id = id;

    }

    public Student() {

        // 空构造函数

    }

    // Getters Setters

    // ...

    String getName() {

        return name;

    }

    int getAge(){

        return age;

    }

    void setName(String name) {

        this.name = name;

    }

 

    void setAge(int age) {

        this.age = age;

    }

    String getId() {

        return id;

    }

    void setId(String id) {

        this.id = id;

    }

    public String toString() {

        return   name + " " + age + " " + id;

    }

    public static void writeArrayListToFile(ArrayList<Student> students, String fileName) {

        try (BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(fileName, false));

             ObjectOutputStream out = new ObjectOutputStream(bout)) {

          // 写入对象Student数组

            for (Student student : students) {

                out.writeObject(student);

            }

            System.out.println("学生对象数组已成功写入文件:" + fileName);

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    public static void writeObjectToFile(Student students, String fileName) {

        try (BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(fileName, true));

             ObjectOutputStream out = new ObjectOutputStream(bout)) {

            out.writeObject(students);

            System.out.println("学生对象已成功写入文件:" + fileName);

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    // 从文件中读取学生对象数组,使用缓冲流提高效率

    public static ArrayList<Student> readArrayListFromFile(String fileName) {

        try (BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName));

             ObjectInputStream in = new ObjectInputStream(bin)) {

             // 读取对象数组一行一行的读取,直到没有更多对象可读

            ArrayList<Student> students = new ArrayList<>();

            while (true) {

                try {

                    Student student = (Student) in.readObject();

                    students.add(student);

                } catch (EOFException e) {

                    break;

                }

            }

            System.out.println("学生对象数组已成功从文件:" + fileName + " 读取");

            return students;} catch (Exception e) {

            e.printStackTrace();

            return null;   }  // 读取失败返回 null  

    }

 

}

StudentChane.java 实现改变学生信息功能

package guiks;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.lang.reflect.Array;

import java.util.ArrayList;

public class StudentChange extends JFrame {

    private JTextField idField;

    private JTextField ageField;

    private JTextField nameField;

    private JButton addButton;

    public StudentChange() {

        initializeUI();

    }

    private void initializeUI() {

        // 创建文本字段和按钮

        idField = new JTextField(10);

        ageField = new JTextField(10);

        nameField = new JTextField(20);

        addButton = new JButton("改变学生信息");

        // 为按钮添加事件监听器

        addButton.addActionListener(new AddButtonListener());

        // 创建界面布局

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));

        panel.setBorder(BorderFactory.createTitledBorder("学生信息"));

        panel.add(new JLabel("ID:"));

        panel.add(idField);

        panel.add(new JLabel("Age:"));

        panel.add(ageField);

        panel.add(new JLabel("Name:"));

        panel.add(nameField);

        panel.add(addButton);

        // 添加面板到窗体

        add(panel);

        // 设置窗体属性

        setTitle("输入学生信息");

        setSize(700, 500); // 修改了大小以更好地展示组件

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setVisible(true);

    }

    private class AddButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            try {

                String id = idField.getText();

                int age = Integer.parseInt(ageField.getText());

                String name = nameField.getText();

                // 创建学生对象

                Student newStudent = new Student(name, age, id);

                ArrayList<Student> newStudentArray = new ArrayList<Student>();

                newStudentArray.add(newStudent);

                // 将新学生对象写入文件

                Student.writeArrayListToFile(newStudentArray, "students.txt");

                // 清空文本字段以便输入新数据

                idField.setText("");

                ageField.setText("");

                nameField.setText("");

            } catch (NumberFormatException nfe) {

                JOptionPane.showMessageDialog(StudentChange.this, "年龄必须是数字", "输入错误", JOptionPane.ERROR_MESSAGE);

            }

        }

    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> new StudentChange());

    }

}

StudentDele.java 实现删除功能

package guiks;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.Serializable;

import java.lang.reflect.Array;

import java.util.ArrayList;

public class StudentDelete extends JFrame {

    private JTextField idField;

    private JButton deleteButton;

    public StudentDelete() {

        initializeUI();

    }

    private void initializeUI() {

        // 设置窗体属性

        setTitle("删除学生信息");

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setSize(300, 150);

        setLocationRelativeTo(null); // 居中显示

        // 创建文本字段和按钮

        idField = new JTextField(10);

        deleteButton = new JButton("删除学生");

        // 创建界面布局

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));

        panel.setBorder(BorderFactory.createTitledBorder("学生ID"));

        panel.add(new JLabel("ID:"));

        panel.add(idField);

        panel.add(deleteButton);

        // 为按钮添加事件监听器

        deleteButton.addActionListener(new DeleteButtonListener());

        // 添加面板到窗体

        add(panel);

        // 使窗体可见

        setVisible(true);

    }

    private class DeleteButtonListener implements ActionListener {

        @Override

        public void actionPerformed(ActionEvent e) {

            try {

                String studentId = idField.getText();

                if (studentId.isEmpty()) {

                    JOptionPane.showMessageDialog(StudentDelete.this, "请输入学生ID", "输入错误", JOptionPane.ERROR_MESSAGE);

                    return;

                }

   

                ArrayList<Student> allStudents = Student.readArrayListFromFile("students.txt");

                if (allStudents == null) {

                    JOptionPane.showMessageDialog(StudentDelete.this, "无法读取学生信息", "错误", JOptionPane.ERROR_MESSAGE);

                    return;

                }

   

                Student studentToDelete = null;

                for (Student student : allStudents) {

                    if (student.getId().equals(studentId)) {

                        studentToDelete = student;

                        break;

                    }

                }

   

                if (studentToDelete == null) {

                    JOptionPane.showMessageDialog(StudentDelete.this, "未找到ID " + studentId + " 的学生信息,无法删除。", "删除失败", JOptionPane.ERROR_MESSAGE);

                } else {

                    // 从数组中移除该学生信息

                    ArrayList<Student> updatedStudents = new ArrayList<Student>(allStudents.size() - 1);

                    for (Student student : allStudents) {

                        if (!student.getId().equals(studentId)) {

                            updatedStudents.add(student);

                            System.out.println(student.getId());

                        }

                    }

   

                    // 写入更新后的学生信息数组到文件

                    Student.writeArrayListToFile(updatedStudents, "students.txt");

                    JOptionPane.showMessageDialog(StudentDelete.this, "学生信息删除成功!", "操作成功", JOptionPane.INFORMATION_MESSAGE);

                }

   

                resetFields(); // 清空文本字段

   

            } catch (Exception ex) {

                JOptionPane.showMessageDialog(StudentDelete.this, "删除操作时发生错误: " + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);

            }

        }

        private void resetFields() {

            idField.setText("");

            throw new UnsupportedOperationException("Unimplemented method 'resetFields'");

        }

    }

    public static void main(String[] args) {

       

        SwingUtilities.invokeLater(StudentDelete::new);

    }

}

StudentForm.java  实现添加学生功能

package guiks;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.ArrayList;

public class StudentForm extends JFrame {

    private JTextField idField;

    private JTextField ageField;

    private JTextField nameField;

    private JButton addButton;

    public StudentForm() {

        initializeUI();

    }

    private void initializeUI() {

        // 设置窗体属性

        setTitle("添加学生信息");

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setSize(700, 500);

        setLocationRelativeTo(null); // 居中显示

        // 创建文本字段和按钮

        idField = new JTextField(10);

        ageField = new JTextField(10);

        nameField = new JTextField(20);

        addButton = new JButton("添加学生");

        // 创建界面布局

        // 创建一个新的 JPanel 对象,采用左对齐的流式布局,并指定水平间距为 10,垂直间距为 10

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 15, 15));

        // 为面板设置标题边框,标题为"学生信息"

        panel.setBorder(BorderFactory.createTitledBorder("学生信息"));

        /**

         * 在面板中添加显示"ID:"文本的标签组件

         */

        panel.add(new JLabel("ID:"));

        panel.add(idField);

        panel.add(new JLabel("年龄:"));

        panel.add(ageField);

        panel.add(new JLabel("姓名:"));

        panel.add(nameField);

        panel.add(addButton);

        // 为按钮添加事件监听器

        addButton.addActionListener(new AddButtonListener());

        // 添加面板到窗体

        add(panel);

        // 使窗体可见

        setVisible(true);

    }

    private class AddButtonListener implements ActionListener {

        @Override

        public void actionPerformed(ActionEvent e) {

            try {

                String id = idField.getText();

                int age = Integer.parseInt(ageField.getText());

                String name = nameField.getText();

                // 创建学生对象

                Student student = new Student(id, age, name);

                // 将学生对象添加到数组中

                ArrayList<Student> students = new ArrayList<Student>();

                ArrayList<Student> t = new ArrayList<Student>();

                t = Student.readArrayListFromFile("students.txt");

                students.addAll(t);

                students.add(student);

                Student.writeArrayListToFile(students,"students.txt");

               

               

                // 清空文本字段以便输入新数据

                idField.setText("");

                ageField.setText("");

                nameField.setText("");

                JOptionPane.showMessageDialog(StudentForm.this, "学生信息添加成功!", "操作成功", JOptionPane.INFORMATION_MESSAGE);

            } catch (NumberFormatException nfe) {

                JOptionPane.showMessageDialog(StudentForm.this, "请输入有效的年龄数字", "输入错误", JOptionPane.ERROR_MESSAGE);

            }

        }

    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> new StudentForm());

    }

}

StudentViewer.java 实现查看所有学生信息

package guiks;

import javax.swing.*;

import java.awt.*;

import java.io.Serializable;

import java.lang.reflect.Array;

import java.util.ArrayList;

public class StudentViewer extends JFrame {

    private JTextArea studentTextArea;

    public StudentViewer(ArrayList<Student> students) {

        this.students = students;

        initializeUI();

    }

    private void initializeUI() {

        // 设置窗体属性

        setTitle("查看学生信息");

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // 设置关闭方式

        setSize(600, 400);

        setLocationRelativeTo(null); // 居中显示

        // 创建文本区域,用于显示学生信息

        studentTextArea = new JTextArea(15, 50);

        studentTextArea.setEditable(false); // 设置文本区域不可编辑

        studentTextArea.setLineWrap(true); // 设置自动换行

        studentTextArea.setWrapStyleWord(true); // 设置单词换行

        // 添加滚动条

        JScrollPane scrollPane = new JScrollPane(studentTextArea);

        // 添加显示所有学生信息的按钮

        JButton viewButton = new JButton("查看全部学生信息");

        viewButton.addActionListener(e -> displayAllStudents());

        // 创建界面布局

        JPanel panel = new JPanel(new BorderLayout(10, 10));

        panel.add(viewButton, BorderLayout.NORTH);

        panel.add(scrollPane, BorderLayout.CENTER);

        // 添加面板到窗体

        add(panel);

        // 使窗体可见

        setVisible(true);

    }

    private void displayAllStudents() {

        studentTextArea.setText(""); // 清空文本区域

        for (Student student : students) {

            studentTextArea.append("ID: " + student.getId() + ", 姓名: " + student.getName() + ", 年龄: " + student.getAge() + "\n");

        }

    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> {

            try {

                ArrayList<Student> students = Student.readArrayListFromFile("students.txt");

                if (students == null) {

                    students = new ArrayList<>(); // 如果没有读取到学生信息,初始化为空数组

                }

                new StudentViewer(students);

            } catch (Exception e) {

                JOptionPane.showMessageDialog(null, "加载学生信息时出错: " + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);

            }

        });

    }

    public ArrayList<Student> students;

}

Test.java 实现测试各种功能

package guiks;

import java.util.ArrayList;

public class test {

    public static void main(String[] args) {

        ArrayList<Student> list = new ArrayList<Student>();

        ArrayList<Student> list2 = new ArrayList<Student>();

        Student s1 = new Student("John", 20,"001");

        Student s2 = new Student("Mary", 21,"002");

        list.add(s1);

        list.add(s2);

        Student.writeArrayListToFile(list, "students.txt");

        list2 = Student.readArrayListFromFile("students.txt");

        //打印list2

        for(Student s : list2){

            System.out.println(s.getName() + " " + s.getAge() + " " + s.getId());

        }

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分类判决界面---位势函数法

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在AI学习笔记&#…

SD卡无法读取的解决之道与预防措施

一、SD卡无法读取的现象描述 在数字化时代&#xff0c;SD卡已成为我们生活中不可或缺的数据存储设备&#xff0c;它广泛应用于数码相机、手机、平板等设备中。然而&#xff0c;当我们试图读取SD卡时&#xff0c;有时会遇到无法识别或无法访问的情况&#xff0c;这就是我们所说…

基于matlab的不同边缘检测算子的边缘检测

1 原理 1.1 边缘检测概述 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;其目的在于标识数字图像中亮度变化明显的点。这些变化通常反映了图像属性的重要事件和变化&#xff0c;如深度不连续、表面方向不连续、物质属性变化和场景照明变化等。边缘检测在特征提取中…

36.Http协议的设计与解析

Http协议比Redis协议复杂的多,如果程序员自己去实现,工作量大。 Netty已经把Http协议的编解码器实现好了,只需要简单的配置就可以使用。 做一个http的服务端需要HttpServerCodec。 看它继承的父类: 结合了两个类: HttpRequestDecoder(入站处理器extends Channelnbound…

微信小程序反编译 2024 unveilr.exe

ps&#xff1a;一开始用的反编译工具是wxappUnpacker&#xff0c;后面改为 unveilr.exe 1.先找到小程序安装目录“E:\聊天记录\WeChat Files\Applet”&#xff0c;要反编译小程序的包 文件夹下的名字对应的是小程序ID&#xff0c;如果不确定是哪个&#xff0c;可以删除->打…

使用SpringBootTest测试项目

当我们开发项目后&#xff0c;通常需要进行单元测试&#xff0c;确保开发符合预期。但是对于Springboot项目&#xff0c;依赖部分IOC容器对象的注入。比如代码中存在Autowired、Service、Mapper等。 1、确保pom.xml中包含了依赖&#xff0c;其中的version和scope&#xff0c;大…

流程控制相关

1.break语句 只能用在循环体内&#xff0c;用来结束当前循环 语法&#xff1a; while 循环条件表达式&#xff1a; 语句块 if 条件表达式&#xff1a; break 语句块 for i in 迭代对象&#xff1a; 语句块 if 条件表达式&#xff1a; break 语句块 小练&#xff1a; 求一…

52、U-boot2023的移植教程

uboot&#xff1a;https://ftp.denx.de/pub/u-boot/ nxp-uboot&#xff1a;https://github.com/nxp-imx/uboot-imx 1、顶层Makefile 文件加入编译的两种方式&#xff1a;以xxx/xxx.c文件为例 1、使用menuconfig: 先编辑.c所在目录下的Kconfig&#xff0…

element-plus form表单组件之el-date-picker日期选择器组件

el-date-picker日期选择器组件可根据年&#xff0c;月&#xff0c;日期&#xff0c;时间范围来进行选择&#xff0c;可以自定义日期格式&#xff0c;和样式&#xff0c;还提供多种内置事件。 主要属性如下 属性名说明类型可选值默认值model-value / v-model绑定值&#xff0c…

江协科技51单片机学习- p11 Proteus安装模拟51单片机

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; Proteus快速入门&…

想更好应对突发网络与业务问题?您需要一款“全流量”

全流量分析&#xff0c;能为我做什么&#xff1f; 在生活中遇到问题&#xff0c;我们的第一反应可能是拿出手机拍照记录&#xff0c;方便后续处理。这些问题是临时的、突发的。 流量分析&#xff0c;就是网络中的“手机”&#xff0c;针对突发的网络故障和安全事件&#xff0…

骑砍战团mod制作所需工具

骑砍战团mod制作所需工具 多去骑砍中文站&#xff0c;最底下mod制作专区那边就可以找到大部分资源 文章目录 骑砍战团mod制作所需工具编译环境骑砍源码模型工具模型素材位置骑砍mod学习位置 编译环境 python2.7下载 根据界面安装完成之后&#xff0c;然后配置系统环境&#x…

【Python机器学习】NMF——将NMF应用于人脸图像

将NMF应用于之前用过的Wild数据集中的Labeled Faces。NMF的主要参数是我们想要提取的分量个数。通常来说&#xff0c;这个数字要小于输入特征的个数&#xff08;否则的话&#xff0c;将每个像素作为单独的分量就可以对数据进行解释&#xff09;。 首先&#xff0c;观察分类个数…

pandas处理天气数据

题目分析 一、题目要求 使用Pandas读取数据&#xff1b;现有的“date”列没有包含星期信息&#xff0c;需要根据其额外生成一列“week”&#xff0c;表示星 期&#xff0c;例如“星期一”&#xff1b;将温度处理成整型&#xff0c;例如将5℃处理成5&#xff0c;注意&#xff…

DAY11-力扣刷题

1.最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; class Solution {p…

链接脚本文件入门介绍

本文框架 1. Why<为什么需要链接文件>2.What<是什么及组成>2.1 MEMORY介绍2.2 SECTIONS介绍 3.How<链接文件应用>3.1 定义特定字段3.2 将变量定义在指定段3.3 将变量定义在不同的段3.4 将变量定义在指定地址3.5 将函数定义在指定段3.6 将函数定义在指定地址 …

在 iPhone 上恢复已删除联系人的 5 种简便方法

想象一下&#xff1a;您正在 iPhone 上滚动并搜索要拨打的联系人&#xff0c;但却找不到任何结果。然后您想起昨晚您试图删除一个名字相似的联系人&#xff0c;但不知何故删除了错误的联系人。或者您的孩子错误地删除了一些联系人。这些情况足以让您感到迷茫。但别担心&#xf…

TI毫米波雷达可以用串口调试助理来获取原始数据吗?

摘要&#xff1a;本文介绍一下如何使用普通的串口调试助理来读取到AWR1843毫米波雷达的数据的。 使用的硬件如下图所示。 软件就是普通的串口助理&#xff0c;我用的是SSCOM&#xff0c;其他串口助理也是可以的&#xff0c;核心作用其实就是发送一行行的指令而已。 操作方法&am…

如何识别商业电子邮件诈骗

复制此链接到微信打开阅读全部已发布文章 不要关闭它标签&#xff01;我知道很少有词组比商业、电子邮件和妥协更无趣。 但这不是一篇无聊的文章&#xff1a;这是一篇关于电子邮件骗子的文章&#xff0c;根据联邦调查局的说法&#xff0c;他们每年通过诈骗人们赚取 260 亿美元…

EtherCAT数据包抓取(wireshark)

目录 1、twincat配置 2、选择正确的网卡 3、过滤条件示例 (1) 过滤逻辑读的数据帧 (2) 过滤邮箱等配置数据 (3) 抓取读EtherCAT状态的数据帧 1、twincat配置 勾选 Device2->Adapter->Promiscuous Mode&#xff0c;重新激活配置。 2、选择正确的网卡 3、过滤条件示…