Java+Swing图书管理系统

news2024/11/24 10:45:21

Java+Swing图书管理系统

  • 一、系统介绍
  • 二、功能展示
    • 1.管理员登陆
    • 2.图书查询
    • 3.图书入库
    • 4.借书
    • 5.还书
    • 6.图书证管理
  • 三、系统实现
    • 1.BookManageMainFrame.java
  • 四、其它
    • 1.其他系统实现

一、系统介绍

该系统实现了用户端实现书籍查询,借书,还书功能。用户能够查询自己的借书记录。管理员能够上架图书,下架图书,添加图书类别,添加图书信息,修改图书信息,添加借书证信息、查询借书证信息、删除除借书证,查询图书借阅归还记录。

二、功能展示

1.管理员登陆

在这里插入图片描述

2.图书查询

在这里插入图片描述

3.图书入库

在这里插入图片描述

4.借书

在这里插入图片描述

5.还书

在这里插入图片描述

6.图书证管理

在这里插入图片描述

三、系统实现

1.BookManageMainFrame.java

package cn.book.view;

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

import cn.book.dao.AdminDao;
import cn.book.dao.BookDao;
import cn.book.dao.BorrowDao;
import cn.book.dao.CardDao;
import cn.book.model.Book;


public class BookManageMainFrame {
	String username = "";
	CardLayout layout = new CardLayout();;
	JFrame bamFrame;
	MainPanel mainPanel = new MainPanel();// 主面板
	JPanel upPanel = new JPanel();// 主面板中的---上面板
	JPanel downPanel = new JPanel();// 主面板中的---下面板	
	JPanel leftPanel = new JPanel();// 主面板中的---左面板
	JPanel rightPanel = new JPanel();// 主面板中的---右面板
	
	BookDao book = new BookDao();
	AdminDao admin = new AdminDao();
	CardDao card = new CardDao();
	BorrowDao borrow = new BorrowDao();
	
	SelectBookPanel selectBookPanel = new SelectBookPanel();
	LoginPanel loginPanel = new LoginPanel();
	final Object[] columnNames = {"书号", "类别", "书名","出版社","出版年份","作者","价格","总数量","馆存量"}; //列名最好用final修饰 
	Object[][] rowData = queryData("");
	DefaultTableModel model = new DefaultTableModel(rowData,columnNames);
	JTable dataTable = new JTable (model);
	
	AddBookPanel addBookPanel = new AddBookPanel();
	BorrowPanel borrowPanel = new BorrowPanel();
	ReturnPanel returnPanel = new ReturnPanel();
	CardPanel cardPanel = new CardPanel();
	
	public BookManageMainFrame(){
		dataTable.setPreferredScrollableViewportSize(new Dimension(900, 580));//设置表格的大小 
		dataTable.setRowHeight (30);//设置每行的高度为20 
		dataTable.setRowHeight (0, 30);//设置第1行的高度为15 
		dataTable.setSelectionBackground (Color.white);//设置所选择行的背景色 
		dataTable.setSelectionForeground (Color.blue);//设置所选择行的前景色 
		//dataTable.setGridColor (Color.black);//设置网格线的颜色 
		dataTable.selectAll ();//选择所有行 
		//dataTable.setRowSelectionInterval (0,2);//设置初始的选择行,这里是1到3行都处于选择状态 
		dataTable.clearSelection ();//取消选择 
		dataTable.setDragEnabled (false);//不懂这个 
		dataTable.setShowGrid (false);//是否显示网格线 
		dataTable.setShowHorizontalLines (false);//是否显示水平的网格线 
		dataTable.setShowVerticalLines (true);//是否显示垂直的网格线 
		//friends.setValueAt ("tt", 0, 0);//设置某个单元格的值,这个值是一个对象 
		dataTable.doLayout (); 
		dataTable.setBackground (Color.lightGray); 
        // 设置表格中的数据居中显示
        DefaultTableCellRenderer r=new DefaultTableCellRenderer();
        r.setHorizontalAlignment(JLabel.CENTER);
        dataTable.setDefaultRenderer(Object.class,r);
		//JScrollPane pane2 = new JScrollPane (example2); 	 
		
		selectBookPanel.add(new JScrollPane (dataTable), BorderLayout.SOUTH);
		// 定义布局
		BorderLayout mainLayout = new BorderLayout();
		// 左布局
		leftPanel.add(mainPanel);
		leftPanel.setBackground(Color.WHITE);// 左边背影色
		//右布局
		rightPanel.setLayout(layout);
		rightPanel.add("cardselectbook", selectBookPanel);// 图书查询
		rightPanel.add("cardaddbook", addBookPanel);// 图书入库
		rightPanel.add("cardlogin", loginPanel);// 登陆
		rightPanel.add("cardborrow", borrowPanel);// 借书
		rightPanel.add("cardreturn", returnPanel);// 还书
		rightPanel.add("cardcard", cardPanel);// 图书管理
		// 定义主窗体
		bamFrame = new JFrame("图书管理系统");
		bamFrame.getContentPane().setLayout(mainLayout);
		bamFrame.setSize(1050, 600);// 设定窗体大小
		// 给窗体加面板
		bamFrame.getContentPane().add(leftPanel, BorderLayout.WEST);
		bamFrame.getContentPane().add(rightPanel, BorderLayout.CENTER);
		addListeners();// 调用监听方法
		bamFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//bamFrame.pack();
		bamFrame.setVisible(true);
		//设置窗口居中
		bamFrame.setLocationRelativeTo(null);
	}
	// 窗体中部分对象监听方法
	private void addListeners() {
		// 在窗体的左容器上点查询按钮
		mainPanel.getSelectBookButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				layout.show(rightPanel, "cardselectbook");
			}

		});
		// 在窗体的左容器上点《图书入库》按钮
		mainPanel.getStockButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(username.equals("")) {
					layout.show(rightPanel, "cardlogin");
				}else {
					layout.show(rightPanel, "cardaddbook");
				}
				
			}

		});
		// 在窗体的左容器上点《借书》按钮
		mainPanel.getBorrowButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(username.equals("")) {
					layout.show(rightPanel, "cardlogin");
				}else {
					layout.show(rightPanel, "cardborrow");
				}				
			}

		});
		// 在窗体的左容器上点《还书》按钮
		mainPanel.getStillButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(username.equals("")) {
					layout.show(rightPanel, "cardlogin");
				}else {
					layout.show(rightPanel, "cardreturn");
				}					
			}

		});
		// 在窗体的左容器上点《图书证管理》按钮
		mainPanel.getCardButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(username.equals("")) {
					layout.show(rightPanel, "cardlogin");
				}else {
					layout.show(rightPanel, "cardcard");
				}				
			}

		});
		// 在窗体的左容器上点登陆按钮
		mainPanel.getLoginButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				layout.show(rightPanel, "cardlogin");
			}

		});
		// 在窗体的左容器上点《退出》按钮
		mainPanel.getExitButton().addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);//退出系统
				
			}
			
		});
		// 在窗体的左容器上点《图书查询》按钮
		selectBookPanel.getSelectButton().addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				String title = selectBookPanel.getTitleField().getText();
				System.out.print(title);
				Object[][] rowData2 = queryData(title);
				model.setDataVector(rowData2, columnNames);
				layout.show(rightPanel, "cardselectbook");
				
			}
			
		});
		//图书入库,点击提交按钮
		addBookPanel.getOkButton().addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				String bno = addBookPanel.getBnoField().getText();
				String category = addBookPanel.getCategoryField().getText();
				String title = addBookPanel.getTitleField().getText();
				String press = addBookPanel.getPressField().getText();
				String year = addBookPanel.getYearField().getText();
				String author = addBookPanel.getAuthorField().getText();
				String price = addBookPanel.getPriceField().getText();
				String total = addBookPanel.getTotalField().getText();
				String stock = addBookPanel.getStockField().getText();
				int i = book.AddBook(bno, category, title, press, year, author, price, total, stock);
				if(i>0) {
					JOptionPane.showMessageDialog(addBookPanel, "图书入库成功!");
					addBookPanel.getBnoField().setText("");	
					addBookPanel.getCategoryField().setText("");
					addBookPanel.getTitleField().setText("");
					addBookPanel.getPressField().setText("");
					addBookPanel.getYearField().setText("");
					addBookPanel.getAuthorField().setText("");
					addBookPanel.getPriceField().setText("");
					addBookPanel.getTotalField().setText("");
					addBookPanel.getStockField().setText("");
				}else {
					JOptionPane.showMessageDialog(addBookPanel, "图书入库失败!");
					addBookPanel.getBnoField().setText("");	
					addBookPanel.getCategoryField().setText("");
					addBookPanel.getTitleField().setText("");
					addBookPanel.getPressField().setText("");
					addBookPanel.getYearField().setText("");
					addBookPanel.getAuthorField().setText("");
					addBookPanel.getPriceField().setText("");
					addBookPanel.getTotalField().setText("");
					addBookPanel.getStockField().setText("");
				}
			}
			
		});
		//图书入库,点击返回按钮
		addBookPanel.getBackButton().addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				Object[][] rowData2 = queryData("");
				model.setDataVector(rowData2, columnNames);
				layout.show(rightPanel, "cardselectbook");
			}
			
		});
		// 点击《登陆》按钮
		loginPanel.getOkButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String aname = loginPanel.getAnameField().getText();
				String password = loginPanel.getPasswordField().getText();
				if(!aname.equals("")) {
					boolean isture = admin.login(aname, password);
					if(isture) {
						JOptionPane.showMessageDialog(loginPanel, "登陆成功!");
						layout.show(rightPanel, "cardselectbook");
						username=aname;
						loginPanel.getAnameField().setText("");
						loginPanel.getPasswordField().setText("");
					}else {
						JOptionPane.showMessageDialog(loginPanel, "用户名或密码错误!");
					}					
				}else {
					JOptionPane.showMessageDialog(loginPanel, "用户名不能为空!");
				}				
			}

		});
		// 点击《返回》按钮
		loginPanel.getBackButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				layout.show(rightPanel, "cardselectbook");
			}

		});
		//点击《借书查询》按钮
		borrowPanel.selectBorrowPanel.getSelectButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cno=borrowPanel.selectBorrowPanel.getCnoField().getText();
				borrowPanel.selectBorrow(cno);
			}

		});
		//点击《借书》按钮
		borrowPanel.selectBorrowPanel.getBorrowButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cno=borrowPanel.selectBorrowPanel.getCnoField().getText();
				String bno=borrowPanel.selectBorrowPanel.getBnoField().getText();
				if(cno.equals("")) {
					JOptionPane.showMessageDialog(borrowPanel, "借书证卡号不能为空!");
					return;
				}
				if(bno.equals("")) {
					JOptionPane.showMessageDialog(borrowPanel, "图书号不能为空!");
					return;
				}
				int isbook = book.isBook(bno);
				if(isbook==-1) {
					JOptionPane.showMessageDialog(borrowPanel, "图书号存在,请重新输入!");
					return;
				}else if(isbook==0) {
					String returndeadline = borrow.queryReturndeadline(bno);
					JOptionPane.showMessageDialog(borrowPanel, "图书库存不足,最早还书时间为:"+returndeadline);
					return;
				}
				boolean iscard = card.isCard(cno);
				if(!iscard) {
					JOptionPane.showMessageDialog(borrowPanel, "借书证卡号存在,请重新输入!");
					return;
				}
				int i = borrow.AddBorrow(cno, bno, username);
				if(i>0) {
					int j = book.updateBook(bno);
					if(j>0) {
						JOptionPane.showMessageDialog(loginPanel, "借书成功!");
						borrowPanel.selectBorrow(cno);
					}
				}
			}

		});
		//点击《还书查询》按钮
		returnPanel.selectReturnPanel.getSelectButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cno=returnPanel.selectReturnPanel.getCnoField().getText();
				returnPanel.selectReturn(cno);
			}

		});
		//点击《还书》按钮
		returnPanel.selectReturnPanel.getReturnButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int i = returnPanel.rdataTable.getSelectedRow();
				if(i>=0) {
					String cno = String.valueOf(returnPanel.rdataTable.getValueAt(i,0));
					String bno = String.valueOf(returnPanel.rdataTable.getValueAt(i,1));
					String borrowdate = String.valueOf(returnPanel.rdataTable.getValueAt(i,7));
					int j = borrow.updateBorrow(cno, bno, borrowdate);
					if(j>0) {
						int r = book.updateReturnBook(bno);
						if(r>0) {
							String cno1=returnPanel.selectReturnPanel.getCnoField().getText();
							returnPanel.selectReturn(cno1);
						}else {
							JOptionPane.showMessageDialog(returnPanel, "还书失败!");
						}
					}else {
						JOptionPane.showMessageDialog(returnPanel, "还书失败!");
					}
				}else {
					JOptionPane.showMessageDialog(returnPanel, "请选择要还的图书!");
				}
			}

		});
		//点击《图书证查询》按钮
		cardPanel.selectCardPanel.getSelectButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cno=cardPanel.selectCardPanel.getCnoField().getText();
				cardPanel.selectCard(cno);
				cardPanel.layout.show(cardPanel.downPanel, "selectcardpanel");
			}

		});
		//点击《图书证添加》按钮
		cardPanel.selectCardPanel.getAddButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cardPanel.layout.show(cardPanel.downPanel, "addcardpanel");	
			}

		});
		//点击《图书证返回》按钮
		cardPanel.addcardpanel.getBackButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cno=cardPanel.selectCardPanel.getCnoField().getText();
				cardPanel.selectCard(cno);
				cardPanel.layout.show(cardPanel.downPanel, "selectcardpanel");			
			}

		});
		//点击《图书证提交》按钮
		cardPanel.addcardpanel.getOkButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cno=cardPanel.addcardpanel.getCnoField().getText();
				String name=cardPanel.addcardpanel.getNameField().getText();
				String department=cardPanel.addcardpanel.getDepartmentField().getText();
				String type=cardPanel.addcardpanel.getTypeField().getText();
				int i=card.AddCard(cno, name, department, type);
				if(i>0) {
					JOptionPane.showMessageDialog(cardPanel, "图书证添加成功!");
					cardPanel.addcardpanel.getCnoField().setText("");
					cardPanel.addcardpanel.getNameField().setText("");
					cardPanel.addcardpanel.getDepartmentField().setText("");
					cardPanel.addcardpanel.getTypeField().setText("");
				}else {
					JOptionPane.showMessageDialog(cardPanel, "图书证添加失败!");
				}	
			}

		});
		//点击《图书证删除》按钮
		cardPanel.selectCardPanel.getDelButton().addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int i = cardPanel.cdataTable.getSelectedRow();
				if(i>0) {
					String cno = String.valueOf(cardPanel.cdataTable.getValueAt(i,0));
					int j = card.deleteCard(cno);
					if(j>0) {
						JOptionPane.showMessageDialog(returnPanel, "删除成功!");
						cardPanel.selectCard("");
					}else {
						JOptionPane.showMessageDialog(returnPanel, "删除失败!");
					}
				}else {
					JOptionPane.showMessageDialog(returnPanel, "请选择要删除除的图书证!");
				}
			}

		});
	}
    //生成表格数据
    /**
     * @return
     */
    public Object[][] queryData(String title){

        List<Book> list=book.queryBook(title);
        rowData=new Object[list.size()][columnNames.length];

        for(int i=0;i<list.size();i++){
            for(int j=0;j<rowData.length;j++){
            	rowData[i][0]=list.get(i).getBno();
            	rowData[i][1]=list.get(i).getCategory();
            	rowData[i][2]=list.get(i).getTitle();
            	rowData[i][3]=list.get(i).getPress();
            	rowData[i][4]=list.get(i).getYear();
            	rowData[i][5]=list.get(i).getAuthor();
            	rowData[i][6]=list.get(i).getPrice();
            	rowData[i][7]=list.get(i).getTotal();
            	rowData[i][8]=list.get(i).getStock();
            }
        }
        return rowData;
    }
	public static void main(String[] args) {
		new BookManageMainFrame();
	}
}

2.BookManageMainFrame.java

package cn.book.view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;

public class AddBookPanel extends JPanel {
	
	private JTextField bnoField; //编号
	private JTextField categoryField;//类别
	private JTextField titleField;//书名
	private JTextField pressField;//出版社
	private JTextField yearField;//年份
	private JTextField authorField;//作者
	private JTextField priceField;//价格
	private JTextField totalField;//总量
	private JTextField stockField;//馆存量
	private JButton okButton;//确定按钮
	private JButton backButton;//返回按钮
	public AddBookPanel(){//构造函数
		//初始化成员变量
		bnoField = new JTextField();
		categoryField = new JTextField();
		titleField = new JTextField();
		pressField = new JTextField();
		yearField = new JTextField();
		authorField = new JTextField();
		priceField = new JTextField();
		totalField = new JTextField();
		stockField = new JTextField();
		okButton=new JButton("提交");
		backButton=new JButton("返回");

	
		//设置RegisterPanel容器的布局方式
		this.setBorder(new EmptyBorder(5,0,0,5));
		this.setLayout(new BorderLayout());
		
		//RegisterPanel容器新增一个容器
		JPanel p=new JPanel();
		p.setLayout(new GridLayout(9,2,0,20));
		//p.setBackground(Color.ORANGE);//设置背景色
		//在新增的容器中存入以下控件对象
		p.add(new JLabel("图书编号:",SwingConstants.CENTER));
		p.add(bnoField);
		p.add(new JLabel("图书类别:",SwingConstants.CENTER));
		p.add(categoryField);
		p.add(new JLabel("图书名称:",SwingConstants.CENTER));
		p.add(titleField);
		p.add(new JLabel("出版社:",SwingConstants.CENTER));
		p.add(pressField);
		p.add(new JLabel("年份:",SwingConstants.CENTER));
		p.add(yearField);
		p.add(new JLabel("作者:",SwingConstants.CENTER));
		p.add(authorField);
		p.add(new JLabel("价格:",SwingConstants.CENTER));
		p.add(priceField);
		p.add(new JLabel("总量:",SwingConstants.CENTER));
		p.add(totalField);
		p.add(new JLabel("馆存量:",SwingConstants.CENTER));
		p.add(stockField);
		//将新增的容器p加入到RegisterPanel容器中
		this.add(p);
		
		//RegisterPanel容器新增第二个容器
		JPanel p2=new JPanel();
		//p2.setBackground(Color.DARK_GRAY);//设置背景色
		//在新增的第二容器中存入以下控件对象
		p2.add(okButton);
		p2.add(backButton);
		//将新增的容器p2加入到RegisterPanel容器中
		this.add(p2,"South");
	}
	
	//以下都是RegisterPanel类的get方法
	 
	public JButton getOkButton() {
		return okButton;
	}
	 
	public JTextField getBnoField() {
		return bnoField;
	}

	public JTextField getCategoryField() {
		return categoryField;
	}

	public JTextField getTitleField() {
		return titleField;
	}

	public JTextField getPressField() {
		return pressField;
	}

	public JTextField getYearField() {
		return yearField;
	}

	public JTextField getAuthorField() {
		return authorField;
	}

	public JTextField getPriceField() {
		return priceField;
	}

	public JTextField getTotalField() {
		return totalField;
	}

	public JTextField getStockField() {
		return stockField;
	}

	public JButton getBackButton() {
		return backButton;
	}	
}

四、其它

1.其他系统实现

Java+Swing实现学生选课管理系统

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

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

相关文章

QLib学习

开源地址&#xff1a;GitHub - microsoft/qlib: Qlib is an AI-oriented quantitative investment platform that aims to realize the potential, empower research, and create value using AI technologies in quantitative investment, from exploring ideas to implementi…

为何在106短信群发前需完成实名认证?

为了严格遵循国家法律法规及电信运营商的规范要求&#xff0c;确保您及贵公司的合法权益得到充分保障&#xff0c;使用云通信服务进行106短信群发前&#xff0c;实名认证成为必要步骤。 根据《中华人民共和国网络安全法》第二十四条的明确规定&#xff1a; 法律强制性要求&…

vulhub think PHP 2-rce远程命令执行漏洞

1.开启环境 2。访问对应网站端口 3.这里我们直接构造payload&#xff0c;访问phpinfo() http://192.168.159.149:8080/?s/Index/index/L/${phpinfo()} 4.可以访问到我们的phpinfo&#xff0c; 所以写入一句话木马&#xff0c;也可使用蚁剑进行连接&#xff0c;获得其shell进…

GenAI 用于客户支持 — 第 4 部分:调整 RAG 搜索的相关性

作者&#xff1a;来自 Elastic Antonio Schnmann 欢迎阅读我们关于将生成式 AI 集成到 Elastic 客户支持的博客系列的第 4 部分。本期深入探讨了检索增强生成 (RAG) 在增强我们 AI 驱动的技术支持助理方面的作用。在这里&#xff0c;我们解决了改进搜索效果的挑战、解决方案和结…

【C++】windwos下vscode多文件项目创建、编译、运行

目录 &#x1f315;vscode多文件项目创建方法&#x1f319;具体案例⭐命令行创建项目名&#xff0c;并在vscode中打开项目⭐创建include目录和头文件⭐创建src目录和cpp文件⭐根目录下创建main.cpp &#x1f315;运行项目失败&#xff08;找不到include目录下的头文件和src目录…

实习生进了公司不会开发?一个真实业务教会你如何分析业务!

一、权限业务介绍 本业务为个人试用期的时候的真实企业级业务&#xff0c;进行了简单的替换词和业务内容模糊&#xff0c;但是业务逻辑没有变化&#xff0c;值得学习&#xff0c;代码部分可能因为替换词有部分误解&#xff0c;发现问题请评论区提醒我。 这个业务教会了我&…

最新前端开发VSCode高效实用插件推荐清单

在此进行总结归类工作中用到的比较实用的、有助于提升开发效率的VSCode插件。大家有其他的好插件推荐的也欢迎留言评论区哦&#x1f604; 基础增强 Chinese (Simplified) Language Pack: 提供中文界面。 Code Spell Checker: 检查代码中的拼写错误。 ESLint: 集成 ESLint&…

AIoTedge边缘计算+边缘物联网平台

在数字化转型的浪潮中&#xff0c;AIoTedge边缘计算平台以其边云协同的架构和强大的分布式AIoT处理能力&#xff0c;正成为推动智能技术发展的关键力量。AIoTedge通过在数据源附近处理信息&#xff0c;实现低延迟、快速响应&#xff0c;增强了应用的实时性。同时&#xff0c;它…

CCF推荐C类会议和期刊总结:(计算机网络领域)

CCF推荐C类会议和期刊总结&#xff08;计算机网络领域&#xff09; 在计算机网络领域&#xff0c;中国计算机学会&#xff08;CCF&#xff09;推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结&#xff0c;包括全称、出版社、dblp文献网…

DMDPC单副本集群安装

1. 环境描述 2. 部署步骤 2.1. 安装DM数据库软件启动DMAP [dmdbalei1 ~]$ DmAPService status DmAPService (pid 1269) is running.2.2. 初始化数据库实例 [dmdbalei1 data]$ dminit path/dmdba/data/sp1 instance_nameSP1 port_num5236 ap_port_num6000 dpc_modeSP initdb …

野火霸天虎V2学习记录

文章目录 嵌入式开发常识汇总1、嵌入式Linux和stm32之间的区别和联系2、stm32程序下载方式3、Keil5安装芯片包4、芯片封装种类5、STM32命名6、数据手册和参考手册7、什么是寄存器、寄存器映射和内存映射8、芯片引脚顺序9、stm32芯片里有什么10、存储器空间的划分11、如何理解寄…

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6&#xff1a;深入图形与图形分组、自定义节点、节点动画&#xff08;下&#xff09;_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中&#xff0c;应该怎样去计算和绘制图形&#xff0c;如何给一个图形制作不间断的动画&#xff0c;以及在鼠…

长芯微国产LS0104电平转换器/电平移位器P2P替代TXS0104

LS0104这个4位非反相转换器是一个双向电压电平转换器&#xff0c;可用于建立数字混合电压系统之间的切换兼容性。它使用两个单独的可配置电源轨支持1.65V至5.5V工作电压的端口同时它跟踪VCCA电源和支持的B端口工作电压从2.3V到5.5V&#xff0c;同时跟踪VCCB供应。这允许更低和更…

【C++】stackqueuedeque

目录 一、stack&#xff1a; 1、栈的介绍&#xff1a; 2、栈的使用&#xff1a; 3、栈的成员函数的模拟实现&#xff1a; 二、queue: 1、队列的介绍&#xff1a; 2、队列的使用&#xff1a; 3、队列的模拟实现&#xff1a; 三、deque&#xff1a; deque的底层结构&am…

电脑丢失msvcp120.dll问题原因及详细介绍msvcp120.dll丢失的解决方法

在使用 Windows 操作系统时&#xff0c;你可能会遇到一个常见的错误提示&#xff1a;“程序无法启动&#xff0c;因为计算机中丢失 msvcp120.dll”。这个错误通常意味着你的系统中缺少了一个重要的动态链接库文件&#xff0c;即msvcp120.dll。这个文件是 Microsoft Visual C 20…

一文读懂SpringMVC的工作原理

前言 MVC是经典的软件架构设计模式&#xff0c;几乎在各个领域各种开发语言中&#xff0c;均采纳了这个思想。此刻博主突然想到了Thinking in xxx系列设计书籍。换句话说&#xff0c;就是“各人自扫门前雪”和“术业有专攻”。当职责分配得当后&#xff0c;剩下的就是发挥各“…

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件&#xff0c;然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它&#xff0c;快速获取到想要知道的信息。https://www.chatpdf.com/

全志A527 A133 A523 T527 T133 H6 H8应用无法开启后台服务

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改4.1 代码修改方法14.2 代码修改方法24.3 代码修改方法35.彩蛋1.前言 像全志的很多平台,普通的app并不能正常的启动后台的服务,这样对于应用层很困扰,无法启动后台的服务,功能就不能正常使用…

2024最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…

新160个crackme - 052-tc.2

运行分析 提示选择Keyfile&#xff0c;选择后弹出错误的Keyfile&#xff0c;需要先破解Keyfile还需要破解Name和Serial PE分析 Delphi程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida找到Keyfile关键字符串&#xff0c;双击进入 ida动态调试&#xff0c;找到关…