Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12

Тест: написать простейший финансовый калькулятор, работающий в консоли

17.07.2019, 18:26. Показов 4588. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:Необходимо написать простейший финансовый калькулятор, работающий в консоли.

Функционал:

2 валюты - доллар ($12) и евро (52.5eur)

Операции + и -

Знак доллара указывается перед числом, евро - после.

Число может быть целым (в т.ч. отрицательным) или дробным, с максимум двумя знаками после точки.

Поддержка конвертации валют (toDollar(), toEuro()), курсы должны быть заданы в некотором внешнем файле конфигурации, удобном для редактирования. Курсы в разные стороны могут отличаться!

Контроль типов: нельзя конвертировать валюту в саму себя, складывать разные валюты

В случае неверного выражения пользователю должно выводиться сообщение об ошибке в понятной форме.

(опционально) Все посчитанные выражения и их значения должны сохраняться в лог-файл

Архитектура

Писать не на скорость, а с упором на грамотность, гибкость и удобство доработки (представьте, что кому-то другому придется добавлять поддержку нового типа валют, или вместо консоли "прикрутить" графический интерфейс - это не должно привести к значительным правкам существующего кода). Цель задания - проверить Ваше умение разрабатывать архитектуру ПО, выстраивать гибкие объектные модели.


Пример входного выражения:

toDollar(toEuro($10.00)+5eur)


Результат (если за 1 доллар дают 0.8 евро, а за 1 евро 1.5 доллара):

$19.50

Добавлено через 2 минуты
может кто то подсказать как делать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2019, 18:26
Ответы с готовыми решениями:

Написать калькулятор, работающий с дробями
Нужна помошь!Долго пытался На с++ не получается написать дробный калькулятор.

Написать простейший калькулятор
Добрый день! Помогите пожалуйста написать наипростейший калькулятор с помощью языка программирования С, без каких либо функций. (я...

Написать простейший калькулятор
задача на оператор выбора С++ Написать программу, которая вводит 2 числа и символ операции (*,/,-,+). Затем в зависимости от символа,...

18
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.07.2019, 19:19
Цитата Сообщение от letscode Посмотреть сообщение
как делать?
с упором на грамотность, гибкость и удобство доработки
конкретно что непонятно?
0
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12
17.07.2019, 19:27  [ТС]
Добавлено через 1 минуту
шуточка зачетная))
что значит мертвые репликации??
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
17.07.2019, 20:23
Цитата Сообщение от letscode Посмотреть сообщение
как делать?
самый простой вариант поискать в гугле примеры законченных, похожих программ. рассказывать шибко долго((.
начинай, ктонить подскажет, куда двигать... задача очень похожа, по стилю, на приглашение к собеседованию)
0
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12
17.07.2019, 20:47  [ТС]
Правильно направление ????
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Currency {
    public static void main(String[] args) {
 
 
        Scanner input = new Scanner(System.in);
        double value1 = 0.00, value2 = 0.00;
        String currency;
 
        System.out.print("Enter a value: ");
        String str = input.nextLine();
        value1 = Double.parseDouble(str);
        System.out.print("USD or EUR: ");
        currency = input.nextLine();
 
 
        if (currency.equals("USD")) {
            value2 = value1 * 0.734878047;
            System.out.println(value1 + "USD = " + value2 + " EUR. (Conversion rate: 1 USD = 0.734878047 EUR)");
        } else if (currency.equals("EUR")) {
            value2 = value1 * 1.36077;
            System.out.println(value1 + "EUR = " + value2 + " USD. (Conversion rate: 1 EUR = 1.36077 USD)");
        } else {
            System.out.println("Conversion rate: 1 USD = 0.734878047 EUR"
                    + "\nConversion rate: 1 EUR = 1.36077 USD");
        }
 
        input.close();
    }
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.07.2019, 21:34
нет, прочитай про классы и объекты
0
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12
17.07.2019, 22:50  [ТС]
ты имеешь ввиду что класс не правильно определен??
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.07.2019, 22:57
я имею ввиду почитай
0
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12
17.07.2019, 23:06  [ТС]
та вот именно что прочитал
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.07.2019, 23:20
ну и где классы, где объекты?
0
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12
17.07.2019, 23:33  [ТС]
а здесь лучше???

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  static Scanner key = new Scanner(System.in);
 
    public static void main(String[] args) {
 
        final double dollar = 12;
        final double euro = 52.5;
 
        int minus;
        int summa;
        double exchangeRate;
 
 
        System.out.println("Enter 0 to add a dollar + euro and convert to dollars or " + "1 to add euro + dollar and convert to euro:");
        summa = key.nextInt();
 
        //добавляем доллары к эвро и наоборот
 
        if (summa == 0) {
            System.out.println("How many dollars do you have");
            double Dollar = key.nextDouble();
            System.out.println("How many euro do you have");
            double Euro = key.nextDouble();
            exchangeRate = Dollar + ((euro / dollar) * Euro);
            System.out.println("$" + Dollar + " + " + Euro + "eur");
            System.out.println("You nave" + " $" + exchangeRate);
        } else if (summa == 1) {
            System.out.println("How many euro do you have");
            double Euro = key.nextDouble();
            System.out.println("How many dollars do you have");
            double Dollar = key.nextDouble();
            exchangeRate = Euro + ((dollar / euro) * Dollar);
            System.out.println(Euro + "eur " + "+" + " $" + Dollar);
            System.out.println("You have " + exchangeRate + "eur");
        }
        System.out.println("Enter 0 to add a dollar - euro and convert to dollars or " + "1 to add euro - dollar and convert to euro:");
        minus = key.nextInt();
 
 
        //Отнимаем долары от эвро и наоборот
        if (minus == 0) {
            System.out.println("How many dollars do you have");
            double Dollar = key.nextDouble();
            System.out.println("How many euro do you have");
            double Euro = key.nextDouble();
            exchangeRate = Dollar - ((euro / dollar) * Euro);
            System.out.println("$" + Dollar + " - " + Euro + "eur");
            System.out.println("You nave " + "$" + exchangeRate);
        } else if (minus == 1) {
            System.out.println("How many euro do you have");
            double Euro = key.nextDouble();
            System.out.println("How many dollars do you have");
            double Dollar = key.nextDouble();
            exchangeRate = Euro - ((dollar / euro) * Dollar);
            System.out.println(Euro + "eur " + "-" + " $" + Dollar);
            System.out.println("You have " + exchangeRate + "eur");
 
 
        }
        key.close();
    }
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.07.2019, 05:40
letscode, в общем случае нужно писать лексер, парсер и интерпретатор. Теория есть в книге Компиляторы. Принципы, технологии и инструментарий.

Судя по приведенному коду, задание явно не вашего уровня. Где вы его взяли и зачем пытаетесь выполнить?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
18.07.2019, 08:47
Цитата Сообщение от letscode
а здесь лучше???
Да в общем-то ничего и не изменилось...

Добавлено через 6 минут
letscode, если входящее выражение в консоли должно быть именно такого плана, то задача выходит из разряда тривиальных. Тут придется как следует учить матчасть.
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
18.07.2019, 10:10
letscode, чтобы не парситься и по рабочекрестянки, то можно так. поле sign поможет тебе при парсинге))
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class Money {
    private String name;
    private String sign;
    private double rateBuck; // курс этой валюты к баксу
    private double val;
 
    public Money(String name, String sign, double rateBuck) {
        this.name = name;
        this.sign = sign;
        this.rateBuck = rateBuck;
    }
 
    public double toThisValuta(Money otherValuta) {
        return otherValuta.getRateBuck() * otherValuta.getVal()/this.rateBuck;
    }
 
    public double getVal() {
        return val;
    }
 
    public void setVal(double val) {
        this.val = val;
    }
 
    public double getRateBuck() {
        return rateBuck;
    }
 
    public void setRateBuck(double rateBuck) {
        this.rateBuck = rateBuck;
    }
 
    public static void main(String[] args) {
        Money dollar = new Money("Dollar", "$", 1);
        Money ruble = new Money("Ruble", "R", 0.5);
        dollar.setVal(10);
        ruble.setVal(100);
        System.out.println(ruble.toThisValuta(dollar));
        System.out.println(dollar.toThisValuta(dollar));
        System.out.println(dollar.toThisValuta(ruble));
    }
}
1
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12
18.07.2019, 15:03  [ТС]
"зачем пытаюсь выполнить"...что бы чему то научиться
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
18.07.2019, 15:36
Цитата Сообщение от letscode Посмотреть сообщение
чему то научиться
ну, а зачем сразу в дебри? чем путь постепенного понимания и осваивания не по душе?!
0
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12
18.07.2019, 15:49  [ТС]
ты прав постепенно не интересно, вот сейчас пытаюсь разобраться как написать парсер
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.07.2019, 16:06
letscode, слона едят по частям. Если делать калькулятор впервые, то выкинуть единицы измерения, функции и числа с плавающей точкой. Оставить только целые числа и операции. Может быть, скобки. Алгоритм вычисления можно поискать в гугле запросом типа «stack-based calculator».
0
0 / 0 / 0
Регистрация: 16.07.2019
Сообщений: 12
18.07.2019, 16:42  [ТС]
с калькулятором в принципе все понятно, не понятно как это оформить и как втулить туда сканер
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.07.2019, 16:42
Помогаю со студенческими работами здесь

Написать простейший калькулятор
Всем привет, хотел написать калькулятор, но в конце всегда выдаёт - Вы ввели неизвестный знак. В чём ошибка, подскажите, пожалуйста. ...

Как написать простейший калькулятор?
я написал что то вроде этого: program calcus; uses crt; var a,b,c:integer; d:string; begin clrscr; writeln('vvedite cifru...

Как написать простейший калькулятор
Как написать простейший калькулятор?

Написать калькулятор, работающий с числами в двоичной и шестнадцатеричной системах счисления
Помогите пожалуйста написать программу калькулятор, позволяющего складывать, вычитать и умножать числа представленных в двоичной и...

Написать простейший строковый калькулятор, поддерживающий несколько систем счисления
Здравствуйте! Есть идеи, как написать простейший строковый калькулятор, поддерживающий несколько систем счисления? Признательна за помощь.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru