|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.03.2010, 22:55 | #1 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 209
|
циклический график дежурств
нужно сделать график дежурств, чтобы на сайте отображалось кто дежурит сегодня и кто завтра... я себе в общих чертах немного представляю как это должно быть, список людей лежит в БД MySQL, вычисляем общее число людей (ибо оно будет иногда меняться) и какой сегодня день года по порядку, отсюда высчитываем какой по порядку человек дежурит сегодня и завтра, и выводим имена этих людей... но вот как это реализовать технически и математически, учитывая что при смене числа людей такой алгоритм будет искажаться, в голове не укладывается пока. Если есть идеи, приведите хоть кусочек кода для реализации этого дела, пожалуйста.
Все генитальное просто.
|
22.03.2010, 23:19 | #2 |
Laravel/Vue expert
Старожил Подтвердите свой е-майл
Регистрация: 08.08.2007
Сообщений: 2,832
|
Ваш текст невозможно читать.
|
23.03.2010, 10:44 | #3 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 209
|
попробую иначе сформулировать:
есть N-число человек, которые должны по очереди дежурить каждый день, через N дней очередь повторяется сначала. нужно выводить имена людей, которые дежурят сегодня и завтра. Имена людей хранятся в БД MySQL.
Все генитальное просто.
|
23.03.2010, 12:21 | #4 |
Laravel/Vue expert
Старожил Подтвердите свой е-майл
Регистрация: 08.08.2007
Сообщений: 2,832
|
Покажите свои наработки.
|
23.03.2010, 15:48 | #5 |
Antimoderаtoris
Участник клуба
Регистрация: 08.02.2008
Сообщений: 1,251
|
Чтобы реализовать этот алгоритм, нужно понимать каким образом новый человек "вливается" в работу? Должен ли он становиться в конец списка, или он должен дежурить на следующий же день после его принятия на работу?
В базе каждому человеку нужно установить previous и next, что является последним днём дежурства и следующим днём дежурства. Таким образом каждый будет знать когда ему дежурить в следующий раз. В конце каждого дня запускается скрипт, который устанавливает отдежурившему его следующее дежурство. При появлении нового человека в команде, его ставят в конец "очереди" (дабы не менять всем остальным их дни дежурства). При уходе человека, можно сделать два разных способа - либо поменять одного (который стоит последним в очереди) и поставить его на место ушедшего, либо сдвинуть всех кто дежурит после ушедшего на 1 день. В общем весь вопрос в том, как вы хотите организоваться изменения в составе.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
|
23.03.2010, 21:42 | #6 | |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 209
|
SkyM@n, наработок как таковых щас нет, то что я наваял никуда не годится и показывать не буду чтобы не направлять заведомо по этому пути... тут нужна свежая мысль.
Johnatan, новых людей буду добавлять в базу вручную в конец списка, как отрабатывать ушедших в принципе не важно, согласен на любой вариант, лишь бы оно корректно работало. У меня основной стопор как раз на изменении состава людей и точки, от которой отталкиваться при подсчете чья сегодня очередь... Цитата:
Все генитальное просто.
|
|
01.04.2010, 15:00 | #7 |
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% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
|
11.04.2010, 02:41 | #8 | |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 209
|
Цитата:
$result=$c-((float($c/$l))*$l); где $c - число дней с момента отсчета UNIX-времени, $l - длина массива (число человек в очереди)
Все генитальное просто.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
визуализация графика дежурств | 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 |