• 0.00

  • 0.00

Уровень 26, урок 15, большая задача 1. Задание 8.

Уже никакого терпения не хватает, будьте добры, укажите почему может не приниматься:
Задание 8
Пора привести в порядок наш main, уж очень там всего много, чего не должно быть.

1. Перенесите логику из main в DepositCommand и InfoCommand
Проверим, что там стало с main? Цикл, в котором спрашиваем операцию у пользователя,
 а потом вызываем метод у CommandExecutor.
И так до бесконечности... надо бы придумать условие выхода из цикла.
Исправь цикл, чтоб он стал do-while. Условие выхода - операция EXIT.

2. Давайте запустим прогу и пополним
 счет на EUR 100 2 и USD 20 6, и посмотрим на INFO.
Ничего не понятно, т.к. создались 2 манипулятора: первый для EUR, второй для USD.
Давайте улучши3м логику InfoCommand. Надо вывести баланс по каждому манипулятору.

2.1. В классе CurrencyManipulatorFactory создайте статический метод
 getAllCurrencyManipulators(), который вернет Collection всех манипуляторов.
У вас все манипуляторы хранятся в карте, не так ли? Если нет, то рефакторьте.
2.2. В InfoCommand в цикле выведите
[код валюты - общая сумма денег для выбранной валюты]
Запустим прогу и пополним счет на EUR 100 2 и USD 20 6, и посмотрим на INFO.
Все работает правильно?
 EUR - 200
 USD - 120
Отлично!

3. Запустим прогу и сразу первой операцией попросим INFO.
Ничего не вывело? Непорядок.
Добавьте в манипулятор метод boolean hasMoney(), который
будет показывать, добавлены ли какие-то банкноты или нет.

4. В InfoCommand используйте метод п.3. и выведите фразу
 "No money available.", если нет денег в банкомате.

package com.javarush.test.level26.lesson15.big01;

import java.util.HashMap;
import java.util.Map;

public class CurrencyManipulator {
    private String currencyCode;
    private static Map<Integer, Integer> denominations = new HashMap<>();

    public CurrencyManipulator(String currencyCode) {
        this.currencyCode = currencyCode;
    }

    public String getCurrencyCode() {
        return currencyCode;
    }

    public void addAmount(int denomination, int count){
        if(denominations.containsKey(denomination))
            denominations.put(denomination, denominations.get(denomination) + count);
        else
            denominations.put(denomination,count);
    }

    public boolean hasMoney(){
        if (denominations.isEmpty()) return false;
        else {
            for (Map.Entry<Integer,Integer> pair : denominations.entrySet()){
                if (pair.getValue()!=0) return true;
            }
            return false;
        }
    }

    public int getTotalAmount(){
        int result = 0;
        for(Map.Entry<Integer,Integer> pair : denominations.entrySet())
            result = result + (pair.getKey() * pair.getValue());

        return result;
    }
}

package com.javarush.test.level26.lesson15.big01.command;

import com.javarush.test.level26.lesson15.big01.ConsoleHelper;
import com.javarush.test.level26.lesson15.big01.CurrencyManipulator;
import com.javarush.test.level26.lesson15.big01.CurrencyManipulatorFactory;

import java.util.Collection;

class InfoCommand implements Command{
    @Override

    public void execute() {
        boolean money = false;
        ConsoleHelper.writeMessage("Information: ");
        for (CurrencyManipulator cur : CurrencyManipulatorFactory.getAllCurrencyManipulators()){
            if (cur.hasMoney()){
                if (cur.getTotalAmount() > 0)
                {
                    ConsoleHelper.writeMessage(cur.getCurrencyCode() + " - " + cur.getTotalAmount());
                    money = true;
                }
            }
        }
        if (!money)
            ConsoleHelper.writeMessage("No money available.");
    }
}

package com.javarush.test.level26.lesson15.big01.command;

import com.javarush.test.level26.lesson15.big01.ConsoleHelper;
import com.javarush.test.level26.lesson15.big01.CurrencyManipulator;
import com.javarush.test.level26.lesson15.big01.CurrencyManipulatorFactory;

class DepositCommand implements Command{
    @Override
    public void execute() {
        ConsoleHelper.writeMessage("Depositing...");

        String curCod = ConsoleHelper.askCurrencyCode();
        CurrencyManipulator manipulator = CurrencyManipulatorFactory.getManipulatorByCurrencyCode(curCod);

        String[] row = ConsoleHelper.getValidTwoDigits(curCod);

        try {
            int numb1 = Integer.parseInt(row[0]);
            int numb2 = Integer.parseInt(row[1]);

            manipulator.addAmount(numb1, numb2);
            ConsoleHelper.writeMessage(String.format("%d %s was deposited successfully", numb1 * numb2, curCod));
        }
        catch(NumberFormatException e){
            ConsoleHelper.writeMessage("Please enter the valid data.");
        }

    }
}

package com.javarush.test.level26.lesson15.big01;

import com.javarush.test.level26.lesson15.big01.command.CommandExecutor;
import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException;

import java.util.Locale;

/**
 * Created by Stanislav on 19.08.2016.
 */
public class CashMachine {
    public static void main(String[] args) {
        Locale.setDefault(Locale.ENGLISH);

        Operation s = null;

        do {
            try {
                s = ConsoleHelper.askOperation();
                CommandExecutor.execute(s);
            } catch (InterruptOperationException e) {
                e.printStackTrace();
            }
        } while (s != Operation.EXIT);
    }
}


package com.javarush.test.level26.lesson15.big01;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by Stanislav on 19.08.2016.
 */
public class CurrencyManipulatorFactory {
    private static Map<String, CurrencyManipulator> manipulators = new HashMap<>();

    public static CurrencyManipulator getManipulatorByCurrencyCode(String currencyCode){
        CurrencyManipulator man = manipulators.get(currencyCode);

        if (man == null) {
            man = new CurrencyManipulator(currencyCode);
            manipulators.put(currencyCode, man);
        }

        return man;
    }

    private CurrencyManipulatorFactory(){}

    public static Collection<CurrencyManipulator> getAllCurrencyManipulators(){
        return manipulators.values();
    }
}