SpringBoot 足球青训俱乐部管理后台:128个文件162个接口,三角色教练学员管理全流程

本博客介绍了一个基于Spring Boot的足球青训俱乐部管理后台系统,涵盖学员、教练、管理员三角色权限体系,包含14张MySQL表、162个REST接口及128个Java文件。系统采用单体架构,集成MyBatis-Plus、Token统一鉴权、双向冗余课程安排、自动身份过滤签到、通用泛型Controller等关键技术点,专为毕业设计优化,支持快速部署与论文写作。

SpringBoot 足球青训俱乐部管理后台:128个文件162个接口,三角色教练学员管理全流程

这是一套基于 Spring Boot 的足球青训俱乐部管理后台系统,自带源码+论文+数据库脚本,业务覆盖学员注册登录、教练排课、课程安排、上课签到、装备商品、公告发布和统计报表。本文带你看清它里面有什么、怎么跑起来,并附真实运行截图。

目录

一、你是不是也这样
二、这套是什么
三、对你具体有什么用
四、怎么跑起来
五、里面有什么


一、你是不是也这样

你在做毕业设计,方向选了 Web 开发或者后台管理系统。打开 GitHub 搜一圈发现几类问题:要么太简单撑不起论文目录,要么太复杂跑不动,要么下载下来连数据库脚本都没有、连说明文档都找不到。

这套足球青训俱乐部管理后台的好处是正好卡在中间。它有完整的一条业务链——学员注册进来、教练给他排课、上课签到、想置办装备就进购物车、俱乐部发公告通知、后台出统计报表,每一步都有独立接口和独立数据表,能写满论文的功能模块章节。又没有复杂到答辩讲不明白:没有微服务、没有消息队列,一个 MySQL 加一个 Java 进程就能跑。

而且这套项目带了三样东西:db.sql 数据库脚本(14 张表自带 66 行种子数据)、说明文档.txt 写了前后台地址和登录入口、论文.docx 可以参考结构。拿到就知道往哪敲、怎么跑、论文怎么写。

前台首页
图:前台首页 —— 顶部导航、轮播图和公告模块,游客无需登录即可浏览。

前台公告信息列表
图:前台公告信息列表 —— 公告卡片带封面图和标题,支持按标题搜索,底部可翻页。

前台商品信息列表
图:前台商品信息列表 —— 装备商品卡片展示封面、名称和价格,顶部有分类筛选和搜索框。

前台课程安排列表
图:前台课程安排列表 —— 按教练、学员、课程名筛选,课程封面和上课地点时间都在。

前台学员个人中心
图:前台学员个人中心 —— 登录后显示本人资料,可改密码、换头像、看余额和订单。

后台管理首页
图:后台管理首页 —— 左侧列出学员、教练、公告、商品、课程安排、课程签到、统计中心、系统管理和订单管理。

二、这套是什么

项目名:基于Web足球青训俱乐部管理后台系统开发

技术形态:Spring Boot 单体应用,前后端不分离——前台 HTML 页面 + 后台 Vue 页面均打包在工程内

业务领域:足球青训俱乐部的日常运营管理。跟普通电商的区别是它有教练和学员两套业务身份:教练排课、学员签到、装备交易只是俱乐部运营的一部分。

交付清单

交付物内容对毕设的意义
源码工程springbootr4n67 目录,128 个 Java 文件可直接运行、改业务做二次开发
db.sql14 张表建表脚本 + 66 行种子数据导完库直接点着看
论文.docxWord 格式论文文档,约 9100 中文字可参考论文结构和模块划分
说明文档.txt后台地址、前台地址、登录说明跑之前先看

规模数字(均可复现)

指标数值统计方式
Java 文件数128find src -name “*.java” | wc -l
Java 代码行数13023find src -name “*.java” -exec cat {} + | wc -l
Controller 数15ls controller/*Controller.java | wc -l
REST 接口数162全部 mapping 注解 176 条 − 类级路径前缀 14 条
数据库表数14db.sql 中 CREATE TABLE 计数
种子数据66 条 INSERT / 66 行db.sql 实际元组行数
HTML 页面47find src -name “*.html” | wc -l

⛔ 这三个数字最容易写错,答辩时被问到要能当场说清:

  • 162 而不是 176:15 个 Controller 里,14 个在类上有一条 @RequestMapping("/xxx") 路径前缀注解——那是前缀,不是接口。真正的 162 是方法级注解条数。写多了等于把前缀当成接口。
  • 14 张表不是 12 张:CREATE TABLE 一共 14 次,其中 cart 购物车只有 1 行、orders 订单 1 行,是真实业务产生的数据,不是空表。
  • 66 行不是 66 条语句:这个项目的 db.sql 每条 INSERT 只插一行,所以语句数恰好等于行数。换成别的毕设工程不一定成立——统计时必须看元组个数,不能数 insert into 的出现次数。

种子数据分布

表行数表行数
address7kechengqiandao7
cart1kechengxinxi6
config4orders1
gonggaoxinxi6shangpinxinxi6
jiaolian6token3
kechenganpai6users1
tongjizhongxin6xueyuan6

本文环境版本

组件版本来源
JDK1.8pom.xml
Spring Boot2.2.2.RELEASEpom.xml parent
ORMMyBatis-Plus 2.3pom.xml
数据库MySQL 5.7db.sql 导出头
后台前端Vue + Element UIadmin/admin/dist/
前台前端HTML + Layuifront/front/
构建Maven 3.8pom.xml

系统架构

系统架构图
图:系统架构图 —— 浏览器 → Spring Boot 8080 → Token 拦截器 → 15 个 Controller → Service → MyBatis-Plus → MySQL。

整个系统是一个 Spring Boot 单体应用。后端一个 jar 包管所有接口,后台前端是编译好的 Vue 静态文件放在 resources 里,前台前端是 HTML 页面也放在 resources 里。数据库只有 MySQL,没有 Redis、没有消息队列。

三、对你具体有什么用

1. 三套角色一张 token 表搞定,论文「权限设计」章能直接写

这套工程有三套用户体系:管理员(users 表)、学员(xueyuan 表)、教练(jiaolian 表)。源码里 generateToken 有三处调用点,分别对应这三张表:

  • UserController → 管理员,登录后写 token 表,tablename 记 users
  • XueyuanController → 学员,登录后写 token 表,tablename 记 xueyuan
  • JiaolianController → 教练,登录后写 token 表,tablename 记 jiaolian

token 表结构是通用的:id / userid / username / tablename / role / token / addtime / expiratedtime。tablename 这个字段是整套设计的关键——它让一张表同时承载三种身份,拦截器只要读出 tablename 就知道该把请求当成谁处理。

数据库里 token 表的种子数据正好印证了这一点:3 行,tablename 分别是 users、xueyuan、jiaolian,各 1 条。

答辩老师问「你这套系统怎么区分三种角色的权限」,这张表答完。

2. 前端菜单就是现成的权限矩阵,论文「功能模块」章照抄即可

后台的 menu.js 里写着一份完整的菜单结构,直接把三套角色的能干什么写清楚了:

角色后台能干什么前台能干什么
管理员学员管理、教练管理、公告信息管理、商品信息管理、课程安排管理、课程签到管理、统计中心管理、轮播图管理、订单管理无(只登录后台)
学员无(只登录前台)公告信息列表、商品信息列表、课程安排列表、购物车、上课签到、个人中心、我的订单、我的地址
教练公告信息管理、商品信息管理、课程安排管理、课程签到管理无(只登录后台)

菜单项还带操作按钮权限:管理员在课程安排上有「考勤签到」按钮,在课程签到上有「审核」按钮,在统计中心上有「报表」按钮;学员在课程安排上只有「上课签到」。这套按钮级权限是 isAuth() 和 isFrontAuth() 两个函数读菜单表算出来的,前端一个 v-if 就完事。

写论文「系统功能设计」章时,这张表可以直接改写成一节。

3. 通用接口 Controller,这部分最能撑起设计类章节

CommonController 是这套工程里最有讲头的部分。9 个接口里有 7 个是完全泛型的:

路径作用参数
/option/{tableName}/{columnName}取某表某列的去重值(下拉框数据源)表名 + 列名
/follow/{tableName}/{columnName}按去重值分组统计表名 + 列名
/cal/{tableName}/{columnName}对某列求和表名 + 列名
/group/{tableName}/{columnName}分组统计表名 + 列名
/value/{tableName}/{xColumnName}/{yColumnName}按 x 列分组、对 y 列求和表名 + x 列 + y 列
/sh/{tableName}改某条记录的审核状态表名 + 状态 + id
/remind/{tableName}/{columnName}/{type}待审核数量角标表名 + 列 + 类型
/location百度地图经纬度转城市lng + lat
/matchFace百度 AI 人脸比对两张图片名

前 7 个接口的表名和列名是从前端传进来的路径参数,服务端用 EntityWrapper 拼查询。这意味着后台 Vue 页面的下拉框、统计卡片、审核角标,不用为每张表各写一套接口——一个通用接口配参数就够了。15 个 Controller 里有一半是标准 CRUD,真正手写的业务代码反而集中在 CommonController 上。

它不是「每个业务表复制一遍 CRUD」,而是抽出了「通用数据操作层」。答辩老师问「你这套代码复用体现在哪」,可以拿它当例子。

4. 课程安排表把教练和学员双向冗余,答辩有讲头

kechenganpai 表的字段能看出业务设计:

字段含义
xueyuanzhanghao / xueyuanxingming上课学员的账号和姓名
jiaoliangonghao / jiaolianxingming授课教练的工号和姓名
kechengbianhao / kechengming课程编号和课程名
shangkeshijian / shangkedidian上课时间和地点
fengmian / xiangqing课程封面和详情

kechengqiandao(课程签到)表同样冗余了学员和教练双方,还多了 qiandaozhuangtai(签到状态)、longitude / latitude / fulladdress(经纬度和完整地址)三个定位字段——签到的时候记一下位置,这是能写进论文「考勤核验」小节的设计。

这种「主外键冗余成普通字段」的做法好处是列表页一次查询就能把名称带出来,不用连表;代价是改名字要同步改多张表。答辩老师问「你为什么这么设计」,两边的理由都能答。

5. 课程签到接口按登录身份自动过滤数据,这是个实用细节

KechengqiandaoController#page 有一段:

String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("xueyuan")) {
    kechengqiandao.setXueyuanzhanghao((String)request.getSession().getAttribute("username"));
}
if(tableName.equals("jiaolian")) {
    kechengqiandao.setJiaoliangonghao((String)request.getSession().getAttribute("username"));
}

学员登录后只能看到自己的签到记录,教练登录后只能看到自己课的签到记录——这段逻辑不用前端传什么参数,全靠拦截器放进 session 的 tableName 和 username 判定。

这个细节在答辩时很好用:老师问「怎么防止学员看到别人的签到记录」,直接指这段代码。

6. 分页查询一行套三层,拆开讲三句话就够

每个 Controller 的分页查询都长这样:

PageUtils page = kechengqiandaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kechengqiandao), params), params));

看着吓人,拆开就三层意思:

  1. likeOrEq —— 查询框里填的值带 % 就走模糊匹配,否则走精确等于
  2. between —— 参数名以 _start 结尾的翻译成 >=,以 _end 结尾的翻译成 <=,于是「2021-01-01 到 2021-12-31」这种区间筛选不用写专门的代码
  3. sort —— sort 参数指定排序列,order=desc 就倒序

前端的表单只要按这个约定拼参数名,后端一行代码全包。写论文「查询条件封装」那段时,这三层正好拆成三句话。

7. 改端口要改三个地方,这是最容易踩的坑

application.yml 里 static-locations 是 classpath:static/,file:static/,没有映射 front/ 目录。前台页面走 Spring Boot 对 classpath:/ 的默认兜底,所以目录是双层的但访问 URL 只写一层。

更坑的是端口。改端口不止改 application.yml 一处:

文件处数
application.yml1
front/front/modules/http/http.js2
front/front/js/config.js1

只改 application.yml → 后台能开、前台一片白(调不到接口)。这个坑值得单独写一节,因为答辩时如果老师说「部署到别的端口」,你现场改一处就会翻车。

8. 论文和代码对得上

论文文档是 Word 格式,约 9100 中文字,目录结构是标准的六章:绪论、相关技术简介、系统分析、系统设计、系统实现、系统测试。系统实现章按角色分成三块——5.1 学员功能模块、5.2 管理员功能模块、5.3 教练功能模块,跟源码里三套角色的划分完全一致。

论文 4.3 节的数据库设计写了课程安排、教练、订单、管理员、学员五个实体 E-R 图,db.sql 里对应 kechenganpai、jiaolian、orders、users、xueyuan 五张表,一一对得上。写「系统实现」那一章时可以直接对着 Controller 一个个展开,写「数据库设计」对着 db.sql 的 14 张表展开。

ER 图:用户与权限
图:ER 图 —— users、token 两张用户与鉴权表的字段结构,token 表靠 tablename 区分三种身份。

ER 图:系统配置
图:ER 图 —— config 系统配置表,只有 id、name、value 三个字段,第三方接口的密钥全存这儿。

ER 图:业务主表
图:ER 图 —— 学员、教练、课程安排、课程签到、商品、公告、订单等业务主表的字段结构。

项目指标统计
图:项目指标统计 —— 128 个 Java 文件、162 个 REST 端点、15 个 Controller、14 张数据库表的实测数字。

后台课程安排管理
图:后台课程安排管理 —— 管理员给学员和教练排课,表格里能看到学员账号、教练工号、课程编号、封面、上课时间和地点,行尾有详情和考勤签到按钮。

后台课程签到管理
图:后台课程签到管理 —— 按学员、教练、课程名查询签到记录,能看到签到状态、备注和定位信息。

后台学员管理
图:后台学员管理 —— 学员列表带账号、姓名、性别、手机号、出生年月和头像,管理员在此改资料或删除账号。

四、怎么跑起来

第 1 步:建库导脚本

# 创建数据库
mysql -uroot -p -e "CREATE DATABASE IF NOT EXISTS springbootr4n67 DEFAULT CHARACTER SET utf8;"

# 导脚本(脚本里已含 CREATE DATABASE 和 USE,直接导即可)
mysql -uroot -p < db.sql

# 验证:应该出 14 张表
mysql -uroot -p -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='springbootr4n67';"

# 验证数据量
mysql -uroot -p -e "SELECT COUNT(*) FROM springbootr4n67.kechenganpai;"

⛔ 导完先数表:14 张。其中 cart 和 orders 各只有 1 行,token 3 行,这是种子数据本来就少,不是导失败。

第 2 步:改数据源配置

application.yml 里改两处,密码换成你自己的:

spring:
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/springbootr4n67?useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
        username: root
        password: 你的数据库密码

application.yml 共 52 行。改端口记得同步改前台那两个 JS 文件,不然前台白屏。

第 3 步:启动

mvn clean package -DskipTests
java -jar target/*.jar

启动后按说明文档里的地址访问。配置表 config 里可以补 baidu_ditu_ak 和 APIKey / SecretKey,不配的话地图和人脸接口会返回错误提示,但不影响主流程跑通。

常见报错

报 Unknown column 'xxx' in 'field list' —— 大概率是导了旧版 db.sql。重新导一遍完整脚本,别只导数据不导表结构。

前台打开一片白,控制台报接口 404 —— 十有八九是只改了 application.yml 的端口,前台的 http.js 还指着旧端口。三个文件一起改。

时间差 8 小时 —— serverTimezone=GMT%2B8 这个参数被改了,改回去。

五、里面有什么

技术栈清单

层用了什么关键文件
启动Spring Boot 2.2.2Springbootr4n67Application.java
鉴权HandlerInterceptor + Token 表AuthorizationInterceptor.java
数据访问MyBatis-Plus + EntityWrapper各 Dao / Service / ServiceImpl
通用接口泛型 CRUD + 聚合统计CommonController.java
地图百度地图开放平台BaiduUtil.java
人脸百度 AI 人脸识别CommonController#matchFace
返回格式统一 R 对象R.java
分页PageUtilsPageUtils.java
查询构造EntityWrapper 封装MPUtil.java
SQL 防护关键字过滤SQLFilter.java

MyBatis-Plus 全局配置(答辩能答)

application.yml 里有一段 MyBatis-Plus 全局配置,答辩老师问「持久层怎么配的」,这段可以直接答:

  • id-type: 1 —— 主键由用户输入,不是数据库自增。插入时需要在业务代码里生成 id。
  • field-strategy: 2 —— 非空判断,UPDATE 时只有非空字段才进 SET 子句,可以做部分更新。
  • db-column-underline: true —— Java 驼峰命名自动转数据库下划线列名,实体类不用写 @TableField。
  • logic-delete-value: -1 —— 逻辑删除。删除不是物理删,而是把标记字段改成 -1,查询自动过滤。
  • refresh-mapper: true —— 改 mapper XML 不重启就生效,调试用,生产环境应该关掉。
  • call-setters-on-nulls: true —— 查询结果里 null 字段也会调用 setter,避免部分字段丢值。

关键文件清单

文件作用
Springbootr4n67Application.java启动类
AuthorizationInterceptor.javaToken 鉴权 + 跨域预检处理
CommonController.java通用接口(聚合统计/地图/人脸)
BaiduUtil.java百度地图与百度 AI 封装
R.java统一返回格式
PageUtils.java分页工具
MPUtil.java查询条件构造工具
SQLFilter.javaSQL 注入关键字过滤
UserController.java管理员
XueyuanController.java学员(注册/登录/签到)
JiaolianController.java教练(排课/考勤)
KechenganpaiController.java课程安排
KechengqiandaoController.java课程签到
OrdersController.java订单

运行验证:截图实测

这套项目已经实际部署跑通,本文的截图全部来自真实运行环境。

前台游客无需登录即可打开首页,顶部导航、轮播图和公告模块正常展示;公告信息列表页按标题搜索,封面图加载正常。商品信息列表页展示装备商品卡片,带分类筛选和价格。课程安排列表按教练、学员、课程名筛选,课程封面和上课时间地点都在。个人中心要先登录才能看到自己的资料。

后台用管理员身份登录后,左侧菜单列出学员、教练、公告、商品、课程安排、课程签到、统计中心、系统管理和订单管理全部模块。课程安排管理页对排课记录做增删改查,同时维护学员账号、教练工号、课程编号、封面和上课地点;课程签到管理页能看到签到状态和定位信息;学员管理页的用户列表带角色和状态字段,管理员在此改资料或删除账号。

截图清单:01 前台首页、02 前台公告信息列表、03 前台商品信息列表、04 前台课程安排列表、05 前台学员个人中心、06 后台管理首页、07 后台学员管理、08 后台教练管理、09 后台课程安排管理、10 后台课程签到管理、11 后台公告信息管理、12 后台商品信息管理、13 后台统计中心管理。共 13 张运行截图 + 5 张生成图表(架构图 + 3 张 ER 图 + 指标图)。

二次开发空间

加真实支付网关 / 接第三方短信做上课提醒 / 把图片存储换成对象存储 / 加签到地理围栏(经纬度字段已经有了)/ 接教练评价体系。

本文基于 springbootr4n67 源码逐文件分析,代码片段均为原文摘录,统计数字与截图均来自真实运行环境。

内容概要:本文围绕中小功率逆变电源的关键单元电路设计与保护策略展开系统性研究,涵盖逆变电源的工作原理、硬件电路设计(包括DC-DC升压与DC-AC逆变)、SPWM正弦波调制技术、闭环控制策略(电压/电流双闭环)、系统保护机制(过压、过流、短路、过温等)以及基于STM32的嵌入式控制系统开发。研究内容整合了Simulink仿真模型、PCB设计文件与嵌入式程序代码,实现了从理论分析、仿真验证到硬件实现的完整技术链条,重点突出系统稳定性设计与多层级保护策略的协同优化,适用于逆变器产品的研发与工程实践。; 适合人群:具备电力电子、自动控制或电气工程等相关专业背景,从事电源系统设计的研发工程师、高校研究生及工程技术人员,尤其适合具有一定嵌入式系统开发经验(熟悉STM32系列单片机)且工作年限在1-5年的从业人员。; 使用场景及目标:①用于中小功率离网/并网逆变器的原型开发与产品设计;②作为高校电力电子、自动化等专业的课程设计、毕业设计或科研项目的综合性参考方案;③深入掌握SPWM调制、LC滤波器设计、PID闭环控制、系统保护逻辑等关键技术的实现方法;④结合仿真与实物平台进行波形测试与参数调试,提升电力电子系统的综合设计能力与故障排查水平。; 阅读建议:建议读者结合提供的原理图、PCB布局图与源代码同步学习,优先在Simulink中完成控制逻辑仿真,理解系统动态响应特性后再搭建实际硬件平台。重点关注保护电路的动作阈值设置与软硬件协同保护机制的实现方式,实验过程中应配合示波器、万用表等仪器观测关键节点波形,逐步优化控制参数以提升系统效率与稳定性。
内容概要:本文围绕LCL单相并网逆变器的PI双闭环有源阻尼控制策略展开,基于Simulink搭建完整的系统仿真模型,深入研究由电流内环与电压外环构成的双闭环控制结构,并结合有源阻尼技术有效抑制LCL滤波器引发的谐振不稳定问题。文中系统阐述了PI控制器参数的设计方法、系统稳定性分析过程以及有源阻尼的作用机理,确保逆变器在并网运行时具备优良的动态响应能力、抗干扰性能与电能质量。同时提供详细的参考文献与说明文档,支持仿真结果的复现与理论延伸,适用于科研验证与工程前期设计。; 适合人群:具备电力电子技术、自动控制理论基础,从事新能源发电系统、电力变换器控制、并网逆变器研发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握LCL型滤波器在单相并网逆变器中的建模方法及其谐振特性与抑制手段;②学习PI双闭环控制结构的设计流程与参数整定技巧;③理解有源阻尼技术的实现原理及其在提升系统稳定性方面的优势;④通过仿真模型动手实践,为后续硬件原型开发、控制器优化及并网标准符合性测试提供理论依据和技术储备。; 阅读建议:建议读者结合所提供的Simulink仿真模型与说明文档,逐步运行并调试系统,重点关注PI参数变化对系统动态响应与稳定性的影响,同时利用频域分析工具(如波特图)辅助理解谐振峰抑制效果,建议对照参考文献深化对控制理论的理解,宜在仿真实践中同步开展时域与频域联合分析,以全面提升系统设计与问题诊断能力。
内容概要:本文围绕三相四桥臂动态电压恢复器(DVR)在电压不对称跌落条件下的补偿能力展开研究,基于Simulink搭建完整的系统仿真模型,重点解决不平衡工况下的电能质量问题。系统采用三相四桥臂逆变器拓扑结构,具备独立调控零序分量的能力,结合正负序分离控制策略实现精确补偿。文档详细阐述了RIME(Rider-Inspired Metaheuristic Evolution)新型智能优化算法对PID控制器参数的整定过程,并系统对比了传统PID、神经网络PID(如BP-PID、RBF-PID)、模糊PID及多种智能优化算法(如PSO、SSA)在动态响应速度、稳态精度和抗干扰能力方面的性能差异。研究还涵盖了控制算法设计、系统建模、仿真验证全流程,配套提供参考文献、说明文档与可运行仿真文件,具有较强的复现性和工程指导价值。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事电能质量治理的技术工程师;具备一定MATLAB/Simulink仿真基础和控制理论背景的研发人员。; 使用场景及目标:①用于研究动态电压恢复器在不对称电压跌落下的补偿能力;②比较不同智能优化算法(如RIME、PSO、SSA)在PID参数整定中的效果;③开展新型控制策略(如模糊PID、RBF神经网络控制)在电力系统中的应用仿真与验证; 阅读建议:建议结合提供的参考文献与仿真文件逐步复现模型,重点关注四桥臂逆变器的拓扑特性、正负序分离控制、PID参数优化过程及系统动态响应性能,宜在实践中调试与对比不同控制算法的补偿效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学长毕设笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值