SWINGEIGHT

package gui;

import javax.swing.JLabel;
import javax.swing.JTable;

public class pagination
{
  public void fenYe(String[][] str,int sig,JTable jtable,JLabel jlable)
  {
 //然后再进行数据添加
   int count =getcount(str);
   //分页前清除前面所有的类容
   for (int i = 0; i < 10; i++)//加空白页
   {
    for (int j = 0; j < 5; j++)
    {
     jtable.setValueAt("", i, j);
             }
   }
  
  if (count==1)
  {
   jlable.setText("1"+"/"+String.valueOf(count));
   for (int i = 0; i < str.length; i++)
    for (int j = 0; j < 5; j++)
    {
     jtable.setValueAt(str[i][j], i, j);
    }  
  }
  else
  {
         if (count==sig)
   {
           int k = 0;
           jlable.setText(String.valueOf(count)+"/"+String.valueOf(count));
     for (int i = (sig-1)*10; i < str.length; i++)
     {
      for (int j = 0; j < 5; j++)
      {
       jtable.setValueAt(str[i][j], k, j);
                }
      k++;
     }
     for (int i = k; i < 10; i++)//加空白页
     {
      for (int j = 0; j < 5; j++)
      {
       jtable.setValueAt("", i, j);
                }
     }
       }
    else
    {
     int k = 0;
     jlable.setText(String.valueOf(sig)+"/"+String.valueOf(count));
     for (int i = (sig-1)*10; i < sig*10; i++)
     {
      for (int j = 0; j < 5; j++)
      {
       jtable.setValueAt(str[i][j], k, j);
               }       
      k++;
     }
    }
    }
  }
  public int getcount(String[][] str)
  {
   int count = str.length/10; ///总页数
    if(str.length%10!=0){
     count++;
     }
 return count;
  
  }
}


package gui;
import java.util.Set;
public class SingleString {
 public static void setInstance(SingleString instance) {
  SingleString.instance = instance;
 }
 private String[][] str;
 
 public String[][] getStr() {
  return str;
 }
 public void setStr(String[][] str) {
  this.str = str;
 }

 private static SingleString instance = null;
 public static SingleString getInstance()
 {
  if(instance == null)
  {
   instance = new SingleString();
  }
  return instance;
 }
 
 

}
service包
package service;
import entity.Emp;
public interface ExamService {
      public String login(String name,String password);
}


package service;
import dao.ModifyPwd;
import entity.Emp;
public class ExamServiceImpl implements ExamService{
 private Emp loginUser;
 @Override
 public String login(String name, String password)
 {  
  ModifyPwd mp = new ModifyPwd();
  String pwd = mp.findPwd(name);
  if(pwd!=null){
   if(pwd.equals(password)){
    return password;
   }else{
    return "密码错误";
   }
  }else{
   return "用户名不存在";
  }
 }
}

test包
package test;
import service.ExamService;
import service.ExamServiceImpl;
import gui.AddFrame;
import gui.ChangeFrame;
import gui.LoginFrame;
import gui.MineContent;
import gui.OperateFrame;
public class Mine {
      public static void main(String[] args) {
        ExamService service=new ExamServiceImpl();
     MineContent mc = new MineContent(service);
     LoginFrame lf = new LoginFrame(mc);
     mc.setLoginFrame(lf);
     OperateFrame of = new OperateFrame(mc);
     mc.setOperateFrame(of);
     ChangeFrame cf = new ChangeFrame(mc);
     mc.setChangeFrame(cf);
     AddFrame af = new AddFrame(mc);
     mc.setAddFrame(af);    
     mc.show();
 }
}

util包
package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBUtil
{
 String drive = "oracle.jdbc.driver.OracleDriver";
 String url = "jdbc:oracle:thin:@127.0.0.1:1521:TESTDEMO";
 String username = "system";
 String password = "TESTDEMO";
 static Connection conn=null;
 
 /*
  * 获得数据库连接
  * */
 public Connection getConn()
 {
  try
  {
   Class.forName(drive);
   conn =DriverManager.getConnection(url, username, password);
  }
  catch (ClassNotFoundException e)
  {
   e.printStackTrace();
  }
  catch (SQLException e)
  {
   e.printStackTrace();
  }
  return conn;
  
 }
 
 /*
  * 关闭数据库连接
  * */
 public void closeConn(Connection conn)
 {
   try
   {
    if(conn!=null)
    {
    conn.close();
    }
   }
   catch (SQLException e)
   {
    e.printStackTrace();
   }
 }
 public static void main(String[] args) {
   System.out.println(new DBUtil().getConn().toString());
 }
}


package util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class OperateXml
{
 
 /**
  * 在getOperXmlGinglton()方法中被调用,用于单例
  */
 private static OperateXml operateXml = null;
 
 /**
  * 返回OperateXml实例
  * @return OperateXml
  */
 public static OperateXml getOperXmlGinglton()
 {
  if(operateXml == null)
  {
   operateXml = new OperateXml();
  }
  
  return operateXml;
 }

 /**
  * 创建的Document对象结构类似于:
  * <公司>
    <部门 name="2012">
      <小组 name="java"/>
      <小组 name="c++"/>
    </部门>
    <部门 name="闲置"/>
  </公司>
  * @param lists 它的子List中第一个为部门名称且不能为空,后面全为小组名称且可以为空,
  *  类似于:“部门名称,小组名称,小组名称...”
  * @return Document
  */
 public Document list2Document(ArrayList<ArrayList<String>> lists)
 {
  if(lists == null)
  {
   return null;
  }
  Document document = DocumentHelper.createDocument();
  Element root = document.addElement("公司");
  
  //创建部门节点
  for (ArrayList<String> arrayList : lists)
  {
   Element element = root.addElement("部门");
   element.addAttribute("name", arrayList.get(0));
   
   //创建小组节点
   for (int i = 1; i < arrayList.size(); i++)
   {
    Element element2 = element.addElement("小组");
    element2.addAttribute("name",arrayList.get(i));
   }
  }
  
  return document;
 }
 
 /**
  * 根据Document对象在制定路径生成xml文件
  * @param document 创建好的Document对象,不能为空
  * @param pathName 路径名,包括文件的名称和格式,如:"C:\\abc.xml",不能为空
  * @return boolean 是否成功生成xml文件
  */
 public boolean writeXml(Document document,String pathName)
 {
  boolean flag = true;
  if(document!=null && isRigthPathName(pathName))
  {
   FileOutputStream fileOutputStream = null;
   XMLWriter writer = null;
   OutputFormat format = OutputFormat.createPrettyPrint();
   format.setEncoding("utf-8");
   
   try
   {
    fileOutputStream = new FileOutputStream(pathName);
    writer = new XMLWriter(fileOutputStream,format);
    
    //生成xml
    writer.write(document);
   }
   catch (FileNotFoundException e)
   {
    e.printStackTrace();
   }
   catch (UnsupportedEncodingException e)
   {
    e.printStackTrace();
   }
   catch (IOException e)
   {
    e.printStackTrace();
   }
   finally
   {
    if(fileOutputStream != null)
    {
     try
     {
      fileOutputStream.close();
     }
     catch (IOException e)
     {
      e.printStackTrace();
     }
    }
    
    if(writer != null)
    {
     try
     {
      writer.close();
     }
     catch (IOException e)
     {
      e.printStackTrace();
     }
    }
   }
  }
  else
  {
   flag = false;
  }
  return flag;
  
 }
 
 /**
  * 判断文件是否以.xml结尾,文件是否存在
  * @param pathName
  * @return
  */
 public boolean isRigthPathName(String pathName)
 {
  boolean flag = true;
  if("".equals(pathName) || (pathName == null))
  {
   flag = false;
  }
  else
  {
   File file = new File(pathName);
   if(!file.exists())
   {
    flag = false;
   }
   if(!pathName.endsWith(".xml"))
   {
    flag = false; 
   }
  }
  return flag;
 }
 
 /**
  * 根据结果集在制定路径创建xml
  * @param lists 它的子List中第一个为部门名称且不能为空,后面全为小组名称且可以为空,
  *  类似于:“部门名称,小组名称,小组名称...”
  * @param pathName 路径名,包括文件的名称和格式,如:"C:\\abc.xml",不能为空
  * @return
  */
 public void createXml(ArrayList<ArrayList<String>> lists,String pathName)
 {
  writeXml(list2Document(lists), pathName);
 }
 
 /**
  * 在制定路径读取xml文件
  * @param pathName 路径名,包括文件的名称和格式,如:"C:\\abc.xml",不能为空
  * @return Document,返回为空则是路径不存在
  */
 public Document readXml(String pathName)
 {
  if(isRigthPathName(pathName))
  {
   Document document = null;
   SAXReader reader = new SAXReader();
   
   try
   {
    document = reader.read(pathName);
   }
   catch (DocumentException e)
   {
    e.printStackTrace();
    return null;
   }
   
   return document;
  }
  else
  {
   return null;
  }
  
 }
 
 /**
  * 供读取的xml类似于:
  * <公司>
    <部门 name="2012">
      <小组 name="java"/>
      <小组 name="c++"/>
    </部门>
    <部门 name="闲置"/>
  </公司>
  * 分解Document对象,返回List结果集
  * @param document Document对象,不能为空
  * @return ArrayList<ArrayList<String>>
  */
 @SuppressWarnings("unchecked")
 public ArrayList<ArrayList<String>> docum2List(Document document)
 {
  if(document == null)
  {
   return null;
  }
  ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();
  Element root = document.getRootElement();
   List<Element> deptElements = root.elements();

   //遍历部门节点
  for (Element element : deptElements)
  {
   ArrayList<String> arrayList = new ArrayList<String>();
   arrayList.add(element.attributeValue("name"));
   List<Element> groupElements = element.elements();
   
      //遍历小组节点
      for (Element element2 : groupElements)
   {
    arrayList.add(element2.attributeValue("name"));
   }
     
   lists.add(arrayList);
  }
  
  return lists;
 }
 
 /**
  * 将xml文件转换成List
  * @param pathName 路径名,包括文件的名称和格式,如:"C:\\abc.xml",不能为空
  * @return ArrayList<ArrayList<String>>
  */
 public ArrayList<ArrayList<String>> xml2List(String pathName)
 {
  return docum2List(readXml(pathName));
 }
 
 /**
  * 根据参数修改xml并解析更新后的xml
  * @param deptAttriValue 部门名称,不能为空
  * @param groupAttriValue 小组名称,如果为空则对部门操作,不为空则对小组进行操作
  * @param newName 要更新的部门或者小组的新名称
  * @return ArrayList<ArrayList<String>> 更新后的结果集
  * @deprecated 逻辑不清晰
  */
 public ArrayList<ArrayList<String>> modifyXml(String deptAttriValue,String groupAttriValue,String newValue,String pathName)
 {
  SAXReader reader = null;
  Document document = null;
  Element root = null;
  Element deptElement = null;
  deptAttriValue = deptAttriValue.trim();
  groupAttriValue = groupAttriValue.trim();
  newValue = newValue.trim();
  
  //如果小组名字或者部门名字不为空,则创建SAXReader、Document等对象
  if((!"".equals(groupAttriValue)) || (!"".equals(deptAttriValue)))
  {
   reader = new SAXReader();
   
   try
   {
    if(isRigthPathName(pathName))
    {
     document = reader.read(pathName);
    }
    else
    {
     return null;
    }
    
   }
   catch (DocumentException e)
   {
    e.printStackTrace();
   }
   
   root = document.getRootElement();
   deptElement = root.element(deptAttriValue);
  }
  
  //如果小组名字不为空,则进入小组的操作
  if(!"".equals(groupAttriValue))
  {
   Element groupElement = deptElement.element(groupAttriValue);
   
   //如果newName不为空则为更新操作
   if(!"".equals(newValue))
   {
    Attribute attribute = groupElement.attribute("name");
    attribute.setText(newValue);
   }
   
   //如果newName为空则是删除操作
   else
   {
    deptElement.remove(deptElement.element(groupAttriValue));
    //String sql = "delete from t_dep where depname = '"+;
   }
   
   return docum2List(readXml(pathName));
   
  }
  
  //如果小组名字为空,部门名字不为空,则进入对部门的操作
  else if(!"".equals(deptAttriValue))
  {
   //如果newName不为空则是更新操作
   if(!"".equals(newValue))
   {
    Attribute attribute = deptElement.attribute("name");
    attribute.setText(newValue);
   }
   
   //如果newName 为空则是删除操作
   else
   {
    root.remove(root.element(deptAttriValue));
   }
   
   return docum2List(readXml(pathName));
  }
  else
  {
   return null;
  }
 }
 
 /**
  * 根据部门属性获得部门节点
  * @param document
  * @param deptAttrriValue 部门name属性值
  * @return Element
  */
 @SuppressWarnings("unchecked")
 public Element getDeptElementByAttr(Document document,String deptAttrriValue)
 {
  if(document!=null)
  {
   Element root = document.getRootElement();
   List<Element> list = root.elements();
   
   //遍历部门节点,查找部门name属性值为deptAttrriName的部门节点
   for (Element deptElement : list)
   {
    if(deptElement.attributeValue("name").equals(deptAttrriValue))
    {
     return deptElement;
    }
   }
  }
  
  return null;
  
 }
 
 /**
  * 根据部门属性名和部门下面的小组属性名来获得小组节点
  * @param document
  * @param deptAttriValue 部门name属性值
  * @param groupAttriValue 小组name属性值
  * @return Element
  */
 @SuppressWarnings("unchecked")
 public Element getGroupElementByAttr(Document document,String deptAttriValue,String groupAttriValue)
 {
  Element root = null;
  if(document!=null)
  {
   root = document.getRootElement();
  }
  else
  {
    return null;
  }
  
  List<Element> deptElemets = root.elements();
  deptAttriValue = deptAttriValue.trim();
  groupAttriValue = groupAttriValue.trim();
  
  //遍历所有部门下面的小组节点,查找小组name属性值为groupAttriName的小组节点
  for (Element deptElement : deptElemets)
  {
   if(deptElement.attributeValue("name").equals(deptAttriValue))
   {
    List<Element> groupElements = deptElement.elements();
    for (Element groupElement : groupElements)
    {
     if(groupElement.attributeValue("name").equals(groupAttriValue))
     {
      return groupElement;
     }
    }
    return deptElement;
   }
  }
  
  return null;
 }
 
 /**
  * 更新xml文件的部门属性值
  * @param deptAttriValue 部门name属性值
  * @param newValue 新的部门name属性值
  * @param pathName 路径名,包括文件的名称和格式,如:"C:\\abc.xml",不能为空
  * @return ArrayList<ArrayList<String>>
  */
 public ArrayList<ArrayList<String>> updateDept(String deptAttriValue , String newValue ,String pathName)
 {
  Document document = readXml(pathName);
  if(document == null)
  {
   return null;
  }
  deptAttriValue = deptAttriValue.trim();
  newValue = newValue.trim();
  Element element = getDeptElementByAttr(document, deptAttriValue);
  if(element == null)
  {
   return null;
  }
  element.attribute("name").setText(newValue);
  writeXml(document, pathName);
  
  return docum2List(document);
 }
 
 /**
  * 根据部门name属性值删除部门节点
  * @param deptAttriValue 部门name属性值
  * @param pathName 路径名,包括文件的名称和格式,如:"C:\\abc.xml",不能为空
  * @return ArrayList<ArrayList<String>>
  */
 public ArrayList<ArrayList<String>> deleteDept(String deptAttriValue ,String pathName)
 {
  Document document = readXml(pathName);
  if(document == null)
  {
   return null;
  }
  deptAttriValue = deptAttriValue.trim();
  Element element = getDeptElementByAttr(document, deptAttriValue);
  if(element == null)
  {
   return null;
  }
  document.getRootElement().remove(element);
  writeXml(document, pathName);
  
  return docum2List(document);
 }
 
 /**
  * 根据部门name属性值更新它下面的小组name属性值
  * @param deptAttriValue 部门name属性值
  * @param groupAttriValue 小组name属性值
  * @param newValue 新的小组name属性值
  * @param pathName 路径名,包括文件的名称和格式,如:"C:\\abc.xml",不能为空
  * @return ArrayList<ArrayList<String>>
  */
 @SuppressWarnings("unchecked")
 public ArrayList<ArrayList<String>> updateGroup(String deptAttriValue ,String groupAttriValue, String newValue ,String pathName)
 {
  Document document = readXml(pathName);
  if(document == null)
  {
   return null;
  }
  deptAttriValue = deptAttriValue.trim();
  groupAttriValue = groupAttriValue.trim();
  newValue = newValue.trim();
  Element element = getGroupElementByAttr(document, deptAttriValue, groupAttriValue);
  
  if(element == null)
  {
   return null;
  }
  element.attribute("name").setText(newValue);
  writeXml(document, pathName);
  return docum2List(document);
 }
 
 /**
  * 删除部门下面的小组
  * @param deptAttriValue 部门name属性值
  * @param groupAttriValue 小组name属性值
  * @param pathName 路径名,包括文件的名称和格式,如:"C:\\abc.xml",不能为空
  * @return ArrayList<ArrayList<String>>
  */
 public ArrayList<ArrayList<String>> deleteGroup(String deptAttriValue, String groupAttriValue, String pathName)
 {
  Document document = readXml(pathName);
  if(document == null)
  {
   return null;
  }
  deptAttriValue = deptAttriValue.trim();
  groupAttriValue = groupAttriValue.trim();  
  Element element = getGroupElementByAttr(document, deptAttriValue, groupAttriValue);
  
  if(element == null)
  {
   return null;
  }
  element.getParent().remove(element);
  writeXml(document, pathName);
  
  return docum2List(document);
 }
 
 /**
  * 增加部门或小组
  * 参数规范:没有增加的,则参数写为空或null
  * @param newdeptname新部门名称
  * @param deptname增加小组所在部门名称
  * @param newgroupname新小组名称
  * @return
  */
 @SuppressWarnings("unchecked")
 public ArrayList<ArrayList<String>> addNode(String newDeptValue,String deptValue,String newGroupValue,String pathName)
 {
  Document document = readXml(pathName);
  if(document == null)
  {
   return null;
  }
  newDeptValue = newDeptValue.trim();
  deptValue = deptValue.trim();
  newGroupValue = newGroupValue.trim();
  Element root = document.getRootElement();
  
  //若deptname为空,则增加部门
  if("".equals(deptValue) || (deptValue == null))
  {
   Element element = root.addElement("部门");
   element.addAttribute("name", newDeptValue);
  }
  
  //若deptname不为空,则遍历节点,查找所在deptname部门增加小组newgroupname
  else
  {
   for(Iterator<Element> it = root.elementIterator();it.hasNext();)
   {
    Element e = (Element)it.next();
    String attr = e.attributeValue("name");
    if(attr.equals(deptValue))
    {
     Element e2 = e.addElement("小组");
     e2.addAttribute("name", newGroupValue);
    }
   }
  }
  writeXml(document, pathName);
  return docum2List(document);
  
 }
 
 /**
  * 判断所增加的部门或小组是否已存在,若存在则返回false
  * @param newDeptValue
  * @param deptValue
  * @param newGroupValue
  * @param pathName
  * @return
  */
 @SuppressWarnings("unchecked")
 public boolean isNewNode(String newDeptValue,String deptValue,String newGroupValue,String pathName)
 {
  boolean flag = true;
  Document document = null;
  newDeptValue = newDeptValue.trim();
  deptValue = deptValue.trim();
  newGroupValue = newGroupValue.trim();
  document = readXml(pathName);
  if(document == null )
  {
   return false;
  }
  Element root = document.getRootElement();
  
  //若deptname为空,则增加部门,判断是否已存在newdeptname该部门
  if("".equals(deptValue) || deptValue == null)
  {
   for(Iterator<Element> it = root.elementIterator();it.hasNext();)
   {
    Element e = (Element)it.next();
    String attr = e.attributeValue("name");
    if(attr.equals(newDeptValue))
    {
     flag = false;
    }
   }
  }
  
  //若deptname不为空,则增加现在,遍历节点,查找所在deptname部门是否已存在小组newgroupname
  else
  {
   for(Iterator<Element> it = root.elementIterator();it.hasNext();)
   {
    Element e = (Element)it.next();
    String attr = e.attributeValue("name");
    if(attr.equals(deptValue))
    {
     for(Iterator<Element> at = e.elementIterator();at.hasNext();){
      Element e2 = at.next();
      if(e2.attributeValue("name").equals(newGroupValue))
      {
       flag = false;
      }
     }
    }
   }
  }  
  return flag;
 }  
}


package util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/*对 excle进行读写操作
 *写方法writeExcle()把传过来的二维数组的类容进行遍历,然后写到excle中
 * 读方法readExcle()把exlce中的类容放入二维数组中
 * */
public class RwExcel
{
 /*把传过来的二维数组进行遍历,然后写入excle中
  * @param ArrayList<Emp>
  * */
 public void writeExcle(String[][] str,File file)
 {
  WritableWorkbook wwb = null;
  Label label;
  
  try
  {
      wwb = Workbook.createWorkbook(file);
   WritableSheet ws = wwb.createSheet("sheet1",0);
      for (int i = 0; i < str.length; i++)
      {
          for (int j = 0; j < str[0].length; j++)
          {
     label = new Label(j, i, str[i][j]);
     ws.addCell(label);
    }
      }
        
       wwb.write();
     }
  catch (IndexOutOfBoundsException e1)
  {
   e1.printStackTrace();
  }
  catch (IOException e1)
  {
   e1.printStackTrace();
  }
  catch (RowsExceededException e)
  {
   e.printStackTrace();
  }
  catch (WriteException e)
  {
      e.printStackTrace();
  }
     finally
     {
     try
     {
         wwb.close();
     }
     catch (WriteException e)
     {
      e.printStackTrace();
     }
     catch (IOException e)
     {
               e.printStackTrace();
     }
     }
 }
 
 /*把excle中的类容进行遍历放入二维数组中
  *
  * @return ArrayList<Emp>
  * */
 @SuppressWarnings("null")
 public String[][] readExcle(File file)
 {
  String[][] str = null;
  try
  {  
   Workbook wb = Workbook.getWorkbook(file);
   Sheet st = wb.getSheet(0);
   str = new String[st.getRows()][st.getColumns()];
   for(int i = 0; i < st.getRows(); i++)
   {
    for (int j = 0; j < st.getColumns(); j++)
    {
     str[i][j] = st.getCell(j,i).getContents();
    }
   }
  }
  catch (FileNotFoundException e)
  {
   e.printStackTrace();
  }
  catch (BiffException e)
  {
   e.printStackTrace();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
  return str;
 }

}


gg.xml
<?xml version="1.0" encoding="utf-8"?>

<中软国际科技服务有限公司>
  <部门 name="2012实验室">
    <小组 name="java"/> 
    <小组 name="c++"/>
  </部门> 
  <部门 name="核心网">
    <小组 name="java"/>
  </部门> 
  <部门 name="网络">
    <小组 name="java"/>
  </部门> 
  <部门 name="IT">
    <小组 name="java"/>
  </部门> 
  <部门 name="无线">
    <小组 name="java"/>
  </部门>
</中软国际科技服务有限公司>


help
1.您认为可能收到过仿冒软件吗?请向 Microsoft 报告。
2.获取更安全购物的提示或直接从 Microsoft 购买。
3.确保您拥有 Microsoft 产品的正确许可。
4.确保您拥有 Microsoft 产品的正确许可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值