Курсовая работа: Программная реализация разложения временного процесса в тригонометрический ряд
Рисунок 3.9 - Панель инструментов
Также имеется четыре управляющие кнопки, показанные на рисунке 3.10.
Рисунок 3.10 - Управляющие кнопки
Кнопка «Вычислить» обеспечивает расчет состояния системы и вывод соответствующей информации. Кнопка «График» обеспечивает появление окна с графиком, т.е. имеется возможность просмотра результатов разложения временного процесса в тригонометрический ряд при заданном значении w. Можно просмативать сразу как несколько графиков (рисунок 3.11), так и один для определенного значения w (рисунок 3.12).
Рисунок 3.11 – График разложения временного процесса в тригонометрический ряд при заданном значении w=3
Рисунок 3.12 – График разложения временного процесса в тригонометрический ряд при заданном значении w=3 и w=1
Кнопка «Очистить» очищает область построения графиков. Для закрытия окна используется кнопка «Закрыть».
Для выхода из программы следует нажать кнопку «Выход».
4. Методика испытаний
Целью проведения испытаний является проверка работоспособности (надежности) программы при различных условиях ее функционирования.
Программа должна обеспечивать корректность ввода исходных данных (путем осуществления соответствующих проверок и информирования пользователя о возникших неточностях в работе), а также получение непротиворечивого результата.
Для демонстрации работоспособности программы необходимо провести ряд испытаний с различными начальными условиями. Для обеспечения нормальной работы программы требуется наличие соответствующих DLL, а также приложений Word, Excel, PowerPoint.
Для использования COM-сервера, он должен быть предварительно зарегистрирован в системе. Тестовые примеры выполнялись в среде операционной системы Windows XP Profesional при использовании процессора Intel Pentium 4 2.4 GHz и разрешении экрана 1024*768. Для работы с программой необходимо также наличие клавиатуры и манипулятора типа «мышь».
Испытание проведем с начальными данными, указанными в задании.
Начальные данные: при w=3
Результаты этого вычислительного эксперимента приведены на рисунках 4.1, 4.2.
Рисунок 4.1 -Тестовая таблица №1
Рисунок 4.2 - Тестовый график №1
Если w не выбрано, выводится сообщение об ошибке (рисунок 3.5).
Произведем также испытание при других значениях исходных данных и с использованием разработанного COM-объекта.
Начальные данные: при w=5
Полученные результаты
Рисунок 4.3 - Тестовый график №2
Рисунок 4.4 - Тестовая таблица №2
Таким образом, проведенное тестирование программы не выявило сбойных ситуаций и некорректностей в ее работе. Следует считать, что в целом программа протестирована, отвечает поставленным требованиям и вполне работоспособна.
Заключение
В ходе выполнения курсовой работы:
· были закреплены знания по курсу «Конструирование программ и языки программирования»;
· приобретен опыт при разработке объектно-ориентированных программ;
· изучены принципы создания динамических библиотек;
· изучены и реализованы способы создания клиент-серверных приложений на базе COM-технологий;
· освоены методы передачи данных между приложениями;
· изучены возможности создания справочной системой высокой степени сложности и различных форматов.
При разработке программы использовался модульный принцип программирования. Такая структура программы позволяет в дальнейшем модифицировать отдельные её части без нарушения работоспособности и потери функциональности приложения.
Программа имеет достаточно ясный и понятый дружелюбный пользовательский интерфейс, обеспечивающий удобство в работе и обеспечивающий получение необходимой пользователю информации с наименьшими затратами времени.
Таким образом, разработанное в ходе выполнения курсовой работы приложение является законченным программным продуктом.
Программа может быть использована для физического разложения временного процесса в тригонометрический ряд.
Литература
1. Фаронов В.В. Delphi 6. Учебный курс.-М.: Издатель Молгачева С.В., 2001.-672с.
2. Елмакова Н., Трепалин С., Тенцер А. Delphi 6 и технология COM.-СПб.: Питер, 2002. – 640 с.
3. Федоров А.. Delphi 5.0 для всех. -М.: Тоо фирма “КомпьютерПресс”, 1998. - 464 с.
4. Марко Кэнту. Delphi 5 для профессионалов.-СПб.: Питер. 2001. – 944 с.
5. Бобровский С. Delphi 5: учебный курс- СПб: Издательство «Питер», 2000.- 640с.
6. А.М.Епанешников, В.А.Епанешников Программирование в среде Delphi.-М.:»Диалог МИФИ», 1998.
Приложение
Файл проекта VremRiad.dpr
program VremRiad;
uses
Forms,Windows,Classes,Dialogs,SysUtils,
UnitMain in 'UnitMain.pas' {Form1},
UnitRiad in 'UnitRiad.pas',
UComRiad in 'UComRiad.pas',
UCom_Tlb in 'UCom_Tlb.pas',
UnitGraphic in 'UnitGraphic.pas' {FormGraphic},
VremRiad_TLB in 'VremRiad_TLB.pas';
{$R *.TLB}
//******************************************
Type
//Процедурный тип для функции, вызываемой из DLL
TProc=procedure(AOwner:TComponent);
Var
Handle : LongWord; //Дескриптор DLL
ShowPrompt : tproc; //Переменная для функции
//*******************************************
{$R *.res}
begin
Application.Initialize;
//Загрузка иконки
Application.Icon.LoadFromFile('Prompt.ico');
//*****Загрузка библиотеки и показ заставки******//
Handle:= LoadLibrary('Prompt.dll');
if Handle <> 0 then
begin
//Получить адрес функции из библиотеки
@ShowPrompt:= GetProcAddress(Handle, PChar('ShowPrompt'));
ShowPrompt(Application); //Показать заставку
FreeLibrary(Handle); //Удалить библиотеку
end
else ShowMessage('Не найдена библиотека Prompt.dll');
//***********************************************//
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TFormGraphic, FormGraphic);
Application.Run;
end.
Файл головного модуля UnitMain.pas
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ToolWin, ComCtrls, XPMan, ImgList, Grids,
IniFiles, Clipbrd, WordXP, Math, ShellAPI, ExtCtrls, msppt8,
UCom_Tlb, ComObj, MSPpt2000, PowerPointXP, Activex, OleServer,
Buttons;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
RadioGroup1: TRadioGroup;
BitBtn1: TBitBtn;
Panel3: TPanel;
BitBtn2: TBitBtn;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N6: TMenuItem;
BitBtn3: TBitBtn;
N7: TMenuItem;
StringGrid1: TStringGrid;
Label9: TLabel;
Label10: TLabel;
BitBtn4: TBitBtn;
PowerPointApplication1: TPowerPointApplication;
Presentation: TSpeedButton;
N8: TMenuItem;
Word1: TSpeedButton;
Excel1: TSpeedButton;
N9: TMenuItem;
EXcel2: TMenuItem;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
procedure BitBtn3Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure PresentationClick(Sender: TObject);
procedure Word1Click(Sender: TObject);
procedure Excel1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
// Procedure TFormMain.PresentationClick(Sender: TObject);
private
{ Private declarations }
public
IniFileName : string; //Имя файла инициализации
procedure ReportExcel(AStringGrid : TStringGrid); //Передать отчет в Excel
procedure ReportWord (AStringGrid : TStringGrid); //Передать отчет в Word
{ Public declarations }
end;
var
Form1: TForm1;
Flag : bool; //Флаг определения вида используемого объекта
const x=1;
const P=500;
implementation
uses UnitRiad, UnitGraphic;
{$R *.dfm}
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormActivate(Sender: TObject);
var i:integer;
begin
//По умолчанию установить работу с обычным (классическим) объектом
Flag:= false;
//Имя Ini-файла сохранения параметров
IniFileName:= GetCurrentDir+'\Riad.ini';
//Создать обычный объект
Riad:= TRiad.Create(IniFileName);
//Считать данные из Ini-файла
Riad.ReadFromIniFile;
//Вычисление и вывод данных в таблицу
Riad.Table(StringGrid1);
StringGrid1.Cells[0,0]:='Номер' ;
StringGrid1.Cells[1,0]:='Время(с)';
StringGrid1.Cells[2,0]:='F{t} при w=1';
StringGrid1.Cells[3,0]:='F{t} при w=3';
StringGrid1.Cells[4,0]:='F{t} при w=5';
for i:=1 to 201 do
StringGrid1.Cells[0,i]:=IntToStr(i) ;
for i:=0 to 201 do
begin
StringGrid1.Cells[1,i+1]:=FloatToStr(0.5*i)
end;
label10.Caption:='';
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
begin
Riad.SetW();
//Вычисление и вывод данных в таблицу
Riad.Table(StringGrid1);
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
var i:integer;
begin
for i:=0 to 201 do
begin
StringGrid1.Cells[2,i+1]:='';
StringGrid1.Cells[3,i+1]:='';
StringGrid1.Cells[4,i+1]:='';
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
FormGraphic.Show;
end;
procedure TForm1.N4Click(Sender: TObject);
Type
//Процедурный тип для вызова процедуры из DLL
TProc = procedure(AOwner:TComponent);
var
Handle : LongInt; //Дескриптор библиотеки
ShowAbout : TProc; //Переменая для вызова функции из DLLbegin
begin
//Получить значение дескриптора загруженной библиотеки
Handle:=LoadLibrary('About.dll');
//Проверить существование библиотеки
if Handle = 0 then
begin
ShowMessage('Библиотека не найдена : About.dll');
exit;
end;
//Получить адрес вызываемой функции
@ShowAbout:= GetProcAddress(Handle, PChar('ShowAbout'));
//Вызов функции, показывающей форму About
ShowAbout(Application);
FreeLibrary(Handle); //Выгрузка библиотеки
end;
procedure TForm1.PresentationClick(Sender: TObject);
var
name : string;
pw : TOleEnum;
begin
//Запуск презетации
Name:= ExtractFileDir(Application.ExeName) + '\Vremennoj process.ppsx';
PowerPointApplication1.Activate;
PowerPointApplication1.Presentations.Open(Name, pw, pw, pw);
PowerPointApplication1.Presentations.Item(1).SlideShowSettings.Run;
//Другой способ запуска
// ShellExecute(Application.MainForm.Handle,PChar('Open'),
// PChar('Riad.pps'), NIL, PChar(''), sw_ShowNormal);
end;//TFormMain.PresentationClick
procedure TForm1.Word1Click(Sender: TObject);
begin //Отчет в Word
ReportWord(StringGrid1);
end;//TFormMain.Word1Click
Procedure TForm1.ReportExcel(AStringGrid : TStringGrid);
//Отчет в Excel
var
Excel : variant;
WorkBook : variant; //Рабочая книга
i, j : integer;
begin
//Cоздать форму для графика
FormGraphic:= TFormGraphic.Create(Form1);
//Создать Соm-объект
Excel:= CreateOleObject('Excel.Application');
//Отключить реакцию на внешние события-для ускорения процесса передачи данных
Excel.Application.EnableEvents:= false;
//Добавить рабочую книгу
WorkBook:= Excel.WorkBooks.Add;
//Изменение ширины столбцов
for j:=0 to AStringGrid.ColCount do
WorkBook.WorkSheets[1].Columns[j+1].ColumnWidth:= 10;
//Вывод строки
WorkBook.WorkSheets[1].Cells[1,1]:= 'Отчет о колебаниях стержня';
//Заполнение ячеек таблицы Excel значениями из StringGrid
//Нумерация ячеек в Excel начинается с 1 и идет в формате строка-столбец
for i:= 1 to AStringGrid.RowCount + 1 do
for j:= 0 to AStringGrid.ColCount do
WorkBook.WorkSheets[1].Cells[i+1, j+1]:= AStringGrid.Cells[j, i-1];
//Вставит изображение графика в Excel
WorkBook.WorkSheets[1].Shapes.AddPicture(GetCurrentDir+'\PictureWord.bmp',
True, True, 0, (AStringGrid.RowCount+2)*12.5+10, FormGraphic.Chart1.Width*0.8,
FormGraphic.Chart1.Height*0.8);
//Уничтожить форму
FormGraphic.Release;
FormGraphic:= NIL;
//Показать Excel
Excel.Visible:=true;
end;//TFormMain.ReportExcel
Procedure TForm1.ReportWord(AStringGrid : TStringGrid);
//Отчет в Word
var
i,j,k : integer;
a,b,c : OleVariant;
wa : TWordApplication; //WordApplication
wd : TWordDocument; //WordDocument
begin
//Создать форму для графика
FormGraphic:= TFormGraphic.Create(Form1);
//Создать com-объект
wa:= TWordApplication.Create(Form1);
//Подключиться к серверу Word
wa.Connect;
//Добавить новый документ
wa.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
wd:= TWordDocument.Create(Form1);
wd.ConnectTo(wa.ActiveDocument);
//Отменить проверку правописания
wa.Options.CheckSpellingAsYouType:=False;
//Отменить проверку орфографии
wa.Options.CheckGrammarAsYouType:=False;
a:= 0;
b:= 0;
wd.Range.InsertAfter('Отчет');
c:= Length(wd.Range.Text) - 1;
a:= c;
b:= c + 10;
//Добавить таблицу
wd.Tables.Add(wd.Range(a), AStringGrid.RowCount,
AStringGrid.ColCount, EmptyParam, EmptyParam);
k:= 1;
//Перенести данные из StringGrid в таблицу
for i:= 1 to AStringGrid.RowCount do
for j:= 1 to AStringGrid.ColCount do
wd.Tables.Item(k).Cell(i,j).Range.Text:= AStringGrid.Cells[j-1, i-1];
//Загрузить изображение в Image
FormGraphic.Image1.Picture.LoadFromFile('PictureWord.bmp');
//Поместить изображение в буфер обмена
Clipboard.Assign(FormGraphic.Image1.Picture);
c:= Length(wd.Range.Text) - 1;
a:= c;
//Вставить изображение из буфера обмена
wa.Selection.Paste;
//Показать Word
wa.Visible:= true;
//Уничтожить форму
FormGraphic.Release;
FormGraphic:= NIL;
end;//TFormMain.ReportWord
procedure TForm1.Excel1Click(Sender: TObject);
begin
ReportExcel(StringGrid1);
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin