私はC#を初めて、OOPとその原則を念頭に置いています。だから私は大学の宿題を "銀行制度"を実現するために持っています。私には預金、住宅ローン、ローン口座、また個人または企業であるべき顧客があります。私はすべてのアカウントの金利を計算するための式を持っていますが、それは現時点では重要ではありません。なぜなら、これはうまくいきます。私の問題は、デポジット機能です。ここでは、私の階層を見ることができます:銀行システム入金/払い戻し
Account.cs
public abstract class Account
{
private Customer customer;
private double balance;
private double interestRate;
public Customer Customer { get; private set; }
public double Balance { get; private set; }
public double InterestRate { get; private set; }
public Account(Customer customer, double balance, double interestRate)
{
this.Customer = customer;
this.Balance = balance;
this.InterestRate = interestRate;
}
public abstract double CalculateInterestAmount(int numberOfMonths);
public virtual double Deposit(double amount)
{
return this.Balance + amount;
}
}
DepositAccount.cs
public class DepositAccount : Account
{
public DepositAccount(Customer customer, double balance, double interestRate) : base(customer, balance, interestRate)
{ }
public override double CalculateInterestAmount(int numberOfMonths)
{
double interest = 0.0;
if (this.Balance < 1000)
{
interest = 0.0;
}
else
{
interest = numberOfMonths * this.InterestRate;
}
return interest;
}
public double Withdraw(double amount)
{
double result = 0.0;
if (amount > this.Balance)
{
return result = 0.0;
}
else
{
result = this.Balance - amount;
}
return result;
}
}
LoanAccount.cs
public class LoanAccount : Account
{
public LoanAccount(Customer customer, double balance, double interestRate) : base(customer, balance, interestRate) { }
public override double CalculateInterestAmount(int numberOfMonths)
{
double interest = 0.0;
if (this.Customer is IndividualCustomer)
{
if (numberOfMonths > 3)
{
interest = (numberOfMonths - 3) * this.InterestRate;
}
else
{
interest = 0.0;
}
}
if (this.Customer is CompanyCustomer)
{
if (numberOfMonths > 2)
{
interest = (numberOfMonths - 2) * this.InterestRate;
}
else
{
interest = 0.0;
}
}
return interest;
}
}
MortgageAccount.cs
public class MortgageAccount : Account
{
public MortgageAccount(Customer customer, double balance, double interestRate) : base(customer, balance, interestRate)
{ }
public override double CalculateInterestAmount(int numberOfMonths)
{
double interest = 0.0;
if (this.Customer is CompanyCustomer)
{
if (numberOfMonths <= 12)
{
interest = (numberOfMonths * this.InterestRate)/2;
}
else
{
interest = (((12 * this.InterestRate)/2) + ((numberOfMonths - 12) * this.InterestRate));
}
}
if (this.Customer is IndividualCustomer)
{
if (numberOfMonths <= 6)
{
interest = 0.0;
}
else
{
interest = (numberOfMonths - 6) * this.InterestRate;
}
}
return interest;
}
}
メイン
static void Main(string[] args)
{
//Customers
Customer individual = new IndividualCustomer();
Customer company = new CompanyCustomer();
//Accounts
Account mort = new MortgageAccount(individual, 2500.0, 0.2);
Account depo = new DepositAccount(individual, 400, 0.7);
Account loan = new LoanAccount(company, 10000, 3.2);
loan.Deposit(999); // this is not working. Balance should be 10999 but it is still 10000
Console.WriteLine(loan.Balance);
List<Account> accounts = new List<Account>();
accounts.Add(mort);
accounts.Add(depo);
accounts.Add(loan);
Bank b = new Bank(accounts);
Console.WriteLine(b.ToString());
}
問題は、私は任意のアカウントにいくつかの量を追加するとき、それは昔と同じように返しています。私はそれが本当に10999ですが、私は10000を印刷するデバッグを意味します。問題はどこですか?また、Withdrawメソッドの場合、DepositCccountsのみを引き出すことができます。このようなアカウントをインスタンス化すると、Account depo = new DepositAccount(individual, 400, 0.7);
という機能が無効になります。 Withdraw
をバーチャルにする必要がありますか?しかし、私はDepositAccountsのためだけにそれが必要です。私はとても混乱しています。
コードが多すぎます。あなたは少なくとも興味のものをすべて削除しなければなりませんでした。しかし、依然として、コードは少なすぎます。 –
目立つ1つの技術的な問題は、バランス上の「プライベート」セッターです。撤回()を有効にするには、「保護」する必要があります。 –
デザインの選択肢として、CodeReviewサイトへの投稿を検討してください。あなたはdownvotesを得るより少ないでしょう。 –