基于Java Swing +Mysql8.0数据库的物资(进销存)管理系统

一、项目概要:
        基于Java  Swing +Mysql8.0数据库的物资(进销存)管理系统,具备登录功能。以及用户管理、商品进数据管理、进销存管理功能。

二、源码获取:

 有需要可以直接点击下载。点击下载


如有技术咨询可联系QQ:571328502

三、界面展示:

登录:

主界面:

商品管理界面:

进销存管理界面:

 四、主要代码:

 1)、登录

package com.bj.frame;
 
 
import java.awt.Font;
import java.awt.Image;
 
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import java.util.Map;
 
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
 
import com.bj.entity.User;
import com.bj.factory.ServiceFactory;
import com.bj.util.MD5Code;
import com.bj.util.MyFont;
 
@SuppressWarnings("serial")
public class LoginJFrame extends JFrame implements MouseListener, FocusListener{
	
 
	
	// 定义全局组件
	JTextField id = new JTextField(20);
	JPasswordField password = new JPasswordField(20);
	JPanel  backgroundPanel = null;
	JButton button_minimize, button_close, button_login, button_reset;
	
	public LoginJFrame() {
		try {
			Image imgae = ImageIO.read(new File("image/logo.png"));
			this.setIconImage(imgae);
		} catch (IOException e) {
			e.printStackTrace();
		}
		backgroundPanel = new JPanel();
		backgroundPanel.setBackground(UIManager.getColor("Button.background"));
		backgroundPanel.setLayout(null);
 
		id.setBounds(62, 102, 195, 42);
		id.setFont(MyFont.Static);
		id.setText("账号");
		id.addFocusListener(this);
 
 
		password.setBounds(62, 154, 195, 42);
		password.setFont(MyFont.Static);
		password.addFocusListener(this);
		password.setText("密码");
		password.setEchoChar('\0');
 
 
		
 
		button_login = new JButton("登录");
		button_login.setBounds(62, 222, 70, 27);
		button_login.setFont(MyFont.Static);
		button_login.addMouseListener(this);
 
		button_reset = new JButton("重置");
		button_reset.setBounds(187, 222, 70, 27);
		button_reset.addMouseListener(this);
		button_reset.setFont(MyFont.Static);
 
		backgroundPanel.add(id);
		backgroundPanel.add(password);
		backgroundPanel.add(button_login);
		backgroundPanel.add(button_reset);
 
		getContentPane().add(backgroundPanel);
		
		JLabel lblNewLabel = new JLabel("\u7528\u6237\u767B\u9646");
		lblNewLabel.setFont(new Font("微软雅黑", Font.BOLD, 24));
		lblNewLabel.setBounds(101, 50, 96, 42);
		backgroundPanel.add(lblNewLabel);
		this.setTitle("物资管理系统");
		this.setSize(310, 380);
		this.setVisible(true);
		this.requestFocus();
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setResizable(false);
		}
	
		
	@Override
	public void mouseClicked(MouseEvent e) {
		Map<String, Object> map;
		if (e.getSource() == button_login) {
			if ("账号".equals(id.getText())) {
				JOptionPane.showMessageDialog(null, "账号不能为空");
			} else if ("密码".equals(new String(password.getPassword()))) {
				JOptionPane.showMessageDialog(null, "密码不能为空");
			} else {
				String un =id.getText();
				String pw =new MD5Code().getMD5ofStr(new String(password.getPassword()));
				User user = new User();
				user.setId(un);
				user.setPassword(pw);
				
				try {
					map = ServiceFactory.getUserServiceInstance().login(user);
					boolean flag = (Boolean) map.get("flag");
					if (flag) { // 账号密码正确,表示登录成功
						User vo = (User)map.get("user");
						this.setVisible(false);
						new IndexJFrame(vo);
					}else { // 登录失败
						JOptionPane.showMessageDialog(null, "账号密码有误");
					}
				} catch (Exception e2) {
					
					e2.printStackTrace();
				}
				
			}
		} else if (e.getSource() == button_reset) {
			id.setText("账号");
			password.setText("密码");
			password.setEchoChar('\0');
		}
 
	}
	
	//聚焦事件
	@Override
	public void focusGained(FocusEvent e) {
		if (e.getSource() == id) {
			if (id.getText().equals("账号")) {
				id.setText("");
			}
		} else if (e.getSource() == password) {
			if (new String(password.getPassword()).equals("密码")) {
				password.setText("");
				password.setEchoChar('*');
			}
		}
	}
	
	
	// 失焦事件
	@Override
	public void focusLost(FocusEvent e) {
		if (e.getSource() == id) {
			if (id.getText().equals("")) {
				id.setText("账号");
			}
		} else if (e.getSource() == password) {
			if (new String(password.getPassword()).equals("")) {
				password.setText("密码");
				password.setEchoChar('\0');
			}
		}
	}
 
	
 
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
 
	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
 
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
 
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
 
}

2)、商品管理

package com.bj.frame;
 
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
import java.util.HashSet;
import java.util.List;
import java.util.Set;
 
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableCellRenderer;
 
import com.bj.entity.Good;
import com.bj.factory.ServiceFactory;
/**
 * 商品管理界面
 *
 */
public class GoodManagerJPanel implements ActionListener, MouseListener,DocumentListener{
	JPanel backgroundPanel, topPanel, toolPanel, searchPanel, tablePanel;
	JTable table;
	JScrollPane jScrollPane;
	JLabel label_category, label_warehouse, tool_add, tool_modify, tool_delete,label_name;
	JTextField input_name;
	
	public GoodManagerJPanel(){
		backgroundPanel = new JPanel(new BorderLayout());
		 initTablePanel();
		 initTopPanel();
		
	}
	
	// 初始化顶部面板
	public void initTopPanel() {
 
		topPanel = new JPanel(new BorderLayout());
		//调用工具面板
		initToolPanel();
		initSearchPanel();
		//加入到总背景面板中去
		backgroundPanel.add(topPanel, "North");
 
	}
	//初始化工具面板
	public void initToolPanel() {
 
		toolPanel = new JPanel();
		// 工具图标
		Icon icon_add = new ImageIcon("image/add.png");
		tool_add = new JLabel(icon_add);
		tool_add.setToolTipText("新建商品");
		tool_add.addMouseListener(this);
 
		Icon icon_modify = new ImageIcon("image/modify.png");
		tool_modify = new JLabel(icon_modify);
		tool_modify.setToolTipText("修改商品");
		tool_modify.addMouseListener(this);
 
		Icon icon_delete = new ImageIcon("image/delete.png");
		tool_delete = new JLabel(icon_delete);
		tool_delete.setToolTipText("删除商品");
		tool_delete.addMouseListener(this);
 
		toolPanel.add(tool_add);
		toolPanel.add(tool_modify);
		toolPanel.add(tool_delete);
		//加入到顶部面板中去
		topPanel.add(toolPanel, "West");
 
	}
	//初始化数据表格列表
	public void initTablePanel() {
		
		
		
		List<Good> Goods = null ;		
		try {
			Goods = ServiceFactory.getGoodServiceInstance().list();
		} catch (Exception e) {
			e.printStackTrace();
		}			
		//创建一个TableModel
		GoodTableModel htm= new GoodTableModel(Goods);
		//根据 TableModel来创建 Table
        table = new JTable(htm);
        
        //设置其居中
        DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();//单元格渲染器 
		tcr.setHorizontalAlignment(JLabel.CENTER);//居中显示  
        table.setDefaultRenderer(Object.class, tcr);//设置渲染器  
        table.setRowHeight(80); 
        // 设置选择模式为单行选择
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        // 选中第一行 (基本0)
        //table.getSelectionModel().setSelectionInterval(0, 0);
        
        jScrollPane = new JScrollPane(table);
        
        tablePanel = new JPanel(new BorderLayout());
        
        tablePanel.setOpaque(false);
 
		tablePanel.add(jScrollPane);
		
		backgroundPanel.add(tablePanel, "Center");
        
	}
	public void refreshTablePanel() {
		backgroundPanel.remove(tablePanel);
		String name = input_name.getText();
		 List<Good> Goods = null ;		
			try {
				Goods = ServiceFactory.getGoodServiceInstance().listByColumn("name", name);
			} catch (Exception e) {
				e.printStackTrace();
			}			
		//创建一个TableModel
		GoodTableModel htm= new GoodTableModel(Goods);
		 //根据 TableModel来创建 Table
        table = new JTable(htm);
        //设置其居中
        DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();//单元格渲染器 
		tcr.setHorizontalAlignment(JLabel.CENTER);//居中显示  
        table.setDefaultRenderer(Object.class, tcr);//设置渲染器  
        table.setRowHeight(80); 
        jScrollPane = new JScrollPane(table);
        
        tablePanel = new JPanel(new BorderLayout());
        
        tablePanel.setOpaque(false);
 
		tablePanel.add(jScrollPane);
		
		backgroundPanel.add(tablePanel, "Center");
	}
	// 初始化搜素条件面板
		public void initSearchPanel() {
			searchPanel = new JPanel();
			// 商品模糊名称输入框
			input_name = new JTextField(10);
			input_name.getDocument().addDocumentListener(this);
			
			// 标签
			label_name = new JLabel("商品名称");
			searchPanel.add(label_name);
			searchPanel.add(input_name);
			
			topPanel.add(searchPanel, "East");
		}
	//鼠标单击事件
	@Override
	public void mouseClicked(MouseEvent e) {
		if (e.getSource() == tool_add) {//添加商品
			new AddGoodsJFrame(this);
		}		
		else if(e.getSource() == tool_delete) {//删除商品
			int selectedRow= table.getSelectedRow();
			if (selectedRow == -1) {
				JOptionPane.showMessageDialog(null, "请选择商品");
			} 
			else {
			int id = (int)table.getValueAt(selectedRow, 2);
			Set<Integer> ids = new HashSet<Integer>();
			ids.add(id);
			int result = JOptionPane.showConfirmDialog(null, "是否确定删除?", "用户提示", JOptionPane.YES_NO_OPTION);
			if (result == 0) {
				try {
					if (ServiceFactory.getGoodServiceInstance().delete(ids)) {
						JOptionPane.showMessageDialog(null, "商品删除成功!");
						refreshTablePanel();
					}else {
						JOptionPane.showMessageDialog(null, "商品删除失败!");
						refreshTablePanel();
					}
				} catch (Exception e1) {
					
					e1.printStackTrace();
				
				}
			}
			}
		}		
			else if (e.getSource() == tool_modify) {//修改商品
				int selectedRow= table.getSelectedRow();
				if (selectedRow == -1) {
					JOptionPane.showMessageDialog(null, "请选择商品");
				}  else {
					System.out.println(selectedRow);
					new ModifyGoodsJFrame(this, table, selectedRow);
					
				}
			}
		}
 
	@Override
	public void mouseEntered(MouseEvent arg0) {
 
 
		
	}
 
	@Override
	public void mouseExited(MouseEvent arg0) {
 
 
		
	}
 
	@Override
	public void mousePressed(MouseEvent arg0) {
 
 
	}
 
	@Override
	public void mouseReleased(MouseEvent arg0) {
		
		
	}
 
	@Override
	public void actionPerformed(ActionEvent arg0) {
		
		
	}
 
	@Override
	public void changedUpdate(DocumentEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	// 文本框插入内容事件
	@Override
	public void insertUpdate(DocumentEvent e) {
		refreshTablePanel();
	}
 
	// 文本框删除内容事件
	@Override
	public void removeUpdate(DocumentEvent e) {
		refreshTablePanel();
	}
 
}

3)、进销存管理

package com.bj.frame;
 
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableCellRenderer;
 
import com.bj.entity.Order;
import com.bj.entity.User;
import com.bj.factory.ServiceFactory;
 
public class OrderManagerJPanel implements ActionListener, MouseListener, DocumentListener {
	
	
	JPanel backgroundPanel, topPanel, toolPanel, searchByGoodPanel, seacrchPanel,tablePanel;
	JTable table;
	JScrollPane jScrollPane;
	JLabel tool_add, tool_modify, tool_delete,label_name,label_date,tool_confirm,tool_refute;
	JTextField input_name,input_date;
	
	
	
	// 用户对象
	User user;
	
	
	
	public OrderManagerJPanel(User user) {
		this.user = user;
		backgroundPanel = new JPanel(new BorderLayout());
		initTopPanel();
		initTablePanel();
	}
	
	
	// 初始化顶部面板
		public void initTopPanel() {
			topPanel = new JPanel(new BorderLayout());
 
			initToolPanel();
			initSearchPanel();
 
			backgroundPanel.add(topPanel, "North");
		}
	// 初始化工具面板
		public void initToolPanel() {
			toolPanel = new JPanel();
			// 工具图标
			Icon icon_add = new ImageIcon("image/add.png");
			tool_add = new JLabel(icon_add);
			tool_add.setToolTipText("新建订单");
			tool_add.addMouseListener(this);
 
			Icon icon_modify = new ImageIcon("image/modify.png");
			tool_modify = new JLabel(icon_modify);
			tool_modify.setToolTipText("修改订单");
			tool_modify.addMouseListener(this);
 
			Icon icon_delete = new ImageIcon("image/delete.png");
			tool_delete = new JLabel(icon_delete);
			tool_delete.setToolTipText("删除订单");
			tool_delete.addMouseListener(this);
			
			Icon icon_confirm = new ImageIcon("image/confirm.png");
			tool_confirm = new JLabel(icon_confirm);
			tool_confirm.setToolTipText("批准订单");
			tool_confirm.addMouseListener(this);
			
			Icon icon_refute = new ImageIcon("image/refute.png");
			tool_refute = new JLabel(icon_refute);
			tool_refute.setToolTipText("拒接订单");
			tool_refute.addMouseListener(this);
			
		
			
			toolPanel.add(tool_add);
			
			toolPanel.add(tool_modify);
			
			toolPanel.add(tool_delete);
		
			if( "1" .equals(user.getIdentity())) {
				
				toolPanel.add(tool_confirm);
				
				toolPanel.add(tool_refute);	
			}
 
			topPanel.add(toolPanel, "West");
		
		}
		// 初始化搜素条件面板
		public void initSearchPanel() {
			searchByGoodPanel = new JPanel();
			
			// 商品模糊名称输入框
			input_name = new JTextField(10);
			input_name.getDocument().addDocumentListener(this);
			
			input_date = new JTextField(10);
			input_date.getDocument().addDocumentListener(this);
			// 标签
			label_name = new JLabel("商品ID");
			label_date = new JLabel("操作时间");
			
			searchByGoodPanel.add(label_name);
			searchByGoodPanel.add(input_name);
			
			searchByGoodPanel.add(label_date);
			searchByGoodPanel.add(input_date);
			
			
			topPanel.add(searchByGoodPanel, "East");
						
		}
 
		// 初始化数据表格面板
		public void initTablePanel() {
			List<Order> Order = null ;
			
			try {
				Order = ServiceFactory.getOrderServiceInstance().list();
			} catch (Exception e) {
				e.printStackTrace();
			}
			
			OrderTableModel otm = new OrderTableModel(Order);
			 table = new JTable(otm);
			 
			//设置其居中
		        DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();//单元格渲染器 
				tcr.setHorizontalAlignment(JLabel.CENTER);//居中显示  
		        table.setDefaultRenderer(Object.class, tcr);//设置渲染器  
		        
		        // 设置选择模式为单行选择
		        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		        // 选中第一行 (基本0)
		        //table.getSelectionModel().setSelectionInterval(0, 0);
		        table.setRowHeight(80); 
				jScrollPane = new JScrollPane(table);
			
 
				tablePanel = new JPanel(new BorderLayout());
				tablePanel.setOpaque(false);
 
				tablePanel.add(jScrollPane);
 
			backgroundPanel.add(tablePanel, "Center");
			
			
		}
		
		
		// 更新数据表格
		public void refreshTablePanel() {
			backgroundPanel.remove(tablePanel);
			String name = input_name.getText();
			String date = input_date.getText();
			List<Order> Order = null ;
			
			Map<String,String> map = new HashMap<String,String>() ;
			map.put("orderId", "");
			map.put("ordertime", date);
			map.put("goodid", name);
			map.put("company", "");
			map.put("number", "");
			map.put("operator", "");
			map.put("state", "");
			map.put("sign", "");
			
			try {
				Order = ServiceFactory.getOrderServiceInstance().listInPutByColumns(map);
			} catch (Exception e) {
				e.printStackTrace();
			}
			
			OrderTableModel otm = new OrderTableModel(Order);
			 table = new JTable(otm);
			 
			//设置其居中
		        DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();//单元格渲染器 
				tcr.setHorizontalAlignment(JLabel.CENTER);//居中显示  
		        table.setDefaultRenderer(Object.class, tcr);//设置渲染器  
		        
		        // 设置选择模式为单行选择
		        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		        // 选中第一行 (基本0)
		        //table.getSelectionModel().setSelectionInterval(0, 0);
		        table.setRowHeight(80); 
				jScrollPane = new JScrollPane(table);
			
 
				tablePanel = new JPanel(new BorderLayout());
				tablePanel.setOpaque(false);
 
				tablePanel.add(jScrollPane);
 
			backgroundPanel.add(tablePanel, "Center");
			
		}
		
 
		@Override
		public void mouseClicked(MouseEvent e) {
			
			int selectedRow= table.getSelectedRow();
			if (e.getSource() == tool_add) {
				new AddOrderJFrame(user, this);				
			}
			if (e.getSource() == tool_modify) {
				
			}
			if (e.getSource() == tool_delete) {
			
				if (selectedRow == -1) {
					JOptionPane.showMessageDialog(null, "请选择订单");
				} else {
					int id = (int)table.getValueAt(selectedRow, 0);
					Set<Integer> ids = new HashSet<Integer>();
					ids.add(id);
					int result = JOptionPane.showConfirmDialog(null, "是否确定删除?", "用户提示", JOptionPane.YES_NO_OPTION);
					if (result == 0) {
						try {
							if (ServiceFactory.getOrderServiceInstance().delete(ids)) {
								JOptionPane.showMessageDialog(null, "订单删除成功!");
								refreshTablePanel();
							}else {
								JOptionPane.showMessageDialog(null, "订单删除失败!");
								refreshTablePanel();
							}
						} catch (Exception e1) {
							e1.printStackTrace();
						}
					}
				}
			}
			if (e.getSource() == tool_confirm) {
				
				if (selectedRow == -1) {
					JOptionPane.showMessageDialog(null, "请选择订单");
				} else {
					int result = JOptionPane.showConfirmDialog(null, "确定通过审核?", "用户提示", JOptionPane.YES_NO_OPTION);
					if (result == 0) {
						int id = (int)table.getValueAt(selectedRow, 0);
						String sign = (String)table.getValueAt(selectedRow, 7);
						if("未审核".equals(sign)) {
							try {
								if(ServiceFactory.getOrderServiceInstance().comfirm(id)) {
									JOptionPane.showMessageDialog(null, "操作成功!");
									refreshTablePanel();
								}else {
									JOptionPane.showMessageDialog(null, "操作失败,请检查是否库存存在问题!");
									refreshTablePanel();
								}
							}catch (Exception e1) {
								e1.printStackTrace();
							}
						}else {
							JOptionPane.showMessageDialog(null, "请选择正确的订单!");
							refreshTablePanel();
						}
					
					}
				}	
			}
			if (e.getSource() == tool_refute) {
				if (selectedRow == -1) {
					JOptionPane.showMessageDialog(null, "请选择订单");
				} else {
					int result = JOptionPane.showConfirmDialog(null, "确定拒接该订单?", "用户提示", JOptionPane.YES_NO_OPTION);
					if (result == 0) {
						int id = (int)table.getValueAt(selectedRow, 0);
						String sign = (String)table.getValueAt(selectedRow, 7);
						if("未审核".equals(sign)) {
							try {
								if(ServiceFactory.getOrderServiceInstance().refute(id)) {
									JOptionPane.showMessageDialog(null, "操作成功!");
									refreshTablePanel();
								}else {
									JOptionPane.showMessageDialog(null, "操作失败!");
									refreshTablePanel();
								}
							}catch (Exception e1) {
								e1.printStackTrace();
							}
						}else {
							JOptionPane.showMessageDialog(null, "请选择正确的订单!");
							refreshTablePanel();
						}
					}
				}	
			}
		}
		
		@Override
		public void changedUpdate(DocumentEvent arg0) {
			// TODO Auto-generated method stub
			
		}
 
 
		@Override
		public void insertUpdate(DocumentEvent arg0) {
			refreshTablePanel();
			
		}
 
 
		@Override
		public void removeUpdate(DocumentEvent arg0) {
			refreshTablePanel();
			
		}
 
 
 
 
		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
 
 
		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
 
 
		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
 
 
		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
 
 
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		
}

4)、数据库连接

五、其它项目:

基于Java Swing 的通讯录管理系统

基于Java Swing记事本管理系统

基于java Swing 宿舍管理系统

基于java Swing 图书管理系统

基于Java Swing 成绩管理系统

六、心灵寄语:
想要赢,就一定不能怕输。不怕输结果未必能赢,但是怕输,结果则是一定输。

PS:如有侵权,请联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞鱼点点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值