Составление спецификаций. Изучение строковых типов данных и функций для их обработки, страница 2

       cin>>*B;

       cout<<"Введите пожалуйста число C типа double = ";

       cin>>*C;

       cout<<"Введите пожалуйста число D типа int = ";

       cin>>*D;

}

void CCalc::SaveToFile(char* FileName)//Функция сохранения в файл

{

       ofstream f(FileName);//Создаем файл

       f<<"Результат выражения = "<<DoIt(*A,*B,*C,*D)<<endl;

       f.close();

}

void CCalc::ReadFromFile(char*  FileName)//функция считывания с файла

{

       ifstream f(FileName);//Открываем файл

       f>>*A;

       f>>*B;

       f>>*C;

       f>>*D;

       f.close();

}

CCalc::~CCalc(void)

{

       delete A,B,C,D;

}

CStruct.h

#pragma once

#include "parent.h"

const int n=3;// размер массива структур

struct Knigi

{

       // запись о книге содержит данные:

            char *name;   // фамилия

              char *title; // название

              int stran; // страници

              int data; // год

};

class CStruct :

       public CParent

{

public:

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

       CStruct(char*,char*,int, int,char*,char*,int, int,char*,char*,int, int);//конструктор с данными

       CStruct(char*);//конструктор заполнения с файла

       void Show();//Вывод результата работы программы

       void InputData ();//Заполнение с клавиатуры

       void SaveToFile (char *FileS);//Сохранение в файл

       void ReadFromFile (char *FileR);//Запись в файл

       friend ostream & operator<< (ostream & output, Knigi *C);//перегрузка потока вывода

       friend istream & operator>> (istream & input, Knigi *C);//перегрузка потока ввода

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

private:

       Knigi *A[n];//массив структур указательного типа

       void sort();//функция сортировки

};

CStruct.cpp

#include "StdAfx.h"

#include "Struct.h"

char* Read()//считываем по символу

{

  int ch, str_size = 0;

  char * str = (char *) calloc(str_size, sizeof(char));//выделяем память

  while ((ch = getchar()) != '\n')//считываем в ch один символ и проверяем равен ли он переходу на новую строку

  {

    str = (char *) realloc(str, ++str_size);//выделяем память

    str[ str_size - 1 ] = (char) ch;//добавляем одну букву

  }

  str = (char *) realloc(str, ++str_size);//выделяем память

  str[ str_size - 1 ] = '\0';//записываем нуль-терминант

  return str;

}

CStruct::CStruct(void)//конструктор по умолчанию

{

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

       {

             A[i]= new Knigi;//Выделяем память

             A[i]->stran=0;//заполняем по умолчанию

             A[i]->data=0;//заполняем по умолчанию

       }

}

CStruct::CStruct(char* a1 ,char* b1,int c1, int d1,char* a2,char* b2,int c2 , int d2 ,char* a3,char* b3 ,int c3 , int d3)//конструктор c данными

{

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

       {

             A[i]= new Knigi;//Выделяем память

       }

       strcpy(A[0]->name,a1);//заполняем значениями

       strcpy(A[1]->name,a2);//заполняем значениями

       strcpy(A[2]->name,a3);//заполняем значениями

       strcpy(A[0]->title,b1);//заполняем значениями

       strcpy(A[1]->title,b2);//заполняем значениями

       strcpy(A[2]->title,b3);//заполняем значениями

       A[0]->stran = c1;//заполняем значениями

       A[1]->stran = c2;//заполняем значениями

       A[2]->stran = c3;//заполняем значениями

       A[0]->data = d1;//заполняем значениями

       A[1]->data = d2;//заполняем значениями

       A[2]->data = d3;//заполняем значениями

}

CStruct::CStruct(char *FileName)//конструктор считывания с файла

{

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

       {

             A[i]= new Knigi;//Выделяем память

             A[i]->stran=0;//заполняем по умолчанию