#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;
}