内容要求:

一、实验目的

(1)理解对象和类,掌握用类创建对象模型。

(2)理解和掌握抽象类的使用

(3)理解和掌握继承、方法覆盖的使用

(4)初步掌握使用多态性的方法

二、实验内容

按照如下步骤完成实验:

步骤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个对象是否相等。

代码示例如下:

package bank;import java.util.Objects;//Account的抽象类代表一个银行账户类
public abstract class Account {private String id;//id(String类型,代表账号)private String name;//name(String类型,代表姓名)private double balance;//balance(double类型,代表账户中的余额)//有参构造方法public Account(String id, String name) {this.id = id;this.name = name;this.balance = 0.0;}/*deposit的方法,实现存款操作。参数:double amount,存款金额返回类型:void功能:增加余额*/public void deposit(double amount){this.balance+=amount;}/*withdraw的抽象方法,定义取款操作。参数:double amount,取款金额返回类型:boolean,表示取款操作是否成功*/abstract public boolean withdraw(double amount);//以下封装(银行开户后账号不能修改,存款余额只能通过存款和取款方法修改)public String getId() {return id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getBalance() {return balance;}//覆盖toString方法,返回值形式为:[账号,姓名,余额],余额保留2位小数@Overridepublic String toString(){return "["+id+","+name+","+String.format("%.2f",balance)+"]";}//覆盖equals()方法,判断两个账户对象相等的依据是两个对象的账号是相同。@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;}//覆盖hashcode()方法,根据账户对象的账号来定义一个哈希函数。@Overridepublic int hashCode(){return Objects.hash(id);}
}
package bank;
/*步骤3:定义一个名为 ,要求如下:(1) 放在bank包中;(2) 编写合理的构造方法。(3) 覆盖withdraw的方法,实现取款操作。参数:double amount,取款金额返回类型:boolean,表示取款操作是否成功,取款金额超过余额时不能取款并返回false。功能:判断是否可以取款及减少余额*///SavingAccount的类代表一个储蓄账户类,继承Account类
public class SavingAccount extends Account{public SavingAccount(String id, String name) {super(id, name);}@Overridepublic boolean withdraw(double amount) {if(super.getBalance()<amount) return false;else{super.deposit(-amount);return true;}}
}
package bank;//CreditAccount的类代表一个信用卡账户类,继承Account类
public class CreditAccount extends Account{private double limit;//limit(double类型,透支额度)//有参构造方法public CreditAccount(String id, String name, double limit) {super(id, name);this.limit = limit;}//以下封装public double getLimit() {return limit;}public void setLimit(double limit) {this.limit = limit;}//覆盖withdraw的方法,实现取款操作。@Overridepublic boolean withdraw(double amount){if (super.getBalance()+limit<amount)return false;else {deposit(-amount);return true;}}
}
package main;import bank.CreditAccount;
import bank.SavingAccount;import java.util.Calendar;public class Main {public static void main(String[] args) {//(1) 创建1个CreditAccount对象,输出账户信息;然后进行几次存取款操作。每次操作后,输出账户信息。注意要测试取款成功或失败的情况。CreditAccount ca=new CreditAccount("ca123456","zhangsan",1000);System.out.println(ca.toString());ca.deposit(100);System.out.println(ca.toString());ca.withdraw(200);System.out.println(ca.toString());ca.withdraw(1000);System.out.println(ca.toString());System.out.println();//(2) 创建1个SavingAccount对象,输出账户信息;然后进行几次存取款操作。每次操作后,输出账户信息。注意要测试取款成功或失败的情况。SavingAccount sa=new SavingAccount("sa123456","lisi");System.out.println(sa.toString());sa.deposit(100);System.out.println(sa.toString());sa.withdraw(1000);System.out.println(sa.toString());sa.withdraw(10);System.out.println(sa.toString());System.out.println();//(3) 创建2个账号相同的SavingAccount对象,输出这2个对象,判断这2个对象是否相等。SavingAccount sa1=new SavingAccount("sa666666","zhangsan");SavingAccount sa2=new SavingAccount("sa666666","lisi");System.out.println(sa1.toString());System.out.println(sa2.toString());if(sa1.equals(sa2))System.out.println("两对象相等");else System.out.println("两对象不相等");System.out.println();//(4) 创建2个账号相同的CreditAccount对象,输出这2个对象,判断这2个对象是否相等。CreditAccount ca1=new CreditAccount("ca666666","zhangsan",1000);CreditAccount ca2=new CreditAccount("ca666666","lisi",2000);System.out.println(ca1.toString());System.out.println(ca2.toString());if(ca1.equals(ca2))System.out.println("两对象相等");else System.out.println("两对象不相等");System.out.println();//(5) 创建1个SavingAccount对象和1个CreditAccount对象,输出这2个对象,判断这2个对象是否相等。SavingAccount sa3=new SavingAccount("sa888888","zhangsan");CreditAccount ca3=new CreditAccount("ca888888","lisi",1000);System.out.println(sa3.toString());System.out.println(ca3.toString());if(sa3.equals(ca3))System.out.println("两对象相等");else System.out.println("两对象不相等");}
}

java实验:银行账户类的定义与使用相关推荐

  1. SCAU 银行账户类的定义与使用

    随堂实验6 银行账户类的定义与使用 题目类别: C实验 关键字: 继承 覆盖 内容要求: 按照以下步骤的要求编写程序,实现银行账户类的定义. 步骤1:定义一个名为Account的抽象类代表一个银行账户 ...

  2. 使用Java编写银行账户类(面向对象思考实验)

    银行账户类(Accoount)可以为账户存储交易.取款和存款都会产生交易信息.需要记录账户每次交易(Transaction)的信息,包括取钱还是存钱,交易的金额,交易时间和交易之后的余额.系统可以通过 ...

  3. Java:银行账户类

    class Untitled {public static void main(String[] args) {Customer tom=new Customer("tom",&q ...

  4. Java实现银行账户类(存款,取款,查余额)

    详细内容 添加成员变量: 账号.储户姓名.开户时间.身份证号码.存款余额等账户信息, 添加成员方法: 存款的方法income():带有一个参数,用来表示存入的钱数(double型).该方法中要求先 ...

  5. JAVA 设置银行账户类Acount

    要求可以查询账户余额,存钱,取钱 仅使用单一账户. 先放出代码 package account; import java.util.Timer; import java.util.TimerTask; ...

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

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

  7. JAVA定义银行账户类

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

  8. 信息系统开发(JAVA)设计一个银行账户类

    实验要求: 设计一个银行账户类,其中包括: • 账户信息,如帐号.姓名.开户时间.身份证号码等. • 存款方法. • 取款方法. • 其他方法如"查询余额"和"显示账户信 ...

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

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

最新文章

  1. 问题:Unable to find a 'userdata.img' file for ABI armeabi to copy into the AVD folder.
  2. 【BZOJ3997】[TJOI2015]组合数学 最长反链
  3. 如何做自己的服务监控?spring boot 1.x服务监控揭秘
  4. MobileIMSDK怎样将Java服务端运行起来以及打成jar包运行
  5. MybatisPlus实现逻辑删除
  6. 一步一步详解高斯日记
  7. linux的搜索和时间
  8. 关于header(Cache-control: private)
  9. mysql django构架图_Django框架之数据库ORM框架
  10. 【java笔记】类的抽象
  11. ubuntu16.04下ROS操作系统学习笔记(七 )机器语音-语音听写-科大讯飞SDK调用
  12. 【机器学习实践】Kaggle 之 Face Verification Challenge练手
  13. “996”引众怒,互联网疯狂的后遗症
  14. Java项目:SSM酒店客房管理系统
  15. 基于Hadoop的项目实战-职位数据综合分析
  16. python打开xls_用Python读取Excel(*.xls)文件——xlrd模块的使用
  17. Ubuntu Desktop - Disks
  18. 管理Linkedin账号三步曲,高效管理领英账号。
  19. 标注 画框 转写,亲亲,你做错了没?
  20. Charles的安装和注册码破解

热门文章

  1. 17.战略管理.组织级项目管理.项目集.项目组合.量化项目管理
  2. nginx 无法打开 libpcre.so.1问题解决办法
  3. Jmeter电商系统压测实战一
  4. 滑模变结构控制(2)--RBF神经网络
  5. 01.Signal and Image Noise Models 信号与图像噪声模型
  6. 服务器异地备份共享文件夹方法,mssql数据库异地备份的两种方法
  7. centos linux 安装jq,在centos中安装jq时遇到问题
  8. 大数据在互联网领域的“九大”应用
  9. 图解CRM(客户关系管理)全流程 1
  10. 关于arcgis打开.dat文件