Java项目练习

任务一:创建一个简单的银行程序包

在这里插入图片描述

目的:Java语言中面向对象的封装及构造器的创建与使用

说明:创建Account类,将源文件放入banking程序包中。在创建单个账户的默认程序包中,已经编写了测试程序TestBanking,这个测试程序初始化账户余额,并可执行简单的事物处理。最后,能显示该账户的最终余额。

提示

  1. 创建banking包

  2. 在banking包下创建Account

    a.声明私有属性:balance(当前账户余额)

    b.声明一个带参数(init_balance)的公有构造器,这个参数为balance属性赋值

    c.声明公有方法:getBablance(获取余额) deposit(向余额增加金额) withdraw(向余额减去金额))

  3. 编写TestBanking.java文件

任务二:扩展(添加Customer类,此类中包含对象Account)

在这里插入图片描述

目的:使用引用类型的成员变量
提示

  1. 在banking包下创建Customer

    a.声明私有对象属性:firstName,lastName,account (分别表示名与性)
    b.声明一个带两个参数(代表对象属性的参数f和l)的公有构造器
    c.声明方法getFirstName(获取属性),getLastName(获取属性),setAccount(给account属性赋值),getAccount(获取account属性))

  2. 编写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

目的:继承,多态,方法的重写
提示

  1. 修改Account类的属性balanceprotected
  2. 创建SavingAccount类,继承Account
  3. SavingAccount类有double类型的interestRate属性
  4. SavingAccount类有带两个参数(balanceinterest_rate)的公有构造器。该构造器必须调用super(balance)balance参数传递给父类构造器
  5. CheckingAccount类必须扩展Account
  6. CheckingAccount类有double类型的overdraftProtection属性
  7. CheckingAccount类有带一个参数(balance)的公有构造器。该构造器必须调用super(balance)balance参数传递给父类构造器
  8. CheckingAccount类有带两个参数(balanceprotect)的公有构造器。该构造器必须调用super(balance)并设置overdraftProtection属性,将balance参数传递给父类构造器
  9. CheckingAccount类必须覆盖withdraw方法(余额充足,正常进行取款;余额不充足,就用overdraftProtection值来弥补该差值)

任务六:创建客户账户

目的instanceof运算符的使用
提示

  1. 修改Customer类来处理具有多种类型的联合账户(如用数组表示多重性,该类必须包括以下公有方法:addAccount(Account),getAccount(int),getNumOfAccounts().每个Customer可以有多个Account.(声明至少5个))
  2. 测试:该程序创建一个客户和账户的集合,并生成这些客户及其账户余额的报告。
  3. 使用instanceof运算符测试拥有的账户类型,并且将account_type设置为适当值,如CheckingAccountSavingAccount

任务七

实现更为复杂的透支保护机制;这是任务五的选择练习,它使用客户储蓄账户完成透支保护。
在这里插入图片描述

目的:继承,多态,方法的重写
说明
修改SavingAccount

  1. 仿照任务五"Account类的两个子类"实现SavingAccount

  2. 必须包含一个类型为doubleinterestRate属性

  3. 必须包含一个带有两个参数(balanceinterest_rate)的公有构造器,该构造器必须通过调用super(balance)来将balance参数传递给父类构造器。

修改CheckingAccount

  1. 仿照任务五"Account类的两个子类"实现CheckingAccount
  2. 必须扩展Account
  3. 必须包含一个关联属性,称作protectedBy,表示透支保护。该属性的类型为SavingAccount,缺省值为null,除此之外该类无其他属性。
  4. 必须有带一个参数(balance)的公有构造器。该构造器必须调用super(balance)balance参数传递给父类构造器
  5. 有带两个参数(double balanceSavingAccount protect)的构造器。该构造器必须调用super(balance)balance参数传递给父类构造器
  6. 必须覆盖withdraw方法(余额充足,正常进行取款;余额不充足,就用尝试用储蓄账户来弥补该差值(balance-amount),如果后一个交易失败,则整个交易失败,余额未受影响。)

修改Customer类(使其拥有一个储蓄卡账户,一个信用卡账户:两个账户可选)

  1. 在任务六修改。原来的Customer类有一个account属性,用该属性控制一个Account对象,重写此类,使其包含两个关联属性:savingAccountcheckingAccount;缺省值为null
  2. 有两个访问方法:getSavinggetChecking,两个方法分别返回储蓄和信用卡透支余额
  3. 有两个相反的方法:setSavingsetChecking,两个方法分别给savingAccountcheckingAccount关联属性赋值

任务八(在任务六基础上修改)

修改Bank类来实现单例设计模式

目的:单子模式
提示
修改Bank

  1. 创建getBanking的公有静态方法,返回Bank类的实例
  2. 单个实例应是静态私有属性,同样Bank构造器应该也是私有

创建CustomerReport

  1. 在之前的任务中,"客户报告"嵌入main方法中(就是最后的遍历银行账户信息)。在此任务中,需修改编写CustomerReport类,使其使用单一银行对象。

任务九

在任务八的基础上修改,建立一个OverdraftException异常,它由Account类的withdraw()方法抛出
目的:自定义异常
说明

  • 创建OverdraftException
  1. 在banking中创建OverdraftException类,这个类扩展Exception
  2. 添加一个double类型的私有属性deficit,添加共有访问方法getDeficit
  3. 添加带两个参数的构造器,deficit参数初始化deficit属性
  • 修改Account

    重写withdraw()方法使他不返回值(即viod),声明方法抛出overdraftException异常
    修改代码抛出新异常,指明"资金不足"及不足数额(当前余额扣除请求金额)

  • . 修改CheckingAccount

  1. 重写withdraw()方法使他不返回值(即viod),声明方法抛出overdraftException异常

  2. 修改代码使其在需要时抛出异常:
    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与账户的iterator上进行迭代
注:此任务是在任务八上进行的修改

相关参考答案在相关资源
感谢大家的支持,关注,评论,点赞!
91

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cat God 007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值