Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2010, 18:24   #1
DriverSTi
Пользователь
 
Аватар для DriverSTi
 
Регистрация: 30.03.2009
Сообщений: 23
По умолчанию Проверьте и подскажите "Калькулятор дат"

Только что написал программу, но сам до ума довести не знаю как.
Может кто-то из вас поможет.
Итак, код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
  var
     d1,d2,m1,m2,y1,y2 : Integer; // числа вводимые пользователем
               d,m,y,r : Integer; // служебные переменные
  begin
  // получаем исходные данные из полей ввода
     d1 := StrToInt(Edit1.Text);
     d2 := StrToInt(Edit4.Text);
     m1 := StrToInt(Edit2.Text);
     m2 := StrToInt(Edit5.Text);
     y1 := StrToInt(Edit3.Text);
     y2 := StrToInt(Edit6.Text);

     if y1=y2 then y:=0
       else
         if y2>y1 then y:=y2-y1
           else ShowMessage('Неверные данные!');

     if m1=m2 then m:=0
       else
         if m2>m1 then m:=m2-m1
           else begin
                   y:=y-1;
                   m:=(m2+12)-m1;
                end;

     if d1=d2 then d:=0
       else
         if d2>d1 then d:=d2-d1
           else
       case m2 of
         1,3,5,7,8,10,12 : d:=(d2+31)-d1;
                  4,6,9,11 : d:=(d2+30)-d1;
                           2  : begin
                                  r:=y mod 4;
                                    if r=0 then d:=(d2+29)-d1
                                     else d:=(d2+28)-d1;
                                  end;
       end;
     
  Label4.Caption:= 'Ты живешь '+ IntToStr(y) +' г. '+ IntToStr(m)
                   + ' мес. и ' + IntToStr(d) + ' дн.';
  end;
Вопросы:
1) какие строки добавить, чтобы можно было вычислить разницу дат между 9.02.2004 и 29.02.2000 (или 10.02.2000)?

2) как остановить выполнение программы после вывода сообщения о неверном вводе данных (например вторая дата меньше первой)?

Буду благодарен за помощь
Я иду по воде, босые ноги мочу.
Я такой же как все. Я Subaru хочу.
DriverSTi вне форума Ответить с цитированием
Старый 09.01.2010, 18:32   #2
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Цитата:
Сообщение от DriverSTi Посмотреть сообщение
2) как остановить выполнение программы после вывода сообщения о неверном вводе данных (например вторая дата меньше первой)?
Код:
Exit;
///////////////////////////////////////////////////////////////
РЕ:

Цитата:
Сообщение от DriverSTi Посмотреть сообщение
1) какие строки добавить, чтобы можно было вычислить разницу дат между 9.02.2004 и 29.02.2000 (или 10.02.2000)?
Цитата:
Сообщение от http://www.delphisources.ru/pages/faq/faq_delphi_basics/DaysBetween.php.html
Функция DaysBetween вычитает FromDate из ToDate, возвращая разность в целых днях.

Код:
var
  fromdate, toDate : TDateTime;

begin
  // Установка наших переменных дат
  fromDate := EncodeDateTime(2000, 02, 26, 10, 0, 0, 0);
  toDate   := EncodeDateTime(2000, 02, 29,  9, 0, 0, 0);

  // Отображение этих дат и дней между ними
  ShowMessage('С даты = '+DateTimeToStr(fromDate));
  ShowMessage('До даты = '+DateTimeToStr(toDate));
  ShowMessage('Целых дней = '+
              IntToStr(DaysBetween(toDate, fromDate))+' дней');
end;
С даты = 26/02/2000 10:00:00
До даты = 29/02/2000 09:00:00
Целых дней = 2 дней
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли

Последний раз редактировалось Marsel737; 09.01.2010 в 18:36.
Marsel737 вне форума Ответить с цитированием
Старый 09.01.2010, 18:52   #3
DriverSTi
Пользователь
 
Аватар для DriverSTi
 
Регистрация: 30.03.2009
Сообщений: 23
По умолчанию

2_Marsel737 :

А как Exit правильно записать? Надо, чтобы после того, как пользователь нажмет ОК в поле сообщения он мог исправить неверные данные.

И по поводу второго вопроса: вместо чисел в скобках можно поставить переменные, значения которых вводит пользователь?
Я иду по воде, босые ноги мочу.
Я такой же как все. Я Subaru хочу.
DriverSTi вне форума Ответить с цитированием
Старый 09.01.2010, 19:03   #4
KREGI
Форумчанин
 
Аватар для KREGI
 
Регистрация: 29.11.2008
Сообщений: 333
По умолчанию

Код:
if y2>y1 then
y:=y2-y1
else
begin
ShowMessage('Неверные данные!');
Exit;
end
вроде так можно,
Да, вместо чисел можно переменные. в делфи есть компонент типа календарь, и можно маскэдит использовать...
Если помог - Весы слева

Последний раз редактировалось KREGI; 09.01.2010 в 19:06.
KREGI вне форума Ответить с цитированием
Старый 09.01.2010, 19:09   #5
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Ещё можна добавить:

Код:
if y2>y1 then y:=y2-y1 else 
begin
  ShowMessage('Неверные данные!');
  Edit3.Text:=''; 
  Edit6.Text:=''; 
  Edit3.SetFocus(); 
  Exit;
end;
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 09.01.2010, 21:21   #6
DriverSTi
Пользователь
 
Аватар для DriverSTi
 
Регистрация: 30.03.2009
Сообщений: 23
По умолчанию

Цитата:
Сообщение от KREGI Посмотреть сообщение
Да, вместо чисел можно переменные. в делфи есть компонент типа календарь, и можно маскэдит использовать...
К сожалению, я пока знаю слишком мало компонентов, функций etc.
Я иду по воде, босые ноги мочу.
Я такой же как все. Я Subaru хочу.
DriverSTi вне форума Ответить с цитированием
Старый 09.01.2010, 21:39   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

http://programmersclub.ru/files/book1_100comp.rar
mihali4 вне форума Ответить с цитированием
Старый 11.01.2010, 21:19   #8
DriverSTi
Пользователь
 
Аватар для DriverSTi
 
Регистрация: 30.03.2009
Сообщений: 23
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Именно то, что я искал!
Спасибо большое
Я иду по воде, босые ноги мочу.
Я такой же как все. Я Subaru хочу.
DriverSTi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по строкам / задача "матричный калькулятор" alexobenikov Общие вопросы C/C++ 7 19.11.2009 23:30
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
"Подсветка дат" в TMonthCalendar Bl@ck Общие вопросы Delphi 2 01.06.2009 18:53
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49