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

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

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2010, 22:55   #1
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию циклический график дежурств

нужно сделать график дежурств, чтобы на сайте отображалось кто дежурит сегодня и кто завтра... я себе в общих чертах немного представляю как это должно быть, список людей лежит в БД MySQL, вычисляем общее число людей (ибо оно будет иногда меняться) и какой сегодня день года по порядку, отсюда высчитываем какой по порядку человек дежурит сегодня и завтра, и выводим имена этих людей... но вот как это реализовать технически и математически, учитывая что при смене числа людей такой алгоритм будет искажаться, в голове не укладывается пока. Если есть идеи, приведите хоть кусочек кода для реализации этого дела, пожалуйста.
Все генитальное просто.
kirosin вне форума Ответить с цитированием
Старый 22.03.2010, 23:19   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Ваш текст невозможно читать.
SkyM@n вне форума Ответить с цитированием
Старый 23.03.2010, 10:44   #3
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию

попробую иначе сформулировать:
есть N-число человек, которые должны по очереди дежурить каждый день, через N дней очередь повторяется сначала. нужно выводить имена людей, которые дежурят сегодня и завтра. Имена людей хранятся в БД MySQL.
Все генитальное просто.
kirosin вне форума Ответить с цитированием
Старый 23.03.2010, 12:21   #4
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Покажите свои наработки.
SkyM@n вне форума Ответить с цитированием
Старый 23.03.2010, 15:48   #5
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Чтобы реализовать этот алгоритм, нужно понимать каким образом новый человек "вливается" в работу? Должен ли он становиться в конец списка, или он должен дежурить на следующий же день после его принятия на работу?

В базе каждому человеку нужно установить previous и next, что является последним днём дежурства и следующим днём дежурства. Таким образом каждый будет знать когда ему дежурить в следующий раз. В конце каждого дня запускается скрипт, который устанавливает отдежурившему его следующее дежурство. При появлении нового человека в команде, его ставят в конец "очереди" (дабы не менять всем остальным их дни дежурства). При уходе человека, можно сделать два разных способа - либо поменять одного (который стоит последним в очереди) и поставить его на место ушедшего, либо сдвинуть всех кто дежурит после ушедшего на 1 день. В общем весь вопрос в том, как вы хотите организоваться изменения в составе.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 23.03.2010, 21:42   #6
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию

SkyM@n, наработок как таковых щас нет, то что я наваял никуда не годится и показывать не буду чтобы не направлять заведомо по этому пути... тут нужна свежая мысль.

Johnatan, новых людей буду добавлять в базу вручную в конец списка, как отрабатывать ушедших в принципе не важно, согласен на любой вариант, лишь бы оно корректно работало. У меня основной стопор как раз на изменении состава людей и точки, от которой отталкиваться при подсчете чья сегодня очередь...
Цитата:
В конце каждого дня запускается скрипт
Это я так понимаю по крону делается, но хотелось бы все же избежать крона и привязываться к текущей дате
Все генитальное просто.
kirosin вне форума Ответить с цитированием
Старый 01.04.2010, 15:00   #7
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Я вам всё разжевал уже. Достаточно сесть и подумать хорошенько и алгоритм всплывёт сам. Сделайте симуляцию на бумаге. Напишите в столбик 5 букв с последовательными числами. Буква это сотрудник, а число - день, начиная с изначального отсчёта времени. А1, Б2, В3, Г4 и Д5. Дальше пишите А6, Б7, В8, Г9, Д10. Теперь уберите Б, например. А11, В12, Г13, Д14 и т.д. Добавьте нового Е15, А16, В17 и так далее... Ничего сложного тут нет.

Вместо крона перерасчёт можно производить при каждом открытии страницы.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 11.04.2010, 02:41   #8
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Johnatan
Вместо крона перерасчёт можно производить при каждом открытии страницы.
Спасибо, так и сделал ) Привязался к UNIX-времени, каждому пользователю в таблице присвоил id, текущее значение вычислил по формуле:

$result=$c-((float($c/$l))*$l);

где $c - число дней с момента отсчета UNIX-времени,
$l - длина массива (число человек в очереди)
Все генитальное просто.
kirosin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
визуализация графика дежурств nynike Microsoft Office Excel 2 23.02.2010 12:37
Циклический сдвиг в С rand8154 Общие вопросы C/C++ 1 14.11.2009 01:49
Циклический сдвиг Mish92(21-09) Помощь студентам 0 07.11.2009 21:59
Циклический список на С++ Йэжиг Общие вопросы C/C++ 1 12.10.2009 22:42