Создайте пакет model
3. Создайте подпакеты account, constants, money, score
Часть 2. Иерархия пользователей.
1) Создайте класс прав пользователей Principal с полями
private String firstName;
private String lastName;
private String secondName;
private short age;
2) Добавьте конструкторы, геттеры/сеттеры для Principal
public Principal(String firstName, String lastName, String
secondName, short age) {
18
this.firstName = firstName;
this.lastName = lastName;
this.secondName = secondName;
this.age = age;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getSecondName() {
return secondName;
}
public void setSecondName(String secondName) {
this.secondName = secondName;
}
public short getAge() {
return age;
}
public void setAge(short age) {
this.age = age;
}
3) Создайте класс пользователя Account с полями
private Principal principal;
private String login;
private String password;
private Map<Integer,Score> scoreMap;
4) Добавьте конструкторы, геттеры/сеттеры для Account
public Account(Principal principal, String login, String
password) {
this.principal = principal;
this.login = login;
this.password = password;
scoreMap = new HashMap<Integer, Score>();
}
public Map<Integer, Score> getScoreMap() {
return scoreMap;
}
public void setScoreMap(Map<Integer, Score> scoreMap) {
this.scoreMap = scoreMap;
}
public Principal getPrincipal() {
return principal;
}
19
public void setPrincipal(Principal principal) {
this.principal = principal;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
Часть 3. Иерархия «деньги».
1. Создайте класс Currency с полями
private String name;
private float usdCource;
2. Добавьте конструкторы, геттеры/сеттеры для Currency
public Currency(String name, float usdCource) {
this.name = name;
this.usdCource = usdCource;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getUsdCource() {
return usdCource;
}
public void setUsdCource(float usdCource) {
this.usdCource = usdCource;
}
3. Создайте интерфейс MoneyInterface
public interface MoneyInterface {
void addMoney(Money money);
Money getMoney(double balanceLess);
Money getMoneyWithoutLess();
}
4. Создайте класс Money с полями
private Currency currency;
private double value;
5. Добавьте конструкторы, геттеры/сеттеры для Currency
public Money(double value, String currencyName) {
this.value = value;
this.currency =
20
CurrencyHolder.getCurrencyByName(currencyName);
}
public Currency getCurrency() {
return currency;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
6. Создайте класс держателя валют
public class CurrencyHolder {
private static final Map<String,Currency> currencies = new
HashMap<String, Currency>();
static {
currencies.put("USD",new Currency("USD", 1));
currencies.put("RUR",new Currency("RUR", 65.5f));
}
public static Currency getCurrencyByName(String name) {
return currencies.get(name);
}
}
Часть 4. Иерархия «счета».
1. Создайте базовый абстрактный класс Score
public abstract class Score implements MoneyInterface {
private Money balance;
private Account owner;
private Integer number;
2. Добавьте конструкторы, геттеры/сеттеры для Score, а также реализуйте в
нем методы интерфейса MoneyInterface
public Score(Money balance, Account owner, Integer number) {
this.balance = balance;
this.owner = owner;
this.number = number;
}
public Money getBalance() {
return balance;
}
public void setBalance(Money balance) {
this.balance = balance;
}
public Account getOwner() {
return owner;
}
public void setOwner(Account owner) {
this.owner = owner;
}
public Integer getNumber() {
return number;
}
21
public void setNumber(Integer number) {
this.number = number;
}
@Overridepublic void addMoney(Money money){
double usdValueIn = money.getValue() *
money.getCurrency().getUsdCource();
double usdValueThis = this.balance.getValue() *
this.balance.getCurrency().getUsdCource();
if(usdValueThis < usdValueIn) {
System.out.println("You have no so much!");
return;
}
if(checkBefore()) {
this.balance.setValue((usdValueThis + usdValueIn) *
this.balance.getCurrency().getUsdCource());
} else {
System.out.println("No check!");
return;
}
}
@Override
public Money getMoney(double balanceLess){
if(balanceLess > 30000) {
throw new IllegalArgumentException("Wrong balance less!");
}
this.balance.setValue(this.balance.getValue() - balanceLess);
return this.balance;
}
@Override
public Money getMoneyWithoutLess(){
return this.balance;
}
3. Создайте классы наследники от Scorepublic class CreditScore extends Score {
public CreditScore(Money balance, Account owner, Integer
number) {
super(balance, owner, number);
}
…
public class DebetScore extends Score {
private CreditScore creditScore;
public DebetScore(Money balance, Account owner, Integer
number, CreditScore creditScore) {
super(balance, owner, number);
this.creditScore = creditScore;
}
…
public class CurrentScore extends Score{
private DebetScore debetScore;
public CurrentScore(Money balance, Account owner, Integer
number, DebetScore debetScore) {
22
super(balance, owner, number);
this.debetScore = debetScore;
}
4. Реализуйте методы Score в каждом классе с учетом следующих
дополнений:
1 Снятие с любого счета более чем 30 000 за сеанс запрещено
2 Наличие кредитного счета с балансом менее минус 20 000 запрещает
работу с дебетовым счетом
3 При пополнении текущего счета более чем на 1 000 000 за операцию- на
дебетовый счет автоматически поступает +2 000