# Account II

URL:  <https://www.onlinegdb.com/classroom/Fd0aduv55>

**Requirements**

1. **Instance variables:**

* `double interestRate`: a double variable indicating the monthly interest rates. For example, if the `interstRate` is 2, it means monthly interest rate is 2%.
* `double fee`: a double variable indicating a monthly fee charged to the account, if the balance is below a threshold.
* `double threshold`: a double variable indicating the minimum balance required to avoid the monthly fee.

2.**Static Variable:**

* `accountCount`: an integer static variable to keep track of the number of Account instances created.

3.**Constructors:**

Since you add three instance variables, so you should modify your constructors like this:public Account(String accountHolder, String accountNumber,double balance, double interestRate, double fee, double threshold) {...}Each time an new account is created, `accountAcount` should increase by 1.

4.**New Methods:**

* `public static int getAccountCount()`: returns the current value of `accountCount.`
* `private void applyInterest()`: applies a monthly interest rate to the balance.
* `private void chargeFee()`: charges a fee if the balance is below a specified threshold.
* `public void passMonth()`: simulates the passage of a month. It will first apply interest to the balance of the account. If the new balance is below threshold, it will be charge a fee.
  * For example, is the current balance is 100, monthly interest rate is 10%, threshold is 200, and the fee is 5.
  * When a month passed, the balance will get interests, become 100 + 100\*10%=110.0. Since it is below threshold(200), the account will be charged a  ¥5 fee.
  * So the account should have ¥105.0 after the month passed.

`applyInterest` and `chargeFee` should be private, meaning they can only be called within the Account class.`Hint: applyInterest() and chargeFee() is triggered monthly, so they should be only called by passMonth().`

1. 4.The following table contains a code execution sequence and the corresponding results:

| Statement of Expression                                              | Return Value | Explanation                                                                                                                 |
| -------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------- |
| Account a1 = new Account("John Doe", "12345678", 100, 10, 20, 200);  | N/A          | Create account a1 with initial balance of ¥100, 10% monthly interest, ¥20 fee, ¥200 threshold.                              |
| Account.getAccountCount();                                           | 1            | Returns the total number of accounts created after a1's creation.                                                           |
| a1.deposit(150);                                                     | true         | Deposit of ¥150 to a1.                                                                                                      |
| a1.getBalance();                                                     | 250.0        | Balance in a1 after deposit.                                                                                                |
| a1.passMonth();                                                      | N/A          | Simulate a month passing for a1.                                                                                            |
| a1.getBalance();                                                     | 275.0        | Balance in a1 after a month, with interest. There is no fee charged, since 275.0 is larger than 200.                        |
| a1.withdraw(130);                                                    | true         | Withdraw ¥130 from a1.                                                                                                      |
| a1.getBalance();                                                     | 145.0        | Balance in a1 after withdrawal.                                                                                             |
| a1.passMonth();                                                      | N/A          | Simulate another month passing for a1.                                                                                      |
| a1.getBalance();                                                     | 139.5        | Balance in a1 after second month, with interest applied. There is a ¥10 fee charged, so the balance is 145\*1.1-20 = 139.5。 |
| Account a2 = new Account("Jane Smith", "87654321", 50, 20, 10, 200); | N/A          | Create account a2 with initial balance of ¥50, 20% monthly interest, ¥10 fee, ¥200 threshold.                               |
| Account.getAccountCount();                                           | 2            | Returns the total number of accounts created after a2's creation.                                                           |
| a2.deposit(50);                                                      | true         | Deposit of ¥50 to a2.                                                                                                       |
| a2.getBalance();                                                     | 100.0        | Balance in a2 after deposit.                                                                                                |
| a2.passMonth();                                                      | N/A          | Simulate a month passing for a2.                                                                                            |
| a2.getBalance();                                                     | 110.0        | Balance in a2 after a month, with interest and fee charged. The balance is 100\*1.2-10 = 110.0.                             |
| a2.withdraw(20);                                                     | true         | Withdraw ¥20 from a2.                                                                                                       |
| a2.getBalance();                                                     | 90.0         | Balance in a2 after withdrawal.                                                                                             |
| a2.passMonth();                                                      | N/A          | Simulate another month passing for a2.                                                                                      |
| a2.getBalance();                                                     | 98.0         | Balance in a2 after second month, with interest and fee charged. The balance is 90\*1.2-10 = 98.0.                          |

### FULL SCORE

* Zhu Qixin
* Dong Ruoxuan
* He Yuhan
* Jin Xuanyu
* Lin Jiaxin
* Luo Rui
* Wang Jiaxi
* Zhang Wenyuan
* Zheng Hao
* Zhu Yi
* Liu Xintong
* Zhang Tianyu
* Ding Chengtian
* Ni Jiachen
* Zhang Xiaowen

### ALMOST THERE

* Wang Yueqi
* Hu Yuqin
* Lyu Jiajia
* Chen Sihan
* Li Jiakang


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://scls-cs.gitbook.io/apcs-lab/apcsa-i-2023-fall/di-shi-si-zhou/account-ii.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
