Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ПП1 (C++ БД).doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
5 Мб
Скачать
☆

Раздел 4. Развитые компонеты

При изучении данного раздела вы должны проработать следующие темы:

4.1. Работа с данными типа DateTime.

4.2. Работа с двумерными массивами.

4.3. Компоненты навигаторов.

4.4. Использование указателей.

Для проверки усвоения материала вам предстоит ответить на вопросы для самопроверки, приведённые в конце раздела, а затем выполнить контрольную работу №1 (только для студентов очно-заочной и заочной форм обучения), лабораторные работы №1.7, №1.8, №1.9 и тренировочный тест №4. Изучение раздела заканчивается контролем знаний: необходимо ответить на вопросы контрольного теста №4. Максимальное количество баллов, которое вы можете получить по данному разделу, равно 20 (1.5 баллов за тестирование, 9.5 за контрольную работу и ещё 9 баллов за лабораторные работы).

4.1. Работа с данными типа DateTime

Данные этого тапа предназначены для обработки как текущих значений даты и времени, так и для определения интервалов между двумя датами. Последняя операция постоянно встречается в задачах по управлению персоналом, когда требуется узнать, сколько дней, месяцев или лет проработал сотрудник на предприятии. Для этой цели система C++Builder предлагает множество удобных функций и процедур.

Тип TDateTime во внутреннем представлении является числом с плавающей точкой типа double , целая часть которого содержит число дней, отсчитанное от некоторого начала календаря, а дробная часть выражает число миллисекунд текущих суток, начиная с 00 часов.

Для 32-разрядных версий операционной системы за начало календаря принята дата 00 часов 30 декабря 1899 года. Таким образом, данное типа TDateTime, рассмотренное как число типа double :

39948.794278

представляет дату 15 мая 2009 года и время 23 ч, 38 мин , 49 сек, 654 мсек.

Прибавление к значению типа TDateTime целого числа D равносильно увеличению даты на D дней. Разность двух значений типа TDateTime дает разность двух дат с точностью до долей дня.

Компоненты типа «календарь»

Назначение: ввод даты и времени с клавиатуры

Варианты:

DateTimePicker выпадающий календарь

MonthCalendar постоянный календарь

Оба типа компонента расположены на вкладке Win32 палитры компонентов. Их внешний вид изображен на рис. 49.

Рис. 49. Варианты календарей, начальное состояние

Наиболее удобным является компонент DateTimePicker (см. рис. 49, на котором слева этот компонент показан в режиме ввода времени, а ниже– в режиме ввода даты). Компонент очень эффектен за счет появления выпадающего календаря и обеспечивает безошибочный с точки зрения синтаксиса ввод дат и времени. Собственно календарь выводится на экран при нажатии на традиционную кнопку вызова выпадающего меню (рис. 50).

Рис. 50. Календарь выводится при нажатии на кнопку выпадающего меню

Его свойство Kind определяет режим работы компонента: dtkDate – ввод даты, tkTidme – ввод времени.

При вводе дат можно задать свойство DateMode равным dmComboBox – наличие выпадающего календаря, или равным dmUpDown – наличие кнопок увеличения и уменьшения, напоминающих те, которые используются в компонентах UpDown и SpinEdit. Только в данном случае пользователь может независимо устанавливать с помощью кнопок число, месяц и год, как это делается в задаче «Системные часы». Формат представления дат определяется свойством DateFormat, которое может принимать значения dfShort – краткий формат (например, 01.09.10), или dfLong – полный формат (например, 1 сентября 2010 г.).

Значение даты по умолчанию можно задать в Инспекторе объектов через свойство Date. Это же свойство читается для определения заданной пользователем даты.

Для преобразования значения свойства Date в строку можно воспользоваться DateToStr. Например, оператор

Memo1->Ilenes->Add(«Дата: » + DateToStr(DateTimePicker->Date) );

добавит в окно Memo1 строку вида <Дата: 01.05.2010>.

При вводе дат можно задать значения свойств MaxDate и MinDate, определяющих соответственно максимальную и минимальную дату, которую может задать пользователь.

В режиме ввода времени dtkTime введенное пользователем значение можно найти в свойстве Time, тип которого – тот же TDateTime. Преобразовать время в строку можно функцией TimeToStr.

Компонент MonthCalendar похож на рассмотренный выше компонент DateTimePicker, работающий в режиме ввода дат. Основное отличие состоит в том, что календарь данного компонента постоянно открыт, что позволяет вводить данные с пульта более быстро без дополнительных нажатий на кнопку со стрелкой для вызова выпадающего календаря. Правда, это требует существенно большего места на экране. При запуске программы календарь автоматически показывает текущую дату – на рисунке она обводится росчерком, похожим на кружок. В компоненте MonthCalendar предусмотрены некоторые дополнительные возможности: можно допустить множественный выбор дат в некотором диапазоне (свойство MultiSelect), можно указывать в календаре номера недель ( на рисунке – слева от календаря; свойство WeekNumbers=true), перестраивать календарь, задавая первый день каждой недели (свойство WeekNumbers) и т.п. В ряде практических случаев все это достаточно удобно.

Для обработки данных типа TDateTime предусмотрены многочисленные встроенные функции, некоторые из них представлены в следующей таблице.

Функция

Описание

CurrentYear

Определяет текущий год по внутреннему таймеру

Date function

Возвращает текущую дату

DateTimeToStr

Преобразует дату формата DateTime в обычное представление даты в форме сроки

DayOf

Определяет порядковый номер дня в формате DateTime в текущем месяце

DayOfTheWeek

Определяет порядковый номер дня в формате DateTime в текущей неделе

DayOfTheYear

Определяет порядковый номер дня текущего года

DaysBetween

Определяет число целых дней между двумя датами

DaysInAMonth

Определяет число дней текущего месяца

DaysInAYear

Определяет число дней текущего года

DecodeDate

Процедура представляет текущую дату формата DateTime в тройку целых чисел Год-Месяц-День

DecodeTime

Процедура представляет текущую дату формата DateTime в четыре целых числа Час-Минута-Секунда-Миллисекунда

EncodeDate

Функция возвращает тип DateTime, если её аргументы представлены тройкой чисел Год-Месяц-День

EncodeTime function

Функция возвращает тип DateTime, если её аргументы представлены четырьмя числами Час-Минута-Секунда-Миллисекунда

HoursBetween

Определяет количество целых часов между двумя моментами времени, заданными в формате DateTime

IsValidDate

Показывает, является ли тройка чисел

Год-Месяц-День допустимым

изображением даты

MonthsBetween

Определяет число месяцев между двумя датами

Now

Возвращает текущую дату и время

SameDate

Определяет, являются ли две даты одинаковыми

StartOfTheMonth

Определяет в формате DateTime первый день текущего месяца

StartOfTheYear

Определяет в формате DateTime первый день текущего года

StrToDate function

Преобразует строку в формат DateTime

Time, GetTime

Возвращает текущее время

TimeToStr

Преобразует формат DateTime в строку

Today

Возвращает дату сегодняшнего дня

Tomorrow

Возвращает дату завтрашнего дня

TryStrToDateTime.

Булевская функция, приобретающая значение true, если попытка преобразования строкового представления даты в формат DateTime завершилась успешно

WeekOf

Возвращает порядковый номер недели текущего года

WeeksInAYear

Возвращает количество недель в текущем годе

YearsBetween.

Возвращает число лет между двумя датами

Yesterday

Возвращает дату вчерашнего дня