Разработка проекта «Биржа ценных бумаг» средствами Delphi 7.0
Оценка 4.7

Разработка проекта «Биржа ценных бумаг» средствами Delphi 7.0

Оценка 4.7
doc
07.05.2020
Разработка проекта «Биржа ценных бумаг» средствами Delphi 7.0
12. Разработка проекта «Биржа ценных бумаг» средствами Delphi 7.0.doc

Практическая работа № 4

 

Тема: Разработка проекта «Биржа ценных бумаг» средствами Delphi 7.0.

Объекты Таблица строк StringGrid и ее свойства. Кнопки BitBtn и SpeedButton. События и их обработка

Цель работы. Создать бизнес-игру «Биржа ценных бумаг», моделирующую ежегодное инвестирование капитала в акции трёх разных предприятий (рис. 15). На момент инвестирования известно, что на конец года рынок может находиться в одном из трех возможных с некоторой вероятностью состояний, от чего будут зависеть прибыли или убытки инвестора. В таблице 3x3 приведе­ны значения прибылей или убытков на каждый вложенный дол­лар для трёх возможных состояний рынка и трех предприятий (например, Hundai, Philips, Bosh). Конкретное состояние рынка проясняется уже после инвестиции. Нужно, учитывая все три во­зможных состояния рынка, инвестировать капитал во все три предприятия с целью добиться максимальной прибыли. Инвести­ции надо делать на протяжении нескольких лет. Если это делать удачно, можно ожидать прибыль (увеличение капитала), иначе -предприятия ждут убытки.

Научиться применять таблицу текстовых строк StringGrid, a также кнопки типа BitBtn и SpeedButton для выполнения вы­числений или стандартных действий.

Ознакомиться с понятием события в Delphi.

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

Теоретические сведения. Объект StringGrid предназначен для создания в форме двумерной таблицы символьных строк. Кроме изученных свойств, таблица символьных строк имеет еще и та­кие:

 

Свойство

Описание свойства

Примеры значений

ColCount

Количество столбцов таблицы

3; 7

RowCount

Количество строк таблицы

5; 8

FixedCols

Количество фиксированных столбцов таблицы, которые не прокручиваются слева

0; 3

FixedRows

Количество строк в шапке табли­цы, которые не прокручиваются вверх

1;2

 

Объект BitBtn - кнопка с рисунком и определенным типом действия. Стандартный набор файлов с рисунками для кнопок находится в папке С:\ Program Files\ Borland\ Delphi x.0\ Images\ Buttons. Этот объект владеет такими новыми свойствами:

Свойство

Описание свойства

Примеры значений

Glyph

Рисунок из файла на кнопке

Адрес файла задается в диалоговом окне

Kind

Тип стандартного действия

bkClose (закрывает окно), bkCancel (кнопка "Отменить" диалогового окна), bkNo (кнопка "Нет" диало­гового окна)

Объект SpeedButton применяют для создания кнопки панели инструментов. Рассмотрим такие свойства объекта:

 

Свойство

Описание свойства

Примеры значений

Margin

Расстояние в пикселях между рисунком и бли­жайшим к нему краем кнопки

-1 - рисунок с текстом центрируется, 8 - восемь пикселей между краем кнопки и рисунком

Layout

Взаимное расположение рисунка и текста на кнопке

blGlyphLeft (рисунок воз-ле левой границы, текст справа), blGlyphRight (наоборот)

Spacing

Расстояние в пикселях между рисунком и тек­стом

6 - шесть пикселей между рисунком и текстом на кнопке


Ход работы

 

1.      Загрузите среду визуального программирования Delphi.

2.      Поменяйте заголовок (Caption) формы с «Forml» на «Биржа ценных бумаг» и увеличьте размеры формы.

3.      Откажитесь от возможности менять размеры окна програм­мы, указав значение bsDialog свойства BorderStyle формы.

4.      Сохраните выполненную на данный момент форму в своей папке.

 Расположите в нижней части формы две пиктографических кнопки типа SpeedButton и командную кнопку окончания работы программы BitBtn (см. макет на рис. 14 и окно рабо­чей программы на рис. 15 (а,б)).

                                                                          Рис. 14


 

       Рис. 15(а)

 

Рис. 15(б)

 

 

 

 

 

 

 

 

 

 

 

Рис. 15(б)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для этого примените компоненты SpeedButton  и BitBtn  из закладки Additional палитры компонентов. На кнопках SpeedButton можно расположить пиктограмму из специального набора пиктограмм - графических файлов формата bmp. Кнопки типа BitBtn владеют свойством Kind (стандартное действие) с возмож­ными значениями bkClose (Закрыть), bkCancel (Отменить), bkYes (Да), bkNo (Нет), bkHelp (Помощь) и другими. На них также мо­гут быть расположены пиктограммы. Если задать стандартное действие, то данную кнопку программировать не нужно. Задайте следующие значения свойств вставленных объектов:

 

Свойство

Значение

Name

SpeedButton 1

SpeedButton2

BitBtnl

Caption

&Биржевые результаты

&Следующий год

&Выход

Glyph (файл с пиктограм­мой)

С:\ Program Files \ Borland \ Delphi x.O \ Im­ages \ Buttons \ check.bmp

С:\ Program Files \ Borland \ Delphi x.O \ Im­ages \ Buttons \ arrow3r.bmp

 

Kind

 

 

BkClose

Замечание. Символ & в заголовке кнопки указывает на то, что эту кнопку можно нажать также и с помощью «горячей» ком­бинации клавиш Alt + буква заголовка, перед которой стоит этот символ.

 

Вставьте в форму три таблицы текстовых строк StringGrid (см. рис. 14).

Воспользуйтесь    компонентой    StringGrid       на    закладке Additional. Задайте следующие значения свойств этих объектов:

Свойство

Значение

Name

StringGridl

StringGrid2

StringGridS

ColCount

(количество столбцов)

4

1

4

FixedCols

(количество фик-сированных столбцов)

1

0

1

RowCount

(количество строк)

4

4

1

FixedRows

(количество фик-сированных строк)

1

1

0

Options* goEditing

(возможность ре­дактировать)

False (отсутствует)

True (имеется)

False (отсутству­ет)

 

Замечание. Чтобы открыть список свойства Options (Пара­метры) объекта StringGrid2, надо дважды щелкнуть на этом слове в окне Object Inspector данного объекта.

7.   Разместите на форме текстовые поля так, как показано на рис. 14.

Задайте следующие значения свойств этих объектов:

Для Label5, Label6, Label8:

Caption                                : (удалите содержимое) True.

Visible                                  : True

Для Label9, Labell0, Labell:

Caption                     : ----------(несколько знаков «минус»)

Visible                        False.

Для Label 7:

(удалите содержимое)

Caption

Visible                     False.

Все другие поля - видимые, значения их свойства Caption по­казаны на рис. 15.

8.    В   окне   текста   программы  перед  разделом  implementation введите описание констант и переменных программы:

const

N=5;

{Массив прогноза прибыли}
Р :
array [0..N-1,1..3,1..3] of integer =
(((40.-40.30), (-20, 10, 10), (-10,40,-30)),           {
r=(0-l)}

((50,-70,40), (-30, 70,-30), (-50,20, 30)),       {r=(l-2)}

((30,-70,70), (-30, 70,-30), (20,10,-50)),        {r=(2-3)}

((-50,-30,70), (50.-50, 70), (30,50,-70)),        {r=(3-4)}

((30,-70,70), (-30, 70,-30), ( 40, 0,-50)));       {r=(4-5)}

{Массив вероятностей}

Prob : array [0..N-1.1..3] of integer= ((22,41,37),(27,34,39),(47,33,20),(10,53,37),(41,34,25));

 var

Forml : TForml;

{Эта запись уже есть в заготовке модуля} capital, year, profit, r : integer; {Инвестированные суммы} money : array [0..2] of integer;

9.   Запрограммируйте   кнопки   SpeedButtonl   и   SpeedButton2 следующим образом:

procedure TForml.SpeedButtonlClick(Sender: Tobject);

{Кнопка результатов года}

 var first, second, variant, i, code : integer; s : string;

begin

randomize;

{Случайный выбор возможного состояния рынка}

variant := random(100);

{Первый и второй разделители отрезка вероятностей}

first := Prob[r, 1];

second := first + Probfr, 2];

{Начальное значение прибыли перед суммированием}

profit := 0; for i := 0 to 2 do

val(StringGrid2.Cells[0,i + 1], money[i], code);

{Получаем числовые значения для инвестиций и заполняем ими массив money} {Вычисление прибыли для первого варианта}

if variant < first then begin for i := 0 to 2 do

{Суммирование по предприятиям} profit := profit + money[i] * P[r, i+1, 1];

{Подчеркивание выбранного варианта} Label9.Visible := True;

{Информационная строка} Label8.Caption := 'Возросло евро' end;

{Вычисление прибыли для второго варианта состояния рынка} if (variant >= first) and (variant < second) then begin for i := 0 to 2 do

{Суммирование по предприятиям} profit := profit + money[i] * P[r,i+1, 2];

{Подчеркивание выбранного варианта} Label 10.Visible := True; Label8.Caption := 'Выросла йена.'{Информационная строка}

{Кнопка перехода на следующий год}

procedure TForml.SpeedButton2Click(Sender: Tobject);                  

begin

year := year + 1;     {Следующий год}

capital := capital + profit; {Обновляем капитал}

{Прибыль к началу года равна нулю}

profit := 0;

{Вызываем процедуру ежегодного обновления формы}

Refresh; {Выключаем подчеркивания варианта состояния}

Label9.Visible := False;        {рынка}

Label 10.Visible := False;

Label 11.Visible := False;

{Гасим информацию о прибыли}

Label7.Visible := False;

end;

10. В окне текста программы после раздела implementation вве­дите описание метода Refresh формы.

procedure TForml.Refresh; var i, j : integer; s : string; begin

Str(capital, s);

Forml.Label6.Caption := s + ' долларов';

Str(year, s);

Forml.Label5.Caption := s + ' год';

Str(profit, s);

Forml.Label?.Caption := s + ' долларов';

Forml.LabelS.Caption := 'Введите сумму';

Forml.SpeedButton2.Enabled := False;

Forml.SpeedButtonl.Enabled := False;

randomize;

r := random(N); {Выбор инвестиционного климата r}

for i:=l to 3 do

for j := 1 to 3 do

begin

Str(P[r, j, i], s); Forml.StringGridl.Cellsfi, j] := s + '  центов';

end; for i := 1 to 3 do

begin

Str(Prob[r, i], s); Forml.StringGrid3.Cells[i, 0] := s + ' %';

Forml.StrmgGrid2.Cells[0, i] := ";

end end;

Строку procedure Refresh;

вставьте в любом месте раздела type TForml = class(TForm) ... в окне модуля.

11. Запрограммируйте процедуру создания формы FormCreate.

Для этого дважды щелкните на форме и полученную заготовку процедуры FormCreate заполните следующим образом:

procedure TForml.FormCreate(Sender: TObject);

begin

capital := 1000;

year := 2000;

profit := 0;

Refresh;

StringGridl.Cells[l, 0] := 'Возрастет евро';

StringGridl.Cells[2, 0] := 'Возрастет йена';

StringGridl.Cells[3, 0] := 'Возрастет доллар'

 

StringGridl.Cells[0, 1] := 'Hundai'; StringGridl.Cells[0, 2] := 'Philips'; StringGridl.CellsfO, 3] := 'Bosh'; StringGrid2.Cells[0, 0] := 'Инвестиции, $'; StringGridS.CellsfO, 0] := 'Вероятность'; end;

12. Сохраните выполненную на данный момент работу в своей
папке.

13. Запрограммируйте  событие ввода/редактирования текста в
таблицу
StringGrid2 так, чтобы в момент ввода денежных
сумм в первую и вторую ячейки в третьей ячейке отобра­
жался остаток капитала (поскольку каждый год инвестиру­
ют весь имеющийся капитал).

Активизируйте объект StringGrid2 и в окне Object Inspector откройте закладку Events этого объекта. Здесь следует выбрать событие, для которого вы хотите описать последовательность действий - реакцию на событие. Выберите событие OnSetEditText (ЕслиТекстРедактируется) и дважды щелкните в поле справа от неё. Откроется окно программы с заготовкой процедуры StringGrid2SetEditText. Заполните ее следующим образом:

procedure TForml .StringGrid2SetEditText(Sender:

TObject; ACol, ARow: Longint; const Value: string); var i, code : integer; s : string; begin

{Считываем числа с первой и второй ячеек таблицы инвестиций} for i := 0 to I do

val(StringGrid2.Cells[0, i + 1], moneyfi], code); {Вычисляем остаток капитала и инвестируем его в третье предприятие] money[2] := capital - money[0] - money[l]; Str(money[2], s); StringGrid2.Cells[0, 3] := s; SpeedButtonl.Enabled := True; end;

Замечание. Заготовки для событий-процедур каждого объект можно вызвать, дважды щелкая по объекту на макете формы, как это делалось для кнопок. Для большинства объектов это событие OnClick (ЕслиЩелкнуть), в том числе и для

StringGrid. Поэтому мы были вынуждены «вручную» выбрать нужный для нашего случая тип события - OnSetEditText.

14. Запустите созданную программу и исследуйте ее работу.

Введите денежные суммы инвестиций в ячейки для первого и второго предприятий и наблюдайте за изменением третьей суммы. Убедитесь в ее правильности. Щелкните на кнопке «Биржевые ре­зультаты», просмотрите результаты финансового года, щелкните на кнопке «Следующий год». Сыграйте в эту игру несколько раз и за­кончите работу программы, щелкнув на кнопке «Выход».

15. Создайте ехе-файл программы.

16. Закройте Delphi, запустите созданную программу, сыграйте
и попробуйте достичь хороших результатов.

17. Продемонстрируйте   созданную   форму   преподавателю.   За­
кончите работу.


18.

Практическая работа № 4 Тема:

Практическая работа № 4 Тема:

Объект SpeedButton применяют для создания кнопки панели инструментов

Объект SpeedButton применяют для создания кнопки панели инструментов

Рис. 15(а) Рис. 15(б)

Рис. 15(а) Рис. 15(б)

Kind (стандартное действие) с возмож­ ными значениями bkClose (Закрыть), bkCancel (Отменить), bkYes (Да), bkNo (Нет), bkHelp (Помощь) и другими

Kind (стандартное действие) с возмож­ ными значениями bkClose (Закрыть), bkCancel (Отменить), bkYes (Да), bkNo (Нет), bkHelp (Помощь) и другими

Для Label5, Label6, Label8 :

Для Label5, Label6, Label8 :

Информационная строка} Label 8

Информационная строка} Label 8

Для этого дважды щелкните на форме и полученную заготовку процедуры

Для этого дважды щелкните на форме и полученную заготовку процедуры

Закройте Delphi , запустите созданную программу, сыграйте и попробуйте достичь хороших результатов

Закройте Delphi , запустите созданную программу, сыграйте и попробуйте достичь хороших результатов
Скачать файл