管理完善

本文概述了AI音视频处理领域的关键技术,包括视频分割、语义识别、自动驾驶、AR、SLAM等,并探讨了其在实际应用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Parkingsys.cpp
#include <stdio.h>
#include <string.h>
#include "list.h"
#include "api.h"


typedef struct {
 ParkingAutoInfo info;
 bool isInSys;     //是否在车库中
 bool isValidNo;     //是否为套牌车
}CarInfo_ST; 


/*全局变量声明*/
ParkingHisInfoNode * hisInfo;     //历史信息链表
CardStatus PackingCard[CARD_COUNT];    //停车卡

ParkSysTime sysTime;       //系统时间
CarInfo_ST carInfo[11];       //车信息,包含车牌号,以及其停车次数

void main(int argc, char* argv[])
{
 hisInfo = NULL;
 sysTime.hh = 0;
 sysTime.mm = 0;
 apiServerStart(argc,argv);
}

/*****************************************************************************
函 数 名  : OpReset
功能描述  : 需要考生实现的接口,系统初始化
输入参数  : 无
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

  修改历史      :
  1.日    期   : 2009年9月9日
  作    者   :
  修改内容   : 新生成函数
 
*****************************************************************************/
void OpReset(void)
{
 int i=0;
 for(i=0;i<CARD_COUNT;i++)
 {
  PackingCard[i] = CARD_IDLE;
 }
 if(NULL == hisInfo)
  hisInfo = initList();
 else
 {
  resetList(hisInfo);
  hisInfo = initList();
 }
 for(i =0;i<11;i++)
 {
  carInfo[i].info.ParkingCount = 0;
  carInfo[i].isInSys = false;
  carInfo[i].info.AutoNo = 0;
  carInfo[i].info.CardNo = 5;
  carInfo[i].isValidNo = false;
 }
 sysTime.hh = 0;
 sysTime.mm = 0; 
 api_parksys_ret(OP_RESET_SUCC);
}

/*****************************************************************************
函 数 名  : OpGetin
功能描述  : 需要考生实现的接口,车辆进入停车场
输入参数  : UL AutoNo 车牌号
ParkSysAutoType AutoType 车辆类型
ParkSysTime InTime 车辆进入停车场时间
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

  修改历史      :
  1.日    期   : 2009年9月9日
  作    者   :
  修改内容   : 新生成函数
 
*****************************************************************************/
void OpGetin(UL AutoNo, ParkSysAutoType AutoType, ParkSysTime InTime)
{
 if(hisInfo == NULL)
 {
  api_parksys_ret(OP_INTERNAL_ERR);
  return;
 }
 int idx = 0;
 int cardIdx = 0;
 bool isIdle = false;
 if((AutoNo < 10 || AutoNo > 20) ||      
    (AutoType != CAR && AutoType != BUS) ||
    (InTime.hh < 0 || InTime.hh > 23) ||
    (InTime.mm < 0 || InTime.mm > 59))  //参数合法性判断
 {
  api_parksys_ret(OP_E_PARAMETER);
  return;
 }
 if(InTime.hh < sysTime.hh || ( InTime.hh == sysTime.hh && InTime.mm < sysTime.mm ))  //时间逻辑错误
 {
  api_parksys_ret(OP_E_TIME_LOGIC);
  return;
 }
 for(idx;idx<CARD_COUNT;idx++)      //判断车位是否满
 {
  if(CARD_IDLE == PackingCard[idx])
  {
   isIdle = true;
   cardIdx = idx;
   break;
  } 
 }
 if(!isIdle)
 {
  api_parksys_ret(OP_E_PARKING_FULL);
  return;
 }
 for(idx = 0;idx <11;idx++)       
 {
  if(AutoNo == carInfo[idx].info.AutoNo)   //车信息已经存在
  {
   if(carInfo[idx].isInSys)     //判断车是否已经在车位
   {
    api_parksys_ret(OP_E_EXISTED_ATUO);
    return;
   }
   if(carInfo[idx].isValidNo)     //该车牌之前已经判断为套牌车
   {
    api_parksys_ret(OP_E_MISMATCH_AUTO_TYPE);
    return; 
   }
   if(carInfo[idx].info.AutoType!= AutoType) //判断是否前后车类型不同,为套牌车
   {
    api_parksys_ret(OP_E_MISMATCH_AUTO_TYPE);
    carInfo[idx].isValidNo = true;
    deleteItemWithAutoNo(hisInfo,AutoNo);
    return;
   }
   PackingCard[cardIdx] = CARD_INUSE;
   carInfo[idx].isInSys = true;
   carInfo[idx].info.CardNo = cardIdx;
   carInfo[idx].info.CurGetInTime = InTime;
   carInfo[idx].info.ParkingCount++;
   sysTime = InTime;
   api_parksys_ret(OP_PARKING_SUCC);

   ParkingAutoHistoryInfo info;
   info.AutoNo = carInfo[idx].info.AutoNo;
   info.AutoType = carInfo[idx].info.AutoType;
   info.CardNo = carInfo[idx].info.CardNo;
   info.Fee = 0;
   info.GetInTime = InTime;
   info.GetOutTime.hh = 99;
   info.GetOutTime.mm = 99;
   insertItem(hisInfo,info);

   return;
  }
 }
 for(idx=0;idx<11;idx++)
 {
  if(0 == carInfo[idx].info.AutoNo)
  {
   PackingCard[cardIdx] = CARD_INUSE; 
   carInfo[idx].info.AutoNo = AutoNo;
   carInfo[idx].isInSys = true;
   carInfo[idx].isValidNo = false;
   carInfo[idx].info.AutoType = AutoType;
   carInfo[idx].info.CardNo = cardIdx;
   carInfo[idx].info.CurGetInTime = InTime;
   carInfo[idx].info.ParkingCount ++;
   sysTime = InTime;
   api_parksys_ret(OP_PARKING_SUCC);

   ParkingAutoHistoryInfo info;
   info.AutoNo = carInfo[idx].info.AutoNo;
   info.AutoType = carInfo[idx].info.AutoType;
   info.CardNo = carInfo[idx].info.CardNo;
   info.Fee = 0;
   info.GetInTime = InTime;
   info.GetOutTime.hh = 99;
   info.GetOutTime.mm = 99;
   insertItem(hisInfo,info);

   return;
  }
 }
}

/*计算停车费函数*/
int cost(ParkSysTime inTime,ParkSysTime outTime,ParkSysAutoType AutoType)
{
 int inTimeSum = inTime.hh*60+inTime.mm;
 int outTimeSum = outTime.hh*60+outTime.mm;
 int time = outTimeSum - inTimeSum;

 if(time <= 30)
  return 0;
 if(time <= 120)
 {
  if(AutoType == CAR)
   return 10;
  return 20;
 }
 if(time > 12*60)
 {
  if(CAR == AutoType)
   return 20;
  return 30;
 }
 time -= 120;
 int i = time/60;
 int j = time%60;
 if( j != 0)
  i++;
 if(CAR == AutoType)
  return 10+i;
 return 20+i;
}


/*****************************************************************************
函 数 名  : OpGetout
功能描述  : 需要考生实现的接口,车辆离开停车场
输入参数  : UL AutoNo 车牌号
UL CardNo 卡号
ParkSysTime OutTime 车辆离开停车场时间
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

  修改历史      :
  1.日    期   : 2009年9月9日
  作    者   :
  修改内容   : 新生成函数
 
*****************************************************************************/
void OpGetout(UL AutoNo, UL CardNo, ParkSysTime OutTime)
{
 if(hisInfo == NULL)
 {
  api_parksys_ret(OP_INTERNAL_ERR);
  return;
 }
 if((AutoNo <10 || AutoNo > 20) || 
    (CardNo <0 || CardNo >4) ||
    (OutTime.hh < 0 || OutTime.hh > 23) ||
    (OutTime.mm < 0 || OutTime.mm > 59))  //参数合法性判断
 {
  api_parksys_ret(OP_E_PARAMETER);
  return;    
 }
 if(OutTime.hh < sysTime.hh || ( OutTime.hh == sysTime.hh && OutTime.mm < sysTime.mm ))  //时间逻辑错误
 {
  api_parksys_ret(OP_E_TIME_LOGIC);
  return;
 }
 int idx = 0;
 int carIdx = 0;
 bool isInSys = false;
 for(idx = 0;idx<11;idx++)
 {
  if(carInfo[idx].info.AutoNo == AutoNo && carInfo[idx].isInSys)
  {
   carIdx = idx;
   isInSys = true;
   break;
  }  
 }
 if(!isInSys)
 {
  api_parksys_ret(OP_E_NOT_IN_PARKING);
  return;
 }
 if(carInfo[carIdx].info.AutoNo != AutoNo || carInfo[carIdx].info.CardNo != CardNo)
 {
  api_parksys_ret(OP_E_AUTONO_MISMATCH_CARDNO);
  return;
 }
 sysTime = OutTime;
 int fee = cost(carInfo[carIdx].info.CurGetInTime,OutTime,carInfo[carIdx].info.AutoType);
 api_parksys_fee(fee);
 carInfo[carIdx].isInSys = false;
 carInfo[carIdx].info.CardNo = 5;
 PackingCard[CardNo] = CARD_IDLE;

 updateItem(hisInfo,carInfo[carIdx].info.AutoNo,carInfo[carIdx].info.CurGetInTime,fee,OutTime);

 return;
}

/*****************************************************************************
函 数 名  : OpListIdleParkingSpaceNumber
功能描述  : 需要考生实现的接口,停车场空闲车位查询
输入参数  : 无
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

  修改历史      :
  1.日    期   : 2009年9月9日
  作    者   :
  修改内容   : 新生成函数
 
*****************************************************************************/
void OpListIdleParkingSpaceNumber(void)
{
 UL sum = 0;
 int idx = 0;
 for(idx=0;idx<CARD_COUNT;idx++)
 {
  if(PackingCard[idx] == CARD_IDLE)
   sum++;
 }
 api_parksys_idle_parkingspace_number(sum);
}

/*****************************************************************************
函 数 名  : OpListCardStatus
功能描述  : 需要考生实现的接口,指定卡状态查询
输入参数  : UL CardNo 卡号
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

  修改历史      :
  1.日    期   : 2009年9月9日
  作    者   :
  修改内容   : 新生成函数
 
*****************************************************************************/
void OpListCardStatus(UL CardNo)
{
 if(CardNo <0 || CardNo >4)
 {
  api_parksys_ret(OP_E_PARAMETER); 
  return;
 }
 if(PackingCard[CardNo] == CARD_IDLE)
 {
  api_parksys_card_status(CARD_IDLE);
  return;
 }
 api_parksys_card_status(CARD_INUSE);
 return;
}

/*****************************************************************************
函 数 名  : OpListParkingAuto
功能描述  : 需要考生实现的接口,停车场中指定车辆信息查询
输入参数  : UL AutoNo 车牌号
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

  修改历史      :
  1.日    期   : 2009年9月9日
  作    者   :
  修改内容   : 新生成函数
 
*****************************************************************************/
void OpListParkingAuto(UL AutoNo)
{
 if(AutoNo <10 || AutoNo >20)
 {
  api_parksys_ret(OP_E_PARAMETER); 
  return;
 }
 bool isInSys = false;
 int idx = 0;
 for(idx =0 ;idx <11;idx++)
 {
  if(carInfo[idx].info.AutoNo == AutoNo)
  {
   if(carInfo[idx].isInSys == true)
   {
    isInSys = true;
    break;
   }
  }
 }
 if(!isInSys)
 {
  api_parksys_ret(OP_E_NOT_IN_PARKING);
  return;
 }
 api_parksys_parking_auto(&carInfo[idx].info);
 return;
}

/*****************************************************************************
函 数 名  : OpListParkingAutoHistoryInfo
功能描述  : 需要考生实现的接口,停车场中历史所有车辆停车信息查询
输入参数  : UL AutoNo 车牌号
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

  修改历史      :
  1.日    期   : 2009年9月9日
  作    者   :
  修改内容   : 新生成函数
 
*****************************************************************************/
void OpListParkingAutoHistoryInfo(UL AutoNo)
{
 if(hisInfo == NULL)
 {
  api_parksys_ret(OP_INTERNAL_ERR);
  return;
 }
 if(AutoNo != 0)
 {
  if(AutoNo <10 || AutoNo >20)
  {
   api_parksys_ret(OP_E_PARAMETER); 
   return;
  }
 }
 bool flag = false;
 ParkingHisInfoNode * pTemp = hisInfo->pNext;
 if(0 == AutoNo)
 {
  while(pTemp != NULL)
  {
   api_parksys_parking_auto_history_info(&pTemp->data);
   if(!flag)
    flag = true;
   if(pTemp->pNext == NULL)
    break;
   pTemp = pTemp->pNext;
  }
  if(!flag)
   api_parksys_ret( OP_ANY_CAR_PAKING);
  return;
 }
 while(pTemp != NULL)
 {
  if(pTemp->data.AutoNo == AutoNo)
  {
   api_parksys_parking_auto_history_info(&pTemp->data);
   if(!flag)
    flag = true;
  }
  if(pTemp->pNext == NULL)
   break;
  pTemp = pTemp->pNext;
 }
 if(!flag)
  api_parksys_ret(OP_SPEC_CAR_PARKING);
 return;

}

 

List.cpp
#include "list.h"
#include <stdlib.h>
#include <memory.h>

 

ParkingHisInfoNode* initList()
{
 ParkingHisInfoNode * head;
 head = (ParkingHisInfoNode*)malloc(sizeof(ParkingHisInfoNode));
 if(NULL == head)
  return NULL;
 memset(head,0,sizeof(ParkingHisInfoNode));
 head->pNext = NULL;
 return head;
}

bool insertItem(ParkingHisInfoNode* hisInfo,ParkingAutoHistoryInfo dataItem)
{
 ParkingHisInfoNode *pTemp;
 ParkingHisInfoNode *pTempData;
 if(NULL == hisInfo)
  return false;
 pTemp = hisInfo;
 while(pTemp ->pNext != NULL && pTemp->pNext->data.AutoNo < dataItem.AutoNo)
  pTemp = pTemp->pNext;
 pTempData = (ParkingHisInfoNode*)malloc(sizeof(ParkingHisInfoNode));
 if(NULL == pTempData)
  return false;
 pTempData->data = dataItem;
 pTempData->pNext = pTemp->pNext;
 pTemp->pNext = pTempData;
 return true;
}

void resetList(ParkingHisInfoNode * hisInfo)
{
 ParkingHisInfoNode *pTemp;
 while(hisInfo != NULL)
 {
  pTemp = hisInfo->pNext;
  free(hisInfo);
  hisInfo = pTemp;
 }
}

bool deleteItemWithAutoNo(ParkingHisInfoNode * hisInfo,UL AutoNo)
{
 bool ret = false;
 if(NULL == hisInfo)
  return false;
 ParkingHisInfoNode * pTemp = NULL;
 ParkingHisInfoNode * pTempTail = NULL;
 pTemp = hisInfo;
 while(pTemp != NULL && pTemp->pNext != NULL)
 {
  if(pTemp->pNext->data.AutoNo == AutoNo)
  {
   pTempTail = pTemp->pNext->pNext;
   free(pTemp->pNext);
   pTemp->pNext = pTempTail;
   if(!ret)
    ret = true;
  }
  pTemp = pTemp->pNext;
 }
 return ret;

}

void updateItem(ParkingHisInfoNode* hisInfo,UL AutoNo,ParkSysTime inTime,UL fee,ParkSysTime outTime)
{
 if(hisInfo == NULL)
  return;
 ParkingHisInfoNode *pTemp;
 pTemp = hisInfo->pNext;
 bool flag = false;
 while(pTemp != NULL)
 {
  if(pTemp->data.AutoNo == AutoNo && pTemp->data.GetInTime.hh == inTime.hh && pTemp->data.GetInTime.mm == inTime.mm)
  {
   flag = true;
   break;
  }
  else
  {
   if(pTemp->pNext != NULL)
    pTemp = pTemp->pNext;
   else
    break;
  }
 }
 if(!flag)
  return;
 pTemp->data.Fee = fee;
 pTemp->data.GetOutTime = outTime;
}


List.h

#ifndef __LIST_H__
#define __LIST_H__
#include "api.h"

typedef struct ParkingHisInfoNode
{
 ParkingAutoHistoryInfo    data;
 struct ParkingHisInfoNode * pNext;
}ParkingHisInfoNode;


ParkingHisInfoNode* initList();
bool insertItem(ParkingHisInfoNode* hisInfo,ParkingAutoHistoryInfo dataItem);
void resetList(ParkingHisInfoNode * hisInfo);
bool deleteItemWithAutoNo(ParkingHisInfoNode * hisInfo,UL AutoNo);
void updateItem(ParkingHisInfoNode* hisInfo,UL AutoNo,ParkSysTime inTime,UL fee,ParkSysTime outTime);


#endif

Api.h

/******************************************************************************

                  版权所有 (C), 2009-2009, 华为技术有限公司

 ******************************************************************************
  文 件 名   : api.h
  版 本 号   : 初稿
  作    者   :
  生成日期   : 2009年9月9日
  最近修改   :
  功能描述   : api.cpp 的头文件
  函数列表   :
  修改历史   :
  1.日    期   : 2009年9月9日
    作    者   :
    修改内容   : 创建文件

******************************************************************************/

#ifndef __API_H__
#define __API_H__


#ifdef __cplusplus
extern "C"{
#endif /* __cplusplus */

#define CARD_COUNT   5       //卡的数量

#define MIN_AUTONO   10      //最小车牌号
#define MAX_AUTONO   20      //最大车牌号

typedef unsigned char UC;
typedef unsigned long UL;

//汽车类型
typedef enum
{
    CAR,     //小轿车
    BUS,     //大巴
    AUTO_TYPE_BUTT,
}ParkSysAutoType;

//卡状态
typedef enum
{
    CARD_IDLE  = 0,  //卡空闲
    CARD_INUSE = 1,  //卡已经使用
}CardStatus;

//操作码定义
typedef enum
{
    OP_E_CMD                    = 0,  //(考生不使用)无效的命令
    OP_RESET_SUCC               = 1,  //系统初始化成功
    OP_E_PARAMETER              = 2,  //参数不合法
    OP_E_PARKING_FULL           = 3,  //车位已满
    OP_E_EXISTED_ATUO           = 4,  //该车已经在停车场
    OP_E_MISMATCH_AUTO_TYPE     = 5,  //可能是套牌车不允许进入
    OP_E_NOT_IN_PARKING         = 6,  //该车不在停车场
    OP_E_AUTONO_MISMATCH_CARDNO = 7,  //车牌号和卡号不对应不允许离开
    OP_E_TIME_LOGIC             = 8,  //时间逻辑错误
    OP_PARKING_SUCC             = 9,  //停车操作成功
    OP_SPEC_CAR_PARKING         = 10, //指定的车辆在停车场内尚未停过
    OP_ANY_CAR_PAKING           = 11, //停车场内尚未有任何车辆停过
    OP_INTERNAL_ERR             =999, //内部系统错误
}ParkSysOpRet;

//时间
typedef struct
{
    UC hh;  //小时
    UC mm;  //分钟
}ParkSysTime;

//在停车场中的车辆信息
typedef struct
{
    UL              AutoNo;       //车牌号
    ParkSysTime     CurGetInTime; //当前进入时间
    UL              CardNo;       //卡号
    ParkSysAutoType AutoType;     //车型
    UC              ParkingCount; //停车次数
}ParkingAutoInfo;

//停车场中车辆历史停车信息
typedef struct
{
    UL              AutoNo;       //车牌号
    ParkSysAutoType AutoType;     //车辆类型
    UL              CardNo;       //卡号
    ParkSysTime     GetInTime;    //停车时间
    ParkSysTime     GetOutTime;   //取车时间
    UL              Fee;          //停车费用
}ParkingAutoHistoryInfo;

/*****************************************************************************
 函 数 名  : api_parksys_ret
 功能描述  : 系统提供的函数,供考生调用,打印操作结果信息
 输入参数  : ParkSysOpRet OpRet操作码定义
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   :
    修改内容   : 新生成函数

*****************************************************************************/
void api_parksys_ret(ParkSysOpRet OpRet);

/*****************************************************************************
 函 数 名  : api_parksys_fee
 功能描述  : 系统提供的函数,供考生调用,车辆离开停车场后收取的费用
 输入参数  : UL fee当次停车收取的费用
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   :
    修改内容   : 新生成函数

*****************************************************************************/
void api_parksys_fee(UL fee);

/*****************************************************************************
 函 数 名  : api_parksys_idle_parkingspace_number
 功能描述  : 系统提供的函数,供考生调用,停车场空闲车位查询结果
 输入参数  : UL number空闲车位数
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   :
    修改内容   : 新生成函数

*****************************************************************************/
void api_parksys_idle_parkingspace_number(UL number);

/*****************************************************************************
 函 数 名  : api_parksys_card_status
 功能描述  : 系统提供的函数,供考生调用,指定卡状态查询结果
 输入参数  : CardStatus cardStatus指定卡状态
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   :
    修改内容   : 新生成函数

*****************************************************************************/
void api_parksys_card_status(CardStatus cardStatus);

/*****************************************************************************
 函 数 名  : api_parksys_parking_auto
 功能描述  : 系统提供的函数,供考生调用,停车场中指定车辆信息查询结果
 输入参数  : ParkingAutoInfo *pAutoInfo停车场中指定车辆信息
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   :
    修改内容   : 新生成函数

*****************************************************************************/
void api_parksys_parking_auto(ParkingAutoInfo *pAutoInfo);

/*****************************************************************************
 函 数 名  : api_parksys_parking_auto_history_info
 功能描述  : 系统提供的函数,供考生调用,停车场中指定车辆信息查询结果
 输入参数  : ParkingAutoHistoryInfo *pAutoHistoryInfo停车场中历史车辆停车信息
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   :
    修改内容   : 新生成函数

*****************************************************************************/
void api_parksys_parking_auto_history_info(ParkingAutoHistoryInfo *pAutoHistoryInfo);


/*****************************************************************************
 函 数 名  : api_server_start
 功能描述  : 启动socket服务端,以阻塞的方式接受用户输入
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   :
    修改内容   : 新生成函数

*****************************************************************************/
void apiServerStart(int argc, char* argv[]);


// 供考生实现的函数

void OpReset(void);

void OpGetin(UL AutoNo, ParkSysAutoType AutoType, ParkSysTime InTime);

void OpGetout(UL AutoNo, UL CardNo, ParkSysTime OutTime);

void OpListIdleParkingSpaceNumber(void);

void OpListCardStatus(UL CardNo);

void OpListParkingAuto(UL AutoNo);

void OpListParkingAutoHistoryInfo(UL AutoNo);

#ifdef __cplusplus
}
#endif /* __cplusplus */


#endif /* __API_H__ */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值