Построение графиков функции
Содержание |
|
Введение………………………………………………………………………… 4 1. Постановка задачи……………………………………………………............ 5 1.1 Описание предметной области ………………………………………….... 5 1.2 Входная информация ………………………………………………………. 5 1.3 Постоянная информация…………………………………………………… 5 1.4 Выходная информация…………………………………………………....... 5 1.5 Описание алгоритма………………………………………………………... 5 2. Вычислительная система…………………………………………………...... 9 2.1 Основные характеристики выбранного ПК………………………………. 9 2.2 Характеристика программных средс……………………………………… 9 2.2.1 Операционная система …………………………………………............... 9 2.2.2 Система программирования……………………………………………... 11 3. Описание программы………………………………………………………... 12 3.1 Описание компонентов…………………………………………………….. 12 3.2 Интерфейс программы……………………………………………………… 14 3.3 Описание модулей, процедур и функций…………………………………. 18 3.4 Вызов и загрузка программы………………………………………………. 21 4. Программа тестирования и методика испытаний…………………………. 21 5. Руководство пользователя…………………………………………………… 22 Заключение……………………………………………………………………... Приложение А…………………………………………………………............... 25 26 Список используемых источников……………………………………………. 54 |
|
Введение
Тема моего курсового проекта “Построение графиков функции”. Целью является разработка программного средства с возможностями графического отображения графиков функций.
Программу может использовать любой пользователь. Программа очень проста в использовании.
Для написания данной программы я выбрал визуальную среду разработки Borland Delphi Eenterprise 7, так как этот язык наиболее подходит для решения поставленной задачи.
1 Постановка задачи
- Описание предметной области
Задание данной курсовой работы требует разработать программу, которая должна
графически отображать выбранные пользователем функции.
Программа должна соответствовать следующим требованиям:
- должен быть реализован простой и удобный пользовательский интерфейс;
- должен быть реализован просмотр постоянной информации;
Данная программа может использоваться всеми пользователями имеющими персональный компьютер.
1.2 Входная информация
К входной информации относятся данные, вводимые пользователем для изменения переменных функции.
1.4 Выходная информация
Выходной информацией является графическое отображение функции.
1.5 Описание алгоритма
Таблица - Блоки
Решение блок выбора направления выполнения алгоритма в зависимости от некоторых условий. В результате проверки условия осуществляется выбор одного из нескольких возможных путей. |
Решение блок выбора направления выполнения алгоритма в зависимости от некоторых условий. В результате проверки условия осуществляется выбор одного из нескольких возможных путей. |
|
Предопределенный процесс блок описания процесса из одной или нескольких операций, описанных в отдельном модуле (самостоятельном алгоритме). |
|
соединитель указание связи между прерванными линиями потока, связывающими блоки. |
|
терминатор обозначает начало или конец алгоритма. |
|
линия потока отображает потоки данных и управления в алгоритме. |
|
Данные блок описания операции ввода/вывода данных, для которой не определено конкретное устройство. |
После запуска программы на экране появится окно приветствия, через несколько секунд автоматически откроется главное окно программы.
В колонке “Выбор функции графика” находятся 9 функций графиков, выбрать можно только 1 функцию (по умолчанию выбрана первая функция). При нажатии на главном меню пункта “Перейти” открываются две кнопки:
- “Выбор функции графика” заблокирован, так как мы находимся как раз в этой форме.
- “Построение графика” - дублирует кнопку “Далее”.
При нажатии на главном меню пункта "Справка” открываются две кнопки:
- “Помощь” - Инструкция к программе (Быстрый вызов F1).
- “О программе” - краткие сведения об авторе.
При нажатии на главном меню пункта “Выход” открывается окно “Завершить программу?”. При нажатии “Да” происходит завершение программы; “Нет” программа продолжает работу.
При нажатии кнопки “Далее” происходит переход на следующую форму.
На следующей форме, при нажатии на кнопку “Нарисовать” отображается слева ранее выбранная функция графика (по умолчанию первая). При нажатии кнопки “Выход” открывается окно “Завершить программу?”. При нажатии “Да” происходит завершение программы; “Нет” программа продолжает работу. В некоторых функциях можно ввести свои переменные, о чем свидетельствует появление полей ввода (на второй форме при выборе той или иной функции (на первой форме) .При нажатии на кнопку “Функции графиков” происходит возврат на первую форму, где находится список всех рабочих функций.
2 Вычислительная система
2.1 Основные характеристики выбранного персонального компьютера.
Платформа разработки:
- процессор: Intel(R) Core™ i3 CPU M 350 @2.27GHz 927 МГц;
- оперативная память: DDR-3, 3Gb;
- жесткий диск: HDD 300Gb;
- монитор;
- клавиатура;
- мышь;
Минимальные требования:
- процессор: Intel Pentium 500Hz;
- оперативная память: DDR-1, 64Мб;
- монитор, поддерживающий расширение экрана 1024х768;
- не менее 135 Мб свободного места на жестком диске;
- клавиатура;
- мышь;
- звуковая карта;
2.2 Характеристика программных средств
2.2.1 Операционная система
Персональная электронно-вычислительная система должна быть обеспечена операционной системой MS Windows 2000/XP/Vista/Seven/8;
Операционная система это комплекс управляющих и обрабатывающих программ, которые обеспечивают функционирование компьютера, рациональное распределение его ресурсов и организуют взаимодействие аппаратуры компьютера с пользователем, выполнение поставленных пользователем задач.
Версия windows 7 операционная система семейства Windows NT, следующая за Windows Vista. В линейке Windows NT система носит номер версии 6.1 (windows 2000 5.0,
windows xp 5.1, windows server 2003 5.2, windows vista и windows server 2008 6.0). серверной версией является windows server 2008 r2, версией для интегрированных систем windows embedded standard 2011 (quebec)[1], мобильной windows embedded compact 2011 (chelan, windows ce 7.0) .
Операционная система поступила в продажу 22 октября 2009 года, меньше чем через три года после выпуска предыдущей операционной системы, Windows Vista. Партнёрам и клиентам, обладающим лицензией Volume Licensing, доступ к RTM был предоставлен 24 июля 2009 года. Финальная (копия с дисков, которые потом пошли в продажу) пиратская версия была доступна всем с первых чисел августа 2009 года.
В состав windows 7 вошли как некоторые разработки, исключённые из windows vista, так и новшества в интерфейсе и встроенных программах. из состава windows 7 были исключены игры inkball, ultimate extras; приложения, имеющие аналоги в windows live (почта windows, календарь windows и пр.), технология microsoft agent, windows meeting space; из меню «пуск» исчезла возможность вернуться к классическому меню и автоматическая пристыковка браузера и клиента электронной почты.
Новая 11 версия DirectX, впервые выпущенная именно в составе этой операционной системы, имеет следующие улучшения: добавлена поддержка новых вычислительных шейдеров, возможность многопоточного рендеринга, улучшена тесселяция, появились новые алгоритмы компресии текстур и др.
В windows 7 реализована более гибкая настройка user account control (uac), которая в отличие от windows vista имеет ещё два промежуточных состояния между режимами «всегда уведомлять» и «никогда не уведомлять» «уведомлять, только при попытках программ внести изменения в компьютер»(положение по умолчанию), «уведомлять, только при попытках программ внести изменения в компьютер(не затемнять рабочий стол)».
Стоит заметить, что в отличие от Vista, затемнение происходит только если программа активна и находится на переднем плане. Если вы совершили клик в момент открытия UAC и деактивировали программу, затемнения может и не произойти.
Улучшения коснулись и брандмауэра Windows вернулась функция уведомления пользователя о блокировке программы, которая пытается получить доступ к сети.
С помощью групповой политики и функции AppLocker можно будет запретить запуск определенных приложений.
Критика основывается на следующих аргументах:
- Результаты независимых тестов показывают, что приложения на Windows 7 работают немногим быстрее, чем на Vista и медленнее, чем на старой Windows XP.
- Низкая производительность системы, показанная в ряде независимых тестов, связана с усложнением ОС и, следовательно, более интенсивным использованием вычислительного ресурса, что в свою очередь может выражаться в увеличении потребления энергии и снижении времени работы батарей нетбуков до 30 % по сравнению с Windows XP.
- windows 7 имеет такие же высокие системные требования, как и vista. так, рекомендованные microsoft аппаратные требования для нормальной работы windows 7 и vista составляют 1 гб озу и 16 гб свободного дискового пространства, в то время как для windows xp они составляют 128 мб озу и 1,5 гб на диске
- Однако не стоит забывать, что Windows XP вышла почти за десятилетие до Windows 7 и 128 мб ОЗУ по тем временам были высокими требованиями.
2.2.2 Система программирования
Borland Delphi- средство разработки приложений под Windows. Достоинство Delphi это быстрый компилятор, большие возможности для работы с базами данных и большой набор компонентов. Простота, скорость и эффективность Delphi объясняют её популярность. Есть и другие достоинства: простота изучения Object Pascal; программы, написанные на Delphi , не требуется снабжать дополнительными библиотеками.
Для создания программы были использованы следующие вкладки: Standard, Additional, Win32, System, Internet .
3 Описание программы
3.1 Описание компонентов
В данной программе имеется 4 формы с различными компонентами. Ниже приводятся описания компонентов, которые используются в данной программе. Описание компонентов используемых в программе приведено в таблицах 1-4.
Таблица 1 Form1
Компонент |
Описание |
MainMenu1 |
Главное меню программы |
BitBtn1 |
Кнопка, открывает форму построения график |
XpManifest |
Менеджер тем |
Label1 |
Служит для отображения текста на форме |
Label2 |
Служит для отображения подсказкина форме |
Label3 |
Служит для отображения текста на форме |
RadioGroup1 |
Список функций графиков |
Таблица 2 Form3
Компонент |
Описание |
MainMenu1 |
Главное меню программы |
BitBtn1 |
Кнопка, служит для прорисовки графика на Paintbox1 |
BitBtn3 |
Кнопка, служит для возвращения на форму 2 |
BitBtn4 |
Кнопка, служит для выхода из программы |
LabeledEdit1 |
Служит для ввода первой переменной в формулу |
LabeledEdit2 |
Служит для ввода первой переменной в формулу |
LabeledEdit3 |
Служит для ввода первой переменной в формулу |
UpDown1 |
Ассоциируется с LabeledEdit1 |
UpDown2 |
Ассоциируется с LabeledEdit2 |
UpDown3 |
Ассоциируется с LabeledEdit3 |
Label1 |
Служит для отображения текста на форме |
Label2 |
Служит для отображения подсказки на форме |
GroupBox1 |
Контейнер компонентов |
Label3 |
Служит для отображения текста на форме |
Таблица 3 Form4
Компонент |
Описание |
Image1 |
Служит для хранения фонового изображения |
Label1 |
Служит для отображения текста на форме |
Label2 |
Служит для отображения текста на форме |
Label3 |
Служит для отображения текста на форме |
Label4 |
Служит для отображения текста на форме |
MediaPlayer1 |
Компонент для проигрывания звуковых файлов |
XpManifest |
Менеджер тем |
Timer1 |
Таймер |
WebBrowser1 |
Окно браузера |
Таблица 4 Form5
Компонент |
Описание |
Image1 |
Служит для хранения изображения |
Label1 |
Служит для отображения текста на форме |
Label2 |
Служит для отображения текста на форме |
Button1 |
Кнопка, закрывающая форму. |
XPManifet |
Менеджер тем |
3.2 Интерфейс программы
Рисунок 1 Окно загрузки программы «Построение графиков функций»
Окно загрузки программы «Построение графиков функций» представлено следующими компонентами: Image1, Label1, Label2, Label3, Label4, MediaPlayer1, XpManifest, Timer1, WebBrowser1.
Рисунок 2 Окно «Выбор функции графика»
Окно «Выбор функции графика» представлено следующими компонентами: MainMenu1, BitBtn1, XpManifest, Label1, Label2, Label3, RadioGroup1.
Рисунок 3 Окно «Ввод переменных и построение графика функции»
Окно «Ввод переменных и построение графика функции» представлено следующими компонентами: MainMenu1, BitBtn1, BitBtn3, BitBtn4, LabeledEdit1, LabeledEdit2, LabeledEdit3, UpDown1, UpDown2, UpDown3, Label1, Label2, Label3, GroupBox1.
Рисунок 4 Окно «О программе»
Окно Окно «О программе» представлено следующими компонентами: Image1, Label1, Label2, Button1, XPManifet.
3.3 Описание модулей, процедур и функций
Программа состоит из 4 модулей. В таблицах 1-4 приведено описание процедур и функций, которые в них используются.
Таблица 5 Модуль Form1
Процедура |
Описание |
procedure N4Click(Sender: TObject); |
Переход к Построению графика (в главном меню) |
procedure FormClose(Sender: TObject; var Action: TCloseAction); |
Закрытие формы |
procedure N5Click(Sender: TObject); |
Выход |
procedure FormActivate(Sender: TObject); |
1)Центрирует окно 2)Кнопка “Выбор графика функции” в гл. меню отключена 3) LabeledEdit3 и UpDown3 на форме3 изначально скрыты (для корректного выбора по умолчанию) 4)Подсказка |
procedure BitBtn1Click(Sender: TObject); |
1)Переход к построению графика 2)Воспроизведение звука |
procedure RadioGroup1Click(Sender: TObject); |
Скрывает или показывает компоненты при выборе той или иной функции |
procedure N7Click(Sender: TObject); |
Вызов справки «О программе» |
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); |
Вызов справки F1 |
procedure N6Click(Sender: TObject); |
Вызов справки в гл. меню |
Таблица 6 Модуль Form3
Процедура |
Описание |
procedure FormActivate(Sender: TObject); |
2)Кнопка “Построение графика” в гл. меню отключена |
procedure N2Click(Sender: TObject); |
|
procedure N5Click(Sender: TObject); |
Выход в гл. меню меню |
procedure FormClose(Sender: TObject; var Action: TCloseAction); |
Закрытие формы |
procedure FormContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); |
|
procedure BitBtn1Click(Sender: TObject); |
1)Постройка графика 2) Воспроизведение звука |
procedure BitBtn3Click(Sender: TObject); |
Возврат к Выбору функции графика |
procedure BitBtn4Click(Sender: TObject); |
Выход |
procedure LabeledEdit1KeyPress(Sender: TObject; var Key: Char); |
Фильтр ввода (только числа) |
procedure LabeledEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); |
Фильтр пустого ввода |
procedure LabeledEdit2KeyPress(Sender: TObject; var Key: Char); |
Фильтр ввода (только числа) |
procedure LabeledEdit2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); |
Фильтр пустого ввода |
procedure LabeledEdit3KeyPress(Sender: TObject; var Key: Char); |
Фильтр ввода (только числа) |
procedure LabeledEdit3KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); |
Фильтр пустого ввода |
procedure N7Click(Sender: TObject); |
Вызов справки «О программе» |
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); |
Вызов справки F1 |
procedure N6Click(Sender: TObject); |
Вызов помощи в гл. меню |
Таблица 7 Модуль Form4
Процедура |
Описание |
procedure Timer1Timer(Sender: TObject); |
Скрыте формы4 и переход к форме1 |
procedure FormActivate(Sender: TObject); |
1)Фоновая картинка 2)Центрирование окна 3)Значение Timer1.Tag = 8 (время, сколько висит приветствие) 4)Загрузка gif анимации через окно браузера (компонент WebBrowser1) 5)Текст на форме |
procedure WebBrowser1DownloadComplete(Sender: TObject); |
1)Скрытие ползунков в окне браузера, отключение 3d эффекта |
procedure Timer2Timer(Sender: TObject); |
2)Дата и время, отвечающее за форму 1,3,4,5 |
Таблица 8 Модуль Form5
Процедура |
Описание |
procedure Button1Click(Sender: TObject); |
Закрыте формы подтверждением (Ok) |
procedure FormActivate(Sender: TObject); |
1)Центрирует окно 2)Текст на форме |
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); |
Вызов справки F1 |
3.4 Вызов и загрузка программы
Для запуска приложения необходимо запустить файл Project.exe после чего откроется форма приветствия и по истечению нескольких секунд произойдет переход к основному окну программы.
4 Программа тестирования и методика испытаний
Цель испытаний: проверить правильность постройки, убедиться в том, что программа защищена от некорректного ввода данных. Объектом испытаний является программный продукт, реализованный в рамках данного курсового проекта.
Тест |
Ожидаемый результат |
Полученный Результат |
Добавление числовых данных в поля ввода |
Заполнив поля, должен был построиться график линейной функции |
Все данные введены корректно, график построился правильно |
В ходе отладки все недочеты были успешно устранены и программа готова к эксплуатации.
5 Руководство пользователя
Программа предназначена для построения графиков функции. Программу может использовать любой пользователь, имеющий персональный компьютер.
Рисунок 1
Работа программы начинается после загрузки приветствия (Рисунок 1). Через несколько секунд открывается главное окно со списком функций (Рисунок 2).
В колонке “Выбор функции графика” находятся 9 функций графиков, выбрать можно только 1 функцию (по умолчанию выбрана первая функция). При нажатии на главном меню пункта “Выход” открывается окно “Завершить программу?”. При нажатии “Да” происходит завершение программы; “Нет” программа продолжает работу. Справочную информацию по программе можно получить при нажатии кнопки F1 или при выборе пункта «Справка»-«О программе». После выбора функции переходим на вторую форму для прорисовки графика. Для этого служит кнопка “Далее” на форме или пункт «Перейти»-«Построение графика».
На следующей форме пользователю предоставляется возможность нарисовать выбранный график, нажав на кнопку «Нарисовать» (Рисунок 3).
Рисунок 3
В некоторых случаях пользователю предоставляется возможность подставить свои переменные в выбранную функцию (например, линейная функция). Остальные графики будут отображаться с готовыми переменными, не задаваемыми пользователем. При нажатии на кнопку “Функции графиков” происходит возврат на первую форму, где находится список всех рабочих функций.
Для вызова справки «О программе» нужно выбрать пункт «Справка»-«О программе» (Рисунок 4)
Рисунок 4
Заключение
Данный программный продукт был разработан в среде программирования Borland Delphi 7 Enterprise, так как это система наиболее подходит для разработки данного приложения.
Программа предназначена для графического отображения графиков функций.
Разработка данного программного продукта завершена, но эта программа может быть изменена и дополнена по желанию пользователей.
Поставленные цели и задачи обучения пользователя и тестирования его знаний были максимально выполнены.
Приложение А
(обязательное)
Листинг программы
Form1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, Menus, XPMan, shellapi;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
About1: TMenuItem;
N5: TMenuItem;
Label1: TLabel;
XPManifest1: TXPManifest;
Label2: TLabel;
RadioGroup1: TRadioGroup;
BitBtn1: TBitBtn;
N6: TMenuItem;
N7: TMenuItem;
Label3: TLabel;
procedure N4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N5Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure N6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
help,help2:string;
implementation
uses Unit2, Unit3, Unit4, Unit5;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject); //Выбор функции
begin
form4.mediaplayer1.FileName:=ExtractFilePath(ParamStr(0))+'base/click.wav';
form4.mediaplayer1.Open;
form4.mediaplayer1.play;
form3.Show;
form1.Hide;
end;
procedure TForm1.RadioGroup1Click(Sender: TObject); //Блокировка далее ненужных переходов
begin
case RadioGroup1.ItemIndex of
0:begin N4.Enabled:=true;
form3.LabeledEdit1.EditLabel.Caption:='Переменная k';
form3.LabeledEdit2.EditLabel.Caption:='Переменная b';
form3.LabeledEdit1.Show;
form3.LabeledEdit2.Show;
form3.LabeledEdit3.hide;
form3.LabeledEdit1.Clear;
form3.LabeledEdit2.Clear;
form3.UpDown1.Show;
form3.UpDown2.Show;
form3.UpDown3.hide; end;
1:begin N4.Enabled:=true;
form3.LabeledEdit1.hide;
form3.LabeledEdit2.Hide;
form3.LabeledEdit3.hide;
form3.UpDown1.hide;
form3.UpDown2.hide;
form3.UpDown3.hide; end;
2:begin N4.Enabled:=true;
form3.LabeledEdit1.EditLabel.Caption:='Переменная a';
form3.LabeledEdit2.EditLabel.Caption:='Переменная b';
form3.LabeledEdit3.EditLabel.Caption:='Переменная c';
form3.LabeledEdit1.Show;
form3.LabeledEdit2.show;
form3.LabeledEdit3.show;
form3.LabeledEdit1.Clear;
form3.LabeledEdit2.Clear;
form3.LabeledEdit3.Clear;
form3.UpDown1.Show;
form3.UpDown2.show;
form3.UpDown3.show; end;
3:begin N4.Enabled:=true;
form3.LabeledEdit1.EditLabel.Caption:='Переменная a';
form3.LabeledEdit1.Show; //провал
form3.LabeledEdit2.Hide;
form3.LabeledEdit3.Hide;
form3.LabeledEdit1.Clear;
form3.UpDown1.Show;
form3.UpDown2.hide;
form3.UpDown3.hide;end;
4:begin N4.Enabled:=true;
form3.LabeledEdit1.EditLabel.Caption:='Переменная a';
form3.LabeledEdit1.Show;
form3.LabeledEdit2.hide;
form3.LabeledEdit3.hide;
form3.LabeledEdit2.Clear;
form3.UpDown1.show;
form3.UpDown2.hide;
form3.UpDown3.hide; end;
5:begin N4.Enabled:=true;
form3.LabeledEdit1.Hide;
form3.LabeledEdit2.Hide;
form3.LabeledEdit3.Hide;
form3.UpDown1.hide;
form3.UpDown2.hide;
form3.UpDown3.hide;end;
6:begin N4.Enabled:=true;
form3.LabeledEdit1.Hide;
form3.LabeledEdit2.hide;
form3.LabeledEdit3.hide;
form3.UpDown1.hide;
form3.UpDown2.hide;
form3.UpDown3.hide;end;
7:begin N4.Enabled:=true;
form3.LabeledEdit1.Hide;
form3.LabeledEdit2.hide;
form3.LabeledEdit3.hide;
form3.UpDown1.hide;
form3.UpDown2.hide;
form3.UpDown3.hide;end;
8:begin N4.Enabled:=true;
form3.LabeledEdit1.Hide;
form3.LabeledEdit2.hide;
form3.LabeledEdit3.hide;
form3.UpDown1.hide;
form3.UpDown2.hide;
form3.UpDown3.hide; end;
9:begin N4.Enabled:=true;
form3.LabeledEdit1.Show;
form3.LabeledEdit2.Hide;
form3.LabeledEdit1.Clear;
form3.UpDown1.show;
form3.UpDown2.hide;end;
end;
end;
procedure TForm1.N4Click(Sender: TObject); //Переход к Построению графика (в меню)
begin
form3.Show;
form1.Hide;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); //Закрытие формы
begin
A := Application.MessageBox ('Завершить программу?', 'Выход', mb_YesNo + mb_IconAsterisk);
If (A = idYes) then form4.close else Abort;
end;
procedure TForm1.N5Click(Sender: TObject); //Выход в меню
begin
A := Application.MessageBox ('Завершить программу?', 'Выход', mb_YesNo + mb_IconAsterisk);
If (A = idYes) then form4.close else Abort;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Form1.Left := (Screen.Width div 2) - (Form1.Width div 2); //Центрируем окно
Form1.Top := (Screen.Height div 2) - (Form1.Height div 2);
N2.Enabled:=false;
form3.LabeledEdit3.hide;
form3.UpDown3.hide;
label2.caption:='Подсказка: После выбора нужной функции'+#10#13+'нажмите кнопку "Далее", чтобы перейти к'+#10#13+'вводу переменных и построению графика'+#10#13+'функции';
end;
procedure TForm1.N7Click(Sender: TObject);
begin
form5.Show;
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; //Вызов справки по F1
Shift: TShiftState);
begin
if Key = vk_F1 then
ShellExecute(Application.Handle,'open',PChar('base/help.chm'), nil,nil, SW_SHOW);
end;
procedure TForm1.N6Click(Sender: TObject);
begin //Вызов справки
ShellExecute(Application.Handle,'open',PChar('base/help.chm'), nil,nil, SW_SHOW);
end;
end.
Form3
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, Math, Menus, ComCtrls, shellapi;
type
TForm3 = class(TForm)
GroupBox1: TGroupBox;
PaintBox1: TPaintBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
About1: TMenuItem;
N5: TMenuItem;
Label1: TLabel;
Label2: TLabel;
UpDown1: TUpDown;
UpDown2: TUpDown;
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
N6: TMenuItem;
N7: TMenuItem;
LabeledEdit3: TLabeledEdit;
UpDown3: TUpDown;
Label3: TLabel;
procedure FormActivate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure LabeledEdit1KeyPress(Sender: TObject; var Key: Char);
procedure LabeledEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure LabeledEdit2KeyPress(Sender: TObject; var Key: Char);
procedure LabeledEdit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure N7Click(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure N6Click(Sender: TObject);
procedure LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
procedure LabeledEdit3KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
x,y: real; // расчет х и у
x0,y0,tx,ty,i: Integer; // начало координат по х и у
m: Integer; // масштаб
info:string;
implementation
uses Unit1, Unit2, Unit4, Unit5;
{$R *.dfm}
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
form4.mediaplayer1.FileName:=ExtractFilePath(ParamStr(0))+'base/click.wav';
form4.mediaplayer1.Open;
form4.mediaplayer1.play;
if (Length(LabeledEdit1.text)=0) or (LabeledEdit1.Text='-') then LabeledEdit1.Text:='0'; //Если поле пустое, пишем туда 0
if (Length(LabeledEdit2.text)=0) or (LabeledEdit2.Text='-') then LabeledEdit2.Text:='0';
case form1.RadioGroup1.ItemIndex of
4:begin if (strtofloat(LabeledEdit1.text)<1) or (strtofloat(LabeledEdit1.text)>7) then begin showmessage('Числа от 1 до 7'); abort; end; end;
end;
PaintBox1.Canvas.Brush.Color:=clWhite; // Цвет фона белый
PaintBox1.Canvas.FillRect(ClientRect); // Очистка рабочей области PaintBox1
x0 := paintbox1.Width div 2; //узнаем центр формы по х
y0 := paintbox1.Height div 2; // узнаем центр формы по у
paintbox1.Canvas.Pen.Color:=clsilver; //Рисуем клетки
tx:=0;
ty:=0;
for i:=1 to 25 do begin
paintbox1.Canvas.MoveTo(tx,ty+10); //..Вертикально
paintbox1.Canvas.LineTo(tx+260,ty+10);
ty:=ty+10;
end;
tx:=0;
ty:=0;
for i:=1 to 25 do begin //..Горизонтально
paintbox1.Canvas.MoveTo(tx+10,ty);
paintbox1.Canvas.LineTo(tx+10,ty+260);
tx:=tx+10;
end;
paintbox1.Canvas.Pen.Color:=clblack; //...завершение
// чертим х ось
paintbox1.Canvas.MoveTo(0, y0);
paintbox1.Canvas.LineTo(paintbox1.Width, y0);
// чертим у ось
paintbox1.Canvas.MoveTo(x0, 0);
paintbox1.Canvas.LineTo(x0, paintbox1.Height);
// стрелка у
paintbox1.Canvas.Brush.Color := clblack;
paintbox1.Canvas.Polygon([Point(x0,0 ),Point(x0+3, 20), Point(x0-3, 20)]);
paintbox1.Canvas.Brush.Color := clwhite;
paintbox1.Canvas.TextOut(x0-30,10,'y');
// стрелка x
paintbox1.Canvas.Brush.Color := clblack;
paintbox1.Canvas.Polygon([Point(260,y0 ),Point(240, y0-3), Point(240, y0+3)]);
paintbox1.Canvas.Brush.Color := clwhite;
paintbox1.Canvas.TextOut(240,y0+20,'x');
m := 10; //задаем масштаб, иначе будет очень мелкий график
x := -20; // зададим диапазон от куда до куда будем считать наш график
// собственно прорисовывем
while x <= 20 do
begin
case form1.RadioGroup1.ItemIndex of
0:begin y:=strtofloat(LabeledEdit1.Text)*x+strtofloat(LabeledEdit2.Text); info:='y=kx+b';end;
1:begin y:=power(x,2); info:='y=x^2';end;
2:begin y:=strtofloat(LabeledEdit1.Text)*sqr(x)+strtofloat(LabeledEdit2.Text)*x+strtofloat(LabeledEdit3.Text); info:='y=a(x^2)+bx+c';end;
3:begin y:=strtofloat(labelededit1.text)/x; info:='y=a/x';end;
4:begin y:=power(strtofloat(LabeledEdit1.Text),x); info:='y=a^x';end;
5:begin y:=sin(x); info:='y=sin(x)';end;
6:begin y:=cos(x); info:='y=cos(x)';end;
7:begin y:=sin(x)/cos(x); info:='y=tg(x)';end;
8:begin y:=cos(x)/sin(x); info:='y=ctg(x)';end;
end;
paintbox1.canvas.TextOut(190,x0-100,info);
label2.Caption:='Подсказка:'+#10#13+'Ваша функция'+#10#13+info;
paintbox1.Canvas.Pixels[x0+Round(x*m), y0-Round(y*m)] := clGreen;
x := x + 0.01;
end;
end;
procedure TForm3.FormActivate(Sender: TObject);
begin
Form3.Left := (Screen.Width div 2) - (Form3.Width div 2);
Form3.Top := (Screen.Height div 2) - (Form3.Height div 2);
N4.Enabled:=false;
end;
procedure TForm3.N2Click(Sender: TObject); //Возврат к Выбору функции графика
begin
form1.Show;
form3.Hide;
label2.Caption:='';
end;
procedure TForm3.BitBtn3Click(Sender: TObject); //Возврат к Выбору функции графика (Кнопка)
begin
form4.mediaplayer1.FileName:=ExtractFilePath(ParamStr(0))+'base/click.wav';
form4.mediaplayer1.Open;
form4.mediaplayer1.play;
form1.Show;
form3.Hide;
label2.Caption:='';
end;
procedure TForm3.N5Click(Sender: TObject); //Выход в гл. меню меню
begin
A := Application.MessageBox ('Завершить программу?', 'Выход', mb_YesNo + mb_IconAsterisk);
If (A = idYes) then form4.close else Abort;
paintbox1.Refresh;
end;
procedure TForm3.LabeledEdit1KeyPress(Sender: TObject; var Key: Char); //Фильтр ввода
//Множество цифр, допустимых для ввода в edit:
const Digit: set of Char=['1'..'9', '0',#8];
//Множество символов, воспринимаемых как символ-разделитель:
Separator: set of Char=['/', '.', ',', 'ю', 'Ю', 'б', 'Б'];
begin
form4.mediaplayer1.FileName:=ExtractFilePath(ParamStr(0))+'base/keyboard.wav';
form4.mediaplayer1.Open;
form4.mediaplayer1.play;
if Length(LabeledEdit1.text)>2 then key:=#0; //Ограничивает максимальное число(до 999)
with (Sender as TLabeledEdit) do
begin
if (Key in Separator)
then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows
else
if (not(Key in Digit))
then Key:=#0;
if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Text)<>0))
then Key:=#0;
end;
end;
procedure TForm3.LabeledEdit2KeyPress(Sender: TObject; var Key: Char); //Запрет ввода лишнего B
//Множество цифр, допустимых для ввода в edit:
const Digit: set of Char=['1'..'9', '0',#8];
//Множество символов, воспринимаемых как символ-разделитель:
Separator: set of Char=['/', '.', ',', 'ю', 'Ю', 'б', 'Б'];
begin
form4.mediaplayer1.FileName:=ExtractFilePath(ParamStr(0))+'base/keyboard.wav';
form4.mediaplayer1.Open;
form4.mediaplayer1.play;
if Length(LabeledEdit2.text)>2 then key:=#0; //Ограничивает максимальное число(до 999)
with (Sender as TLabeledEdit) do
begin
if (Key in Separator)
then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows
else
if (not(Key in Digit))
then Key:=#0;
if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Text)<>0))
then Key:=#0;
end;
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction); //Закрытие формы
begin
A := Application.MessageBox ('Завершить программу?', 'Выход', mb_YesNo + mb_IconAsterisk);
If (A = idYes) then form4.close else Abort;
paintbox1.Refresh;
end;
procedure TForm3.LabeledEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var n: Integer;
S: String;
begin
if(LabeledEdit1.Text='-')then Abort;
with (Sender as TLabeledEdit) do
begin
if pos(DecimalSeparator, Text)=1 then
begin
Text:='0'+Text;
SelStart:=Length(Text);
end;
if (pos(DecimalSeparator, Text)<>Length(Text)) then
if Text[Length(Text)]<>'0' then
if FloatToStr(StrToFloat(Text))<>'0' then
Text:=FloatToStr(StrToFloat(Text));
if Key=8 then
begin
n:=SelStart;
S:=Text;
Delete(S, n, 1);
Text:=S;
end;
SelStart:=Length(Text);
end;
end;
procedure TForm3.LabeledEdit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var n: Integer;
S: String;
begin
if(LabeledEdit2.Text='-')then Abort;
with (Sender as TLabeledEdit) do
begin
if pos(DecimalSeparator, Text)=1 then
begin
Text:='0'+Text;
SelStart:=Length(Text);
end;
if (pos(DecimalSeparator, Text)<>Length(Text)) then
if Text[Length(Text)]<>'0' then
if FloatToStr(StrToFloat(Text))<>'0' then
Text:=FloatToStr(StrToFloat(Text));
if Key=8 then
begin
n:=SelStart;
S:=Text;
Delete(S, n, 1);
Text:=S;
end;
SelStart:=Length(Text);
end;
end;
procedure TForm3.BitBtn4Click(Sender: TObject); //Выход по кнопке
begin
A := Application.MessageBox ('Завершить программу?', 'Выход', mb_YesNo + mb_IconAsterisk);
If (A = idYes) then begin form3.Hide; form4.Close; end;
If (a = idNo) then Abort;
paintbox1.Refresh;
end;
procedure TForm3.FormContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
Handled:=true;
end;
procedure TForm3.N7Click(Sender: TObject); //О программе
begin
form5.Show;
end;
procedure TForm3.FormKeyUp(Sender: TObject; var Key: Word; //Хелп по F1
Shift: TShiftState);
begin
if Key = vk_F1 then
ShellExecute(Application.Handle,'open',PChar('base/help.chm'), nil,nil, SW_SHOW);
end;
procedure TForm3.N6Click(Sender: TObject); //Хелп
begin
ShellExecute(Application.Handle,'open',PChar('base/help.chm'), nil,nil, SW_SHOW);
end;
procedure TForm3.LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
//Множество цифр, допустимых для ввода в edit:
const Digit: set of Char=['1'..'9', '0',#8];
//Множество символов, воспринимаемых как символ-разделитель:
Separator: set of Char=['/', '.', ',', 'ю', 'Ю', 'б', 'Б'];
begin
form4.mediaplayer1.FileName:=ExtractFilePath(ParamStr(0))+'base/keyboard.wav';
form4.mediaplayer1.Open;
form4.mediaplayer1.play;
if Length(LabeledEdit3.text)>2 then key:=#0; //Ограничивает максимальное число(до 999)
with (Sender as TLabeledEdit) do
begin
if (Key in Separator)
then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows
else
if (not(Key in Digit))
then Key:=#0;
if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Text)<>0))
then Key:=#0;
end;
end;
procedure TForm3.LabeledEdit3KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var n: Integer;
S: String;
begin
if(LabeledEdit3.Text='-')then Abort;
with (Sender as TLabeledEdit) do
begin
if pos(DecimalSeparator, Text)=1 then
begin
Text:='0'+Text;
SelStart:=Length(Text);
end;
if (pos(DecimalSeparator, Text)<>Length(Text)) then
if Text[Length(Text)]<>'0' then
if FloatToStr(StrToFloat(Text))<>'0' then
Text:=FloatToStr(StrToFloat(Text));
if Key=8 then
begin
n:=SelStart;
S:=Text;
Delete(S, n, 1);
Text:=S;
end;
SelStart:=Length(Text);
end;
end;
end.
Form4
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, OleCtrls, SHDocVw, MSHTML, MPlayer,
jpeg, XPMan;
type
TForm4 = class(TForm)
Timer1: TTimer;
MediaPlayer1: TMediaPlayer;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
XPManifest1: TXPManifest;
WebBrowser1: TWebBrowser;
Label3: TLabel;
Timer2: TTimer;
Label4: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure WebBrowser1DownloadComplete(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
A:integer;
implementation
uses Unit1, Unit2, Unit3, Unit5;
{$R *.dfm}
procedure TForm4.WebBrowser1DownloadComplete(Sender: TObject); //Убрать из анимации лишнееа
var
Doc : IHTMLDocument2;
Element : IHTMLElement;
begin
Doc := IHTMLDocument2(TWebBrowser(Sender).Document);
if Doc = nil then Exit;
Element := Doc.body;
if Element = nil then Exit;
Element.style.borderStyle := 'none';
WebBrowser1.OleObject.document.body.style.overflowX := 'hidden';
WebBrowser1.OleObject.document.body.style.overflowY := 'hidden';
end;
procedure TForm4.Timer1Timer(Sender: TObject);
begin
timer1.Tag:=timer1.Tag-1;
case timer1.Tag of
0:begin timer1.Enabled:=false; form4.Hide;
form1.Show; end;
end;
end;
procedure TForm4.FormActivate(Sender: TObject);
begin
image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'base/1.jpg');
Form4.Left := (Screen.Width div 2) - (Form4.Width div 2);
Form4.Top := (Screen.Height div 2) - (Form4.Height div 2);
timer1.Tag:=8;
label1.Caption:='Построение графиков функций';
WebBrowser1.Navigate(ExtractFilePath(ParamStr(0))+'base/1.html');
end;
procedure TForm4.Timer2Timer(Sender: TObject);
beginabel3.Caption:=FormatDateTime('dd.mm.yyyy tt',now);
form1.Label3.Caption:=FormatDateTime('dd.mm.yyyy tt',now);
form3.Label3.Caption:=FormatDateTime('dd.mm.yyyy tt',now);
form5.Label2.Caption:=FormatDateTime('dd.mm.yyyy tt',now);
end;
end.
Form5
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, shellapi, XPMan;
type
TForm5 = class(TForm)
Image1: TImage;
Label1: TLabel;
Button1: TButton;
XPManifest1: TXPManifest;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
uses Unit1, Unit2, Unit3, Unit4;
{$R *.dfm}
procedure TForm5.Button1Click(Sender: TObject);
begin
form5.close;
end;
procedure TForm5.FormActivate(Sender: TObject);
begin
image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'base/1.bmp');
Form5.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;
procedure TForm5.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = vk_F1 then
ShellExecute(Application.Handle,'open',PChar('base/help.chm'), nil,nil, SW_SHOW);
end;
end.
Список использованных источников
- Фленов, М.Е. Библия Delphi. М.Е.Фленов, - СПб.:2004.-884с. .
- Фаронов, В.В. Программирование баз данных в Delphi 7. Учебный курс.В.В. Фаронов, - СПб.: Питер, 2006-261с. .
- Глушаков, С.В. Программирование в среде Delphi 7.0 2-е издание, дополненное и переработанное / С.В. Глушаков, А.Л. Клевцов. Харьков: Изд-во «Фолио»,2003. 528с
- Фаронов, В.В. Программирование баз данных в Delphi 7. Учебный курс.В.В. Фаронов, - СПб.: Питер, 2006-261с. .
Построение графиков функции