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

目录

系统内容.. 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.mzph.cn/pingmian/34131.shtml

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

相关文章

大林 PID 算法

Dahlin PID算法是一种用于控制和调节系统的比例积分延迟算法。以下是一个简单的C语言实现示例&#xff1a; #include <stdio.h>// DALIN PID 结构体定义 typedef struct {float SetPoint; // 设定点float Proportion; // 比例float Integral; // 积分float Derivativ…

vite:配置打包后js的文件名,解决更新后浏览器缓存问题(了解浏览器的强缓存与协商缓存)

目录 第一章 简单理解浏览器的缓存机制 1.1 什么是缓存 1.2 强缓存 1.3 协商缓存 第二章 配置输出js文件名 2.1 原因 2.2 配置代码 第一章 简单理解浏览器的缓存机制 1.1 什么是缓存 当我们第一次访问网站的时候&#xff0c;我们的电脑会把网站上的图片和数据下载到电…

如何优雅地使用 console.log 打印数组或对象

一、背景 使用 console.log 在控制台中打印数组或者对象时&#xff0c;很多时候它们的字段都是默认关闭的&#xff0c;需要手动一个个的点开&#xff0c;非常不直观且麻烦。 二、解决方案 使用 JSON.stringify() 的第三个参数 我们来看一下官方对于 JSON.stringify 的介绍 三、…

Gitee 的公钥删不掉

公钥管理里已经没有公钥了&#xff0c; 仓库里还有&#xff0c;这是怎么回事&#xff1f; 这两个好像又没什么关系。 那为啥要搞两处呢&#xff1f; 个人信息里的公钥一直就没有仓库里使用的公钥&#xff0c; 删掉个人信息里的也没什么影响。 在仓库管理页面导入新公钥提示已…

AI 大模型企业应用实战(06)-初识LangChain

LLM大模型与AI应用的粘合剂。 1 langchain是什么以及发展过程 LangChain是一个开源框架&#xff0c;旨在简化使用大型语言模型构建端到端应用程序的过程&#xff0c;也是ReAct(reasonact)论文的落地实现。 2022年10月25日开源 54K star 种子轮一周1000万美金&#xff0c;A轮2…

解决vscode运行js时突然报错

1. 问题背景 创建JavaScript文件运行&#xff0c;弹出错误&#xff1a;Can’t find Node.js binary “node”: path does not exist. Make sure Node.js is installed and in your PATH, or set the “runtimeExecutable” in your launch.json 这是由于没有配置好setting.js…

C语言入门系列:从内存原理看函数的值传递和引用传递

文章目录 一&#xff0c;值传递二&#xff0c;引用传递三&#xff0c;从内存原理看值传递和引用传递的区别1 值传递内存示意图2 引用传递内存示意图 参考文献 函数参数用于向函数传递数据&#xff0c;C语言支持两种传递方式&#xff1a;值传递和引用传递。 一&#xff0c;值传递…

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库&#xff0c;以加强Java应用程序处理和渲染CAD图纸&#xff0c;而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose AP…

Synchronized、volatile与ReentrantLock:比较这些同步机制在Java并发编程中的应用和区别

在Java并发编程中&#xff0c;确保多个线程安全地访问共享资源是至关重要的。为实现这一目标&#xff0c;Java提供了多种同步机制&#xff0c;其中synchronized、volatile和ReentrantLock是最常用的几种。下面&#xff0c;我们将从技术难点、面试官关注点、回答吸引力以及代码举…

如何用家政服务小程序源码系统 快速搭建家政自己接单的软件?

随着移动互联网的快速发展&#xff0c;线上预约服务已成为家政行业的新趋势。然而&#xff0c;许多家政企业面临着信息不透明、服务质量参差不齐、管理效率低下等问题。家政服务小程序系统&#xff0c;可以帮助商家快速搭建自己的接单软件&#xff0c;提升服务效率&#xff0c;…

嵌入式学习——Linux操作系统——文件编程练习

1.使用fread和fwrite方式完成任意普通文件的拷贝功能。 模拟 文件下载 #include <stdio.h>void do_copy(FILE *fp_s,FILE *fp_d) {char buf[100] {0};int ret;while (ret fread(buf,sizeof(char),sizeof(buf),fp_s))fwrite(buf,sizeof(char),ret,fp_d); }//./a.out sr…

开源网安参编的《代码大模型安全风险防范能力要求及评估方法》发布

​代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时&#xff0c;也带来了对安全风险防范能力的挑战。基于此&#xff0c;中国信通院依托中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;联合开源…

深圳比创达|EMC电磁兼容性行业:电子设备质量的“守门员”

随着科技的不断进步和电子产品的普及&#xff0c;电磁兼容性&#xff08;EMC&#xff09;问题愈发受到行业内外的高度关注。EMC作为衡量电子设备在电磁环境中能否正常工作的重要指标&#xff0c;对于保障设备稳定运行、减少电磁干扰、提升产品质量具有重要意义。 一、EMC电磁兼…

水产养殖监测系统解决方案有哪几部分

随着科技的不断进步&#xff0c;水产养殖行业也迎来了智能化、信息化的新时代。在这一背景下&#xff0c;水产养殖监测系统解决方案应运而生&#xff0c;为养殖企业提供了科学、高效的管理工具。 一、系统概述 水产养殖监测系统是通过现代传感技术、数据分析技术以及互联网通信…

微信小程序(跳转)

在微信小程序中&#xff0c;常用的跳转方式包括以下几种 1.页面跳转 可以使用wx.navigateTo、wx.redirectTo和wx.reLaunch方法实现页面的跳转。 wx.navigateTo&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面。wx.redirectTo&#xff1a;关闭当前页面&#xff…

【每日一题】503. 下一个更大元素 II

思路&#xff08;c&#xff09; 使用单调栈的解法&#xff0c;单调栈里面存的是大于当前元素的index&#xff0c;不是直接存值。但是这个题目是一个循环数组&#xff0c;可以在后面补一段前面的内容&#xff0c;这样就可以正常遍历。将每个位置对应的结果存在map中 后面循环…

mysql的语句查询顺序、耗时分析以及查询调优技巧

在MySQL中&#xff0c;SQL查询语句的执行顺序、耗时分析以及查询调优是优化数据库性能的重要方面。以下是关于这些方面的详细解释。 1. SQL查询语句的执行顺序 虽然我们编写SQL语句的顺序通常是 SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -…

前后端分离后灰度发布实现方式

1、什么是灰度发布 灰度发布, 也叫金丝雀发布。是指在黑与白之间&#xff0c;能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式&#xff0c;让一部分用户继续用A&#xff0c;一部分用户开始用B&#xff0c;如果用户对B没有什么反对意见&#xff0c;那么逐步扩大范围&…

MySQL 教程

MySQL 教程 目录 简介安装 MySQL WindowsmacOSLinux 连接 MySQL 命令行客户端图形化工具 基础操作 创建数据库删除数据库选择数据库 表的操作 创建表删除表插入数据查询数据更新数据删除数据 高级操作 索引视图存储过程触发器 用户管理 创建用户授权删除用户 备份与恢复 备份…

Vatee万腾平台:技术引领,智能先行

在科技日新月异的今天&#xff0c;智能技术正以前所未有的速度改变着我们的世界。在众多科技平台中&#xff0c;Vatee万腾平台凭借其卓越的技术实力和前瞻性的战略眼光&#xff0c;成为了智能技术领域的佼佼者。它始终坚持“技术引领&#xff0c;智能先行”的理念&#xff0c;推…