-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCurrentAccount.cs
140 lines (112 loc) · 4.2 KB
/
CurrentAccount.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;
namespace BANKSOLID
{
public class CurrentAccount:Account,Itransaction,Iinterest
{
public double InterestRate { get; set; } = 0.02;
public Date LastInterestDate { get; set; }
//First time initialisation
//public CurrentAccount(int AccountNumber,int AccountHolderNID, String AccountHolderName, Double Balance,Date OpeningDate): base(AccountNumber, AccountHolderNID, AccountHolderName, Balance, OpeningDate)
//{
// this.AccountNumber = AccountNumber;
// this.AccountHolderNID = AccountHolderNID;
// this.AccountHolderName = AccountHolderName;
// this.Balance = Balance;
// this.OpeningDate = OpeningDate;
// LastInterestDate = OpeningDate;
//}
public CurrentAccount( int AccountHolderNID, String AccountHolderName, Double Balance, Date OpeningDate) : base(AccountHolderNID, AccountHolderName, Balance, OpeningDate)
{
this.AccountHolderNID = AccountHolderNID;
this.AccountHolderName = AccountHolderName;
this.Balance = Balance;
this.OpeningDate = OpeningDate;
LastInterestDate = OpeningDate;
}
// Fetching from database
public CurrentAccount(int AccountNumber,int AccountHolderNID,String AccountHolderName,double Balance,Date OpeningDate,Date LastInterestDate,bool isFreezed):base(AccountNumber,AccountHolderNID,AccountHolderName,Balance,OpeningDate, isFreezed)
{
this.AccountNumber = AccountNumber;
this.AccountHolderNID = AccountHolderNID;
this.AccountHolderName = AccountHolderName;
this.Balance = Balance;
this.OpeningDate = OpeningDate;
this.LastInterestDate = LastInterestDate;
this.isFreezed=isFreezed;
}
public void Deposit(double amount)
{
if (isFreezed)
{
Console.WriteLine("The Account is freezed, Can't do any transactions!");
return;
}
if (amount >= 0)
{
Balance += amount;
Console.WriteLine($"Successfully deposited: {amount}; New Balance: {Balance};");
}
else
{
throw new TransactionException("Given Amount Can't be less than zero bdt");
}
}
public void Transfer(Account account, double Amount)
{
if (isFreezed)
{
Console.WriteLine("The Account is freezed, Can't do any transactions!");
return;
}
if (Balance - Amount >= 1000 && Amount >0)
{
Balance -= Amount;
account.Balance += Amount;
}
else
{
throw new TransactionException("Insufficient Balance!");
}
}
public double Withdraw(double amount, Date withdraw_date)
{
if (isFreezed)
{
Console.WriteLine("The Account is freezed, Can't do any transactions!");
return -1;
}
if (Balance - amount >= 1000)
{
Balance -= amount;
}
else
{
throw new TransactionException("Insufficient Balance!");
}
return Balance;
}
//invoke this method when the program starts
public void AddInterest()
{
Date currentDate = Date.Now;
if (currentDate.Month > LastInterestDate.Month || currentDate.Year > LastInterestDate.Year)
{
int monthsPassed = currentDate.MonthsBetween(LastInterestDate);
for (int i = 0; i < monthsPassed; i++)
{
Balance += Balance * (InterestRate);
}
LastInterestDate = currentDate;
}
}
public override String GetAccountType()
{
return " Current ";
}
}
}