Консультация № 176949
27.02.2010, 14:02
43.02 руб.
0 2 1
Доброго времени суток, коллеги!
Требуется решить следующую задачу (для Windows, cреда - предпочтительнее Borland C++ Builder 6.0 )
Задача:
Создать форму с двумя полями, куда пользователь должен ввести даты - "дата рождения" и "отчетная дата".
По нажатии на кнопку "рассчитать возраст" (на той же форме) вывести сообщение "возраст на отчетную дату = ХХ лет, ХХ месяцев и ХХ дней".
По возможности прошу приложить исходники проекта и исполняемый файл.
Заранее спасибо.

Обсуждение

Неизвестный
27.02.2010, 19:40
общий
Botsman:
Такое решение пойдёт? проект
Неизвестный
01.03.2010, 15:14
общий
это ответ
Здравствуйте, Botsman.
Даты вводятся в поля TDateTimePicker, обрабатываются по нажатию кнопки, каждый компонент возраста отдельно (вычитание дат в типе TDateTime не стала использовать, потому что результат всё равно требует дополнительной обработки). Код функции обработчика в приложении, проект и исполняемый файл - здесь. Исполняемый файл пересобрала, пробовала на другом компьютере без установленной среды - вроде запускается.
Удачи!

Приложение:
void __fastcall TForm1::OkButtonClick(TObject *Sender)
{
TDateTime bd = Form1->birthDate->DateTime; //сохраняем даты
TDateTime nd = Form1->nowDate->DateTime;
//проверяем, корректны ли даты
if (bd>nd) { Form1->result->Caption = "Ошибочные данные"; return; }
unsigned short y1, y2, m1, m2, d1, d2;
unsigned short yr, mr, dr;
bd.DecodeDate(&y1, &m1, &d1); //получаем значения лет, месяцев и дней
nd.DecodeDate(&y2, &m2, &d2);
yr = y2-y1-1; //вычисляем разницу
if (m2>m1 || (m2==m1 && d2>d1)) yr++;
mr = 12-m1+m2-1;
if (d2>=d1) { mr++; dr = d2-d1; }
else dr = DaysInMonth (bd)-d1+d2;
if (mr>=12) mr = 0;
//выводим данные
Form1->result->Caption = "Возраст на отчётную дату: " + IntToStr (yr) +
" лет, " + IntToStr (mr) + " месяцев, " + IntToStr (dr) + " дней.";

}
5
Спасибо огромное. Все работает. Подробности - письмом ;)
Форма ответа