Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:05. Функции / Examples / 01_references / Date
.cpp#include "Date.h"
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
/* Функция запрашивает ввод даты с клавиатуры и заносит её в структуру по
адресу, переданному в качестве параметра */
void askForDate(Date* pDate)
{
cout << "Enter date in format dd.mm.yyyy: ";
int mm;
char c; // символ для считывания точек
cin >> pDate->dd >> c
>> mm >> c
>> pDate->yyyy;
pDate->mm = (Month)mm;
}
/* Функция для вывода даты на консоль */
void printDate(const Date* pDate)
{
cout << setfill('0');
cout << setw(2) << pDate->dd<< '.';
cout << setw(2) << (int)pDate->mm << '.';
cout << setw(4) << pDate->yyyy;
cout << setfill(' ');
}
/* Функция для определения, является ли год переданной даты високосным */
bool isLeapYear(const Date* pDate)
{
int y = pDate->yyyy;
if ( y % 4 == 0 &&
(y % 100 != 0 || y % 400 == 0) )
return true;
else
return false;
}
Date getCurrentDate()
{
Date currentDate;
time_t timestamp; // Отметка времени - количество секунд после начала Unix-эпохи
tm* ptm; // Указатель на структуру, которая будет содержать поля
// даты для числа, месяца, года и т.д.
// Получаем кол-во секунд, прошедших с начала Unix-эпохи до тек. момента
time(×tamp);
// Заполняем структуру типа tm на основе переданной отметки времени
ptm = gmtime(×tamp);
// Заполняем нашу переменную типа date на основе полей структуры типа tm
currentDate.dd = ptm->tm_mday;
currentDate.mm = (Month)(ptm->tm_mon + 1);
currentDate.yyyy = ptm->tm_year + 1900;
return currentDate;
}
/* Функция сравнивает две даты. Возвращает отрицательное число,
если первая дата предшествует второй, положительное - если наоборот,
и ноль, если даты равны. */
int compareDates(const Date* pDate1, const Date* pDate2)
{
if (int yyyyDiff = pDate1->yyyy - pDate2->yyyy)
return yyyyDiff;
if (int mmDiff = pDate1->mm - pDate2->mm)
return mmDiff;
return pDate1->dd - pDate2->dd;
}
Соседние файлы в папке 01_references