Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 1,998
Записей в блоге: 1
1

Конвертер Валют

19.11.2013, 12:24. Просмотров 2884. Ответов 7
Метки нет (Все метки)

Доброго Дня. Тут решил реализовать давнею мечту
Для себя конвертер Валют
Написал парсер который берет актуальные курсы валюты с интернета
И состряпал примерно удобный/понятный интерфейс программы
Но задумка заключается в том что ввожу Edit сумму
и сразу в Memo получаю ответ 16 строк (4 валюты и в 4 направлениях)
Вот и на начальном этапе проектирования хочу сделать всё правильно (что бы это шустро работало)
Полагаю что всё это нужно сделать в отдельном потоке
и что бы сразу без кнопочно брало сумму с Edit
Может лучше сразу реализовать структуру? (не разу это не делал)
Правильную конвертацию что бы было бы ему без разницы сумма с точкой или запятой и округление до 2 знаков после запятой
Да и Бел. суммы очень большие - 933000000 = 100.000 у.е таких сумм как правило не будет - но мало ли на будущее, разбогатею ещё
Прошу совета о опытных программистов - как правильно всё это реализовать
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2013, 12:24
Ответы с готовыми решениями:

Конверте валют
Всем доброго времени суток.У меня возник вопрос как сделать конверте валют....

конвертер
Здравствуйте, такие 3 вопроса: Как записывать в текстовый файл лог того, что я...

Конвертер
Добрий день форум Помогите пожолуиста, как мне достать номер клавища типа A...

конвертер (калькулятор)
Задача состоит в том, что на форме есть четыри Эдита и баттон,надо разработать...

Bin конвертер
Доброго вечера, ребята помогите реализовать... Нужно автоматически...

7
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.11.2013, 14:35 2
Ddv122, потоки не нужны. Это всё можно сделать в одном единственном событии - OnKeyDown.
Как сделать пояснять надо?
1
nick42
Практикантроп
4339 / 2346 / 412
Регистрация: 23.09.2011
Сообщений: 4,997
19.11.2013, 15:18 3
Лучший ответ Сообщение было отмечено как решение

Решение

Kulgar, в этой теме желательно быть не столь лаконичным и обосновывать свои утверждения. (Ddv122 не новичок в программировании, и если спрашивает совета перед началом работы над программой, значит хочет определиться с наиболее рациональным способом).
3
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.11.2013, 15:38 4
nick42, именно потому, что не новичок я и написал кратко.
Предложил альтернативу. В чём она заключается уже ясно из названия события. Ddv122'у ясно. Вопросов то не последовало.
1
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 1,998
Записей в блоге: 1
19.11.2013, 16:19  [ТС] 5
Kulgar, про OnKeyDown я прекрасно знаю
nick42,
Дело в другом - хотелось бы достойно и красиво сделать всё
То пересматривая свои проекты (не зная о регулярках) - получилось 300 строчек кода - а мог бы в 20 всё вместить - да и скорость работы увеличить.
Вот и решил написал парсер который берёт курсы с интернета - и успешно реализовал это за часик
Стал другой вопрос - быстрая конвертация
C++
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
double eur=12800;
double usd=9380;
double rus=385;
double ukr=1100;
 
double  kol=StrToFloat(StringReplace(Edit1->Text,".",",", TReplaceFlags()<< rfReplaceAll << rfIgnoreCase));
                         //ГЃГҐГ° ðóá ГЄ äðóãèì ГўГ*ëþòГ*Г¬
double  byrrus=kol/rus;
double  byrusd=kol/usd;
double  byreur=kol/eur;
double  byrukr=kol/ukr;
                          //ÄîëГ*Г° ГЄ äðóãèì ГўГ*ëþòГ*Г¬
double  usdbel=kol*usd;
double  usdrus=usdbel/rus;
double  usdukr=usdbel/ukr;
double  usdeur=usdbel/eur;
                         //Åâðî ГЄ äðóãèì ГўГ*ëþòГ*Г¬
double  eurbel=kol*eur;
double  eurrus=eurbel/rus;
double  eurukr=eurbel/ukr;
double  eurusd=eurbel/usd;
                         //ÃðèâГ*Г* ГЄ äðóãèì ГўГ*ëþòГ*Г¬
double  ukrbel=kol*ukr;
double  ukrrus=ukrbel/rus;
double  ukrusd=ukrbel/usd;
double  ukreur=ukrbel/eur;
Вот и получаю не красивый заграмажденый код
Вот и спрашиваю мнения специалистов - как бы поступили они
0
SatanaXIII
Почетный модератор
Эксперт С++
5773 / 2773 / 377
Регистрация: 01.11.2011
Сообщений: 6,743
Завершенные тесты: 1
19.11.2013, 16:26 6
Ddv122, как я понял у вас есть уже часть программы, - код, реализующий подключение к какому-либо ресурсу интернета и получение оттуда курсов валют. Так же уже реализован парсер, возвращающий полученные курсы в требуемом вам виде.
Это дано, так?
Затем вы вводите в Edit число и нажимаете на отдельную кнопочку, в которой скорее всего уже и прописан вызов парсера (а может еще и подключение к ресурсу). После нажатия на кнопку в Memo выдается текст с требуемыми преобразованиями. Я верно все понял?
Если да, то воспользуйтесь советом Kulgar и замените кнопочку продублируйте функцию кнопки методом OnKeyDown с проверкой на нажатие Enter.

То есть, последовательность такова: ввели в Edit число, поправили его при необходимости, что-то еще с ним сделали, и только по нажатию Enter (или старой кнопки) произойдет его обработка.

Далее по порядку:
Цитата Сообщение от Ddv122 Посмотреть сообщение
и что бы сразу без кнопочно брало сумму с Edit
Зачем? Если отказаться от кнопки, по которой все будет считаться, то по какому событию производить вычисления?
Цитата Сообщение от Ddv122 Посмотреть сообщение
Полагаю что всё это нужно сделать в отдельном потоке
А что в потоке обсчитывать? Впринципе (и наверное лучше будет так) в поток отписать весь код, отвечающий за получение данных из интернета. Чтобы все то время, которое данные будут получаться, основное окно программы не висело.
Да хотя можно и парсер сам тоже в поток поместить.
Код
Запустить извне (кнопкой) приостановленный поток:
Внутри потока:
Код
получить данные
обработать парсером
отдать результаты главной форме
приостановить себя
Цитата Сообщение от Ddv122 Посмотреть сообщение
Может лучше сразу реализовать структуру?
Опять же для чего? Структуру можно было бы организовать только ради передачи из потока/в поток одного значения (экземпляра структуры), а не нескольких (валюта такая-то, валюта другая).

Цитата Сообщение от Ddv122 Посмотреть сообщение
Правильную конвертацию что бы было бы ему без разницы сумма с точкой или запятой и округление до 2 знаков после запятой
Ну это уж совсем. Проверяйте что там приходит - точка или запятая. )

Цитата Сообщение от Ddv122 Посмотреть сообщение
суммы очень большие
Прекрасно в long long помещается. Я бы не стал заморачиваться с длинной арифметикой. Хотя надо все же узнать по хорошему каким количеством знаков придется оперировать.


Итого:
  1. поле Edit (с проверкой на Enter) и кнопка;
  2. кнопка проверяет выходную строку Edit-а на ошибки (точка или запятая, буквы...)
  3. если все верно, то запускает ожидающий поток и передает в него выходную строку и указатель на структуру результатов
  4. поток запускает метод получения данных из интернета
  5. если успешно получились, запускает парсер и передает в него полученные данные
  6. если парсер успешно отрабатывает, заполняет структуру - по сути возвращает результат (надо подумать над синхронизацией работы со структурой)
  7. приостанавливает сам себя (естественно прям перед завершением итерации собственного бесконечного цикла)
1
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.11.2013, 16:53 7
Ddv122, если нужно мгновенно переводить и выводить в Memo содержимое Edit, то акромя OnKeyDown я не знаю, что Вам подойдёт.
Вывести конвертацию в метод формы и при каждом нажатии вызывать её, разумеется вдобавок проверять корректность введённого символа.

Добавлено через 23 минуты
SatanaXIII, я бы даже сказал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
    Memo1->Clear();
    switch(Key)  //вводим только цифры и десятичный разделитель
    {
    case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7':
    case '8': case '9': case '.': case VK_BACK: case VK_DELETE: case VK_LEFT: case VK_RIGHT:
        {
            break;
        }
    case ',': {Key='.';break;}
    default: Key=0;
    }
    Convert();
}
1
SatanaXIII
Почетный модератор
Эксперт С++
5773 / 2773 / 377
Регистрация: 01.11.2011
Сообщений: 6,743
Завершенные тесты: 1
19.11.2013, 16:59 8
Kulgar, как вариант. Только еще б всякие копирования/вставляние добавить и прочие мелочи. Я думаю Ddv122 разберется. )
1
19.11.2013, 16:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 16:59

Конвертер величини
Здравствуйте, пишу простенький конвертер величин, но вот не пойму, почему когда...

Конвертер BMP в RGB
Добрый день,помогите пожалуйста, нужно создать конвертер BMP картинки в RGB для...

Конвертер из hex в bin
Подскажите как в C++ Builder написать конвертер из hex в bin?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru