Java应用系统设计与实现--学生信息管理系统(附解决方案源码)

一、实验目的及要求

1.1实验目的

  1.         ·  掌握Java GUI编程技术,了解Swing框架的使用。
    1.         ·  掌握MySQL数据库的基本操作,了解如何在Java中连接和操作数据库。
      1.         ·  掌握用户权限管理的基本概念和实现方法。
        1.         ·  提升综合运用所学知识设计和实现一个完整应用系统的能力。

1.2实验要求

  1.         ·  设计并实现一个学生管理系统,包含学生信息的录入、修改、删除、查询和统计功能。
  2.         ·  实现用户权限管理,只有经过身份验证的用户才能进行操作。
  3.         ·  提供友好的人机界面,包括登录界面和功能菜单。
  4.         ·  使用MySQL数据库存储和管理学生信息。
  5.         ·  界面美观,操作简便。

二、系统设计

2.1系统总体设计

主要功能模块:

  • 用户登录与注册
  • 学生信息管理(录入、修改、删除、查询)
  • 信息统计
  • 用户权限管理

2.2 系统详细设计

2.2.1 数据库设计

使用MySQL数据库,包含两个主要表:

  • users 表:存储用户信息(用户ID、用户名、密码等)。
  • students 表:存储学生信息(学生ID、姓名、年龄、性别、班级等)。

    2.2.2 用户界面设计

    使用Java Swing框架,设计主要界面如下:

  • 1.登录界面
  • 包含用户名和密码输入框,登录按钮。

  • 2.主界面
  • 包含功能菜单(信息录入、信息修改、信息删除、信息查询、信息统计),显示学生信息的表格。

3.信息录入界面

包含学生信息输入框(姓名、年龄、性别、班级),提交按钮。

4.信息修改界面:

显示所有学生信息的表格,点击某一条记录弹出详细信息修改窗口

5.信息删除界面

显示所有学生信息的表格,选择并删除指定记录。

6.信息查询界面

包含查询输入框和按钮,显示查询结果的表格。

7.信息统计界面

显示学生人数统计信息。

2.2.3 控制器设计

控制器负责处理用户操作,并与模型进行交互,实现各项功能:

1.登录功能

验证用户身份。

如果如果输入的账号密码在数据库的user表中存在,就可以登录进去

反之

2.注册功能

添加用户

会将注册成功的用户直接添加到数据库的表格中

3.信息录入功能

获取用户输入并存储到数据库。

4.信息修改功能

获取用户选择的记录,弹出修改窗口,更新数据库。

5.信息删除功能

获取用户选择的记录,删除数据库中的记录。

6.信息查询功能

根据用户输入的关键词查询数据库,更新表格显示。

7.信息统计功能

查询数据库中的学生人数,并显示结果。

三、实验结果

·  实现了学生管理系统的主要功能,包括用户登录、学生信息录入、修改、删除、查询和统计。

·  界面美观友好,操作简便。

·  系统能够根据用户输入的关键词查询学生信息,并在表格中显示结果。

·  系统在操作过程中能够正确处理用户输入,并与数据库进行交互,确保数据的一致性和完整性。

四、总结分析

通过本次实验,掌握了Java GUI编程和MySQL数据库操作的基本技能,了解了如何将两者结合起来实现一个完整的应用系统。在实现过程中,遇到了一些问题,比如界面布局调整、事件处理等,通过查阅资料和调试,最终得以解决。整体来说,本次实验达到了预期的目的和要求,提高了综合运用所学知识解决实际问题的能力。

五、附录代码

Student类

public class Student {
    private int id;
    private String name;
    private int age;
    private String gender;
    private String studentClass;
    public Student(int id, String name, int age, String gender,String studentClass) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.studentClass=studentClass;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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 getStudentClass() {
        return studentClass;
    }

    public void setStudentClass(String studentClass) {
        this.studentClass = studentClass;
    }
}

Database类

public class Database {
    private Connection connection;

    public Connection getConnection() {
        return connection;
    }
    public List<Student> getAllStudents() {
        List<Student> students = new ArrayList<>();
        String query = "SELECT * FROM students";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                String gender = resultSet.getString("gender");
                String studentClass = resultSet.getString("class");
                students.add(new Student(id, name, age, gender, studentClass));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return students;
    }

    public int getStudentCount() {
        String query = "SELECT COUNT(*) AS count FROM students";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                return resultSet.getInt("count");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    // 连接数据库
    public Database() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/studentdb", "root", "a123");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 关闭数据库连接
    public void close() {
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 添加学生信息
    public void addStudent(Student student) {
        String query = "INSERT INTO students (id, name, age, gender, class) VALUES (?, ?, ?, ?, ?)";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setInt(1, student.getId());
            preparedStatement.setString(2, student.getName());
            preparedStatement.setInt(3, student.getAge());
            preparedStatement.setString(4, student.getGender());
            preparedStatement.setString(5, student.getStudentClass());
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 删除学生信息
    public void deleteStudent(int studentId) {
        String query = "DELETE FROM students WHERE id = ?";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setInt(1, studentId);
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 查询学生信息
    public Student getStudent(int id) {
        String query = "SELECT * FROM students WHERE id = ?";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setInt(1, id);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                String gender = resultSet.getString("gender");
                String studentClass = resultSet.getString("class");
                return new Student(id, name, age, gender, studentClass);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    // 修改学生信息
    public void updateStudent(Student student) {
        String query = "UPDATE students SET name = ?, age = ?, gender = ?, class = ? WHERE id = ?";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setString(1, student.getName());
            preparedStatement.setInt(2, student.getAge());
            preparedStatement.setString(3, student.getGender());
            preparedStatement.setString(4, student.getStudentClass());
            preparedStatement.setInt(5, student.getId());
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 用户登录
    public boolean authenticateUser(String username, String password) {
        String query = "SELECT * FROM users WHERE username = ? AND password = ?";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setString(1, username);
            preparedStatement.setString(2, password);
            ResultSet resultSet = preparedStatement.executeQuery();
            return resultSet.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
    //用户注册
    public boolean registerUser(String username, String password) {
        String query = "INSERT INTO users (username, password, role) VALUES (?, ?, 'admin')";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setString(1, username);
            preparedStatement.setString(2, password);
            int rowsInserted = preparedStatement.executeUpdate();
            return rowsInserted > 0;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

}

LoginGUI类:

public class LoginGUI extends JFrame {
    private JLabel usernameLabel, passwordLabel;
    private JTextField usernameField;
    private JPasswordField passwordField;
    private JButton loginButton;
    private Database db;
    private JButton registerButton;
    Font font = new Font("Serif", Font.BOLD, 20);
    public LoginGUI() {
        db = new Database();
        setTitle("学生管理系统 - 登录");
        setSize(600, 400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(null);

        int i=110,j=50;
        usernameLabel = new JLabel("用户名:");
        usernameLabel.setBounds(35+i, 30+j, 80, 25);
        add(usernameLabel);
        usernameLabel.setFont(font);

        usernameField = new JTextField(20);
        usernameField.setBounds(110+i, 30+j, 200, 25);
        add(usernameField);


        passwordLabel = new JLabel("密码:");
        passwordLabel.setBounds(55+i, 70+j, 80, 25);
        add(passwordLabel);
        passwordLabel.setFont(font);

        passwordField = new JPasswordField(20);
        passwordField.setBounds(110+i, 70+j, 200, 25);
        add(passwordField);


        loginButton = new JButton("Login");
        loginButton.setBounds(130+i, 110+j, 150, 30);
        add(loginButton);
        loginButton.setFont(font);

        loginButton.setBackground(new Color(110, 150, 250));
        loginButton.setForeground(Color.WHITE);
        loginButton.setBorder(null);


        registerButton = new JButton("注册");
        registerButton.setBounds(130+i, 150+j, 150, 30);
        add(registerButton);
        registerButton.setFont(font);
        registerButton.setBorder(null);

        ImageIcon image = new ImageIcon("image/m_Loginimage.jpg");
        // 创建一个标签来展示图片
        JLabel label = new JLabel(image);
        // 将标签的布局设置为null,这样我们可以手动设置图片的位置
        label.setLayout(null);
        // 设置标签的大小,使其覆盖整个窗口
        label.setBounds(0, 0, 600, 400);

        // 将标签添加到窗口的内容面板中
        this.getContentPane().add(label);

        // 设置窗口的其他属性,如大小、位置等
        this.setSize(image.getIconWidth(), image.getIconHeight());
        this.setVisible(true);

        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String username = usernameField.getText();
                String password = new String(passwordField.getPassword());
                if (db.authenticateUser(username, password)) {
                    new MainGUI();
                    dispose();
                } else {
                    JOptionPane.showMessageDialog(null, "用户名或密码错误");
                }
            }
        });

        registerButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new RegisterDialog(LoginGUI.this);
            }
        });

        setVisible(true);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        new LoginGUI();
    }
}

RegisterDialog类:

public class RegisterDialog extends JDialog {
    private JTextField usernameField;
    private JPasswordField passwordField;
    private JButton registerButton;
    private Database db;

    public RegisterDialog(JFrame parent) {
        super(parent, "注册", true);
        db = new Database();
        setSize(300, 200);
        setLocationRelativeTo(parent);
        setLayout(null);

        JLabel usernameLabel = new JLabel("用户名:");
        usernameLabel.setBounds(30, 30, 80, 25);
        add(usernameLabel);

        usernameField = new JTextField(20);
        usernameField.setBounds(110, 30, 150, 25);
        add(usernameField);

        JLabel passwordLabel = new JLabel("密码:");
        passwordLabel.setBounds(30, 70, 80, 25);
        add(passwordLabel);

        passwordField = new JPasswordField(20);
        passwordField.setBounds(110, 70, 150, 25);
        add(passwordField);

        registerButton = new JButton("注册");
        registerButton.setBounds(110, 110, 80, 25);
        add(registerButton);

        registerButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String username = usernameField.getText();
                String password = new String(passwordField.getPassword());
                if (username.isEmpty() || password.isEmpty()) {
                    JOptionPane.showMessageDialog(RegisterDialog.this, "请输入用户名和密码");
                } else {
                    boolean success = db.registerUser(username, password);
                    if (success) {
                        JOptionPane.showMessageDialog(RegisterDialog.this, "注册成功");
                        dispose();
                    } else {
                        JOptionPane.showMessageDialog(RegisterDialog.this, "注册失败,请重试");
                    }
                }
            }
        });

        setVisible(true);
    }
}

MainGUI类:

public class MainGUI extends JFrame {
    private JMenuBar menuBar;
    private JMenu fileMenu, editMenu;
    private JMenuItem addMenuItem, editMenuItem, deleteMenuItem, searchMenuItem, statsMenuItem, logoutMenuItem;
    private JTable table;
    private DefaultTableModel tableModel;
    private JScrollPane scrollPane;
    private Database db;

    private void loadStudentData(DefaultTableModel tableModel) {
        tableModel.setRowCount(0); // 清空表格数据
        List<Student> students = db.getAllStudents();
        for (Student student : students) {
            Object[] row = {student.getId(), student.getName(), student.getAge(), student.getGender(), student.getStudentClass()};
            tableModel.addRow(row);
        }
    }

    private void showEditStudentWindow(DefaultTableModel tableModel) {
        JFrame editFrame = new JFrame("修改学生信息");
        editFrame.setSize(600, 400);
        editFrame.setLocationRelativeTo(null);
        editFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel editPanel = new JPanel(new BorderLayout());
        JTable editTable = new JTable();
        editTable.setModel(tableModel);
        JScrollPane scrollPane = new JScrollPane(editTable);
        editPanel.add(scrollPane, BorderLayout.CENTER);

        JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JTextField searchField = new JTextField(15);
        JButton searchButton = new JButton("查询");
        searchButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String keyword = searchField.getText();
                if (!keyword.isEmpty()) {
                    List<Student> searchResult = searchStudents(keyword);
                    updateTable(tableModel, searchResult);
                } else {
                    loadStudentData(tableModel);
                }
            }
        });
        searchPanel.add(new JLabel("关键词:"));
        searchPanel.add(searchField);
        searchPanel.add(searchButton);
        editPanel.add(searchPanel, BorderLayout.SOUTH);

        editTable.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                int selectedRow = editTable.getSelectedRow();
                int studentId = (int) editTable.getValueAt(selectedRow, 0);
                Student student = db.getStudent(studentId);
                if (student != null) {
                    showEditStudentDetailWindow(student, tableModel);
                }
            }
        });

        editFrame.add(editPanel);
        editFrame.setVisible(true);
    }

六、创建数据库说明

JDK:17

数据库需要自己创建:

创建方法:点击右上角有一个数据库

点击+号新建

找到MySQL

点击驱动程序,然后在左边这一列找到mysql

点击右边这个版本,找到8.0以上的版本,然后会自动下载

然后再点击上面的数据源

密码自己设置,其他按照下面的来,然后点击确定

先点击刚刚创建的数据源,然后再点击查询控制台也就是下面那个QL的图标,打开默认控制台就行了

然后输入代码

CREATE DATABASE studentdb;
USE studentdb;

CREATE TABLE students ( 
id INT AUTO_INCREMENT PRIMARY KEY, 
name VARCHAR(100) NOT NULL, age INT NOT NULL,
gender VARCHAR(10) NOT NULL,
class VARCHAR(50) NOT NULL 
);

CREATE TABLE users ( 
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL UNIQUE, 
password VARCHAR(100) NOT NULL 
);

以下是数据创建(把之前的SQL代码删除在输入下面的)

INSERT INTO students (name, age, gender, class) VALUES
('Alice', 20, 'Female', 'Class 1'),
('Bob', 21, 'Male', 'Class 1'),
('Charlie', 22, 'Male', 'Class 2'),
('Diana', 20, 'Female', 'Class 2'),
('Eve', 23, 'Female', 'Class 3'),
('Frank', 21, 'Male', 'Class 3');

下面这个是账号和密码,需要写进数据库才能登录

INSERT INTO users (username, password) VALUES
('admin', 'admin123'),
('user1', 'password1');
比如账号是admin,密码是admin123

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QThread moveToThread的妙用

官方文档描述 总结就是移动到线程的对象不能有父对象&#xff0c;执行start即起一个线程&#xff0c;示例是将myObject移动到主线程中。QT中这种方式起一个线程是非常简单的。 示例描述以及代码 描述往Communicate线程中频繁添加任务&#xff0c;等任务结束的时候统计计算的结…

【python教程】数据分析——numpy、pandas、matplotlib

【python教程】数据分析——numpy、pandas、matplotlib 文章目录 什么是matplotlib安装matplotlib&#xff0c;画个折线 什么是matplotlib matplotlib:最流行的Python底层绘图库&#xff0c;主要做数据可视化图表,名字取材于MATLAB&#xff0c;模仿MATLAB构建 安装matplotlib&…

Node 中基于 Koa 框架的 Web 服务搭建实战

前言 在《Node之Web服务 - 掘金 (juejin.cn)》一文中,我们使用 HTTP 模块构建了后端接口,从而实现了后端服务的开发。可以对此进行进一步优化 http模块代码回顾 const http require("http");const server http.createServer((req, res) > {if (reqUrl.pathna…

【面试八股文】java基础知识

引言 本文是java面试时的一些常见知识点总结归纳和一些拓展&#xff0c;笔者在学习这些内容时&#xff0c;特地整理记录下来&#xff0c;以供大家学习共勉。 一、数据类型 1.1 为什么要设计封装类&#xff0c;Integer和int区别是什么&#xff1f; 使用封装类的目的 对象化:…

阶段三:项目开发---搭建项目前后端系统基础架构:任务13:实现基本的登录功能

任务描述 任务名称&#xff1a; 实现基本的登录功能 知识点&#xff1a; 了解前端Vue项目的基本执行过程 重 点&#xff1a; 构建项目的基本登陆功能 内 容&#xff1a; 通过实现项目的基本登录功能&#xff0c;来了解前端Vue项目的基本执行过程&#xff0c;并完成基…

前端面试题17(js快速检索方法详解)

在前端JavaScript中&#xff0c;快速检索数据通常涉及到数组或对象的搜索。这里我会介绍几种常见的快速检索方法&#xff0c;并提供相应的代码示例。 1. 数组的find和findIndex方法 find: 返回数组中满足条件的第一个元素的值。findIndex: 返回数组中满足条件的第一个元素的索…

基于LSTM的股票价格预测

摘要 本课设旨在利用LSTM&#xff08;长短期记忆&#xff09;网络实现股票价格预测&#xff0c;通过收集、预处理股票数据集&#xff0c;并构建预测模型进行训练与优化。实验结果显示&#xff0c;经过优化调整模型参数&#xff0c;模型在测试集上取得了较为理想的预测效果。尽…

《征服数据结构》SparseArray

摘要&#xff1a; 1&#xff0c;SparseArray的介绍 2&#xff0c;SparseArray的代码实现 1&#xff0c;SparseArray的介绍 前面我们讲过《ArrayMap》&#xff0c;用它来实现哈希表&#xff0c;其中存放key和value的数组长度是存放散列表数组长度的二倍。 在哈希表中如果key值是…

SwiftData 模型对象的多个实例在 SwiftUI 中不能及时同步的解决

概览 我们已经知道,用 CoreData 在背后默默支持的 SwiftUI 视图在使用 @FetchRequest 来查询托管对象集合时,若查询结果中的托管对象在别处被改变将不会在 FetchedResults 中得到及时的刷新。 那么这一“囧境”在 SwiftData 里是否也会“卷土重来”呢?空说无益,就让我们在…

【项目设计】负载均衡式——Online Judge

负载均衡式——Online Judge&#x1f60e; 前言&#x1f64c;Online Judge 项目一、项目介绍二、项目技术栈三、项目使用环境四、项目宏观框架五、项目后端服务实现过程1、comm模块设计1.1 Log.hpp实现1.2 Util.hpp实现 2、compiler_server 模块设计2.1compile.hpp文件代码编写…

vb.netcad二开自学笔记2:认识vs编辑器

认识一下宇宙第一编辑器的界面图标含义还是很重要的&#xff0c;否则都不知道面对的是什么还怎么继续&#xff1f; 一、VS编辑器中常见的图标的含义 变量 长方体&#xff1a;变量 局部变量 两个矩形块&#xff1a;枚举 预定义的枚举 紫色立方体&#xff1a;方法 橙色树状结构…

通过AIS实现船舶追踪与照射

前些天突然接到个紧急的项目&#xff1a;某处需要实现对夜航船只进行追踪并用激光灯照射以保障夜航安全。这个项目紧急到什么程度呢&#xff1f;&#xff01;现场激光灯都安装好了&#xff0c;还有三个星期就要验收了&#xff0c;但上家没搞定就甩给我们了:( 从技术上看&#…

Java -- 实现MD5加密/加盐

目录 1. 加密的引出2. MD5介绍3. 解决MD5不可解密方法4. 实现加密解密4.1 加密4.2 验证密码 1. 加密的引出 在MySQL数据库中&#xff0c;一般都需要把密码、身份证、电话号码等信息进行加密&#xff0c;以确保数据的安全性。如果使用明文来存储&#xff0c;当数据库被入侵的时…

力扣考研经典题 反转链表

核心思想 头插法&#xff1a; 不断的将cur指针所指向的节点放到头节点之前&#xff0c;然后头节点指向cur节点&#xff0c;因为最后返回的是head.next 。 解题思路 1.如果头节点是空的&#xff0c;或者是只有一个节点&#xff0c;只需要返回head节点即可。 if (head null …

Vatee万腾平台:创新科技,驱动未来

在科技日新月异的今天&#xff0c;每一个创新的火花都可能成为推动社会进步的重要力量。Vatee万腾平台&#xff0c;作为科技创新领域的佼佼者&#xff0c;正以其卓越的技术实力、前瞻性的战略眼光和不懈的探索精神&#xff0c;驱动着未来的车轮滚滚向前。 Vatee万腾平台深知&am…

公有链、私有链与联盟链:区块链技术的多元化应用与比较

引言 区块链技术自2008年比特币白皮书发布以来&#xff0c;迅速发展成为一项具有颠覆性潜力的技术。区块链通过去中心化、不可篡改和透明的方式&#xff0c;提供了一种全新的数据存储和管理方式。起初&#xff0c;区块链主要应用于加密货币&#xff0c;如比特币和以太坊。然而&…

RUST 编程语言 绘制随机颜色图片 画圆形 画矩形 画直线

什么是Rust Rust是一种系统编程语言&#xff0c;旨在提供高性能和安全性。它是由Mozilla和其开发社区创建的开源语言&#xff0c;设计目标是在C的应用场景中提供一种现代、可靠和高效的选择。Rust的目标是成为一种通用编程语言&#xff0c;能够处理各种计算任务&#xff0c;包…

STM32-OC输出比较和PWM

本内容基于江协科技STM32视频内容&#xff0c;整理而得。 文章目录 1. OC输出比较和PWM1.1 OC输出比较1.2 PWM&#xff08;脉冲宽度调制&#xff09;1.3 输出比较通道&#xff08;高级&#xff09;1.4 输出比较通道&#xff08;通用&#xff09;1.5 输出比较模式1.6 PWM基本结…

数据库系统原理 | 查询作业2

整理自博主本科《数据库系统原理》专业课自己完成的实验课查询作业&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方&#xff0c;欢迎各位斧正。 专业课本&#xff1a; ​ ​ ———— 本次实验使用到的图形化工具&#xff1a;Heidi…

ThreadPoolExecutor - 管理线程池的核心类

下面是使用给定的初始参数创建一个新的 ThreadPoolExecutor &#xff08;构造方法&#xff09;。 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,…