С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
20 / 20 / 0
Регистрация: 23.11.2010
Сообщений: 117
1

Курсы валют на Delphi

20.04.2011, 11:26. Показов 8238. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Не сочтите за наглость, а сочтите за безнадежность. Помогите решить задачу по Delphi:

Надо написать программу: Фондовая биржа. Курсы валют.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2011, 11:26
Ответы с готовыми решениями:

Конвертер валют на Delphi 7. Плохо работает, выдаёт ошибки
Вот написал конвертер валют: но! Работает плохо. Выдает ошибку. Вот в этой строке которую обвел...

Пользователь должен ввести в первое окно значение курса валют Delphi 7
Пользователь должен ввести в первое окно значение курса валют, во второе имеющуюся сумму. При...

Программа погоды и курса валют Android в Delphi
Может кто-нибудь помочь с написание программы для андроида погоды и курса валют??? пока не все...

Курсы валют
Локальные*минимумы*курсов*валюты* Создать*класс*A.*В*нем*два*статических*метода*...

5
20 / 20 / 0
Регистрация: 23.11.2010
Сообщений: 117
22.05.2011, 09:56  [ТС] 2
Есть сайт с XML файлом, а точнее с курсом валют, вот
можно ли вытащить оттуда данные и прицепить к ниже указанному коду.
Сам код оказался не полным, есть только главная часть, кто может допишите или доделайте или посоветуйте что кинуть на форму, как связать и т.д. Заранее огромное спасибо.

Delphi
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
procedure TDataModule1.DataModuleCreate(Sender: TObject);
var
  URL: WideString;
  ConnStr: WideString;
  PathToCopy: WideString;
  CalendarID: Integer;
  DateCourse: TDateTime;
  sDateCourse, sTrueDate, DateStr: string;
  ExistsDate: Integer;
  LCID: Cardinal;
  FS: TFormatSettings;
//  coDoc: CoDOMDocument; // объявление сокласса объекта DOMDocument;
  xmlDoc: IXMLDOMDocument; // класс, согласованный с интерфейсом  IDOMDocument;
  xmlNodeList: IXMLDOMNodeList;
  xmlNode, xmlNodeAttr: IXMLDOMNode;
  iIndex: Integer;
begin
  WriteLog('Начало.');
  if WaitForSingleObject(hMutex, 0)<>0 then
    WriteLog('Запуск второй копии прерван.')
  else begin
    xmlDoc := CoDOMDocument.Create; // создание экземпляра объекта DOMDocument;
    xmlDoc.async := False; // выключаем режим асинхронности
  // Задаем локальный формат даты
    LCID := GetSystemDefaultLCID;
    GetLocaleFormatSettings(LCID, FS);
    FS.DateSeparator := '/';
    FS.ShortDateFormat := 'dd/MM/yyyy';
  // Если задан параметр, то он представляет дату курса,
  // иначе датой курса будет завтрашний день
    if ParamCount = 1 then
      DateCourse := StrToDate(ParamStr(1))
    else
      DateCourse := Date + 1;
    sDateCourse := DateToStr(DateCourse, FS);
    DateStr := Trim(IntToStr(YearOf(DateCourse)));
    if MonthOf(DateCourse) < 10 then
      DateStr := DateStr + '0';
    DateStr := DateStr + Trim(IntToStr(MonthOf(DateCourse)));
    if DayOf(DateCourse) < 10 then
      DateStr := DateStr + '0';
    DateStr := DateStr + Trim(IntToStr(DayOf(DateCourse)));
  // Читаем инишный файл
    WriteLog('Чтение ini-файла.');
    with TIniFile.Create('CourseCB2DBF.ini') do begin
  // URL получения XML-файла с курсами за заданную дату
      URL := ReadString('Options', 'URL',
       'http://www.cbr.ru/scripts/XML_daily.asp?date_req=');
      ConnStr := ReadString('Options', 'ConnStr',
       'Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=WORKDB;Data Source=URAN');
      PathToCopy := ReadString('Options', 'PathToCopy',
       'I:\LOAD\course\');
      CalendarID := ReadInteger('Options', 'CalendarID', 2);
      Free;
    end;
    WriteLog('Проверка существования курсов на заданную дату (' + sDateCourse + ').');
    qExistsDate.ConnectionString := ConnStr;
    qExistsDate.Parameters.ParamByName('Date_Time').Value := DateCourse;
    qExistsDate.Open;
    ExistsDate := qExistsDate.FieldByName('ExistsDate').AsInteger;
    if ExistsDate = 1 then
      WriteLog('Курсы на заданную дату уже существуют.')
    else begin
      WriteLog('Расчет истинной даты курсов.');
      qTrueDate.ConnectionString := ConnStr;
      qTrueDate.Parameters.ParamByName('CalendarID').Value := CalendarID;
      qTrueDate.Parameters.ParamByName('DateStr').Value := DateStr;
      qTrueDate.Open;
      sTrueDate := qTrueDate.FieldByName('TrueDate').AsString;
      sTrueDate := Copy(sTrueDate, 7, 2) +
             '/' + Copy(sTrueDate, 5, 2) +
             '/' + Copy(sTrueDate, 1, 4);
      WriteLog('Истинная дата курсов ' + sDateCourse);
      WriteLog('Загрузка курсов с сайта ЦБ.');
      xmlDoc.load(URL + DateToStr(DateCourse, FS)); // вызов метода Load экземпляра объекта DOMDocument;
      xmlNodeList := xmlDoc.selectNodes('ValCurs'); // список узлов XML документа с названием "ValCurs". В нашем случае он один.
      xmlNode := xmlNodeList.item[0].cloneNode(True); // Берем первый из списка
      xmlNodeAttr := xmlNode.attributes.item[0]; // ищем атрибут с датой документа (будет найден последний документ от заданной даты)
      if Trim(xmlNodeAttr.text) = sTrueDate then begin
        xmlNodeList := xmlDoc.selectNodes('*/Valute'); // коллекция узлов XML документа с названием "Valute"
        sDateCourse := DateToStr(DateCourse);
        sDateCourse := Copy(sDateCourse, 1, 6) + Copy(sDateCourse, 9, 2);
        WriteLog('Создание копии dbf-файла.');
        CopyFile('sample.dbf', 'curcours.dbf', False);
        WriteLog('Копирование курсов в dbf-файл.');
        DBF1.Open;
        for iIndex := 0 to (xmlNodeList.length - 1) do begin // Цикл по всем элементам списка узлов
  // получаем копию узла с индексом iIndex из коллекции узлов со всеми дочерними узлами
  // по всем дочерним узлам выбранного узла собираем значения
  // xmlNode.childNodes.item(0).text - NumCode
  // xmlNode.childNodes.item(1).text - CharCode
  // xmlNode.childNodes.item(2).text - Nominal
  // xmlNode.childNodes.item(3).text - Name
  // xmlNode.childNodes.item(4).text - Value
          xmlNode := xmlNodeList.item[iIndex].cloneNode(True);
  // Запись курсов валют.
          with DBF1 do begin
            Append;
            SetFieldData(1, xmlNode.childNodes.item[0].text);
            SetFieldData(2, xmlNode.childNodes.item[1].text);
            SetFieldData(3, sDateCourse);
            SetFieldData(4, xmlNode.childNodes.item[2].text);
            SetFieldData(5, StringReplace(xmlNode.childNodes.item[4].text, ',', '.', []));
            SetFieldData(6, WideString2Ansi(xmlNode.childNodes.item[3].text));
            if xmlNode.childNodes.item[0].text = '978' then
              SetFieldData(7, '1')
            else
              SetFieldData(7, '0');
            Post;
          end;
        end;
        DBF1.Close;
        WriteLog('Перенос dbf-файла в каталог для загрузки сервером сообщений.');
        CopyFile('curcours.dbf', PAnsiChar(WideString2Ansi(PathToCopy) + 'curcours.dbf'), False);
      end else
        WriteLog('Курсы на сайте еще не установлены.'+xmlNodeAttr.text);
    end;
  end;
  WriteLog('Окончание.');
end;
Люди готов выслушать любую критику и готов принят любую помощь. Если есть варианты решение данной программы пишите.
0
20 / 20 / 0
Регистрация: 23.11.2010
Сообщений: 117
01.06.2011, 10:32  [ТС] 3
А если подойти к моему вопросу с правого фланга. Например есть XML файл с данными о курсе валют(файл прикреплен сверху), а как теперь сделать так, чтобы данные из XML таблицы отображались в моей проге(что то вроде таблицы).
0
103 / 92 / 20
Регистрация: 24.01.2009
Сообщений: 519
01.06.2011, 16:01 4
Вот куски кода из моей программы:
Delphi
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
61
62
63
64
65
66
67
68
69
70
71
72
73
...
CurrencyBox: TsComboBox;
CurrencyLabel: TLabel;
...
type TCurrencyData = record
    CharCode, Name: ShortString;
    Nominal: Integer;
    Value: Real;
  end;
 
...
var CBR: array of TCurrencyData;
 
function TMainForm.GetCurrencyList(FileName, DefaultCurrency: string): TDateTime;
var
  XMLDocument: TXMLDocument;
  BufXMLNodeList: IXMLNodeList;
  i, k: integer;
begin
  try
    XMLDocument := TXMLDocument.Create(MainForm);
    XMLDocument.Active := True;
    XMLDocument.LoadFromFile(FileName);
    CurrencyBox.Clear;
    if XMLDocument.ChildNodes[1].HasChildNodes then
      BufXMLNodeList := XMLDocument.ChildNodes[1].ChildNodes;
    Result := StrToDate(XMLDocument.ChildNodes[1].Attributes['Date']);
    SetLength(CBR, 1);
    CBR[Length(CBR) - 1].CharCode := 'RUB';
    CBR[Length(CBR) - 1].Nominal := 1;
    CBR[Length(CBR) - 1].Name := 'Российские рубли';
    CBR[Length(CBR) - 1].Value := 1;
    CurrencyBox.Items.Add(FloatToStr(CBR[Length(CBR) - 1].Value) + ' ' + CBR[Length(CBR) - 1].CharCode + ' = ' + IntToStr(CBR[Length(CBR) - 1].Nominal) + ' RUB');
    if CurrencyBox.Text = '' then
      if Pos(DefaultCurrency, CurrencyBox.Items[Length(CBR) - 1]) > 0 then
      begin
        CurrencyBox.ItemIndex := Length(CBR) - 1;
        CurrencyLabel.Caption := 'Валюта: ' + CBR[Length(CBR) - 1].Name;
      end;
 
    for i := 0 to BufXMLNodeList.Count - 1 do
      if BufXMLNodeList[i].HasChildNodes then
      begin
        SetLength(CBR, Length(CBR) + 1);
        for k := 0 to BufXMLNodeList[i].ChildNodes.Count - 1 do
        begin
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'CharCode' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].CharCode := BufXMLNodeList[i].ChildNodes[k].NodeValue;
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'Nominal' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].Nominal := StrToInt(BufXMLNodeList[i].ChildNodes[k].NodeValue);
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'Name' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].Name := BufXMLNodeList[i].ChildNodes[k].NodeValue;
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'Value' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].Value := StrToFloat(BufXMLNodeList[i].ChildNodes[k].NodeValue);
        end;
        CurrencyBox.Items.Add(FloatToStr(CBR[Length(CBR) - 1].Value) + ' ' + CBR[Length(CBR) - 1].CharCode + ' = ' + IntToStr(CBR[Length(CBR) - 1].Nominal) + ' RUB');
        if CurrencyBox.Text = '' then
          if Pos(DefaultCurrency, CurrencyBox.Items[Length(CBR) - 1]) > 0 then
          begin
            CurrencyBox.ItemIndex := Length(CBR) - 1;
            CurrencyLabel.Caption := 'Валюта: ' + CBR[Length(CBR) - 1].Name;
          end;
      end;
  finally
    XMLDocument.SaveToFile('cbr.xml');
    XMLDocument.Active := False;
    XMLDocument.Free;
  end;
end;
Выводит курсы валют в ComboBox и текущую выбранную валюту в Label.

Добавлено через 2 минуты
Можно оптимизировать.
0
20 / 20 / 0
Регистрация: 23.11.2010
Сообщений: 117
01.06.2011, 16:19  [ТС] 5
Что то у меня не работает программа или я что то не так делаю
Delphi
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type TCurrencyData = record
     ComboBox1: TComboBox;
     Label1: TLabel;
     CharCode, Name: ShortString;
     Nominal: Integer;
     Value: Real;
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
var CBR: array of TCurrencyData;
 
function TMainForm.GetCurrencyList(FileName, DefaultCurrency: string): TDateTime;
var
  XMLDocument: TXMLDocument;
  BufXMLNodeList: IXMLNodeList;
  i, k: integer;
begin
  try
    XMLDocument := TXMLDocument.Create(MainForm);
    XMLDocument.Active := True;
    XMLDocument.LoadFromFile(FileName);
    CurrencyBox.Clear;
    if XMLDocument.ChildNodes[1].HasChildNodes then
      BufXMLNodeList := XMLDocument.ChildNodes[1].ChildNodes;
    Result := StrToDate(XMLDocument.ChildNodes[1].Attributes['Date']);
    SetLength(CBR, 1);
    CBR[Length(CBR) - 1].CharCode := 'RUB';
    CBR[Length(CBR) - 1].Nominal := 1;
    CBR[Length(CBR) - 1].Name := 'Ðîññèéñêèå ðóáëè';
    CBR[Length(CBR) - 1].Value := 1;
    CurrencyBox.Items.Add(FloatToStr(CBR[Length(CBR) - 1].Value) + ' ' + CBR[Length(CBR) - 1].CharCode + ' = ' + IntToStr(CBR[Length(CBR) - 1].Nominal) + ' RUB');
    if CurrencyBox.Text = '' then
      if Pos(DefaultCurrency, CurrencyBox.Items[Length(CBR) - 1]) > 0 then
      begin
        CurrencyBox.ItemIndex := Length(CBR) - 1;
        CurrencyLabel.Caption := 'Âàëþòà: ' + CBR[Length(CBR) - 1].Name;
      end;
 
    for i := 0 to BufXMLNodeList.Count - 1 do
      if BufXMLNodeList[i].HasChildNodes then
      begin
        SetLength(CBR, Length(CBR) + 1);
        for k := 0 to BufXMLNodeList[i].ChildNodes.Count - 1 do
        begin
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'CharCode' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].CharCode := BufXMLNodeList[i].ChildNodes[k].NodeValue;
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'Nominal' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].Nominal := StrToInt(BufXMLNodeList[i].ChildNodes[k].NodeValue);
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'Name' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].Name := BufXMLNodeList[i].ChildNodes[k].NodeValue;
          if BufXMLNodeList[i].ChildNodes[k].NodeName = 'Value' then
            if BufXMLNodeList[i].ChildNodes[k].NodeValue <> Null then
              CBR[Length(CBR) - 1].Value := StrToFloat(BufXMLNodeList[i].ChildNodes[k].NodeValue);
        end;
        CurrencyBox.Items.Add(FloatToStr(CBR[Length(CBR) - 1].Value) + ' ' + CBR[Length(CBR) - 1].CharCode + ' = ' + IntToStr(CBR[Length(CBR) - 1].Nominal) + ' RUB');
        if CurrencyBox.Text = '' then
          if Pos(DefaultCurrency, CurrencyBox.Items[Length(CBR) - 1]) > 0 then
          begin
            CurrencyBox.ItemIndex := Length(CBR) - 1;
            CurrencyLabel.Caption := 'Âàëþòà: ' + CBR[Length(CBR) - 1].Name;
          end;
      end;
  finally
    XMLDocument.SaveToFile('cbr.xml');
    XMLDocument.Active := False;
    XMLDocument.Free;
  end;
end;
end.
123.rar
0
103 / 92 / 20
Регистрация: 24.01.2009
Сообщений: 519
01.06.2011, 17:25 6
Конечно не так. См. атач
Вложения
Тип файла: rar Курс Валют.rar (226.1 Кб, 761 просмотров)
2
01.06.2011, 17:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2011, 17:25
Помогаю со студенческими работами здесь

Курсы валют
Добрый день Подскажите пожалуйста как реализовать данную задачу: нужно с сайта Национального...

Курсы валют
Здравствуйте. Есть таблица с курсами валют по отношению к основной валюте Гривня: USD 23 EUR 26...

Вытянуть курсы валют
Есть вот такой скрипт, который вытягивает курсы с сайта Центрального Банка России. Ка его можно...

Курсы валют на Prolog
Здравствуйте! Не сочтите за наглость, а сочтите за безнадежность (скоро экзамен, разобраться во...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru