CSDN好空,放上来点东西给大家看着玩。
11.1
Design a Transaction class as follows:
■ A private data field to store the the date of this transaction.
■ A private data field to store the type of the transaction, such as 'W' for withdrawal, 'D'
■ A private data field to store the amount of the transaction.
■ A private data field to store the new balance after this transaction.
■ The getter methods for all above private data fields.
■ A constructor to construct a Transaction with the specified date, type, balance, and description.
Modify the given Account class as follows:
■ Add a new data field name of the String type to store the name of the customer.
■ Add a new constructor that constructs an account with the specified name, id, and balance.
■ Add a new data field named transactions whose type is ArrayList that stores the transaction for the accounts. Each transaction is an instance of the Transaction class.
■ Modify the withdraw and deposit methods to add a transaction to the transactions array list.
The UML of Account class and Transaction class is shown as the following.
Write a test program that creates an Account with annual interest rate 1.5%, balance 1000, id 1122, and name George. Deposit $30, $40, and $50 to the account and withdraw $5, $4, and $2 from the account. Print an account summary that shows account holder name, interest rate, balance, and all transactions.
Test example:
//只略微解释了一下
import java.util.Date;
import java.util.Scanner;
import java.util.ArrayList;
class Account{
protected String name;
protected int id;
protected double balance;
protected double annualInterestRate;
protected Date dateCreated=new Date();
ArrayList<Transaction> trancsaction=new ArrayList<Transaction>(); //此处说明队列里只能存放Transaction类实例的地址
Account(){
}
Account(String name,int newId,double newBalance,double annualInterestRate){
this.name=name;
id=newId;
balance=newBalance;
this.annualInterestRate=annualInterestRate;
}
String getName() {
return name;
}
int getId() {
return id;
}
double getBanlance() {
return balance;
}
double getAnnualInterestRate() {
return annualInterestRate;
}
void setId(int newId) {
id=newId;
}
void setBalance(double newBalance) {
balance=newBalance;
}
void setAnnualInterestRate(double newAnnualInterestRate) {
annualInterestRate=newAnnualInterestRate;
}
double getMonthlyInterest() {
return (annualInterestRate/12)*balance;
}
Date getDateCreated() {
return dateCreated;
}
void withdraw(double amount) {
balance=balance-amount;
String b= new String(dateCreated.toString()+" "+"W "+amount+" "+balance+amount);
this.trancsaction.add(new Transaction('W',amount,balance+amount,b));
} //因为要记录取钱的信息,所以要构造一个Transaction对象,把描述本次操作的字符串b作为构造器传递的String类的description,并且要把Transaction对象放在队列里,所以用add方法。
void deposit(double amount) {
balance=balance+amount;
String b= new String(dateCreated.toString()+" "+"D "+amount+" "+balance+amount);
this.trancsaction.add(new Transaction('D',amount,this.balance-amount,b));
}//基本同上
}
class Transaction{
private Date date;
private char type;
private double amount;
private double balance;
private String description;
Transaction(char type,double amount,double balance,String description){
this.type=type;
this.amount=amount;
this.balance=balance;
this.description=description;
}
Date getDate() {
return date;
}
char getChar() {
return type;
}
double getAmount() {
return amount;
}
double getBalance() {
return balance;
}
String getDescription() {
return description;
}
}
public class main {
public static void main(String[] args) {
Account a=new Account("George",1122,1000,1.5);
a.deposit(30);
a.deposit(40);
a.deposit(50);
a.withdraw(5.0);
a.withdraw(4.0);
a.withdraw(2.0);
System.out.println("Name : "+a.getName());
System.out.println("Annual interest rate : "+a.getAnnualInterestRate()+"%");
System.out.println("Balance : "+a.getBanlance());
System.out.println("Date Type Amount Balance");
for(int i=0;i<a.trancsaction.size();i++) {
System.out.println(a.trancsaction.get(i).getDescription());
}
}
}