JAVA作业题求助,求代码~~!!!
某银行有许多储户,每个储户可以拥有一个或多个账号。现请你开发一个软件,管理银行储户与账号业务。要求如下:
Bank类中有一个customers集合,用来存储所有的Customer(储户)对象,addCustomer()方法用语向该集合中添加储户,getCustomer()方法根据下标值获取某个储户,getNumOfCustomer()方法获取储户总数,getCustomers()方法返回储户列表,以便获得每个储户对象‘
Customer类有一个accounts集合,用来存储某个储户的所有Account(账号)对象,addAccount()方法用于向该集合中添加账号,getAccount()方法根据下标值获取该储户的某个账号,getNumOfAccounts()方法获取该储户的账号总数,getAccounts()方法返回该储户的账号Iterator,以便获得每个账号对象。
Account类是抽象类,有一个balance属性,代表余额。Deposit()方法表示存款,amount参数是存款额,Withdraw()方法表示取款,取款额amount如果超出了余额就会抛出透支异常,我们需要定义一个OverdraftException类来表示这个异常,当抛出异常时,不进行取款交易,并报告用户此项错误。
SavingsAccount类表示大额存款账号,继承Account,新增一个属性interestRate,代表利率。
CheckingAccount类表示大额存款账号,也继承Account,它有一个叫canOverdraft的属性,是一个boolean值,代表该账号能否透支(true——能,false——否);它还有一个叫maxOverdraft的属性,表示该账号允许的最大透支额。这个类的withdraw()方法(取款)需要考虑的因素比较多:在发生透支时,如果账号不允许透支(canOverdraft=false),则抛出异常并退出交易;如果允许透支(canOverdraft=true),但透支额(amount-balance)超出最大透支额的话,也抛出异常并退出交易;只有在不发生透支或透支额小于最大透支额时,交易才能正常进行。另外,在每次进行透支交易时,最大透支额(maxOverdraft)应作调整,以便使该账号的最大透支额随透支次数的增加而不断减少,从而避免透支的滥用,阻止信用膨胀。CheckingAccount类有两个构造方法,只带一个参数的构造方法用来初始化balance,同时设定canOverdraft=false,maxOverdraft=0.00.
CustomReport类用来显示每个储户的姓名及他所有的账号的类别和余额,以报表的形式输出。
根据以上描述,创建一个TestBanking类,并在其main方法中添加若干储户和账号,然后模拟存款,取款业务,并最终输出一张完整的报表。
答案:我将所有内容编写在一个文件中你可以将这些Bank中的私有类提取到单个的文件中,作为公共类使用,代码如下
package help20110415;
import java.util.ArrayList;
import java.util.List;
public class Bank {
private List<Customer>customers;
public Bank() {
this.customers=new ArrayList<Customer>();
}
/**
* 创建一个新的储户
* @return
*/
public Customer createNewCustomer(){
return new Customer();
}
/**
* 创建新账号
* @param type
* 账号类型
* @param balance
* 余额
* @return
*/
public Account createNewAccount(String type,Double balance){
if(type.equals(Account.SAVINGACCOUNT)){
return new SavingsAccount(balance);
}else if(type.equals(Account.CHECKINGACCOUNT)){
return new CheckingAccount(balance);
}else{
return null;
}
}
@Override
public String toString() {
StringBuilder bank=new StringBuilder();
int i=1;
for(Customer customer : this.customers){
bank.append("==================================================================");
bank.append("储户 "+i+"\n");
bank.append(customer.toString());
}
return bank.toString();
}
/**
* 添加储户
*/
public void addCustomer(Customer customer){
this.customers.add(customer);
}
/**
* 获取指定的储户
* @param index
* 指定储户的下标
* @return
* 储户实例
*/
public Customer getCustomer(Integer index){
return this.customers.get(index);
}
/**
* 获取储户总数
* @return
* 储户总数
*/
public Integer getNumOfCustomer(){
return this.customers.size();
}
/**
* 获取储户列表
* @return
* 储户列表
*/
public List<Customer> getCustomers(){
return this.customers;
}
private class Customer{
private List<Account>accounts;
private String name;
/**
* 默认构造方法
*/
public Customer() {
this.accounts=new ArrayList<Account>();
}
/**
* 添加账户
* @param account
*/
public void addAccount(Account account){
this.accounts.add(account);
}
/**
* 返回指定账户
* @param index
* 指定账户的下标
* @return
*/
public Account getAccount(Integer index){
return this.accounts.get(index);
}
/**
* 获取账户总数
* @return
*/
public Integer getNumOfAccount(){
return this.accounts.size();
}
/**
* 获取账户列表
* @return
*/
public List<Account> getAccounts(){
return this.accounts;
}
/**
* 获取储户姓名
* @return
*/
public String getName() {
return name;
}
/**
* 设置储户姓名
* @param name
*/
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
StringBuilder info=new StringBuilder();
info.append("姓名:"+this.name+"\n");
int i=1;
for(Account account : this.accounts){
info.append("->账号 "+i+" : "+account.toString()+"\n");
i++;
}
return info.toString();
}
}
private abstract class Account{
/**
* 余额
*/
private static final String SAVINGACCOUNT="SavingsAccount";
private static final String CHECKINGACCOUNT="CheckingAccount";
private Double balance;
public Account() {
this.balance=0.0;
}
public Account(Double balance) {
super();
this.balance = balance;
}
/**
* 存款
* @param amount
* 存款额
*/
public void Deposit(Double amount){
this.balance+=amount;
}
/**
* 取款
* @param amount
* 取款额
* @throws OverdraftException
*/
public void Withdraw(Double amount) throws OverdraftException{
if(amount>this.balance){
throw new OverdraftException();
}else{
//交易
this.balance-=amount;
}
}
public Double getBalance() {
return balance;
}
public void setBalance(Double balance) {
this.balance = balance;
}
@Override
public String toString() {
return "余额:"+this.balance;
}
}
private class SavingsAccount extends Account{
/**
* 利率
*/
private Double interestRate;
public SavingsAccount(Double balance) {
super(balance);
}
/**
* 获取利率
* @return
*/
public Double getInterestRate() {
return interestRate;
}
/**
* 设置利率
* @param interestRate
*/
public void setInterestRate(Double interestRate) {
this.interestRate = interestRate;
}
@Override
public String toString() {
return "SavingsAccount型账号->"+super.toString();
}
/**
* 您需要覆盖的SavingAccount型账号的存款方法
* 当前为调用其超类方法
*/
@Override
public void Deposit(Double amount) {
// TODO 您需要覆盖的SavingAccount型账号的存款方法
super.Deposit(amount);
}
/**
* 您需要覆盖的SavingAccount型账号的取款方法
* 当前为调用其超类方法
*/
@Override
public void Withdraw(Double amount) throws OverdraftException {
// TODO 您需要覆盖的SavingAccount型账号的取款方法
super.Withdraw(amount);
}
}
private class CheckingAccount extends Account{
/**
* 能否透支
*/
private boolean canOverdraft;
/**
* 最大透支金额
*/
priva
上一个:JAVA聊天室 客户端 和 服务器 完整代码
下一个:c#学习方法? c#和java 区别?