Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Создаем биржевого робота уроки, статьи, идеи arrow Биржевой робот на Delphi. Урок 15. Продолжаем писать биржевой симулятор (TMainMenu, TEdit).
31.05.2020 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
Биржевой робот на Delphi. Урок 15. Продолжаем писать биржевой симулятор (TMainMenu, TEdit). Печать E-mail
Автор megabax   
04.03.2010 г.
New Page 1

Продолжаем писать биржевой симулятор (TMainMenu, TEdit).

Все статьи по данной теме.

Исходники к уроку можно скачать здесь.

Сегодня мы начнем писать симулятор биржевого счета. Для начала создадим заготовку класса (потом будем наращивать функционал):

//класс симулции состояния биржевого счета
TESBAccount=class(TESBBaseClass)
protected
     FCash:double;
     FExceptionCash:boolean;
public
     property Cash:double read FCash; //состояние счета можно изменить только методами
     property ExceptionCash:boolean read FExceptionCash write FExceptionCash;
     constructor Create;
     procedure Replenish(ACash:double); //пополнить
     procedure Withdraw(ACash:double); //снять
     procedure Serialize(AStream:TStream); override;
     procedure Unserialize(AStream:TStream); override;
end;

Как видим, наша первая версия класса эмулятора счета сможет только эмулировать операцию пополнения и снятия счета. Так же мы предусмотрим функции сохранения и загрузки эмулятора из файла. И так, с первоначальным функционалом определились, теперь будем его реализовывать:

constructor TESBAccount.Create;
begin
    inherited Create;
    FCash:=0;
    FExceptionCash:=true;
end;

procedure TESBAccount.Replenish(ACash:double);
begin
     FCash:=FCash+ACash;
end;

procedure TESBAccount.Withdraw(ACash:double);
begin
   if FCash<ACash then
   begin
       if FExceptionCash then raise Exception.Create(ClassName+': TESBAccount.Withdraw - недостаточно средств для вывода')
      else FCash:=0;
      end else FCash:=FCash-ACash;
end;

procedure TESBAccount.Serialize(AStream:TStream);
begin
    inherited Serialize(AStream);
    AStream.Write(FCash,sizeof(FCash));
    AStream.Write(FExceptionCash,sizeof(FExceptionCash));
end;

procedure TESBAccount.Unserialize(AStream:TStream);
begin
    inherited Unserialize(AStream);
    AStream.Read(FCash,sizeof(FCash));
    AStream.Read(FExceptionCash,sizeof(FExceptionCash));
end;

Теперь давайте протестируем наш класс. Создаем пустой проект, подключаем к нему модуль с нашей библиотекой, это можно сделать через опцию "Project" -> "Add to project"*:

Продолжаем писать биржевой симулятор (TMainMenu, TEdit).

Думаю, не лишним будет напомнить, что библиотека должна быть оформлена по всем правилам Delphi, а именно, начинаться со слова unit, в разделе interface нужно подключить все модулю и объявить типы, в данном случае TESBBaseClass и TESBAccount*:

Продолжаем писать биржевой симулятор

Соответственно, методы классов, а так же глобальные процедуры и функции мы уже реализуем в разделе implementation*:

Биржевой робот

Если по какой то причине вы затрудняетесь скомпоновать реализованные на этом и прошлом уроке   классы то найти уже готовый модуль можете в исходниках к уроку, которые можно скачать здесь.

И так, мы подключили модуль. Теперь добавим к форме проекта меню (TMainMenu), оно находиться на закладке Standard*:

TMainMenu, TEdit

В меню добавим два пункта "сохранить" и "открыть"*

TMainMenu, TEdit

обзовем их itSave и itOpen соответственно*:

TMainMenu, TEdit

еще нам потребуется добавить к форме компонент TMemo, он находиться так же на закладке Standard*:

TMainMenu, TEdit

Обзовем мы этот компонент mmAccount.

Так же добавим поле ввода (TEdit) - edSumma и две кнопочки (TButton) - btnAdd и btnWithdraw - соответственно.

Кроме того, добавим флажок (TcheckBox) - cbExceptionCash. Все эти компоненты у нас тоже на закладке Standard.

Осталось с закладки dialogs добавить диалог сохранения в файл (TSaveDialog) и открытия файла (TOpenDialog)*:

TMainMenu, TEdit, биржевой симулятор

Вот так примерно у нас должна выглядеть форма проекта*:

TMainMenu, TEdit, биржевой симулятор

Теперь начнем реализацию тестировочной программы. Сначала добавим в класс TfrmStockBot (главная форма проекта) приватное поле и метод (добавленное выделено красным):

TfrmStockBot = class(TForm)
   MainMenu: TMainMenu;
   itFile: TMenuItem;
   itSave: TMenuItem;
   itOpen: TMenuItem;
   mmAccount: TMemo;
   edSumma: TEdit;
   btnAdd: TButton;
   btnWithdraw: TButton;
   SaveDialog: TSaveDialog;
   OpenDialog: TOpenDialog;
   cbExceptionCash: TCheckBox;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure btnAddClick(Sender: TObject);
   procedure btnWithdrawClick(Sender: TObject);
   procedure itSaveClick(Sender: TObject);
   procedure itOpenClick(Sender: TObject);
   procedure cbExceptionCashClick(Sender: TObject);
private
   { Private declarations }
   Account:TESBAccount;
   procedure ShowAccountCash;
public
   { Public declarations }
end;

Теперь реализуем обработчики событий (нажатие на кнопки, выбор пунктов меню и изменнеи флажка, а так же создание и уничтожение формы) и добавленный метод:

procedure TfrmStockBot.FormCreate(Sender: TObject);
begin
   Account:=TESBAccount.Create;
   cbExceptionCash.Checked:=Account.ExceptionCash;
end;

procedure TfrmStockBot.FormDestroy(Sender: TObject);
begin
   FreeAndNil(Account);
end;

procedure TfrmStockBot.ShowAccountCash;
begin
   mmAccount.Lines.Add(FloatToStr(Account.Cash));
end;

procedure TfrmStockBot.btnAddClick(Sender: TObject);
begin
   Account.Replenish(StrToFloat(edSumma.Text));
   ShowAccountCash;
end;

procedure TfrmStockBot.btnWithdrawClick(Sender: TObject);
begin
   Account.Withdraw(StrToFloat(edSumma.Text));
   ShowAccountCash;
end;

procedure TfrmStockBot.itSaveClick(Sender: TObject);
var Stream:TFileStream;
begin
   if SaveDialog.Execute then
   begin
     Stream:=TFileStream.Create(SaveDialog.FileName,fmCreate);
     Account.Serialize(Stream);
     FreeAndNil(Stream);
   end;
end;

procedure TfrmStockBot.itOpenClick(Sender: TObject);
var Stream:TFileStream;
begin
   if OpenDialog.Execute then
   begin
      Stream:=TFileStream.Create(OpenDialog.FileName,fmOpenRead);
      FreeAndNil(Account);
      Account:=TESBAccount.Create;
      Account.Unserialize(Stream);
      FreeAndNil(Stream);
      mmAccount.Lines.Clear;
      ShowAccountCash;
   end;
end;

procedure TfrmStockBot.cbExceptionCashClick(Sender: TObject);
begin
   Account.ExceptionCash:=cbExceptionCash.Checked;
end;

Ах да,  и не забудьте в разделе uses подключить модуль, где у нас объявлен класс симулятора счета*:

 http://easyprog.ru/index.php?option=com_content&task=view&id=235&Itemid=29

Теперь запустим нашу программу, и убедимся, что методы класса эмулятора счета отрабатывают правильно (Replenish - увеличивает состояние счета,  Withdraw уменьшает, при нехватке средств выскакивает сообщение об ошибке, если установлена соответствующая опция)

TMainMenu, TEdit, биржевой симулятор, робот

Исходники к уроку можно скачать здесь.


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями   программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation".

 

Последнее обновление ( 17.07.2013 г. )
 
« След.   Пред. »
 
© 2020 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги