1

Тема: Програма - список витрат на закупи

Задали тех завдання-написати консольну прораму. Програма - список витрат покупок покупка містить дату в форматі "УУУУ-ММ-DD", суму витрачених грошей, назву валюти(USD, EUR, PLN) та назву продукту. має виводитись список продуктів посортованих за датою та можливість видалення продуктів за датою, також має показуватись сума покупок в певній вказаній валюті. Стикнувся з такими проблемами: 1. Як задавати дату( Date чи String?) ? 2.
Як привязати дату до продукту?(задати полем класу, чи зробити її окремим обєктом?), 3. Як конвертувати валюту з однієї в іншу(конвертація має проводитись онлайн з сайту http://fixer.io).


Буду вдячний за вашу допомогу та поради)

От те що встиг написати:

клас продакт:


public class Product {

    enum Currency{
        USD, EUR, PLN
    }
    
    private Date date;
        
    private float amount;
    
    private Currency currency;
    
    private String productName;       

    private long id;

    public Product(Date date, float amount, Currency currency, String productName) {
        this.date = new Date();
        this.amount = amount;
        this.currency = currency;
        this.productName = productName;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public float getAmount() {
        return amount;
    }

    public void setAmount(float amount) {
        this.amount = amount;
    }

    public Currency getCurrency() {
        return currency;
    }

    public void setCurrency(Currency currency) {
        this.currency = currency;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Product [date=" + date + ", amount=" + amount + ", currency="
                + currency + ", productName=" + productName + "]";
    }
    
    
    
}

клас Дейт:

public class Date {

    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String date1=sdf.format(new Date());
}


клас продакт баскет:


public class ProductBasket {

    private List<Product> products;
    
}

2

Re: Програма - список витрат на закупи

Прихований текст

Використовуйте будь ласка для коду теґ code

3

Re: Програма - список витрат на закупи

ок, вибачте, просто перший раз на форумі)

4

Re: Програма - список витрат на закупи

Заголовок не відповідає змісту, я думав, ви написати завдання не можете.
Ну і якщо вам дали ТЗ і ви маєте проблеми із його реалізацією - то може, і нам його покажете? А то з телепатією якось ні в кого тут не склалося.

5

Re: Програма - список витрат на закупи

1. Date, або LocalDate.
З консолі парсити так:

String dateStringFromConsole = ///
LocalDate newJavaTimeApiDate = DateTimeFormat.forPattern("yyyy-MMM-dd").parseLocalDate(dateStringFromConsole);
Date oldJavaDate = new SimpleDateFormat("yyyy-MMM-dd").parse(dateStringFromConsole);

2. Залежить як Ви хочете реалізувати і що конкретно треба. Дайте повний опис завдання. Не зрозуміло що таке список витрат + клас ProductBasket… Продукт купується, чи кудись просто складається для підрахунку?
3) Зробити GET HTTP запит на сервер згідно з документацією :)

6 Востаннє редагувалося Nazar94 (26.05.2017 22:00:57)

Re: Програма - список витрат на закупи

От специфікація і вимоги

1. Application overview
Personal expenses management application that allows users to
track how much money have they spent.
2. [MAJOR] Requirements
As a result of test problem solution you should provide a
command-line application that supports following commands:
● add 2017-04-25 12 USD Jogurt — adds expense entry to the list
of user expenses. Expenses for various dates could be added in
any order. Command accepts following parameters:
2017-04-25 — is the date when expense occurred
12 — is an amount of money spent
USD — the currency in which expense occurred
Jogurt — is the name of product purchased
● list — shows the list of all expenses sorted by date
● clear 2017-04-25 — removes all expenses for specified date,
where:
2017-04-25 — is the date for which all expenses should be
removed
● total PLN — this command should take a list of exchange rates
from http://fixer.io , calculate the total amount of money spent and
present it to user in specified currency, where:
PLN — is the currency in which total amount of expenses should
be presented
3. [MINOR] Requirements
In order to get extra points for test problem solution you might
cover your source code with unit tests.
4. Application usage example
Here is an example of normal application usage flow, for each
command a corresponding output is shown:
> add 2017-04-25 2 USD Jogurt
2017-04-25
Jogurt 2 USD
>add 2017-04-25 3 EUR “French fries”
2017-04-25
Jogurt 2 USD
French Fries 3 EUR
> add 2017-04-27 4.75 EUR Beer
2017-04-25
Jogurt 2 USD
French Fries 3 EUR
2017-04-27
Beer 4.75 EUR
> add 2017-04-26 2.5 PLN Sweets
2017-04-25
Jogurt 2 USD
French Fries 3 EUR
2017-04-26
Sweets 2.5 PLN
2017-04-27
Beer 4.75 EUR
> list
2017-04-25
Jogurt 2 USD
French Fries 3 EUR
2017-04-26
Sweets 2.5 PLN
2017-04-27
Beer 4.75 EUR
> clear 2017-04-27
2017-04-25
Jogurt 2 USD
French Fries 3 EUR
2017-04-26
Sweets 2.5 PLN
> total EUR
5.42 EUR

7

Re: Програма - список витрат на закупи

Nazar94 написав:

От специфікація і вимоги

1. Application overview
Personal expenses management application that allows users to
track how much money have they spent.
2. [MAJOR] Requirements
As a result of test problem solution you should provide a
command-line application that supports following commands:
● add 2017-04-25 12 USD Jogurt — adds expense entry to the list
of user expenses. Expenses for various dates could be added in
any order. Command accepts following parameters:
2017-04-25 — is the date when expense occurred
12 — is an amount of money spent
USD — the currency in which expense occurred
Jogurt — is the name of product purchased
● list — shows the list of all expenses sorted by date
● clear 2017-04-25 — removes all expenses for specified date,
where:
2017-04-25 — is the date for which all expenses should be
removed
....

class Expense {
    LocalDate date;
    MonetaryAmount price;
    //...
}

class ExpenseManager {
    List<Expenses> expenses;
    ExchangeRateProvider exchangeRateProvider;

    public ExpenseManager() {
        // get the default ExchangeRateProvider (CompoundRateProvider)
        this(MonetaryConversions.getExchangeRateProvider());
    }
    
    public ExpenseManager(ExchangeRateProvider exchangeRateProvider) {
        this.exchangeRateProvider = exchangeRateProvider;
    }
    void addExpense(Expense ex) {...}
    void removeExpense(Expense ex) {...}
    List<Expense> expenses() {...}
    void clearExpenses() {...}
    void clearExpenses(LocalDate date) {
       expenses = expenses.stream().filter(exp -> exp.date().equals(date)).collect(toList());
    }
    MonetaryAmount totalPrice(String currency) {
        CurrencyConversion cc = exchangeRateProvider.getCurrencyConversion(currency);
        return expenses.stream().map(exp -> {
            MonetaryAmount price = exp.price();
            if (price.getCurrency().getCurrencyCode().equals(currency))
               return price;
            return price.with(cc);
        }).reduce(Money.of(0, currency), (a, b) -> a.add(b));
    }
}

Залишається лише написати кастомний ExchangeRateProvider для Flixer'a (приклад https://github.com/JavaMoney/jsr354-tck … ider.java) і передати його ExpenseManager. MonetaryAmount та ExchangeRateProvider частина Java Money API (proposal): http://www.mscharhag.com/java/java-jsr- … rrency-api

Полякам передавайте pozdrowienia, а Вам powodzenia.

Подякували: Nazar941

8 Востаннє редагувалося Nazar94 (26.05.2017 22:42:18)

Re: Програма - список витрат на закупи

А скажіть будь ласка як реалізувати сортування за датою? Наскільки я зрозумів рокистувач може додавати будь- яку дату в інший день тобто дата покупки може не збігатись із днем занесення в список, чи не буде проблем з її сортуванням в тому форматі, в яому вимагає специфікація?

9

Re: Програма - список витрат на закупи

Nazar94 написав:

А скажіть будь ласка як реалізувати сортування за датою? Наскільки я зрозумів рокистувач може додавати будь- яку дату в інший день тобто дата покупки може не збігатись із днем занесення в список, чи не буде проблем з її сортуванням в тому форматі, в яому вимагає специфікація?

Здається, ніхто й не просив сортувати за датою додавання до списку. Малося на увазі сортування за датою, яку вказав користувач.

List<Expenses> sortedExpenses() {
    return expenses.stream().sorted((exp1, exp2) -> exp1.date().compareTo(exp2.date())).collect(toList());
}

10 Востаннє редагувалося Nazar94 (26.05.2017 22:54:34)

Re: Програма - список витрат на закупи

А це приведення дати до стрінга буде коректно сортуватись? Чи таке приведення не потрібне?

public class Date {
 
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String date1=sdf.format(new Date());
}

P.S. перепрошую, що так багато питань, просто ще немає досвіду)

11

Re: Програма - список витрат на закупи

Nazar94 написав:

А це приведення дати до стрінга буде коректно сортуватись? Чи таке приведення не потрібне?

public class Date {
 
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String date1=sdf.format(new Date());
}

P.S. перепрошую, що так багато питань, просто ще немає досвіду)

Що заважає скомпілювати і подивитись :) ?

Подякували: Nazar941