Представление информации (данных о журнале: название, номер и фамилия читателя) в виде класса, страница 2

istream & operator >> (istream & f1, Tmag & u )//дружественная функция, перегрузка операции ввода

{

       f1>>u.n;//реальное количество элементов в массиве

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

             f1>>u[i];

       cout<<"Введите заданный журнал: ";

       cin>>u.str;//заданный журнал

       return f1;

}

ostream & operator << (ostream & f2, Tmag & u )//дружественная функция, перегрузка операции вывода

{

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

             f2<<u[i];

       u.reader();//вызов функции

       f2<<endl<<"Фамилии читателей журналов: "<<endl;

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

             f2<<u.a[i]<<endl;

       return f2;

}

int Tmag::num (void)//последний номер заданного журнала

{

       int * temp=new int [n];//для содержания номеров заданного журнала 

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

       {

             if(!strcmp(str,mass[j].Get_namemag()))//Функция strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение

             {

                    temp[j]=mass[j].Get_nomer();//если заданный журнал

             }

             else temp[j]=0;//иначе присваеваем элементу ноль

       }

       int max_nomer=temp[0];//присваиваем переменной первый элемент массива

       for (int i = 1; i < n; i++)//цикл со второго элемента

             if(temp[i]>max_nomer)//если i-ый элемент массива больше, чем первый,

                    max_nomer = temp[i];//то присваиваем переменной значение i-ого элемента

       delete []temp;//очистка памяти

       return max_nomer;//возвращает максимальный номер заданного журнала

}

void Tmag::reader (void)//фамилии читателей журналов

{

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

             a[i]=mass[i].Get_name();

}

Tmag::~Tmag(void)//деструктор

{

}

mag.cpp

#include "StdAfx.h"

#include "mag.h"

#include <iomanip>

//mag (char * new_namemag="Космос", int new_nomer=5, char * new_name="Демидович");

mag::mag(void)//конструктор

{

       namemag == "Космос"; nomer = 5; name == "Демидович";

}

char* mag::Get_namemag(void)//возвращает название журнала

{

       return namemag;

}

int mag::Get_nomer(void)//возвращает номер

{

       return nomer;

}

char* mag::Get_name(void)//возвращает фамилию читателя

{

       return name;

}

istream & operator >> (istream & f1, mag &p )//дружественная функция, перегрузка операции ввода

{

       f1>>p.namemag>>p.nomer>>p.name;

       return f1;

}

ostream & operator << (ostream & f2, mag &p )//дружественная функция, перегрузка операции вывода

{

       f2<<setw(max_n+1)<<p.namemag<<setw(13)<<p.nomer<<setw(13)<<p.name<<endl;

       return f2;

}

mag::~mag(void)//деструктор

{

}

lb4.cpp

// lb4.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "Tmag.h"

#include <fstream>

#include <windows.h>

using namespace std;

ifstream f1("G:\\in.txt");//исходный файл    

ofstream f2("G:\\out.txt");//файл-результат

int _tmain(int argc, _TCHAR* argv[])

{

       //русская раскладка

       SetConsoleCP(1251);

       SetConsoleOutputCP(1251);

       Tmag magazines;     // данные о журналах

       // чтение данных из файла

    if (!f1)

             cout<<"Файл не найден!"<<endl<<endl;

       f1>>magazines;

       f1.close();

       // вывод результата

    if (!f2)

             cout<<"Файл не найден!"<<endl<<endl;

       f2<<magazines;

       f2<<endl<<"Максимальный номер заданного журнала: "<<magazines.num()<<endl;

       f2.close();

       system("pause");

       return 0;

}

Результаты:

Файл с исходными данными "G:\\in.txt"

  

Консоль

Результат в файле "G:\\out.txt

Выводы: закрепили знания работы функций; научились решать данную задачу в виде класса