Помогите пожалуйста в решении задачи:
Общая постановка. Создать программу с абстрактным базовым классом и множественным наследованием,(либо иерархией классов) реализовать в нем:
- конструктор,
- деструктор,
- виртуальную функцию просмотра текущего состояния объекта print(),
- friend – функцию Run ().
Производные классы должны содержать переопределенную функцию просмотра состояния объектов, а также при вводе – выводе данных использовать функции обработки исключительных ситуаций. Используя стандартные файловые потоки, информацию об объектах вывести в файл.Для корректной работы с файлом использовать обработку исключительных ситуаций.
Мобильные телефоны (наименование, фирма, стандарт связи, заряд аккумулятора, потребление при ожидании, потребление при разговоре, время ожидания - функция Run (), время разговора –функция Run1 ()).
Вот то что я написал:
Код:
#include <iostream>
#include <string.h>
#include <conio.h>
#include <iomanip>
#include <fstream>
using namespace std;
class cMobil{
public:
virtual ~cMobil();
virtual void print();
static void PrintAll();
static void DeleteAll();
cMobil (const char *NAME);
cMobil (){}
char* name; //Наименование
char firma[30]; //Фирма
char standart[30]; //Стандарт связи
int akm; //Заряд аккумулятора
int po; //Потребление при ожидании
int pr; //Потребление при разговоре
private:
cMobil* next;
static cMobil* first;
};
class cTime: public cMobil{
public:
cTime (const char *NAME);
cTime (){}
void print();
friend float Run(int AKM,int PO);
friend float Run1(int AKM,int PR);
};
cMobil* cMobil::first=NULL;
cMobil::cMobil(const char *NAME){
name = new char [strlen(NAME)+1];
strcpy (name,NAME);
cout<<"Firm: ";
cin>>firma;
cout<<"Standard connection: ";
cin>>standart;
cout<<"Battery charge: ";
cin>>akm;
cout<<"Consumption at expectation: ";
cin>>po;
cout<<"Consumption at conversation: ";
cin>>pr;
next=first;
first=this;
cout<<"\nData is accepted. Press any key to continue";
getch();
system("cls");
}
cMobil::~cMobil(){
delete [] name;
}
float Run(int AKM, int PO){
float rez = AKM / PO;
return rez;
}
float Run1(int AKM,int PR){
float rez = AKM / PR;
return rez;
}
void cMobil::print(){
cout<<endl<<"|"<<setw(8)<<name<<"|"<<setw(8)<<firma<<"|"<<setw(19)<<standart<<"|"<<setw(14)<<akm<<"|"<<setw(26)<<po<<"|"<<setw(27)<<pr;
ofstream os("text.txt",ios::app);
os << endl<<"|"<<setw(8)<<name<<"|"<<setw(8)<<firma<<"|"<<setw(19)<<standart<<"|"<<setw(14)<<akm<<"|"<<setw(26)<<po<<"|"<<setw(27)<<pr;
os.close();
}
cTime::cTime(const char *NAME):cMobil(NAME)
{
//...
}
void cTime::print(){
cMobil::print();
cout<<"|"<<setw(12)<<Run(akm,po)<<"|"<<setw(17)<<Run1(akm,pr)<<"|"<<endl;
cout<<"--------------------------------------------------------------------------------------------------------------------------------------------";
ofstream os("text.txt",ios::app);
os << "|"<<setw(12)<<Run(akm,po)<<"|"<<setw(17)<<Run1(akm,pr)<<"|"<<endl;
os << "--------------------------------------------------------------------------------------------------------------------------------------------";
os.close();
}
void cMobil::PrintAll()
{
cout<<"--------------------------------------------------------------------------------------------------------------------------------------------"<<endl;
cout<<"| Name | Firm |Standard connection|Battery charge|Consumption at expectation|Consumption at conversation|Waiting time|Conversation time|"<<endl;
cout<<"--------------------------------------------------------------------------------------------------------------------------------------------";
ofstream os("text.txt",ios::out );
os << "--------------------------------------------------------------------------------------------------------------------------------------------"<<endl;
os << "| Name | Firm |Standard connection|Battery charge|Consumption at expectation|Consumption at conversation|Waiting time|Conversation time|"<<endl;;
os << "--------------------------------------------------------------------------------------------------------------------------------------------";
os.close();
cMobil* pMobil=first;
while(pMobil)
{
pMobil->print();
pMobil=pMobil->next;
}
cout<<"\nPress any key to continue";
getch();
system("cls");
}
int main()
{
int x;
do{
cout<<"\nSelect the menu item:"<<endl;
cout<<"\n1 - Data input\n2 - Saving in a file and print on the screen\n3 - Exit\n"<<endl;
cout<<"You have chosen: ";
cin>>x;
switch (x)
{
case 1:
system("cls");
char name[100];
cout<<"Name: ";
cin>>name;
new cTime(name);
break;
case 2:
system("cls");
cMobil::PrintAll();
break;
}
}while(x!=3);
return 0;
}