Interfaces & Abstract Classes

Interfaces & Abstract Classes

Bank Account

1.2 What to do

For this lab, you will design and implement the start of a banking solution for a neighborhood bank. There are two types of accounts the bank wants you to implement: one called SavingsAccount and one called CheckingAccount. Your interface and all classes must be in the bank package.

Both accounts can do the following:

Create a new account by specifying a "starter" amount of money to open it with. The starter amount must be greater than or equal to one cent.

Do this: Create a constructor that takes a single parameter (of type double) that represents the "starter amount" for the account. If the amount specified is negative OR the amount is less than one cent ($0.01), throw an IllegalArgumentException

Deposit into their account.

Do this: Create a method called deposit that takes a single parameter (of type double) that represents the amount deposited into the account. If the amount specified is negative, throw an IllegalArgumentException

Withdraw from their account. If the amount specified is greater than the balance available, this operation fails and returns false.

Do this: Create a method called withdraw that reduces the account balance by the amount specified. Return true if the transaction is successful, false otherwise. (Hint: test for a variety of cases here, i.e. values > 0, 0 ...etc, what other cases may cause the withdraw transaction to fail)

Check their balance.

Do this: Create a method getBalance that returns a double (the current account balance)

Non-customer behavior you must implement:

Bank administrators can perform monthly maintenance to assess monthly fees and give a "clean slate" for the subsequent month.

Do this: Create a performMonthlyMaintenance method to charge any fees and then reset transaction counters to zero.

Do this: Create a toString method that prints the account balance in dollars/cents format (e.g: $10.00). You may want to look up the documentation for the String.format method for this part, or use the DecimalFormat class if you wish.

You are required to use the IAccount interface as specified below. Both types of accounts implement this interface, so that the bank can access either account through that common protocol. You will need to consider behavior variations as described below.

Behavior variations for a SavingsAccount withdraw() method: Savings accounts allow for 6 penalty-free withdrawal transactions per month. Savings accounts allow for an unlimited number of deposits per month.

Rules:

If the amount specified for the withdrawal is negative, the operation fails. If the number of withdrawals for the month is greater than 6, a transaction penalty of $14 is deducted from the account when monthly maintenance is performed

Behavior variations for a CheckingAccount performMonthlyMaintenance() method: A minimum balance of $100 must be maintained throughout the month to avoid fees

Rules:

If the checking balance falls below 100 at ANY time during the month (before maintenance is performed) an account maintenance fee of 5 is charged when the monthly maintenance is performed.

Notes

For each method you write:

Design the signature of the method.

Write Javadoc-style comments for that method.

Write the body for the method.

Write one or more tests that check that the method works as specified in all cases.

Avoid duplicating code as much as possible. You will likely want to use an abstract superclass and "push" common method code up to that class. Feel free to create private "helper" methods if you need to.

Be sure to use access modifiers, private, default (no keyword), protected, and public appropriately.

Include JavaDoc for your classes and constructors as appropriate. You do not need to repeat JavaDoc already existing in a superclass or interface when you override a method. (This is true for the course in general.)

Provide a UML class diagram for your solution.

Here is the IAccount interface. This is the "contract" your solution is agreeing to implement

WX:codehelp

相关推荐
染指11104 小时前
26.RAG进阶(Advanced RAG)-假设性问题索引
人工智能·windows·agent·rag·advanced rag
闵孚龙4 小时前
动态图机制:为什么 PyTorch 调试起来更舒服
人工智能·pytorch·python
甲维斯5 小时前
还要啥Codex!DeepSeek接入Zcode远程连接!
人工智能
百胜软件@百胜软件5 小时前
百胜软件亮相“AI消费新生活”主题日活动,AI智能运营平台入选市级案例征集
人工智能·生活·零售数字化·数智中台·珠宝行业
专注搞钱6 小时前
GPT-4o写设备Recipe:从3小时到10分钟
数据库·人工智能·gpt·半导体
闻道参看6 小时前
贝芯宠AI灵兽 ELFVET 大模型聚焦临床应用,强化宠物诊疗综合能力
人工智能·宠物
MartinYeung56 小时前
[论文学习]重新思考大型语言模型忘却目标:梯度视角与超越
人工智能·学习·语言模型
财经资讯数据_灵砚智能6 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月14日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
m0_380167147 小时前
加密货币价格 API、市场数据 API 与 分析 API 有什么区别?
人工智能·ai·区块链
zyplayer-doc7 小时前
企业知识库安全与权限管理完全指南:从加密到审计的六层防护
人工智能·安全·pdf·编辑器·创业创新