当前位置:编程学习 > JAVA >>

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 区别?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,