【Java 基础实验_Bank项目_06】单例模式(Static Bank) , 查询异常输出
基于上一个实验Banking_5 ,代码先全部复制过来.
笔记心得:
1.SavingAccount() 需要两种构造方法,接受单个参数和两个的
2.Account 有两个类型 SavingAccount 和 CheckingAccount ,每个人都有两个或一个 ,
setAccount(Account account,int id) ,id=1 表示设置前者, id=2表示设置后者.
3.在 public class CustomerReport{}中 ,首先调用static Bank : Bank bank=Bank.getBank();
然后遍历其中元素, 可能存在只有一个账户,所以需要特判一下:
if(customer.getSavingAccount()!=null) 和if(customer.getCheckingAccount()!=null) ,解决这个空内存 的异常!
实验要求:
实验目的:
单例模式。 提示:
1. 修改 Bank 类,创建名为 getBanking 的公有静态方法,它返回一个 Bank 类的实例。 2. 单个的实例应是静态属性,且为私有。同样,Bank 构造器也应该是私有的 创建 CustomerReport 类 1.在前面的银行项目练习中,“客户报告”嵌入在 TestBanking 应用程序的 main 方法中。在这个练习中,改代码被放在,banking.reports 包的
CustomerReport 类中。您的任务是修改这个类,使其使用单一银行对象。 2. 查找标注为注释块/*** ***/的代码行.修改该行以检索单子银行对象。
文件工程组织: (基于上一个实验Banking_5 ,代码 先 全部复制过来,然后再具体改改.)
具体代码:
Bank.java (构造器方法私有化,private static Bank bank=new Bank();)
package Banking_6;
//要求使bank实现单例模式
public class Bank {
private Customer[] customers ; //用于存放客户
private int numberofCustomers; //用于记录Customer的个数 private Bank(){ ///构造器方法私有化
numberofCustomers=0;
customers = new Customer[100]; ///这里记得要初始化!不然要发生java.lang.NullPointerException
}
private static Bank bank=new Bank();
public static Bank getBank(){
return bank;
}
public void addCustomer(String f,String l){
int i= this.numberofCustomers;
customers[i]=new Customer(f,l);//新建一个构造对象
this.numberofCustomers++;
}
public int getNumOfCustomers() {
return numberofCustomers;
}
public Customer getCustomer(int index) {
return customers[index];
}
}
CustomerReport.java (打印全部Bank的信息 )
package Banking_6;
//遍历银行里的所有账户,进行汇报
public class CustomerReport {
Bank bank=Bank.getBank();
public void generateReport(){
System.out.println("=======================================");
System.out.println(" "+"CUSTOMERS REPORT");
System.out.println("=======================================");
int num=bank.getNumOfCustomers();
Customer customer;
Account Savingaccount,Checkingaccount;
for(int i=0;i<num;i++){
customer=bank.getCustomer(i);
Savingaccount = customer.getSavingAccount();
Checkingaccount=customer.getCheckingAccount();
//输出所有存款信息
System.out.println("Customer: "+customer.getFirstName()+" "+customer.getLastName());
if(customer.getSavingAccount()!=null)
System.out.println("SavingAccount: current balance is $"+customer.getSavingAccount().getBalance());
if(customer.getCheckingAccount()!=null)
System.out.println("CheckingAccount: current balance is $"+customer.getCheckingAccount().getBalance());
System.out.println();
}
} }
TestBank.java
package TestBanks;
import Banking_6.*;
public class TestBanking_6 { public static void main(String[] args) {
Bank bank = Bank.getBank();
Customer customer;
CustomerReport report = new CustomerReport(); // Create several customers and their accounts
bank.addCustomer("Jane", "Simms");
customer = bank.getCustomer(0);
customer.setAccount(new SavingAccount(500.00, 0.05),1);
customer.setAccount(new CheckingAccount(200.00, 400.00),2); bank.addCustomer("Owen", "Bryant");
customer = bank.getCustomer(1);
customer.setAccount(new CheckingAccount(200.00),2); bank.addCustomer("Tim", "Soley");
customer = bank.getCustomer(2);
customer.setAccount(new SavingAccount(1500.00, 0.05),1);
customer.setAccount(new CheckingAccount(200.00),2); bank.addCustomer("Maria", "Soley");
customer = bank.getCustomer(3);
// Maria and Tim have a shared checking account
customer.setAccount(bank.getCustomer(2).getCheckingAccount(),1);
customer.setAccount(new SavingAccount(150.00, 0.05),2); // Generate a report
report.generateReport();
}
}
Account.java
package Banking_6;
public class Account { protected double balance=0;//余额 ,uml前该变量是 '-'
public Account(double init_balance){
balance=init_balance;
}
public double getBalance() {
return balance;
}
public void setBalance(double b){this.balance=b;}
//存钱 public boolean deposit(double amt){
this.balance+=amt;return true;
}
//取钱
public Boolean withdraw(double amt) {
if(amt>this.balance)
return false;
else{
this.balance-=amt;
return true;
}
}
}
TestBanking_6.java (测试类)
package TestBanks;
import Banking_6.*;
public class TestBanking_6 { public static void main(String[] args) {
Bank bank = Bank.getBank();
Customer customer;
CustomerReport report = new CustomerReport(); // Create several customers and their accounts
bank.addCustomer("Jane", "Simms");
customer = bank.getCustomer(0);
customer.setAccount(new SavingAccount(500.00, 0.05),1);
customer.setAccount(new CheckingAccount(200.00, 400.00),2); bank.addCustomer("Owen", "Bryant");
customer = bank.getCustomer(1);
customer.setAccount(new CheckingAccount(200.00),2); bank.addCustomer("Tim", "Soley");
customer = bank.getCustomer(2);
customer.setAccount(new SavingAccount(1500.00, 0.05),1);
customer.setAccount(new CheckingAccount(200.00),2); bank.addCustomer("Maria", "Soley");
customer = bank.getCustomer(3);
// Maria and Tim have a shared checking account
customer.setAccount(bank.getCustomer(2).getCheckingAccount(),1);
customer.setAccount(new SavingAccount(150.00, 0.05),2); // Generate a report
report.generateReport();
}
}
输出结果:
=======================================
CUSTOMERS REPORT
=======================================
Customer: Jane Simms
SavingAccount: current balance is $500.0
CheckingAccount: current balance is $200.0 Customer: Owen Bryant
CheckingAccount: current balance is $200.0 Customer: Tim Soley
SavingAccount: current balance is $1500.0
CheckingAccount: current balance is $200.0 Customer: Maria Soley
SavingAccount: current balance is $200.0
CheckingAccount: current balance is $150.0
【Java 基础实验_Bank项目_06】单例模式(Static Bank) , 查询异常输出的更多相关文章
- Java基础-SSM之mybatis的统计函数和分页查询
Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 【Java 基础 实验-抽象类应用的练习】(抽象类Employee被SalariedEmployee和HourEmployee继承 , 遍历,Scanner 输出)
笔记总结: 1.Employee为抽象类,两个子类进行继承, public abstract double earning();两个子类分别实现 2.Employee[] emps[i].toStri ...
- Java基础知识强化02:import static 和 import
1.import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com..... ...
- 【Java基础-实验7】Banking_7 -添加银行透支扣款系统的 thorw异常机制
实验基本要求: 实验题目 7:(在6基础上修改) 将建立一个 OverdraftException 异常,它由 Account 类的withdraw()方法 抛出. 实验目的: 自定义异常 实验说明: ...
- java基础部分小项目
贪吃蛇项目 import java.awt.Color; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.even ...
- JAVA基础知识(2)--关键字static的使用
在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法 ...
- Java基础之类和对象、单例模式、继承
Java类和对象 一般的类只能是public或者default的,若是public的,类名必须和文件名一样.一般在一个文件只写一个类,故这个类一般是加上public. 内部类还可以是private和p ...
- Java基础学习总结(10)——static关键字
一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是 ...
- Java基础自学小项目
实现一个基于文本界面的<家庭记账软件> 需求:能够记录家庭的收入,支出,并能够收支明细表 主要涉及一下知识点: - 局部变量和基本数据类型 - 循环语句 - 分支语句 - 方法调用和返回值 ...
随机推荐
- SQL,NoSQL和NewSQL
一:概念 SQL(Structured Query Language):数据库,指关系型数据库.主要代表:SQL Server.Oracle.MySQL.PostgreSQL. NoSQL(Not O ...
- Redis服务监控之RedisLive安装部署(亲测可用)
一.Redis服务安装部署 1.redis安装(linux系统) 下载 https://redis.io/ 安装依赖 yum install gcc tcl 解压.编译.安装(make & m ...
- SAS学习笔记36 二分类logistic回归
这里所拟合模型的AIC和SC统计量的值均小于只有截距的模型的相应统计量的值,说明含有自变量的模型较仅含有常数项的要好 但模型的最大重新换算 R 方为0.0993,说明模型拟合效果并不好,可能有其他危险 ...
- const函数返回自身的引用也是常量引用
const函数返回自身的引用也是const 解决:根据对象是否为consr重载
- Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络
Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络 朱晓霞发表于目标检测和深度学习订阅 457 广告关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 立即抢购 ...
- Python 的 Mixin 类(转)
转1:https://www.cnblogs.com/aademeng/articles/7262520.html 转2:https://blog.csdn.net/u010377372/articl ...
- hdu 5212 反向容斥或者莫比
http://acm.hdu.edu.cn/showproblem.php?pid=5212 题意:忽略.. 题解:把题目转化为求每个gcd的贡献.(http://www.cnblogs.com/z1 ...
- (十)web服务与javaweb结合(1)
一.解决方法 A . 编写一个监听器,在监听器中发布服务 二.案例一 方法A:编写一个监听器,在监听器中发布服务 1. 编写服务接口 package com.shyroke.service; impo ...
- 洛谷 P1047 校门外的树(待完善)
链接:https://www.luogu.org/problemnew/show/P1047 题目: 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米.我们可以把马路看 ...
- 北京大学1001ACM——高精度类型题总结
题目描述: ExponentiationTime Limit: 500MS Memory Limit: 10000KTotal Submissions: 80517 Accepted: 190 ...