Представление информации (данных о дате: день, месяц и год) в виде класса

Страницы работы

Содержание работы

кафедра 304

Лабораторная работа № 6

по предмету «Программирование»

Выполнила студентка 315 гр.

Старцева А.В.

Проверила доц. каф. 304

Бакуменко Н.С.

______________________

Тема: Классы

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

1.  Должна содержать, по крайней мере, два класса – первый, описывающий  поля Вашего класса, согласно заданию, а второй – содержащий массив из элементов первого класса.

2.  Каждый из классов должен иметь, по крайней мере, один конструктор. Если класс содержит указатели, то и деструктор.

3.  Все поля каждого класса должны быть описаны как private

4.  Для каждого класса необходимо реализовать  - переопределить операции ввода-вывода <<  и >>, например, как дружественные функции.

5.  Методы класса, которые решаю т задачи Вашего варианта, не должны что-то выводить на печать, в файл, а также получать информацию непосредственно из файла (кроме операций <<  и >>). Исходные данные – поля класса и параметры, результаты – поля класса, параметры и возвращение результата через return.

6.   Текст программы должен содержать, пусть минимальные, спецификации – комментарии.

7.  Для своего класса (классов) переопределить какую-нибудь операцию (операции). По возможности операции должны быть полезными при выполнении заданий Вашего варианта.

Условие:  Дата: день, месяц и год. Найти: последнюю дату; все даты в заданном году.

Кодпрограммы:

#include "stdafx.h"

#include <iostream>

#include <string>

#include "TaskDate.h"

using namespace std;

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

{

       setlocale(LC_ALL,"RUS");

       TaskDate MyTaskDate;//Объект типа класса

       MyTaskDate.in();//Вызов метода считывания

       MyTaskDate.god();//Вызов метода нахождения максимального года

       MyTaskDate.allDate();//Вызов метода нахождения всех дат в заданном году

       system("pause");

       return 0;

}

Файл Date.h

#pragma once

#include <string>

#include <iostream>

using namespace std;

//Основной класс

class Date

{

public:

       Date(void);

       Date(int, string, int);

       void setDay(int);

       int getDay();

       void setMonth(string);

       string getMonth();

       void setYear(int);

       int getYear();

       //Метод для вычесления числа дней

       int MyYear();

       friend istream& operator >> (istream &stream, Date &obj);//Перегрузка оператора ввода

       friend ostream& operator << (ostream &stream, Date &obj);//Перегрузка оператора вывода

       virtual ~Date(void);//Диструктор

private://Поля

       int day;//День

       string month;//Месяц

       int year;//Год

};

Файл Date.cpp

#include "stdafx.h"

#include "Date.h"

Date::Date(void)

{

}

void Date::setDay(int d)

{day=d;}

int  Date::getDay()

{return day;}

void Date::setMonth(string s)

{month=s;}

string Date::getMonth()

{return month;}

void Date::setYear(int y)

{year=y;}

int Date::getYear()

{return year;}

int Date::MyYear()

{

       int k=0;

       int cur=0;

             if(month.compare("January")) k=1;

             if(month.compare("February")) k=2;

             if(month.compare("March")) k=3;

             if(month.compare("April")) k=4;

             if(month.compare("May")) k=5;

             if(month.compare("June")) k=6;

             if(month.compare("July")) k=7;

             if(month.compare("August")) k=8;

             if(month.compare("September")) k=9;

              if(month.compare("October")) k=10;

             if(month.compare("November")) k=11;

             if(month.compare("December")) k=12;

             cur=366 * year + k * 31 + day;

             return cur;

}

//Перегрузка метода чтения потока, использующая базовый класс Istream

istream& operator >> (istream &stream, Date &obj)

{

       stream>>obj.day;

       stream>>obj.month;

       stream>>obj.year;

       return stream;

}

//Перегрузка метода записи потока, использующая базовый класс Istream

ostream& operator << (ostream &stream, Date &obj)

{

       stream<<obj.day<<" ";

       stream<<obj.month<<" ";

       stream<<obj.year << endl;

       return stream;

}

Date::~Date(void)

{

}

Файл TaskDate.h

#pragma once

#include "Date.h"//Подключаем первый основной класс

#include <vector>//шаблон станд. библ. , динам. массив произв. доступа

//Класс массив данных

class TaskDate

{

public:

       TaskDate(void);//Конструктор

       void in();//Метод чтения

       void god();//Метод нахождения максимального года

       void allDate();//Метод нахождения всех дат

       virtual ~TaskDate(void);//Деструктор

private:

       vector<Date> Massiv;//Массив для хранения записанных данных(полей) из первого класса

};

Файл TaskDate.cpp

#include "stdafx.h"

#include "TaskDate.h"

#include <iostream>

#include <fstream>

#include <iostream>

#include <vector>

using namespace std;

TaskDate::TaskDate(void)

{}//Конструктор по умолчанию

//Метод чтения потока

void TaskDate::in()

{

       ifstream fileIn("D:\\in.txt"); //Открываем файл

       if (fileIn) //Проверяем открылся ли файл

       {

         int countLine=0;//Переменная хранящая количество строк

         while (!fileIn.eof()) {//Проверяем ,пока, не конец файла

                    Date d;//Переменная для хранения инфо. в полях класса Date

               fileIn>>d;//считываем переменную

               countLine++;

              }

    cout << "File has " << countLine<<endl;//Выводим количество прочитанных строк

       fileIn.seekg(0, fileIn.beg ); // Функция возвращающая на начальную позицию для чтения файла

       //либо можно закрыть файл и снова открыть

       //fileIn.close();

       //fileIn.open("D:\\in.txt");

             for(int i=0;i<countLine;i++)//цикл считывания дат

             {

       Date d;//Переменная для хранения инфо. в полях класса Date

       fileIn>>d;//считываем переменную

       Massiv.push_back( d );//Добавляем новый элем. в конец вектора

       cout << Massiv[i];}//выводим переменные

       }

       else

             cout<<"Error!"<<endl;//Ошибка

}

void TaskDate::god()

{

  int maxElement = 0;

  for(int i=0;i< Massiv.size() ; i++)

       {

             if (Massiv[ maxElement].MyYear() < Massiv[i].MyYear())//Сравниваем макс. элем с текущим

             maxElement=i;

       }

cout<<endl<<"Maximal date is :"<<Massiv[ maxElement]<<endl;

}

void TaskDate::allDate()

{

       int year;

       cout<<"Please type in a year, the dates you want to see:"<<endl;

       cin>>year;

       cout<<"All dates are:"<<endl;

       for(int i=0;i< Massiv.size() ; i++)

       {

             if ( Massiv[i].getYear()==year)

                    cout<<Massiv[i];

       }

}

TaskDate::~TaskDate(void)

{}

Результат:

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
412 Kb
Скачали:
0