C++ C++;未按需要存储值

C++ C++;未按需要存储值,c++,class,compilation,C++,Class,Compilation,这段代码来自我的“虚拟ATM机”程序,该程序处理客户的存款、检查余额和从他们的帐户中取款。当我把钱存入银行时,它显示它已存入。。但是在我陈述问题之前,下面是代码: double bankAccount::deposit() { bankAccount b; double amt; system("cls"); cout << " -------------------------------------------------

这段代码来自我的“虚拟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;

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

提前谢谢

客户行动:

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;   
    }

}
int客户_操作()
{
银行账户b;
国际客户选择;
系统(“cls”);
cout您的问题(从我所看到的)是,您试图创建一个无限循环,用户可以在该循环中不断按菜单上的更改,直到它们退出。但是,您可以通过在存款函数中调用
customer\u actions()
来实现这一点

尝试在外部方法中创建一个无限循环,然后从
deposit
返回,而不调用
customer\u actions()

后续操作编辑

试试这个:

int main(...)
{
     int result = 0;
     while(result == 0)
     {
         result = customer_actions();
     }
}
现在将
customer\u actions
中的switch语句更改如下:

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;

您在
customer\u action
中声明的银行帐户
b
仅在功能范围内有效

此外:

customer\u action
通过界面管理给定账户,账户不应“管理”
customer\u action
(在您的情况下,不要从存款中调用)

你可以很容易地得到一个堆栈溢出的方式编码


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

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


此外:

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

我当时做的第一件事是试图找到是否有对
双平衡的局部重新定义。没有,但我甚至不应该这样做,因为有一些方法可以避免对实例成员变量(如
平衡
)产生副作用

最重要的是——让它们成为私人的,而不是公开的

然后:

  • 使用类似于
    m_
    so
    m_balance
    的前缀来指示类型,该前缀将是或甚至是
    m_dblBalance
  • 或者在所有私有变量前面加一个
    \u
    ,这样
    \u balance
    就可以
  • 和/或通过在实例成员变量前面加上冗余的
    this->
  • 就个人而言,我不喜欢1。但使用2。例如变量



    还有更多的设计和实现问题,例如,我不鼓励字符串使用
    char[]
    ,并建议使用
    std::string
    ,但也许您可以从结束
    deposit()
    customer\u actions()的结合开始
    你真幸运。

    我在这里看不到菜单。可能是因为你在一遍又一遍地重新创建bankAccount实例……我们需要查看客户的操作()是的。您没有显示所有代码。您关于在调用之间重置值的断言表明您正在使用多个
    bankAccount
    对象。
    customer\u actions()
    是否定义了
    bankAccount
    类型的局部变量?那么自从您调用
    customer\u actions()以来,每次都会有一个新变量
    从您的
    存款
    方法。您应该在
    customer\u actions()
    方法中有一个循环,并且该方法不应该从
    bankAccount
    的方法中调用。我向调用customer\u actions函数的开关添加了一个循环,并删除了customer\u actions()来自存款的呼叫。但是,嘿,一旦我存款,程序就会关闭。当我需要它返回交换机时。我添加了getch()但是,是的,什么都不管用:/有什么建议吗,伙计?有三到四个基本实体:银行、银行账户、ATM,可能还有客户,最后一个实体取决于您希望系统的详细程度。ATM实现了模型-视图-控制器模式的控制器和视图。在您的情况下,银行只是由银行账户和可能的客户组成的组合如果你的应用程序中只有一家银行,它可以使用单例模式实现,否则main()或全局作用域可以容纳银行的集合(例如std::map.)。现在将您需要的功能委托给这些实体,您就有了设计。好的,我在中做了其他评论,以回答您的问题。请检查上面的答案。
    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;