0

这段代码来自我的“虚拟 ATM 机”程序,该程序处理客户存款、检查余额和从他们的账户取款。当我存入钱时,它显示它已被存入。但是......在我陈述我的问题之前,这里是代码:

double bankAccount::deposit()
{
      bankAccount b;

       double amt;

       system("cls");
       cout << " -----------------------------------------------------------------------  \n";
       cout << "|                              Customer Menu                            | \n";
       cout << " ----------------- ----------------- ----------------- -----------------  \n";

       cout << "\n\nYOUR CURRENT BALANCE: " << balance << endl;
       cout << "\nEnter amount to deposit: ";
       cin >> amt;

       balance = (balance + amt);

       cout << "\nAmount depositted successfully!" << endl;
       cout <<"\nYOUR CURRENT BALANCE: " << balance;

       getch();
       customer_actions();
       return balance;

}

“customer_actions()”是客户的主菜单,当我返回该屏幕并选择检查余额的选项时,它显示为零。这意味着值没有从前一个函数更新。这是我的头文件,其中包含类文件:

#ifndef bank
#define bank


using namespace std;


class bankAccount
{
    public:
        int accNo;
        int password;

        double balance;
        double withdrawamt;
        double depositamt;

        char name[20];
        char address[40];
        char username[10];

    public:

        double checkbalance();
        double deposit();
        double withdraw();


    public:
           bankAccount()
           {
              balance = 0; // Is this the reason?
           }    

};


#endif

我在想,当程序从一个菜单切换到另一个菜单时,这些值会被重置。亲爱的,有什么建议吗?

提前致谢!

CUSTOMER_ACTIONS:

int customer_actions()
    {
          bankAccount b;
          int cust_selection;
          system("cls");

   cout << " -----------------------------------------------------------------------  \n";
   cout << "|                              Customer Menu                            | \n";
   cout << " ----------------- ----------------- ----------------- -----------------  \n";
   cout << "                     Please Select option to continue:              \n" << endl << endl;

   cout << "1) Check balance    : Press 1" << endl;
   cout << "2) Withdraw Cash    : Press 2" << endl;
   cout << "3) Deposit Cash     : Press 3" << endl;
   cout << "4) Transfer Cash    : Press 4" << endl;
   cout << "5) Return home      : Press 5" << endl;
   cout << "\nEnter option: ";
   cin >> cust_selection;               


   switch(cust_selection)
   {
      case 1: b.checkbalance();   break;
      case 2: b.withdraw(); break;
      case 3: b.deposit(); break;
      case 4: break;
      case 5: main(); break;   
    }

}
4

2 回答 2

1

您的问题(据我所见)是您正在尝试创建一个无限循环,用户可以在其中不断按下在菜单上进行更改,直到他们退出。但是,您可以通过customer_actions()在 deposit 函数中调用来解决这个问题。

尝试在外部方法中创建一个无限循环,然后deposit从不调用customer_actions().

以下 OP 编辑

尝试这个:

int main(...)
{
     int result = 0;
     while(result == 0)
     {
         result = customer_actions();
     }
}

现在将 switch 语句更改customer_actions为如下所示:

switch(cust_selection)
{
      case 1: b.checkbalance();   break;
      case 2: b.withdraw(); break;
      case 3: b.deposit(); break;
      case 4: break;
      case 5: return 1; // This is the change
}
return 0;
于 2013-05-23T11:04:44.837 回答
0

b您在其中声明的银行帐户customer_action仅在函数范围内有效。

此外:

customer_action通过他们的界面管理给定的账户,账户不应该“管理” customer_action(在你的情况下,不要从存款中调用它)

您可以按照您的编码方式轻松获得堆栈溢出。


一般来说,您应该尽量避免混淆模型(您的帐户)视图(输出)和控制器(用户输入)相关代码。

创建干净的接口并以结构化的方式调用。


此外:

我首先阅读了您的粗体问题,然后参加了代码。

我当时做的第一件事是尝试查找是否有本地重新定义double balance. 没有,但我什至不必这样做,因为有办法避免对实例成员变量(如balance.

最重要的是 - 将它们设为私有,而不是公开。

然后:

  1. 使用这样的前缀m_m_balance甚至m_dblBalance可以指示类型
  2. 或在所有私有变量前面加上 a _,这样_balance就可以了
  3. 和/或通过在它们前面加上冗余前缀来强调实例成员变量的每种用法this->

就个人而言,我不喜欢 1. 但使用 2. 作为实例变量。


还有更多的设计和实现问题,例如。我不鼓励char[]使用字符串并建议使用std::string,但也许你只是从结束婚姻开始deposit()customer_actions()你祝福。

于 2013-05-23T12:10:32.033 回答