0

这是我到目前为止的代码,它可以编译并运行良好,但我需要帮助来调整它。这是一款银行应用程序,目前仅适用于一个帐户。

它需要适应两个新文件:bank.h 和 bank.cpp,并且 main 应该包含一个指向 bank 的指针,而 bank 应该包含一个指向 account 实例的指针数组。

所以新界面的工作方式类似于:

帐户> 1 12

1 是账户#,12 是存入金额。

我真的需要帮助来调整我的代码来做到这一点,我不知道如何在银行中创建指向帐户实例的指针数组。任何帮助深表感谢。

 //main.cpp file
using namespace std;

#include <iostream>
#include <stdlib.h>
#include "account.h"

//allocate new space for class pointer
account* c = new account;

//function for handling I/O
int accounting(){

string command;

cout << "account> ";
cin >> command;

    //exits prompt  
    if (command == "quit"){
        exit(0);
        }

    //overwrites account balance
    else if (command == "init"){
        cin >> c->value;
        c->init();
        accounting();
        }

    //prints balance
    else if (command == "balance"){
        cout << "" << c->account_balance() << endl;
        accounting();
        }

    //deposits value
    else if (command == "deposit"){
        cin >> c->value;
        c->deposit();           
        accounting();
        }

    //withdraws value
    else if (command == "withdraw"){
        cin >> c->value;    
        c->withdraw();
        accounting();
        }

    //error handling    
    else{
        cout << "Error! Invalid operator." << endl;
        accounting();
        }
//frees memory          
delete c;           
}


int main() {

accounting();

return 0;
}

//account.h 头文件,包含具有共享变量和函数的类

class account{

   private:

    int balance;

    public:

        account();
        ~account();
        int value;
        int account_balance();
        int deposit();
        int withdraw();
        int init();

};

//account.cpp 实现文件

using namespace std;

#include <iostream>
#include "account.h"

account::account(){ 
}

account::~account(){
}

//balance overwrite function
int account::init(){

    balance = value;    
}

//balance function
int account::account_balance() {

    return balance;
}

//deposit function
int account::deposit(){

    balance += value;
}

//withdraw function
int account::withdraw(){

    //error handling
    if(value>balance){
        cout << "Error! insufficient funds." << endl;
        return 0;
        }

    balance -= value;
}
4

3 回答 3

0

对于数组,您可以使用 std::vector 类。

std::vector<account *>MyAccounts;
MyAccounts.push_back(new account());

然后您可以像使用数组一样正常访问它。

MyAccounts[i]->accountFunction();

更新

我对你的代码了解不够,所以我在这里只给出一些一般性的例子。

在您的银行类中,您有一个如上所示的成员)MyAccounts。现在,当您向银行添加新账户时,您可以使用回推功能来完成。

例如添加一个新帐户并设置 100 个货币项目的初始金额。

 MyAccounts.push_back(new account());
 size_t i = MyAccounts.size();
 MyAccounts[i]->setAmount(100);
于 2013-06-01T15:12:37.257 回答
0

首先,

//error handling    
else{
    cout << "Error! Invalid operator." << endl;
    accounting();
    }

这看起来很难看,您在每次输入错误后递归调用会计函数。想象一下用户输入 1 000 000 次错误输入的情况......然后您将尝试释放内存 1 000 000 次 - 在一次成功输入后!

//frees memory          
delete c;   

整个会计功能设计错误。我想您不想在某种交易后销毁帐户,对吧?我认为从他们将被销毁的 1000 万美元账户中提取 10 美元的人会立即更换银行 :)

因此,带有 continue 的 while 循环可能是解决方案

//function for handling I/O
int accounting(){

string command;

while(true) {
cout << "account> ";
cin >> command;

    //exits prompt  
    if (command == "quit"){
        break;
        }

    //overwrites account balance
    else if (command == "init"){
        cin >> c->value;
        c->init();
        continue;
        }

    //prints balance
    else if (command == "balance"){
        cout << "" << c->account_balance() << endl;
        continue;
        }

    //deposits value
    else if (command == "deposit"){
        cin >> c->value;
        c->deposit();           
        accounting();
        }

    //withdraws value
    else if (command == "withdraw"){
        cin >> c->value;    
        c->withdraw();
        continue;
        }

    //error handling    
    else{
        cout << "Error! Invalid operator." << endl;
        continue;
        }          
}

然后,

int value;

不是类成员,应该是提款和存款方法的参数,像这样

//deposit function
void account::deposit(int value){ //int changed to void, you are not returning anything!

    balance += value;
}

//withdraw function
bool account::withdraw(int value){
//error handling
if(value>balance){
    cout << "Error! insufficient funds." << endl;
    return false;
    }
if(value<0) {
    cout << "Haha, nice try!" << endl;
    return false;
}
balance -= value;
return true;

}

于 2013-06-01T15:17:05.130 回答
-1

您可以执行以下操作

   class Bank
{
public:
int AddAccount(Account act){ m_vecAccts.push_back(act);}
....
private:
...
std:vector<account> m_vecAccts;
}

更新:这只是一个以账户向量作为私有成员变量的 Bank 类。AddAccount 是公共函数,可以将帐户添加到向量

于 2013-06-01T15:15:44.003 回答