Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет Семестровая.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
204 Кб
Скачать
☆

1. Постановка задачи

Описать предметную область, используя принципы ООП.

  1. Для описания предметной области использовать иерархию классов, состоящую минимум из 3 классов.

  2. Базовый класс должен быть абстрактным.

  3. Поля классов должны быть закрытыми, динамическими и разных типов данных.

  4. Для каждого класса иерархии описать методы:

  • Изменения значений полей классов

  • Получения значений полей класса

  • Минимум два метода, определяемые спецификой конкретного класса

  • Минимум один виртуальный метод (отдельный метод)

  1. Для производных классов описать три разных конструктора и деструктор

  2. Отдельно описать иерархию из двух классов, в которой одним из полей будет объект базового класса уже описанной иерархии. При создании объектов новой иерархии передавать объекты производных классов первой иерархии для инициализации поля - вложенного класса.

  3. Использовать механизм позднего связывания: на стадии выполнения программы пользователь должен иметь возможность определять, какой объект нужно создать.

  4. При выполнении программы должна демонстрироваться работа всех методов для созданного объекта.

2. Описание предметной области

Предметная область – обычная, кухонная посуда. Основная иерархия классов описывает чашки и кружки. Вторичная иерархия - ложки. В базе основной иерархии лежит абстрактный класс посуда, от которого унаследованы остальные. Классы вторичной иерархии включают поле базового класса основной иерархии.

3. Описание работы

3.1 Спецификации

3.1.1 Описание классов

class Crockery - класс посуда, абстрактный класс

class Cup - класс чашка, производный от класса Crockery

class Mug - класс кружка, производный от класса Crockery

class Spoon – класс ложка, отдельный класс

class D_Spoon-Узор на ложке, производный от класса Spoon

3.1.2 Описание методов классов

class Crockery

Crockery();-конструктор

virtual float Get_Price()=0;-виртуальный метод получения цены

virtual Crockery *Copy()=0;-виртуальный метод копирования

virtual ~Crockery();-виртуальный деструктор

class Cup

Cup(int,double,char,int&);//конструктор

Cup(double,char,int&);//конструктор

Cup(Cup*,int&);//конструктор копирования

~Cup(){printf("DESTRUCTOR CUP WORKED WELL\n"); delete colvo; delete rad; delete colCH;}//деструктор

virtual float Get_Price();//виртуальный метод получения цены

Crockery *Copy();//виртуальный метод копирования объекта

void Cup_Set(int,double,char);//изменение значений полей

void Cup_Get(int&,double&,char&);// получение значений полей

double Cup_Vol();//получение объема

char Cup_Color(){return (*colCH);}//получение цвета чашки

class Mug

Mug(int,float,char,int&);//конструктор

Mug(float,int&);//конструктор

Mug(Mug*,int&);//конструктор копирования

~Mug(){printf("DESTRUCTOR MUG WORKED WELL\n"); delete colvo; delete vol; delete colKR;}//деструктор

virtual float Get_Price();//виртуальный метод получения цены

Crockery *Copy();//виртуальный метод копирования объекта

void Mug_Get(int&,float&,char&);//получение значений полей

void Mug_Set(int,float,char);//изменение значений полей

float Mug_FPrice();//получение первой цены

double M_and_C_VOL(Cup*);//получение обема чашки и кружки когда они вместе

class Spoon

Spoon(Crockery* ,float,char,double,int&);//конструктор

~Spoon(){printf("DESTRUCTOR Spoon WORKED WELL\n");delete f; delete Len; delete colLJ; delete OC;}//деструктор

float Spoon_GetPrice(){return f->Get_Price()*((*Len)+(*OC));}//получение полной цены одной ложки

float Spoon_Plosh(){return (*Len)*(*OC);}//площадь ложки, для находения объема ложки с узором

class D_Spoon

D_Spoon(float,Crockery *,float,char,double,int &);//конструктор

~D_Spoon(){printf("DESTRUCTOR D_SPOON WORKED WELL\n");delete V;}//деструктор

float Finish_Price(Spoon* T){return T->Spoon_GetPrice()+Vol_Design(T);}//цена ложки с узором

float Vol_Design(Spoon* T){return T->Spoon_Plosh()+(*V);}//объем ложки с узором

3.2 Схема иерархии классов

Полотно 8

3.3 Листинг программы

main.cpp

#include <stdlib.h>

#include <stdio.h>

#include "1.h"

int main()

{

int err,colvo,colvo2,flag;

char colKR,colCH;

double rad;

float k,vol;

int key=1;

Crockery * M;

while(key!=0)

{

printf("\n Please select the number \n");

printf("_________________________________________________ \n");

printf("| 1) MUG and SPOON |\n");

printf("| |\n");

printf("| 2) CUP and SPOON |\n");

printf("| |\n");

printf("| 3) CUP and SPOON and D_SPOON |\n");

printf("| |\n");

printf("| 4) MUG and SPOON and D_SPOON |\n");

printf("| |\n");

printf("| 5) COMMON VOLUME FOR MUG AND CUP |\n");

printf("| |\n");

printf("| 6) KONSTRUCTOR NUMBER 3 FOR CUP AND MUG |\n");

printf("| |\n");

printf("| 0 - EXIT |\n");

printf("|________________________________________________|\n");

printf("\n");

scanf("%d",&flag);

printf("\n");

///MUG and SPOON

if(flag==1)

{

M=new Mug(10,0.5,'Q',err);

k=M->Get_Price();

Spoon *L=new Spoon(M,10.0,'Y',7.5,err);

if(!err)

{

printf(" ________________________________________ \n");

printf(" | |\n");

printf(" | SPOON PRICE=%12f |\n",L->Spoon_GetPrice());

printf(" |________________________________________|\n\n");

delete L;

L=NULL;

}

Mug *F = new Mug(9,10.01,'R',err);

F->Mug_Set(5,4.6,'B');

F->Mug_Get(colvo,vol,colKR);

float a=F->Mug_FPrice();

printf(" ________________________________\n");

printf("| |\n");

printf("| FIRST_PRICE=%12f |\n",a);

printf("| COLVO=%12d |\n",colvo);

printf("| VOL= %12f |\n",vol);

printf("| COLOR=%12c |\n",colKR);

printf("|________________________________|\n\n");

printf(" _________________\n");

printf("| |\n");

printf("| %f |\n",k);

printf("|_________________|\n\n");

delete F;

delete M;

F=NULL;

M=NULL;

}

///COMMON VOLUME FOR MUG AND CUP

else if(flag == 5 )

{

Mug *K=new Mug(5.5,err);

Cup *P=new Cup(10.01,'Y',err);

printf(" _______________________________\n");

printf("| |\n");

printf("| COMMON VOLUME=%12f |\n",K->M_and_C_VOL(P));

printf("| |\n");

printf("| COLOR OF THE CUP: %12c|\n",P->Cup_Color());

printf("|_______________________________|\n\n");

delete P;

delete K;

}

///CUP and SPOON

else if(flag == 2 )

{

M=new Cup(10,5.5,'K',err);

k=M->Get_Price();

Spoon *L=new Spoon(M,10.0,'Y',7.5,err);

if(!err)

{

printf(" _______________________________________ \n");

printf(" | |\n");

printf(" | SPOON PRICE=%12f |\n",L->Spoon_GetPrice());

printf(" |_______________________________________|\n\n");

delete L;

L=NULL;

}

Cup *P=new Cup(10,1.5,'T',err);

P->Cup_Set(2,17.2,'N');

P->Cup_Get(colvo2,rad,colCH);

float a=P->Cup_Vol();

printf(" _______________________________\n");

printf("| |\n");

printf("| VOLUME OF CUP=%12f |\n",a);

printf("| COLVO=%12d |\n",colvo2);

printf("| VOL= %12f |\n",rad);

printf("| COLOR=%12c |\n",colCH);

printf("|_______________________________|\n\n");

printf(" ___________________\n");

printf("| |\n");

printf("| %12f |\n",k);

printf("|___________________|\n\n");

delete P;

delete M;

P=NULL;

M=NULL;

}

///MUG and SPOON and D_SPOON

if(flag==3)

{

M=new Cup(10,5.5,'K',err);

Spoon *L=new Spoon(M,10.0,'Y',7.5,err);

D_Spoon *Q=new D_Spoon(12.4,M,3.2,'B',8.3,err);

printf(" __________________________________________\n");

printf("| |\n");

printf("| RECEIVING AREA SPOONS: %12f |\n",Q->Spoon_Plosh());

printf("| |\n");

printf("| VOLUME DESIGN: %12f |\n",Q->Vol_Design(Q));

printf("| |\n");

printf("| SPOON GET PRICE: %12f |\n",Q->Spoon_GetPrice());

printf("| |\n");

printf("| FINISH PRICE SPOONS: %12f |\n",Q->Finish_Price(Q));

printf("|__________________________________________|\n\n");

delete Q;

delete L;

delete M;

Q=NULL;

L=NULL;

M=NULL;

}

if(flag==4)

{

M=new Mug(10,5.5,'B',err);

Spoon *L=new Spoon(M,10.0,'Y',7.5,err);

D_Spoon *Q=new D_Spoon(7.4,M,2.8,'B',5.6,err);

printf(" _________________________________________\n");

printf("| |\n");

printf("| RECEIVING AREA SPOONS: %12f |\n",Q->Spoon_Plosh());

printf("| |\n");

printf("| VOLUME DESIGN: %12f |\n",Q->Vol_Design(Q));

printf("| |\n");

printf("| SPOON GET PRICE: %12f |\n",Q->Spoon_GetPrice());

printf("| |\n");

printf("| FINISH PRICE SPOONS: %12f |\n",Q->Finish_Price(Q));

printf("|_________________________________________|\n\n");

delete Q;

delete L;

delete M;

Q=NULL;

L=NULL;

M=NULL;

}

///KONSTRUCTOR NUMBER 3 FOR CUP AND MUG

if(flag==6)

{

Cup *X;

X=new Cup(27,1.1,'R',err);

Cup *Tab=new Cup(X,err);

X->Cup_Get(colvo2,rad,colCH);

printf(" _______________________________\n");

printf("| |\n");

printf("| COLVO=%12d |\n",colvo2);

printf("| VOL= %12f |\n",rad);

printf("| COLOR=%12c |\n",colCH);

printf("|_______________________________|\n\n")

delete Tab;

Tab=NULL;

delete X;

X=NULL;

Mug *E=new Mug(15,40.56,'B',err);

Mug *Z=new Mug(E,err);

E->Mug_Get(colvo,vol,colKR);

printf(" ________________________________\n");

printf("| |\n");

printf("| COLVO=%12d |\n",colvo);

printf("| VOL= %12f |\n",vol);

printf("| COLOR=%12c |\n",colKR);

printf("|________________________________|\n\n");

//delete Z;

//Z=NULL;

delete E;

E=NULL;

}

///EXIT

if(flag==0)

{

key=0;

}

}

printf("KOSTROMIN D.A GROUP NUMBER M-113\n");

return 0;

}

1.CPP

#include <stdlib.h>

#include <stdio.h>

#include "1.h"

int main()

{

int err,colvo,colvo2,flag;

char colKR,colCH;

double rad;

float k,vol;

int key=1;

Crockery * M;

while(key!=0)

{

printf("\n Please select the number \n");

printf("_________________________________________________ \n");

printf("| 1) MUG and SPOON |\n");

printf("| |\n");

printf("| 2) CUP and SPOON |\n");

printf("| |\n");

printf("| 3) CUP and SPOON and D_SPOON |\n");

printf("| |\n");

printf("| 4) MUG and SPOON and D_SPOON |\n");

printf("| |\n");

printf("| 5) COMMON VOLUME FOR MUG AND CUP |\n");

printf("| |\n");

printf("| 6) KONSTRUCTOR NUMBER 3 FOR CUP AND MUG |\n");

printf("| |\n");

printf("| 0 - EXIT |\n");

printf("|________________________________________________|\n");

printf("\n");