任务一:创建一个简单的银行程序包
目的:Java语言中面向对象的封装及构造器的创建与使用
说明:创建Account类,将源文件放入banking程序包中。在创建单个账户的默认程序包中,已经编写了测试程序TestBanking,这个测试程序初始化账户余额,并可执行简单的事物处理。最后,能显示该账户的最终余额。
提示
-
创建banking包
-
在banking包下创建
Account
类a.声明私有属性:
balance
(当前账户余额)b.声明一个带参数(
init_balance
)的公有构造器,这个参数为balance属性赋值c.声明公有方法:
getBablance
(获取余额)deposit
(向余额增加金额)withdraw
(向余额减去金额)) -
编写TestBanking.java文件
任务二:扩展(添加Customer类,此类中包含对象Account)
目的:使用引用类型的成员变量
提示:
-
在banking包下创建
Customer
类a.声明私有对象属性:
firstName,lastName,account
(分别表示名与性)
b.声明一个带两个参数(代表对象属性的参数f和l)的公有构造器
c.声明方法getFirstName(获取属性),getLastName(获取属性),setAccount(给account属性赋值),getAccount(获取account属性))
-
编写TestBanking.java文件
任务三:修改withdraw方法返回布尔值,表达交易是否成功。
目的:有返回值的方法
提示:修改Account
类
- 修改
withdraw
方法,取款金额大于余额,返回false;反之返回true - 存款成功返回true
任务四:用数组实现银行与客户间的多重关系
目的:在类中使用数组作为模拟集合操作
提示:添加银行类Bank类,Bank对象跟踪自身与其客户的关系。用Customer对象的数组实现这个集合化的关系。还要保持一个整数属性来跟踪银行当前有多少客户
- a.创建
Bank
类 - b.为
Bank
类增加属性customers
(Customer对象的数组)和numberOfCustomers
(整数,跟踪下一个customers数组索引) - c.添加公有构造器,以合适的最大尺寸初始化customer数组
- d.添加
addCustomer
方法(参照参数(姓,名)构造新的Customer对象,把它放入customer
数组中,并且numberOfCustomers+1
) - e.添加
getNumberOfCustomers
方法(获取属性的值)getCustomers
方法(返回index
相关客户))
任务五:在项目中创建Account的两个子类:SavingAccount和CheckingAccount
目的:继承,多态,方法的重写
提示:
- 修改
Account
类的属性balance
为protected
- 创建
SavingAccount
类,继承Account
类 SavingAccount
类有double
类型的interestRate
属性SavingAccount
类有带两个参数(balance
和interest_rate
)的公有构造器。该构造器必须调用super(balance)
将balance
参数传递给父类构造器CheckingAccount
类必须扩展Account
类CheckingAccount
类有double
类型的overdraftProtection
属性CheckingAccount
类有带一个参数(balance
)的公有构造器。该构造器必须调用super(balance)
将balance
参数传递给父类构造器CheckingAccount
类有带两个参数(balance
和protect
)的公有构造器。该构造器必须调用super(balance)
并设置overdraftProtection
属性,将balance参数传递给父类构造器CheckingAccount
类必须覆盖withdraw
方法(余额充足,正常进行取款;余额不充足,就用overdraftProtection
值来弥补该差值)
任务六:创建客户账户
目的:instanceof
运算符的使用
提示:
- 修改
Customer
类来处理具有多种类型的联合账户(如用数组表示多重性,该类必须包括以下公有方法:addAccount(Account),getAccount(int),getNumOfAccounts().
每个Customer
可以有多个Account
.(声明至少5个)) - 测试:该程序创建一个客户和账户的集合,并生成这些客户及其账户余额的报告。
- 使用
instanceof
运算符测试拥有的账户类型,并且将account_type
设置为适当值,如CheckingAccount
或SavingAccount
。
任务七
实现更为复杂的透支保护机制;这是任务五的选择练习,它使用客户储蓄账户完成透支保护。
目的:继承,多态,方法的重写
说明:
修改SavingAccount
类
-
仿照任务五"Account类的两个子类"实现
SavingAccount
类 -
必须包含一个类型为
double
的interestRate
属性 -
必须包含一个带有两个参数(
balance
和interest_rate
)的公有构造器,该构造器必须通过调用super(balance)
来将balance
参数传递给父类构造器。
修改CheckingAccount
类
- 仿照任务五"Account类的两个子类"实现
CheckingAccount
类 - 必须扩展
Account
类 - 必须包含一个关联属性,称作
protectedBy
,表示透支保护。该属性的类型为SavingAccount
,缺省值为null,除此之外该类无其他属性。 - 必须有带一个参数(
balance
)的公有构造器。该构造器必须调用super(balance)
将balance
参数传递给父类构造器 - 有带两个参数(
double balance
和SavingAccount protect
)的构造器。该构造器必须调用super(balance)
将balance参数
传递给父类构造器 - 必须覆盖
withdraw
方法(余额充足,正常进行取款;余额不充足,就用尝试用储蓄账户来弥补该差值(balance-amount
),如果后一个交易失败,则整个交易失败,余额未受影响。)
修改Customer
类(使其拥有一个储蓄卡账户,一个信用卡账户:两个账户可选)
- 在任务六修改。原来的
Customer
类有一个account
属性,用该属性控制一个Account
对象,重写此类,使其包含两个关联属性:savingAccount
和checkingAccount
;缺省值为null
- 有两个访问方法:
getSaving
和getChecking
,两个方法分别返回储蓄和信用卡透支余额 - 有两个相反的方法:
setSaving
和setChecking
,两个方法分别给savingAccount
和checkingAccount
关联属性赋值
任务八(在任务六基础上修改)
修改Bank类来实现单例设计模式
目的:单子模式
提示:
修改Bank
类
- 创建
getBanking
的公有静态方法,返回Bank
类的实例 - 单个实例应是静态私有属性,同样Bank构造器应该也是私有
创建CustomerReport
类
- 在之前的任务中,"客户报告"嵌入main方法中(就是最后的遍历银行账户信息)。在此任务中,需修改编写CustomerReport类,使其使用单一银行对象。
任务九
在任务八的基础上修改,建立一个OverdraftException
异常,它由Account
类的withdraw()
方法抛出
目的:自定义异常
说明:
- 创建
OverdraftException
类
- 在banking中创建
OverdraftException
类,这个类扩展Exception
类 - 添加一个
double
类型的私有属性deficit,添加共有访问方法getDeficit
- 添加带两个参数的构造器,
deficit
参数初始化deficit
属性
-
修改
Account
类重写
withdraw()
方法使他不返回值(即viod),声明方法抛出overdraftException
异常
修改代码抛出新异常,指明"资金不足"及不足数额(当前余额扣除请求金额) -
. 修改
CheckingAccount
类
-
重写
withdraw()
方法使他不返回值(即viod),声明方法抛出overdraftException
异常 -
修改代码使其在需要时抛出异常:
1.存在没有透支保护,对异常使用"余额不足,信用卡尚未开通 "信息
2.存在透支保护,但余额扣除后还是不足,对异常可使用"超出透支金额,信用卡已开通"信息
此任务代码在编写时存在问题:如测试时导致打印不出异常等问题(待解决)
正确结果应类似下图
任务十
目的:使用集合实现银行与客户,客户与账户的多重关系
说明:
修改Bank
类(用ArrayList
实现多重的客户关系,要导入java.util
类)
-
将
Customer
属性的声明修改为List
类型,删除numberOfCustomers
属性 -
修改Bank构造器,将
customer
属性的声明修改为List
类型,删除numberOfCustomers
属性 -
修改
addCustomer
方法,使用add
方法 -
修改
getCustomer
方法,使用get
方法 -
修改
getNumberOfCustomer
方法,使用size
方法
修改Customer
类(用ArrayList
实现多重的账户关系)
修改方式同上
(选)扩展CustomerReport
类
在Bank
类中,添加一个名为getCustomers
的方法,该方法返回一个客户列表上的iterator
在Customer
类中,添加一个名为个体Accounts
的方法,该方法返回一个账户列表上的iterator
修改CustomerReport
类,使用一对嵌套的while循环(不是嵌套的for循环),在客户的iterator
与账户的iterato
r上进行迭代
注:此任务是在任务八上进行的修改
相关参考答案在相关资源里
感谢大家的支持,关注,评论,点赞!
91