Java Web 项目(后台管理系统)

Java Web 项目(后台管理系统)

1.所要用的工具 :
(1)编译工具: Myeclipse2017
(2)服务器:apache_tomcat8
(3)所有的Jdk 版本: jdk-8u221-64bit
(4)sqlserver数据库

将以上软件安装到计算机:

2.创建一个 web应用Produce
在这里插入图片描述

在这里插入图片描述

3.创建一个com.product.vo包,包下创建Produce 类
这里的类的属性名尽量与数据库表中的字段名相对应,方便后面与前端表中数据相对应不容易犯迷糊出错

package com.product.vo;

public class Produce {

  private Integer id; 
  private String name;
  private String lx;  //类型的简拼
  private Integer price;
  private String yn; //yes or no 的简写
  private String note;
  //数据库中建表product  的六个字段 分别也声明为 id   name   lx price  yn  note
  //其中id设置为了主键标识自增为1
public Integer getId() {
  return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
	return name;
 }
 public void setName(String name) {
this.name = name;
}
public String getLx() {
return lx;
}
public void setLx(String lx) {
this.lx = lx;
}
public Integer getPrice() {
	return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public String getYn() {
return yn;
}
public void setYn(String yn) {
this.yn = yn;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
 }

 }

4.创建一个com.product.dbservice包,包下创建DBservice类
用来连接数据库

package com.product.dbservice;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//这里封装一个连接数据库的类,以后用的话直接拿去用不需要再写
public class DBservice {
private final String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//连接数据库2018DB,当然这里数据库命名有点不规范,尽量别让数字开头,易出错
private final String url = "jdbc:sqlserver://localhost:1433;DatabaseName=2018DB";
private final String userName = "sa";
private final String password = "123456";
private static DBservice dbservice = null;
private static Connection conn = null;
private DBservice() {
}
public static DBservice getInstance() {
	if (null == dbservice) {
		dbservice = new DBservice();
	}
	return dbservice;
}

    

private Connection getConnection() {
	try {
		Class.forName(driver);
		conn = DriverManager.getConnection(url, userName, password);
	} catch (ClassNotFoundException e) {
		System.out.println(e.getMessage());
	} catch (SQLException e) {
		System.out.println(e.getMessage());
	}
	return conn;
}
 
public int exeUpdateSql(String sqlstr) {

	int result = -100;
    if(null==conn){
	  conn = this.getConnection();
    }
	try {
		Statement stmt = conn.createStatement();
		result = stmt.executeUpdate(sqlstr);
		stmt.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return result;
}

 	public List<Map> executeSelect(String sqlstr) {

	List<Map> result = new ArrayList<Map>();

	if(null==conn)conn = this.getConnection();

	Statement stmt;
	try {
		stmt = conn.createStatement();
		ResultSet rs = stmt.executeQuery(sqlstr);
		ResultSetMetaData rmd = rs.getMetaData();
		while (rs.next()) {
			Map<String, String> map = new HashMap<String, String>();
			for (int ii = 1; ii <= rmd.getColumnCount(); ii++) {
				map.put(rmd.getColumnName(ii),
						rs.getString(rmd.getColumnName(ii)));
			}
			result.add(map);
		}
       stmt.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return result;
}
}

5.创建一个com.product.dao包,包下创建ProduceDao 接口

package com.product.dao;
import java.util.List;
import com.product.vo.Produce;

//创建一个接口
public interface ProduceDao {
 //抽象方法add
public void add(Produce p);

public void update(Produce p);

public void delete(Produce p);

public List<Produce> query(String where);
}

6.创建一个com.product.dao.impl包,包下创建IProduceDao类实现ProduceDao接口

package com.product.dao.impl;  
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.product.dao.ProduceDao;
import com.product.dbservice.DBservice;
import com.product.vo.Produce;

public class IProduceDao implements ProduceDao {
 public void add(Produce p) {
    //拼接sql语句
	String sql="insert into product (name,lx,price,yn,note) values(";
    sql=sql+"'"+p.getName()+"',";
    sql=sql+"'"+p.getLx()+"',";
    sql=sql+"'"+p.getPrice()+"',";
    sql=sql+"'"+p.getYn()+"',";
    sql=sql+"'"+p.getNote()+"')";
    //获取对象
    DBservice dbservice=DBservice.getInstance();
    //调用方法执行sql语句
    dbservice.exeUpdateSql(sql);
	
}

public void update(Produce p) {
 String sql="update product set ";
 sql=sql+"name='"+p.getName()+"',";
 sql=sql+"lx='"+p.getLx()+"',";
 sql=sql+"price='"+p.getPrice()+"',";
 sql=sql+"yn='"+p.getYn()+"',";
 sql=sql+"note='"+p.getNote()+"',";
 sql=sql+"where id= "+p.getId();
 DBservice dbservice=DBservice.getInstance();
 dbservice.exeUpdateSql(sql);
}

public void delete(Produce p) {
	String sql="delete from product where id ="+p.getId();
	
	DBservice dbservice=DBservice.getInstance();
    dbservice.exeUpdateSql(sql);
}

public List<Produce> query(String where) {
	 List<Produce> result=new ArrayList<Produce>();
	 DBservice dbservice=DBservice.getInstance();
	 String sql="select * from product ";
	 if(!"".equals(where)){
		 sql=sql+" where "+where;
	 }
	 List<Map>list=dbservice.executeSelect(sql);  
	 for(Map map:list){ 		  
	 Produce p=new Produce();
	 p.setId(Integer.parseInt( map.get("id").toString()));
	 p.setName(map.get("name").toString());
	 p.setLx(map.get("lx").toString());
	 p.setPrice(Integer.parseInt(map.get("price").toString()));
	 p.setYn(map.get("yn").toString());
	 p.setNote(map.get("note").toString());
	 result.add(p);
	 }
	return result;
}

}

7.创建一个com.product.service包,包下创建ProduceService 接口

 package com.product.service;

 import java.util.List;

import com.product.vo.Produce;

public  interface ProduceService {

public void add(Produce stu);

public void up(Produce stu);

public void delete(Integer id);
//增加了一个根据id查找产品的抽象方法
public Produce find(Integer id);

public List<Produce> getlist(String where);

}

8.创建一个com.product.service.impl包,包下创建IProduceService类实现ProduceService 接口

package com.product.service.impl;

import java.util.List;
import com.product.dao.ProduceDao;
import com.product.dao.impl.IProduceDao;
import com.product.service.ProduceService;
import com.product.vo.Produce;

public class IProduceService implements ProduceService{
 ProduceDao dao=new IProduceDao();
 public void add(Produce p) {
	// TODO Auto-generated method stub
	dao.add(p);
}

public void up(Produce p) {
	// TODO Auto-generated method stub
	dao.update(p);
}

public void delete(Integer id) {
	// TODO Auto-generated method stub
	dao.delete(this.find(id));
}
//这个方法其实可以在dao层里完成实现在这直接调用,当然在这里也是可以完成实现的
public Produce find(Integer id) {
 String where= "id="+id;
 List<Produce>list=dao.query(where);
 if(list.size()>0){
	return list.get(0);
 }else{
	return null;
 }
}

public List<Produce> getlist(String where) {
	 		return dao.query(where);
}

}

9.创建一个com.product.servlet 包,包下创建ProductServlet 类实继承自HttpServlet类
该类是用来获取后台数据空中的数据,并且发送到前端页面中进行展示

package com.product.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;
import com.product.vo.Produce;

public class ProductServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
 	   throws ServletException, IOException {
       //这里重写doGet方法
	   //创建一个ProduceService对象
       ProduceService service=new IProduceService();    
       //调用 其中的方法进行查询全部数据
	   List<Produce>list= service.getlist("");
	   //将集合list放在produce中进行发送
	   request.setAttribute("produce", list);
	   //请求转发到produce目录下的Pro.jsp中
       //pro.jsp该页面是用来展示后台数据库中的所有数据        
       request.getRequestDispatcher("produce/pro.jsp").forward(request, response);

}


  public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
      this.doGet(request, response);
}

}

10.创建一个com.product.servlet 包,包下创建AddProduceServlet 类实继承自HttpServlet 类

package com.product.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;
import com.product.vo.Produce;

public class AddProduceServlet extends HttpServlet { 
public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {  
    this.doPost(request,response);
} 
public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
     //这里重写doPost方法
 
  //先设置字符集,防止出现乱码问题
	 response.setContentType("text/html");
	 response.setCharacterEncoding("UTF-8");
	 request.setCharacterEncoding("UTF-8");
	 //获取前端控件中的数据
   //由于数据库中表中的id设置为标识自增,不需要手动赋值
	 String name=request.getParameter("name");
     String lx=request.getParameter("lx");
     String price=request.getParameter("price");
     
     String yn=request.getParameter("yn");
     String note=request.getParameter("note");
      //调用ProduceService中的方法
        ProduceService  service=new  IProduceService();
        Produce  p=new Produce();		
		//将接收到的前端的值传入Produce对象中去
        p.setPrice(Integer.parseInt(price));
		p.setLx(lx);
		p.setName(name);
		p.setNote(note);
		p.setYn(yn); 
		//调用add方法将数据放到数据库中
		service.add(p);	
		//重定向(页面跳转)到ProduceServlet
		response.sendRedirect("ProductServlet");
	
}

}

11.创建一个com.product.servlet 包,包下创建FindProduceServlet类实继承自HttpServlet 类

package com.product.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;
import com.product.vo.Produce;

public class FindProduceServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
    //获取id
	String id=request.getParameter("id");
	ProduceService service=new IProduceService();
    //调用方法传入获取的id
    Produce pro=service.find(Integer.parseInt(id));
    //将得到的数据放大produce中
	request.setAttribute("produce", pro);
	
    //转发到produce目录下的up.jsp进行展示	   
    request.getRequestDispatcher("produce/up.jsp").forward(request, response);
} 
public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
     this.doGet(request, response);
}

}

12.创建一个com.product.servlet 包,包下创建UpProduceServlet 类实继承自HttpServlet 类

package com.product.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;
import com.product.vo.Produce;

public class UpProduceServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
   //牵扯到操作数据库要先设置字符集问题
 response.setContentType("text/html");		
 response.setCharacterEncoding("UTF-8");
 request.setCharacterEncoding("UTF-8");
 	 
	String id=request.getParameter("id");
	String name=request.getParameter("name");
	String lx=request.getParameter("lx");
	String price=request.getParameter("price");
	String yn=request.getParameter("yn");
	String Note=request.getParameter("note");
	
	ProduceService service=new IProduceService();
	Produce p=new Produce();
  //这里id不做修改,直接获取到后在方法后台数据库中
	p.setId(Integer.parseInt(id));
	p.setName(name);
	p.setLx(lx);
	p.setYn(yn);
	p.setPrice(Integer.parseInt(price));
	p.setNote(Note);
	//这里调用的是up方法
	service.up(p);	
//重定向		
response.sendRedirect("ProductServlet");
}	 
public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
        this.doGet(request, response);
	 
}

}

13.创建一个com.product.servlet 包,包下创建DelProduceServlet类实继承自HttpServlet 类

package com.product.servlet;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;

public class DelProduceServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {

	String id=request.getParameter("id"); 
    ProduceService service=new IProduceService();
	service.delete(Integer.parseInt(id));
	//重定向
	response.sendRedirect("ProductServlet");
 
}

 
public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
            this.doGet(request, response);
}

}

14在WebRoot目录下,创建一个produce文件夹放视图文件

在WebRoot目录下的WEB-INF下的web.xml中配置Servlet信息
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ProductServlet</servlet-name>
<servlet-class>com.product.servlet.ProductServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>FindProduceServlet</servlet-name>
<servlet-class>com.product.servlet.FindProduceServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>DelProduceServlet</servlet-name>
<servlet-class>com.product.servlet.DelProduceServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>AddProduceServlet</servlet-name>
<servlet-class>com.product.servlet.AddProduceServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UpProduceServlet</servlet-name>
<servlet-class>com.product.servlet.UpProduceServlet</servlet-class>
</servlet>





<servlet-mapping>
<servlet-name>ProductServlet</servlet-name>
<url-pattern>/ProductServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FindProduceServlet</servlet-name>
<url-pattern>/FindProduceServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DelProduceServlet</servlet-name>
<url-pattern>/DelProduceServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddProduceServlet</servlet-name>
<url-pattern>/AddProduceServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UpProduceServlet</servlet-name>
<url-pattern>/UpProduceServlet</url-pattern>
</servlet-mapping>


<!-- 当只访问工程名时,会直接跳转到ProductServlet这 --> 
<welcome-file-list>
<welcome-file>ProductServlet</welcome-file>
</welcome-file-list>
</web-app>

Pro.jsp页面是用来展示所有后台数据的
Produce.jsp是增减产品信息的页面,有前端页面点击事件,进行页面跳转.
up.jsp页面是修改数据页面

Pro.jsp

<%@ page language="java" import="java.util.*,com.product.vo.Produce" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
<base href="<%=basePath%>">

<title>My JSP 'pro.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<%List<Produce> list=(List<Produce>)request.getAttribute("produce"); %>
</head>  
<body>
<!--创建表格-->
This is my JSP page. <br>
<center>
<h1>商品展示</h1>   
<table width="100%"  border="3px" cellpadding="1" cellspacing="1">
<tr>
   <td align="center" height="57px">序号</td>
   <td align="center">商品名称</td>
   <td align="center">商品类型</td>
   <td align="center">商品价格</td>
   <td align="center">是否畅销</td>      
   <td align="center">说明</td>
   <td align="center">
    <a href="produce/produce.jsp">增加</a>
   </td>
 </tr>
 <!-- 接着是循环输出产品信息 -->
 <%
 int i=0;
 for(Produce pro :list){
 i=i+1;     
  %>
  <tr>
  <td align="center" height="57px"><%=i %></td>
  <td align="center"><%= pro.getName() %></td>
  <td align="center"><%=pro.getLx() %></td>
  <td align="center"><%= pro.getPrice() %></td>
  <td align="center"><%=pro.getYn() %></td>
  <td align="center"><%=pro.getNote() %></td>
  <td align="center">
             <a href="FindProduceServlet?id=<%=pro.getId()%>">修改 </a>   
             <a href="DelProduceServlet?id=<%=pro.getId()%>" onclick="return confirm('Are you sure to delete it ???')">删除</a>                    
   </td>
 </tr>
  <%}%>
</table>
</center>
</body>
</html>

produce.jsp 用于增加产品信息的页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'produce.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<!-- 增加界面 -->

<h2>增加產品信息</h2>
<form action="AddProduceServlet" method="post">
产品名称:<input type="text" name="name"><br>
产品类型:<input type="text" name="lx"><br>
产品价钱:<input type="text"name="price"><br>
是否畅销: &nbsp;  是<input type="radio" name="yn" value="是"> 
&nbsp;&nbsp;&nbsp; 否<input type="radio" name="yn" value="否"><br>
产品说明:<input type="text" name="note"><br> 
<br><br>
<input type="submit" value="保存">&nbsp;&nbsp;&nbsp;
<input type="reset" value="重置"> 
</form>
</body>
</html>

up.jsp 修改产品信息的页面

<%@ page language="java" import="java.util.*,com.product.vo.Produce" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'up.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<% Produce p=(Produce)request.getAttribute("produce"); %>
</head>

<body>
<center>
<h2>修改产品信息</h2>
<form action="UpProduceServlet" method="post">
<input type="hidden" name="id" value="<%=p.getId()%>">
 <table width="60%" border="1" cellpadding="0" cellspacing="0">
 <tr>
    <td style="height: 50px;text-align: center;">產品名稱</td>
    <td><input type="text" name="name" value="<%=p.getName()%>"></td>
   </tr>
   <tr>
    <td style="height: 50px;text-align: center;">產品類型</td>
    <td><input type="text" name="name" value="<%=p.getLx()%>"></td>
   </tr>
   <tr>
    <td style="height: 50px;text-align: center;">產品價格</td>
    <td><input type="text" name="name" value="<%=p.getPrice()%>"></td>
   </tr>
   <tr>
    <td style="height: 37px;text-align: center;">是否暢銷</td>
    <td>
       <%if("是".equals(p.getYn())){%>
                               是<input type="radio" name="yn" value="是" checked="checked" >
        <%}else{%>
                               是<input type="radio" name="yn" value="是">
        <%}%>
    
    <%if("否".equals(p.getYn())){%>
                               否<input type="radio" name="yn" value="否" checked="checked" >
        <%}else{%>
                               否<input type="radio" name="yn" value="否">
        <%}%>
    </td>
   </tr>
    <tr>
    <td style="height: 50px;text-align: center;">商品說明</td>
    <td><input type="text" name="name" value="<%=p.getNote()%>"></td>
   </tr>
 </table>
 <br><br>
    <input type="submit" value="保         存" >  
</form>
</center>
</body>
</html>

15 .输入http://localhost:端口号/工程名/对应的Servlet类 or 某.jsp页面
例如: 输入http://localhost:9999/Product/ProductServlet

当然这里也可以直接访问工程名:http://localhost:9999/Product 在web.xml设置了默认跳转到ProductServlet

这里是展示所有产品数据的信息
在这里插入图片描述

点击添加按钮
在这里插入图片描述

跳转到添加产品信息的页面
在这里插入图片描述

添加相应的产品信息
在这里插入图片描述

信息添加成功
在这里插入图片描述
单击修改按钮
在这里插入图片描述
在这里插入图片描述
修改产品信息
在这里插入图片描述
修改成功

在这里插入图片描述

点击删除按钮

在这里插入图片描述
删除成功

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值