Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для serg6789
4 / 6 / 1
Регистрация: 14.01.2019
Сообщений: 131
Builder 6

Проверка даты

22.07.2020, 14:17. Показов 1008. Ответов 7

Студворк — интернет-сервис помощи студентам
здравствуйте, у меня есть начальная дата, конечная и промежуточная, также два списка : с рабочими днями которые будут выходные по календарю и второй список выходные дни которые будут рабочими, так вот : если промежуточная дата равна или больше начальной то ее нужно проверить по двум спискам, и сдвигать ее на один день вперед если она оказалась выходным днем, затем новую промежуточную дату проверить суббота или воскресение если ее нет во втором списке сдвинуть на один день вперед если есть то добавить.






C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
if (CheckBox2->Checked==true ){
     TDateTime endto, new_endto, start, end, period;
     start=StrToDate(Edit1->Text).FormatString("dd.mm.yyyy");
     end=StrToDate(Edit2->Text).FormatString("dd.mm.yyyy");
     endto=StrToDate(Edit6->Text).FormatString("dd.mm.yyyy");
     int den_nedeli=0;
        if (start.Val<=endto.Val) {
            for (int h = 0; ; h++) {
                 period=IncDay(endto,h);
                 bool POISK=false;
                 bool POISK1=true;
                 if ((den_nedeli!=7 && den_nedeli!=1) || (den_nedeli==7 || den_nedeli==1) ) {
                      for (INT f = 0; f < Memo1->Lines->Count+1; f++) {
                           for (INT g = 0; g < Memo2->Lines->Count+1; g++) {
                                if (den_nedeli!=7 && den_nedeli!=1){
                                    if (Memo1->Lines->Text.Pos(DateToStr(period))) {
                                        POISK=true;
                                        period=IncDay(period,1);
                                        den_nedeli=DayOfWeek(period);
                                        }
                                        else { POISK=false; }
                                        }
                                        if (den_nedeli==7 || den_nedeli==1) {
                                            if (Memo2->Lines->Text.Pos(DateToStr(period))) {
                                                POISK1=true;
                                                }
                                                else
                                                {
                                                POISK1=false;   period=IncDay(period,1);
                                                     den_nedeli=DayOfWeek(period);}
 
                                                }
                                            }
                                }
                           }
        if (POISK==false || POISK1==true ) {
                    F8 ->Memo6->Lines->Add(period); new_endto=period; endto=period;  break;}
 
                    }
                }
 
  for (int s = 0; ; s++) {
  period=IncDay(new_endto,s);
  if (period.Val>end.Val) {
      break;
      }
  if (s!=0 && s%7==0 && period.Val<=end.Val) {
  bool POISK=false;
  bool POISK1=true;
  den_nedeli=DayOfWeek(period);
   if ((den_nedeli!=7 && den_nedeli!=1) || (den_nedeli==7 || den_nedeli==1) ) {
                                 for (INT f = 0; f < Memo1->Lines->Count+1; f++) {
                                      for (INT g = 0; g < Memo2->Lines->Count+1; g++) {
                                      if (den_nedeli!=7 && den_nedeli!=1){
                                           if (Memo1->Lines->Text.Pos(DateToStr(period))) {
                                               POISK=true;
                                               period=IncDay(period,1);
                                               den_nedeli=DayOfWeek(period);
                                           }
                                           else { POISK=false; }
                                           }
                                           if (den_nedeli==7 || den_nedeli==1) {
                                           if (Memo2->Lines->Text.Pos(DateToStr(period))) {
                                           POISK1=true;
                                           }
 
                                               else {POISK1=false;
                                               }
 
                                        }}}
                                        if (POISK==false || POISK1==true) {
                                            F8 ->Memo6->Lines->Add(period); new_endto=period;}
                                         }   } } }
 
           }

помогите пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2020, 14:17
Ответы с готовыми решениями:

Проверка даты
Здравствуйте! Подскажите как реализовать? Например если сегодня 04.05.2015 то я хочу в Label вывести значения, если сегодня не...

Проверка на введение даты в эдит
Подскажите как проверить введена дата в эдит или нет и если можно то как сделать не через try catch

StringGrid проверка даты рождения
Я с excel подтягиваю таблицу. В таблице есть даты рождения. Как мне проверить действительно это дата рождения и ее корректность. Например...

7
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
22.07.2020, 16:18
Цитата Сообщение от serg6789 Посмотреть сообщение
start=StrToDate(Edit1->Text)
???
А почему для ввода TDateTimePicker не использовать? Во первых, при вводе не ошибетесь, во вторых - лишних преобразований не будет, в третьих - выглядит куда эстетичней...
1
 Аватар для serg6789
4 / 6 / 1
Регистрация: 14.01.2019
Сообщений: 131
22.07.2020, 16:52  [ТС]
не могу мне нужно работать через календарь

Добавлено через 7 минут
D1973, спасибо я понял что вы имеете ввиду, отметить даты сразу в календаре, но я беру пользователя который ввводит данные не подумав , программа сама должна подсказать ему сместив даты на правильные
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
22.07.2020, 17:17
serg6789, да нет, я про метод ввода... Вот смотрите: пользователь у Вас вводит дату руками в Эдит... И Вы из строки переводите в дату - просто лишнее преобразование. Более того, в Эдит можно ввести всякую ахинею вместо даты, а проверки на правильность ввода у Вас не предусмотрено - вот и готовый вылет... Я вообще противник того, чтобы доверять пользователю что-то вводить руками - пусть он выбирает любую произвольную дату, но именно выбирает, а не вводит руками... Да пусть даже и руками вводит, но в подходящий компонент, который просто не позволит ему ошибиться, а Вас избавит от написания лишнего кода. Своего рада - защита от дурака...

А по сути вопроса: вот Вы указали, что имеется кроме начальной и промежуточной еще и конечная дата... А с ней что? Вы нигде не упомянули про нее...
Теперь:
Цитата Сообщение от serg6789 Посмотреть сообщение
если ее нет во втором списке сдвинуть на один день вперед если есть то добавить.
вот этот момент я как-то смутно улавливаю... Вот я ввел дату, она не попадает в первый список (будние дни, объявленные нерабочими), этой дате соответствует выходной день недели (суббота или воскресенье). Теперь я должен ее проверить по второму списку (выходные дни, объявленные рабочими) - пока было понятно, а вот далее - не очень...
0
 Аватар для serg6789
4 / 6 / 1
Регистрация: 14.01.2019
Сообщений: 131
22.07.2020, 17:44  [ТС]
он не вручную вводит по клику в эдит открывается окно с календарем он выбирает дату из календаря
затем пользователь если выбирает пятидневную рабочую неделю подключается два списка затем по нажатию ГОТОВО проверяется начальная дата если он вдруг ввел субботу или воскресение и ее нет в списке во втором смещается на один день вперед если стартовая стала каким то из рабочих дней то проверяется является ли он выходным если да то еще на один день вперед нет значит нужная дата
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
22.07.2020, 17:57
Цитата Сообщение от serg6789 Посмотреть сообщение
он не вручную вводит по клику в эдит открывается окно с календарем он выбирает дату из календаря
Ага! Ну это совсем другое дело... Вот только почему бы тогда и в переменную эту дату сразу не записать, без преобразований туда-сюда...
Цитата Сообщение от serg6789 Посмотреть сообщение
смещается на один день вперед
Если суббота - надо на 2 дня смещать...
1
 Аватар для serg6789
4 / 6 / 1
Регистрация: 14.01.2019
Сообщений: 131
22.07.2020, 21:48  [ТС]
D1973, а если воскресение рабочий???

Добавлено через 3 часа 46 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
    if (CheckBox2->Checked==true && CheckBox3->Checked==true && CheckBox4->Checked==true  ) {
        TDateTime endto,  start, end, period;
        start=StrToDate(Edit1->Text).FormatString("dd.mm.yyyy"); 
        end=StrToDate(Edit2->Text).FormatString("dd.mm.yyyy");  
        endto=StrToDate(Edit6->Text).FormatString("dd.mm.yyyy"); 
        INT den_nedeli=0;
        bool POISK;
        bool POISK1;
        if (start.Val<=endto.Val) {
             for (int s = 0; ; s++) {
                  period=IncDay(endto,s);
                  if (period.Val>end.Val) {
                      break;
                      }
                  if (s%7==0 && period.Val<=end.Val) {
                      den_nedeli=DayOfWeek(period);
                      if (den_nedeli==7 || den_nedeli==1) {
                      if (den_nedeli==7) {
                          for (INT g = 0; g < Memo2->Lines->Count+1; g++) {
                               if (Memo2->Lines->Text.Pos(DateToStr(period))) {
                                   POISK=true;
                                   F8 ->Memo6->Lines->Add(DateToStr(period));
                                   endto=period; s=0; break;
                                   }
                                   else 
                                   {
                                   POISK=false;
                                   }}
                                   if (!POISK) {
                                   period=IncDay(period,1);
                                   den_nedeli=DayOfWeek(period);
                                   s=-1;
                                   }}
                                   if (den_nedeli==1) {
                                   for (INT g = 0; g < Memo2->Lines->Count+1; g++) {
                                    if (Memo2->Lines->Text.Pos(DateToStr(period))) {
                                   POISK=true;
                                   F8 ->Memo6->Lines->Add(DateToStr(period));
                                   endto=period; s=0; break;
                                   }
                                   else {
                                         POISK=false;
                                         }}
                                         if (!POISK) {
                                             period=IncDay(period,1);
                                             den_nedeli=DayOfWeek(period);
                                             s=-1;
                               }}}
                     if (den_nedeli!=7 && den_nedeli!=1) {
                          for (INT y = 0; y < Memo1->Lines->Count+1; y++) {
                               if (Memo1->Lines->Text.Pos(DateToStr(period))) {
                                   POISK1=true; period=IncDay(period,1); endto=period; s=-1; break;
                               }
                                   else {
                                         POISK1=false;    
                                         }}
                                         if (!POISK1) {
                                             F8 ->Memo6->Lines->Add(DateToStr(period));
                                             endto=period; s=0;
                                             }
                                         }
 
 
 
 
 
 
             }
        }
    }
 
 
    }
 
}
покумекал вроде рабочий код
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
23.07.2020, 12:51
Все таки я, возможно, до конца смысл задачи не понял, но вот посмотрите на всякий случай этот проект, может, поможет чем...
Миниатюры
Проверка даты  
Вложения
Тип файла: rar Builder 6 Проверка даты.rar (3.4 Кб, 1 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.07.2020, 12:51
Помогаю со студенческими работами здесь

Проверка строки на правильность даты
Здравствуйте. Столкнулся с простой задачкой как мне казалось, но не могу решить второй день. Нужно проверить строку на правильность...

Проверка MaskEdit на ввод полной даты
Добрый день! Вопрос по поводу проверки введена ли полная дата в MaskEdit: Есть MaskEdit с маской на дату MaskEdit1-&gt;EditMask =...

Проверка даты, чтобы нельзя было вводить прошлую дату
Как сделать проверку даты . проверка на то, что бы нельзя было вводить прошлую дату. Дату вводим в Edit.

Расчитать возраст человека от даты рождения до текущей даты
Помогите!!! Нужно расчитать возраст человека от даты рождения до текущей даты. Например: 1996-2015 19 лет

Программа должна работать до определенной даты у пользователя, независимо, что он выставит в настройках даты и времени
Добрый день, уважаемые! Уже сломал голову, но ничего не могу придумать. Дело вот в чем: есть программа (клиент обращений в поддержку),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru