- •Введение
- •Состав курсовой работы
- •Задание на курсовую работу
- •Объем курсовой работы
- •Разработка алгоритмов
- •Разработка расчетного модуля
- •Разработка приложения
- •Составление описания приложения
- •Порядок выполнения курсовой работы.
- •Разработка расчетного модуля.
- •Создание описания данных.
- •Создание функций сохранения и чтения матрицы.
- •Разработка расчетных процедур и функций.
- •Отсортировать по возрастанию все строки матрицы.
- •Отладка процедур и функций расчетного модуля.
- •Разработка модуля главного окна приложения.
- •Разработка модуля окна редактирования матрицы.
- •Разработка окна информации о разработчике.
- •Разработка описания и инструкции пользователя.
- •Оформление пояснительной записки
- •Титульный лист, содержание
- •Описание приложения
- •Алгоритмы, исходные данные и результаты расчета
- •Текст модулей проекта
- •Список использованной литературы
- •Приложение. Таблица вариантов
- •Литература.
11
Nmin := J;
for K := J+1 to Tard.NJ-1 do
if Tard.Data[I,Nmin]>Tard.Data[I,K] then Nmin := K;
Vt := Tard.Data[I,Nmin]; Tard.Data[I,Nmin] := Tard.Data[I,J]; Tard.Data[I,J] := Vt;
end; end;
end;
Отладка процедур и функций расчетного модуля.
Отладку можно осуществлять двумя путями первый отложить ее до разработки главного приложения. А можно создать набор консольных приложений
ипроводить отладку с их помощью.
Влюбом случае при отладке модуля следует таким образом подбирать наборы данных, чтобы произвести генерацию всех сбойных ситуаций в нем.
2.2 Разработка модуля главного окна приложения.
Прежде всего, необходимо создать новую папку, в которой будет храниться проект, и дать ей понятное название. После чего можно в среде разработки создать новое приложение и сохранить его в эту папку. Модулю главного окна следует дать имя Main. Необходимо помнить, что среда разработки Delphi не позволяет давать русские имена проекту приложения и его отдельным модулям. Поэтому если разработчик желает иметь русское имя исполняемого файла, его можно задать в проводнике после компиляции проекта.
Затем можно приступать к разработке интерфейса главного окна приложения. Вид главного окна приложения в конструкторе окна с указанием его основных компонентов приведен на рис.1.
В него добавлены следующие основные компоненты:
MainMenu1: TMainMenu – главное меню приложения. Структура пунктов главного меню с именами и названиями приведена на рис.2.
StatusBar1: TstatusBar – строка состояния приложения. В нем отражаются текст контекстной подсказки (Hint) и имя файла с матрицей;
ResultsMm: Tmemo – поле редактирования многострочного текста. В него осуществляется вывод результатов расчета и сообщений об ошибках;
OpenDialog: TopenDialog – стандартный диалог открытия файла. Используется для задания имени открываемого файла;
SaveDialog: TSaveDialog
SaveDialog1: TSaveDialog – стандартные диалого сохранения файла. Используются для задания имени сохраняемого файла с матрицей и результатами расчетов.
12
OpenDialog
MainMenu1
SaveDialog
SaveDialog1
ResultsMm
StatusBar1
Рис. 1. Вид главного окна приложения (MainFm).
Рис. 2. Структура главного меню приложения (MainMenu1).
После этого создаем необходимые обработчики событий компонент. Полный текст модуля главного окна приложения приведен в примере. Для экономии места обработчики событий, смысл которых очевиден, в данных методических указаниях не приводятся. Описание назначений обработчиков событий критичных по коду рассмотрены далее.
13
Обработчик FormCreate выполняется при создании главного окна приложения (при его запуске), в нем описаны действия по инициализации приложения. В частности динамически назначается обработчик события Application.OnHint. Значению полей InitialDir всех стандартных диалогов открытия и сохранения присваивается значение, равное названию папки из которой запущено приложение.
procedure TMainFm.FormCreate(Sender: TObject); begin
AddData := True; Application.OnHint := MyHintProc;
OpenDialog.InitialDir := ExtractFilePath(Application.ExeName); SaveDialog.InitialDir := ExtractFilePath(Application.ExeName); SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName);
end;
Обработчик события загрузки матрицы из файла (событие OnClick пункта меню OpenMi). В нем реализован защищенный вызов разработанной в модуле Count функции LoadMatrFromFile, в случае неудачи пользователю выводится сообщение об ошибке. Имя файла выбирается пользователем с помощью стандартного диалога открытия файла. Кроме того, пользователь может отменить загрузку.
procedure TMainFm.OpenMiClick(Sender: TObject); begin
if OpenDialog.Execute then begin try
LoadMatrFromFile(Mt,OpenDialog.FileName); FileName := OpenDialog.FileName;
StatusBar1.Panels[0].Text := ExtractFileName(FileName); except
on E:ELoadFile do begin MessageDlg(E.Message,mtError,[mbOK],0);
end; end;
end;
end;
Следующие обработчики позволяют выполнять расчеты (пункты меню Count1, Count2, Count3). В начале каждого из них проверяется значение переменной AddData, которое говорит о необходимости добавлять в отчет исходную матрицу. Результаты расчета выводятся в компонент ResultsMm. Все функции и процедуры, которые могут сгенерировать ситуацию исключения, выполняются в защищенном блоке. В случае, когда результаты расчета являются массивы, перед окончанием работы их следует удалить (сделать нулевого размера).
procedure TMainFm.Count1Click(Sender: TObject);
14
var
R : Double; begin
if AddData then begin
ResultsMm.Lines.Add(' Исходная матрица'); AddMatrToList(ResultsMm.Lines,Mt,' ',False);
end; try
R := GetSrArPol(Mt); except
on E:ENoPol do begin ResultsMm.Lines.Add(E.Message); Exit;
end; end;
ResultsMm.Lines.Add(' Среднее арифметическое положительных'+ ' элементов');
ResultsMm.Lines.Add(' R = '+FloatToStrF(R,ffFixed,8,3)); end;
procedure TMainFm.Count2Click(Sender: TObject); var
Vt : TVect;
I : Integer; begin
if AddData then begin
ResultsMm.Lines.Add(' Исходная матрица'); AddMatrToList(ResultsMm.Lines,Mt,' ',False);
end; GetVectMin(Mt,Vt);
ResultsMm.Lines.Add(' Минимальные значения строк матрицы'); for I := 0 to Vt.N-1 do
ResultsMm.Lines.Add('
'+FloatToStrF(Vt.Data[I],ffFixed,8,3));
SetLength(Vt.Data,0); end;
procedure TMainFm.Count3Click(Sender: TObject); var
D : TMatr; begin
if AddData then begin
ResultsMm.Lines.Add(' Исходная матрица'); AddMatrToList(ResultsMm.Lines,Mt,' ',False);
end; SortByRow(Mt,D);
ResultsMm.Lines.Add(' Матрица отсортированная по строкам'); AddMatrToList(ResultsMm.Lines,D,' ',False); SetLength(D.Data,0,0);
end;
15
Создание новой матрицы (пункт меню NewMi). При создании матрицу делаем размером 1 на 1. После чего вызываем процедуру редактирования, которая описана в модуле Edit.
procedure TMainFm.NewMiClick(Sender: TObject); begin
SetLength(Mt.Data,0,0); Mt.NI := 1;
Mt.NJ := 1; SetLength(Mt.Data,1,1); EditMatr(Mt);
FileName := ''; end;
Сохранение матрицы в файл (пункт меню SaveMi). Здесь выполнена блокировка ввода пустого имени файла. В этом случае вызывается стандартный диалог сохранения. Имя сохраненного файла выводится на строку состояния.
procedure TMainFm.SaveMiClick(Sender: TObject); var
IsOk : Boolean; begin
IsOk := True;
if FileName = '' then begin
IsOk := SaveDialog.Execute; if IsOk then
FileName := SaveDialog.FileName; end;
if IsOk then begin
SaveMatrToFile(Mt,SaveDialog.FileName); StatusBar1.Panels[0].Text := ExtractFileName(FileName);
end; end;
Вызов окна с информацией о разработчике (пункт меню AboutMi). Окно следует создавать динамически, показывать в модальном режиме и после закрытия сразу уничтожать. Переменную типа класс окна, рекомендуется описывать локальной. Разработка оконной формы рассмотрена в п.2.4.
procedure TMainFm.AboutMiClick(Sender: TObject); var
AboutBox: TAboutBox; begin
AboutBox := TAboutBox.Create(Application); AboutBox.ShowModal;
AboutBox.Free; end;