JSP培训(14)——购物车实例(上)

jsp购物车(session版) 目录 一、要用到的 js 和 css 文件 二、数据库表+实体类+Dao类 1、数据库表 2、实体类 3、Dao类方法(GoodsDao) 四、商品主页面(index.jsp) 1、代码分析 2、完整代码 五、购物车页面(spcar.jsp) 1、代码分析 2、完整代码 3、删除方法(dodelete.jsp) session为每个浏... 阅读详情
 
目标:
l         掌握购物车的信息如何存储;
l         掌握购物车常用功能的实现。
主要内容:
l         首先分析用户上网购物的一般过程;
l         介绍采用什么样的数据结构存储购物信息;
l         编写购物界面;
l         完成向购物车添加物品的功能。
1、 用户上网购物的一般过程
在浏览物品的过程中如果对某件物品感兴趣,会添加到购物车(购物篮)中,随时可以查看购物车中的信息,如果不想要某件物品的话,可以删除,或者修改某种物品的数量,或者整个清空购物车,可以继续选择物品向购物车中添加。最后用户可以购物这些物品,经过输入个人的送货地址信息和设定交易方式之后,可以生成订单。网站的管理员可以对订单进行管理。
本实例模拟这个过程,但是进行了简化:只能在物品列表中选择物品向购物车中添加。确定购买后,不需要设置交易方式以及付款等。实际处理过程,可以使用我们前面介绍的功能完成。
2、 购物车信息组织
因为在用户访问网站的整个过程中都可以访问购物车信息,所以购物车对象应该存放在session中。
因为用户购买的物品的种类和数量都不确定,所以需要使用一个合适的数据结构存储,我们选择ArrayList。
每一种物品都涉及数量,需要进行封装,把物品和数量封装成购物项,使用Item,每个Item对应一种物品以及该种物品的数量。
需要编写物品类表示物品的基本信息。
参考代码如下:
2.1 物品类
    该类中包含两个与分页显示相关的方法。其中用到的DBBean是前面介绍的。
package javabean;
 
import java.util.ArrayList;
import java.sql.*;
 
public class Goods
{
   private String goodsid;
   private String goodsname;
   private float price;
   // 物品编号
   public void setGoodsid(String goodsid)
   {
      this.goodsid = goodsid;
   }
 
   public String getGoodsid()
   {
      return goodsid;
   }
 
   // 物品名称
   public void setGoodsname(String goodsname)
   {
      this.goodsname = goodsname;
  }
 
   public String getGoodsname()
   {
      return goodsname;
   }
 
   // 物品价格
   public void setPrice(float price)
   {
      this.price = price;
   }
 
   public float getPrice()
   {
      return price;
   }
 
       public ArrayList getGoodsByPage(int pageNo) {
              int number = 10;
              // 每一页显示的记录数
 
              int begin = (pageNo * number) - 9;
              int end = pageNo * number;
              int index = 1;
             
              DBBean db = new DBBean();
              // 要返回的结果对象
              ArrayList goods = new ArrayList();
             
              String sql = "select * from goods";
              ResultSet rs;
              try{
                     rs = db.executeQuery(sql,null);
                     while (rs.next()) {
                            // 在begin之前的记录是不显示的
                            if (index < begin) {
                                   index++;
                                   continue;
                            }
 
                            // 在end之后的记录也不显示
                            if (index > end)
                                   break;
 
                            index++;
 
                            String goodsid = rs.getString(1);
                            String goodsname = rs.getString(2);
                            float price = rs.getFloat(3);
 
                            Goods g = new Goods();
                            g.setGoodsid(goodsid);
                            g.setGoodsname(goodsname);
                            g.setPrice(price);
                            goods.add(g);
                     }
              }catch(Exception e){
                     e.printStackTrace();
              }finally{
                     db.close();
              }
              return goods;
       }
       public Goods findGoodsById(String goodsid)
        {
           try {
    
             // 编写查询数据库信息的SQL语句
             String sql = "select * from goods where goodsid=?";
             
              DBBean db = new DBBean();
             
              ArrayList params = new ArrayList();
              params.add(goodsid);
             
              ResultSet rs = db.executeQuery(sql,params);
              if(rs.next())
              {
                  //String goodsid =rs.getString(1);
                  String goodsname = rs.getString(2);
                  float price = rs.getFloat(3);
                  Goods temp = new Goods();
                  temp.setGoodsid(goodsid);
                  temp.setGoodsname(goodsname);
                  temp.setPrice(price);
                  db.close();
                  return temp;
              }else{
                  return null;
              }
          } catch (Exception e) {
             System.out.println(e.toString());
             return null;
        }
     }
       public int getPageCount() {
 
              try {
 
 
                     // 编写查询数据库信息的SQL语句
                     String sql = "select count(*) from goods";
 
                           DBBean db = new DBBean();
                        ResultSet rs=db.executeQuery(sql,null);
                        int number=0;
                        if(rs.next())
                           number = rs.getInt(1);
                        db.close();
                     return (number - 1) / 10 + 1;
                       
              } catch (Exception e) {
                     return 0;
              }
       }
}
2.2 Item类
package javabean;
 
// 购物项
public class Item
{
   private Goods goods;
   private int quantity;
 
   public Item(Goods d,int quantity)
   {
      this.goods = d;
      this.quantity = quantity;
   }
   public void setGoods(Goods goods){
      this.goods = goods;
   }
 
   public Goods getGoods()
   {
      return goods;
   }
 
   public void setQuantity(int quantity)
   {
      this.quantity = quantity;
   }
   public int getQuantity()
   {
       return quantity;
   }
}
3、 物品信息显示功能
采用MVC模式,考虑视图部分,不需要输入界面,只需要显示信息的界面。
模型部分,在前面的代码中已经实现。
控制器部分,需要编写GetAllGoods.java。
参考代码分别如下:
3.1 界面代码
文件名:goodslist.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
<c:if test="${pageNo!=1}">
       <a href="getAllGoods?pageNo=1">第一页</a>
       <a href="getAllGoods?pageNo=${pageNo-1}">上一页</a>
</c:if>
<c:if test="${pageNo!=pageCounter}">
       <a href="getAllGoods?pageNo=${pageNo+1}">下一页</a>
       <a href="getAllGoods?pageNo=${pageCounter}">最后一页</a>
</c:if>
<br>
<table width="200" border="1" height="56">
       <tbody>
              <tr>
                     <td>
                            物品编号
                     </td>
                     <td>
                            物品名称
                     </td>
                     <td>
                            物品价格
                     </td>
              </tr>
              <c:forEach var="g" items="${goods}">
                     <tr>
                            <td>
                                   ${g.goodsid}
                            </td>
                            <td>
                                   ${g.goodsname}
                            </td>
                            <td>
                                   ${g.price}
                            </td>
                            <td>
                                   <a href="addToCart?goodsid=${g.goodsid}">添加到购物车</a>
                            </td>
                     </tr>
              </c:forEach>
       </tbody>
</table>
3.2 控制器代
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
 
public class GetAllGoods extends HttpServlet
{
   public void doGet(HttpServletRequest request,HttpServletResponse response)
     throws IOException,ServletException
   {
      //response.setContentType("text/html;charset=gb2312");
      //PrintWriter out = response.getWriter();
        
      // 第一步:获取用户的输入信息
      String pageNo=request.getParameter("pageNo");
      int iPageNo=1;
      if(pageNo!=null)
      {
          iPageNo = Integer.parseInt(pageNo);
      }
 
      // 第二步:调用JavaBean
      Goods g = new Goods();
      ArrayList goods=null;
      goods = g.getGoodsByPage(iPageNo);
      int pageCount=g.getPageCount();
     
      // out.println("记录数:"+users.size());
      // out.println("当前页码:"+iPageNo);
      // out.println("总页码:"+pageCount);
     
 
      // 第三步:传值
      request.setAttribute("goods",goods);
      request.setAttribute("pageNo",new Integer(iPageNo));
      request.setAttribute("pageCounter",new Integer(pageCount));
 
      // 第四步:选择一个界面对用户进行响应
      String forward="goodslist.jsp";
 
      RequestDispatcher rd = request.getRequestDispatcher(forward);
      rd.forward(request,response);
 
   }
   public void doPost(HttpServletRequest request,HttpServletResponse response)
     throws IOException,ServletException
   {
      doGet(request,response);
   }
}
4、 显示购物车中信息
该功能直接从session中获取购物车信息,所以不需要控制器和模型部分,只需要编写显示购物车信息的JSP文件即可,文件名为cart.jsp,参考代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
购物车中的信息<br>
<table border=1>
   <tr>
      <td>物品编号</td>
      <td>物品名称</td>
      <td>价格</td>
      <td>数量</td>
   </tr>
<c:forEach var="item" items="${cart}">
   <tr>
      <td>${item.goods.goodsid}</td>
      <td>${item.goods.goodsname}</td>
      <td>${item.goods.price}</td>
      <td>${item.quantity}</td>
</c:forEach>
</table>
5、 向购物车中添加物品
采用MVC模式。
首先考虑输入和输出,添加物品的输入就是物品信息列表界面,输出应该是添加后的购物车信息界面(也可以重新回到物品信息界面),这两个界面都不需要编写。
考虑模型部分,需要编写购物车管理JavaBean,完成处理。
考虑控制器部分,需要获取用户选择的物品,然后添加到调用购物车管理Bean,完成添加。
下面是参考代码。
5.1 模型部分
文件名CartManager.java
package javabean;
 
import java.util.ArrayList;
 
public class CartManager
{
   // 表示购物车
   private ArrayList cart;
 
   public void setCart(ArrayList cart)
   {
      this.cart = cart;
   }
   public ArrayList getCart()
   {
      return cart;
   }
  
   // 添加的物品&数量
   public ArrayList addToCart(Goods g,int quantity)
   {
      if(cart==null){
         // 实例化购物车对象
         cart=new ArrayList();
 
         // 添加到购物车
         Item item = new Item(g,quantity);
         cart.add(item);
      }
      else
      {
         // 转换成数组
         Object items[] = cart.toArray();
 
         boolean find=false; // 表示是否查找到
         
         for(int i=0;i<items.length;i++)
         {
             Item temp = (Item)items[i];
             // 判断购物车中是否存在要添加的物品
             if(temp.getGoods().getGoodsid().equals(g.getGoodsid()))
             {
                temp.setQuantity(temp.getQuantity()+quantity);
                find=true;
                break;
             }
         }
         if(!find)
         {
            // 添加到购物车
            Item item = new Item(g,quantity);
             cart.add(item);
         }
      }
      return cart;
   }
}
5.2 控制器部分
文件名:AddToCart.java
package servlet;
 
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
 
public class AddToCart extends HttpServlet
{
   public void doGet(HttpServletRequest request,HttpServletResponse response)
     throws IOException,ServletException
   {
//        response.setContentType("text/html;charset=gb2312");
//        PrintWriter out = response.getWriter();
     try{
 
      // 得到要添加的物品的编号
      String goodsid = request.getParameter("goodsid");
 
 
      // 创建JavaBean对象
      CartManager cartManager=new CartManager();
      // 得到session对象
      HttpSession session = request.getSession(true);
      // 得到购物车对象
      ArrayList cart = (ArrayList)session.getAttribute("cart");
 
 
      // 用cart初始化cartManager
      cartManager.setCart(cart);
      // 构造物品对象
      Goods g = new Goods();
      g = g.findGoodsById(goodsid);
 
      // out.println(g.getGoodsid());
 
      cartManager.addToCart(g,1);
 
      // 先把购物车重新存到session
      session.setAttribute("cart",cartManager.getCart());
    }catch(Exception e){
      // out.println(e.toString());
    }
        response.sendRedirect("cart.jsp");     
   }
   public void doPost(HttpServletRequest request,HttpServletResponse response)
     throws IOException,ServletException
   {
      doGet(request,response);
   }
}
6、 Servlet的配置
web.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
<servlet>
        <servlet-name>getAllGoods</servlet-name>
        <servlet-class>servlet.GetAllGoods</servlet-class>
</servlet>
 
<servlet-mapping>
        <servlet-name>getAllGoods</servlet-name>
        <url-pattern>/getAllGoods</url-pattern>
</servlet-mapping>
 
<servlet>
        <servlet-name>addToCart</servlet-name>
        <servlet-class>servlet.AddToCart</servlet-class>
</servlet>
 
<servlet-mapping>
        <servlet-name>addToCart</servlet-name>
        <url-pattern>/addToCart</url-pattern>
</servlet-mapping>
</web-app>
7、 运行
编译所有文件,然后先访问getAllGoods Servlet,然后在物品信息界面上选择物品添加到购物车,之后就可以看到购物车中的信息了。

 

参考教材:《Java Web程序设计基础教程》

把开源 Skills 集成到 LangGraph 项目 1. 定义智能体状态(必须包含 messages,其他字段按需扩展)messages: List[HumanMessage | AIMessage | ToolMessage] # 消息流(核心)skill_output: Optional[str] # 存储 Skill 执行结果next_node: str # 控制流程跳转# 2. 定义智能体决策节点(决定是否调用 Skill)"""智能体决策逻辑:根据用户输入判断是否调用开源 Skill"""# 获取最后一条用户消息。 阅读详情

相关推荐

FairyGUI编辑器自定义菜单扩展插件

本文涉及到的软件有:FairyGUI,VSCode代码环境涉及到了:LuaVSCode插件:EmmyLua在编写FairyGUI编辑器菜单前,了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能实现的,插件中我使用的是lua环境模板。导入编辑器的LuaAPI,文件可以在FairyGUI-Editor源码的插件目录中找到。接下来将通过功能来说明对应的API作用。

Aili_Xiao的博客 4500

Java Web购物车-JSP实现

登录注册功能 login.jsp &amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot; pageEncoding=&quot;UTF-8&quot;%&amp;gt; &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &a

Co_zy的博客 3万+

科研党必备:Zotero+Deepseek 打造AI文献阅读助手(附详细插件配置指南)

本文详细介绍了如何利用Zotero和Deepseek打造AI文献阅读助手,提升科研效率。从Zotero基础安装到中文文献处理插件茉莉花的配置,再到Deepseek API的集成与模型选择策略,全面覆盖了AI辅助阅读的关键环节。特别适合需要高效管理海量文献的科研工作者,显著提升文献筛选和分析速度。

backprop5master的博客 426

jsp设计简单的购物车应用案例

接着,使用 `out.print()` 方法将 `str` 变量的值输出到页面上,并在输出的字符串末尾添加一个 `` 标签,以使得输出的内容能够在页面上换行显示。通过 `request.getParameter()` 方法获取表单中名为 `c1`、`c2` 和 `c3` 的参数的值,并将它们保存到会话对象中,分别使用 `session.setAttribute()` 方法将这些值存储到会话中的 `s1`、`s2` 和 `s3` 属性中。接着定义了一个字符串变量 `str`,并初始化为空字符串。

m0_63064861的博客 2038

Linux内核支持串口屏,linux串口触摸屏设计总结

Linux serial touch 设计总结概述:最近在做嵌入式linux下串口触摸屏设计,遇到一些问题,经过查找资料和请教同事,总算把问题解决了,事后有把linux相关的内核代码仔细看了一遍,为了有点成果,特别写了个总结。如有任何问题请联系yxj_5421@http://www.doczj.com/doc/87b94b1e227916888486d76d.html,转载请标明出处。系统资源:L...

weixin_39935903的博客 1297

AF3​​​​​​​ Msa、TemplateHit、HitMetadata类解读

Msa:处理 多序列比对 (MSA) 结果,为 AlphaFold3 提供 序列进化信息。 TemplateHit:存储 查询序列与模板结构的比对信息,用于 筛选模板。 HitMetadata:提供 比对模板的 PDB 结构信息,帮助 解析和使用模板数据。

qq_27390023的博客 819

【购物车项目】代码+页面+连接数据库

主界面 个人中心界面 , 数据库表设计 就不多说,直接上代码 他们的顺序是register.jsp→login.jsp→index.jsp→dogwc.jsp→index.jsp register.jsp和doregister.jsp <%@ page language="java" contentType="text/html; charse...

全栈 8789

一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运

本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 178

基于Java、Jsp实现购物车的功能

先看效果图: 实现代码: index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </he..

有没有料,进来看看就知道! 4895

《Zephyr OS 入门与实战》第5章:内存管理策略

【代码】《Zephyr OS 入门与实战》第5章:内存管理策略。

2301_79143213的博客 349

修改Windows hosts文件的解决方案

本文主要介绍了修改Windows hosts文件解决方案,希望能对新手有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 安装软件 2.2 修改hosts文件

weixin_43178406的博客 1万+

培训目录

李绪成的一亩三分地 1595

《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

欢迎大家订阅《Autosar从入门到精通-实战篇》,下方整理了相关博文的目录(单击蓝色字体即可跳转),方便大家获取。 本专栏旨在:扫除Autosar工具链配置过程中的障碍,加深对Autosar理论的理解。 温馨提醒: 如有疑问,可在博文的“评论区”给小编留言,进行技术交流(评论区开启了验证功能,审核通过后,会显示); 如有疑问,也可以通过博文中的第一个图片联系小编,获取专栏/博文的实时状态; 由于工作限制,仅做个人技术交流。添加好友时,请备注您的“姓名-公司-职务...

「汽车电子助手」的博客 12万+

JavaWeb(JSP+Servlet)视频课程-刘英杰-专题视频课程

通过Session实现购物车 EL表达式 JSTL标签 过滤器 监听器

l363130002的专栏 256

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

视频教程-JSP+Servlet实战视频课程-Java

JSP+Servlet实战视频课程 Java讲师,多年培训经验,曾参与开发过...

weixin_27079161的博客 438

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

视频教程-IDEA版JavaWeb从入门到精通之项目第六、七阶段第14天-Java

IDEA版JavaWeb从入门到精通之项目第六、七阶段第14天 张长志技术全...

weixin_34502057的博客 161

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

基于JSP的网上甜品买卖系统的设计与实现

近年来,随着互联网的普及和电子商务的快速发展,越来越多的传统商业活动正在向线上转移。而在线上购买甜品这一传统商业活动也受到了影响。在这种背景下,开发一款基于JSP的网上甜品买卖系统,已经成为了刚需。 本文基于B/S结构的,主要对网上甜品买卖系统的构建流程进行介绍,其主要包括需求分析、详细设计、系统实现等重要部分组成,在此基础上构建的系统可应用到实际的网上甜品买卖系统业务中。本系统的主要特点在于将JSP应用到网上甜品买卖系统中,JSP的引入可提高系统开发效率,最终实现的系统具备运行稳定易用以及实用的特点。论文

yvonneking1118的博客 1174

大本营半年总结(115篇文章)

去年9月21日加入学生大本营,今天3月21日,刚好半年。 快啊! 有太多想说的话,......,下面是这些本年来文章的目录。   1、Java基础系列   Java基础:第四十一讲 this和super Java基础:第四十讲 向上转型和强制类型转换 Java基础:第三十九讲 多态 Java基础:第三十八讲 抽象类与抽象方法 Java基础:第三十七讲 成员方法的继承与覆盖 J...

李绪成的一亩三分地 2625

视频教程-JavaWeb外卖点餐系统典型模块开发-Java

JavaWeb外卖点餐系统典型模块开发 计算机软件理论硕士毕业,有十几年企业...

weixin_34667545的博客 552

【基于Web的网上书城——开题报告 分享(仅供参考呀)

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】96道前端面试题:常用算法面试题:内容主要包括HTML,CSS,JavaScript,浏览器,性能优化。

2401_84434086的博客 722

java/jsp/ssm果蔬信息管理系统【2024年毕设】

根据以上对系统功能模块的划分和设计,可以得到系统功能模块图如图4-4所示,该图给出了详尽的模块划分和模块组织结构,能够直观展现系统的功能结构关系。springboot基于JEE平台springboot技术的订餐系统。springboot基于微信小程序的古诗词在线学习系统的设计与实现。springboot基于springboot的桌游信息管理系统。springboot基于微信小程序的Linda大学生竞赛平台。springboot基于JAVA技术的旅游信息交互系统。

光冯毕设程序 132

java/jsp/ssm疫情时期在线物资订购系统的实现【2024年毕设

管理员模块主要针对整个系统的管理进行设计,提高了管理的效率和标准。springboot基于springBoot+mybits的资源回收。springboot基于spring的物业管理系统的设计与实现。springboot基于数据可视化的云山川景点日推交流平台。springboot微信小程序的治安处罚法条查询系统。ssm基于微信小程序的涉疫人员信息系统的设计与实现。springboot基于MVVM的疫情物资管理系统。springboot基于安卓的校园周边美食汇。springboot学生综合成绩测评系统。

jink103的博客 745

《Java Web程序设计基础教程》简介

本书是关于Java Web开发的基础教程,共分15章。第1章介绍如何构建Java Web应用;第2、3章介绍如何解决Java Web应用的输入和输出问题;第4~6章对登录功能进行了3次重构,这也是Java Web技术的3个发展阶段,并重点介绍了MVC模式;第7~10章进一步强化MVC模式的运用,并介绍了数据库的常用操作以及分页显示和连接池等内容;第11~13章介绍了Java Web应...

Java Web 开发教程 389
上一篇: JSP培训(13)——异常处理
下一篇: JSP培训(15)——购物车实例(下)及小结
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值