C++课程设计(信用卡客户管理系统)

信用卡客户管理系统

基本要求:

信用卡信息:卡号、用户姓名、身份证号码、开户银行、信用额度、消费金额、信用积分(可能为负)等。

功能要求:

1、设计菜单实现功能选择;

2、能够对信用卡信息进行维护:新建、修改、删除操作;

3、能够对信用卡进行信用额度调整、信用积分兑换等工作;

4、按给定的条件(卡号、用户姓名、身份证号码、信用积分等)查询信息;

5、能将信用卡信息按卡号、信用额度、消费金额、信用积分这些信息项排序整理;

6、以文件形式保存相关信息,可以读取默认文件中的信息进行查询等操作。

7、考虑各项数据的合法性检查

信用卡客户管理系统(CMS)主要功能为:信用卡管理、链表管理、管理者,可以完成信用卡新建、修改、删除、查询等工作。

分别设计信用卡类(CreditCard)、卡组链表类(CreditCardList)、管理员类(CreditCardManager)实现通用的功能。

用文本文件进行数据的保存,需要保存的数据主要包括信用卡卡号、用户姓名、身份证号、开户银行、信用额度、消费金额、信用积分。设置数据操作类,实现所有的文本操作相关的功能。

一、具体类结构声明如下:

1.CreditCard类:

//"CreditCard.h"

#ifndef CREDITCARD_H
#define CREDITCARD_H

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

//定义信用卡类
class CreditCard {
private:
    string cardNo;      // 卡号
    string userName;    // 用户姓名
    string idNo;        // 身份证号码
    string bankName;    // 开户银行
    double creditLimit;      // 信用额度
    double consumeAmount;     // 消费金额
    double creditScore;      // 信用积分

public:
    // 构造函数
    CreditCard(string  = "", string  = "", string  = "", string  = "",
        double  = 0.0, double  = 0.0, double  = 0.0);
    ~CreditCard(){}
    // 获取和设置信用卡属性
    string getCardNo() const;          //卡号
    void setCardNo(const string& cardNo);
    string getUserName() const;        //用户名
    void setUserName(const string& username);
    string getIdNo() const;            //身份证号码
    void setIdNo(const string& idNo);
    string getBankName() const;        //开户银行
    void setBankName(const string& bankName);
    double getCreditLimit() const;      // 信用额度
    void setCreditLimit(double creditLimit);
    double getConsumeAmount() const;      // 消费金额
    void setConsumeAmount(double consumeamount);
    double getCreditScore() const;        // 信用积分
    void setCreditScore(double creditScore);

    // 重载输出流运算符
    friend ostream& operator<<(std::ostream& os, const CreditCard& card);
};

#endif // CREDITCARD_H

2.CreditCardList类:

// "CreditCardList.h"

#ifndef CREDITCARDLIST_H
#define CREDITCARDLIST_H

#include "CreditCard.h"
#include <sstream>

class CreditCardList {
public:
    CreditCardList();       //默认构造
    ~CreditCardList();      //默认析构
    int getSize() const;    //获取长度
    void display() const;   //输出所有数据

    //维护函数
    void insertCard(CreditCard* card);  // 插入信用卡
    bool deleteCard(string cardNo);     // 删除信用卡
    void changeCard(string cardno);     // 修改信用卡

    //查找函数
    CreditCard* findCardByCardNo(string cardno) const;      // 按卡号查找信用卡
    CreditCard* findCardByUserName(string username) const;  // 按用户姓名查找信用卡
    CreditCard* findCardByIdNo(string idno) const;          // 按身份证号码查找信用卡

    //排序函数
    void sortByCardNo();        // 按卡号排序
    void sortByCreditLimit();   // 按信用额度排序
    void sortByConsumeAmount(); // 按消费金额排序
    void sortByCreditScore();    // 按信用积分排序

    //文件流函数
    void saveToFile(string fileName) const; // 保存信息到文件
    void loadFromFile(string fileName); // 加载信息从文件
private:
    struct Node {           //定义节点,作为结构体成员
        CreditCard* data;   
        Node* next;
    };
    Node* head_;        //头节点
    int size;           //节点个数
};

#endif          //CREDITCARDLIST_H

3.CreditCardManager类:

//"CreditCardManager.h"

#ifndef CREDITCARDMANAGER_H
#define CREDITCARDMANAGER_H

#include "CreditCardList.h"     //包括"CreditCardList.h"头文件
class CreditCardManager
{
public:
    //文件流函数
    void loadCards(string fileName);   // 从文件中读取信用卡信息
    void saveCards(string fileName);    //保存信用卡信息到文件

    //维护函数
    void printCards();  // 打印所有信用卡的信息
    void addCard();    // 添加一张新的信用卡
    void removeCard();   // 删除指定卡号的信用卡
    void change_card(); //修改指定卡号的信用卡

    //查找函数
    void search_by_card_no();       // 按卡号查找信用卡
    void search_by_user_name();     // 按用户名查找信用卡
    void search_by_id_no();         // 按身份证号查找信用卡

    //排序函数
    void sort_by_card_no();         // 按卡号排序
    void sort_by_credit_limit();    // 按信用额度排序
    void sort_by_consume_amount();  // 按消费金额排序
    void sort_by_credit_score();    // 按信用积分排序

private:
	CreditCardList cardList;    //定义卡组链表作为成员

};

#endif //CREDITCARDMANAGER_H

二、类实现:

1.CreditCard类

#include "CreditCard.h"

// 构造函数
CreditCard::CreditCard(string cardno, string username, string idno, string bankname,
    double creditlimit, double ConsumeAmount, double creditScore)
    : cardNo(cardno), userName(username), idNo(idno), bankName(bankname), creditLimit(creditlimit),
    consumeAmount(ConsumeAmount), creditScore(creditScore) {}

// 获取和设置信用卡属性
string CreditCard::getCardNo() const {
    return cardNo;
}
void CreditCard::setCardNo(const std::string& cardNo) {
    this->cardNo = cardNo;
}
string CreditCard::getUserName() const {
    return userName;
}
void CreditCard::setUserName(const std::string& username) {
    this->userName = username;
}
string CreditCard::getIdNo() const {
    return idNo;
}
void CreditCard::setIdNo(const std::string& idNo) {
    this->idNo = idNo;
}
string CreditCard::getBankName() const {
    return bankName;
}
void CreditCard::setBankName(const std::string& bankName) {
    this->bankName = bankName;
}
double CreditCard::getCreditLimit() const {
    return creditLimit;
}
void CreditCard::setCreditLimit(double creditLimit) {
    this->creditLimit = creditLimit;
}
double CreditCard::getConsumeAmount() const
{
    return consumeAmount;
}
void CreditCard::setConsumeAmount(double consumeamount){
    this->consumeAmount = consumeamount;
}
double CreditCard::getCreditScore() const {
    return creditScore;
}
void CreditCard::setCreditScore(double creditscore) {
    this->creditScore = creditscore;
}


// 重载输出流运算符,用于输出信息
ostream& operator<<(std::ostream& os, const CreditCard& card) {
    os << "卡号:" << card.getCardNo()
        << ",\n用户姓名:" << card.getUserName()
        << ",\n身份证号码:" << card.getIdNo()
        << ",\n开户银行:" << card.getBankName()
        << ",\n信用额度:" << card.getCreditLimit()
        << ",\n消费金额:" << card.getConsumeAmount()
        << ",\n信用积分:" << card.getCreditScore() << endl;
    return os;
}

2.CreditCardList类:

//"CreditCardList.cpp"

#include "CreditCardList.h"

// 重载默认构造函数
CreditCardList::CreditCardList()
{
	head_ = nullptr;
    size = 0;
}

// 重载默认析构函数
CreditCardList::~CreditCardList()
{
    Node* current = head_;  //从头节点开始
    while (current != nullptr) {        //遍历并释放所有节点空间
        Node* _next = current->next;    
        delete current;
        current = _next;
    }
    size = 0;
}

//获取链表长度
int CreditCardList::getSize() const
{
    return size;
}

//输出链表所有节点数据
void CreditCardList::display() const
{
    Node* current = head_;
    while (current != nullptr) {
        cout << *current->data;     //输出该节点对应信用卡的所有数据
        current = current->next;    //转至下一节点
    }
}

//插入节点
void CreditCardList::insertCard(CreditCard* card)
{
    Node* newNode = new Node{ card,head_ };   //逆向建表
    head_ = newNode;
    size++;
}

//按卡号删除节点
bool CreditCardList::deleteCard(string cardNo)
{
    Node* prev = nullptr;   //前节点
    Node* current = head_;
    while (current != nullptr) {
        if (current->data->getCardNo() == cardNo) {
            if (prev == nullptr) {      //找到的是第1个节点
                head_ = current->next;
            }
            else {  //正常情况
                prev->next = current->next;
            }
            delete current;
            size--;
            return true;
        }
        prev = current;
        current = current->next;
    }
    return false;
}

//修改卡片数据
void CreditCardList::changeCard(string cardno)
{
    CreditCard* pos = findCardByCardNo(cardno);   //查找定位当前信用卡
    bool exit_while = false;        //跳出 while 标记
    while (pos != nullptr&&exit_while!=true) {
        cout << "请选择: \n"
            << "1. 改卡号\n"
            << "2. 改姓名\n"
            << "3. 改身份证号码\n"
            << "4. 改开户银行\n"
            << "5. 改信用额度\n"
            << "6. 改消费金额\n"
            << "7. 改信用积分\n"
            << "0. 结束更改\n";
        int choice;
        cin >> choice;
        switch (choice) {       //匹配执行
        case 1:         //改卡号
        {
            cout << "原卡号:" << pos->getCardNo() << "\t请输入新卡号:";
            string newcardno;
            cin >> newcardno;
            pos->setCardNo(newcardno);  
            break;
        }
        case 2:         //改姓名
        {
            cout << "原姓名:" << pos->getUserName() << "\t请输入新姓名:";
            string newusername;
            cin >> newusername;
            pos->setUserName(newusername);
            break;
        }
        case 3:         //改身份证号码
        {
            cout << "原身份证号:" << pos->getIdNo() << "\t请输入新身份证号:";
            string newidno;
            cin >> newidno;
            pos->setIdNo(newidno);
            break;
        }
        case 4:         //改开户银行
        {
            cout << "原开户银行:" << pos->getBankName() << "\t请输入新开户银行:";
            string newbankname;
            cin >> newbankname;
            pos->setUserName(newbankname);
            break;
        }
        case 5:         //改信用额度
        {
            cout << "原信用额度:" << pos->getCreditLimit() << "\t请输入新信用额度:";
            double newcreditlimit;
            cin >> newcreditlimit;
            pos->setCreditLimit(newcreditlimit);
            break;
        }
        case 6:
        {
            cout << "原消费金额:" << pos->getConsumeAmount() << "\t请输入新消费金额:";
            double newconsumeamount;
            cin >> newconsumeamount;
            pos->setConsumeAmount(newconsumeamount);
            break;
        }
        case 7:         //改信用积分
        {
            cout << "原信用积分:" << pos->getCreditScore() << "\t请输入新信用积分:";
            double newcreditscore;
            cin >> newcreditscore;
            pos->setCreditScore(newcreditscore);
            break;
        }
        case 0:         //退出 while
            exit_while = true;
            break;
        default:
            cout << "错误输入,请重试!\n";
        }
    }
    
}

//------------查找函数----------
//按卡号查找
CreditCard* CreditCardList::findCardByCardNo(string cardno) const
{
    Node* current = head_;
    while (current != nullptr) {
        if (current->data->getCardNo() == cardno) {
            return current->data;
        }
        current = current->next;
    }
    return nullptr;
}

//按姓名查找
CreditCard* CreditCardList::findCardByUserName(string username) const
{
    Node* current = head_;
    while (current != nullptr) {
        if (current->data->getUserName() == username) {
            return current->data;
        }
        current = current->next;
    }
    return nullptr;
}

//按身份证号查找
CreditCard* CreditCardList::findCardByIdNo(string idno) const
{
    Node* current = head_;
    while (current != nullptr) {
        if (current->data->getIdNo() == idno) {
            return current->data;
        }
        current = current->next;
    }
    return nullptr;
}

//-----------排序函数---------
//按卡号排序
void CreditCardList::sortByCardNo()
{
    bool sorted = false;
    while (!sorted) {
        sorted = true;      //排序完成标记
        for (Node* current = head_; current != nullptr && current->next != nullptr; current = current->next) {
            if (current->data->getCardNo() > current->next->data->getCardNo()) {    //如果卡号比后节点大则交换卡片顺序
                CreditCard* temp = current->data;
                current->data = current->next->data;
                current->next->data = temp;
                sorted = false; //排序未完成
            }
        }
    }
}

//按信用额度排序
void CreditCardList::sortByCreditLimit()
{
    bool sorted = false;
    while (!sorted) {
        sorted = true;      //排序完成标记
        for (Node* current = head_; current != nullptr && current->next != nullptr; current = current->next) {
            if (current->data->getCreditLimit() > current->next->data->getCreditLimit()) {   //如果信用额度比后节点大则交换卡片顺序
                CreditCard* temp = current->data;
                current->data = current->next->data;
                current->next->data = temp;
                sorted = false;
            }
        }
    }
}

//按消费金额排序
void CreditCardList::sortByConsumeAmount()
{
    bool sorted = false;
    while (!sorted) {
        sorted = true;       //排序完成标记
        for (Node* current = head_; current != nullptr && current->next != nullptr; current = current->next) {
            if (current->data->getConsumeAmount() > current->next->data->getConsumeAmount()) {  //如果消费金额比后节点大则交换卡片顺序
                CreditCard* temp = current->data;
                current->data = current->next->data;
                current->next->data = temp;
                sorted = false; //排序未完成
            }
        }
    }
}

//按信用积分排序
void CreditCardList::sortByCreditScore()
{
    bool sorted = false;
    while (!sorted) {
        sorted = true;      //排序完成标记
        for (Node* current = head_; current != nullptr && current->next != nullptr; current = current->next) {
            if (current->data->getCreditScore() > current->next->data->getCreditScore()) {  //如果信用积分比后节点大则交换卡片顺序
                CreditCard* temp = current->data;
                current->data = current->next->data;
                current->next->data = temp;
                sorted = false; //排序未完成
            }
        }
    }
}

//-----------文件函数-----------
//文件保存
void CreditCardList::saveToFile(string fileName) const
{
    ofstream outfile(fileName);     //文件流对象,以输出方式打开ASCII码文件
    Node* current = head_;
    while (current != nullptr) {     //输出到文件
        outfile<<current->data->getCardNo()<<'\t'
               << current->data->getUserName() << '\t'
               <<current->data->getIdNo()<<'\t'
               <<current->data->getBankName()<<'\t'
               << current->data->getCreditLimit() << '\t'
               << current->data->getConsumeAmount() << '\t'
               << current->data->getCreditScore() << endl;
        current = current->next;
    }
    outfile.close();
}

//文件读取
void CreditCardList::loadFromFile(string fileName)
{
    ifstream infile(fileName);  //文件流对象,以输入方式打开ASCII码文件
    string line;
    while (getline(infile, line)) { //文件内容输入
        stringstream ss(line);      //字符串流
        string card_no, user_name, id_no, bank_name;
        double credit_limit, consumer_amount, credit_score;
        ss >> card_no >> user_name >>id_no>>bank_name>> credit_limit >> consumer_amount >> credit_score;
        CreditCard* card = new CreditCard(card_no, user_name,id_no,bank_name, credit_limit, consumer_amount, credit_score); //创建新的 CreditCard 对象
        insertCard(card);   //将新的卡片插入链表
    }
    infile.close();
}

3.CreditManager类:

//"CreditCardManager.h"

#include "CreditCardManager.h"


//读取
void CreditCardManager::loadCards(string fileName)
{
	cardList.loadFromFile(fileName);
	cout << "从文件 " << fileName << " 中读取了 " << cardList.getSize() << " 张信用卡信息。" << endl;

}

//保存
void CreditCardManager::saveCards(string fileName)
{
	cardList.saveToFile(fileName);
}

//输出
void CreditCardManager::printCards()
{
	cardList.display();
}

//添加
void CreditCardManager::addCard()
{
	cout << "请输入要添加的信用卡信息(卡号、用户姓名、身份证号、开户银行、信用额度、已消费金额、信用积分):" << endl;
	string card_no, user_name, id_no, bank_name;
	double credit_limit, consumer_amount, credit_score;
	cin >> card_no >> user_name >> id_no >> bank_name >> credit_limit >> consumer_amount >> credit_score;
	CreditCard* card = new CreditCard(card_no, user_name, id_no, bank_name, credit_limit, consumer_amount, credit_score);
	cardList.insertCard(card);
	cout << "成功添加卡号为"<<card_no<<"的信用卡" << endl;

}

//删除
void CreditCardManager::removeCard()
{
	cout << "请输入要删除的信用卡卡号:" << endl;
	string cardNoToDelete;
	cin >> cardNoToDelete;
	if (cardList.deleteCard(cardNoToDelete)) {
		cout << "删除成功!" << endl;
	}
	else {
		cout << "未找到卡号为 " << cardNoToDelete << " 的信用卡!" << endl;
	}
	return ;
}

//修改
void CreditCardManager::change_card()
{
	cout << "请输入要修改的信用卡卡号:" << endl;
	string card_no;
	cin >> card_no;
	cardList.changeCard(card_no);
}

//按卡号查找
void CreditCardManager::search_by_card_no()
{
	cout << "请输入要查找的卡号:";
	string card_no;
	cin >> card_no;
	if (cardList.findCardByCardNo(card_no)) {	//将输入值与链表里的值进行比对
		cout << "查找成功,该卡信息如下:\n"
			 <<*cardList.findCardByCardNo(card_no);		//输出查找结果
		cout << "按1继续查找:  ";
		string choice = " ";		//继续指令
		cin >> choice;
		if (choice == "1") {
			search_by_card_no();	//继续调用该查找函数
		}
		else return;
	}
	else cout << "未找到该卡号!请重新输入:\n"; search_by_card_no();	//继续调用该函数
}
	
//按姓名查找
void CreditCardManager::search_by_user_name()
{
	cout << "请输入要查找的姓名:";
	string user_name;
	cin >> user_name;
	if (cardList.findCardByUserName(user_name)) {	//将输入值与链表里的值进行比对
		cout << "查找成功,该卡信息如下:\n"
			 <<*cardList.findCardByUserName(user_name);		//输出查找结果
		cout << "按1继续查找:  ";
		string choice = " ";		//继续指令
		cin >> choice;
		if (choice == "1") {
			search_by_user_name();	//继续调用该查找函数
		}
		else return;

	}
	else cout << "未找到该姓名!请重新输入:\n"; search_by_user_name();	//继续调用该函数

}

//按身份证号查找
void CreditCardManager::search_by_id_no()
{
	cout << "请输入要查找的身份证号:";
	string id_no;
	cin >> id_no;
	if (cardList.findCardByIdNo(id_no)) {	//将输入值与链表里的值进行比对
		cout << "查找成功,该卡信息如下:\n"	
			<< *cardList.findCardByIdNo(id_no);		//输出查找结果
		cout << "按1继续查找:  ";
		string choice = " ";		//继续指令
		cin >> choice;
		if (choice == "1") {
			search_by_id_no();	//继续调用该查找函数
		}
		else return;
	}
	else {
		cout << "未找到该身份证号!请重新输入:\n"; search_by_id_no();	//继续调用该函数
	}
}

//按卡号排序
void CreditCardManager::sort_by_card_no()
{
	cardList.sortByCardNo();
	cout << "排序完成,结果如下:\n";
	cardList.display();
}

//按信用额度排序
void CreditCardManager::sort_by_credit_limit()
{
	cardList.sortByCreditLimit();
	cout << "排序完成,结果如下:\n";
	cardList.display();
}

//按消费金额排序
void CreditCardManager::sort_by_consume_amount()
{
	cardList.sortByConsumeAmount();	
	cout << "排序完成,结果如下:\n";
	cardList.display();
}

//按信用积分排序
void CreditCardManager::sort_by_credit_score()
{
	cardList.sortByCreditScore();
	cout << "排序完成,结果如下:\n";
	cardList.display();
}

三、主函数

// C++课程设计.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <fstream>
#include "CreditCard.h"
#include "CreditCardList.h"
#include "CreditCardManager.h"


using namespace std;

void menu();

int main() {
	CreditCardManager manager;
	string fileName = "CreditCardList.txt";	
	manager.loadCards(fileName);		//读取文件
	bool exitFlag = false;		//退出循环标记
	while (!exitFlag) {
		menu();		//显示菜单
		int choice;
		cin >> choice;
		
		switch (choice) {			//匹配执行相应操作
		case 1:		
			manager.printCards();	// 显示所有数据
			break;
		case 2:
			manager.addCard();		//添加卡片
			break;
		case 3:
			manager.removeCard();	//删除卡片
			break;
		case 4:
			manager.change_card();	//修改卡片
			break;
		case 5:
			manager.search_by_card_no();	//根据卡号查找
			break;
		case 6:
			manager.search_by_user_name();	//根据姓名查找
			break;
		case 7:
			manager.search_by_id_no();	//根据身份证号码查找
			break;
		case 8:
			manager.sort_by_card_no();	// 通过卡号排序
			break;
		case 9:
			manager.sort_by_credit_limit();	// 通过信用额度排序
			break;
		case 10:
			manager.sort_by_consume_amount();	//通过消费金额排序
			break;
		case 11:
			manager.sort_by_credit_score();	//通过信用积分排序
			break;
		case 0:
			exitFlag = true;	// 退出系统
			break;
		default:
			cout << "错误输入,请重试!\n";
			break;
		}
		manager.saveCards("CreditCardList.txt");	//保存到文件
		system("pause");
		system("cls");
	}
	cout << "谢谢使用!" << endl;
	return 0;
}


void menu() {
	cout<< "---------------信用卡管理系统--------------------" << endl;
		cout << "1. 显示所有信用卡" << endl;
		cout << "2. 添加信用卡" << endl;
		cout << "3. 删除信用卡" << endl;
		cout << "4. 修改信用卡" << endl;
		cout << "5. 按卡号查找信用卡" << endl;
		cout << "6. 按姓名查找信用卡" << endl;
		cout << "7. 按身份证查找信用卡" << endl;
		cout << "8. 按卡号给信用卡排序" << endl;
		cout << "9. 按信用额度给信用卡排序" << endl;
		cout << "10.按消费金额给信用卡排序" << endl;
		cout << "11.按信用积分给信用卡排序" << endl;
		cout << "0. 退出系统" << endl;
		cout << "------------------------------" << endl;
		cout << "请输入您的选择:";
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
宾馆客房管理系统是针对宾馆客房管理工作流程设计的一种信息化管理系统,旨在提高宾馆客房管理效率和服务质量。c 课程设计宾馆客房管理系统涉及多个方面的内容,包括客房预订、客房分配、客房清洁、客房维护、客房结算等。 首先,课程设计中需要明确宾馆客房管理系统的功能和模块设计,包括前台接待系统、客房清洁管理系统、客房维护管理系统、客户信息管理系统等,同时需要考虑系统的操作界面设计和用户体验。 其次,课程设计需要考虑宾馆客房管理系统的数据管理和报表分析功能,包括客房预订信息、客房使用记录、客户反馈信息等数据的管理和分析,以及相关的报表输出和统计分析功能,以便宾馆管理人员对经营状况进行及时、准确的分析。 另外,课程设计还需要考虑宾馆客房管理系统与其他管理系统的集成和数据共享,比如财务管理系统、人力资源管理系统等,以实现各管理系统的数据互通和信息共享,提高全面管理效率。 最后,课程设计还需要考虑宾馆客房管理系统的安全性和稳定性,包括数据备份和灾难恢复机制的设计,以及系统的权限管理和访问控制,保障宾馆客房管理系统的稳定运行和安全性。 综上所述,c 课程设计宾馆客房管理系统需要全面考虑宾馆客房管理的各个环节,设计出功能全面、操作简便、安全稳定的信息化管理系统,以提高宾馆客房管理效率和服务质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值