Практическая работа № 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 \ Images \ Buttons \ check.bmp |
С:\ Program Files \ Borland \ Delphi x.O \ Images \ 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.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.