【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基础自学小项目
实现一个基于文本界面的<家庭记账软件> 需求:能够记录家庭的收入,支出,并能够收支明细表 主要涉及一下知识点: - 局部变量和基本数据类型 - 循环语句 - 分支语句 - 方法调用和返回值 ...
随机推荐
- 最新 腾讯java校招面试题(含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.腾讯等10家互联网公司的校招Offer,因为某些自身原因最终选择了腾讯.6.7月主要是做系统复习.项目复盘.LeetCode ...
- 作为linux新手需掌握的常用命令大全
学了几周的linux系统,接触最多的就是各种各样的命令,此篇随笔作为对之前所学的各中命令的整理扩展. 1.man命令 man命令作为第一个要学的Linux命令是因为它的作用非常强大——可用于查看命令的 ...
- Timsort
https://archive.codeplex.com/?p=timsort4net#117964 download archive https://codeplexarchive.blob.cor ...
- MySQL提供的几种检索行数据的优化方式
ICP(Index Condition Pushdown): 在MySQL5.6之前,存储引擎会通过遍历索引定位基表中 的行,然后返回给Server层,再去为这些数据进行WHERE后的条件过滤.MyS ...
- 【C++札记】标准模板库string
介绍 c++中字符串string对象属于一个类,内置了很多实用的成员函数,操作简单,方便更直观. 命名空间为std,所属头文件<string> 注意:不是<string.h>. ...
- Python 基础教程 | 菜鸟教程
https://www.runoob.com/python/python-install.html
- 利用Python进行数据分析_Pandas_层次化索引
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 层次化索引主要解决低纬度形式处理高纬度数据的问题 import pandas ...
- 关于scanf()读取与返回值和回车键的问题
今天老师检查的时候说如果一个链表为空(简单的说就是while(scanf())一开始没输入数字就按回车的话会进入死循环)的情况, 我当时有点懵,因为文档里强调为空的情况.还好老师叫我自己现场实现一下, ...
- ubuntu 快捷方式添加 applications添加
首先我们要了解,Ubuntu 的 Dash 里所有程序都是在 /usr/share/applications 中的,所以我们的思路很简单——建一个类似于“快捷方式”一样的东西扔进去就好了.所以第一步自 ...
- [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息
[Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫 版权声明: ...