2016-12-07 5 views
-2

私は昨日からこのプログラムで作業していますが、私は問題の原因を知りません。プログラムを実行し、Checking AccountからSaving Accountに転送する金額を入力すると、入力した金額がCheckingアカウントから減算されますが、Savingsアカウントには加算されません。当座預金口座からの振替ですか?

この問題を解決するにはどうすればよいですか?どんな助けもありがとうございます。この文では

public partial class Transfer : Window 
{ 
    private string PIN; 
    Accounts AccountsList = new Accounts(); 

    //constructor 
    public Transfer(string pin, Accounts myAcounts) 
    { 
     InitializeComponent(); 
     AccountsList = myAcounts; 
     PIN = pin; 
    } 

    //save to file method 
    public void saveToFile() 
    { 
     using (StreamWriter sw = new StreamWriter("Acounts.txt")) 
     { 
      for (int i = 0; i < AccountsList.Count; i++) 
      { 
       var data = new List<string> 
       { 
        AccountsList[i].ACCOUNTYPE.ToString() 
        ,AccountsList[i].PIN 
        ,AccountsList[i].ACCOUNTNUMBER 
        ,AccountsList[i].ACCOUNTBALANCE.ToString() 
       }; 

       var account = String.Join(";", data); 
       sw.WriteLine(account); 
      } 
     } 
    } 

    private void btnOK_Click(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      string txtAmount = txtAmountInTransfer.Text; 
      double amount = 0; 

      bool AmountCorrect = double.TryParse(txtAmount, out amount); 

      Account chequingAccount = new Account(); 
      Account savingAccount = new Account(); 

      //deposit from CHEQUING ACCOUNT to SAVING ACCOUNT 
      { 
       //validate user entries 

       for (int i = 0; i < AccountsList.Count; i++) 
       { 
        //withdraw from CHEQUING ACCOUNG 
        if (AccountsList[i].ACCOUNTYPE == 'C' && AccountsList[i].PIN == PIN) 
        { 
         if (rbChequing_to_Saving.IsChecked == true) 
         { 
          chequingAccount = AccountsList[i]; 
         } 
         else 
         { 
          savingAccount = AccountsList[i]; 
         } 

         chequingAccount.ACCOUNTBALANCE -= amount; 
         AccountsList[i].ACCOUNTBALANCE += amount; 


         //saveToFile(); 
         //break; 

        } 
        //if (AccountsList[i].ACCOUNTYPE == 'S') 
        // savingAccount.ACCOUNTBALANCE += amount; 

        //saveToFile(); 
       } 


      } 


     } 
     catch (Exception error) 
     { 
      MessageBox.Show(error.Message); 
     } 
    } 


} 

}

答えて

0

、あなたが実際に参照しませ値をコピーしています。

chequingAccount = AccountsList[i]; 

したがって、これらの両方に同じ参照があります。

chequingAccount.ACCOUNTBALANCE -= amount; 
AccountsList[i].ACCOUNTBALANCE += amount; 

x量を減算してからx量を戻します。あなたはあなたのロジックを再確認する必要があります。

は、ここで私が驚いてるのリファレンスタイプVS 値型についての良い記事 http://www.tutorialsteacher.com/csharp/csharp-value-type-and-reference-type

+0

あなたは私にちょっと説明してもらえますか?# – afgboy

+0

@afgboy:アカウント(クラス)は参照型なので、chequingAccount = AccountsList [i];を実行すると、あなたは 'AccountsList [i] ] 'を' chequingAccount 'に変更します。あなたがこれらのいずれかを変更すると、それは他のものの価値に影響を与えます。 **値の種類と参照の種類については**をご覧ください。 – DarkKnight

0

あなたはそれをチェックするから減算されると言うです。コードの私の読んでそれを追加するか、チェックに何もしていない。

理由+/-コードを取得すると、GUIのブール値に基づいてchequingAccount = AccountsList[i]が設定される可能性があります。そうでなければ、あなたのAccountsListにない新しく作成されたアカウントです。

のいずれかでこのようにあなたの+/-コード結果:

AccountsList[i].ACCOUNTBALANCE -= amount; 
AccountsList[i].ACCOUNTBALANCE += amount; 

それとも

(new Account()).ACCOUNTBALANCE -= amount; 
AccountsList[i].ACCOUNTBALANCE += amount; 

あなたは普通預金口座を見つける必要がどこか。

また、バックナンバー番号を確認していないことに気付きます。PINのみです。 2つのアカウントのPINが同じ場合は、適切なアカウントから引き落とさないことがあります。

関連する問題