4.2Лабораторная работа 2.5. Task Tracker Краткое описание
Создать приложение типа «органайзер» для отслеживания занятости человека различными задачами (сколько времени он занимается каждой из них). Реализовать оповещение некоего сервера об изменениях занятости, а также возможность сохранения (и загрузки) информации о занятости в постоянной памяти (на клиенте и/или на сервере).
Детальное описание
Каждая из задач, время занятости которыми необходимо отслеживать, – это, прежде всего, название (строка текста). Однако задача должна также иметь невидимый пользователю идентификатор, чтобы при переименовании задачи прежняя информация о занятости оставалась актуальной. Задачи образуют иерархию (дерево), точнее, несколько иерархий со своим «корнем» каждая. При этом заниматься человеку можно не только задачами-«листьями» дерева, но и любыми другими («родительскими») узлами. Время занятости родительской задачей определяется как сумма ее собственного времени и времен всех ее подзадач. Подразумевается, что в каждый момент времени человек занимается ровно одной задачей.
В качестве запоминаемой информации о занятости можно фиксировать либо все факты переключений между задачами, либо время занятости человека задачей в течение одного дня. Как бы то ни было, выбранная модель хранения занятости должна позволять показывать статистику занятости по задачам (верхнего уровня), а также статистику по подзадачам для любой выбранной задачи. Статистика представляет собой таблицу со столбцами «Название задачи», «Дата», «Время занятости», «Процент занятости» (процент берется от суммы времен задач, имеющихся в таблице на соответствующую дату). Среди строк таблицы должны встречаться не только подзадачи, которые на один уровень ниже выбранной задачи, но и она сама (в случае, если ей тоже сопоставлено «собственное» время: см. выше).
Одной из задач верхнего уровня является «Не работа»; при первом запуске программы это – единственная задача. «Не работу» нельзя удалить, но в остальном это задача такая же, как остальные (в частности, для нее можно сделать подзадачи «Отдых», «Обед», «Перекур» и т.п.). Все время, когда программа не запущена, следует считать временем «не работы». Программа должна «помечать» это время таким образом при следующем запуске. В случае, если в выбранной модификации программы запоминаются непосредственно времена занятости задачами в течение дня (см. выше), то не следует создавать записи для всех дней, в которых программа не запускалась (или запускалась, но пользователь не переключался с «Не работы»).
Клиентская часть программы должна быть снабжена графическим интерфейсом. После запуска клиент загружает иерархию задач (из файла либо с сервера); после чего одна из задач выделяется как активная (на основе загруженных данных). Серверная часть программы не является графической и имеет набор функций, сильно зависящий от модификации задачи (см. ниже). Клиент подключается к серверу либо по запросу пользователя, либо при запуске. Клиент может сохранять информацию о занятости либо при выходе, либо при каждом переключении между задачами. Когда реализуется возможность редактирования иерархии задач пользователем, измененная иерархия должна сохраняться (как единое целое) при выходе из программы и/или по запросу пользователя; либо вместо этого можно оповещать сервер непосредственно при выполнении операций создания, удаления и переименования задач.
Сохранение клиентом чего-либо (информации о занятости или иерархии задач) может означать либо сохранение в файле (текстовый файл, XML, сериализация и т.д.), либо передача соответствующих данных на сервер (для дальнейшего сохранения там). Протокол общения между клиентом и сервером предлагается разработать самостоятельно; рекомендуется при этом использовать XML. Сервер может сохранять информацию в том же виде, что и клиент; делать это он может как при обработки запроса от клиента, так и при завершении работы (например, при финализации). Идентификатор пользователя при его общении с сервером задается в настройках программы (там же, где параметры сетевого соединения с сервером); если он не задан, то в качестве идентификатора можно использовать ip-адрес клиентского компьютера.
Требования
Звездочками * отмечены обязательные требования, в скобках – количество баллов (может быть уменьшено, если требование реализовано не полностью, с ошибками, с замечаниями и т.п.).
Реализация на Swing основного внешнего вида клиента с обработкой событий (главная часть окна – дерево задач; действия можно реализовать пунктами меню или кнопками); загрузка иерархии задач, сохранение/загрузка занятости (5; в случае обобщения занятости – см. модификацию 1.2 – 6) *
Редактирование иерархии задач, ее сохранение. (5)
Выдача стандартного отчета статистики занятости (описанной выше таблицы, для заданного интервала дат) + сортировка по заданному пользователем столбцу (6+1; в случае хранения обобщенной занятости – см. модификацию 1.2 – 4+1)
Дополнительные аналитические функции типа «показывать статистику по месяцам, осредняя времена занятости задачами в день», «показывать статистику для всех задач, выполнявшихся в заданный день, независимо от их места в иерархии», «показывать постоянно такую статистику на сегодня, автоматически изменяя с течением времени данные в строке активной задачи» (на усмотрение куратора – до 5)
Реализация сервера, поддерживающего несколько соединений с клиентами (5) *
Взаимодействия клиента с сервером (не менее одного взаимодействия); возможны не только указанные в описании взаимодействия типа «загрузка задач с сервера», «оповещение о переключении задачи», но и такие: «уведомление сервера при изменении имени пользователя», «синхронизация времени с сервером» (4) *
Синхронизация иерархии задач в разных клиентах: оповещение сервером всех клиентов при изменении задач одним из клиентов (3)
Поддержка более чем одного принципиально отличающегося формата хранения данных или протокола передачи данных (текст с разделителями(3), XML(4), сериализация(3), …) (всего не более 6)
Протокол клиент/сервер: архитектура, документация (если XML, то DTD) (4) *
Архитектура, code style, java doc и прочее «представление» программы (на усмотрение куратора – до 6)
Примечание: Функции сервера отдельно не оцениваются, так как они являются аналогами функций клиента, перенесенными на сервер (только для многих пользователей); соответствующее взаимодействие между клиентом и сервером – это пп. 6 и 7.
Итого: баллов за обязательные требования – около 25, баллов за дополнительные требования – порядка 55.
|