2017-08-07 8 views
0

私はC#を学んでいる学生です。私が自分の仕事をしているときに私を気にするいくつかの概念があります。これは私の割り当てです。罰金額と返済残高の保存と確認

撤退はペナルティが適用されるべきで、口座残高が$ 0を下回る原因となるときはいつでも入金が「S」-Savingsアカウントに行われるときはいつでも、銀行は預金 の5%と一致する必要があります。 "C" -Checkingと "S" Savingのアカウントのペナルティは、それぞれ$ 20と$ 30です。
アカウントのいずれかの残高が$ 0未満になったときにメッセージを表示します。メッセージには、否定的なアカウントが表示されます。
トランザクションが完了した後、両方のアカウントの期末残高をユーザに照会します。

abstract class Account 
{ 
    private float balance; 
    private float penalty; 

    static void Main(string[] args) 
    { 
     Console.Write("Please enter your full name: "); 
     string username = Console.ReadLine(); 

     Console.Write("Please enter your account type to create(C -Checking or S -Savings):"); 
     string accounttype = Console.ReadLine(); 

     Console.Write("Please enter your opening balance: "); 
     string openingbalance = Console.ReadLine(); 

     Console.Write("Please specify if you are going to deposit or withdrawl(D -Deposit or W -Withdraw):"); 
     string depositwithdrawl = Console.ReadLine(); 

     if (accounttype == "S" && depositwithdrawl == "D") 
      balance = (1 + 5 %) * openingbalance; 

     if balance < 0; 
     get { return balance; } 
    } 

    public class SavingAccount: Account 
    { 
     public void MakeDeposit(float amount) 
     { 
      balance += amount; 
     } 
     public void MakeWithdraw(float amount) 
     { 
      balance -= amount; 
     } 
    } 

    public class CheckingAccount: Account 
    { 
     public void MakeDeposit(float amount) 
     { 
      balance += amount; 
     } 
     public void MakeWithdraw(float amount) 
     { 
      balance -= amount; 
     } 
    } 


    public void ApplyPenalty(float amount) 
    { 
     if (balance < 0 && accounttype == "S") 
      penalty = 30; 

     if (balance < 0 && accounttype == "C") 
      penalty = 20; 
    } 


    public void ApplyMethod(float amount) 
    { 
     if (balance < 0 && accounttype == "S") 
      balance = balance-30; 

     if (balance < 0 && accounttype == "C") 
      balance = balance- 20; 
    } 

    public float Balance 
    { 
     get { return balance; } 
    } 
} 
  1. は)(Account.csクラスから継承したクラス2(SavingsAccount & CheckingAccount)

  2. は抽象メソッドMakeDepositをお持ちの紹介を

  3. Account.cs抽象クラスを導入しますAccount.csクラスの

  4. (MakeDepositを実装)由来でAccount.csクラスのクラス

  5. 抽象メソッドApplyPenaltyを(持っている)

  6. 口座残高からペナルティ額を控除する)(ApplyMethodを実装します。

私はいつも「accounttype」は現在のコンテキスト に存在しないエラーを持って、変数バランスのために、オブジェクト参照が非静的フィールド、メソッドまたはプロパティ「Account.balanceために必要とされます'

答えて

1

これはプログラミングの最初の試みですか? 「accounttypeは」Accountクラスのメンバーとして宣言されていないので

if (balance < 0 && accounttype == "S") 

;:

まず第一に、あなたはここでコンパイルエラーを取得していますむしろMain()メソッドでさらにローカル変数として宣言しています。これを克服するために

、ちょうどバランス(私たちは、後にペナルティを取得します)のように、メンバーとしてaccounttypeを追加します。私たちはあなたの2番目のエラーを取得する前に、あなたはおそらくあなたのコードを再配置する必要があり、今

abstract class Account 
{ 
    private float balance; 
    private float accounttype; 

少し。私はあなたのプログラムの開始点として静的void Main(string [] args)メソッドを持つべきC#Consoleアプリケーションを作成したいと仮定しています。問題は、あなたのAccountクラス内にMain()メソッドをカプセル化していて、それがあなたがしたいことではないと思います。

中括弧に注意しての、そしてあなたのAccountクラスの終わりの下にmain()メソッドを下に移動:

そうそう、もう一つ...私はのために、小数点の代わりにフロートのを使用してお勧めします金銭的価値前の説明の説明はこの教科書の範囲外です。:)ただ今、私を信頼してください。

abstract class Account 
{ 
    private decimal balance; 
    private decimal penalty; 
    private string accounttype; 

    public void MakeDeposit(decimal amount) 
    { 
     balance += amount; 
    } 

    // ... and so on 

    public decimal Balance 
    { 
     get { return balance; } 
     // This is new too... you'll need this 'set' method here in your Balance property. More on that later. 
     set { balance = value; } 
    } 
} 

// Now we put the Main() method 
static void Main(string [] args) 
{ 
    // Your main program code goes here. 
} 

OK!今度はそれを整理しました.2番目のエラーは(派生した単語は "作成")インスタンス化されたアカウントクラス(まだ実装されていません)のインスタンス化が必要なためです。そうでなければ、「バランス」という言葉に意味を与えるものは何もありません。あなたのコンピュータサイエンス101プログラムの主な機能ではなく、バランスの取れたアカウントです。

もちろんAccountは抽象クラスなので、アカウントオブジェクトをインスタンス化することはできません(コンパイルエラーが発生します)。だから、あなたは、このようなSavingsAccountとしてそれらの派生クラスのためのコードを記述する必要があります:

// This can probably go after your Account class definition, but just before your Main() method: 
class SavingsAccount : Account 
{ 
    // More stuff will go here later 
} 

、自分のメイン()メソッドでは、あなたがタイプSavingsAccountのインスタンス(「オブジェクト」)を作成することができ、かつそのバランスを設定してください...データ型と演算子に関する構文上の問題を解決するとすぐに。

// Bad things here... balance=(1+5%)*openingbalance; 

数値と文字列を一緒に乗算することはできません。文字列を数値に変換する必要がありますが、注意してください!良いプログラミングでは、ユーザーを自分自身から救う必要があります。実際に有効な10進数であることを確認する必要があります。そうでない場合は、我々はユーザーに警告して再試行してもらう:

bool isBalanceValid = false; 
    decimal decOpeningBalance = 0; 
    Console.Write("Please enter your opening balance: "); 

    while (! isBalanceValid) 
    { 
     string openingbalance = Console.ReadLine(); 
     if (! decimal.TryParse(openingbalance, out decOpeningBalance)) 
     { 
      Console.WriteLine("You must enter a valid decimal value, please try again"); 
     } 
     else 
     { 
      isBalanceValid = true; 
     } 
    } 

オクラホマので、バックダウン、我々は節約にバランスを割り当てているところへ... C#は「%」を使用していないアカウント小数のために署名し、これを5%として0.05を使用します。

SavingsAccount savingsAccount = new SavingsAccount(); 

    if (accounttype == "S" && depositwithdrawl == "D") 
     savingsAccount.Balance = (1 + 0.05M) * decOpeningBalance; 

私はこの説明で行き過ぎたかもしれないが、私はむしろ、誰かがコーディングする理由の代わりにコーディングするだけでどのように学ぶのを助けるでしょう。

+0

忍耐と詳細な説明に感謝します。ほんとうにありがとう。 – yanma

+0

私の喜び。答えが受け入れられる場合は、そのようにマークしてください。ありがとう! –

関連する問題