> For the complete documentation index, see [llms.txt](https://scls-cs.gitbook.io/scls-apcs-lab/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://scls-cs.gitbook.io/scls-apcs-lab/arraylist-and-2d-array/project-i-bank.md).

# Project I: Bank

在Hackathon I中，你曾经帮助过一家银行设计过它们银行账户（Bank Account）。由于你的出色工作，银行又聘请你为它们设计一个账户管理系统。

作为一家银行，它应该能够处理如下事务：

* 添加/删除银行账户
* 通过客户名字查找相关联的账户
* 统计银行目前的开户数量
* 获取账户的一些信息，如平均余额，最大余额等

你已经掌握了银行账&#x6237;**`Account`**&#x7684;全部代码，以及银行管理系&#x7EDF;**`Bank`**&#x7684;部分代码，你可以直接复制它们。你的任务是在Bank.java中完善银行管理系统的功能：

{% code title="Account.java" %}

```java
public class Account {
    private double balance;
    private String name;
    public Account(double balance, String name)
    {
        this.balance = balance;
        this.name = name;
    }
    public void deposit(double m)
    {
        balance+=m;
    }
    public double getBalance()
    {
        return balance;
    }
    public String getName() {
        return name;
    }
    public void withdraw(double w)
    {
        if(balance>=w)
        {
            balance-=w;
        }
    }
}
```

{% endcode %}

<pre class="language-java" data-title="Bank.java"><code class="lang-java"><strong>import java.util.ArrayList;
</strong><strong>public class Bank
</strong>{
    private ArrayList&#x3C;Account> accounts ;  

    /**
     创建一个银行对象，目前银行里没有任何账户。
     */
    public Bank()
    {
        accounts = new ArrayList&#x3C;Account>();
    }

    /**
     添加银行账户。
     */
    public void addAccount(Account a)
    {
        accounts.add(a);
    }
    
    /**
    TO BE IMPLEMENTED
    任务一：打印银行所有的账户信息，每一个账户占一行，包含name和balance，中间用空格隔开
     */
    public void printList()
    {
        
    }
    
    /**
    TO BE IMPLEMENTED
    任务二：返回银行所有的账户余额总和
     */
    public double getTotalBalance()
    {
          
    }
    
    /**
     TO BE IMPLEMENTED
     任务三：返回账户余额不低于minimum的账户数量
     */
    public int count(double minimum)
    {
       
    }
    
    /**
     TO BE IMPLEMENTED
     任务四：返回余额最大的账户
     */
    public Account getMaximum()
    {
    
    }
}
</code></pre>

### 任务：

1. 在Bank.java中实现printList()函数，用来打印银行所有的账户信息。其中每一个账户占一行，每一行包括账户name和balance，中间用空格隔开。
2. 实现getTotalBalance()函数，用来返回银行所有的账户余额总和。
3. 实现count(int minimum)函数，要求返回账户余额不低于minimum的账户数量。
4. 实现getMaximum()函数，返回当前银行余额最大的账户。
5. 在main()中测试上述四个函数。为了测试完整，你需要使用addAccount()在银行中创建至少四个账户，并且每个函数至少测试两次。
