题目类别: 实验

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

内容要求:

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

步骤 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 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("销户失败!");

}

}

}

效果展示:

本文地址:https://blog.csdn.net/BitcoinR/article/details/111939916

希望与广大网友互动??

点此进行留言吧!

java实验 声明银行账户类__Java实验13 银行账户存取款业务相关推荐

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

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

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

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

  3. java模仿银行账务业务_Java基础案例 - 模拟银行存取款业务

    博学谷--让IT教学更简单,让IT学习更有效 模拟银行存取款业务 编写一个Java应用程序,模拟网上银行登录及存取款业务.登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当 ...

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

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

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

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

  6. 模拟银行存款java,模拟银行存取款业务

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public class Account { // 初始化存款 float count = 0f;// 当前账户余额 int money1;// 存款数, ...

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

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

  8. python代码设计测试用例_[CP_01] Python循环结构案例:模拟银行存取款业务,设计执行测试用例...

    目录结构 一.案例描述 二.需求分析 1. 业务流程图 2. 业务项&测试场景 三.代码实现 四.用例设计&执行(简化模式) 1. 登录业务 2. 存款业务 3. 取款业务 4. 退卡 ...

  9. c语言银行每月额外存款100,C语言课程设计_银行存取款业务.doc

    <C语言程序设计>课 程 设 计 报 告 题目:模拟银行存取款业务 学生姓名 学 号 专 业 班 级 学 部 计算机科学与电气工程学部 目 录 TOC \o "1-3" ...

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

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

最新文章

  1. c#中如何跨线程调用windows窗体控件?
  2. 火力发电厂与变电站设计防火规范_2019年《建筑设计防火规范》新版征求意见稿...
  3. Spring Security——根据请求Header[Accept]不同返回不同类型资源解决方案
  4. arm的LDMFD--4种堆栈方式
  5. java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量
  6. 蓝桥杯 ALGO-92 算法训练 前缀表达式
  7. 07-人脸识别-人脸矫正
  8. 任天堂 虚拟主机服务器,任天堂 虚拟主机服务器
  9. 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)...
  10. Java 算法刷题指南
  11. php递归mysql查询_PHP MySQL递归查询
  12. 云计算发展和容器息息相关丨阿里云、腾讯云争相抢镜【软件网每日新闻播报│第10-25期】
  13. Flink - Watermark
  14. 1538G. Gift Set
  15. 菌群多样性是如何形成的,与健康的关系,如何改善?
  16. 计算BDP值和wnd值
  17. 笔记本电脑右下角的电池图标不显示如何找出
  18. python 代码转程序_python2代码转python3
  19. java虚数复数计算_真实的虚数,不仅不是没用,而且还很实在
  20. FrankenUPS Hack将服务器UPS变成整机UPS

热门文章

  1. IIS6.0文件解析漏洞
  2. 安卓开发——MaterialDesign实战
  3. mysql之事务 锁(三)
  4. mkdir 创建目录命令
  5. 手机wps取消不等宽分栏_wps取消分栏怎么设置
  6. 【NLP】《Chinese Poetry Generation with Planning based Neural Network》的阅读笔记
  7. 复旦大学数学学院 17 级本科生对每周一题的评价
  8. 留学论文辅导计算机专业Essay写作范文
  9. 计算机笔记检讨,上课没做笔记的反省检讨书
  10. 论如何用Python让你的同桌骂人...