abstract class BankAccount
protected string accountHolderName;
protected string accountNumber;
protected double balance;
public BankAccount(string accountHolderName, string accountNumber, double balance)
this.accountHolderName = accountHolderName;
this.accountNumber = accountNumber;
public abstract void Withdraw(double amount);
public abstract void Deposit(double amount);
public abstract void DisplayAccountDetails();
class Current : BankAccount
public Current(string accountHolderName, string accountNumber, double balance) : base(accountHolderName, accountNumber, balance)
public override void Withdraw(double amount)
Console.WriteLine("Insufficient balance.");
Console.WriteLine("Withdrawal of {0} successful.",amount);
public override void Deposit(double amount)
Console.WriteLine("Deposit of {0} successful.",amount);
public override void DisplayAccountDetails()
Console.WriteLine("Account Type: Current");
Console.WriteLine("Account Holder Name: {0}",accountHolderName);
Console.WriteLine("Account Number: {0}",accountNumber);
Console.WriteLine("Balance: {0}",balance);
class Savings : BankAccount
private bool hasChequeBook;
public Savings(string accountHolderName, string accountNumber, double balance, bool hasChequeBook) : base(accountHolderName, accountNumber, balance)
this.hasChequeBook = hasChequeBook;
public override void Withdraw(double amount)
Console.WriteLine("Insufficient balance.");
Console.WriteLine("Withdrawal of {0} successful.",amount);
public override void Deposit(double amount)
Console.WriteLine("Deposit of {0} successful.",amount);
public override void DisplayAccountDetails()
Console.WriteLine("Account Type: Savings");
Console.WriteLine("Account Holder Name: {0}",accountHolderName);
Console.WriteLine("Account Number: {0}",accountNumber);
Console.WriteLine("Balance: {0}",balance);
Console.WriteLine("Cheque Book Facility: {0}",hasChequeBook ? "Available" : "Not Available");
abstract class Fixed : BankAccount
protected double interestRate;
public Fixed(string accountHolderName, string accountNumber, double balance, double interestRate) : base(accountHolderName, accountNumber, balance)
this.interestRate = interestRate;
public double CalculateInterest(int years)
return balance * interestRate * years / 100;
public ShortTerm(string accountHolderName, string accountNumber, double balance) : base(accountHolderName, accountNumber, balance, 8)
public override void Withdraw(double amount)
Console.WriteLine("Withdrawal facility not available for Short Term Fixed Account.");
public override void Deposit(double amount)
Console.WriteLine("Deposit facility not available for Short Term Fixed Account.");
public override void DisplayAccountDetails()
Console.WriteLine("Account Type: Short Term Fixed");
Console.WriteLine("Account Holder Name: {0}",accountHolderName);
Console.WriteLine("Account Number: {0}",accountNumber);
Console.WriteLine("Balance: {0}",balance);
public LongTerm(string accountHolderName, string accountNumber, double balance) : base(accountHolderName, accountNumber, balance, 10)
public override void Withdraw(double amount)
Console.WriteLine("Withdrawal facility not available for Long Term Fixed Account.");
public override void Deposit(double amount)
Console.WriteLine("Deposit facility not available for Long Term Fixed Account.");
public override void DisplayAccountDetails()
Console.WriteLine("Account Type: Long Term Fixed");
Console.WriteLine("Account Holder Name: {0}",accountHolderName);
Console.WriteLine("Account Number: {0}",accountNumber);
Console.WriteLine("Balance: {0}",balance);
public static void Main(string[] args)
BankAccount currentAccount = new Current("John ", "C001", 5000);
currentAccount.DisplayAccountDetails();
currentAccount.Deposit(2000);
currentAccount.Withdraw(1000);
currentAccount.DisplayAccountDetails();
BankAccount savingsAccount = new Savings("Alice ", "S001", 10000, true);
savingsAccount.DisplayAccountDetails();
savingsAccount.Deposit(5000);
savingsAccount.Withdraw(3000);
savingsAccount.DisplayAccountDetails();
BankAccount shortTermFixedAccount = new ShortTerm("Bob ", "STF001", 20000);
shortTermFixedAccount.DisplayAccountDetails();
Console.WriteLine("Interest Earned (1 year): {0}",((ShortTerm)shortTermFixedAccount).CalculateInterest(1));
Console.WriteLine("Interest Earned (2 years): {0}",((ShortTerm)shortTermFixedAccount).CalculateInterest(2));
BankAccount longTermFixedAccount = new LongTerm("Eva ", "LTF001", 30000);
longTermFixedAccount.DisplayAccountDetails();
Console.WriteLine("Interest Earned (3 years): {0}",((LongTerm)longTermFixedAccount).CalculateInterest(3));
Console.WriteLine("Interest Earned (5 years): {0}",((LongTerm)longTermFixedAccount).CalculateInterest(5));