0

您好,我一直在开发一个 C++ 银行应用程序,该应用程序应该能够在所有相关领域拥有多个帐户。我遇到了几个问题:

  • 在 Display 或 ShowInfo 函数中显示帐户信息时,名字的第一个字母和中间的首字母不会显示。
  • 创建帐户时,只有最近的帐户才能被搜索并显示在显示数据中。我知道这需要一个数组才能实现,我只是不确定是否正确实施。

谢谢您的帮助。任何输入表示赞赏!

#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include <string>

using namespace std;

class BankAccount{
    double Balance = 0.0;
    char ans;
    public:struct Name{
        char Last_Name[50];
        char First_Name[50];
        char Middle_Initial[5];
    }Name;
    public:struct Account{
        char Type[1];
        int Account_Number;
    }Account;
    public:
    void CreateAccount();
    void Withdraw();
    void Deposit();
    void Display();
    void ShowInfo();
    int Menu();

};

void BankAccount::CreateAccount(){
    do
    {
        cout << "\nEnter account number: ";
        cin >> Account.Account_Number;
        cout << "\nEnter the last name for the account: ";
        cin.ignore();
        cin.getline(Name.Last_Name, 50);
        cout << "\nEnter the first name for the account: ";
        cin.ignore();
        cin.getline(Name.First_Name, 50);
        cout << "\nEnter the Middle initial for the account: ";
        cin.ignore();
        cin.getline(Name.Middle_Initial, 5);
        cout << "\nEnter the type of account (C/S) : ";
        cin >> Account.Type;
        cout << "\nEnter the initial balance of the account: ";
        cin >> Balance;
        cout << "\n\nAccount Created.";
        cout << "\n\nCreate new account? (Y/N) : ";
        cin >> ans;

        while (ans != 'Y' && ans != 'N'){
            cout << "Invalid input. Create new account? (Y/N) : ";
            cin >> ans;
        }
        cout << endl;
    } while (ans != 'N');
};
void BankAccount::Withdraw(){
    int actNum;
    double amount;
    cout << "Enter the account number for the account that you wish to withdraw funds: ";
    cin >> actNum;
    if (actNum == Account.Account_Number){
        cout << "Enter the amount you would like to withdraw: ";
        cin >> amount;
        Balance = Balance - amount;
    }
    else if (actNum != Account.Account_Number){
        cout << "No account found under that number! Try again!";
    }

}
void BankAccount::Deposit(){
    int actNum;
    double amount;
    cout << "Enter the account number for the account that you wish to deposit funds: ";
    cin >> actNum;
    if (actNum == Account.Account_Number){
        cout << "Enter the amount you would like to deposit: ";
        cin >> amount;
        Balance = Balance + amount;
    }
    else if (actNum != Account.Account_Number){
        cout << "No account found under that number! Try again!";
    }
}
void BankAccount::Display(){
    int actNum;
    cout << "Enter the account number for the account that you wish to display account information for: ";
    cin >> actNum;
    if (actNum == Account.Account_Number){
        cout << "Account details for " << Name.First_Name << " " << Name.Middle_Initial << " " << Name.Last_Name << "'s account: " << endl;
        cout << "Account Number: " << Account.Account_Number << endl;
        cout << "Account Type (Checking / Savings): " << Account.Type << endl;
        cout << "Account Balance:  $" << Balance << endl;
    }
    else if (actNum != Account.Account_Number){
        cout << "No account found under that number! Try again!";
    }

}
void BankAccount::ShowInfo(){
    cout << "Account details for " << Name.First_Name << " " << Name.Middle_Initial << " " << Name.Last_Name << "'s account: " << endl;
    cout << "Account Number: " << Account.Account_Number << endl;
    cout << "Account Type (Checking / Savings): " << Account.Type << endl;
    cout << "Account Balance:  $" << Balance << endl;    

}

int main(int argc, char *argv){
    BankAccount ob;
    char ch;

    cout << "Welcome to Console Banking Application V 1.0!";
    cout << "\nSelect an item from the list below by entering the corresponding letter.";
    do{
        cout << "\n\n A. Create Account \n B. Withdraw \n C. Deposit \n D. Show Account Details \n\n Q. Exit Application\n\n";
        ch = ob.Menu();
        switch (ch){
        case 'A':
        case 'a': ob.CreateAccount();
            ob.ShowInfo();
            break;
        case 'B': 
        case 'b': ob.Withdraw();
            break;
        case 'C':
        case 'c': ob.Deposit();
            break;
        case 'D':
        case 'd': ob.Display();
            break;
        case 'Q':
        case 'q': ob.ShowInfo();
                  exit(1);
            break;
        }

    } while (1);
}
int BankAccount::Menu(){
    char ch;
    cout << "Select an option: ";
    cin >> ch;
    return ch;
}
4

1 回答 1

1

简单的答案是:您只有一个银行账户。

如果您查看您的主要功能,您会创建一个且只有一个BankAccount。您可能会猜到,一个 BankAccount 不能用于表示多个 BankAccounts(除了 SoA)。

因此,您需要一个BankAccounts数组。它是这样的:

BankAccount obs[10];

现在你有 10 个银行账户,没有更多了。因此,每次您要创建新的 BankAccount 时,只需确保在当前未使用的数组中的 BankAccount 上创建它。

obs[0].CreateAccount();
obs[0].ShowInfo();
obs[0].Deposit();
//Make a new account
obs[1].CreateAccount();
...

更进一步,让我们考虑一下您有 10 个银行帐户,而只有 10个这一事实。现在这不是很广泛,是吗?什么是只有 10 个账户可用的银行?可能在适当的时候停业。

天真的解决方案是添加更多。50、100,甚至 1000。但你真的想每次都返回并更新这个数字吗?这太乏味了。

幸运的是,我们可以使用一个方便的容器:

#include <vector>
...
std::vector<BankAccount> obs;
...

这基本上是一个在需要时自动扩展的数组。我不会详细介绍如何使用向量,因为我相信您自己可以轻松学会这样做。但是,我会留给您此链接,以便您知道可以从哪里开始。

于 2016-02-26T04:22:47.697 回答