Тест
|
Ожидаемый результат
|
Полученный Результат
|
Добавление числовых данных в поля ввода
|
Заполнив поля, должен был построиться график линейной функции
|
Все данные введены корректно, график построился правильно
|
В ходе отладки все недочеты были
успешно устранены и программа готова к эксплуатации.
5. Руководство
пользователя
Программа предназначена для
построения графиков функции. Программу может использовать любой пользователь,
имеющий персональный компьютер.
Рисунок 1
Работа программы начинается после
загрузки приветствия (Рисунок 1). Через несколько секунд открывается главное
окно со списком функций (Рисунок 2).
В колонке «Выбор функции графика»
находятся 9 функций графиков, выбрать можно только 1 функцию (по умолчанию
выбрана первая функция). При нажатии на главном меню пункта «Выход» открывается
окно «Завершить программу?». При нажатии «Да» происходит завершение программы;
«Нет» - программа продолжает работу. Справочную информацию по программе можно
получить при нажатии кнопки F1 или при выборе пункта «Справка» - «О программе». После выбора
функции переходим на вторую форму для прорисовки графика. Для этого служит
кнопка «Далее» на форме или пункт «Перейти» - «Построение графика».
На следующей форме пользователю
предоставляется возможность нарисовать выбранный график, нажав на кнопку
«Нарисовать» (Рисунок 3).
Рисунок 3
В некоторых случаях пользователю
предоставляется возможность подставить свои переменные в выбранную функцию
(например, линейная функция). Остальные графики будут отображаться с готовыми
переменными, не задаваемыми пользователем. При нажатии на кнопку «Функции
графиков» происходит возврат на первую форму, где находится список всех рабочих
функций.
Для вызова справки «О программе»
нужно выбрать пункт «Справка» - «О программе» (Рисунок 4)
Рисунок 4
Заключение
Данный программный продукт был разработан
в среде программирования Borland Delphi 7 Enterprise, так как это система наиболее подходит для разработки данного
приложения.
Разработка данного программного
продукта завершена, но эта программа может быть изменена и дополнена по желанию
пользователей.
Поставленные цели и задачи обучения
пользователя и тестирования его знаний были максимально выполнены.
Список использованных источников
1) Фленов, М.Е.
Библия Delphi. М.Е. Фленов, - СПб.:2004.-884 с.
) Фаронов, В.В.
Программирование баз данных в Delphi 7. Учебный курс. В.В. Фаронов, - СПб.: Питер, 2006-261 с.
) Глушаков, С.В.
Программирование в среде Delphi 7.0-2-е издание, дополненное и переработанное / С.В. Глушаков,
А.Л. Клевцов. - Харьков: Изд-во «Фолио», 2003. - 528с
Приложение
Листинг программы
Form1
unit Unit1;
interface
, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons, ExtCtrls,
Menus, XPMan, shellapi;
= class(TForm):
TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;:
TLabel;: TXPManifest;: TLabel;: TRadioGroup;: TBitBtn;: TMenuItem;: TMenuItem;:
TLabel;N4Click (Sender: TObject);FormClose (Sender: TObject; var Action:
TCloseAction);N5Click (Sender: TObject);FormActivate (Sender:
TObject);BitBtn1Click (Sender: TObject);RadioGroup1Click (Sender:
TObject);N7Click (Sender: TObject);FormKeyUp (Sender: TObject; var Key: Word;:
TShiftState);N6Click (Sender: TObject);
{Private declarations}
{Public declarations};:
TForm1;, help2:string;Unit2, Unit3, Unit4, Unit5;
{$R *.dfm}TForm1.
BitBtn1Click (Sender: TObject); // Выбор функции.mediaplayer1.
FileName:=ExtractFilePath (ParamStr(0))+'base/click.wav';.mediaplayer1.
Open;.mediaplayer1.play;. Show;. Hide;;TForm1. RadioGroup1Click (Sender:
TObject); // Блокировка далее ненужных переходовRadioGroup1. ItemIndex of
:begin N4.
Enabled:=true;. LabeledEdit1. EditLabel. Caption:='Переменная k';.
LabeledEdit2. EditLabel. Caption:='Переменная b';. LabeledEdit1. Show;. LabeledEdit2.
Show;. LabeledEdit3.hide;. LabeledEdit1. Clear;. LabeledEdit2. Clear;. UpDown1.
Show;. UpDown2. Show;. UpDown3.hide; end;
:begin N4.
Enabled:=true;. LabeledEdit1.hide;. LabeledEdit2. Hide;. LabeledEdit3.hide;.
UpDown1.hide;. UpDown2.hide;. UpDown3.hide; end;
:begin N4.
Enabled:=true;. LabeledEdit1. EditLabel. Caption:='Переменная a';.
LabeledEdit2. EditLabel. Caption:='Переменная b';. LabeledEdit3. EditLabel.
Caption:='Переменная c';. LabeledEdit1. Show;. LabeledEdit2.show;.
LabeledEdit3.show;. LabeledEdit1. Clear;. LabeledEdit2. Clear;. LabeledEdit3.
Clear;. UpDown1. Show;. UpDown2.show;. UpDown3.show; end;
:begin N4.
Enabled:=true;. LabeledEdit1. EditLabel. Caption:='Переменная a';.
LabeledEdit1. Show; // провал. LabeledEdit2. Hide;. LabeledEdit3. Hide;.
LabeledEdit1. Clear;. UpDown1. Show;. UpDown2.hide;. UpDown3.hide; end;
:begin N4.
Enabled:=true;. LabeledEdit1. EditLabel. Caption:='Переменная a';.
LabeledEdit1. Show;. LabeledEdit2.hide;. LabeledEdit3.hide;. LabeledEdit2.
Clear;. UpDown1.show;. UpDown2.hide;. UpDown3.hide; end;
:begin N4.
Enabled:=true;. LabeledEdit1. Hide;. LabeledEdit2. Hide;. LabeledEdit3. Hide;.
UpDown1.hide;. UpDown2.hide;. UpDown3.hide; end;
:begin N4.
Enabled:=true;. LabeledEdit1. Hide;. LabeledEdit2.hide;. LabeledEdit3.hide;.
UpDown1.hide;. UpDown2.hide;. UpDown3.hide; end;
:begin N4.
Enabled:=true;. LabeledEdit1. Hide;. LabeledEdit2.hide;. LabeledEdit3.hide;.
UpDown1.hide;. UpDown2.hide;. UpDown3.hide; end;
:begin N4.
Enabled:=true;. LabeledEdit1. Hide;. LabeledEdit2.hide;. LabeledEdit3.hide;.
UpDown1.hide;. UpDown2.hide;. UpDown3.hide; end;
:begin N4.
Enabled:=true;. LabeledEdit1. Show;. LabeledEdit2. Hide;. LabeledEdit1. Clear;.
UpDown1.show;. UpDown2.hide; end;;;
TForm1.N4Click (Sender:
TObject); // Переход к Построению графика (в меню). Show;. Hide;;
TForm1. FormClose
(Sender: TObject; var Action: TCloseAction); // Закрытие формы:= Application.
MessageBox ('Завершить программу?', 'Выход', mb_YesNo + mb_IconAsterisk);(A =
idYes) then form4.close else Abort;;TForm1.N5Click (Sender: TObject); // Выход
в меню:= Application. MessageBox ('Завершить программу?', 'Выход', mb_YesNo +
mb_IconAsterisk);(A = idYes) then form4.close else Abort;;TForm1. FormActivate
(Sender: TObject);. Left:= (Screen. Width div 2) - (Form1. Width div 2); //
Центрируем окно. Top:= (Screen. Height div 2) - (Form1. Height div 2);.
Enabled:=false;. LabeledEdit3.hide;. UpDown3.hide;2.caption:='Подсказка: После выбора нужной функции'+#10#13+'нажмите кнопку
«Далее», чтобы перейти к'+#10#13+'вводу переменных и построению
графика'+#10#13+'функции';
end;TForm1.N7Click
(Sender: TObject);. Show;;TForm1. FormKeyUp (Sender: TObject; var Key: Word; //
Вызов справки по F1: TShiftState);Key = vk_F1 then(Application. Handle, 'open',
PChar ('base/help.chm'), nil, nil, SW_SHOW);;TForm1.N6Click (Sender:
TObject);// Вызов справки(Application. Handle, 'open', PChar ('base/help.chm'),
nil, nil, SW_SHOW);;.Unit3;
, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, StdCtrls, Buttons,
Math, Menus, ComCtrls, shellapi;
= class(TForm):
TGroupBox;: TPaintBox;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;:
TMenuItem;: TMenuItem;: TLabel;: TLabel;: TUpDown;: TUpDown;: TBitBtn;:
TBitBtn;: TBitBtn;: TLabeledEdit;: TLabeledEdit;: TMenuItem;: TMenuItem;: TLabeledEdit;:
TUpDown;: TLabel;FormActivate (Sender: TObject);N2Click (Sender:
TObject);N5Click (Sender: TObject);FormClose (Sender: TObject; var Action:
TCloseAction);FormContextPopup (Sender: TObject; MousePos: TPoint;Handled:
Boolean);BitBtn1Click (Sender: TObject);BitBtn3Click (Sender:
TObject);BitBtn4Click (Sender: TObject);LabeledEdit1KeyPress (Sender: TObject;
var Key: Char);LabeledEdit1KeyUp (Sender: TObject; var Key: Word;:
TShiftState);LabeledEdit2KeyPress (Sender: TObject; var Key: Char);LabeledEdit2KeyUp
(Sender: TObject; var Key: Word;: TShiftState);N7Click (Sender:
TObject);FormKeyUp (Sender: TObject; var Key: Word;: TShiftState);N6Click
(Sender: TObject);LabeledEdit3KeyPress (Sender: TObject; var Key:
Char);LabeledEdit3KeyUp (Sender: TObject; var Key: Word;: TShiftState);
{Private declarations}
{Public declarations};:
TForm3;, y: real; // расчет х и у
x0, y0, tx, ty, i: Integer; // начало координат по х и у
m: Integer; //
масштаб:string;Unit1, Unit2, Unit4, Unit5;
{$R *.dfm}TForm3.
BitBtn1Click (Sender: TObject);.mediaplayer1. FileName:=ExtractFilePath
(ParamStr(0))+'base/click.wav';.mediaplayer1. Open;.mediaplayer1.play;(Length
(LabeledEdit1.text)=0) or (LabeledEdit1. Text='-') then LabeledEdit1.
Text:='0'; // Если поле пустое, пишем туда 0(Length (LabeledEdit2.text)=0) or
(LabeledEdit2. Text='-') then LabeledEdit2. Text:='0';form1. RadioGroup1.
ItemIndex of
:begin if (strtofloat
(LabeledEdit1.text)<1) or (strtofloat (LabeledEdit1.text)>7) then begin
showmessage ('Числа от 1 до 7'); abort; end; end;;. Canvas. Brush.
Color:=clWhite; // Цвет фона белый. Canvas. FillRect(ClientRect); // Очистка
рабочей области PaintBox10:= paintbox1. Width div 2; // узнаем центр
формы по х
y0:= paintbox1. Height div 2; // узнаем центр формы по у
paintbox1. Canvas. Pen.
Color:=clsilver; // Рисуем клетки:=0;:=0;i:=1 to 25 do begin. Canvas. MoveTo (tx, ty+10); //
..Вертикально. Canvas. LineTo (tx+260, ty+10);:=ty+10;;:=0;:=0;i:=1 to 25 do
begin // ..Горизонтально. Canvas. MoveTo (tx+10, ty);. Canvas. LineTo (tx+10,
ty+260);:=tx+10;;. Canvas. Pen. Color:=clblack; // …завершение
// чертим х ось
paintbox1. Canvas.
MoveTo (0, y0);. Canvas. LineTo (paintbox1. Width, y0);
// чертим у ось
paintbox1. Canvas. MoveTo (x0, 0);.
Canvas. LineTo (x0, paintbox1. Height);
// стрелка у. Canvas.
Brush. Color:= clblack;. Canvas. Polygon([Point (x0,0), Point (x0+3, 20), Point
(x0-3, 20)]);. Canvas. Brush. Color:= clwhite;. Canvas. TextOut (x0-30,10,'y');
// стрелка x. Canvas.
Brush. Color:= clblack;. Canvas. Polygon([Point (260, y0), Point (240, y0-3),
Point (240, y0+3)]);. Canvas. Brush. Color:= clwhite;. Canvas. TextOut (240,
y0+20,'x');:= 10; // задаем масштаб, иначе
будет очень мелкий график
x:= -20; // зададим диапазон от куда до куда будем считать наш
график
// собственно прорисовывем
while x <= 20 do
begin
case form1. RadioGroup1.
ItemIndex of
:begin y:=strtofloat
(LabeledEdit1. Text)*x+strtofloat (LabeledEdit2. Text); info:='y=kx+b'; end;
:begin y:=power (x, 2);
info:='y=x^2'; end;
:begin y:=strtofloat
(LabeledEdit1. Text)*sqr(x)+strtofloat (LabeledEdit2. Text)*x+strtofloat
(LabeledEdit3. Text); info:='y=a (x^2)+bx+c'; end;
:begin y:=strtofloat
(labelededit1.text)/x; info:='y=a/x'; end;
:begin y:=power
(strtofloat(LabeledEdit1. Text), x); info:='y=a^x'; end;
:begin y:=sin(x);
info:='y=sin(x)'; end;
:begin y:=cos(x);
info:='y=cos(x)'; end;
:begin y:=sin(x)/cos(x);
info:='y=tg(x)'; end;
:begin y:=cos(x)/sin(x);
info:='y=ctg(x)'; end;;.canvas. TextOut (190, x0-100, info);. Caption:='Подсказка:'+#10#13+'Ваша
функция'+#10#13+info;. Canvas. Pixels [x0+Round (x*m), y0-Round (y*m)]:=
clGreen;:= x + 0.01;;;TForm3. FormActivate (Sender: TObject);. Left:= (Screen.
Width div 2) - (Form3. Width div 2);. Top:= (Screen. Height div 2) - (Form3.
Height div 2);. Enabled:=false;;TForm3.N2Click (Sender: TObject); // Возврат к
Выбору функции графика. Show;. Hide;. Caption:='';;TForm3. BitBtn3Click (Sender: TObject); // Возврат к Выбору функции графика (Кнопка)
begin.mediaplayer1.
FileName:=ExtractFilePath (ParamStr(0))+'base/click.wav';.mediaplayer1.
Open;.mediaplayer1.play;. Show;. Hide;. Caption:='';;TForm3.N5Click (Sender:
TObject); // Выход в гл. меню меню:= Application. MessageBox ('Завершить
программу?', 'Выход', mb_YesNo + mb_IconAsterisk);(A = idYes) then form4.close
else Abort;. Refresh;;TForm3. LabeledEdit1KeyPress (Sender: TObject; var Key:
Char); // Фильтр ввода
// Множество цифр, допустимых для
ввода в edit:
const Digit: set of
Char=['1'..'9', '0',#8];
// Множество символов,
воспринимаемых как символ-разделитель:
Separator: set of
Char=['/', '.', ', ', 'ю', 'Ю', 'б', 'Б'];.mediaplayer1.
FileName:=ExtractFilePath (ParamStr(0))+'base/keyboard.wav';.mediaplayer1.
Open;.mediaplayer1.play; Length (LabeledEdit1.text)>2 then key:=#0; // Ограничивает
максимальное число (до 999)
with (Sender as
TLabeledEdit) do(Key in Separator)Key:=DecimalSeparator //Delphi-константа типа
Char, равная символу-разделителю Windows(not (Key in
Digit))Key:=#0;((Key=DecimalSeparator) and (pos(DecimalSeparator,
Text)<>0))Key:=#0;;;TForm3. LabeledEdit2KeyPress (Sender: TObject; var
Key: Char); // Запрет ввода лишнего B
// Множество цифр, допустимых для
ввода в edit:
const Digit: set of
Char=['1'..'9', '0',#8];
// Множество символов,
воспринимаемых как символ-разделитель:
Separator: set of
Char=['/', '.', ', ', 'ю', 'Ю', 'б', 'Б'];.mediaplayer1.
FileName:=ExtractFilePath (ParamStr(0))+'base/keyboard.wav';.mediaplayer1.
Open;.mediaplayer1.play; Length (LabeledEdit2.text)>2 then key:=#0; // Ограничивает
максимальное число (до 999)
with (Sender as
TLabeledEdit) do(Key in Separator)Key:=DecimalSeparator //Delphi-константа типа
Char, равная символу-разделителю Windows(not (Key in
Digit))Key:=#0;((Key=DecimalSeparator) and (pos(DecimalSeparator,
Text)<>0))Key:=#0;;;
// Множество цифр, допустимых для
ввода в edit:
const Digit: set of
Char=['1'..'9', '0',#8];
// Множество символов,
воспринимаемых как символ-разделитель:
Separator: set of
Char=['/', '.', ', ', 'ю', 'Ю', 'б', 'Б'];.mediaplayer1.
FileName:=ExtractFilePath (ParamStr(0))+'base/keyboard.wav';.mediaplayer1.
Open;.mediaplayer1.play; Length (LabeledEdit3.text)>2 then key:=#0; // Ограничивает
максимальное число (до 999)
with (Sender as
TLabeledEdit) do(Key in Separator)Key:=DecimalSeparator //Delphi-константа типа
Char, равная символу-разделителю Windows(not (Key in
Digit))Key:=#0;((Key=DecimalSeparator) and (pos(DecimalSeparator,
Text)<>0))Key:=#0;;;TForm3. LabeledEdit3KeyUp (Sender: TObject; var Key:
Word;: TShiftState);n: Integer;: String;(LabeledEdit3. Text='-') then
Abort;(Sender as TLabeledEdit) dopos (DecimalSeparator, Text)=1
then:='0'+Text;:=Length(Text);;(pos (DecimalSeparator,
Text)<>Length(Text)) thenText [Length(Text)]<>'0' thenFloatToStr
(StrToFloat(Text))<>'0' then:=FloatToStr (StrToFloat(Text));Key=8 then:=SelStart;:=Text;(S,
n, 1);:=S;;:=Length(Text);;;.Unit4;
, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, StdCtrls, OleCtrls,
SHDocVw, MSHTML, MPlayer,, XPMan;
= class(TForm): TTimer;:
TMediaPlayer;: TImage;: TLabel;: TLabel;: TXPManifest;: TWebBrowser;: TLabel;:
TTimer;: TLabel;Timer1Timer (Sender: TObject);FormActivate (Sender:
TObject);WebBrowser1DownloadComplete (Sender: TObject);Timer2Timer (Sender:
TObject);
{Private declarations}
{Public declarations};:
TForm4;:integer;Unit1, Unit2, Unit3, Unit5;
{$R *.dfm}TForm4.
WebBrowser1DownloadComplete (Sender: TObject); // Убрать из анимации лишнееа:
IHTMLDocument2;: IHTMLElement;:= IHTMLDocument2
(TWebBrowser(Sender).Document);Doc = nil then Exit;:= Doc.body;Element = nil
then Exit;.style.borderStyle:= 'none';.
OleObject.document.body.style.overflowX:= 'hidden';.
OleObject.document.body.style.overflowY:= 'hidden';;TForm4. Timer1Timer
(Sender: TObject);. Tag:=timer1. Tag-1;timer1. Tag of
:begin timer1.
Enabled:=false; form4. Hide;. Show; end;;;TForm4. FormActivate (Sender:
TObject);. Picture. LoadFromFile (ExtractFilePath(ParamStr(0))+'base/1.jpg');.
Left:= (Screen. Width div 2) - (Form4. Width div 2);. Top:= (Screen. Height div
2) - (Form4. Height div 2);. Tag:=8;. Caption:='Построение графиков функций';.
Navigate (ExtractFilePath(ParamStr(0))+'base/1.html');;TForm4. Timer2Timer
(Sender: TObject);. Caption:=FormatDateTime ('dd.mm.yyyy tt', now);. Label3.
Caption:=FormatDateTime ('dd.mm.yyyy tt', now);. Label3. Caption:=FormatDateTime
('dd.mm.yyyy tt', now);. Label2. Caption:=FormatDateTime ('dd.mm.yyyy tt',
now);;.Unit5;
, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, shellapi,
XPMan;
= class(TForm): TImage;:
TLabel;: TButton;: TXPManifest;: TLabel;Button1Click (Sender:
TObject);FormActivate (Sender: TObject);FormKeyUp (Sender: TObject; var Key:
Word;: TShiftState);
{Private declarations}
{Public declarations};:
TForm5;Unit1, Unit2, Unit3, Unit4;
{$R *.dfm}TForm5.
Button1Click (Sender: TObject);.close;;TForm5. FormActivate (Sender: TObject);.
Picture. LoadFromFile (ExtractFilePath(ParamStr(0))+'base/1.bmp');. Left:=
(Screen. Width div 2) - (Form5. Width
div
2); // Центрирует окно
Form5. Top:= (Screen.
Height div 2) - (Form5. Height div 2);
label1. Caption:='Построение графиков функций'+#10#13+
'Версия 1.0'+#10#13+#10#13+
'Copyright 2012 '+#10#13+
'Код программы разработал Дремлюк
Н'+#10#13+#10#13+
'Описание: программа
разработана'+#10#13+
'для построения графиков
функции.'+#10#13+
'Пользователю предоставляется
'+#10#13+
'возможность выбора нужной
функции'+#10#13+
'и ввода переменных в поля ввода.';
end;TForm5. FormKeyUp
(Sender: TObject; var Key: Word;: TShiftState);Key = vk_F1 then(Application.
Handle, 'open', PChar ('base/help.chm'), nil, nil, SW_SHOW);;
end.