如何使用ssm实现NBA周边商城

344 篇文章 0 订阅
151 篇文章 0 订阅

@TOC

10906ssmNBA周边商城

第一章 绪 论

1.1背景及意义

系统管理也都将通过计算机进行整体智能化操作,对于NBA周边商城管理系统所牵扯的管理及数据保存都是非常多的,例如个人中心、用户管理、球队管理、商品分类管理、商品管理、商品评价管理、系统管理、订单管理等,这给管理者的工作带来了巨大的挑战,面对大量的信息,传统的管理系统,都是通过笔记的方式进行详细信息的统计,后来出现电脑,通过电脑输入软件将纸质的信息统计到电脑上,这种方式比较传统,而且想要统计数据信息比较麻烦,还受时间和空间的影响,所以为此开发了NBA周边商城管理系统;为用户提供了方便管理平台,方便管理员查看及维护,并且可以通过需求进行设备信息内容的编辑及维护等;对于用户而言,可以随时进行查看作品和论坛信息,管理员可以足不出户就可以获取到系统的数据信息等,而且还能节省用户很多时间,所以开发NBA周边商城管理系统给管理者带来了很大的方便,同时也方便管理员对用户信息进行处理。

本论文NBA周边商城管理系统主要牵扯到的程序,数据库与计算机技术等。覆盖知识面大,可以大大的提高系统人员工作效率。

1.2国内外研究概况

随着国内经济形势的不断发展,中国互联网进入了一个难得的高峰发展时期,这使得中外资本家纷纷转向互联网市场。 然而,许多管理领域的不合理结构,人员不足以及市场管理需求的增加使得更多的人具备了互联网管理的意识。

在当今高度发达的信息中,信息管理改革已成为一种更加广泛和全面的趋势。 “NBA周边商城管理系统”是基于Mysql数据库,在SSM框架设计的基础上实现的。为确保中国经济的持续发展,信息时代日益更新,服务业仍在蓬勃发展。同时,随着信息社会的快速发展,各种管理系统面临着越来越多的数据需要处理,如何用方便快捷的方式使管理者在广阔的数据海洋里面查询、存储、管理和共享有效的数据信息,对我们的学习,工作和生活具有重要的现实意义。因此,国内外学术界对此进行了深入而广泛的研究,一个新的研究领域——NBA周边商城管理系统诞生了。

27

1.3 研究的内容

目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的信息管理软件仍没有得到大多数人的了解或认可。本选题则旨在通过标签分类管理等方式,实现NBA周边商城管理系统的各种功能,从而达到对NBA周边商城管理系统的管理。

详细内容介绍,将在以下六章中详细阐述:

第一章、绪论,介绍了研究课题选择的背景及意义、研究现状,简要介绍了本文的章节内容。

第二章、引入技术知识,通过引入关键技术进行开发,向系统中涉及直观表达的技术知识。

第三章、重点分析了系统的分析,从系统强大的供需市场出发,对系统开发的可行性,系统流程以及系统性能和功能进行了探讨。

第四章、介绍了系统的详细设计方案,包括系统结构设计和数据库设计。

第五章、系统设计的实现,通过对系统功能设计的详细说明,论证了系统的结构。

第六章、系统的整体测试,评判系统是否可以上线运行。

第二章 关键技术的研究

2.1 JSP技术介绍

JSP技术本身是一种脚本语言,但它的功能是十分强大的,因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时,它可以使显示逻辑和内容分开,这就极大的方便了用户的需求。JavaBeans 可以对JSP技术的程序进行扩展,从而形成新的应用程序,而且JavaBeans的代码可以重复使用,所以就便于对程序进行维护。JavaBean 组件有内部的接口,可以帮助不同的人对系统进行访问。1999年,Sun微系统公司正式推出了JSP技术,这是一种动态技术,是基于整个JAVA体系和JavaServlet提出的,是具有普遍适用性的WEB技术,也是本系统设计的核心技术之一。JSP技术能够极大的提高WEB网页的运行速度。这些内容会与脚本结合,并且由JavaBean和Servlet组件封装。所有的脚本均在服务器端运行,JSP引擎会针对客户端所 提交的申请进行解释,然后生成脚本程序和JSP标识,然后通过HTML/XML页面将结果反馈给浏览器。因此,开发人员亲自设计最终页面的格式和HTML/XML标识时,完全可以使用JSP技术。

所以结合NBA周边商城管理系统的需求及功能模块的实现,使用JSP技术是最合适的,而且JSP的拓展性比较好,对于系统在后期使用过程中可以不断对系统功能进行拓展,是系统更完成,更方便的满足用户管理。

2.2 JAVA简介

Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java server pages),和XML技术。JAVA语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,开发者只需要知道一些概念就能够编写出一些应用程序。Java程序相对较小,其代码能够在小机器上运行。Java是一种计算机编程语言,具有封装、继承和多态性三个主要特性,广泛应用于企业Web应用程序开发和移动应用程序开发。

Java语言和一般编译器以及直译的区别在于,Java首先将源代码转换为字节码,然后将其转换为JVM的可执行文件,JVM可以在各种不同的JVM上运行。因此,实现了它的跨平台特性。虽然这使得Java在早期非常缓慢,但是随着Java的开发,它已经得到了改进。

2.3 MyEclipse开发环境

MyEclipse支持广泛、兼容性高并且功能强大,是一个Eclipse 插件集合,普遍适应于JAVA和J2EE的系统开发,支持 JDBC,Hibernate,AJAX,Struts,Java Servlet,Spring,EJB3等市面上存在的几乎所有数据库链接工具和主流Eclipse产品 开发工具。

MyEclipse在业内是所熟知的开发工具,该平台在开发的过程中运用的就是该工具。MyEclipse又被称之为企业级的工作平台,它是以Eclipse IDE为基础的。MyEclipse可以帮助我们进行数据库的研发和J2EE的使用,除此之外,还可以提高系统的运营能力,这突出表现在服务器的整合过程中。MyEclipse的功能相当完备,能够为J2EE的集成提供必要的环境支持,从而完成编码、测试、调试及发布等功能。它可以支持JSP,HTML,SQL,Javascript,Struts, CSS等。

2.4 Tomcat服务器

Tomcat属于一种轻型的服务器,所以说在中小企业中并不具有普适性。但是当程序员需要开发或调试JSP 程序时,则通常会将该服务器作为首选。对于一个仅具有计算机基础知识的人来说,计算机系统具有一个好的Apache服务器,可以很好的对HTML 页面进行访问。Tomcat 虽然是Apache的扩展,但是它们都是可以独立运行的,二者是不互相干扰的。当配置正确的时候,Apache服务器为HTML 页面的运行提供技术支持,Tomcat 的任务则是运行Servle和JSP 页面。Tomca也具有一定的HTML页面处理功能。

2.5 MySQL数据库

数据库是系统开发过程中不可或缺的一部分。在WEB应用方面,MySQL AB开发了一个具有很大优势的MySQL关系数据库管理系统。 MySQL可以将数据存储在不同的表中,这非常灵活,并且还可以提高系统在实际应用中的速度。数据库访问最常用于标准SQL语言,MySQL用于SQL语言,因此它具有高度兼容性。数据库的操作是必不可少的,包括对数据库表的增加、删除、修改、查询等功能。现如今,数据库可以分为关系型数据库和非关系型数据库,Mysql属于关系性数据库,Mysql数据库是一款小型的关系型数据库,它以其自身特点:体积小、速度快、成本低等,Mysql数据库是目前最受欢迎的开源数据库。

在WEB应用技术中, Mysql数据库支持不同的操作系统平台,虽然在不同平台下的安装和配置都不相同,但是差别也不是很大,Mysql在Windows平台下两种安装方式,二进制版和免安装版。安装完Mysql数据库之后,需要启动服务进程,相应的客户端就可以连接数据库,客户端可通过命令行或者图形界面工具登录数据库。

2.6 SSM框架

当今流行的“SSM组合框架”是Spring + SpringMVC + MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于一个轻量级的反转控制框架(IoC),但它也是一个面向表面的容器(AOP)。SpringMVC常常用于控制器的分类工作模式,与模型对象分开,程序对象的作用与自动取款机进行处理。这种解耦治疗使整个系统的个性化变得更加容易。MyBatis是一个良好的可持续性框架,支持普通SQL查询,同时允许对存储过程的高级映射进行数据的优化处理。大型Java Web应用程序的由于开发成本太高,开发后难以维护和开发过程中一些难以解决的问题,而采用“SSM组合框架”,它允许建立业务层次结构,并为这个问题提供良好的解决方案。

第三章 系统分析

3.1 系统设计目标

NBA周边商城管理系统主要是为了用户方便对摄影的查看作品活动和查看交流论坛,也是为了更好的让管理员进行更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性,遵循开发的系统优化的原则,经过全面的调查和研究。

系统所要实现的功能分析,对于现在网络方便的管理,系统要实现用户可以直接在平台上进行查看个人中心、商品管理、商品评价管理、我的收藏管理、订单管理等,根据自己的需求可以进行查看商品信息,并根据需求购买商品等,这样既能节省用户的时间,不用再像传统的方式,需要查询,由于很多用户的时间的原因,没有办法去线下商场购买商品,比较难去满足用户的各种需求。所以NBA周边商城管理系统的开发不仅仅是能满足用户的需求,还能提高管理员的工作效率,减少原有不必要的工作量。

3.2 系统可行性分析

系统的开发环境和配置都是可以自行安装的,系统使用ECLIPSE开发工具,使用比较成熟的Mysql数据库进行对系统用户和管理员之间相关的数据交互,根据技术语言对数据库,结合需求进行修改维护,可以使得系统运行更具有稳定性和安全性,从而完成实现系统的开发。

(1)硬件可行性分析

NBA周边商城管理系统及信息分析的设计对于所使用的计算机没有什么硬性的要求,计算机只要可以正常的使用进行代码的编写及页面设计就可行,主要是对于服务器有些要求,对于平台搭建完成要上传的服务器是有一定的要求的,服务器必须选择安全性比较高的,然后就是在打开系统必须顺畅,不能停顿太长时间;性价比高;安全性高。

(2)软件可行性分析

开发整个系统使用的是云计算,流量的可扩展性和基于流量的智能调整云计算的优点就是流量的可扩展性和基于流量的智能调整,保障系统的安全及数据信息的及时备份。

因此,我们从两个方面进行了可行性研究,可以看出系统的开发没有问题。

3.3 系统功能分析和描述

使用NBA周边商城管理系统系统的用户分管理员和用户两个角色的权限子模块。

管理员所能使用的功能主要有:个人中心、用户管理、球队管理、商品分类管理、商品管理、商品评价管理、系统管理、订单管理等。

用户可以实现个人中心、商品管理、商品评价管理、我的收藏管理、订单管理等。

3.4系统UML用例分析

3.4.1管理员用例

管理员登录后可进行个人中心、用户管理、球队管理、商品分类管理、商品管理、商品评价管理、系统管理、订单管理,管理员用户的用例如图3-1所示。

图3-1 管理员用例图

3.4.2用户用例

用户注册登录后可进行个人中心、商品管理、商品评价管理、我的收藏管理、订单管理,用户用例如图3-2所示。

图3-2 用户用例图

3.5系统流程分析

3.5.2添加信息流程

添加信息,编号系统使用自动编号模式,没有用户填写,用户添加信息输入信息,系统将自动确认的信息和数据,验证的成功是有效的信息添加到数据库,信息无效,重新输入信息。添加信息流程如图3-4所示。

图3-4 添加信息流程图

3.5.1操作流程

用户想进入系统,首先进入系统登录界面,通过正确的用户名、密码,选择登录类型登录,系统会检查登录信息,信息正确,然后输入相应的功能界面,提示信息错误,登录失败。系统操作流程如图3-3所示。

图3-3操作流程图

3.5.3删除信息流程

用户选择要删除的信息并单击Delete按钮。系统提示是否删除信息。如果用户想要删除信息,系统将删除信息。系统数据库删除信息。删除信息流程图如图3-5所示。

图3-5 删除信息流程图

第四章 系统设计

4.1 系统体系结构

NBA周边商城管理系统开发系统的结构图4-1所示:

用户

服务器和程序

管理员

图4-1 系统结构

模块包括个人中心、用户管理、球队管理、商品分类管理、商品管理、商品评价管理、系统管理、订单管理等进行相应的操作。

登录系统结构图,如图4-2所示:

Y

NBA周边商城管理系统登录

用户登录

密码正确

管理员用户界面

用户界面

图4-2 登录结构图

这些功能可以充分满足NBA周边商城管理系统的需求。此系统功能较为全面如下图系统功能结构如图4-4所示。

图4-4系统功能结构图

4.2 数据库设计原则

每个数据库的应用它们都是和区分开的,当运行到一定的程序当中,它就会与自己相关的协议与客户端进行通讯。那么这个系统就会对使这些数据进行连接。当我们选择哪个桥段的时候,接下来就会简单的叙述这个数据库是如何来创建的。当点击完成按钮的时候就会自动在对话框内弹出数据源的名称,在进行点击下一步即可,直接在输入相对应的身份验证和登录密码。

NBA周边商城管理系统的数据流程:

图4-5 系统数据流程图

用户管理实体E-R图,如图4.6所示。

图4.6用户管理E-R图

商品管理E-R图,如图4.7所示。

图4.7商品管理E-R图

4.3 数据表

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

表4-1:address表

列名数据类型长度约束
idint11PRIMARY KEY
addtimevarchar200default NULL
useridvarchar200default NULL
addressvarchar200default NULL
namevarchar200default NULL
phonevarchar200default NULL
isdefaultvarchar200default NULL

表4-2:cart表

列名数据类型长度约束
idint11PRIMARY KEY
addtimevarchar50default NULL
tablenamevarchar200default NULL
useridvarchar200default NULL
goodidvarchar200default NULL
goodnamevarchar200default NULL
picturevarchar200default NULL
buynumbervarchar200default NULL
pricevarchar200default NULL
discountpricevarchar200default NULL

表4-3:chat表

列名数据类型长度约束
idint11PRIMARY KEY
addtimevarchar50default NULL
useridvarchar200default NULL
adminidvarchar200default NULL
askvarchar200default NULL
replyvarchar200default NULL
isreplyvarchar200default NULL

表4-4:config表

列名数据类型长度约束
idint11PRIMARY KEY
addtimevarchar255default NULL
namevarchar50default NULL
valuevarchar50default NULL

表4-5:discussshangpin表

列名数据类型长度约束
idint11PRIMARY KEY
addtimevarchar50default NULL
refidvarchar2default NULL
contentvarchar50default NULL
useridvarchar50default NULL

表4-6:news表

列名数据类型长度约束
idint11PRIMARY KEY
addtimevarchar50default NULL
titlevarchar255default NULL
picturevarchar50default NULL
contentvarchar50default NULL

第五章 系统实现

5.1用户功能模块

通过网站页面可以查看首页、商品、新闻资讯、我的、跳转到后台、购物车、客服等信息,如图5-1所示。

图5-1 系统首页页面

用户注册,用户通过填写用户名、密码、姓名、手机、邮箱等信息,进行注册操作,如图5-2所示。点击登录进入登录页面,输入用户名,密码、选择类型进行登录操作,如图5-3所示。

图5-2用户注册页面

图5-3用户登录界面

商品:通过商品页面,可以获取商品名称、价格、球队、分类、规格、品牌、详情、等信息,还可以根据需求进行评论和收藏操作,如图5-4所示。

图5-4商品页面

我的:通过我的页面可以查看个人中心、我的订单、我的地址、我的收藏等信息,并根据需要去进行更改、删除、增加等操作,如图5-5所示。

图5-5我的界面图

我的订单:通过列表可以获订单编号、商品、价格、数量、总价、地址、操作等信息,并根据需要去确认是否收货,如图5-6所示。

图5-6我的订单界面图

我的地址:通过列表可以进行填写联系人、手机号码、默认地址、选择地址等信息,进行提交或重置操作,如图5-7所示。

图5-7我的地址界面图

5.2用户后台功能模块

用户点击后台进入到系统操作界面,可以对个人中心、商品管理、商品评价管理、我的收藏管理、订单管理等功能模块进行操作,如图5-8所示。

图5-8个人资料管理界面图

商品评价管理:通过列表可以获取商品名称、球队、分类、图片、评分、评价日期、用户名、评价内容等信息,并根据需求可进行修改或删除等操作,如图5-9所示。

图5-9商品评价管理界面图

我的收藏管理:通过列表可以获取收藏id、表名、收藏名称、收藏图片等信息,并根据需求进行修改或删除操作,如图5-10所示。

图5-10我的收藏管理界面图

商品管理:通过列表可以获取商品名称、球队、分类、商品图片、规格、品牌、价格等信息,并根据需要进行删除、新增、修改等操作,如图5-11所示。

图5-11商品管理界面图

5.3管理员功能模块

管理员通过填写用户名、密码和验证码,填写完成后选则提交,进行登陆商场,如图5-12所示。

图5-12管理员登录页面图

管理员登录成功后进入到系统操作界面,可以对个人中心、用户管理、球队管理、商品分类管理、商品管理、商品评价管理、系统管理、订单管理等功能模块进行相对应操作,如图5-13所示。

图5-13管理员后台页面图

用户管理:通过列表可以获取用户名、密码、姓名、性别、头像、手机、邮箱等信息,并根据需求进行删除、修改或增加等操作,如图5-14所示。

图5-14用户管理界面图

球队管理:通过列表可以查看球队信息,并根据需求增加新的球队,如图5-15所示。

图5-15球队管理界面图

商品管理:通过列表可以获取商品名称、球队、分类、图片、规格、品牌、价格、详情等信息,并进行修改或删除操作,如图5-16所示。

图5-16商品管理界面图

商品评价管理:管理员通过列表可以获取商品名称、球队、分类、图片、评分、评价日期、用户名、审核回复、审核、回复等信息,并进行修改或删除操作,如图5-17所示。

图5-17商品评价管理界面图

UserServiceImpl.java

package com.service.impl;


import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.UserDao;
import com.entity.UserEntity;
import com.service.UserService;
import com.utils.PageUtils;
import com.utils.Query;


/**
 * 系统用户
 * @author yangliyuan
 * @date 2019年10月10日 上午9:17:59
 */
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService {

	@Override
	public PageUtils queryPage(Map<String, Object> params) {
		Page<UserEntity> page = this.selectPage(
                new Query<UserEntity>(params).getPage(),
                new EntityWrapper<UserEntity>()
        );
        return new PageUtils(page);
	}

	@Override
	public List<UserEntity> selectListView(Wrapper<UserEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public PageUtils queryPage(Map<String, Object> params,
			Wrapper<UserEntity> wrapper) {
		 Page<UserEntity> page =new Query<UserEntity>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
	}
}

FileUtil.java
package com.utils;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
* @author yangliyuan
* @version 创建时间:2020年2月7日 下午8:01:14
* 类说明 : 
*/

public class FileUtil {
	public static byte[] FileToByte(File file) throws IOException {
		// 将数据转为流
		@SuppressWarnings("resource")
		InputStream content = new FileInputStream(file);
		ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
		byte[] buff = new byte[100];
		int rc = 0;
		while ((rc = content.read(buff, 0, 100)) > 0) {
			swapStream.write(buff, 0, rc);
		}
		// 获得二进制数组
		return swapStream.toByteArray();
	}
}

FileController.java
package com.controller;

import java.io.File;
import java.io.IOException;
import java.util.Date;

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

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
		file.transferTo(dest);
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {
		try {
			File file = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
			if (file.exists()) {
				response.reset();
				response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName+"\"");
				response.setHeader("Cache-Control", "no-cache");
				response.setHeader("Access-Control-Allow-Credentials", "true");
				response.setContentType("application/octet-stream; charset=UTF-8");
				IOUtils.write(FileUtils.readFileToByteArray(file), response.getOutputStream());
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

http.js
import axios from 'axios'
import router from '@/router/router-static'
import storage from '@/utils/storage'

const http = axios.create({
    timeout: 1000 * 86400,
    withCredentials: true,
    baseURL: '/ssm8w8u0',
    headers: {
        'Content-Type': 'application/json; charset=utf-8'
    }
})
// 请求拦截
http.interceptors.request.use(config => {
    config.headers['Token'] = storage.get('Token') // 请求头带上token
    return config
}, error => {
    return Promise.reject(error)
})
// 响应拦截
http.interceptors.response.use(response => {
    if (response.data && response.data.code === 401) { // 401, token失效
        router.push({ name: 'login' })
    }
    return response
}, error => {
    return Promise.reject(error)
})
export default http

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值