当前位置:

首页 > 编程开发 > C++简易银行系统类与对象教程

C++简易银行系统类与对象教程

如何利用C++的类与对象模拟银行账户的基本操作并构建管理系统?1.定义BankAccount类,包含账户ID、持有人姓名和余额等属性,并实现存款、取款、查询余额及打印账户信息的方法;2.创建Bank类,使用std::vector容器管理多个BankAccount对象,提供添加、删除、查找账户等功能;3.为处理并发访问,引入std::mutex互斥锁保护balance变量,确保线程安全;4.扩展支持不同账户类型时,使用继承机制设计SavingsAccount(储蓄账户)和CheckingAccount(支票

本文目录

    如何利用C++的类与对象模拟银行账户的基本操作并构建管理系统?1. 定义BankAccount类,包含账户ID、持有人姓名和余额等属性,并实现存款、取款、查询余额及打印账户信息的方法;2. 创建Bank类,使用std::vector容器管理多个BankAccount对象,提供添加、删除、查找账户等功能;3. 为处理并发访问,引入std::mutex互斥锁保护balance变量,确保线程安全;4. 扩展支持不同账户类型时,使用继承机制设计SavingsAccount(储蓄账户)和CheckingAccount(支票账户),分别实现利率计算和透支功能;5. 实现账户数据持久化,可通过文件存储使用ofstream和ifstream进行读写操作,或通过数据库如SQLite实现更复杂的数据管理。

    怎样用C++制作简易银行账户系统 类与对象的基础应用

    核心在于如何利用C++的类与对象,模拟银行账户的创建、存取款等基本操作,构建一个简单的银行账户管理系统。

    怎样用C++制作简易银行账户系统 类与对象的基础应用

    解决方案:

    首先,我们需要定义一个BankAccount类,它将包含账户的基本属性,如账户ID、账户持有人姓名和账户余额,以及相关的操作方法。

    怎样用C++制作简易银行账户系统 类与对象的基础应用
    #include 
    #include 
    
    class BankAccount {
    private:
        int accountID;
        std::string accountHolderName;
        double balance;
    
    public:
        // 构造函数
        BankAccount(int id, std::string name, double initialBalance) : accountID(id), accountHolderName(name), balance(initialBalance) {}
    
        // 获取账户ID
        int getAccountID() const {
            return accountID;
        }
    
        // 获取账户持有人姓名
        std::string getAccountHolderName() const {
            return accountHolderName;
        }
    
        // 获取账户余额
        double getBalance() const {
            return balance;
        }
    
        // 存款
        void deposit(double amount) {
            if (amount > 0) {
                balance += amount;
                std::cout << "存款成功,当前余额:" << balance << std::endl;
            } else {
                std::cout << "存款金额必须大于0" << std::endl;
            }
        }
    
        // 取款
        void withdraw(double amount) {
            if (amount > 0 && amount <= balance) {
                balance -= amount;
                std::cout << "取款成功,当前余额:" << balance << std::endl;
            } else {
                std::cout << "取款失败,余额不足或取款金额无效" << std::endl;
            }
        }
    
        // 打印账户信息
        void printAccountInfo() const {
            std::cout << "账户ID: " << accountID << std::endl;
            std::cout << "账户持有人姓名: " << accountHolderName << std::endl;
            std::cout << "账户余额: " << balance << std::endl;
        }
    };
    
    int main() {
        // 创建一个银行账户对象
        BankAccount account1(12345, "张三", 1000.0);
    
        // 打印账户信息
        account1.printAccountInfo();
    
        // 存款
        account1.deposit(500.0);
    
        // 取款
        account1.withdraw(200.0);
    
        // 再次打印账户信息
        account1.printAccountInfo();
    
        return 0;
    }

    这个简单的例子展示了如何创建一个BankAccount类,并实现存款和取款功能。 接下来,可以考虑如何扩展这个系统,例如添加账户管理功能,允许多个账户存在。

    如何添加账户管理功能,实现多个账户的管理?

    怎样用C++制作简易银行账户系统 类与对象的基础应用

    创建一个Bank类,该类包含一个BankAccount对象的容器(例如std::vector),并提供添加账户、删除账户、查找账户等功能。

    #include 
    #include 
    #include 
    
    // BankAccount 类 (如上所示)
    
    class Bank {
    private:
        std::vector accounts;
    
    public:
        // 添加账户
        void addAccount(const BankAccount& account) {
            accounts.push_back(account);
            std::cout << "账户已添加" << std::endl;
        }
    
        // 删除账户 (根据账户ID)
        void removeAccount(int accountID) {
            for (auto it = accounts.begin(); it != accounts.end(); ++it) {
                if (it->getAccountID() == accountID) {
                    accounts.erase(it);
                    std::cout << "账户已删除" << std::endl;
                    return;
                }
            }
            std::cout << "未找到该账户" << std::endl;
        }
    
        // 查找账户 (根据账户ID)
        BankAccount* findAccount(int accountID) {
            for (auto& account : accounts) {
                if (account.getAccountID() == accountID) {
                    return &account;
                }
            }
            std::cout << "未找到该账户" << std::endl;
            return nullptr;
        }
    
        // 打印所有账户信息
        void printAllAccounts() const {
            if (accounts.empty()) {
                std::cout << "银行中没有账户" << std::endl;
                return;
            }
            for (const auto& account : accounts) {
                account.printAccountInfo();
                std::cout << "---------------------" << std::endl;
            }
        }
    };
    
    int main() {
        Bank myBank;
    
        // 创建账户
        BankAccount account1(12345, "张三", 1000.0);
        BankAccount account2(67890, "李四", 500.0);
    
        // 添加账户到银行
        myBank.addAccount(account1);
        myBank.addAccount(account2);
    
        // 打印所有账户信息
        myBank.printAllAccounts();
    
        // 查找账户
        BankAccount* foundAccount = myBank.findAccount(12345);
        if (foundAccount != nullptr) {
            std::cout << "找到账户:" << foundAccount->getAccountHolderName() << std::endl;
        }
    
        // 删除账户
        myBank.removeAccount(67890);
    
        // 再次打印所有账户信息
        myBank.printAllAccounts();
    
        return 0;
    }

    这个Bank类维护了一个BankAccount的容器,并提供了添加、删除和查找账户的功能。 值得注意的是,错误处理和边界情况的处理非常重要,例如,当尝试删除或查找不存在的账户时,应该给出明确的提示。

    如何处理并发访问银行账户时的线程安全问题?

    当多个线程同时访问和修改银行账户余额时,可能会出现数据竞争,导致账户余额错误。 为了解决这个问题,可以使用互斥锁(std::mutex)来保护对账户余额的访问。

    #include 
    #include 
    #include 
    #include 
    
    class BankAccount {
    private:
        int accountID;
        std::string accountHolderName;
        double balance;
        std::mutex balanceMutex; // 互斥锁
    
    public:
        BankAccount(int id, std::string name, double initialBalance) : accountID(id), accountHolderName(name), balance(initialBalance) {}
    
        int getAccountID() const {
            return accountID;
        }
    
        std::string getAccountHolderName() const {
            return accountHolderName;
        }
    
        double getBalance() const {
            std::lock_guard lock(balanceMutex); // 获取锁
            return balance;
        }
    
        void deposit(double amount) {
            if (amount > 0) {
                std::lock_guard lock(balanceMutex); // 获取锁
                balance += amount;
                std::cout << "存款成功,当前余额:" << balance << " (线程ID: " << std::this_thread::get_id() << ")" << std::endl;
            } else {
                std::cout << "存款金额必须大于0" << std::endl;
            }
        }
    
        void withdraw(double amount) {
            if (amount > 0 && amount <= balance) {
                std::lock_guard lock(balanceMutex); // 获取锁
                balance -= amount;
                std::cout << "取款成功,当前余额:" << balance << " (线程ID: " << std::this_thread::get_id() << ")" << std::endl;
            } else {
                std::cout << "取款失败,余额不足或取款金额无效" << std::endl;
            }
        }
    
        void printAccountInfo() const {
            std::lock_guard lock(balanceMutex); // 获取锁
            std::cout << "账户ID: " << accountID << std::endl;
            std::cout << "账户持有人姓名: " << accountHolderName << std::endl;
            std::cout << "账户余额: " << balance << std::endl;
        }
    };
    
    void performTransactions(BankAccount& account, int numTransactions) {
        for (int i = 0; i < numTransactions; ++i) {
            account.deposit(100.0);
            account.withdraw(50.0);
        }
    }
    
    int main() {
        BankAccount account(12345, "张三", 1000.0);
    
        // 创建多个线程进行并发操作
        std::thread thread1(performTransactions, std::ref(account), 1000);
        std::thread thread2(performTransactions, std::ref(account), 1000);
    
        // 等待线程完成
        thread1.join();
        thread2.join();
    
        // 打印最终账户信息
        account.printAccountInfo();
    
        return 0;
    }

    在这个例子中,std::mutex balanceMutex用于保护balance变量。 std::lock_guard是一个RAII(Resource Acquisition Is Initialization)风格的锁,它在构造时获取锁,在析构时释放锁,确保在任何情况下都能正确释放锁,即使发生异常。 通过使用互斥锁,可以避免多个线程同时修改balance变量,从而保证线程安全。

    如何扩展银行账户系统,支持不同类型的账户(例如储蓄账户和支票账户)?

    可以使用继承来实现不同类型的账户。 创建一个基类BankAccount,然后创建派生类SavingsAccount(储蓄账户)和CheckingAccount(支票账户),它们继承自BankAccount并添加特定于账户类型的属性和方法。

    #include 
    #include 
    
    class BankAccount {
    protected: // 修改为protected,允许派生类访问
        int accountID;
        std::string accountHolderName;
        double balance;
    
    public:
        BankAccount(int id, std::string name, double initialBalance) : accountID(id), accountHolderName(name), balance(initialBalance) {}
    
        virtual ~BankAccount() {} // 虚析构函数
    
        int getAccountID() const {
            return accountID;
        }
    
        std::string getAccountHolderName() const {
            return accountHolderName;
        }
    
        double getBalance() const {
            return balance;
        }
    
        virtual void deposit(double amount) { // 虚函数
            if (amount > 0) {
                balance += amount;
                std::cout << "存款成功,当前余额:" << balance << std::endl;
            } else {
                std::cout << "存款金额必须大于0" << std::endl;
            }
        }
    
        virtual void withdraw(double amount) { // 虚函数
            if (amount > 0 && amount <= balance) {
                balance -= amount;
                std::cout << "取款成功,当前余额:" << balance << std::endl;
            } else {
                std::cout << "取款失败,余额不足或取款金额无效" << std::endl;
            }
        }
    
        virtual void printAccountInfo() const { // 虚函数
            std::cout << "账户ID: " << accountID << std::endl;
            std::cout << "账户持有人姓名: " << accountHolderName << std::endl;
            std::cout << "账户余额: " << balance << std::endl;
        }
    };
    
    class SavingsAccount : public BankAccount {
    private:
        double interestRate;
    
    public:
        SavingsAccount(int id, std::string name, double initialBalance, double rate) : BankAccount(id, name, initialBalance), interestRate(rate) {}
    
        void addInterest() {
            double interest = balance * interestRate;
            deposit(interest);
            std::cout << "已添加利息:" << interest << std::endl;
        }
    
        void printAccountInfo() const override { // 重写
            BankAccount::printAccountInfo();
            std::cout << "利率: " << interestRate << std::endl;
        }
    };
    
    class CheckingAccount : public BankAccount {
    private:
        double overdraftLimit;
    
    public:
        CheckingAccount(int id, std::string name, double initialBalance, double limit) : BankAccount(id, name, initialBalance), overdraftLimit(limit) {}
    
        void withdraw(double amount) override { // 重写
            if (amount > 0 && (balance + overdraftLimit) >= amount) {
                balance -= amount;
                std::cout << "取款成功,当前余额:" << balance << std::endl;
            } else {
                std::cout << "取款失败,超过透支额度或取款金额无效" << std::endl;
            }
        }
    
        void printAccountInfo() const override { // 重写
            BankAccount::printAccountInfo();
            std::cout << "透支额度: " << overdraftLimit << std::endl;
        }
    };
    
    int main() {
        SavingsAccount savingsAccount(11111, "王五", 2000.0, 0.05);
        CheckingAccount checkingAccount(22222, "赵六", 1500.0, 500.0);
    
        savingsAccount.printAccountInfo();
        savingsAccount.addInterest();
        savingsAccount.printAccountInfo();
    
        checkingAccount.printAccountInfo();
        checkingAccount.withdraw(2000.0); // 允许透支
        checkingAccount.printAccountInfo();
    
        return 0;
    }

    在这个例子中,SavingsAccount添加了interestRate属性和addInterest方法,而CheckingAccount添加了overdraftLimit属性并重写了withdraw方法以支持透支。 virtual关键字使得基类的方法可以被派生类重写,从而实现多态性。

    如何将账户数据持久化到文件或数据库中?

    可以使用文件或数据库来持久化账户数据。 对于简单的系统,可以使用文件存储。 对于更复杂的系统,可以使用数据库(例如SQLite、MySQL或PostgreSQL)。

    使用文件存储:

    #include 
    #include 
    #include 
    
    class BankAccount {
    private:
        int accountID;
        std::string accountHolderName;
        double balance;
    
    public:
        BankAccount(int id, std::string name, double initialBalance) : accountID(id), accountHolderName(name), balance(initialBalance) {}
    
        int getAccountID() const {
            return accountID;
        }
    
        std::string getAccountHolderName() const {
            return accountHolderName;
        }
    
        double getBalance() const {
            return balance;
        }
    
        void deposit(double amount) {
            if (amount > 0) {
                balance += amount;
                std::cout << "存款成功,当前余额:" << balance << std::endl;
            } else {
                std::cout << "存款金额必须大于0" << std::endl;
            }
        }
    
        void withdraw(double amount) {
            if (amount > 0 && amount <= balance) {
                balance -= amount;
                std::cout << "取款成功,当前余额:" << balance << std::endl;
            } else {
                std::cout << "取款失败,余额不足或取款金额无效" << std::endl;
            }
        }
    
        void printAccountInfo() const {
            std::cout << "账户ID: " << accountID << std::endl;
            std::cout << "账户持有人姓名: " << accountHolderName << std::endl;
            std::cout << "账户余额: " << balance << std::endl;
        }
    
        // 将账户数据保存到文件
        void saveToFile(std::ofstream& file) const {
            file << accountID << std::endl;
            file << accountHolderName << std::endl;
            file << balance << std::endl;
        }
    
        // 从文件加载账户数据
        void loadFromFile(std::ifstream& file) {
            file >> accountID;
            file.ignore(); // 忽略换行符
            std::getline(file, accountHolderName);
            file >> balance;
            file.ignore(); // 忽略换行符
        }
    };
    
    int main() {
        BankAccount account1(12345, "张三", 1000.0);
    
        // 保存账户到文件
        std::ofstream outFile("accounts.txt");
        if (outFile.is_open()) {
            account1.saveToFile(outFile);
            outFile.close();
            std::cout << "账户已保存到文件" << std::endl;
        } else {
            std::cerr << "无法打开文件进行写入" << std::endl;
        }
    
        // 从文件加载账户
        BankAccount account2(0, "", 0.0); // 创建一个空账户
        std::ifstream inFile("accounts.txt");
        if (inFile.is_open()) {
            account2.loadFromFile(inFile);
            inFile.close();
            std::cout << "账户已从文件加载" << std::endl;
            account2.printAccountInfo();
        } else {
            std::cerr << "无法打开文件进行读取" << std::endl;
        }
    
        return 0;
    }

    这个例子展示了如何使用ofstream和ifstream将账户数据保存到文件和从文件加载账户数据。 需要注意的是,文件格式需要仔细设计,以确保数据的正确读取和写入。 此外,还需要处理文件打开失败等错误情况。

    使用数据库存储:

    使用数据库需要引入相应的数据库库,例如SQLite的sqlite3库。 这里只提供一个概念性的示例,具体的实现需要根据选择的数据库和库进行调整。

    // (伪代码,需要引入数据库库)
    /*
    #include 
    
    int main() {
        sqlite3 *db;
        int rc = sqlite3_open("bank.db", &db);
    
        if (rc) {
            std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;
            return 1;
        }
    
        // 创建表
        const char *createTableSQL = "CREATE TABLE IF NOT EXISTS accounts ("
                                      "accountID INTEGER PRIMARY KEY,"
                                      "accountHolderName TEXT,"
                                      "balance REAL);";
    
        rc = sqlite3_exec(db, createTableSQL, 0, 0, 0);
        if (rc != SQLITE_OK) {
            std::cerr << "创建表失败: " << sqlite3_errmsg(db) << std::endl;
            sqlite3_close(db);
            return 1;
        }
    
        // 插入数据
        const char *insertSQL = "INSERT INTO accounts (accountID, accountHolderName, balance) VALUES (12345, '张三', 1000.0);";
        rc = sqlite3_exec(db, insertSQL, 0, 0, 0);
        if (rc != SQLITE_OK) {
            std::cerr << "插入数据失败: " << sqlite3_errmsg(db) << std::endl;
            sqlite3_close(db);
            return 1;
        }
    
        // 查询数据
        const char *selectSQL = "SELECT * FROM accounts;";
        sqlite3_stmt *stmt;
        rc = sqlite3_prepare_v2(db, selectSQL, -1, &stmt, 0);
        if (rc != SQLITE_OK) {
            std::cerr << "查询失败: " << sqlite3_errmsg(db) << std::endl;
            sqlite3_close(db);
            return 1;
        }
    
        while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
            int accountID = sqlite3_column_int(stmt, 0);
            const char *accountHolderName = (const char*)sqlite3_column_text(stmt, 1);
            double balance = sqlite3_column_double(stmt, 2);
    
            std::cout << "账户ID: " << accountID << std::endl;
            std::cout << "账户持有人姓名: " << accountHolderName << std::endl;
            std::cout << "账户余额: " << balance << std::endl;
        }
    
        sqlite3_finalize(stmt);
        sqlite3_close(db);
    
        return 0;
    }
    */

    这个伪代码展示了如何使用SQLite数据库存储账户数据。 你需要安装SQLite库,并根据实际情况调整代码。 使用数据库可以提供更好的数据管理和查询功能,但也增加了系统的复杂性。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 C++
    相关文章 更多
    C++动态数组初始化怎么写?常用语句与代码示例
    C++动态数组初始化怎么写?常用语句与代码示例

    深入解析C++中动态数组的初始化机制,涵盖new操作符的不同用法、基本类型与类对象的初始化差异,以及为何在现代C++开发中应优先使用std::vector。

    C++类构造与析构函数详解
    C++类构造与析构函数详解

    C++类构造与析构函数详解 C++这门语言,可以说是从C语言这棵大树上衍生出的高级果实,如今的应用普及度有目共睹。作为一种静态类型的通用编程语言,它厉害的地方在于融合了多种编程哲学——无论是传统的面向过程,还是主流的面向对象,乃至数据抽象、泛型编程这些高级概念,它都能很好地支持。正因为这份卓越的扩展

    C++中std::upper
    C++中std::upper

    C++中std::upper_bound用法解析 在C++标准模板库(STL)的算法工具箱里,upper_bound() 绝对算得上是一把精准的“探针”。它的核心任务很明确:在一个已经排好序的区间 [first, last) 内,帮你快速定位到第一个**严格大于**指定值 value 的那个元素。这

    C++常对象与成员解析
    C++常对象与成员解析

    C++中“常”概念全景解析:从对象、成员到指针与引用 在C++的世界里,“常量性”是一个强大的保障机制。它不仅仅是一个const关键字那么简单,而是构建健壮、安全程序的重要基石。今天,我们就来系统梳理一下围绕“常”的一系列概念:常成员、常对象、常指针与常引用。理解它们,是写出高质量C++代码的关键一

    c++如何将结构体写入SQLite数据库_对象关系映射方案【进阶】
    c++如何将结构体写入SQLite数据库_对象关系映射方案【进阶】

    直接用SQLiteCAPI绑定结构体需要手动处理字段展平与顺序对齐,ORM库虽省代码但存在隐式行为风险。小项目建议原生绑定,中大型项目可搭配编译期校验使用轻量ORM。绑定std::string需传指针与长度,注意生命周期;浮点字段比较需设误差范围。

    什么是编程,学习编程的意义是?
    什么是编程,学习编程的意义是?

    编程是编写程序指令,让设备按意图运行,常用Python、C等语言或Scratch图形化编程。学习编程能跟上科技时代,锻炼自学与解决问题能力,提升逻辑思维,代表行动力,推动事物前进。各司其职,编程者尽本分。

    编程是门艺术_是编程艺术吗?
    编程是门艺术_是编程艺术吗?

    编程被争论是否为艺术。从定义看,编程是技能表达,但并非所有编程都是应用开发。写代码如音乐、文章,有独特风格。好代码需耐心与逻辑能力。编程是艺术,但应用开发不等同于编程艺术。

    【编程的感受】
    【编程的感受】

    很多人提起编程,总觉得这是一门“不起眼”的学问——不就是写写代码嘛,能有多深?但真走进去了才会发现,编程里头的门道,远比表面看上去要丰富得多。 学习编程的过程中,最容易卡住的往往是那些基础语法。就拿那个常见的 for 循环来说吧,刚开始时怎么都绕不过弯来:为什么这么写能循环?循环条件到底怎么控制?一

    对于懂得编程的人来说,编程对你来说有什么乐趣?编程大概是什么感觉?
    对于懂得编程的人来说,编程对你来说有什么乐趣?编程大概是什么感觉?

    解决编程问题后的痛快、完成作品的成就感、获取知识的满足感,以及用代码实现简化生活的惊喜与踏实,这些是编程独有的乐趣,只有真正写代码的人才能体会其中的酸甜苦辣、惊喜与满足,令人回味无穷。

    趣味编程:少儿编程思维的启蒙之旅
    趣味编程:少儿编程思维的启蒙之旅

    Scratch图形化编程以拖拽积木块方式启蒙少儿编程思维,无需记忆代码语法。通过素材库、即时反馈和社区协作,帮助孩子在创作中理解顺序执行、条件判断等核心概念,锻炼逻辑、创造力和问题解决能力。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。