随堂实验6 银行账户类的定义与使用

题目类别: C实验

关键字: 继承 覆盖

内容要求:

按照以下步骤的要求编写程序,实现银行账户类的定义。

步骤1:定义一个名为Account的抽象类代表一个银行账户类。要求如下:

(1) 放在bank包中;

(2) 数据域包括:id(String类型,代表账号)、name(String类型,代表姓名)、balance(double类型,代表账户中的余额)

(3) 对数据域进行合理的封装。通常银行开户后账号不能修改,存款余额只能通过存款和取款方法修改。

(4) 编写合理有参构造方法,使用参数对数据域进行初始化。

(5) 编写名为deposit的方法,实现存款操作。

参数:double amount,存款金额

返回类型:void

功能:增加余额

(6) 编写名为withdraw的抽象方法,定义取款操作。

参数:double amount,取款金额

返回类型:boolean,表示取款操作是否成功

(7) 覆盖toString方法,返回值形式为:[账号,姓名,余额],余额保留2位小数。

(8) 覆盖equals()方法,判断两个账户对象相等的依据是两个对象的账号是相同。

(9) 覆盖hashcode()方法,根据账户对象的账号来定义一个哈希函数。

步骤2:定义一个名为CreditAccount的类代表一个信用卡账户类,继承Account类 ,要求如下:

(1) 放在bank包中;

(2) 数据域包括:limit(double类型,透支额度),表示可以透支的金额,说明:透支是指可以在余额为0的情况下继续取款,欠款不超过透支额度即可。例如透支额度是1000元,则余额最多可以是-1000元;

(3) 对数据域进行合理的封装。

(4) 编写合理的构造方法。

(5) 覆盖withdraw的方法,实现取款操作。

参数:double amount,取款金额

返回类型:boolean,表示取款操作是否成功,取款金额超过透支额度时不能取款并返回false。即余额不能低于 (-1*信用额度)。

功能:判断是否可以取款及减少余额

步骤3:定义一个名为SavingAccount的类代表一个储蓄账户类,继承Account类 ,要求如下:

(1) 放在bank包中;

(2) 编写合理的构造方法。

(3) 覆盖withdraw的方法,实现取款操作。

参数:double amount,取款金额

返回类型:boolean,表示取款操作是否成功,取款金额超过余额时不能取款并返回false。

功能:判断是否可以取款及减少余额

步骤4:编写主类Main,放在main包中,在main方法进行如下工作:

(1) 创建1个CreditAccount对象,输出账户信息;然后进行几次存取款操作。每次操作后,输出账户信息。注意要测试取款成功或失败的情况。

(2) 创建1个SavingAccount对象,输出账户信息;然后进行几次存取款操作。每次操作后,输出账户信息。注意要测试取款成功或失败的情况。

(3) 创建2个账号相同的SavingAccount对象,输出这2个对象,判断这2个对象是否相等。

(4) 创建2个账号相同的CreditAccount对象,输出这2个对象,判断这2个对象是否相等。

(5) 创建1个SavingAccount对象和1个CreditAccount对象,输出这2个对象,判断这2个对象是否相等。

总结:
这里用了abstract抽象类,因为我们在调用withdraw方法的时候,需要用到抽象。
public abstract class Account
并且withdraw在继承的时候,会发生变化,所以在父类定一个抽象方法即可,到时候再Override。
abstract public boolean withdraw(double amount);
抽象类有什么好处呢?
1、由于抽象类不能被实例化,最大的好处就是通过方法的覆盖来实现多态的属性。也就是运行期绑定
2、抽象类将事物的共性的东西提取出来,由子类继承去实现,代码易扩展、易维护。

Main

package com.main;import bank.CreditAccount;
import bank.Account;
import bank.SavingAccount;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner cin = new Scanner(System.in);
//        System.out.println("请输入账户id:");
//        String id = cin.next();
//        System.out.println("请输入账户姓名:");
//        String name = cin.next();
//        System.out.println("请输入信用额度:");
//        double limit = cin.nextDouble();System.out.println("初始id:2019 初始名字:Jay 信用额度:1000.0");CreditAccount a = new CreditAccount("2019","Jay",1000.0);System.out.println("存入1000元");a.deposit(1000.0);System.out.println("取出1500元");if(a.withdraw(1500)){System.out.println(a.toString());}else System.out.println("余额和信用不足!");System.out.println("再取出1500元");if(a.withdraw(1500)){System.out.println(a.toString());}else System.out.println("余额和信用不足!");System.out.println("--------------------------");System.out.println("初始id:2020 初始名字:Zhou");SavingAccount b = new SavingAccount("2020","Zhou");System.out.println("存入1500元");b.deposit(1500.0);System.out.println("取出1200元");if(b.withdraw(1200)){System.out.println(b.toString());}else System.out.println("余额和信用不足!");System.out.println("再取出1500元");if(b.withdraw(1500)){System.out.println(b.toString());}else System.out.println("余额和信用不足!");System.out.println("--------------------------");System.out.println("创建两个id都为2021的,名字分别为Tim和Jin的储蓄卡账户");SavingAccount c = new SavingAccount("2021","Tim");SavingAccount d = new SavingAccount("2021","Jin");System.out.print("对比账号可得:");if(c.equals(d)){System.out.println("两个账号相同!");}else System.out.println("两个账户不相同!");System.out.println("--------------------------");System.out.println("创建两个id都为2022的,名字分别为TMX和ZYC,信用为100的信用卡账户");CreditAccount e = new CreditAccount("2022","TMX",100);CreditAccount f = new CreditAccount("2022","ZYC",100);System.out.print("对比账号可得:");if(e.equals(f)){System.out.println("两个账号相同!");}else System.out.println("两个账户不相同!");System.out.println("--------------------------");System.out.println("创建一个信用卡账户和一个储蓄卡账户");CreditAccount g = new CreditAccount("2023","OO",200);SavingAccount h = new SavingAccount("2023","ZZ");System.out.print("对比账号可得:");if(g.equals(h)){System.out.println("两个账号相同!");}else System.out.println("两个账户不相同!");}}

CreditAccount

package bank;public class CreditAccount extends Account {private double limit;public double getLimit() {return limit;}public void setLimit(double limit) {this.limit = limit;}public CreditAccount(String id,String name, double limit){super(id,name);this.limit = limit;}@Overridepublic boolean withdraw(double amount){if(amount>=limit+getBalance())return false;if(amount<=getBalance()+limit){setBalance(getBalance()-amount);return true;}return false;}}

SavingAccount

package bank;public class SavingAccount extends Account{public SavingAccount(String id,String name){super(id,name);}public boolean withdraw(double amount){if(amount<=getBalance()){setBalance(getBalance()-amount);return true;}return false;}}

Account

package bank;import java.util.Objects;public abstract class Account {private String id;private String name;private double balance;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}public Account(String id,String name){this.id = id;this.name = name;balance = 0.0;}public void deposit(double amount){this.balance += amount;}abstract public boolean withdraw(double amount);@Overridepublic String toString(){return "["+this.id+","+this.name+","+String.format("%.2f",this.balance)+']';}@Overridepublic boolean equals(Object O){if (O == null)return false;if (this.getClass()!=O.getClass())return false;Account Ac = (Account) O;if(Ac.name.equals(this.name))return false;return true;}@Overridepublic int hashCode(){return Objects.hash(id);}}

SCAU 银行账户类的定义与使用相关推荐

  1. java实验:银行账户类的定义与使用

    内容要求: 一.实验目的 (1)理解对象和类,掌握用类创建对象模型. (2)理解和掌握抽象类的使用 (3)理解和掌握继承.方法覆盖的使用 (4)初步掌握使用多态性的方法 二.实验内容 按照如下步骤完成 ...

  2. C++编程练习:设计一个银行账户类,包含户名、帐号以及当前余额属性,并且能完成开户、存款、取款和查询余额等行为。

    文章目录 例题 分析 代码 测试 结语 例题 设计一个银行账户(Account)类,包含户名.帐号以及当前余额属性,可完成开户.存款.取款和查询余额等行为.银行账户类的定义要求如下: class Ac ...

  3. 定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer 银行账户类Account有方法: (1)getInfo(),返回String类型,返回卡的详细信息

    //定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer //银行账户类Account有方法: //(1)getInfo(),返回String类型,返回卡的详 ...

  4. JAVA定义银行账户类

    定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer 银行账户类Account有方法: (1)getInfo(),返回String类型,返回卡的详细信息 (2 ...

  5. 定义一个基本的银行账户类。在基本账户类的基础上派生出1年期定期账户、2年期定期账户、3年期定期账户和5年期定期账户。定义一个n个基类指针组成的数组,随机生成n个各类派生类的对象。让每个指针指向一个派生

    定义一个基本的银行账户类.在基本账户类的基础上派生出1年期定期账户.2年期定期账户.3年期定期账户和5年期定期账户.定义一个n个基类指针组成的数组,随机生成n个各类派生类的对象.让每个指针指向一个派生 ...

  6. account表里有什么 银行_模拟一个银行账户类Account,账户类中包括所有者、账号、余额、账户总数、存款、取款等信息。_学小易找答案...

    [单选题]廉价磁盘冗余阵列RAID利用冗余技术实现高可靠性,其中RAID1的磁盘利用率为() . [简答题]与直流调速相比,交流调速有何优点? [论述题]方法 [单选题]以<老子注>一书驰 ...

  7. 新建银行账户类,实现基本的属性和方法。

    新建银行账户类(代码中类名为person),类中有账户ID.账户姓名.账户密码.余额.银行名称等属性,类中有存钱.取钱.改密码.查询等方法.使用字符界面实现菜单程序,通过接收不同的参数值来执行不同的操 ...

  8. 【Java】设计银行账户类。包括帐号、姓名、开户时间、余额,成员方法包括存款、取款、查询余额,计算利息等。对所设计的类进行测试。

    设计银行账户类.包括帐号.姓名.开户时间.余额,成员方法包括存款.取款.查询余额,计算利息等.对所设计的类进行测试. 要求 代码 要求 设计银行账户类.包括帐号.姓名.开户时间.余额,成员方法包括存款 ...

  9. java存款输入密码类,创建一个银行账户类,包括账号、用户姓名、密码和余额属性,实现开户、查询余额、取款、存款功能。...

    用类与对象创建一个银行账户类.银行账户类包括账号.用户姓名.密码和余额属性,银行账户类的功能包括: 开户 查询余额 取款 存款 功能实现思路: 开户方法 Account(),创建账户的账号.密码.姓名 ...

最新文章

  1. nodeJS之eventproxy源码解读
  2. Unity3d连接SQL Server数据库出现SocketException: 使用了与请求的协议不兼容的地址错误...
  3. 什麽是世界上最值得珍惜的
  4. HDU 3549 Flow Problem (dinic模版 isap模版)
  5. 【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )
  6. 孩子从小要学编程吗?
  7. js中四种创建对象的方式
  8. NGINX原理 之 SLAB分配机制(转)
  9. 建立a8 linux开发环境,Fedora 14下建立 omap3530 开发环境 - 交叉编译器
  10. GridView中合并单元格
  11. IE浏览器使用Validation Engine表单重复提交问题
  12. Expanding Rods(二分)
  13. WDS和DHCP配置说明
  14. Android 开机动画的启动
  15. SSH.ASDM:远程管理
  16. Adobe Creative Cloud 2022 (macOS、Windows) TNT 合集
  17. HD AUDIO再2003安装的问题
  18. Windows聚焦的图片下载
  19. mysql es 父子关系 下级数据查询效率对比
  20. 捋一捋Python的文件处理(上)

热门文章

  1. 用html加div餐厅网页代码,餐厅界面.html
  2. python的GIL
  3. 五个最好的复制/粘贴的Mac App应用
  4. 怎样清理苹果电脑磁盘空间_Mac怎么清理磁盘垃圾
  5. 住房和城乡建设部:建筑企业资质46问46答
  6. 准备在蚂蚁金服提交离职了,希望以后不再有福报
  7. C++之文字列输入输出
  8. Linux配置Git环境
  9. 怎么彻底卸载cad2017_mac装了2017cad后卸载后,想把该软件注册表里的东西也删除,不知道如何处理?...
  10. 关于双硬盘装双系统会导致旧系统无法启动的解决思路