2013-05-23 5 views
0

이 코드는 입금, 잔액 확인 및 계좌에서 돈을 인출하는 고객을 다루는 "가상 ATM 기계"프로그램의 코드입니다. 내가 돈을 입금하면, 그것이 입금됩니다 것을 표시합니다 ..하지만 ... 여기에 내가 내 문제를 언급하기 전에 코드를 간다 :C++ 값이 필요에 따라 저장되지 않았습니다.

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()"고객을위한 메인 메뉴 때이되고 해당 화면으로 돌아가서 잔액을 확인하는 옵션을 선택하면 ZERO로 표시됩니다. 즉, 값이 이전 함수에서 업데이트되지 않았다는 의미입니다.

#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 

내가 생각하고, 프로그램이 다른 하나의 메뉴에서 전환, 값이 다시-ED를 얻을 다음은 클래스 파일로 구성 내 헤더 파일입니다. 제안 사항, 소중한 사람들? 사전에

감사합니다!

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

} 
+0

여기 메뉴가 표시되지 않습니다. –

+0

아마도 bankAccount 인스턴스를 계속해서 다시 만들고 있기 때문에 ... –

+1

customer_actions()가 무엇인지 알아야합니다. – ApplePie

답변

2

귀하의 문제는 사용자가 메뉴에서 변경 작업들이 종료 될 때까지를 눌러 유지할 수 있습니다 무한 루프를 만들려고한다는 것입니다. 그러나 예금 기능에서 customer_actions()으로 전화하면됩니다.

외부 메서드에서 무한 루프를 만든 다음 customer_actions()을 호출하지 않고 deposit에서 반환하려고합니다. 영업 편집에 따라

이 시도 :

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

지금 이렇게 될 customer_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; 
+0

customer_actions 함수를 호출하고 customer_actions() 호출을 제거한 스위치에 루프를 추가했습니다. 하지만이 프로그램은 돈을 입금하자마자 닫힙니다. 스위치로 돌아가려면 필요할 때가 있습니다. getch()를 추가했지만, 작동하지 않습니다./어떤 제안입니까, 친구? –

+0

은행, 은행 계좌, ATM, 고객 등 3 ~ 4 개의 기본 엔티티가 있습니다. 시스템 세부 사항에 따라 마지막 것입니다. ATM은 모델 - 뷰 - 컨트롤러 패턴의 컨트롤러와 뷰를 구현합니다. 은행은 귀하의 경우 BankAccounts와 어쩌면 편리한 이름으로 구성된 복합 상품입니다. 앱에 단 하나의 은행이 있다면 그것은 싱글 톤 패턴을 사용하여 구현 될 수 있습니다. 그렇지 않으면 main() 또는 전역 범위가 은행 집합체를 보유 할 수 있습니다 (예 : std :: map). 이제 필요한 엔티티에 필요한 기능을 위임하고 디자인을가집니다. – Solkar

+0

OK 질문에 대한 답변을 추가로 작성했습니다. 위의 답변을 확인하십시오. – ose

0

당신이 customer_action에 선언 은행 계좌 b 함수 범위에서만 유효합니다. 또한

:

customer_action 자신의 인터페이스에 의해 계정을 주어 관리하고 계정 customer_action

를 (귀하의 경우, 보증금에서 호출하지 않음) "관리"안 쉽게 스택 오버 플로우를 얻을 수 당신이 코딩 한 방식. 관련 코드 -


은 일반적으로 당신이 모델 (계정)보기 (출력)와 컨트롤러 (사용자 입력)를 혼합 피하려고한다 말하기.

깨끗한 인터페이스를 만들고 구조화 된 방식으로 호출하십시오. 또한


는 :

내가 먼저 여러분의 강렬한 풋 질문을 읽고 나중에 코드에 참석했다.

내가했던 첫 번째 일은 double balance의 로컬 재정의가 있는지 찾아 내려고했습니다. 아무 것도 없지만, 인스턴스 멤버 변수에 대한 부작용을 피하는 방법이 있으므로 balance과 같이해야합니다.

제일 - 개인이 아닌 공개로 설정하십시오. 그런 다음

:

  1. 사용 m_ 것 때문에 m_balance 또는 m_dblBalance 같은 접두사가 너무 _balance 그 것, 유형
  2. 를 표시하거나 _ 모든 개인 변수를 접두사로
  3. 및/또는 리던던트 접두어로 인스턴스 멤버 변수의 각 사용법을 강조합니다. this->

개인적으로 말하면 나는 1을 싫어하지만 인스턴스 변수는 2.를 사용합니다.


는 예를 들어, 더 많은 설계 및 구현 문제가 있습니다. char[]에 문자열을 사용하지 말고 std::string을 사용하는 것이 좋습니다. 축복을받은 후 deposit()customer_actions()의 결혼을 끝내기 시작하는 것이 좋습니다.

관련 문제