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());
}
}
}
相关文章:

java课程设计GUI学生信息管理系统
目录 系统内容.. 3 用户界面模块... 4 数据存储模块... 4 信息管理模块... 4 管理模块.. 4 主要模块的算法描述... 4 –简要的语言描述... 4 运行及调试分析(测试数据及测试结果).. 5 课程设计总结... 7 参考文献(至少三个…...

一网通办怎么办?一网统管怎么管?
一网通办怎么办?一网统管怎么管? 下面资源来源于网络,如有侵权请联络删除! **一网通办与一网统管的建设背景、建设情况及建设意义** 一、建设背景随着信息技术的飞速发展,传统的政务服务方式已难以满足人民群众日益增长的需求。各部门信息系统独立运行,导致信息孤岛现象…...

Kubernetes Dashboard
Minikube 环境搭建 Kubernetes 的基本架构 Kubernetes 声明式语言 YAML YAML操作Kubernetes核心对象 CentOs搭建Kubernetes集群 Kubernetes进阶对象Deployment、DaemonSet、Service Kubernetes进阶对象Ingress、Ingress Class、Ingress Controller Kubernetes集群部署项目实践 …...

NSSCTF-Web题目15
目录 [HNCTF 2022 WEEK2]ez_SSTI 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]Ez_upload 1、题目 2、知识点 3、思路 [HNCTF 2022 WEEK2]ez_SSTI 1、题目 2、知识点 SSTI、Jinja2 参考链接:1. SSTI(模板注入)漏洞(…...

每天认识:轮询和中断
轮询(Polling)和中断(Interrupt)是两种不同的事件处理机制,通常用于操作系统、硬件设备或软件程序中,以响应外部事件或内部状态变化。下面分别解释这两个概念: 轮询(Polling&#x…...

SpringBoot中使用MQTT实现消息的订阅和发布
SpringBoot中使用MQTT实现消息的订阅和发布 背景 java框架SpringBoot通过mQTT通信 控制物联网设备 还是直接上代码 第一步依赖: <!--mqtt相关依赖--><dependency><groupId>org.springframework.integration</groupId><artifactId>s…...

等保测评练习10
等级保护初级测评师试题10 姓名: 成绩: 判断题(10110分) 1.等级保护2.0三级系统测评合格最低分为60分() 70分且不能有高风险 2.当远程管理云计算平台中设备是…...

VBA学习(16):工作表事件示例:输入数据后锁定单元格
在工作表单元格中输入数据后,该单元格就被锁定,不能再编辑。 打开VBE,在工程资源管理器中双击该工作表名称打开其代码模块,在其中输入下面的代码: 假设整个工作表的LockedFalse Private Sub Worksheet_Change(ByVal …...

mysql学习——SQL中的DDL和DML
SQL中的DDL和DML DDL数据库操作:表操作 DML添加数据修改数据删除数据 学习黑马MySQL课程,记录笔记,用于复习。 DDL DDL:Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表&…...

什么是多态?一文彻底搞懂!
什么是多态 面向对象程序设计有三要素:封装、继承(或组合)、多态,前两者较好理解,多态总让人困惑,不知道具体有什么作用,更不知道为什么要用多态。今天就来详细分析下什么是多态,以…...

CST电磁仿真软件的参数类型和含义【电磁仿真入门教程】
如果你是一位工程师或设计师,那你对电磁仿真软件CST Studio Suite一定不会感到陌生。CST软件可以帮助你模拟电磁场和电路行为,从而优化产品设计。本文将带你了解CST电磁仿真软件的一些关键参数,并解释其含义。CST电磁仿真软件的参数是指在使用…...

华为HCIA综合实验(结合前几期所有内容)
第一章 实验目的 (1)配置Telnet,要求所有网络设备支持远程管理,密码为admin(2)配置Trunk,交换机之间的链路均为Trunk模式(3)配置VLAN,在SW2和SW3上创建相关…...

git 拉下来的项目,出现“加载失败”的解决方法
现象: 1、对加载失败的项目,尝试重新加载 解决思路:根据上面的提示,打开F盘对应的 .vcxproj文件,查看里面关于opencv454.props的内容 先删了,后面再补 2、当前的工作重点是消除加载失败的情况,…...

sql资料库
1、distinct(关键词distinct用于返回唯一不同的值):查询结果中去除重复行的关键字 select distinct(university) from user_profile select distinct university from user_profile distinct是紧跟在select后面的,不能在其他位置,不然就…...

【python入门】运算符
文章目录 算术运算符比较运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符优先级 算术运算符 # 加法 print(5 3) # 输出: 8# 减法 print(5 - 3) # 输出: 2# 乘法 print(4 * 3) # 输出: 12# 除法(结果为浮点数) print(8.0 / 3) # 输出: 2.6…...

【C++高阶】掌握AVL树:构建与维护平衡二叉搜索树的艺术
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:STL-> map与set 🌹🌹期待您的关注 🌹🌹 ❀AVL树 📒1. AVL树…...

机器学习-课程整理及初步介绍
简介: 机器学习是人工智能的一个分支,它使计算机系统能够从经验中学习并改进其在特定任务上的表现,而无需进行明确的编程。机器学习涉及多种算法和统计模型,它们可以从数据中学习规律,并做出预测或决策。机器学习的应用非常广泛&…...

北斗三号短报文通信终端 | 助力户外无网络场景作业
北斗三号短报文通信终端是一款专为户外无网络场景作业设计的先进通信工具,它依托于中国自主研发的北斗卫星导航系统,为用户在偏远地区或无网络覆盖区域提供了可靠的通信保障。以下是关于北斗三号短报文通信终端的详细介绍: 一、功能特点 北斗…...

RERCS系统开发实战案例-Part05 FPM Application的Feeder Class搜索组件的实施
1、通过事务码 SE24对Feeder Class实施 1)接口页签的简单说明: ① IF_FPM_GUIBB:通用UI构建块,整个UIBB模块的基础接口; ② IF_FPM_GUIBB_SEARCH:通用搜索UI构建块,搜索组件UIBB的基础接口&…...

算法常见手写代码
1.NMS def py_cpu_nms(dets, thresh):"""Pure Python NMS baseline."""#x1、y1、x2、y2、以及score赋值x1 dets[:, 0]y1 dets[:, 1]x2 dets[:, 2]y2 dets[:, 3]scores dets[:, 4]#每一个检测框的面积areas (x2 - x1 1) * (y2 - y1 1)#按…...

数据结构9——排序
一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较…...

分布式锁实现方案-基于Redis实现的分布式锁
目录 一、基于Lua看门狗实现 1.1 缓存实体 1.2 延迟队列存储实体 1.3 分布式锁RedisDistributedLockWithDog 1.4 看门狗线程续期 1.5 测试类 1.6 测试结果 1.7 总结 二、RedLock分布式锁 2.1 Redlock分布式锁简介 2.2 RedLock测试例子 2.3 RedLock 加锁核心源码分析…...

MTK7628+MT7612 加PA定频数据
1、硬件型号TR726A5G121-DPA PC9.02.0017。如下所示: 2、WIFI5.8 AC模式 42(5120MHz)信道,80带宽 3、WIFI5.8 AC模式 38(5190MHz)信道,40带宽 4、WIFI5.8 AC模式 36(5180 MHz&…...

[信号与系统]关于双线性变换
前言 本文还是前置知识 双线性变换法 双线性变换法(Bilinear Transform)是一种用于将模拟滤波器转换为数字滤波器的方法。它通过将模拟域中的s平面上的传递函数映射到数字域中的z平面上的传递函数来实现这一转换。双线性变换法保证了频率响应在转换过…...

763. 划分字母区间
题目:给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表…...

【PostgreSQL】AUTO_EXPLAIN - 慢速查询的日志执行计划
本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 一、介绍 在本文中,我们将了解 PostgreSQL AUTO_EXPLAIN功能的工作原理,以及为什么应该使用它来收集在生产系统…...

讯飞星火超自然语言合成的完整Demo
依赖文件和功能 requirements.txt 该文件列出了所需的依赖包。 data.py 定义了应用的配置信息,如APPId,APIKey,APISecret等。包含请求数据和请求URL。 main.py 主程序,设置了WebSocket连接,定义了处理消息的各个回调函…...

封装一个上拉加载的组件(无限滚动)
一、封装 1.这个是在vue3环境下的封装 2.整体思路: 2.1传入一个elRef,其实就是一个使用页面的ref。 2.2也可以不传elRef,则默认滚动的是window。 import { onMounted, onUnmounted, ref } from vue; import { throttle } from underscore;ex…...

WHAT - 高性能和内存安全的 Rust(二)
目录 1. 所有权(Ownership)2. 借用(Borrowing)不可变借用可变借用 3. 可变性(Mutability)4. 作用域(Scope)综合示例 了解 Rust 的所有权(ownership)、借用&am…...

办理河南建筑工程乙级设计资质的流程与要点
办理河南建筑工程乙级设计资质的流程与要点 办理河南建筑工程乙级设计资质的流程与要点主要包括以下几个方面: 流程: 工商注册与资质规划:确保企业具有独立法人资格,完成工商注册,并明确乙级设计资质的具体要求&…...