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

  • doc
  • 07.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 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.