- •Содержание
- •2.Описание применения программы
- •2.1 Назначение программы
- •2.2 Условия применения
- •3.Порядок и методика тестирования.
- •3.2 Цель испытаний.
- •3.3 Требования к программе.
- •3.5.5 Проверка функционирования главного меню программы, пункт"Параметры"
- •3.5.6 Проверка функционирования главного меню программы, пункт"о программе"
- •3.5.7 Проверка возможности размещения нескольких графиков на одной области построения.
- •3.5.8 Проверка возможности удаления графиков по номеру.
- •3.5.3 Проверка функционирования главного меню программы, пункт"Сохранить в файл"
- •3.5.4 Проверка функционирования главного меню программы, пункт
- •4.3.2 Окно построения графиков.
- •5 Листинг программы
- •5.1 Листинг файлов главной формы Form2.
4.3.2 Окно построения графиков.
Как писалось выше данное окно создается из главного окна приложения и располагается внутри его области.
Данное окно содержит в себе элементы которые позволяют выбирать формулу по которой будет вестись расчет функции Y, задавать аргументы функции, цвет рисования графика, изменять масштаб рисования, хранить информацию о ранее нарисованных графиках и удалять нарисованные графики по номеру.
Для рисования графика необходимо:
-Выбрать нужную формулу посредством выпадающего списка(либо оставить формулу которая задана по умолчанию);
-Ввести аргументы(либо оставить значения по умолчанию), в активных областях(области ввода автоматически включаются или отключаются в зависимости от выбранной формулы расчета). Аргументы водятся целыми либо десятичными дробями, разделитель для десятичных дробей запятая;
-Выбрать нужный цвет графика(либо оставить цвет по умолчанию, при обрисовке цвет графика автоматически изменяется);
-Нажать на кнопку "Рисовать график", после этого произойдет черчения графика и добавления его данных в таблицу начерченных графиков(Только если есть различия с ранее начерченными графиками).
Для удаления графика по номеру необходимо:
-Щелчком по нужной строчке таблицы ранее начерченных графиков выбрать удаляемый график;
-Нажать на кнопку "Удалить", после чего произойдет удаление выбранного графика из области построения и из таблицы графиков.
Для сохранения нарисованных графиков необходимо выполнить из главного меню основного окна программы Файл->Сохранить.
Для изменения масштаба отрисовки на имеются соответствующие области ввода данных подписанные в рабочем окне программы, перерисовка графиков происходит сразу после внесения изменений в эти поля.
Для закрытия окна построения необходимо выполнить Файл->Закрыть текущую, либо щелкнуть по крестику в правом верхнем углу нужной области.
5 Листинг программы
Проект программы состоит из следующих составных частей(каждая из которых соответствует своей форме):
1.Unit2.cpp, Unit2.h в данных файлах происходит создание и работа с главной формой Form2.
2. Unit3.cpp, Unit3.h в данных файлах происходит создание и работа с формой на которой происходит построение графиков.
3. Unit4.cpp, Unit4.h в данных файлах происходит создание и работа с формой на которой происходит ввод параметров окон построения графиков.
4. ABOUT.cpp, ABOUT.h в данных файлах происходит создание и работа с формой содержащей краткий сведения о программе.
Далее по тексту последовательно в отдельных пунктах приведем содержимое заголовочного и программного файлов каждой из форм.
5.1 Листинг файлов главной формы Form2.
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.Menus.hpp>
#include <Vcl.Dialogs.hpp>
#include <Vcl.ExtDlgs.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
TMenuItem *N6;
TMenuItem *N7;
TMenuItem *N9;
TMenuItem *N10;
TSavePictureDialog *SavePictureDialog1;
void __fastcall N2Click(TObject *Sender);
void __fastcall N7Click(TObject *Sender);
void __fastcall N5Click(TObject *Sender);
void __fastcall N4Click(TObject *Sender);
void __fastcall N3Click(TObject *Sender);
void __fastcall N10Click(TObject *Sender);
void __fastcall N1Click(TObject *Sender);
private: // User declarations
public: // User declarations
void SetMDIx(int Xmin,int Xmax);
void SetMDIscale(int Xscale,int Yscale);
void SetMDIaccuracy(int var);
void SetMDIColorSetka(TColor Color);
__fastcall TForm2(TComponent* Owner);
int Xmins,Xmaxs,Xscales,Yscales,flag;
float accuracy;
TColor MDIColorSetka;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
#include "Unit2.h"
#include "Unit4.h"
#include "ABOUT.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Xmins=-180;
Xmaxs=180;
Xscales=1;
Yscales=1;
accuracy=2;
MDIColorSetka=clMenuBar;
}
//---------------------------------------------------------------------------
void TForm2::SetMDIx(int Xmin,int Xmax)
{
TForm1 *child;
for (int i=0; i < MDIChildCount; i++){
child = dynamic_cast<TForm1 *> (MDIChildren[i]);
child->Xrmin1=Xmin;
child->Xrmax=Xmax;
child->PaintAxis();
for(int j=1;j<=child->n;j++){
child->PaintGrath(j);
}
}
}
void __fastcall TForm2::N2Click(TObject *Sender)
{
TForm1* Form1 = new TForm1(this);
Form1->Caption = "Форма: "+IntToStr(MDIChildCount);
Form1->Show();
}
//---------------------------------------------------------------------------
void TForm2::SetMDIscale(int Xscale,int Yscale)
{
TForm1 *child;
for (int i=0; i < MDIChildCount; i++){
child = dynamic_cast<TForm1 *> (MDIChildren[i]);
child->deltaX=Xscale;
child->deltaY=Yscale;
child->Edit4->Text=IntToStr(Xscale);
child->Edit5->Text=IntToStr(Yscale);
child->PaintAxis();
for(int j=1;j<=child->n;j++){
child->PaintGrath(j);
}
}
}
//---------------------------------------------------------------------------
void TForm2::SetMDIaccuracy(int var){
TForm1 *child;
for (int i=0; i < MDIChildCount; i++){
child = dynamic_cast<TForm1 *> (MDIChildren[i]);
if(var==0) child->accuracy=1;
if(var==1) child->accuracy=0.1;
if(var==2) child->accuracy=0.01;
if(var==3) child->accuracy=0.001;
child->PaintAxis();
for(int j=1;j<=child->n;j++){
child->PaintGrath(j);
}
}
}
//---------------------------------------------------------------------------
void TForm2::SetMDIColorSetka(TColor Color){
TForm1 *child;
for (int i=0; i < MDIChildCount; i++){
child = dynamic_cast<TForm1 *> (MDIChildren[i]);
child->ColorSetka=Color;
child->PaintAxis();
for(int j=1;j<=child->n;j++){
child->PaintGrath(j);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N7Click(TObject *Sender)
{
Application->CreateForm(__classid(TForm4),&Form4);
Form4->ShowModal();
Form4->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N5Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N4Click(TObject *Sender)
{
TForm1 *child;
child = dynamic_cast<TForm1 *> (ActiveMDIChild);
SavePictureDialog1->DefaultExt=".jpg";
SavePictureDialog1->Execute();
child->Image1->Picture->SaveToFile(SavePictureDialog1->FileName);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N3Click(TObject *Sender)
{
TForm1 *child;
child = dynamic_cast<TForm1 *> (ActiveMDIChild);
child->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N10Click(TObject *Sender)
{
Application->CreateForm(__classid(TAboutBox),&AboutBox);
AboutBox->ShowModal();
AboutBox->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N1Click(TObject *Sender)
{
if(MDIChildCount==0){
Form2->N3->Enabled=False;
Form2->N4->Enabled=False;
}
if(MDIChildCount==1){
Form2->N3->Enabled=True;
Form2->N4->Enabled=True;
}
}
5.2 Листинг файлов дочерней формы Form1.
#ifndef Unit3H
#define Unit3H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <VCLTee.Chart.hpp>
#include <VCLTee.DBChart.hpp>
#include <VCLTee.Series.hpp>
#include <VCLTee.TeeFunci.hpp>
#include <VCLTee.TeEngine.hpp>
#include <VCLTee.TeeProcs.hpp>
#include <Vcl.ActnColorMaps.hpp>
#include <Vcl.ActnMan.hpp>
#include "IWImageList.hpp"
#include <Vcl.ImgList.hpp>
#include <Vcl.Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button2;
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TColorBox *ColorBox1;
TImage *Image1;
TImageList *ImageList1;
TComboBox *ComboBox1;
TButton *Button3;
TStringGrid *StringGrid1;
TStaticText *StaticText1;
TStaticText *StaticText2;
TStaticText *StaticText3;
TStaticText *StaticText4;
TStaticText *StaticText5;
TStaticText *StaticText6;
TStaticText *StaticText7;
TEdit *Edit4;
TEdit *Edit5;
TStaticText *StaticText8;
TStaticText *StaticText9;
TPanel *Panel1;
TStaticText *StaticText10;
TPanel *Panel2;
TPanel *Panel3;
TPanel *Panel4;
TPanel *Panel5;
TEdit *Edit6;
TEdit *Edit7;
TStaticText *StaticText11;
TStaticText *StaticText12;
void __fastcall Button2Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall ComboBox1Change(TObject *Sender);
void __fastcall ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,
TOwnerDrawState State);
void __fastcall StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
TGridDrawState State);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Edit4Change(TObject *Sender);
void __fastcall Edit5Change(TObject *Sender);
private: // User declarations
public: // User declarations
int xmax,ymax; //Размер экрана
int xmid, ymid; //Середина экрана по осям
double X,Y; // Координаты для вычисления
double deltaX,deltaY;
TColor ColorSetka;
TRect Rect1[20],Rect2[20],Rectb[20],Rectc[20];
TColor Col[20];
int n;
int Yform[20],Xrmin,Xrmax,Xrmin1;
double accuracy;
void PaintAxis();
int PaintGrath();
int PaintGrath(int x);
int OnTableEdit;
int DeleteGrath(int NumDel);
void SetYform(int Yk);
int PixelInDel;
float MinOrMaxValueX;
void Seta(UnicodeString as);
void Setb(UnicodeString bs);
void Setc(UnicodeString cs);
void SetCol(TColor Coln);
int f[10];
TStringList *a1;
int f1[10];
TStringList *b1;
int f3[10];
TStringList *c1;
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
#include "Unit2.h"
#include <string>
#include <iostream>
#include<cctype>
#include <StrUtils.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "IWImageList"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) //Значения по умолчанию
: TForm(Owner)
{
accuracy=0.01;
Xrmax=180;
Xrmin1=-180;
xmax=568;
ymax=473;
xmid=xmax/2;
ymid=ymax/2;
deltaX=1;
deltaY=1;
n=0;
OnTableEdit=0;
PixelInDel=20;
MinOrMaxValueX=(xmid/PixelInDel)*(PixelInDel/deltaX);
ComboBox1->Style = csOwnerDrawFixed;
for(int i=0;i<=20;i++){
Yform[i]=4;
}
int i=0;
while(i!=20){
Rect1[i].left=2000;
Rect1[i].top=1000;
i++;
}
i=0;
while(i!=20){
Col[i]=clRed;
i++;
}
StringGrid1->Rows[0]->DelimitedText = ("Номер Функция a b c Цвет");
StringGrid1->Canvas->Pen->Width=2;
a1=new TStringList;
b1=new TStringList;
c1=new TStringList;
a1->Add("0");
b1->Add("0");
c1->Add("0");
ColorSetka=clMenuBar;
}
//---------------------------------------------------------------------------
void TForm1::PaintAxis() //Печать осей
{
Image1->Picture->Bitmap->FreeImage();
Image1->Picture->Bitmap = NULL;
Image1->Canvas->Pen->Color=ColorSetka; //Масштабная сетка
Image1->Canvas->Pen->Style=psDash;
for (int i=PixelInDel ; i<=ymax ; i=i+20)
{
Image1->Canvas->MoveTo(0,ymid+i);
Image1->Canvas->LineTo(xmax,ymid+i);
Image1->Canvas->MoveTo(0,ymid-i);
Image1->Canvas->LineTo(xmax,ymid-i);
}
for (int i=PixelInDel ; i<=xmax ; i=i+20)
{
Image1->Canvas->MoveTo(xmid+i,0);
Image1->Canvas->LineTo(xmid+i,ymax);
Image1->Canvas->MoveTo(xmid-i,0);
Image1->Canvas->LineTo(xmid-i,ymax);
}
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Pen->Style=psSolid;
Image1->Canvas->Pen->Color=clBlack;
Image1->Canvas->MoveTo(1,ymid); //Рисование осей
Image1->Canvas->LineTo(xmax,ymid);
Image1->Canvas->MoveTo(xmid,1);
Image1->Canvas->LineTo(xmid,ymax);
Image1->Canvas->Font->Size=6;
for (int i=0 ; i<=xmax ; i=i+20)
{
Image1->Canvas->MoveTo(xmid+i,ymid-1);
Image1->Canvas->LineTo(xmid+i,ymid+2);
Image1->Canvas->MoveTo(xmid-i,ymid-1);
Image1->Canvas->LineTo(xmid-i,ymid+2);
if(i==0){Image1->Canvas->TextOutW(xmid-5,ymid+1,IntToStr(0));}
if(i!=0){
Image1->Canvas->TextOutW(xmid+i-5,ymid-10,FloatToStr(i/deltaX));
Image1->Canvas->TextOutW(xmid-i-5,ymid-10,FloatToStr(i/deltaX));
}
}
for (int i=0 ; i<=ymax ; i=i+20)
{
Image1->Canvas->MoveTo(xmid-1,ymid+i);
Image1->Canvas->LineTo(xmid+2,ymid+i);
Image1->Canvas->MoveTo(xmid-1,ymid-i);
Image1->Canvas->LineTo(xmid+2,ymid-i);
if(i!=0){
Image1->Canvas->TextOutW(xmid+5,ymid+i-5,FloatToStr(i/deltaY));
Image1->Canvas->TextOutW(xmid+5,ymid-i-5,FloatToStr(i/deltaY));
}
}
Image1->Canvas->Pen->Width=5; //Рисование рамки
Image1->Canvas->MoveTo(0,0);
Image1->Canvas->LineTo(xmax,0);
Image1->Canvas->LineTo(xmax,ymax);
Image1->Canvas->LineTo(0,ymax);
Image1->Canvas->LineTo(0,0);
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Pen->Style=psSolid;
}
//---------------------------------------------------------------------------
int TForm1::PaintGrath(int x) //Печать графика по номеру
{
Image1->Canvas->Pen->Color=Col[x];
int Flag=0;
for(float i=Xrmin1;i<=Xrmax;i=i+accuracy)
{
if(i<(-MinOrMaxValueX)) continue;
if(i>MinOrMaxValueX) break;
switch(Yform[x])
{
case 0:Y=Y=tan(StrToFloat(a1->Strings[x])*i*i
+StrToFloat(b1->Strings[x])*i); break;
case 1:Y=StrToFloat(a1->Strings[x])*i*i*i*i*i+StrToFloat(b1->Strings[x])
*i*i*i+StrToFloat(c1->Strings[x])*i; break;
case 2:Y=StrToFloat(b1->Strings[x])*StrToFloat(a1->Strings[x])*i*i*i
+StrToFloat(c1->Strings[x])*i*i; break;
case 3:{
if((i<=0)||(i==1)) continue;
else
Y=log(StrToFloat(a1->Strings[x])*i*i)/log(i);
}
}
if((i>=Xrmin1)&&(Flag!=1))
{
Image1->Canvas->MoveTo(xmid+i*deltaX,ymid-Y*deltaY);
Flag=1;
continue;
}
Image1->Canvas->LineTo(xmid+i*deltaX,ymid-Y*deltaY);
}
return 0;
}
//---------------------------------------------------------------------------
int TForm1::DeleteGrath(int NumDel) //Удаление графика из области построения и таблицы
{
if(n==0) return 0;
PaintAxis();
TRect RectTemp[20];
TColor Coltmp[20];
float aTemp[20],bTemp[20],cTemp[20];
int Yformt[20],fl=0;
if(n>1) //Удаление при количестве графиков >1
{
fl=1;
if(NumDel>1) //Перерисовываем все графики кроме удаляемого(при номере удаляемого >1)
{
for(int i=1;i<NumDel;i++)
{
PaintGrath(i);
}
for(int i=NumDel+1;i<=n;i++)
{
PaintGrath(i);
}
}
if(NumDel==1) //Перерисовываем все графики кроме удаляемого(при номере удаляемого =1)
{
for(int i=NumDel+1;i<=n;i++)
{
PaintGrath(i);
}
}
for (int i=1; i < StringGrid1->RowCount; i++) { //Очищаем таблицу
StringGrid1->Rows[i]->Clear();
}
int i=NumDel;
while(i!=20){ //Удаляем формулу графика из таблицы
Rect1[i].top=Rect1[i+1].top-24;
i++;
}
for(int i=0;i<NumDel;i++){ //Удаляем из масива аргументов Yform
Yformt[i]=Yform[i];
}
for(int i=NumDel+1;i<=20;i++){
Yformt[i-1]=Yform[i];
}
for(int i=0;i<=20;i++){
Yform[i]=Yformt[i];
}
i=0;
while(i<NumDel){ //Удаляем из масива цветов
Coltmp[i]=Col[i];
i++;
}
i=NumDel+1;
while(i!=20){
Coltmp[i-1]=Col[i];
i++;
}
i=0;
while(i!=20){
Col[i]=Coltmp[i];
i++;
}
n--;
a1->Delete(NumDel);
b1->Delete(NumDel);
c1->Delete(NumDel);
for(int i=1;i<=n;i++){ //Перепечатываем текст в таблице
StringGrid1->Rows[i]->DelimitedText = (IntToStr(i)+" "+IntToStr(i)+" "
+AnsiReplaceStr(a1->Strings[i],",",".")+" "
+AnsiReplaceStr(b1->Strings[i],",",".")+" "
+AnsiReplaceStr(c1->Strings[i],",","."));
}
}
if((n==1)&&(fl==0)) //Удаление при количестве графиков =1
{
a1->Delete(NumDel);
b1->Delete(NumDel);
c1->Delete(NumDel);
Yform[n]=4;
for (int i=1; i < StringGrid1->RowCount; i++) { //Очищаем таблицу
StringGrid1->Rows[i]->Clear();
}
n--;
}
StringGrid1->Invalidate();
return 0;
}
//---------------------------------------------------------------------------
void TForm1::SetYform(int Yk)
{
Yform[n+1]=Yk;
}
//---------------------------------------------------------------------------
void TForm1::Seta(UnicodeString as)
{
a1->Add(as);
}
//---------------------------------------------------------------------------
void TForm1::Setb(UnicodeString bs)
{
b1->Add(bs);
}
//---------------------------------------------------------------------------
void TForm1::Setc(UnicodeString cs)
{
c1->Add(cs);
}
//---------------------------------------------------------------------------
void TForm1::SetCol(TColor Coln){
Col[n+1]=Coln;
}
//---------------------------------------------------------------------------
int TForm1::PaintGrath()
{
int tmpfl=0,Flag=0; //флаг перчати цветом
if(n==0) PaintAxis();
if((Edit1->Text.ToDouble()!=StrToFloat(a1->Strings[n]))
||(Edit2->Text.ToDouble()!=StrToFloat(b1->Strings[n]))
||(Edit3->Text.ToDouble()!=StrToFloat(c1->Strings[n]))
||(Yform[n]!=ComboBox1->ItemIndex))
{ //при изменениях функции или аргументов пополняем массивы
Seta(Edit1->Text);
Setb(Edit2->Text);
Setc(Edit3->Text);
SetCol(ColorBox1->Selected);
SetYform(ComboBox1->ItemIndex);
Image1->Canvas->Pen->Color=ColorBox1->Selected;
OnTableEdit=1;
StringGrid1->Invalidate();
n++;
tmpfl=1;
}
if(tmpfl==0) return 0;
for(double i=Xrmin1;i<=Xrmax;i=i+accuracy)
{
if(i<(-MinOrMaxValueX)) continue;
if(i>MinOrMaxValueX) break;
switch(Yform[n]) //вычисляем y в зависимости от выбранной формулы
{
case 0:Y=Y=tan(StrToFloat(a1->Strings[n])*i*i
+StrToFloat(b1->Strings[n])*i); break;
case 1:Y=StrToFloat(a1->Strings[n])*i*i*i*i*i+StrToFloat(b1->Strings[n])
*i*i*i+StrToFloat(c1->Strings[n])*i; break;
case 2:Y=StrToFloat(b1->Strings[n])*powl(StrToFloat(a1->Strings[n]),i*i*i)
+StrToFloat(c1->Strings[n])*i*i; break;
case 3:{
if((i<=0)||(i==1)) continue;
else
Y=log(StrToFloat(a1->Strings[n])*i*i)/log(i);
}
}
if((i>=Xrmin1)&&(Flag!=1))
{
Image1->Canvas->MoveTo(xmid+i*deltaX,ymid-Y*deltaY);
Flag=1;
continue;
}
Image1->Canvas->LineTo(xmid+i*deltaX,ymid-Y*deltaY);
}
if(tmpfl==1){ //если выбранным цветом произошла печать увиличиваем индекс colorbox1
ColorBox1->ItemIndex++;
tmpfl=0;
}
return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PaintGrath();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{ //При выборе формулы активируем и деактивируем области ввода
if(ComboBox1->ItemIndex==0)
{
Edit1->Enabled=True;
Edit2->Enabled=True;
Edit3->Enabled=False;
}
if(ComboBox1->ItemIndex==1)
{
Edit1->Enabled=True;
Edit2->Enabled=True;
Edit3->Enabled=True;
}
if(ComboBox1->ItemIndex==2)
{
Edit1->Enabled=True;
Edit2->Enabled=True;
Edit3->Enabled=True;
}
if(ComboBox1->ItemIndex==3)
{
Edit1->Enabled=True;
Edit2->Enabled=False;
Edit3->Enabled=False;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,
TOwnerDrawState State)
{
ComboBox1->Canvas->FillRect ( Rect );
ImageList1->Draw ( ComboBox1->Canvas, Rect.left, Rect.top, Index );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
TGridDrawState State)
{
if(OnTableEdit==1)
{
Rect1[n]=StringGrid1->CellRect(1,n);
Rect2[n]=StringGrid1->CellRect(5,n);
Rectb[n]=StringGrid1->CellRect(3,n);
Rectc[n]=StringGrid1->CellRect(4,n);
OnTableEdit=0;
StringGrid1->Rows[n]->DelimitedText = (IntToStr(n)+" "+IntToStr(n)+" "
+AnsiReplaceStr(a1->Strings[n],",",".")+" "
+AnsiReplaceStr(b1->Strings[n],",",".")+" "
+AnsiReplaceStr(c1->Strings[n],",","."));
}
int i=0;
while(i!=20) //Цикл заполнения колонки с формулами
{
i++;
if((i==n+1)&&(n!=0)) {
break;
}
StringGrid1->Canvas->FillRect(Rect1[i]);
ImageList1->Draw ( StringGrid1->Canvas, Rect1[i].left, Rect1[i].top, Yform[i] );
StringGrid1->Canvas->Pen->Color=Col[i];
StringGrid1->Canvas->Pen->Width=2;
if(n>0){
int j=0;
while(j!=34){ //Цикл заполнения колонки цветов
StringGrid1->Canvas->MoveTo(Rect2[i].left+j,Rect2[i].top);
StringGrid1->Canvas->LineTo(Rect2[i].left+j,Rect2[i].bottom);
j=j+1;
}
StringGrid1->Canvas->Pen->Color=clWhite;
if(Yform[i]==0){ //закрашивания неиспользуемых ячеек при Yfor==0
j=4;
while(j!=30){
StringGrid1->Canvas->MoveTo(Rectc[i].left+j,Rectc[i].top);
StringGrid1->Canvas->LineTo(Rectc[i].left+j,Rectc[i].bottom-4);
j=j+1;
}
}
if(Yform[i]==3){ //закрашивания неиспользуемых ячеек при Yfor==0
j=4;
while(j!=30){
StringGrid1->Canvas->MoveTo(Rectc[i].left+j,Rectc[i].top);
StringGrid1->Canvas->LineTo(Rectc[i].left+j,Rectc[i].bottom-4);
j=j+1;
}
j=4;
while(j!=30){
StringGrid1->Canvas->MoveTo(Rectb[i].left+j,Rectb[i].top);
StringGrid1->Canvas->LineTo(Rectb[i].left+j,Rectb[i].bottom-4);
j=j+1;
}
}
}
if(n==0) break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
DeleteGrath(StringGrid1->Row);
StringGrid1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit4Change(TObject *Sender)
{
if((Edit4->Text!="-")&&(Edit4->Text!="")&&(Edit4->Text!="+")){
deltaX=Edit4->Text.ToInt();
PaintAxis();
Edit6->Text=FloatToStr(PixelInDel/deltaX);
MinOrMaxValueX=(xmid/PixelInDel)*(PixelInDel/deltaX);
for(int i=1;i<=n;i++){
PaintGrath(i);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit5Change(TObject *Sender)
{
if((Edit5->Text!="-")&&(Edit5->Text!="")&&(Edit5->Text!="+")){
deltaY=Edit5->Text.ToInt();
PaintAxis();
Edit7->Text=FloatToStr(PixelInDel/deltaY);
for(int i=1;i<=n;i++){
PaintGrath(i);
}
}
}
//---------------------------------------------------------------------------
5.3 Листинг файлов формы с настройками Form4.
#ifndef Unit4H
#define Unit4H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ButtonGroup.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm4 : public TForm
{
__published: // IDE-managed Components
TStaticText *StaticText1;
TEdit *Edit1;
TEdit *Edit2;
TStaticText *StaticText2;
TStaticText *StaticText3;
TEdit *Edit3;
TStaticText *StaticText6;
TStaticText *StaticText7;
TEdit *Edit5;
TStaticText *StaticText8;
TButtonGroup *ButtonGroup1;
TButtonGroup *ButtonGroup2;
TButtonGroup *ButtonGroup3;
TStaticText *StaticText4;
TComboBox *ComboBox1;
TStaticText *StaticText5;
TButtonGroup *ButtonGroup4;
TColorBox *ColorBox1;
void __fastcall Edit1Change(TObject *Sender);
void __fastcall Edit2Change(TObject *Sender);
void __fastcall Edit3Change(TObject *Sender);
void __fastcall Edit5Change(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall FormCreate(TObject *Sender);
void __fastcall ComboBox1Change(TObject *Sender);
void __fastcall ColorBox1Change(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm4(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm4 *Form4;
//---------------------------------------------------------------------------
#endif
#include <vcl.h>
#pragma hdrstop
#include "Unit4.h"
#include "Unit3.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Edit1Change(TObject *Sender)
{
if((Edit1->Text!="-")&&(Edit1->Text!="")&&(Edit1->Text!="+")){
Form2->SetMDIx(Edit1->Text.ToInt(),Edit2->Text.ToInt());
Form2->Xmins=Edit1->Text.ToInt();
Form2->flag=1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Edit2Change(TObject *Sender)
{
if((Edit2->Text!="-")&&(Edit2->Text!="")&&(Edit2->Text!="+")){
Form2->SetMDIx(Edit1->Text.ToInt(),Edit2->Text.ToInt());
Form2->Xmaxs=StrToInt(Edit2->Text);
Form2->flag=1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Edit3Change(TObject *Sender)
{
if((Edit3->Text!="-")&&(Edit3->Text!="")&&(Edit3->Text!="+")){
Form2->SetMDIscale(Edit3->Text.ToInt(),Edit5->Text.ToInt());
Form2->Xscales=StrToInt(Edit3->Text);
Form2->flag=1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Edit5Change(TObject *Sender)
{
if((Edit5->Text!="-")&&(Edit5->Text!="")&&(Edit5->Text!="+")){
Form2->SetMDIscale(Edit3->Text.ToInt(),Edit5->Text.ToInt());
Form2->Yscales=StrToInt(Edit5->Text);
Form2->flag=1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm4::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::FormCreate(TObject *Sender)
{
if(Form2->flag==1){
Edit1->Text=IntToStr(Form2->Xmins);
Edit2->Text=IntToStr(Form2->Xmaxs);
Edit3->Text=IntToStr(Form2->Xscales);
Edit5->Text=IntToStr(Form2->Yscales);
ComboBox1->ItemIndex=Form2->accuracy;
ColorBox1->Selected=Form2->MDIColorSetka;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm4::ComboBox1Change(TObject *Sender)
{
Form2->SetMDIaccuracy(ComboBox1->ItemIndex);
Form2->accuracy=ComboBox1->ItemIndex;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::ColorBox1Change(TObject *Sender)
{
Form2->SetMDIColorSetka(ColorBox1->Selected);
Form2->MDIColorSetka=ColorBox1->Selected;
Form2->flag=1;
}
//---------------------------------------------------------------------------
5.4 Листинг файлов формы с кратким описание программы ABOUT.
#ifndef AboutH
#define AboutH
//----------------------------------------------------------------------------
#include <System.hpp>
#include <Windows.hpp>
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Graphics.hpp>
#include <Forms.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Buttons.hpp>
#include <ExtCtrls.hpp>
#include <Vcl.Imaging.jpeg.hpp>
//----------------------------------------------------------------------------
class TAboutBox : public TForm
{
__published:
TPanel *Panel1;
TImage *ProgramIcon;
TLabel *ProductName;
TLabel *Version;
TLabel *Copyright;
TLabel *Comments;
TButton *OKButton;
private:
public:
virtual __fastcall TAboutBox(TComponent* AOwner);
};
//----------------------------------------------------------------------------
extern PACKAGE TAboutBox *AboutBox;
//----------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "About.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TAboutBox *AboutBox;
//---------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------
4.5 Исходный код проектного файла Project.cpp
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
USEFORM("Unit3.cpp", Form1);
USEFORM("Unit4.cpp", Form4);
USEFORM("Unit2.cpp", Form2);
USEFORM("ABOUT.cpp", AboutBox);
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm4), &Form4);
Application->CreateForm(__classid(TAboutBox), &AboutBox);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
Заключение
В ходе выполнения данного курсового проекта были получены практические навыки по работе и написанию программ с применение среды визуального программирования RAD Studio C++ Builder XE2, а полученная программа полностью отвечает поставленным в техническом задание условиям. Так же была составлена вся оговоренная в техническом задание документация в соответствии с требованиями ЕСПД.
Библиографический список:
1. Бьерн Страуструп. Язык программирование Си++. – М.: Бином, 2005.
2. Айра Пол. Объектно-ориентированное программирование на C++. – СПб.:, М.: Невский диалект – Бином, 1999.
3. Герберт Шилдт. Самоучитель C++: Пер. с англ. – 3-е изд. – СПб.: БХВ-Петербург, 2003.
4. Шамис, В. А. "C++ Builder Borland Developer Studio 2006", СПб. и др. Питер 2007, 780 с. ил.
5. Культин, Н. Б. "C++ Builder Самоучитель", СПб. БХВ-Петербург 2004, 320 с. ил.
6. Д. Холингвэрт, Д. Баттерфилд, Б. Сворт, Д. Оллсоп ," C++ Builder 5: Руководство разработчика Т. 1 Основы"Пер. с англ. и ред. Ю. Г. Гордиенко, В. Т. Тертышного, М. и др. Вильямс 2001, 872 с. ил.
7. ГОСТ 19.402-78. ЕСПД. Описание программы.
8. ГОСТ 19.502-78. ЕСПД. Описание применения. Требования к содержанию и оформлению.
9. ГОСТ 19.301-79. ЕСПД. Программа и методика испытаний. Требования к содержанию и оформлению.
10. ГОСТ 19.505-79. ЕСПД. Руководство оператора. Требования к содержанию и оформлению.
11. ГОСТ 19.401-78. ЕСПД. Текст программы. Требования к содержанию и оформлению.
