кафедра 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)
{}
Результат:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.