尚硅谷 Java 基础实战—Bank 项目—实验题目 5_续1

简介: 尚硅谷 Java 基础实战—Bank 项目—实验题目 5_续1

实验题目

创建客户账户。

image.png

实验目的

instanceof 运算符的应用。

提 示

  1. 修改 Customer 类来处理具有多种类型的联合账户。 (例如用数组表示多重性一节所作的,该类必须包括以下的公有方法: addAccount(Account),getAccount(int)和 getNumOfAccounts()。 每个 Customer 可以有多个 Account。(声明至少有 5 个)
  2. 完成 TestBanking 程序 该程序创建一个客户和账户的集合,并生成这些客户及其账户余额的报告。在 TestBanking.Java 文件中,你会发现注释块以/ ** * … ***/来开头和结尾。这 些注释只是必须提供的代码的位置。
  3. 使用 instanceof 操作符测试拥有的账户类型,并且将 account_type 设置 为适当的值,例如:“SavingsAccount”或“CheckingAccount”。
  4. 编译并运行该程序,将看到下列结果
CUSTOMERSREPORT================Customer: Simms, JaneSavingsAccount: currentbalanceis¥500.0CheckingAccount: currentbalanceis¥200.0Customer: Bryant, OwenCheckingAccount: currentbalanceis¥200.0Customer: Soley, TimSavingsAccount: currentbalanceis¥1500.0CheckingAccount: currentbalanceis¥200.0Customer: Soley, MariaCheckingAccount: currentbalanceis¥200.0SavingsAccount: currentbalanceis¥150.0

代码

【Account.java】类

packagebanking;
publicclassAccount {
protecteddoublebalance;    //银行帐户的当前(或即时)余额//公有构造器 ,这个参数为 balance 属性赋值publicAccount(doubleinit_balance) {
this.balance=init_balance;
    }
//用于获取经常余额publicdoublegetBalance() {
returnbalance;
    }
/*** 向当前余额增加金额* @param amt   增加金额* @return  返回 true(意味所有存款是成功的)*/publicbooleandeposit(doubleamt){
balance+=amt;
returntrue;
    }
/*** 从当前余额中减去金额* @param amt   提款数目* @return  如果 amt小于 balance, 则从余额中扣除提款数目并返回 true,否则余额不变返回 false。*/publicbooleanwithdraw(doubleamt){
if (amt<balance){
balance-=amt;
returntrue;
        }else{
returnfalse;
        }
    }
}

【Customer.java】类

packagebanking;
publicclassCustomer {
privateStringfirstName;
privateStringlastName;
privateAccount[] accounts=newAccount[10];
privateintnumOfAccounts;
publicCustomer(Stringf, Stringl) {
this.firstName=f;
this.lastName=l;
    }
publicStringgetFirstName() {
returnfirstName;
    }
publicStringgetLastName() {
returnlastName;
    }
/*** 通过下标索引获取 account* @param index 下标索引* @return account*/publicAccountgetAccount(intindex) {
returnaccounts[index];
    }
/*** 获取 numOfAccounts* @return  numOfAccounts*/publicintgetNumOfAccounts() {
returnnumOfAccounts;
    }
/*** 添加 account,并将 numOfAccounts+1* @param acct  account*/publicvoidaddAccount(Accountacct) {
accounts[numOfAccounts++]=acct;
    }
}

【Bank.java】类

packagebanking;
/*** 银行类*/publicclassBank {
privateCustomer[] customers;   //Customer对象的数组privateintnumberOfCustomer;   //整数,跟踪下一个 customers 数组索引/*** 公有构造器,以合适的最大尺寸(至少大于 5)初始化 customers 数组。*/publicBank() {
customers=newCustomer[10];
    }
/***  该方法必须依照参数(姓,名)构造一个新的 Customer 对象然后把它放到 customer 数组中。还必须把 numberOfCustomers 属性的值加 1。* @param f 姓* @param l 名*/publicvoidaddCustomer(Stringf,Stringl){
customers[numberOfCustomer++]=newCustomer(f,l);
    }
/*** 通过下标索引获取 customer* @param index 下标索引* @return  customer*/publicCustomergetCustomer(intindex) {
returncustomers[index];
    }
publicintgetNumOfCustomers() {
returnnumberOfCustomer;
    }
}

【CheckingAccount.java】类

packagebanking;
publicclassCheckingAccountextendsAccount{
privatedoubleoverdraftProtection;
publicCheckingAccount(doublebalance) {
super(balance);
    }
publicCheckingAccount(doublebalance, doubleprotect) {
super(balance);
this.overdraftProtection=protect;
    }
/*** 此方法必须执行下列检查。如 果当前余额足够弥补取款 amount,则正常进行。* 如果不够弥补但是存在透支保护,则尝试用 overdraftProtection 得值来弥补该差值(balance-amount).* 如果弥补该透支所需要的金额大于当前的保护级别。则整个交易失败,但余额未受影响。* @param amt   提款数目* @return  返回true代表交易成功,否则交易失败*/@Overridepublicbooleanwithdraw(doubleamt){
if (balance<amt){
if (amt-balance>overdraftProtection) {
returnfalse;
            }else {
overdraftProtection-=amt-balance;
balance=0;
returntrue;
            }
        }else {
balance-=amt;
returntrue;
        }
    }
}

【SavingsAccount.java】类

packagebanking;
publicclassSavingsAccountextendsAccount{
privatedoubleinterestRate;
publicSavingsAccount(doublebalance, doubleinterest_Rate) {
super(balance);
this.interestRate=interest_Rate;
    }
}

【TestBanking.java】类

packagebanking;/** This class creates the program to test the banking classes.* It creates a set of customers, with a few accounts each,* and generates a report of current account balances.*/importbanking.*;
importjava.text.NumberFormat;
publicclassTestBanking {
publicstaticvoidmain(String[] args) {
NumberFormatcurrency_format=NumberFormat.getCurrencyInstance();
Bankbank=newBank();
Customercustomer;
// Create several customers and their accountsbank.addCustomer("Jane", "Simms");
customer=bank.getCustomer(0);
customer.addAccount(newSavingsAccount(500.00, 0.05));
customer.addAccount(newCheckingAccount(200.00, 400.00));
bank.addCustomer("Owen", "Bryant");
customer=bank.getCustomer(1);
customer.addAccount(newCheckingAccount(200.00));
bank.addCustomer("Tim", "Soley");
customer=bank.getCustomer(2);
customer.addAccount(newSavingsAccount(1500.00, 0.05));
customer.addAccount(newCheckingAccount(200.00));
bank.addCustomer("Maria", "Soley");
customer=bank.getCustomer(3);
// Maria and Tim have a shared checking accountcustomer.addAccount(bank.getCustomer(2).getAccount(1));
customer.addAccount(newSavingsAccount(150.00, 0.05));
// Generate a reportSystem.out.println("\t\t\tCUSTOMERS REPORT");
System.out.println("\t\t\t================");
for (intcust_idx=0; cust_idx<bank.getNumOfCustomers(); cust_idx++) {
customer=bank.getCustomer(cust_idx);
System.out.println();
System.out.println("Customer: "+customer.getLastName() +", "+customer.getFirstName());
for (intacct_idx=0; acct_idx<customer.getNumOfAccounts(); acct_idx++) {
Accountaccount=customer.getAccount(acct_idx);
Stringaccount_type="";
// Determine the account type/*** Step 1:**** Use the instanceof operator to test what type of account**** we have and set account_type to an appropriate value, such**** as "Savings Account" or "Checking Account".***/if(accountinstanceofSavingsAccount){
account_type="Savings Account";
                }else{
account_type="Checking Account";
                }
// Print the current balance of the account/*** Step 2:**** Print out the type of account and the balance.**** Feel free to use the currency_format formatter**** to generate a "currency string" for the balance.***/System.out.println("\t"+account_type+": current balance is ¥"+account.getBalance());
            }
        }
    }
}



目录
相关文章
|
17天前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
49 2
|
23天前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
3天前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
11 1
|
26天前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
289 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
27天前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
61 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
10天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
20天前
|
开发框架 Java 程序员
揭开Java反射的神秘面纱:从原理到实战应用!
本文介绍了Java反射的基本概念、原理及应用场景。反射允许程序在运行时动态获取类的信息并操作其属性和方法,广泛应用于开发框架、动态代理和自定义注解等领域。通过反射,可以实现更灵活的代码设计,但也需注意其性能开销。
36 1
|
23天前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
27天前
|
运维 Java Maven
Dockerfile实践java项目
通过上述实践,我们可以看到,Dockerfile在Java项目中扮演着至关重要的角色,它不仅简化了部署流程,提高了环境一致性,还通过多阶段构建、环境变量配置、日志管理、健康检查等高级特性,进一步增强了应用的可维护性和可扩展性。掌握这些实践,将极大地提升开发和运维团队的工作效率。
38 1
|
27天前
|
算法 Java Linux
java制作海报五:java 后端整合 echarts 画出 折线图,项目放在linux上,echarts图上不显示中文,显示方框口口口
这篇文章介绍了如何在Java后端整合ECharts库来绘制折线图,并讨论了在Linux环境下ECharts图表中文显示问题。
36 1