0

0

C++初级银行账户管理系统实现方法

P粉602998670

P粉602998670

发布时间:2025-09-20 09:22:01

|

397人浏览过

|

来源于php中文网

原创

该银行账户管理系统通过面向对象设计实现开户、存取款等功能,使用Bank类管理多个账户并提供查询服务,结合互斥锁保障多线程下余额操作的安全性。

c++初级银行账户管理系统实现方法

要实现一个C++初级银行账户管理系统,核心在于如何用代码模拟银行账户的各种操作,比如开户、存款、取款、查询余额等等。它涉及面向对象编程的一些基本概念,以及如何将这些概念应用到实际问题中。

解决方案:

首先,我们需要定义一个银行账户类。这个类应该包含账户的基本信息,比如账户号码、账户持有人姓名、余额等。还需要定义一些方法,比如存款、取款、查询余额等。

#include 
#include 

class BankAccount {
private:
    std::string accountNumber;
    std::string accountHolderName;
    double balance;

public:
    BankAccount(std::string number, std::string name, double initialBalance) {
        accountNumber = number;
        accountHolderName = name;
        balance = initialBalance;
    }

    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 displayBalance() {
        std::cout << "账户余额:" << balance << std::endl;
    }

    std::string getAccountNumber() {
        return accountNumber;
    }
};

这个BankAccount类,包含了账号,账户名,和余额。存款和取款操作都有基本的校验,保证金额的有效性。

立即学习C++免费学习笔记(深入)”;

如何创建多个银行账户并进行管理?

为了管理多个银行账户,可以使用一个容器,比如std::vector,来存储BankAccount对象。同时,需要一个机制来查找特定的账户,比如通过账户号码。可以创建一个Bank类,来管理这些账户。

白月生产企业订单管理系统GBK2.0  Build 080807
白月生产企业订单管理系统GBK2.0 Build 080807

请注意以下说明:1、本程序允许任何人免费使用。2、本程序采用PHP+MYSQL架构编写。并且经过ZEND加密,所以运行环境需要有ZEND引擎支持。3、需要售后服务的,请与本作者联系,联系方式见下方。4、本程序还可以与您的网站想整合,可以实现用户在线服务功能,可以让客户管理自己的信息,可以查询自己的订单状况。以及返点信息等相关客户利益的信息。这个功能可提高客户的向心度。安装方法:1、解压本系统,放在

下载
#include 
#include 

class Bank {
private:
    std::vector accounts;

public:
    void addAccount(BankAccount account) {
        accounts.push_back(account);
    }

    BankAccount* findAccount(std::string accountNumber) {
        for (auto& account : accounts) {
            if (account.getAccountNumber() == accountNumber) {
                return &account;
            }
        }
        return nullptr;
    }
};

这个Bank类,提供添加账户和查找账户的功能。查找账户使用了一个简单的循环遍历,如果账户数量很多,可以考虑使用更高效的数据结构,比如std::map。

如何实现用户交互界面?

用户交互界面可以使用控制台输入输出来实现。创建一个主循环,允许用户选择不同的操作,比如开户、存款、取款、查询余额等。

int main() {
    Bank bank;

    while (true) {
        std::cout << "请选择操作:\n";
        std::cout << "1. 开户\n";
        std::cout << "2. 存款\n";
        std::cout << "3. 取款\n";
        std::cout << "4. 查询余额\n";
        std::cout << "5. 退出\n";

        int choice;
        std::cin >> choice;

        switch (choice) {
            case 1: {
                std::string accountNumber, accountHolderName;
                double initialBalance;

                std::cout << "请输入账号:";
                std::cin >> accountNumber;
                std::cout << "请输入账户名:";
                std::cin >> accountHolderName;
                std::cout << "请输入初始余额:";
                std::cin >> initialBalance;

                BankAccount newAccount(accountNumber, accountHolderName, initialBalance);
                bank.addAccount(newAccount);
                std::cout << "开户成功!\n";
                break;
            }
            case 2: {
                std::string accountNumber;
                double amount;

                std::cout << "请输入账号:";
                std::cin >> accountNumber;
                std::cout << "请输入存款金额:";
                std::cin >> amount;

                BankAccount* account = bank.findAccount(accountNumber);
                if (account != nullptr) {
                    account->deposit(amount);
                } else {
                    std::cout << "账户不存在!\n";
                }
                break;
            }
            case 3: {
                std::string accountNumber;
                double amount;

                std::cout << "请输入账号:";
                std::cin >> accountNumber;
                std::cout << "请输入取款金额:";
                std::cin >> amount;

                BankAccount* account = bank.findAccount(accountNumber);
                if (account != nullptr) {
                    account->withdraw(amount);
                } else {
                    std::cout << "账户不存在!\n";
                }
                break;
            }
            case 4: {
                std::string accountNumber;

                std::cout << "请输入账号:";
                std::cin >> accountNumber;

                BankAccount* account = bank.findAccount(accountNumber);
                if (account != nullptr) {
                    account->displayBalance();
                } else {
                    std::cout << "账户不存在!\n";
                }
                break;
            }
            case 5: {
                std::cout << "退出系统。\n";
                return 0;
            }
            default: {
                std::cout << "无效的选择,请重新输入。\n";
                break;
            }
        }
    }

    return 0;
}

这个main函数,实现了一个简单的控制台界面,用户可以选择不同的操作。需要注意的是,这个示例代码没有进行错误处理,比如输入验证等,在实际开发中需要进行完善。

如何处理并发访问银行账户的问题?

在多线程环境下,多个线程可能同时访问同一个银行账户,这可能会导致数据不一致的问题。为了解决这个问题,可以使用互斥锁(mutex)来保护共享资源。

#include 

class BankAccount {
private:
    std::string accountNumber;
    std::string accountHolderName;
    double balance;
    std::mutex balanceMutex; // 保护balance的互斥锁

public:
    BankAccount(std::string number, std::string name, double initialBalance) {
        accountNumber = number;
        accountHolderName = name;
        balance = initialBalance;
    }

    void deposit(double amount) {
        std::lock_guard lock(balanceMutex); // 自动加锁和解锁
        if (amount > 0) {
            balance += amount;
            std::cout << "存款成功,当前余额:" << balance << std::endl;
        } else {
            std::cout << "存款金额必须大于0" << std::endl;
        }
    }

    void withdraw(double amount) {
        std::lock_guard lock(balanceMutex); // 自动加锁和解锁
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            std::cout << "取款成功,当前余额:" << balance << std::endl;
        } else {
            std::cout << "取款金额无效或余额不足" << std::endl;
        }
    }

    void displayBalance() {
        std::lock_guard lock(balanceMutex); // 自动加锁和解锁
        std::cout << "账户余额:" << balance << std::endl;
    }

    std::string getAccountNumber() {
        return accountNumber;
    }
};

在这个修改后的BankAccount类中,增加了一个std::mutex对象balanceMutex,用于保护balance变量。在deposit、withdraw和displayBalance方法中,使用std::lock_guard来自动加锁和解锁。这样可以保证在同一时刻只有一个线程可以访问balance变量,从而避免数据竞争。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

54

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

46

2025.11.27

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

529

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

6

2025.12.22

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

471

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

107

2025.12.24

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

25

2025.11.16

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.7万人学习

C 教程
C 教程

共75课时 | 3.8万人学习

C++教程
C++教程

共115课时 | 10.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号