后台管理系统

2.课程设计内容和要求
首先先确定功能,创建数据库、数据表。
功能要求:注册、登录、注销、对数据库中数据的增删改查。
开发项目所需环境及软件:jdk、tomcat、oracle、plsql、idea。
准备jar包。
设置编码。
设置idea工作空间编码。
tomcat服务器编码。
jsp页面编码。
数据库编码。
实训提交内容。
项目源代码。
数据库的结构和数据。
实训报告。

3 系统需求分析
使用SSM框架完成项目构建
配置Tomcat服务器,部署Web项目
使用idea工具开发项目
使用maven管理项目
使用EL和JSTL显示页面内容
使用js操作页面元素完成交互效果

3.1 系统目标
注册
登录
商品展示
加入购物车
修改购物车中商品数量
删除购物车中商品
更新商品的信息

3.2 主体功能
对项目进行登录注册和增删改查
3.3 开发环境
JDK1.8 + Web + SSM + JS/jQuery + Ajax

4 系统总体设计
4.1 系统的功能模块划分
登录模块
注册模块
分页模块
更新模块
删除模块
添加模块
注销模块
4.2 系统流程图

4.3 数据库和表

5系统详细设计
5.1配置文件
第一步配置applicationcontext文件

<?xml version="1.0" encoding="UTF-8"?>

<!--开启注解扫描-->
<context:component-scan base-package="sm.service"></context:component-scan>
<!--0......创建数据库连接信息-->
<context:property-placeholder location="classpath:sm/config/jdbc.properties"></context:property-placeholder>
<!--1......创建数据源,连接数据库-->
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${name}"/>
    <property name="password" value="tiger"/>
</bean>
<!--2.......创建SqlSession工厂对象-->
<bean id="sqlsessionfactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--注入数据源-->
    <property name="dataSource" ref="datasource"/>
    <!--指定mapper文件路径-->
    <property name="mapperLocations">
        <list>
            <value>classpath:sm/dao/*Mapper.xml</value>
        </list>
    </property>
</bean>
<!--自********************动*******************装****************配-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="sm.dao"></property>
</bean>
<bean id="MyInterceptorinsert" class="sm.aop.MyInterceptorinsert"/>
<aop:config>
    <aop:pointcut id="productserviceimplinsertcut" expression="@annotation(sm.aop.Annotationinsert)"/><!--插入功能区切入点-->
    <aop:advisor advice-ref="MyInterceptorinsert" pointcut-ref="productserviceimplinsertcut"/> <!--编织,实现对插入功能区增强-->
</aop:config>
<bean id="Myinterceptorupdate" class="sm.aop.Myinterceptorupdate"/>
<aop:config>
    <aop:pointcut id="productserviceimplupdatecut" expression="@annotation(sm.aop.Annotationupdate)"/>
    <aop:advisor advice-ref="Myinterceptorupdate" pointcut-ref="productserviceimplupdatecut"/>
</aop:config>
<bean id="Myinterceptordelete" class="sm.aop.Myinterceptordelete"/>
<aop:config>
    <aop:pointcut id="productserviceimpldeletecut" expression="@annotation(sm.aop.Annotationdelete)"/>
    <aop:advisor advice-ref="Myinterceptordelete" pointcut-ref="productserviceimpldeletecut"/>
</aop:config>
</beans>

第二步配置jdbc.properties文件
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
name=scott
password=tiger
第三部配置springMVC-servlet.xml文件

<?xml version="1.0" encoding="UTF-8"?>



<context:component-scan base-package=“sm.controller”></context:component-scan>






mvc:annotation-driven
mvc:message-converters

</mvc:message-converters>
</mvc:annotation-driven>
<!–mvc:interceptorsOracle - @localhost
mvc:interceptor
<mvc:mapping path="/admin/**"/>

        <bean class="sm.Interceptor.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>-->
第四步配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> /admin/login.jsp contextConfigLocation classpath:applicationContext.xml org.springframework.web.context.ContextLoaderListener springMVC org.springframework.web.servlet.DispatcherServlet
<!--指定springmvc的配置文件位置-->
<init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:springMVC-servlet.xml</param-value>
</init-param>
<!--在服务器启动时,实例化servlet对象-->
<load-on-startup>1</load-on-startup>
springMVC *.do characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 forceEncoding true characterEncodingFilter /* 第五步配置UserlMapper.xml文件进行注册和登录以及ProductMapper.xml文件进行对商品的增删改查。 1.UserlMapper.xml.文件 <?xml version="1.0" encoding="UTF-8" ?> InsertintoUserL values(seq_UserL.nextval,#{uname},#{upwd},#{salt}) select * from UserL uname=#{uname} and upwd=#{upwd} 2.ProductMapper.xml文件 <?xml version="1.0" encoding="UTF-8" ?> select * from product where pro_id=#{proId} select * from product insert into product (pro_id,pro_name,pro_price,pro_count) values(seq_pro_id.nextval,#{proName},#{proPrice},#{proCount}) update product pro_name=#{proName}, pro_price=#{proPrice}, pro_count=#{proCount}, where pro_id=#{proId} delete from product where pro_id=#{proId} select*from (select rownum rn,t.*from product t) where rn < #{end} and rn>#{first} select count(*) from product

第六步配置UserlMapper.xml和ProductMapper.xml文件对应商品的实体类。
1.Userl实体类
package sm.entity;

/**

  • @author ldf

  • @author2021/5/17-17:50
    */
    public class UserL {
    private int id;
    private String uname;
    private String upwd;
    private String salt;

    public int getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }

    public String getUname() {
    return uname;
    }

    public void setUname(String uname) {
    this.uname = uname;
    }

    public String getUpwd() {
    return upwd;
    }

    public void setUpwd(String upwd) {
    this.upwd = upwd;
    }

    public String getSalt() {
    return salt;
    }

    public void setSalt(String salt) {
    this.salt = salt;
    }
    public UserL( String uname, String upwd, String salt) {
    this.uname = uname;
    this.upwd = upwd;
    this.salt = salt;
    }

    public UserL(int id, String uname, String upwd, String salt) {
    this.id = id;
    this.uname = uname;
    this.upwd = upwd;
    this.salt = salt;
    }

    public UserL() {
    super();
    }

    @Override
    public String toString() {
    return “UserL{” +
    “id=” + id +
    “, uname=’” + uname + ‘’’ +
    “, upwd=’” + upwd + ‘’’ +
    “, salt=’” + salt + ‘’’ +
    ‘}’;
    }
    }

2.ProductMapper实体类

package sm.entity;

import java.io.Serializable;
import java.sql.Date;

/**

  • @author ldf

  • @author2021/4/29-11:29
    */
    public class Product implements Serializable{
    private int proId;
    private String proName;
    private int proPrice;
    private int proCount;
    private Date proCreateDate;

    public int getProId() {
    return proId;
    }

    public void setProId(int proId) {
    this.proId = proId;
    }

    public String getProName() {
    return proName;
    }

    public void setProName(String proName) {
    this.proName = proName;
    }

    public int getProPrice() {
    return proPrice;
    }

    public void setProPrice(int proPrice) {
    this.proPrice = proPrice;
    }

    public int getProCount() {
    return proCount;
    }

    public void setProCount(int proCount) {
    this.proCount = proCount;
    }

    public Date getProCreateDate() {
    return proCreateDate;
    }

    public void setProCreateDate(Date proCreateDate) {this.proCreateDate = proCreateDate;}

    public Product(int proId, String proName, int proPrice, int proCount, Date proCreateDate) {
    this.proId = proId;
    this.proName = proName;
    this.proPrice = proPrice;
    this.proCount = proCount;
    this.proCreateDate = proCreateDate;
    }
    public Product(String proName, int proPrice, int proCount, int proId) {
    this.proId = proId;
    this.proName = proName;
    this.proPrice = proPrice;
    this.proCount = proCount;
    }
    public Product(String proName, int proPrice, int proCount) {
    this.proName = proName;
    this.proPrice = proPrice;
    this.proCount = proCount;
    }

    public Product() {
    super();
    }

    @Override
    public String toString() {
    return “Product{” +
    “proId=” + proId +
    “, proName=’” + proName + ‘’’ +
    “, proPrice=” + proPrice +
    “, proCount=” + proCount +
    “, proCreateDate=” + proCreateDate +
    ‘}’;
    }
    }

5.2 登录模块设计

登录页面效果图

登录页面效果图实现代码

1)dao层
public interface IUserLDao {
List selectListdao(@Param(“uname”) String uname, @Param(“upwd”) String upwd);//查询所有的用户
}
2)Service实现层
/**

  • @author ldf

  • @author2021/5/17-18:18
    */
    @Service
    public class UserLserviceimpl implements IUserLservice {
    @Autowired
    private IUserLDao idao;//自动装配

    @Override//查看所有用户
    public List selectListdaoservice(@Param(“uname”) String uname, @Param(“upwd”) String upwd) {
    return idao.selectListdao(uname,upwd);
    }
    }
    3)控制层controller层代码
    @RequestMapping("/client/checklogin")
    @ResponseBody
    public boolean checklogin(HttpServletResponse response, @RequestParam(“uname”) String uname, @RequestParam(“upwd”) String upwd, HttpSession session) throws IOException {
    //具体逻辑 返回一个结果 true false 0 1
    boolean str = false;//标记
    List userList = iUserLservice.selectListdaoservice(uname.trim(),null);
    if(userList.size()>0){//用户名存在
    //获取盐值
    String salt = userList.get(0).getSalt();
    //拼接 盐值+输入密码
    String password = salt + upwd.trim();
    System.out.println(password);
    //如果存在 对输入的密码进行md5加密
    String s = DigestUtils.md5Hex(password);
    //对比加盐后的输入密码 与 数据库中的密文密码
    if(s.equals(userList.get(0).getUpwd())){
    Cookie cookie=new Cookie(“MvcCookic”,uname.trim());
    cookie.setMaxAge(5*60);
    response.addCookie(cookie);
    //保存数据 参数传递
    session.setAttribute(“uname”,userList.get(0).getUname());
    int pageindex=1;//当前页
    int pagesize=5;//页面大小;
    int count=iProductservice.countservice();//数据总数
    int pagecount=count/pagesize;//总页数
    if (count<pagesize){
    pageindex=1;//当前页
    pagesize=count;
    }
    if (count%pagesize<pagesize){
    if (count%pagesize==0){
    pagecount=count/pagesize;//刚刚好
    }else{
    pagecount=(count/pagesize)+1;//多一页
    }
    }
    List productslist = iProductservice.QueryPageUsersservice(pageindex,pagesize);
    //保存数据 参数传递
    session.setAttribute(“pagecount”,pagecount);
    session.setAttribute(“productslist”, productslist);
    session.setAttribute(“pageindex”,pageindex);
    session.setAttribute(“pagesize”,pagesize);
    str = true;
    }
    }
    return str;
    }

登录功能jsp代码
<%@page contentType=“text/html;charset=UTF-8” language=“java” %>

登录

lOGIN

登录

5.3 用户注册模块设计
注册页面效果图

注册页面效果图实现代码
1)dao层
public interface IUserLDao {
int insertDao(UserL userL);//注册用户
}

2)Service层
@Service
public class UserLserviceimpl implements IUserLservice {
@Autowired
private IUserLDao idao;//自动装配
//注册用户
@Override
public int insertDaoservice(UserL userL) {
return idao.insertDao(userL);
}
}

3)Controller层注册逻辑
@RequestMapping("/client/checkregist")
@ResponseBody
public boolean regist(HttpServletRequest request, HttpSession session , String uname,String upwd){
boolean str = false;//标记
RandomCharacters rr= new RandomCharacters();
String jy=rr.getRandomString(5);
System.out.println("注册加盐 = " + jy);
String upwdjy=jy+upwd;
UserL us=new UserL(uname, DigestUtils.md5Hex(upwdjy),jy);
int userL2 = iUserLservice.insertDaoservice(us);
session.setAttribute(“uname”,uname);
str=true;
return str;
}
4)Controller层注册查询用户名是否重复逻辑

@RequestMapping("/client/checkonly")
@ResponseBody
public boolean checkonly (HttpServletRequest req, HttpServletResponse resp, @RequestParam(“Admin”) String Admin, HttpSession session) throws ServletException, IOException {
boolean str = false;//标记
List userList = iUserLservice.selectListdaoservice(Admin,null);
if(userList.size()>0) {//用户名存在//
// 4、将检验结果返回给浏览器(响应Ajax请求)
System.out.println(“已找到重复名”);
return str;
} else{
str=true;
return str;
}

}

注册功能页面jsp代码
<%@page contentType=“text/html;charset=UTF-8” language=“java”%>

regist

REGIST

注册提交

//用户唯一验证
function checkUname() {
let reg = /1{2,6} / ; v a r A d m i n = /; var Admin= /;varAdmin=("#account").val();
if (!reg.test(Admin)|| Admin==’’) {
$("#tips").text(“请输入2~6位中文”).css(“color”,"#CCC")
return false;
} else{
//jquery集成ajax
console.log(Admin);
console.log(“ajax”)
KaTeX parse error: Expected '}', got 'EOF' at end of input: … url:"{pageContext.request.contextPath}/client/checkonly.do",//请求地址
data:{“Admin”: Admin},
success: function (data) {//服务器成功处理请求后的回调函数
console.log(“返回的数据” + data);
//判断返回的数据
if (datatrue) {
//在页面上显示数据
$("#tips").text(“用户名可以注册”).css(“color”,"#CCC")
unameUnique= true;
} else {
//在页面上显示数据
$("#tips").text(“用户名重复”).css(“color”,"#CCC")
return false;
}
},
error: function (xhr) {//服务器未成功处理请求后的回调函数
console.log(“失败信息” + xhr.responseText);
},
dataType: “json” //服务器响应的数据格式
});
}
}
//密码验证
function pwdCheck() {
let reg = /2{6,12}/;
let pwd = $("#realname").val();
if(!reg.test(pwd) || pwd
’’){
$("#tips1").text(“请输入6-12位密码”).css(“color”,"#CCC")
return false;
}else{
$("#tips1").text(“密码可用”).css(“color”,"#CCC")
return true;
}
}
//确认密码验证
function pwdSure() {
let reg = /3{6,12}/;
let pasd= KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲pasd").val(); …("#realname").val() === $("#pasd").val() && $("#pasd").val()!=’’) {
$("#tips2").text(“确认密码正确”).css(“color”,"#CCC")
return true;
} else {
$("#tips2").text(“密码请保持一致或者不可为空”).css(“color”,"#CCC")
return false;
}
}

//提交注册
function checkregist() {
var uname = $("#account").val();
var upwd = $("#realname").val();
//jquery集成ajax
KaTeX parse error: Expected '}', got 'EOF' at end of input: …x({ url: "{pageContext.request.contextPath}/client/checkregist.do",//请求地址
type: “post”,//请求方式
data: {“uname”: uname, “upwd”: upwd},
success: function (data) {//服务器成功处理请求后的回调函数
if(data){
window.location.href = “${pageContext.request.contextPath}/admin/registsuccess.jsp”;
}else {
alert(“请重新注册”);
}
},
error: function (xhr) {//服务器未成功处理请求后的回调函数
console.log(“失败信息” + xhr.responseText);
},
dataType: “json” //服务器响应的数据格式
});
}

5.4 后台显示和分页模块设计 登录后后台显示商品页面效果图

登录后台显示商品并分页显示页面效果图实现代码
1)dao层
public interface IProductDao {
List selectProductDaoall();//查询所有的商品
ListQueryPageUsers(@Param(“end”) int end, @Param(“first”) int first);//分页显示
int count();//查询商品数据总数

}
2)Service层
public List selectProductDaoserviceall() {
return dao.selectProductDaoall();
}
public List QueryPageUsersservice(int pageindex, int pagesize) {//查询指定数据
int end= pageindex*pagesize+1;
int first=(pageindex-1)*pagesize;
return dao.QueryPageUsers(end,first);}
public int countservice() {
return dao.count();//查询商品表中的数据总数
}

3)Controller层
@RequestMapping("/client/showbypage")
public String showbypage(HttpServletRequest request ,HttpSession session ){
int index = Integer.parseInt(request.getParameter(“index”));
int pagesize= Integer.parseInt(request.getParameter(“size”));//页面大小;
int count=iProductservice.countservice();//数据总数
int pageindex;//当前页
int pagecount=count/pagesize;//总页数
if (count<pagesize){
pagesize=count;
}
if (count%pagesize<pagesize){
if (count%pagesize==0){
pagecount=count/pagesize;//刚刚好
}else{
pagecount=(count/pagesize)+1;//多一页
}
}
System.out.println(“当前页”+index+“页面大小”+pagesize);
System.out.println(“AllController.showbypage”);
if (index<1){
pageindex=1;
List productslist = iProductservice.QueryPageUsersservice(pageindex,pagesize);
//保存数据 参数传递
session.setAttribute(“pagecount”,pagecount);
session.setAttribute(“productslist”, productslist);
session.setAttribute(“pageindex”,pageindex);
session.setAttribute(“pagesize”,pagesize);
return “redirect:/admin/loginsuccess.jsp”;
}else if(index>pagecount){
pageindex=pagecount;
List productslist = iProductservice.QueryPageUsersservice( pageindex,pagesize);
//保存数据 参数传递
session.setAttribute(“pagecount”,pagecount);
session.setAttribute(“productslist”, productslist);
session.setAttribute(“pageindex”,pageindex);
session.setAttribute(“pagesize”,pagesize);
return “redirect:/admin/loginsuccess.jsp”;
}else {
pageindex=index;
List productslist = iProductservice.QueryPageUsersservice( pageindex,pagesize);
//保存数据 参数传递
session.setAttribute(“pagecount”,pagecount);
session.setAttribute(“productslist”, productslist);
session.setAttribute(“pageindex”,pageindex);
session.setAttribute(“pagesize”,pagesize);
return “redirect:/admin/loginsuccess.jsp”;
}
}

后台分页页页面jsp代码

编号名称数量价格时间更新操纵删除操纵
更新删除
当前页:${pageindex} 每页条数:${pagesize} 总页数:${pagecount} 首页 上一页 下一页 尾页 添加
5.5 商品添加模块设计 商品添加页面效果图

商品添加页面效果图实现代码
1)dao层
int insertProductDao(@Param(“proName”) String proName, @Param(“proPrice”) int proPrice, @Param(“proCount”) int proCount);//添加
2)Service层
public int insertProductDaoservice(String proName, int proPrice, int proCount) {
return dao.insertProductDao(proName,proPrice,proCount);}
3)Controller层
@RequestMapping("/client/addmvc")
public String add(HttpServletRequest request ,HttpSession session){
String proname = request.getParameter(“proname”);;
int procount = Integer.parseInt(request.getParameter(“procount”));
int proprice= Integer.parseInt(request.getParameter(“proprice”));
int i = iProductservice.insertProductDaoservice(proname, proprice, procount);
System.out.println("add = " + i);
return “redirect:/admin/Addsuccess.jsp”;
}
商品添加页页面jsp代码
<%–
Created by IntelliJ IDEA.
User: F
Date: 2021/5/24
Time: 18:37
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

添加页 名称:
数量:
价格:
5.6 商品删除模块设计 商品删除页面效果图

商品删除页面效果图实现代码
1)dao层
int deleteProductDao(@Param(“proId”) int proId);//删除商品
2)Service层
public int deleteProductDaoservice( int proId) {
return dao.deleteProductDao(proId);
}
3)Controller层
@RequestMapping("/client/deletemvc")
public String delete(@RequestParam(“uid”) Integer uid, HttpServletRequest request , HttpSession session){
System.out.println("uid = " +uid );
int i = iProductservice.deleteProductDaoservice(uid);
int pageindex = Integer.parseInt(request.getParameter(“index”));//当前页
int pagesize= Integer.parseInt(request.getParameter(“size”));//页面大小;
int count=iProductservice.countservice();//数据总数
int pagecount=count/pagesize;//总页数
if (count<pagesize){
if(count0){
return “redirect:/admin/deletenone.jsp”;
}
pagesize=count;
}
if (count%pagesize<pagesize){
if (count%pagesize
0){
pagecount=count/pagesize;//刚刚好
}else{
pagecount=(count/pagesize)+1;//多一页
}
}
List productslist = iProductservice.QueryPageUsersservice(pageindex, pagesize);
//保存数据 参数传递
session.setAttribute(“pagecount”,pagecount);
session.setAttribute(“pageindex”,pageindex);
session.setAttribute(“pagesize”,pagesize);
session.setAttribute(“productslist”, productslist);
return “redirect:/admin/loginsuccess.jsp”;
}
商品删除页页面jsp代码

删除 5.7 商品更新模块设计 商品更新页面效果图

商品更新页面效果图实现代码
1)dao层
int updateProductDao(Product product);//修改商品
2)Service层
public int updateProductDaoservice(Product productupdate) {
return dao.updateProductDao(productupdate);
}
3)Controller层
@RequestMapping("/client/updatemvc")
public String update(@RequestParam(“uid”) Integer uid,HttpServletRequest request ,HttpSession session){
System.out.println(“uid2 = " +uid );
int index = Integer.parseInt(request.getParameter(“index”));
int size= Integer.parseInt(request.getParameter(“size”));//页面大小;
List productsupdate = iProductservice.selectProductDaoid(uid);
//保存数据 参数传递
session.setAttribute(“pageindex”,index);
session.setAttribute(“pagesize”,size);
session.setAttribute(“productsupdateid”, productsupdate.get(0).getProId());
session.setAttribute(“productsupdatename”, productsupdate.get(0).getProName());
session.setAttribute(“productsupdateprice”, productsupdate.get(0).getProPrice());
session.setAttribute(“productsupdatecount”, productsupdate.get(0).getProCount());
return “redirect:/admin/update.jsp”;
}
@RequestMapping(”/client/updatetwomvc")
public String updatetwo(HttpServletRequest request ,HttpSession session){
String proname = request.getParameter(“proname”);
int proid= Integer.parseInt(request.getParameter(“proid”));
int procount = Integer.parseInt(request.getParameter(“procount”));
int proprice= Integer.parseInt(request.getParameter(“proprice”));
Product productupdate=new Product(proname, proprice, procount,proid);
int i = iProductservice.updateProductDaoservice(productupdate);
int pageindex = Integer.parseInt(request.getParameter(“index”));
int size= Integer.parseInt(request.getParameter(“size”));//页面大小;
int count=iProductservice.countservice();//数据总数
int pagesize=size;//页面大小;
int pagecount=count/pagesize;//总页数
if (count<pagesize){
pagesize=count;
}
if (count%pagesize<pagesize){
if (count%pagesize==0){
pagecount=count/pagesize;//刚刚好
}else{
pagecount=(count/pagesize)+1;//多一页
}
}
List productslist = iProductservice.QueryPageUsersservice(pageindex,pagesize);
//保存数据 参数传递
session.setAttribute(“pagecount”,pagecount);
session.setAttribute(“productslist”, productslist);
session.setAttribute(“pageindex”,pageindex);
session.setAttribute(“pagesize”,pagesize);
return “redirect:/admin/loginsuccess.jsp”;
}

商品更新页页面jsp代码

更新

<%–
Created by IntelliJ IDEA.
User: F
Date: 2021/5/24
Time: 20:21
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

修改页面 编号 名称: 数量: 价格: 当前页 页面大小
  1. \u4e00-\u9fa5 ↩︎

  2. \s\S ↩︎

  3. \s\S ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值