Пример 2: Класс, описывающий время

#include <iostream>

#include <conio.h>

#include <windows.h>

using namespace std;

class CTime

{// Элементы данных: часы, минуты, секунды:

WORD hour, min, sec;

// функции:

public:

/* благодаря значениям по умолчанию можно объединить два конструктора(по умолчанию и основной) в один: */

CTime(WORD _hour=0, WORD _min=0, WORD _sec=0)

{

//согласно спецификации от Microsoft ms-help: //MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/sysinfo/base/systemtime_str.htm

if((_hour<0||_hour>23)||(_min<0||_min>59)||(_sec<0||_sec>59))

{

SYSTEMTIME t;

GetLocalTime(&t);

_hour = t.wHour;

_min = t.wMinute;

_sec = t.wSecond;

}

hour = _hour; min = _min, sec = _sec;

}

//конструктор копирования:

CTime(const CTime& tm)

{

hour = tm.hour; min = tm.min, sec = tm.sec;

}

// функции ввода-вывода:

void Input()

{

do

{

cout << "Задайте время (часы минуты секунды) ";

cin >> hour >> min >> sec;

} while((hour<0||hour>23)||(min<0||min>59)||(sec<0||sec>59));

}

void Output()

{

cout << hour << ":" << min << ":" << sec << endl;

}

// функции доступа:

int GetHour(){return hour;}

int GetMin() {return min;}

int GetSec() {return sec;}

void SetHour(int newhour)

{

if(newhour<0||newhour>23)

{

SYSTEMTIME t;

GetLocalTime(&t);

hour = t.wHour;

}

else

hour = newhour;

}

void SetMin(int newmin)

{

if(newmin<0||newmin>59)

{

SYSTEMTIME t;

GetLocalTime(&t);

min=t.wMinute;

}

else

min = newmin;

}

void SetSec(int newsec)

{

if(newsec<0||newsec>59)

{

SYSTEMTIME t;

GetLocalTime(&t);

sec=t.wSecond;

}

else

sec = newsec;

}

//функция, которая считывает системное время в текущий объект:

void TodayTime()

{

SYSTEMTIME t; /* структура типа SYSTEMTIME определена в заголовочном файле <windows.h> */

GetLocalTime(&t);

/* считываем системное время с помощью функции, объявленной в <windows.h>, при этом заполняется структура t */

/* устанавливаем текущее время, используя элементы структуры t: */

hour = t.wHour;

min = t.wMinute;

sec = t.wSecond;

}

/* функция, которая устанавливает новое системное время, используя элементы данных текущего объекта: */

void SetTime()

{

SYSTEMTIME t; /*структура типа SYSTEMTIME, которая требуется функции SetLocalTime(), устанавливающей системное время: */

/* заполняем структуру t, используя элементы данных текущего объекта и местное время: */

GetLocalTime(&t);

t.wHour = hour;

t.wMinute = min;

t.wSecond = sec; // сотые доли секунды

SetLocalTime(&t); // устанавливаем новое системное ms-help: //MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/sysinfo/base/setlocaltime.htm

}

};

// пример программы, использующей класс CTime:

int main()

{

//Настройки шрифтов и региональных стандартов:

if(SetConsoleCP(1251)==0)

//проверка правильности установки кодировки символов для ввода

{

cerr<<"Fialed to set codepage!"<<endl;

/* если не удалось установить кодовую страницу, вывод сообщения об ошибке */

}

if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

CTime tm1, tm2;

tm1.Input();

cout << "Задано время: ";

tm1.Output();

tm2.TodayTime();

cout << "Системное время: ";

tm2.Output();

// Корректируем количество минут в системном времени:

WORD mn;

cout << "Задайте минуты ";

cin >> mn;

tm2.SetMin(mn);

tm2.SetTime();

tm2.TodayTime();

cout << "Новое системное время: ";

tm2.Output();

_getch();

return 0;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: