3 Индивидуальное задание
Разработать связи между следующими классами: «Часы», «Механические часы», «Электронные часы», «Циферблат», «Источник энергии» Все классы должны содержать функции получения и изменения всех полей. Написать программу, позволяющую получать сведения о часах. Использовать конструктор с параметрами, конструктор без параметров, конструктор копирования. В класс добавить необходимый набор полей и методов (минимум два поля и два метода) на свое усмотрение. Предусмотреть метод для записи полученных данных в файл.
4 Код решения индивидуального задания
“main.h”
#include <iostream>
#include <Windows.h>
#include "El.h"
#include "Clockandother.h"
#include "Mex.h"
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
int a = -1;
Clock * m, * l; //указатели для хранения данных о фигуре каждого класса
string color;
string name;
string y;
string z;
double x;
cout << "Введите данные о МЕХАНИЧЕСКИХ ЧАСАХ\n";
cout << "Ведите стоимость часов в $: ";
cin >> x;
cout << "Выбирите способ получения энергии" << endl;
cout << "(1 - зарядное устройство, 2 - солнечная энергия, 3 - батарейки) " << endl;
cin >> a;
switch (a)
{
case 1:
{
y = "зарядное устройство";
break;
}
case 2:
{
y = "солнечная энергия";
break;
}
case 3:
{
y = "батарейки";
break;
}
}
int k = -1;
cout << "Выбирите вид циферблата" << endl;
cout << "(1 - аналоговый, 2 - цифровой, 3 - комбинированный, 4 - бинарный) " << endl;
cin >> k;
switch (k)
{
case 1:
{
z = "аналоговый";
break;
}
case 2:
{
z = "цифровой";
break;
}
case 3:
{
z = "комбинированный";
break;
}
case 4:
{
z = "бинарный";
break;
}
}
cout << "Выберите цвет: ";
cin >> color;
cout << "Придумайте наименование часам: ";
cin >> name;
m= new Mex(x, y, z, name, color); //создаем
int o = -1;
cout << "\nВведите данные об ЭЛЕКТРОННЫХ ЧАСАХ\n";
cout << "Ведите стоимость часов в $: ";
cin >> x;
cout << "Выбирите способ получения энергии" << endl;
cout << "(1 - зарядное устройство, 2 - солнечная энергия, 3 - батарейки) " << endl;
cin >> o;
switch (o)
{
case 1:
{
y = "зарядное устройство";
break;
}
case 2:
{
y = "солнечная энергия";
break;
}
case 3:
{
y = "батарейки";
break;
}
}
int r = -1;
cout << "Выбирите вид циферблата" << endl;
cout << "(1 - аналоговый, 2 - цифровой, 3 - комбинированный, 4 - бинарный) " << endl;
cin >> r;
switch (r)
{
case 1:
{
z = "аналоговый";
break;
}
case 2:
{
z = "цифровой";
break;
}
case 3:
{
z = "комбинированный";
break;
}
case 4:
{
z = "бинарный";
break;
}
}
cout << "Выберите цвет: ";
cin >> color;
cout << "Придумайте наименование часам: ";
cin >> name;
l = new El(x, y, z, name, color);
//вывод данных
cout << "Мех.часы, цвет: " << m->GetColor()<< " Наименование: " << m->GetName() << ".\nСтоимость в $: " << m->GetX() << "; Получают энергию с помощью:" << m->GetY() << "\nВид циферблата: " << m->GetZ() << endl;
cout << "Электронные часы, цвет: " << l->GetColor() << " Наименование: " << l->GetName() << ".\nСтоимость в $: " << l->GetX() << "; Получают энергию с помощью:" << l->GetY() << "\nВид циферблата: " << l->GetZ() << endl;
//работа с фигурами через меню
int command = -1;
while (command != 0) //пока не выбран выход из программы
{
//вывод меню
cout << "\nМеню:\n";
cout << "1 - Вывод данных о часах\n";
cout << "----------------------------------------" << endl;
cout << "\n2 - Изменить СТОИМОСТЬ механических часов\n";
cout << "3 - Изменить ЦВЕТ механических часов\n";
cout << "4 - Изменить НАИМЕНОВАНИЕ мех.часов\n";
cout << "\n5 - Изменить способ ПОЛУЧЕНИЯ ЭНЕРГИИ мех.часов\n";
cout << "6 - Изменить ВИД ЦИФЕРБЛАТА мех.часов\n";
cout << "----------------------------------------" << endl;
cout << "\n7 - Изменить СТОИМОСТЬ эл. часов\n";
cout << "8 - Изменить ЦВЕТ электронных часов\n";
cout << "9 - Изменить НАИМЕНОВАНИЕ эл.часов\n";
cout << "\n10 - Изменить способ ПОЛУЧЕНИЯ ЭНЕРГИИ эл.часов\n";
cout << "11 - Изменить ВИД ЦИФЕРБЛАТА эл.часов\n";
cout << "----------------------------------------" << endl;
cout << "12 - Запись данных о ЧАСАХ в файл figures.txt\n";
cout << "13 - Перевести из долларов $ в BYN\n";
cout << "0 - Выход\n";
cout << "\nВведите номер команды: ";
cin >> command;
cout << "\n";
//в зависимости от команды выполняем действие
switch (command)
{
case 1:
{
cout << "Мех.часы, цвет: " << m->GetColor() << "Наименование: " << m->GetName() << ".\nСтоимость в $: " << m->GetX() << "; Получают энергию с помощью:" << m->GetY() << "\nВид циферблата: " << m->GetZ() << endl;
cout << "Электронные часы, цвет: " << l->GetColor() << "Наименование: " << l->GetName() << ".\nСтоимость в $: " << l->GetX() << "; Получают энергию с помощью:" << l->GetY() << "\nВид циферблата: " << l->GetZ() << endl;
break;
}
case 2:
{
cout << "Введите новую стоимость: ";
cin >> x;
m->SetX(x);
break;
}
case 3:
{
cout << "Введите новый цвет: ";
cin >> color;
m->SetColor(color);
break;
}
case 4:
{
cout << "Введите новое наименование: ";
cin >> name;
m->SetName(name);
break;
}
case 5:
{
int s = -1;
cout << "Введите новый способ ПОЛУЧЕНИЯ ЭНЕРГИИ мех.часов: ";
cout << "(1 - зарядное устройство, 2 - солнечная энергия, 3 - батарейки) " << endl;
cin >> s;
switch (s)
{
case 1:
{
y = "зарядное устройство";
break;
}
case 2:
{
y = "солнечная энергия";
break;
}
case 3:
{
y = "батарейки";
break;
}
}
m->SetY(y);
}
case 6:
{
int v = -1;
cout << "Выбирите новый вид циферблата" << endl;
cout << "(1 - аналоговый, 2 - цифровой, 3 - комбинированный, 4 - бинарный) " << endl;
cin >> v;
switch (v)
{
case 1:
{
z = "аналоговый";
break;
}
case 2:
{
z = "цифровой";
break;
}
case 3:
{
z = "комбинированный";
break;
}
case 4:
{
z = "бинарный";
break;
}
}
m->SetZ(z);
}
case 7:
{
cout << "Введите новую стоимость: ";
cin >> x;
l->SetX(x);
break;
}
case 8:
{
cout << "Введите новый цвет: ";
cin >> color;
l->SetColor(color);
break;
}
case 9:
{
cout << "Введите новое наименование: ";
cin >> name;
l->SetName(name);
break;
}
case 10:
{
int s = -1;
cout << "Введите новый способ ПОЛУЧЕНИЯ ЭНЕРГИИ эл.часов: ";
cout << "(1 - зарядное устройство, 2 - солнечная энергия, 3 - батарейки) " << endl;
cin >> s;
switch (s)
{
case 1:
{
y = "зарядное устройство";
break;
}
case 2:
{
y = "солнечная энергия";
break;
}
case 3:
{
y = "батарейки";
break;
}
}
l->SetY(y);
}
case 11:
{
int v = -1;
cout << "Выбирите новый вид циферблата" << endl;
cout << "(1 - аналоговый, 2 - цифровой, 3 - комбинированный, 4 - бинарный) " << endl;
cin >> v;
switch (v)
{
case 1:
{
z = "аналоговый";
break;
}
case 2:
{
z = "цифровой";
break;
}
case 3:
{
z = "комбинированный";
break;
}
case 4:
{
z = "бинарный";
break;
}
}
l->SetZ(z);
}
case 12: //запись в файл
{
ofstream out("clock.txt"); //создаем файл
m->WriteToFile(out);
l->WriteToFile(out);
out.close();
cout << "Данные о часах успешно записаны в файл clock.txt!\n";
break;
}
case 13:
{
cout << "Стоимость механических часов в бел.рублях составляет : " << ((Mex*)m)->CalcPB() <<endl;
cout << "Стоимость электронных часов в бел.рублях составляет : " << ((El*)l)->CalcPB() << endl;
break;
}
case 0:
{
break;
}
default:
{
cout << "Неверная команда!\n";
break;
}
}
}
system("pause");
}
“clockandother”
#pragma once
#include <string>
#include <fstream>
using namespace std;
//базовый для остальных классов
class Energy
{
};
class Ciferblat
{
};
class Clock : public Ciferblat, Energy
{
protected:
double x; //стоимость часов
string y; //энергия (батарея)
string z; //циферблат
string color; //цвет часов
string name; //наименование часов
public:
//конструктор, который будет вызываться в классах-наследниках
Clock(double x, string y, string z, string color, string name)
{
this->x = x; this->y = y; this->z = z; this->color = color; this->name = name;
}
//методы
void SetX(double x) { this->x = x; }
void SetColor(string color) { this->color = color; }
void SetName(string name) { this->name = name; }
void SetY(string y) { this->y = y; }
void SetZ(string z) { this->z = z; }
double GetX() { return this->x; }
string GetY() { return this->y; }
string GetZ() { return this->z; }
string GetColor() { return this->color; } //узнать цвет
string GetName() { return this->name; } //узнать наименование часов
//виртуальные методы, которые будут перегружены в каждом классе
virtual double CalcPB() = 0; //перевести стоимость с $ в бел.р.
virtual void WriteToFile(ofstream& out) = 0; //запись данных в открытый файл
};
“Mex.h”
#pragma once
#include "Clockandother.h"
class Mex :
public Clock
{
private:
public:
Mex(double x, string y, string z, string color, string name);
double CalcPB() override;
void WriteToFile(ofstream& out) override;
};
“Mex.cpp”
#include "Mex.h"
Mex::Mex(double x, string y, string z, string color, string name) : Clock(x, y, z, name, color)
{
this->x = x;
}
double Mex::CalcPB()
{
return x/2.6;
}
void Mex::WriteToFile(ofstream& out)
{
out << "Механические часы, стоимость в $: " << this->GetX() << "; В бел.руб.: " << this->CalcPB() << " ;ЦВЕТ: " << this->GetColor() << " ;НАИМЕНОВАНИЕ: " << this->GetName()
<< " ; Способ получения энергии: " << this->GetY() << " ; Вид циферблата: " << this->GetZ() << endl;
}
“El.h”
#pragma once
#pragma once
#include "Clockandother.h"
class El :
public Clock
{
protected:
public:
El(double x, string y, string z, string color, string name);
//перегружаемые методы
double CalcPB() override;
void WriteToFile(ofstream& out) override;
};
“El.cpp”
#include "El.h"
El::El(double x, string y, string z, string color, string name) : Clock(x, y, z, name, color)
{
this->x = x;
}
double El::CalcPB()
{
return x /2.6;
}
//запись данных в файл
void El::WriteToFile(ofstream& out)
{
out << "Электронные часы, стоимость в $: " << this->GetX() << "; В бел.руб.: " << this->CalcPB() << " ;ЦВЕТ: " << this->GetColor() << " ;НАИМЕНОВАНИЕ: " << this->GetName()
<< " ; Способ получения энергии: " << this->GetY() << " ; Вид циферблата: " << this->GetZ() << endl;
}