Цикл разработки программного обеспечения включает в себя стадию тестирования. На данном этапе проводится проверка работоспособности программы, причем не только в нормальных условиях, но и в критических - нехватка системных ресурсов, намеренные ошибки во входных данных и пр. Также проверятся корректное и своевременное освобождение всех ресурсов, занятых приложением. При нахождении недочетов в программе они исправляются - пересматривается исходный код соответствующих модулей, находятся и исправляются недоработки.
При своей работе программа потребляет определенное количество ресурсов системы, таким образом, для ее запуска необходимо, чтобы данные ресурсы были свободны и предоставлены ей для работы. Из них программе необходимы свободное место на жестком диске компьютера для размещения файлов непосредственно самой программы, файла базы данных и вспомогательных файлов, а также используемых библиотек; определенное количество оперативной памяти для запуска процесса программы; процессор компьютера, который используется для нужд вычислений; из программного обеспечения необходима любая 32-разрядная версия Windows, под управлением которой работает приложение.
Программа разработана на компьютере, который и является оптимальным для ее запуска. Он имеет следующие характеристики:
процессор AMD Duron 800MGh;
128 Mb оперативной памяти SDRAM;
видеокарта GeForce 4MX 64 Mb памяти;
20 Gb винчестер Samsung SP0212N, из них на системном диске свободны 200 Mb для размещения файла виртуальной памяти;
CD-RW Teac CRX, который используется для инсталляции программы;
3,5" флоппи-дисковод, который также может быть использован для установки приложения;
17" монитор с разрешением 1024x768 и глубиной цвета 32 бита на пиксель;
|
операционная система Windows XP.
Если компьютер следует вышеперечисленным характеристикам, либо имеет близкие к ним, программа корректно запустится и будет функционировать.
В данном решении тестирование проводилось несколькими способами. Во-первых, в диалоговых окнах добавления и редактирования записей вводились неправильные значения и проверялась реакция программы, в частности, в числовые поля вводились символы и т.д. Также производились попытки изменить либо удалить записи в момент, когда никакой текущей записи не выбрано.
В момент прохождения стадии тестирования в программе были найдены и устранены мелкие недостатки.
После тестирования были построены финальная версия программы и программа-установщик. Данное приложение готово к использованию.
В ходе испытаний была доказана полная совместимость и правильность работы программного средства с Windows ХР.
Заключение
Разработанный пакет программного обеспечения позволит ускорить, автоматизировать работу по нахождению значений временного поведения системы: колебаний массы с гидравлическим демпфером.
Программный продукт реализован на языке высокого уровня Borland Delphi 7.0.
В разработанном программном средстве реализовано использование динамической библиотеки DLL, организован экспорт данных в электронный таблицы Microsoft Excel. К программному средству прилагается справочная информация по использованию.
программа гидравлический демпфер delphi
Список использованной литературы
1. А.М. Епанешников, В.А. Епанешников Программирование в среде Delphi.-М.:»Диалог МИФИ», 1998.
|
2. Бобровский С. Delphi 5: учебный курс- СПб: Издательство «Питер», 2000.- 640с.
. Гринчишин Я.Т. и др. Алгоритмы и программы на Бейсике: Учеб. Пособие для студентов пед. Ин-тов по физ.-мат. Спец./Я.Т.Гринчишин, В.И. Ефимов, А.Н. Ломакович.-М.: Просвещение, 1988.- 160 с.
. Дарахвелидзе П.Г., Марков Е.П. Delphi 4.-СПб.: БХВ-Санкт-Петербург, 1999.- 816 с.
. Елмакова Н., Трепалин С., Тенцер А. Delphi 6 и технология COM.-СПб.: Питер, 2002. - 640 с.
6. Марко Кэнту. Delphi 5 для профессионалов.-СПб.: Питер. 2001. - 944 с.
7. Фаронов В.В. Delphi 6. Учебный курс.-М.: Издатель Молгачева С.В., 2001.-672с.
8. Федоров А.. Delphi 5.0 для всех. -М.: Тоо фирма “КомпьютерПресс”, 1998. - 464 с.
Приложения
Листинг программных модулей
// Project1.dpr - файл проекта.
program Project1;,in 'Unit1.pas' {Form1},in 'Unit2.pas' {Logo},_class in 'Kursuv_class.pas';
{$R *.res}.Initialize;.CreateForm(TForm1, Form1);.CreateForm(TLogo, Logo);.Run;.
// Unit1.pas - главная форма программы.
// главная форма программы.
unit Unit1;
interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons, Menus, ToolWin, ActnMan, ActnCtrls, Grids, IniFiles,_class, ComCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart,, PowerPointXP, ExcelXP, OleServer, WordXP, ComObj, ActiveX,ShellAPI;
// процедура вызова окна о программе из DLL
procedure ShowAbout(Handle: THandle)stdcall;
function N_dann(u,l,Q_,z,H,d:double):double;
type= class(TForm): TBitBtn;: TMainMenu;: TPopupMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TStringGrid;: TGroupBox;: TEdit;: TLabel;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TStatusBar;: TToolBar;: TMenuItem;: TChart;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TImageList;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TImageList;: TImageList;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TWordApplication;: TExcelApplication;: TPowerPointApplication;: TWordDocument;: TToolButton;: TToolButton;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TLabel;: TLabel;: TLabel;: TEdit;: TLabel;: TLabel;: TLabel;: TEdit;: TLabel;: TEdit;: TLabel;: TEdit;: TEdit;: TLabel;: TLabel;: TEdit;: TLabel;: TLabel;: TEdit;: TLabel;: TLineSeries;FormShow(Sender: TObject);Button2Click(Sender: TObject);Button4Click(Sender: TObject);ToolButton1Click(Sender: TObject);ToolButton2Click(Sender: TObject);ToolButton4Click(Sender: TObject);ToolButton6Click(Sender: TObject);ToolButton5Click(Sender: TObject);ToolButton11Click(Sender: TObject);ToolButton13Click(Sender: TObject);ToolButton12Click(Sender: TObject);ToolButton10Click(Sender: TObject);N5Click(Sender: TObject);N4Click(Sender: TObject);N15Click(Sender: TObject);N16Click(Sender: TObject);N17Click(Sender: TObject);N12Click(Sender: TObject);
|
{ Private declarations }ShowHint(Sender: TObject);Proverka(Sender: TObject):boolean;
{ Public declarations };
//---------------------------------------------: TForm1;: TKurs; // объявление созданного класса
// процедура вызова окна о программе из DLL
procedure ShowAbout; external 'ProjectDLL.DLL' index 10;N_dann(u,l,Q_,z,H,d:double):double; external 'ProjectDLL.DLL' index 11;Unit2, about3;
{$R *.dfm}
// перед показом клавной формы, показывается заставка
// и проводится настройка окна программы.
procedure TForm1.FormShow(Sender: TObject);.showmodal;.OnHint:=ShowHint;1.ColWidths[2]:=180;
end;
// функция проверки заполнеия исходными данными полей на форме
function TForm1.Proverka(Sender: TObject):boolean;(Form1.Edit100.Text='') or (Form1.Edit107.Text='')or(Form1.Edit108.Text='')or
(Form1.Edit101.Text='') or (Form1.Edit102.Text='') or(Form1.Edit109.Text='')or
(Form1.Edit103.Text='') or (Form1.Edit104.Text='') or
(Form1.Edit105.Text='') or (Form1.Edit106.Text='') then:=false:=true;;
// при нажатии Справка о программе либо на панели инструментов соответствующей кнопки
procedure TForm1.N4Click(Sender: TObject);
ShowAbout(Handle);
end;
// при нажати записи в ini файл происходить вызов метода созданного класса.
procedure TForm1.Button2Click(Sender: TObject);
Kurs.WriteIniFile;
end;
// при нажатии кнопки закрытие программы
procedure TForm1.N5Click(Sender: TObject);;;
// очистка графикаTForm1.Button4Click(Sender: TObject);
Series1.Clear;
end;
// включение контекстной помощи (передача в строку состояния, справочной информации)
procedure TForm1.ShowHint(Sender: TObject);.SimpleText:=Application.Hint;;
// запуск презентации программы.TForm1.N12Click(Sender: TObject);: OLEVariant;: String;:=ExtractFilePath(Application.ExeName)+'Prezent.ppt';:= CreateOleObject('PowerPoint.Application');('Error...');;;.Visible:= True;.Presentations.Open(FilePr, False, False, True);;
// чтение ini файла.TForm1.ToolButton1Click(Sender: TObject);.ReadIniFile;;
//TForm1.ToolButton2Click(Sender: TObject);.WriteIniFile;;
//процедура расчета значений системыTForm1.ToolButton4Click(Sender: TObject);Proverka(Sender) then.Raszet;;
// Процедура очистка всех полей, графика, и таблицы результатов
procedure TForm1.ToolButton6Click(Sender: TObject);.Clear;.RowCount:= 1;.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';110.Text:='';
end;
// очистка полей с исходной информацией
procedure TForm1.N15Click(Sender: TObject);.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';110.Text:='';
end;
// очистка таблицы с результатами
procedure TForm1.N16Click(Sender: TObject);.RowCount:= 1;;
// очистка графикаTForm1.N17Click(Sender: TObject);.Clear;;
// рисование графика.TForm1.ToolButton5Click(Sender: TObject);Proverka(Sender) then.Raszet;.Draw;;;
// запуск Ворда и пояснительной записки
procedure TForm1.ToolButton11Click(Sender: TObject);,ConfirmConversions,ReadOnly,AddToRecentFiles,,PasswordTemplate,Revert,WritePasswordDocument,,Format,EmptyParam: OleVariant;.Connect;.Visible:=true;
// открываем шаблон документа:=ExtractFilePath(Application.ExeName)+'ПЗ.doc';:=False;:=False;:=False;
PasswordDocument:='';:='';:=False;
WritePasswordDocument:='';:='';:=0;.Documents.Open(FileName,ConfirmConversions,ReadOnly,,PasswordDocument,PasswordTemplate,Revert,WritePasswordDocument,,Format,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
// связываем компонент с существующим интерфейсом.ConnectKind:=ckAttachToInterface;.ConnectTo(WordApplication1.ActiveDocument);;
// запуск презентацииTForm1.ToolButton13Click(Sender: TObject);: OLEVariant;: String;:=ExtractFilePath(Application.ExeName)+'Prezent.ppt';:= CreateOleObject('PowerPoint.Application');('Error...');;;.Visible:= True;.Presentations.Open(FilePr, False, False, True);;
// сооздание документа Excel и перенос в него таблицы результатов
procedure TForm1.ToolButton12Click(Sender: TObject);, Sheet, Colum, Chart:Variant;, i,n: integer;xl3DColumn=4;=2;
begin
// создание документа. Лист с именем Отчет
XLApp:= CreateOleObject('Excel.Application');.Visible:= True;.Workbooks.Add(-4167);.Workbooks[1].WorkSheets[1].Name:='Отчет';:=XLApp.Workbooks[1].WorkSheets['Отчет'].Columns;.Columns[3].ColumnWidth:=30;:=XLApp.Workbooks[1].WorkSheets['Отчет'];:=StringGrid1.RowCount;
// перенос результатовi:=1 to n-1 do.Cells[i+1,1]:=StringGrid1.Cells[0,i];.Cells[i+1,2]:=StringGrid1.Cells[1,i];.Cells[i+1,3]:=StrtoFloat(StringGrid1.Cells[2,i]);;
// добавление графика в таблицу Ексель
XLApp.Charts.Add;.Charts[1].Activate;:=XLApp.Charts.Item[1];.ChartType:=xl3DColumn;.SetSourceData(Source:=XLApp.ActiveWorkbook.Sheets.Item['Отчет'].Range['B1:C1000'],:=xlColumns);
end;
// вызов справочной информации
procedure TForm1.ToolButton10Click(Sender: TObject);(Handle, 'open', '1.chm',nil, nil, SW_SHOWNORMAL);;.
// Unit2.pas модуль заставкиUnit2;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, jpeg, StdCtrls,Registry;= class(TForm): TTimer;: TImage;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;Timer1Timer(Sender: TObject);FormCreate(Sender: TObject);FormKeyPress(Sender: TObject; var Key: Char);
{ Private declarations }
{ Public declarations };: TLogo;
{$R *.dfm}
// по истечению таймера заставка закрывается. таймер на 5 сек.
procedure TLogo.Timer1Timer(Sender: TObject);
begin;;
// форма заставки когда заставка созданна она должна закрыться
procedure TLogo.FormCreate(Sender: TObject);
begin;;
// форма заставки если нажата клафиша закрыть заставку
procedure TLogo.FormKeyPress(Sender: TObject; var Key: Char);;;
.
// Kursuv_class.pas созданный класс
// созданный класс
unit Kursuv_class;
interface= object,tk,hag:double;
// p,k,m,Q,h:double;,m1,m2,q0,q,l,u,H,k,Mas,z,d:double;
c_,n_,Q_,w_,A_,T_,V_,wt:double;, C1, C2:double;g_f(t: double):double;
{ Private declarations }Create;ReadIniFile;WriteIniFile;Raszet;Draw;
{ Public declarations };RoundEx(chislo: double; Precision: Integer): string;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons, Menus, ToolWin, ActnMan, ActnCtrls, Grids, IniFiles,1, Math;
// запись информации в закрытые поля класса
procedure TKurs.Create;:=StrToFloat(Form1.Edit100.Text);:=StrToFloat(Form1.Edit101.Text);:=StrToFloat(Form1.Edit102.Text);:=StrToFloat(Form1.Edit103.Text);:=StrToFloat(Form1.Edit104.Text);:=StrToFloat(Form1.Edit105.Text);:=StrToFloat(Form1.Edit106.Text);:=StrToFloat(Form1.Edit107.Text);:=StrToFloat(Form1.Edit108.Text);:=StrToFloat(Form1.Edit109.Text);:=StrToFloat(Form1.Edit110.Text);:=StrToFloat(Form1.Edit111.Text);:=StrToFloat(Form1.Edit112.Text);:=StrToFloat(Form1.Edit113.Text);;
// процес записи информации в ini файл
procedure TKurs.WriteIniFile;ini: TIniFile;(Form1.Edit100.Text='') or (Form1.Edit107.Text='')or(Form1.Edit108.Text='')or
(Form1.Edit101.Text='') or (Form1.Edit102.Text='') or (Form1.Edit109.Text='')or
(Form1.Edit103.Text='') or (Form1.Edit104.Text='') or (Form1.Edit110.Text='')or
(Form1.Edit105.Text='') or (Form1.Edit106.Text='') then.MessageBox('Заполните все поля!!!','Замечание!')
else:=TIniFile.Create('ini.ini');.WriteFloat('Data','m',StrToFloat(Form1.Edit100.Text));.WriteFloat('Data','u',StrToFloat(Form1.Edit101.Text));.WriteFloat('Data','l',StrToFloat(Form1.Edit102.Text));.WriteFloat('Data','q',StrToFloat(Form1.Edit103.Text));.WriteFloat('Data','H',StrToFloat(Form1.Edit104.Text));.WriteFloat('Data','k',StrToFloat(Form1.Edit105.Text));.WriteFloat('Data','m1',StrToFloat(Form1.Edit106.Text));.WriteFloat('Data','m2',StrToFloat(Form1.Edit107.Text));.WriteFloat('Data','q0',StrToFloat(Form1.Edit108.Text));.WriteFloat('Data','z',StrToFloat(Form1.Edit109.Text));.WriteFloat('Data','d',StrToFloat(Form1.Edit110.Text));.WriteFloat('Data','t0',StrToFloat(Form1.Edit111.Text));.WriteFloat('Data','tk',StrToFloat(Form1.Edit112.Text));.WriteFloat('Data','hag',StrToFloat(Form1.Edit113.Text));.Free;;;
// чтение ini файлаTKurs.ReadIniFile;ini: TIniFile;:=TIniFile.Create('ini.ini');:=ini.ReadFloat('Data','m',0);.Edit100.Text:=FloatToStr(m);:=ini.ReadFloat('Data','u',1);.Edit101.Text:=FloatToStr(u);:=ini.ReadFloat('Data','l',1);.Edit102.Text:=FloatToStr(l);:=ini.ReadFloat('Data','q',1);.Edit103.Text:=FloatToStr(q);:=ini.ReadFloat('Data','H',1);.Edit104.Text:=FloatToStr(H);:=ini.ReadFloat('Data','k',1);.Edit105.Text:=FloatToStr(k);:=ini.ReadFloat('Data','m1',1);.Edit106.Text:=FloatToStr(m1);:=ini.ReadFloat('Data','m2',1);.Edit107.Text:=FloatToStr(m2);:=ini.ReadFloat('Data','q0',1);.Edit108.Text:=FloatToStr(q0);:=ini.ReadFloat('Data','z',1);.Edit109.Text:=FloatToStr(z);:=ini.ReadFloat('Data','d',1);.Edit110.Text:=FloatToStr(d);
t0:=ini.ReadFloat('Data','t0',1);
Form1.Edit111.Text:=FloatToStr(t0);:=ini.ReadFloat('Data','tk',1);.Edit112.Text:=FloatToStr(tk);:=ini.ReadFloat('Data','hag',1);.Edit113.Text:=FloatToStr(hag);.Free;
end;
// функция системы зависящая от времени
function TKurs.g_f(t: double):double;
begin(n_<w_)then_:=sqrt(q0*q0+q0*q0/(w_*w_));:= ArcTan(w_*q0/q0);:=sqrt(w_*w_-n_*n_);_f:=A_*exp(n_*t)*sin(wt*t+b);;(n_>w_)then:=sqrt(n_*n_-w_*w_);_f:=exp(-n_*t)*(((q0*(wt+n_)+q0)/(2*wt))*exp(2*t)+((q0*(wt-n_)-q0)/(2*wt))*exp(2*wt*t));;(n_=w_)then:=(q0*(wt+n_)+q0)/(2*wt);:=(q0*(wt-n_)-q0)/(2*wt);_f:=exp(-n_*t)*(C1*t+C2);;
end;
// процедура расчета системы и записи полученной информации в таблицу
procedure TKurs.Raszet;i:integer;,temp: double;;:=t0;
i:=0;
Mas:=m+m1+m2; // сичаем массу
Q_:=Mas*9.81; // вес всей колеблющейся системы (груз, поршень и поршневой шток)
n_:=N_dann(u,l,Q_,z,H,d);
c_:=128*u*l*q*q/(3.14*power(d,4));
w_:=sqrt(k/Mas);:=(tk-t0)/hag;
Form1.StringGrid1.RowCount:= 1;.StringGrid1.RowCount:=round(temp)+2;.StringGrid1.Cells[0,0]:=' № ';.StringGrid1.Cells[1,0]:=' t= ';.StringGrid1.Cells[2,0]:=' x(t)= ';(ti<=(tk+hag/2)) do.StringGrid1.Cells[0,i+1]:=IntToStr(i+1);.StringGrid1.Cells[1,i+1]:=FloatToStr((Round(ti*10))/10);.StringGrid1.Cells[2,i+1]:=FloatToStr(g_f((Round(ti*10))/10));(i);:=ti+hag;;;
// рисование графикаTKurs.Draw;: double;:=t0;(ti<=tk) do.Series1.AddXY(ti, strtofloat(RoundEx(g_f(ti),8)),'',clGreen);:=ti+hag;;;
// процедура округления значений до заданного количества цифр после запятой.
function RoundEx(chislo: double; Precision: Integer): string;: string;: currency;
ChisloInCurr:= chislo;(ChisloInCurr: 20: Precision, ChisloInStr);[Pos('.', ChisloInStr)]:= ',';
RoundEx:= Trim(ChisloInStr);;.
// файл about.pas для создания DLL файла с формой диалогового окна «О программе»
unit about;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons, Math;= class(TForm)
Label1: TLabel;: TBitBtn;: TLabel;
Label4: TLabel;: TLabel;: TLabel;: TLabel;
{ Private declarations }
{ Public declarations };: TForm1;ShowAbout(Handle: THandle); export; stdcall;N_dann(u,l,Q_,z,H,d:double):double; export; stdcall;
{$R *.dfm}ShowAbout(Handle: THandle);
// установить указатель на приложение
Application.Handle:=Handle;
// создать форму:=TForm1.Create(Application);
// отобразить.ShowModal;
//очистить.Free;;N_dann(u,l,Q_,z,H,d:double):double;_dann:=(4 * 3.14 * 9.81 * u * l / (Q_*z))*power(H/d,4);.