题目类别: 实验

关键字: 对象类型转换、覆盖、继承、多态

内容要求:

要求编写程序模拟银行账户的存、取款操作。按要求完成以下步骤:

步骤 1:编写程序 Account.java,其中定义银行账户类 Account。该类中有账号、姓名、存款余额等数据域,余额默认是 0;有存款、取款、获取当前余额等方法。其中账号为长度为 12 位数字的字符串,姓名为字符串,存款余额为 double。

步骤 2:编写名为 CreditAccount 类的信用卡账户类。该类继承自 Account 类,增加一个透支限额(double)数据域,透支限额默认为 1000。同时该类账户取款时允许透支,但不能超过透支限额。

步骤 3:编写名为 SavingAccount 的储蓄账户类 SavingAccount。该类继承自 Account 类。该类账户取款时不允许透支。

步骤 4:编写名为 Bank 的模拟银行类,其中可以存储多个类型可能是信用卡账户或储蓄账户的对象(可以用数组或 ArrayList 实现)。该类包含以下方法:

开户:即增加一个新的账户,注意:不允许两个账户的账号相同

销户:即删除一个已有的账户

查询账户:根据一个账号,查询有无该账号的账户

统计目前银行的存款总余额的方法。

统计目前银行的信用卡账户总透支金额的方法。

统计目前总账户数。

统计目前信用卡账户数

统计目前储蓄卡账户数

步骤 5:编写客户端类 Client.java 完成以下功能:

编写一个静态方法,创建一个银行对象,并随机生成 10 个账号从 1000 0000 0000 0000 到 1000 0000 0000 0009、类型不同的账户。

main 方法中模拟几次开户操作。

main 方法中模拟几次销户操作。

模拟几个对指定账号的存款和取款操作。

输出银行的总账户数、总余额、总透支数、各类具体账户数。

实现代码:

Account类:

package cn.zg;/*** @author zg*/
public class Account {/*** 账户*/private String account;/*** 姓名*/private String name;/*** 存款余额*/private double money;/*** 构造*/public Account() {this.money=0.0;}public Account(String account){this.account=account;}public Account(String account, String name, double money) {this.account = account;this.name = name;this.money = money;}/***访问器和修改器*/public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}/*** 存款* @param money 存款金额* @return 是否存款成功*/public boolean addMoney(double money){this.money+=money;return true;}/*** 取款* @param money 取款金额* @return 是否取款成功*/public boolean minusMoney(double money){if(this.money-money>0){this.money-=money;return true;}return false;}
}

CreditAccount类:

package cn.zg;/*** @author zg*/
public class CreditAccount extends Account{/*** 透支限额*/private double overdue;/*** 构造*/public CreditAccount() {}public CreditAccount(String account, String name, double money, double overdue) {super(account, name, money);this.overdue = overdue;}/*** 访问器和修改器*/public double getOverdue() {return overdue;}public void setOverdue(double overdue) {this.overdue = overdue;}/*** 取款时允许透支,但不能超过透支限额* @param money 透支金额* @return 是否透支成功*/public boolean over(double money){if(overdue-money<0){return false;}overdue-=money;return true;}
}

>

SavingAccount类:

package cn.zg;/*** @author zg*/
public class SavingAccount extends Account{public SavingAccount() {}public SavingAccount(String account, String name, double money) {super(account, name, money);}
}

Bank类:

package cn.zg;import java.util.ArrayList;/*** @author zg*/
public class Bank {/*** 存储多个类型可能是信用卡账户或储蓄账户的对象*/ArrayList<Account> accounts=new ArrayList<>();/*** 开户* @param account 待开户账户* @return 是否开户成功*/public boolean add(Account account){for (Account acc : accounts) {if(acc.getAccount().equals(account.getAccount())){//  不允许两个账户的账号相同return false;}}return accounts.add(account);}/*** 销户* @param account 待销户账户* @return 是否销户成功*/public boolean delete(Account account){for (Account acc : accounts) {if(acc.getAccount().equals(account.getAccount())){return accounts.remove(acc);}}return false;}/*** 根据一个账号,查询有无该账号的账户* @param account 要查询的账号* @return 有无该账号的账户*/public boolean query(Account account){for (Account acc : accounts) {if(acc.getAccount().equals(account.getAccount())){return true;}}return false;}/**** @return 统计目前银行的信用卡账户总透支金额*/public double sumOfOverdue(){double sum=0;for (Account account : accounts) {if(account instanceof CreditAccount){sum+=(1000-((CreditAccount) account).getOverdue());}}return sum;}/**** @return 统计目前银行的存款总余额*/public double sumOfMoney(){double sum=0;for (Account account : accounts) {sum+=account.getMoney();}sum-=sumOfOverdue();return sum;}/**** @return 统计目前总账户数*/public int count(){return  accounts.size();}/**** @return 统计目前信用卡账户数*/public int countOfCredit(){int count=0;for (Account account : accounts) {if(account instanceof CreditAccount){count++;}}return count;}/**** @return 统计目前储蓄卡账户数*/public int countOfSaving(){int count=0;for (Account account : accounts) {if(account instanceof SavingAccount){count++;}}return count;}
}

Client类:

package cn.zg;import java.util.Random;/*** @author zg*/
public class Client {public static void main(String[] args) {Bank bank=create();//  模拟几次开户操作boolean zg = bank.add(new SavingAccount("1000000000000001", "zg", 0));//  1000000000000001账号已存在,开户失败print(zg);boolean zcg = bank.add(new SavingAccount("1000000000000010", "zcg", 0));print(zcg);boolean zzw = bank.add(new CreditAccount("1000000000000011", "zzw", 0,1000));print(zzw);//  模拟几次销户操作print2(bank.delete(new Account("1000000000000001")));print2(bank.delete(new Account("1000000000000006")));print2(bank.delete(new Account("1000000000000009")));//  模拟几个对指定账号的存款操作for (Account account : bank.accounts) {if("1000000000000011".equals(account.getAccount())){account.addMoney(100000);}else if("1000000000000001".equals(account.getAccount())){account.addMoney(1000);}else if("1000000000000005".equals(account.getAccount())){account.addMoney(1688);}}//  模拟几个对指定账号的取款操作for (Account account : bank.accounts) {if("1000000000000011".equals(account.getAccount())){account.minusMoney(111);}else if("1000000000000001".equals(account.getAccount())){account.minusMoney(111);}else if("1000000000000005".equals(account.getAccount())){account.minusMoney(111);}}//  模拟所有信用卡账号的透支操作for (Account account : bank.accounts) {if(account instanceof CreditAccount){((CreditAccount)account).over(111);}}//  输出银行的总账户数、总余额、总透支数、各类具体账户数System.out.println("银行的总账户数:"+bank.count());System.out.println("银行的总余额:"+bank.sumOfMoney());System.out.println("银行的总透支数:"+bank.sumOfOverdue());System.out.println("银行的信用卡账户数:"+bank.countOfCredit());System.out.println("银行的储蓄卡账户数:"+bank.countOfSaving());}/*** 随机生成 10 个账号从 1000 0000 0000 0000 到 1000 0000 0000 0009、类型不同的账户。* @return Bank对象*/public static Bank create(){Bank bank = new Bank();Random random = new Random();String prefix="100000000000000";while(bank.count()<10){int i=random.nextInt(10);if(i%2==0){bank.add(new CreditAccount(prefix+i,"小"+i,0,1000));}else{bank.add(new SavingAccount(prefix+i,"小"+i,0));}}return bank;}public static void print(boolean flag){if(flag){System.out.println("开户成功!");}else{System.out.println("开户失败!");}}public static void print2(boolean flag){if(flag){System.out.println("销户成功!");}else{System.out.println("销户失败!");}}
}

效果展示:

Java实验13 银行账户存取款业务相关推荐

  1. SCAU Java 实验7 银行账户存取款业务

    要求编写程序模拟银行账户的存.取款操作.按要求完成以下步骤: 步骤1:编写程序Account.java,其中定义银行账户类Account.该类中有账号.姓名.存款余额等数据域,余额默认是0:有存款.取 ...

  2. 银行活期存取款业务处理系统的数据流图

    银行活期存取款业务处理系统的数据流图 (1)数据源(数据的源点)包括:__储户______: (2)加工包括:________: (3)数据存储包括:_账目文件.现金帐_______&#x

  3. C#实验报告 类与对象的访问性:银行账户存取款、新建账户、查询余额

    实验4 C#程序的流程控制 一.实验目的 (1)理解面向对象的概念,掌握C#定义类和创建对象的方法 (2)区分类的不同数据成员,包括常量.字段和属性的定义方法,并学会控制其访问性 (3)掌握类的方法成 ...

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

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

  5. 模拟银行存取款业务 java

    实训题5:模拟银行存取款业务 实训目的:本项目的主要功能是模拟银行的存取款业务,当用户登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作 ...

  6. 基于Java语言实现模拟银行存取款业务系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/85820969 1.项目简介 本项目的主要功能是模拟银行的存取款业务,当用户登录时需判断银行 ...

  7. 模拟银行存取款业务 简要代码

    本项目的主要功能是模拟银行的存取款业务,当用户登录时需判断银行卡号和银行卡密码,当输入的 卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型.操作类型包括四种(存款:1取款: ...

  8. java实验报告之模拟银行存取款业务

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2022.12.20 La ...

  9. java模拟银行存取_JAVA基础案例 模拟银行存取款业务

    模拟银行存取款业务 编写一个Java应用程序,模拟网上银行登录及存取款业务.登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型.操作 ...

最新文章

  1. Unix时代的开创者Ken Thompson
  2. linux 运行 dmol3,Dmol3建模及优化
  3. 关于 shell 脚本编程的10 个最佳实践
  4. post如何获取到referrer_如何使用 ThinkJS 优雅的编写 RESTful API
  5. IdentityServer4客户端JWT解密实现(基于.net4.0)
  6. java21天打卡 day10-字符串2
  7. 每天Leetcode 刷题 初级算法篇-有效的括号
  8. Luogu P2048 [NOI2010]超级钢琴
  9. CentOS 命令登录MySQL时,报错ERROR 1045 (28000) Access denied for user root
  10. Support Vector Machine's Large Margin
  11. VS2008的绿色精简版,只有VC2008部分
  12. 2020《互联网周刊》年度评选结果揭晓, Smartbi获三项行业大奖
  13. 微信公众号图文消息悄悄调整,注定10月12号是个不眠夜
  14. android打飞机游戏、MVP句子迷App、悬浮窗、RxJava+Retrofit、加载动画、定制计划App等源码
  15. 1934 贝茜放慢脚步(二路归并)
  16. 2020-02-23
  17. 有一个姑娘,我无法忘记她
  18. 基于石墨烯的光电探测传感器研究
  19. 如何查看电脑开关机记录
  20. JS学习日记--正则基础语法

热门文章

  1. 在动作捕捉系统中使用加速度和倾角传感器
  2. 同时表达国际、国内身体BMI指数
  3. hadoop集群环境动态增加datanode
  4. 诈尸的csp(noip2020)竟然水了个省一
  5. 0002-winrar批量压缩文件夹
  6. 国际商标注册4种常见方式
  7. 我给航母做3D还原:这三处细节,太震撼了…
  8. Codeforces 652C Foe Pairs 【dp】
  9. 英语GRE词汇量【原创】
  10. 搭建Docker私服