Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабник по СПО

.pdf
Скачиваний:
9
Добавлен:
05.06.2015
Размер:
1.59 Mб
Скачать

If ButAdd.Down = True

Then

If ButSum.Down = True

Then

If ButReplc.Down = False Then Res:=Res+Nm1 Else Res:=Res+Nm2

Else Res:=Nm1+Nm2; ResLb.Caption:=FloatToStrF(Res,ffGeneral,4,1)

End;

Для того чтобы информировать пользователя о выбранных действиях, необходимо вывести соответствующую информацию на метку. Сообщение о действиях записываем в обработчики событий OnClick каждой кнопки, задающей действия. Процедура обработчика нажатия кнопки Сложение приведена в распечатке 3.2.

Распечатка 3.2

Procedure TfmCalc.ButAddClick(Sender: TObject);

Begin

Label1.Caption:='';

If ButAdd.Down = True Then If ButSum.Down = True

Then

If ButReplc.Down = False

Then LabRes.Caption:=' Результат Res = Res + Nm1' Else LabRes.Caption:='Результат Res = Res + Nm2' Else LabRes.Caption:='Результат Res = Nm1 + Nm2'; ResLb.Font.Color := clGray

End;

Нажатие кнопки Сложение изменяет вид действия, но само действие происходит только после нажатия кнопки Расчёт. При нажатии кнопок ButReplc и ButSum также должна изменяться информация о выбранном действии, поэтому в обработчики события OnClick этих кнопок тоже записываем процедуру ButAddClick.

Procedure TfmCalc.ButReplcClick(Sender: TObject); Begin ButAddClick(Sender) End;

Procedure TfmCalc.ButSumClick(Sender: TObject); Begin ButAddClick(Sender) End;

81

PDF created with pdfFactory Pro trial version www.pdffactory.com

Создаём процедуры ButMultClick, ButSubClick и ButDivClick для операций умножения, вычитания и деления.

Procedure TfmCalc.ButDivClick(Sender: TObject);

Begin

If ButDiv.Down=True Then

If ButReplc.Down=True Then If ButSum.Down=True

Then LabRes.Caption:='Результат Res = Res / Nm1'

Else LabRes.Caption:='Результат Res = Nm2 / Nm1' Else If ButSum.Down=False

Then LabRes.Caption:='Результат Res = Nm1 / Nm2'

Else LabRes.Caption:='Результат Res = Res / Nm2'; ResLb.Font.Color := clRed

End;

Вводим ссылки на процедуры умножения, вычитания и деления в процедуры ButSumClick

и ButReplcClick.

Procedure TfmCalc.ButReplcClick(Sender: TObject);

Begin

LabErr.Caption:='';

ButAddClick(Sender);

ButSubClick(Sender);

ButMultClick(Sender);

ButDivClick(Sender)

End;

Procedure TfmCalc.ButSumClick(Sender: TObject);

Begin

ButAddClick(Sender);

ButSubClick(Sender);

ButMultClick(Sender);

ButDivClick(Sender)

End;

В процедуру BitBtCalcClick добавляем операции умножения, вычитания и деления, написанные в соответствии со схемами, приведёнными на рис.3.6 - 3.8. Создаём операторы для формирования строки результата ResStr, записываемой в отчёт (распечатка

3.3).

82

PDF created with pdfFactory Pro trial version www.pdffactory.com

Распечатка 3.3

Procedure TfmCalc.BitBtCalcClick(Sender: TObject);

Begin

ResLb.Font.Color := clBlack;

ResStr:=' '+FloatToStrF(Res,ffGeneral,4,1); If ButAdd.Down = True Then

If ButSum.Down = True

Then If ButReplc.Down = False

Then Begin

Res:=Res+Nm1; ResStr:=ResStr+' + '+

FloatToStrF(Nm1,ffGeneral,4,1)+'='+

FloatToStrF(Res,ffGeneral,4,1)

End

Else Begin

Res:=Res+Nm2; ResStr:=ResStr+' + '+

FloatToStrF(Nm2,ffGeneral,4,1)+'='+

FloatToStrF(Res,ffGeneral,4,1)

End Else Begin

Res:=Nm1+Nm2; ResStr:=' '+

FloatToStrF(Nm1,ffGeneral,4,1)+' + '+

FloatToStrF(Nm2,ffGeneral,4,1)+'='+

FloatToStrF(Res,ffGeneral,4,1)

End;

If ButMult.Down = True Then If ButSum.Down = True

Then If ButReplc.Down = False

Then Begin

Res:=Res*Nm1; ResStr:=ResStr+' * '+

FloatToStrF(Nm1,ffGeneral,4,1)+'='+

FloatToStrF(Res,ffGeneral,4,1)

83

PDF created with pdfFactory Pro trial version www.pdffactory.com

End

Else Begin

Res:=Res*Nm2;

ResStr:=ResStr+' * '+FloatToStrF(Nm2,ffGeneral,4,1) +'='+FloatToStrF(Res,ffGeneral,4,1)

End Else Begin

Res:=Nm1*Nm2; ResStr:=' '+

FloatToStrF(Nm1,ffGeneral,4,1)+' * '+

FloatToStrF(Nm2,ffGeneral,4,1)+'='+

FloatToStrF(Res,ffGeneral,4,1)

End;

If ButSub.Down = True Then If ButSum.Down = True

Then If ButReplc.Down = False

Then Begin

Res:=Res-Nm1; ResStr:=ResStr+' - '+FloatToStrF

(Nm1,ffGeneral,4,1)+' = '+ FloatToStrF(Res,ffGeneral,4,1)

End

Else Begin

Res:=Res-Nm2; ResStr:=ResStr+' - '+

FloatToStrF(Nm2,ffGeneral,4,1)+'='+

FloatToStrF(Res,ffGeneral,4,1)

End

Else If ButReplc.Down = False

Then Begin

Res:=Nm1-Nm2; ResStr:=' '+

FloatToStrF(Nm1,ffGeneral,4,1)+' - '+

FloatToStrF(Nm2,ffGeneral,4,1)+' = '+ FloatToStrF(Res,ffGeneral,4,1)

84

PDF created with pdfFactory Pro trial version www.pdffactory.com

End

Else Begin

Res:=Nm2-Nm1; ResStr:=' '+

FloatToStrF(Nm2,ffGeneral,4,1)+' - '+

FloatToStrF(Nm1,ffGeneral,4,1)+' = '+ FloatToStrF(Res,ffGeneral,4,1)

End;

If ButDiv.Down=True Then

If ButReplc.Down=True

Then If Nm1=0 Then LabErr.Caption:='Ошибка ввода' Else If ButSum.Down=True

Then Begin

Res:=Res/Nm1; ResStr:=ResStr+' / '+

FloatToStrF(Nm1,ffGeneral,4,1)+' = '+ FloatToStrF(Res,ffGeneral,4,1)

End

Else Begin

Res:=Nm2/Nm1; ResStr:=' '+

FloatToStrF(Nm2,ffGeneral,4,1)+' / '+

FloatToStrF(Nm1,ffGeneral,4,1)+' = '+ FloatToStrF(Res,ffGeneral,4,1)

End

Else If Nm2=0 Then LabErr.Caption:='Ошибка ввода' Else If ButSum.Down=False

Then Begin

Res:=Nm1/Nm2; ResStr:=' '+

FloatToStrF(Nm1,ffGeneral,4,1)+' / '+

FloatToStrF(Nm2,ffGeneral,4,1)+' = '+ FloatToStrF(Res,ffGeneral,4,1)

End

Else Begin

85

PDF created with pdfFactory Pro trial version www.pdffactory.com

Res:=Res/Nm2; ResStr:=ResStr+' / '+

FloatToStrF(Nm1,ffGeneral,4,1)+' = '+ FloatToStrF(Res,ffGeneral,4,1)

End; ResLb.Caption:=FloatToStrF(Res,ffGeneral,4,1)

End;

После написания этого текста программа должна выполнять все действия с управлением через пиктографическое меню. Для того чтобы управлять через главное меню, в пункты главного меню вносим операторы, изменяющие состояния кнопок, и

вводим ссылки на обработчики событий кнопок пиктографического меню (распечатка 3.4).

Распечатка 3.4

Procedure TfmCalc.ActAddClick(Sender: TObject);

Begin {Пункт меню Сложение} ButAdd.Down:=True; ButAddClick(Sender)

End;

Procedure TfmCalc.ActSubClick(Sender: TObject);

Begin {Пункт меню Вычитание} ButSub.Down:=True; ButSubClick(Sender)

End;

Procedure TfmCalc.ActSub1Click(Sender: TObject);

Begin {Пункт меню Вычитание Nm1–Nm2} ButSub.Down:=True; ButReplc.Down:=False; ButSubClick(Sender)

End;

Procedure TfmCalc.ActSub2Click(Sender: TObject);

Begin {Пункт меню Вычитание Nm2–Nm1}

ButSub.Down:=True;

ButReplc.Down:=True;

ButSubClick(Sender)

86

PDF created with pdfFactory Pro trial version www.pdffactory.com

End;

Procedure TfmCalc.ActDivClick(Sender: TObject);

Begin {Пункт меню Деление}

ButDiv.Down:=True;

ButDivClick(Sender)

End;

Procedure TfmCalc.DivNm1Click(Sender: TObject);

Begin {Пункт меню Деление Nm1/Nm2}

ButDiv.Down:=True;

ButReplc.Down:=False;

ButDivClick(Sender)

End;

Procedure TfmCalc.DivNm2Click(Sender: TObject);

Begin {Пункт меню Деление Nm2/Nm1}

ButDiv.Down:=True;

ButReplc.Down:=True;

ButDivClick(Sender)

End;

Procedure TfmCalc.Reg1Click(Sender: TObject);

Begin {Пункт меню Одинарное действие}

ButSum.Down:=False;

ButAddClick(Sender);

ButSubClick(Sender);

ButMultClick(Sender);

ButDivClick(Sender)

End;

Procedure TfmCalc.RegAddClick(Sender: TObject);

Begin {Пункт меню Дополняющие действия}

ButSum.Down:=True;

ButAddClick(Sender);

ButSubClick(Sender);

ButMultClick(Sender);

ButDivClick(Sender)

End;

87

PDF created with pdfFactory Pro trial version www.pdffactory.com

В подпункты пункта Результаты главного меню вносим команды по обработке результатов (распечатка 3.5).

Распечатка 3.5

Procedure TfmCalc.CalcResClick(Sender: TObject);

Begin {Подпункт Расчёт } BitBtCalcClick(Sender)

End;

Procedure TfmCalc.WrResClick(Sender: TObject);

Begin {Подпункт меню Записать} fmOut.OutMem.Lines.Add(ResStr); fmOut.Show

End;

Procedure TfmCalc.OpResClick(Sender: TObject);

Begin fmOut.Show End; {Подпункт меню Открыть} Procedure TfmCalc.SavResClick(Sender: TObject);

Begin {Подпункт меню Сохранить} fmOut.OutMem.Lines.SaveToFile(FlNameEd.Text);

End;

Создаём процедуру OnClick кнопки ButtWrite для записи результатов расчёта.

Procedure TfmCalc.ButtWriteClick(Sender: TObject); Begin WrResClick(Sender) End;

Всобытие OnClick кнопки ButtOpen вводим команду на открытие второй формы.

Procedure TfmCalc.ButtOpenClick(Sender: TObject);

Begin fmOut.Show

End;

Вобработчиках событий контекстного меню второй формы делаем ссылки на обработчики событий главного меню.

Procedure TfmOut.CalcResPopClick(Sender: TObject);

Begin {Пункт Расчёт } fmCalc.BitBtCalcClick(Sender)

End;

Procedure TfmOut.ResOutClrClick(Sender: TObject);

Begin {Пункт Удалить результаты } OutMem.Clear;

88

PDF created with pdfFactory Pro trial version www.pdffactory.com

OutMem.Lines.Add(' Результаты расчёта')

End;

Procedure TfmOut.WrResPopClick(Sender: TObject);

Begin {Пункт меню Записать} fmCalc.WrResClick(Sender)

End;

Procedure TfmOut.SavPopClick(Sender: TObject);

Begin {Пункт меню Сохранить} fmCalc.SavResClick(Sender)

End;

Пункт Выход контекстного меню второй формы должен закрывать программу, а не только вторую форму. Для закрытия программы в обработчик события OnClick пункта меню Выход вводим оператор, закрывающий программу.

Procedure TfmOut.ClsOutClick(Sender: TObject);

Begin

Application.Terminate

End;

Можно закрыть программу оператором, закрывающим главную форму.

Procedure TfmOut.ClsOutClick(Sender: TObject); Begin fmCalc.Close End;

В обработчиках событий контекстного меню главной формы делаем ссылки на обработчики событий главного меню или кнопок.

Текст программы на языке С++

Устанавливаем восемь кнопок типа SpeedButton в соответствии с рис.3.12.

Присваиваем кнопкам имена: But1_2, ButSum, ButAdd, ButSub, ButMult, ButDiv, ButWr и ButOpen. Свойству GroupIndex зависимых кнопок: ButAdd, ButSub, ButMult и ButDiv

присваиваем значение 1, этому же свойству кнопки But1_2 - значение 2 и кнопки ButSum - значение 3. Свойству AllowAllUp кнопок ButReplc и ButSum присваиваем значение true, у остальных кнопок оставляем значение этого свойства равным false.

Для определенности действия, выполняемого по умолчанию, свойству Down кнопки ButAdd задаём значение true.

Помещаем на форму метки с обозначениями вводимых чисел, редакторы для ввода чисел, метку для вывода результата, метку для вывода описания заданного действия.

89

PDF created with pdfFactory Pro trial version www.pdffactory.com

Устанавливаем на форму редактор для ввода имени файла, в котором должны сохраняться результаты расчёта. Устанавливаем кнопки для ввода команд: расчёта, записи результатов, открытия результатов и выхода из программы в соответствии с рис.3.12.

В графическом редакторе создаём рисунки для кнопок размером 16×16 пикселей. Рисунки загружаем в свойства кнопок Glyph.

Объявляем в заголовочном файле главной формы глобальные переменные типа double для хранения вводимых чисел и результата, строковую переменную ResStr для формирования строки результата, записываемой в отчёт и затем сохраняемой в файле.

Прототип функции Vvod записываем в секцию public класса формы. public: // User declarations

__fastcall TfmCalc(TComponent* Owner); double Vvod(AnsiString Str);

};

double Nm1,Nm2,Res;

AnsiString ResStr=" Расчётов не было";

Текст описания функции ввода, предназначенной для преобразования вводимой строки в число, приведён в распечатке 3.6. Для вывода сообщения об ошибке в функции использована метка.

Распечатка 3.6

double TfmCalc::Vvod(AnsiString Str)

{

double Nm; try

{Nm=StrToFloat(Str); LabErr->Caption = "";

}

catch(...)

{

Nm=0;

if ((Str != "")&&(Str != " ")&&(Str != "-")) LabErr->Caption = "Ошибка ввода";

}

return Nm;

}

90

PDF created with pdfFactory Pro trial version www.pdffactory.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]