Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6 ООП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.71 Mб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

УКРАИНСКИЙ ГОСУДАРСТВЕННЫЙ ХИМИКО-ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра ИС

Лабораторная работа №6

по дисциплине «Объектно-ориентированное программирование»

на тему «Использование библиотеки VCL»

Подготовил:

Студент группы 2-ИС-10

Таран С.Е.

Проверил:

доц. Гаркуша И.Н.

Днепропетровск 2014

Библиотека VCL

Цель работы:

Освоить основные классы библиотеки Visual Component Library (VCL),позволяющие строить приложения с графическим интерфейсом пользователя (GUI).

Задание 1:

Используя класс, разработанный в ЛР №4,построить программу с графическим интерфейсом пользователя, предоставляющую возможность расчета математического выражения и сохранение результатов.

Задание 2:

Реализовать GUI к заданию 2 лабораторной работы № 5.

Задание 3:

Предложить и разработать иерархию классов и программу с GUI,

позволяющую отображать точечные, линейные и полигональные графические объекты с возможностью загрузки координат их вершин из файла(ов).

Задание 1:

файл CDoubleVector.срр:

#include "CDoubleVector.h"

#include <iostream>

CDoubleVector::CDoubleVector(const CDoubleVector&original)

{

vector = new double[size = original.getSize()];

for(int i=0; i<size; ++i)

vector[i] = original.getValue(i);

}

CDoubleVector::CDoubleVector() { size = 0; }

CDoubleVector::~CDoubleVector() { clear(); }

void CDoubleVector::Init(int vectorSize)

{

vector = new double[size = vectorSize];

for(int i=0; i<size; ++i)

vector[i] = 0;

}

void CDoubleVector::clear()

{

delete[] vector;

vector = NULL;

size = 0;

}

void CDoubleVector::setValue(unsigned int index, double value)

{

if(index < size)

vector[index] = value;

}

double CDoubleVector::getValue(unsigned int index) const

{

if(index < size)

return vector[index];

else

return 0;

}

int CDoubleVector::getSize() const { return size; }

double CDoubleVector::getMin() const

{

double min = vector[0];

for(int i=1; i<size; ++i)

if(vector[i] < min)

min = vector[i];

return min;

}

double CDoubleVector::getMax() const

{

double max = vector[0];

for(int i=1; i<size; ++i)

if(vector[i] > max)

max = vector[i];

return max;

}

double CDoubleVector::getArithmeticMeanValue() const

{

double sum = 0;

for(int i=0; i<size; ++i)

sum += vector[i];

return sum/(double)size;

}

double CDoubleVector::calculate() const

{

double sumUp = 0, sumDown = 0;

for(int i=0; i<size; ++i)

{

sumUp += sin(abs(1-log(vector[i])));

sumDown += pow(sin(18*pow(vector[i], 3)), 2);

}

return (sumUp)/(sumDown);

}

void CDoubleVector::saveData(string path) const

{

if(size > 0)

{

ofstream out(path.c_str(), ios::binary);

if(out.is_open())

for(int i=0; i<size; ++i)

out.write((const char *)&vector[i], sizeof(double));

out.close();

}

}

void CDoubleVector::loadData(string path)

{

ifstream in(path.c_str(), ios::binary);

if(in.is_open())

{

in.seekg(0, ios::end);

vector = new double[size = (int)(in.tellg()/sizeof(double))];

in.seekg(0, ios::beg);

for(int i=0; i<size; ++i)

in.read((char *)&vector[i], sizeof(double));

}

else

cout<<"error";

in.close();

}

void CDoubleVector::saveResult(string path) const

{

if(size > 0)

{

ofstream out(path.c_str(), ios::trunc);

if(out.is_open())

out<<calculate();

out.close();

}

}

void CDoubleVector::saveResult(char *path) const

{

if(size > 0)

{

ofstream out(path, ios::trunc);

if(out.is_open())

out<<calculate();

out.close();

}

}

файл CDoubleVector.h:

#include <string>

#include <cmath>

#include <fstream>

using namespace std;

class CDoubleVector

{

private:

double *vector; // массив значений типа double (наш вектор)

int size; // размер массива

public:

CDoubleVector(); // конструктор по умолчанию

CDoubleVector(const CDoubleVector&); // конструктор копии

~CDoubleVector(); // деструктор

void Init(int vectorSize); // инициализация вектора

int getSize() const; // возврат значения размера вектора

void setValue(unsigned int index, double value); // установка значения определенного элемента вектора

double getValue(unsigned int index) const; // возврат значение некоторого элемента вектора

void clear(); // очистка (удаление вектора)

double getArithmeticMeanValue() const; // среднее арифметическое значений вектора

double getMin() const;

double getMax() const;

double calculate() const;

void saveData(string path) const; // сохранение вектора в бинарный файл

void loadData(string path); // получение значений вектора из бинаронго файла

void saveResult(string path) const; // сохранение результата вычислений метода calculate() в txt-файл

void saveResult(char *path) const;

};

файл Progect1:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

//---------------------------------------------------------------------------

USEFORM("Unit1.cpp", MainForm);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TMainForm), &MainForm);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

catch (...)

{

try

{

throw Exception("");

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

//---------------------------------------------------------------------------

файл Unit1.cpp:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TMainForm *MainForm;

//---------------------------------------------------------------------------

__fastcall TMainForm::TMainForm(TComponent* Owner)

: TForm(Owner)

{

vector = new CDoubleVector();

CreateButton->Visible = false;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::Exit1Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::New1Click(TObject *Sender)

{

vector = new CDoubleVector();

ResultLabel->Caption = "";

VectorList->Clear();

VectorSize->Text = "";

EditElement->Text = "";

CreateButton->Visible = false;

CalculateButton->Visible = false;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::CreateButtonClick(TObject *Sender)

{

vector->Init(StrToFloat(VectorSize->Text));

VectorList->Clear();

CalculateButton->Visible = true;

for(int i=0; i<vector->getSize(); ++i)

VectorList->Items->Add( vector->getValue(i) );

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::VectorListClick(TObject *Sender)

{

EditElement->Text = VectorList->Items->Strings[VectorList->ItemIndex];

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::EditElementChange(TObject *Sender)

{

VectorList->Items->Strings[VectorList->ItemIndex] = EditElement->Text;

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::CalculateButtonClick(TObject *Sender)

{

for(int i=0; i<vector->getSize(); ++i)

vector->setValue(i, StrToFloat(VectorList->Items->Strings[i]));

ResultLabel->Caption = vector->calculate();

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::SavaAs1Click(TObject *Sender)

{

if(Save->Execute())

vector->saveResult(Save->FileName.c_str());

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::VectorSizeKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Key!=8 && (Key < '0' || Key > '9'))

VectorSize->ReadOnly = true;

else if(CreateButton->Visible)

{

if(VectorSize->Text.Length() == 1 && Key==8)

CreateButton->Visible = false;

}

else if( !(CreateButton->Visible) )

{

if(Key=='0')

VectorSize->ReadOnly = true;

else

CreateButton->Visible = true;

}

}

//---------------------------------------------------------------------------

void __fastcall TMainForm::VectorSizeKeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(Key!=8 && (Key < '0' || Key > '9'))

VectorSize->ReadOnly = false;

else if(CreateButton->Visible == false && Key=='0')

VectorSize->ReadOnly = false;

}

файл Unit1.h

//---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Dialogs.hpp>

#include <ExtCtrls.hpp>

#include <jpeg.hpp>

#include <Menus.hpp>

#include <C:\Users\Freddy\Desktop\OOP_2014\lab6_1\lab6_1\CDoubleVector.h>

#include <ExtCtrls.hpp>

#include <jpeg.hpp>

#include <Menus.hpp>

#include <Dialogs.hpp>

//---------------------------------------------------------------------------

class TMainForm : public TForm

{

__published: // IDE-managed Components

TPanel *MainPanel;

TEdit *VectorSize;

TButton *CreateButton;

TListBox *VectorList;

TEdit *EditElement;

TImage *Formula;

TButton *CalculateButton;

TLabel *ResultLabel;

TMainMenu *MainMenu;

TMenuItem *File;

TMenuItem *New1;

TMenuItem *SavaAs1;

TMenuItem *Exit1;

TSaveDialog *Save;

TMenuItem *N1;

TMenuItem *N2;

void __fastcall Exit1Click(TObject *Sender);

void __fastcall New1Click(TObject *Sender);

void __fastcall CreateButtonClick(TObject *Sender);

void __fastcall VectorListClick(TObject *Sender);

void __fastcall EditElementChange(TObject *Sender);

void __fastcall CalculateButtonClick(TObject *Sender);

void __fastcall SavaAs1Click(TObject *Sender);

void __fastcall VectorSizeKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift);

void __fastcall VectorSizeKeyUp(TObject *Sender, WORD &Key,

TShiftState Shift);

private: // User declarations

public: // User declarations

__fastcall TMainForm(TComponent* Owner);

CDoubleVector *vector;

};

//---------------------------------------------------------------------------

extern PACKAGE TMainForm *MainForm;

//---------------------------------------------------------------------------

#endif

Тестирование задания 1:

Задание 2

Файл Project1.Cpp:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

//---------------------------------------------------------------------------

USEFORM("Unit1.cpp", Form1);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

catch (...)

{

try

{

throw Exception("");

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

//---------------------------------------------------------------------------

Файл AssistProfessor.Cpp:

#include "AssistProfessor.h"

AssistProfessor::AssistProfessor()

{

surProf = (salary*15)/100.0;

surAss = (salary*25)/100.0;

salary += (surProf + surAss);

}

AssistProfessor::AssistProfessor(string n, string s, string m, unsigned int N)

{

name = n;

surname = s;

middle = m;

number = N;

Init(0, 0, 0, 0, 0);

}

void AssistProfessor::ReadInfo(string path)

{

Teacher::ReadInfo(path);

ifstream in(path.c_str(), ios::ate);

if(in.is_open())

{

string tmps;

float tmpf;

for(int i=0; i<3; ++i)

in>>tmps;

for(int i=0; i<8; ++i)

in>>tmpf;

in>>surProf;

in>>surAss;

in.close();

if(surProf==0 && surAss==0)

{

surProf = (salary*15)/100.0;

surAss = (salary*25)/100.0;

salary += (surProf + surAss);

}

}

}

void AssistProfessor::SaveInfo(string path) const

{

Teacher::SaveInfo(path);

ofstream out(path.c_str(), ios::app);

if(out.is_open())

{

out<<surProf<<endl;

out<<surAss;

}

out.close();

}

файл AssistProfessor.h:

#include "C:\Users\Freddy\Desktop\OOP_2014\lab6_2\lab6_2\Teacher.h"

class AssistProfessor : public Teacher

{

private:

float surProf, surAss;

public:

AssistProfessor();

AssistProfessor(string n, string s, string m, unsigned int N);

void ReadInfo(string path);

void SaveInfo(string path) const;

};

файл Unit1.cpp:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

path = "";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ApplyButtonClick(TObject *Sender)

{

if(ComboBox->ItemIndex == 0)

t = new Teacher((const char*)(EditName->Text.c_str()), (const char*)(EditSurname->Text.c_str()), (const char*)(EditMiddle->Text.c_str()), StrToFloat(EditNumber->Text));

else if(ComboBox->ItemIndex == 1)

t = new AssistProfessor((const char*)(EditName->Text.c_str()), (const char*)(EditSurname->Text.c_str()), (const char*)(EditMiddle->Text.c_str()), StrToFloat(EditNumber->Text));

t->Init(StrToInt(EditYear->Text), StrToFloat(EditSalary->Text), StrToFloat(EditAllowance->Text), StrToFloat(EditAid->Text), StrToFloat(EditVacationPay->Text));

TaxOut->Caption = t->GetTax();

Total->Caption = t->GetSalary();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SaveAsClick(TObject *Sender)

{

if(SaveDialog->Execute())

t->SaveInfo((const char*)(path = SaveDialog->FileName).c_str()) ;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Load1Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Save1Click(TObject *Sender)

{

if(path != "")

t->SaveInfo((const char*)path.c_str()) ;

else if(SaveDialog->Execute())

t->SaveInfo((const char*)(path = SaveDialog->FileName).c_str()) ;

}

void __fastcall TForm1::New1Click(TObject *Sender)

{

path = "";

EditName->Text = "";

EditSurname->Text = "";

EditMiddle->Text = "";

EditSalary->Text = "";

EditSurcharge->Text = "";

EditAllowance->Text = "";

EditAid->Text = "";

EditVacationPay->Text = "";

EditNumber->Text = "";

EditYear->Text = "";

TaxOut->Caption = "";

Total->Caption = "";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Open1Click(TObject *Sender)

{

if(OpenDialog->Execute())

{

if(ComboBox->ItemIndex == 0)

t = new Teacher();

else if(ComboBox->ItemIndex == 1)

t = new AssistProfessor();

t->ReadInfo((const char*)(path = OpenDialog->FileName).c_str()) ;

EditName->Text = AnsiString(t->GetName().c_str());

EditSurname->Text = AnsiString(t->GetSurname().c_str());

EditMiddle->Text = AnsiString(t->GetMiddle().c_str());

EditSalary->Text = t->GetOldSalary();

EditSurcharge->Text = t->GetSurcharge();

EditAllowance->Text = t->GetAllowance();

EditAid->Text = t->GetAid();

EditVacationPay->Text = t->GetVacationPay();

EditNumber->Text = t->GetNumber();

EditYear->Text = t->GetYear();

TaxOut->Caption = t->GetTax();

Total->Caption = t->GetSalary();

}

}

//---------------------------------------------------------------------------

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]