Qt+Mysql 图书管理系统设计

图书管理系统设计报告

一、 系统整体架构

实验要求设计一个图书管理系统,主要具备以下几个功能:

 用户和管理员的登录:

输入ID和密码(其中密码会变成小圆点隐藏),若ID和密码正确则登录成功,进入到主页面,否则输出错误提示,并清空文本框以方便用户再次输入。普通用户和管理员有不同的账户体系,ID密码不共用,且登录后的界面不同;

 图书入库:

入库方式分为单本入库和批量入库,由管理员操作。单本入库要求管理员输入图书的编号(必需)、书名、出版社、年份、作者、价格、数量等信息,并对后台的数据库中的book表进行更新;批量入库的方式是从指定的txt文本文件中读入书的信息,格式为:book_no_1, Computer Science, Computer Architecture, xxx, 2004, xxx, 90.00, 2 (其中年份、数量是整数类型,价格是两位小数类型,其余为字符串类型),一行为一本书的信息,批量导入到数据库中;

 图书查询:

普通用户在登录成功后即可进行查询操作,查询时,用户可以输入书号、书名、作者、出版社、类别等信息(至少一个)进行查询,程序会输出满足条件的所有书籍的信息,若用户未输入任何查询信息或没有查到符合要求的结果,程序会输出相应的错误提示,在每次查询完成后,程序会清空所有输入的文本框以方便用户进行下一次的查询;

 借书:

借书时用户输入自己的借书证号和书号进行借书,借书成功或者失败程序会分别输出相应的提示,若借书成功则在数据库的borrow表中新增相应的借书记录,同时更新book表中相应书籍的库存信息;同时,在借书界面中,输入用户的借书证号,点击查询,程序会输出该借书证目前借阅的所有书的信息;

 还书:

还书操作与借书在同一个界面完成,相应的,还书用户只需输入自己的借书证号和书号即可还书,程序会输出操作成功或失败的提示,若还书成功,数据库的borrow表和book表将AZSA 会进行相应的更新;

 借书证管理:

管理员可以在登陆后增加或者删除一个借书证;

二、 各模块功能描述

  1. 用户登录:
    这里写图片描述

  2. 图书查询
    这里写图片描述

  3. 图书证管理
    这里写图片描述

  4. 图书入库

这里写图片描述
.
5. 借书/还书

这里写图片描述

三、 数据库表结构
管理员admin

id  char(8) *primary key
password    varchar(20) 
name    varchar(10) 
tel varchar(11)

书book

Bno Char(8) *primary key
Category    Char(10)    
Title   Varchar(40) 
Press   Varchar(30) 
Year    Int 
Author  Varchar(20) 
Price   Decimal(7,2)    
Total   Int 
Stock   int 

借书记录borrow

cno Char(7) //外键,级联更新删除
Bno Char(8) //外键,级联删除
Borrow_date Date    
Return_date Date    
Handler_id  Char(8) 

借书证card

Cno Char(7) *primary key
Name    Varchar(10) 
Department  Varchar(40) 
Type    Char(1) 

四、MySQL数据库准备

在整个工程开始之前,我们先确定了统一的数据库名称和建表的格式,以方便我们之间协调合作。建表的过程同实验二,在此不作赘述。为了方便测试,我们使用了MySQL里的批量入库语句来导入初始数据:
use managelibrary;
load data local infile “D:/book3.txt”
Into table book(bno,category,title,press,year,author,price,total,stock);
之后,我们对数据库managelibrary的操作将完全基于QT,下面将详细介绍我们如何在QT进行SQL语句的执行和图形界面的开发。

五、QT编程技术介绍

本小组采用Qt制作图书管理系统的图形界面。Qt是一个跨平台C++图形用户界面的应用程序开发框架,它既可以开发GUI程序,也可用于开发非GUI程序。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。
Qt creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境 (IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。即使不开发Qt应用程序,Qt Creator也是一个简单易用且功能强大的IDE。
Qt提供了大量的库函数用于制作图形界面,程序员需要做的事主要就是,首先使用软件提供的组件编程,然后完成相应信号的槽函数即可,在槽函数中有大量的用于图形界面制作的库函数、类可供使用;
下面介绍本小组在此次图书管理系统中所用到的qt技术:

  1. qt creator连接到数据库
static bool createConnection(){
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//设置主机名
db.setHostName("localhost");
//设置数据库名
db.setDatabaseName("managelibrary");
//设置账号名
db.setUserName("root");
//设置密码名
db.setPassword("123456");
//设置端口
db.setPort(3306);
if(!db.open()){
    qDebug()<<endl<<"fail!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
    return false;
}
qDebug()<<endl<<"success!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
return true;
}


2. 用户登录界面

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
        ui->lineEdit_2->setEchoMode(QLineEdit::Password);//密码
}

Dialog::~Dialog() //析构函数
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
    int valid=0;
   QSqlQuery query;
   QString name0;
   QString id0;
   QString id =ui->lineEdit->text(); //从界面获取id的值
   QString name=ui->lineEdit_2->text();


if(id.isEmpty()||name.isEmpty())
{
   QMessageBox::warning(this,tr("Warning"),tr("Input your ID and name!"),QMessageBox::Yes);
    return;
}


   query.exec("select * from card");
    while( query.next()){//指向第一条记录
   id0=query.value(0).toString();
   name0=query.value(1).toString();
   if(!QString::compare(name,name0)&&!QString::compare(id,id0)) //查到该用户
   {
   valid=1;
   break;
   }
}

   if(valid) //如果合法
   {
       accept();
   }
    else{
       ui->lineEdit->clear();
       ui->lineEdit_2->clear();
    QMessageBox::warning(this,tr("Warning"),tr("user name or user ID error!"),QMessageBox::Yes);
    //如果不正确,弹出警告对话框

    }

}

void Dialog::on_pushButton_2_clicked()
{
    int valid=0;

   QSqlQuery query;
   QString pass0;
   QString id0;
   QString id =ui->lineEdit->text(); //从界面获取id的值
   QString pass=ui->lineEdit_2->text();

   query.exec("select * from admin");
    while( query.next()){//指向第一条记录
   id0=query.value(0).toString();
   pass0=query.value(1).toString();
   if(!QString::compare(pass,pass0)&&!QString::compare(id,id0)) //查到该用户
   {
   valid=1;
   break;
   }
}

   if(valid) //如果合法
   {

       done(-1);

   }
    else{
       ui->lineEdit->clear();
       ui->lineEdit_2->clear();
    QMessageBox::warning(this,tr("Warning"),tr("admin ID or password error!"),QMessageBox::Yes);
    //如果不正确,弹出警告对话框

    }

}


3. 图书入库与图书证管理界面



add_user::add_user(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::add_user)
{
    ui->setupUi(this);
}

add_user::~add_user()
{
    delete ui;
}

//增加借书证
void add_user::on_pushButton_clicked()
{
     QSqlQuery query;
     int exist=0;
     QString cno=ui->lineEdit->text(); //读取文本框内容
     QString name=ui->lineEdit_6->text();
     QString dept=ui->lineEdit_5->text();
     QString type=ui->lineEdit_8->text();
     QString name0,cno0;

     if(cno.isEmpty())
     {
         QMessageBox::warning(this,tr("Warning"),tr("Input cno!"),QMessageBox::Yes); //弹出警告提示框
         return; 
     }
     query.exec("select * from card");

   while( query.next())
      {//指向第一条记录
     cno0=query.value(0).toString();
     if(!QString::compare(cno,cno0)) //用户已存在
     {
         exist=1;
     break;
     }

  }
   if(exist)
   {
              QMessageBox::warning(this,tr("Warning"),tr("ID exists"),QMessageBox::Yes);
   }
      else
      {
          query.prepare("INSERT INTO card (cno,name,department,type) values(:cno,:name,:department,:type)"); //准备执行SQL查询
          query.bindValue(":cno", cno);   //在这定占位符上确定绑定的值
          query.bindValue(":name", name);
          query.bindValue(":department",dept);
          query.bindValue(":type",type);
          query.exec();
          QMessageBox::warning(this,tr("提示"),tr("Insert success"),QMessageBox::Yes);

      }
   ui->lineEdit->clear(); //清空文本框
   ui->lineEdit_5->clear();
   ui->lineEdit_6->clear();
   ui->lineEdit_8->clear();
}

//删除借书证
void add_user::on_pushButton_2_clicked()
{
    QSqlQuery query;
    int exist=0;
    QString cno=ui->lineEdit_2->text();
    QString cno0;


    query.exec("select * from card");

  while( query.next())
     {//指向第一条记录
    cno0=query.value(0).toString();
    if(!QString::compare(cno,cno0)) //用户存在
    {
    exist=1;
    break;
    }

 }
  if(!exist)
  {
       QMessageBox::warning(this,tr("warning"),tr("ID doesn't exist!"),QMessageBox::Yes);
  }
  else
  {
      query.prepare("delete from card where cno=:cno"); //准备执行SQL查询
      query.bindValue(":cno", cno);   //在这定占位符上确定绑定的值
      query.exec();
       QMessageBox::warning(this,tr("提示"),tr("Delete success"),QMessageBox::Yes);
  }
     ui->lineEdit_2->clear();
}

//图书入库
void add_user::on_pushButton_3_clicked()
{
    QSqlQuery query;
    QString bno=ui->lineEdit_3->text(); //读取文本内容
    QString category=ui->lineEdit_4->text();
    QString title=ui->lineEdit_7->text();
    QString press=ui->lineEdit_9->text();
    QString year=ui->lineEdit_10->text();
    QString author=ui->lineEdit_11->text();
    QString price=ui->lineEdit_12->text();
    QString total=ui->lineEdit_13->text();
    QString bno0;
    QString c0;
    QString t0;
    QString press0,y0,a0,price0;
    QString total0,stock0;
    int exist=0;
    int stock=0;
    int t=0;
    bool ok;

    if(bno.isEmpty())
    {
        QMessageBox::warning(this,tr("Warning"),tr("Input bno!"),QMessageBox::Yes);
        return;
    }

    query.exec("select * from book");

  while( query.next())
     {//指向第一条记录
    bno0=query.value(0).toString(); //从数据库读取内容
    c0 = query.value(1).toString();
    t0 = query.value(2).toString();
    press0 = query.value(3).toString();
    y0 = query.value(4).toString();
    a0 = query.value(5).toString();
    price0 = query.value(6).toString();
    total0 = query.value(7).toString();
    stock0 = query.value(8).toString();
    if(!QString::compare(bno,bno0)) //已存在
    {
        exist=1;
    break;
    }
  }
    if(exist)
    {
        query.prepare("select * from book where bno = :bno0");
        query.bindValue(":bno0",bno0);
        query.exec();
        t = total0.toInt(&ok,10) + total.toInt(&ok,10);
        stock = stock0.toInt(&ok,10) + total.toInt(&ok,10);
        total0 = QString::number(t);
        stock0 = QString::number(stock);
        query.prepare("update book set stock = :stock where bno = :bno0");
        query.bindValue(":bno0",bno0);
        query.bindValue(":stock",stock0);
        query.exec();
        query.prepare("update book set total = :total where bno = :bno0");
        query.bindValue(":bno0",bno0);
        query.bindValue(":total",total0);
        query.exec();
               QMessageBox::warning(this,tr("success"),tr("book exists and update"),QMessageBox::Yes);
    }
       else
       {
           query.prepare("INSERT INTO book values(:bno,:category,:title,:press,:year,:author,:price,:total,:stock)"); //准备执行SQL查询
           query.bindValue(":bno", bno);   //在这定占位符上确定绑定的值
           query.bindValue(":category", category);
           query.bindValue(":title",title);
           query.bindValue(":press",press);
           query.bindValue(":year",year);
           query.bindValue(":author",author);
           query.bindValue(":price",price);
           query.bindValue(":total",total);
           query.bindValue(":stock",total);
           query.exec();
           QMessageBox::warning(this,tr("提示"),tr("Insert success"),QMessageBox::Yes);

       }
    ui->lineEdit_3->clear();
    ui->lineEdit_4->clear();
    ui->lineEdit_7->clear();
    ui->lineEdit_9->clear();
    ui->lineEdit_10->clear();
    ui->lineEdit_11->clear();
    ui->lineEdit_12->clear();
    ui->lineEdit_13->clear();

}


4. 图书查询界面

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//输入信息查询图书
void MainWindow::on_pushButton_clicked()
{

    createConnection();
    int valid=0;
    int flag=0;
   QSqlQuery query;
   QTableView *view = new QTableView;
   QString cno0,category0,author0,press0,title0;
   QString cno =ui->lineEdit->text(); //从界面获取id的值
   QString category=ui->lineEdit_2->text();
   QString title=ui->lineEdit_3->text();
   QString author=ui->lineEdit_4->text();
   QString press=ui->lineEdit_5->text();
   QString result;
   ui->textBrowser->setPlainText("");//清空结果栏
   ui->lineEdit->clear();
   ui->lineEdit_2->clear();
   ui->lineEdit_3->clear();
   ui->lineEdit_4->clear();
   ui->lineEdit_5->clear();
   query.exec("select * from book");
  while( query.next())
  {//指向第一条记录
   cno0=query.value(0).toString();
   category0=query.value(1).toString();
   title0=query.value(2).toString();
   press0=query.value(3).toString();
   author0=query.value(5).toString();

   if(cno.isEmpty()&&category.isEmpty()
           &&title.isEmpty()&&author.isEmpty()
           &&press.isEmpty()) //查到书
     {
       flag=1;
        QMessageBox::warning(this,tr("Warning"),tr("Please Input More Informations"),QMessageBox::Yes);
        break;
   }

    else if((!QString::compare(cno,cno0)||cno.isEmpty())&&(!QString::compare(category,category0)||category.isEmpty())
           &&(!QString::compare(title,title0)||title.isEmpty())&&(!QString::compare(author,author0)||author.isEmpty())
           &&(!QString::compare(press,press0)||press.isEmpty())) //查到书
   {
          valid=1;
          result=query.value(0).toString()+"   "+query.value(1).toString()+"   "+query.value(2).toString()+"   "+query.value(3).toString()+"   "
           +query.value(4).toString()+"   "+query.value(5).toString()+"   "+query.value(6).toString()+"   "+query.value(7).toString()+"   "
           +query.value(8).toString()+"\n";
          ui->textBrowser->insertPlainText(result);
   }
}

    if(!valid&&!flag){
    QMessageBox::warning(this,tr("Warning"),tr("No Result"),QMessageBox::Yes);
    //如果不正确,弹出警告对话框
    }



}

//跳转到借还书界面
void MainWindow::on_pushButton_3_clicked()
{
    this->close();
    brrtw.show();
    brrtw.exec();
    this->show();
}


5. 借书还书界面

brrt::brrt(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::brrt)
{
    ui->setupUi(this);
}

brrt::~brrt()
{
    delete ui;
}

void brrt::on_pushButton_4_clicked()
{
    QSqlQuery query;
    QString cnoin =ui->lineEdit->text();  //读取图书证号
    QString result;
    ui->textBrowser->clear();  //清空输出部分
    query.prepare("select * from book natural join borrow where cno = :cno");
    query.bindValue(":cno",cnoin);;
    query.exec();  //选择该借书证已借书籍
    while (query.next())  //每行按格式输出
    {
        result=query.value(0).toString()+"   "+query.value(1).toString()+"   "+query.value(2).toString()+"   "+query.value(3).toString()+"   "
         +query.value(4).toString()+"   "+query.value(5).toString()+"   "+query.value(6).toString()+"   "+query.value(7).toString()+"   "
         +query.value(8).toString()+"\n";
        ui->textBrowser->insertPlainText(result);
    }
}

void brrt::borrowbk () {  //借书函数
    QSqlQuery query;
    QString cnoin =ui->lineEdit->text();  //读取图书证号
    QString bnoin =ui->lineEdit_2->text();  //读取要借的书号
    QString result;
    QString date1,date2,han;
    ui->textBrowser->clear();
    query.exec("select * from book");  //选择book表
    QString bno0;
    int exists = 0;
    while (query.next()) {  //查看是否存在该书
        bno0 = query.value(0).toString();
        if(!QString::compare(bnoin,bno0)) {
            exists=1;  //若存在该书则exists = 1
            break;
        }
    }
    if (exists == 0) {
        QMessageBox::warning(this,tr("Warning"),tr("book not found!"),QMessageBox::Yes);
}
//若该书不存在,输出错误信息
    else {  //若该书存在

        query.prepare("select stock from book where bno = :bno");
          //选择该书的库存
        query.bindValue(":bno", bnoin);
        query.exec();
        if (query.next() && query.value(0) > 0) {  //若有库存
            query.prepare("update book set stock = stock - 1 where bno = :bno");  //更新库存
            query.bindValue(":bno", bnoin);
            query.exec();

            query.prepare("insert into borrow values (:cno, :bno, :date1, :date2,:han)");  //更新borrow表
            query.bindValue(":cno", cnoin);
            query.bindValue(":bno", bnoin);
            query.bindValue(":date1", "2017-04-23");
            query.bindValue(":date2", "0000-00-00");
            query.bindValue(":han", "01");
            query.exec();
            QMessageBox::warning(this,tr("Warning"),tr("borrow success"),QMessageBox::Yes);  //输出成功信息

        }
        else {  //若无库存
            QMessageBox::warning(this,tr("Warning"),tr("No stock!"),QMessageBox::Yes);  //输出无库存信息
            query.prepare("select * from borrow where bno = :bno");
            query.bindValue(":bno", bnoin);
            query.exec();
            query.next();
            result = query.value(0).toString()+"   "+query.value(1).toString()+"   "+query.value(2).toString()+"   "+query.value(3).toString() +"\n";
            ui->textBrowser->insertPlainText(result);
//输出还书时间等信息
        }
    }

}

void brrt::returnbk () {  //还书函数
    QSqlQuery query;
    QString cnoin =ui->lineEdit->text();  //读取图书证号
    QString bnoin =ui->lineEdit_2->text();  //读取还书书号
    QString result;
    ui->textBrowser->clear();
    int existc = 0, existb = 0;
    QString bno0;
    QString cno0;
    query.exec("select * from book");  //选择book表
    while (query.next()) {  //查找该书
        bno0 = query.value(0).toString();
        if(!QString::compare(bnoin,bno0)) {
            existb=1;  //书存在
            break;
        }
    }
    query.exec("select * from card");  //选择card表
    while (query.next()) {  //查找图书证
        cno0 = query.value(0).toString();
        if(!QString::compare(cnoin,cno0)) {
            existc=1;  //图书证存在
            break;
        }
    }
    if (existb&&existc) {  //若有借书记录
        query.prepare("update book set stock = stock + 1 where bno = :bno");  //更新库存
        query.bindValue(":bno", bnoin);
        query.exec();
        query.prepare("delete from borrow where bno = :bno and cno = :cno");  //更新借书表
        query.bindValue(":bno", bnoin);
        query.bindValue(":cno", cnoin);
        query.exec();

QMessageBox::warning(this,tr("Warning"),tr("success"),QMessageBox::Yes);  //输出成功信息
    }
    else {
        QMessageBox::warning(this,tr("Warning"),tr("No borrow record!"),QMessageBox::Yes);  //否则输出错误信息
    }

}

void brrt::on_pushButton_clicked()  //借书按键接口
{
    brrt::borrowbk ();
}

void brrt::on_pushButton_2_clicked()  //还书按键接口
{
    brrt::returnbk ();
}

void brrt::on_pushButton_3_clicked()  //返回查询界面按键接口
{
    this->close();
}
  • 17
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
  一、序言····················································································································· 4 二、需求分析说明书···································································································· 4 2.1系统介绍................................................................................................................................................. 4 2.2系统面向的用户群体............................................................................................................................. 4 2.3系统的功能性需求................................................................................................................................. 4 2.4系统的非功能性需求............................................................................................................................. 5 2.4.1用户界面需求.................................................................................................................................. 5 2.4.2软硬件环境需求.............................................................................................................................. 5 2.4.3软件质量需求.................................................................................................................................. 5 三、可行性分析报告···································································································· 5 3.1技术可行性............................................................................................................................................. 5 3.2人员可能性............................................................................................................................................. 5 3.3时间、设备可能性................................................................................................................................. 5 3.4系统工作量............................................................................................................................................. 5 3.5代码工作量............................................................................................................................................. 5 3.6文档要求................................................................................................................................................. 5 四、开发环境与项目规划····························································································· 5 4.1开发环境................................................................................................................................................. 5 4.2项目规划与管理..................................................................................................................................... 5 4.2.1开发人员安排.................................................................................................................................. 5 4.2.2开发进度安排.................................................................................................................................. 6 五、软件界面设计标准与规范······················································································ 6 5.1编写目的................................................................................................................................................. 6 5.2界面设计思想......................................................................................................................................... 6 5.3界面设计原则......................................................................................................................................... 6 5.4界面设计样式......................................................................................................................................... 6 5.5常见提示信息样式................................................................................................................................. 6 5.6常见错误信息样式................................................................................................................................. 7 5.7其他界面约定......................................................................................................................................... 7 六、软件编码设计标准与规范······················································································ 7 6.1对象命名约定......................................................................................................................................... 7 6.2常量和变量命名约定............................................................................................................................. 8 6.3结构化编码约定..................................................................................................................................... 8 6.4数据源的约定......................................................................................................................................... 9 6.5数据库访问约定..................................................................................................................................... 9 6.6其他约定................................................................................................................................................. 9 七、数据库分析与设计································································································ 10 7.1数据库环境说明...................................................................................................................................... 10 7.2数据库命名标准与规范.......................................................................................................................... 10 7.3数据库逻辑设计...................................................................................................................................... 10 7.4数据库物理设计...................................................................................................................................... 10 7.4.1表、视图汇总.................................................................................................................................. 10 7.4.2各表、视图设计详解...................................................................................................................... 11 八、软件体系结构设计说明书······················································································ 15 8.1系统概述................................................................................................................................................. 15 8.2设计约束................................................................................................................................................. 15 8.3设计策略................................................................................................................................................. 15 8.4系统概要设计说明书............................................................................................................................. 16 8.4.1图例说明.......................................................................................................................................... 16 8.4.2系统总体结构图.............................................................................................................................. 16 8.4.3销售子系统流程图.......................................................................................................................... 17 8.4.4进货子系统流程图.......................................................................................................................... 17 8.4.5退货子系统流程图.......................................................................................................................... 17 8.5系统详细设计说明书............................................................................................................................. 17 8.5.1系统模块汇总.................................................................................................................................. 17 8.5.2系统核心模块详解.......................................................................................................................... 18 8.5.3系统模块详解.................................................................................................................................. 28 九、用户界面设计报告································································································ 42 9.1界面设计规范......................................................................................................................................... 42 9.2系统窗体汇总......................................................................................................................................... 42 9.3主界面设计............................................................................................................................................. 43 9.4子界面设计............................................................................................................................................. 43 9.5界面资源设计......................................................................................................................................... 44 十、软件测试分析报告································································································ 44 10.1测试范围与主要内容........................................................................................................................... 44 10.2测试方法............................................................................................................................................... 44 10.3测试报告............................................................................................................................................... 44 10.4改进建议与措施................................................................................................................................... 45 十一、软件使用说明书····························································&

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值