Создание программного обеспечения для автоматизации деятельности компании

Описание существующего программного обеспечения и автоматизированных информационных систем. Разработка подсистемы управления проектами для организации "Налог-сервис". Написание прикладного решения, которое будет работать под управлением платформы 1С.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 19.11.2018
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Мультипроектный анализ, средства графических рисунков, а также средства, которые создают разнообразные отчеты «1С - Рарус: Управление проектами» организовывает управление ресурсами большого количества проектов. Возможно, увидеть отчеты управления по нескольким проектам в форме графика, таблицы, и диаграмм. Увязка между группами проектов или их ресурсами и временными сроками, будет производиться автоматически.

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

Отчеты для отображения информации в графическом варианте проекта: диаграмма Гантта (2 вариант) и сетевой график: Диаграмма Гантта - горизонтальная диаграмма в линейной форме. В данной диаграмме предусмотрены этапы проекта, изображенные в определенном временном промежутке, который отмечен датой начала работы, и датой ее завершения. Здесь также изображаются элементы в виде вершин, где предоставляется информация о планировании этапов работы, и различных задач проекта. Благодаря связующим линиям можно получить информацию о зависимости между основными элементами проекта.

Пользователь программы может задействовать таблицу аналитики, где можно самостоятельно настраивать аналитические отчеты о проделанной работе, доходов и расходов финансов, ресурсов, и т.д.

Программа позволяет сохранять документы в формате bmp, или просто распечатать их на принтере. Часто подобные программы имеют слишком большое количество функций, которые зачастую не используются в производстве. Поэтому в некоторых случаях будет намного проще и функциональнее разработать собственную подсистему автоматизации, которая будет специально разработана под решения задач выполнимых на том или ином производстве.

1.5 Обоснование проектных решений

1.5.1 Обоснование проектных решений по техническому обеспечению

Техническим или аппаратным обеспечением называют совокупность электрических, электронных и механических компонентов компьютеров и автоматизированных систем в отличие от программного обеспечения автоматизированных систем и данных. Существует возможность программной реализации некоторых функций аппаратных средств и наоборот. Компьютер с архитектурой фон Неймана обладает следующими элементами аппаратного обеспечения: устройства ввода и вывода, манипуляторы, сканеры, графические планшеты, принтеры, видеопроекторы, акустические системы и запоминающие устройства, такие как оперативная память, магнитные и оптические диски, карты памяти. Современные компьютеры оснащены устройствами, которые обеспечивают работу данной архитектуры. Это микропроцессоры, шины, порты, контроллеры, чипсеты, блок питания, система охлаждения. В зависимости от типа подключения к ПК принято различать внутренние и внешние устройства. К сетевому аппаратному обеспечению относят абонентские машины, среду передачи данных (коаксиальный кабель, витая пара, оптоволоконный кабель) и дополнительные устройства, которые требуются для работы сети (мосты, шлюзы, повторители, брутеры, коммутаторы, концентраторы). Для эффективного решения поставленной перед дипломным проектом задачи и дальнейшего полноценного функционирования автоматизированной системы необходимо выбрать проектные решения по техническому обеспечению и обосновать выбор.

Назначение автоматизированной системы управления проектами заключается в функционировании под управлением платформы 1С: Предприятие, которое в свою очередь работает в операционной системе Windows. Таким образом, для обеспечения эффективности работы разрабатываемой системы следует предусмотреть такие требования к архитектуре и параметрам технических средств, которые позволят эффективно функционировать самой операционной системе.

Анализ рынка современных ПЭВМ, компьютерных сетей и печатающих устройств определяет следующие технические характеристики для рабочих станций, где будет установлена автоматизированная система:

· Процессор Core i5, 3240, 3.4 ГГц, 5000МГц, 5ГТ/с, S1155, iH61 Express

· Звук 7.1, Realtek ALC887

· Память DIMM DDR3 1600 (PC12800), 2ГБ

· Видео Intel HD Graphics 2500, D-Sub (VGA), DVI

· Сеть 10/100Мбит, Realteck AR8152, SATAIII

· Жесткий диск 1Тб, 7200rpm

· Привод дисков DVD+/-RW, Pioneer

· Корпус Optimum, microATX, 350 Вт, черный, 8 USB2.0, 2 PS/2 (miniDIN6), 5 Mini Jack (Audio), 2 Audio, 2 USB2.0, 445 x 395 x 218 мм, 6.5 кг

В качестве устройства вывода графической информации предлагается следующий монитор:

Монитор:

· Название ЖК 19,5" PHILIPS 203V5LSB26

· Диагональ экрана 19,5"

· Разрешение экрана 1440*900

· Подсветка светодиодная

· Соотношение сторон экрана 16:10

· Яркость 200 кд/м2

· Динамическая контрастность 5000000:1

· Время реакции 5 мсек

· Тип матрицы TN

· Количество цветов 16.7 млн. оттенков

· Интерфейс подключения монитора D-Sub (VGA)

· Угол наклона -5..15 гр

Выбор данной модели обосновывается тем, что указанный монитор создан на основе TN-матрицы с малым временем отклика в 5 мс.. Широкоформатный ЖК-монитор Philips 203V5LSB26 оснащен 19.5-дюймовым WLED-экраном с соотношением сторон 16:9 и разрешением 1600 x 900 пикселей, который благодаря эргономичной подставке можно наклонять в диапазоне от -3° до 10°.

Для печати договоров, счетов и различной отчетности было выбрано следующее устройство:

Принтер:

· Название Canon i-SENSYS MF3010

· Формат бумаги A4

· Скорость черно-белой печати (А4), до 18 стр/мин

· Разрешение принтера, вертикальное 600 dpi

· Разрешение принтера, горизонтальное 600 dpi

· Время начала печати первой страницы 7.8 сек

· Стандартный объем памяти 8 МБ

· Максимальный месячный ресурс печати 8000 стр./мес.

· Емкость входного лотка для бумаги, листов 150

· Емкость выходного лотка для бумаги, листов 100

· Тип интерфейса соединения USB2.0

· Плотность бумаги 60..163 г/м2

· Индикация режимов работы светодиодная

Данное устройство отличается своей многофункциональностью, за счет чего отлично подходит для каждодневной работы с документами в небольшой организации. В данном МФУ реализована технология лазерной монохромной, которая обеспечивает качественную печать формата А4 с разрешением 1200x600 dpi со скоростью 18 стр./мин, а его ресурс картриджа составляет 8000 страниц в месяц. Устройство также позволяет копирование и сканирование изображений с разрешением 600x600 dpi.

Подбор технических средств завершен, в следующем разделе будет представлено обоснование проектных решений по программному обеспечению.

1.5.2 Обоснование проектных решений по программному обеспечению

Проектирование автоматизированных систем является процессом по созданию комплекта технических документов, различных моделей и опытных образцов, которые будут необходимы для процесса программирования, установки, настройки и использования в автоматизированной системе. Тот комплект документации, который нужен для того, чтобы создать автоматизированную систему, и называется проектом данной системы. Чтобы же касается процесса создания непосредственного проекта, то его называют проектированием либо процессом проектирования.

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

Среди важнейших терминов, которые характеризуют проектирование, можно выделить следующие:

Проектная процедура - совокупность исходных данных и проектных операций, в результате выполнения которых и принимается проектное решение.

Проектное решение - конечное либо промежуточное описание объекта проектирования, которого вполне достаточно для завершения проектной процедуры.

Проектная операция - действие проектировщика либо их совокупность, которые входят в проектную процедуру и приводят к получению фрагмента проектного решения.

Проект - совокупность технической документации (проектных документов) согласно перечням, которые установлены нормативными документами. В состав проектов систем управления также могут быть включены опытные образцы, где представлены результаты проектирования.

Одной из важнейших задач в процессе разработки новой автоматизированной системы либо усовершенствования уже действующей является определение необходимого уровня и объема автоматизации технологического объекта. В зависимости от множества разных факторов, в процессе создания проекта автоматизированной системы могут быть разработаны различные локальные системы автоматизации.

Объектами проектирования могут выступать системы автоматического регулирования, контроля, логического, оптимального, программного, адаптивного управления, системы технологической защиты и блокировки, диагностирования, прогнозирования и прочие.

Пожалуй, самыми сложными объектами в проектировании служат автоматизированные системы управления технологическими процессами (АСУ ТП). В подобных системах присутствует многоуровневая структура.

Главным назначением АСУ ТП является объединение локальных АС в одну взаимосвязанную систему, которая может обеспечить максимально эффективное управление различными технологическими процессами на новом уровне с применением ряда экономических и технических критериев.

Чтобы смоделировать бизнес-процессы ФКУ «Налог-сервис» было выбрано AllFusion Process Modeler 7 (ранее BPwin). Данный инструмент, который создан для анализа, моделирования, документирования и оптимизации бизнес-процессов. Им можно пользоваться для представления бизнес-процессов в графическом представлении. Схема обмена информации, выполнения работ, оборота документации, представленная в графическом виде, способствует визуализации моделей бизнес-процессов. Подобное изложение информации в форме графика может помочь перевести задачи по управлению персоналом из сферы непростой задачи в область инженерных технологий.

AllFusion Process Modeler 7 (BPwin) способствует четкому документированию важнейших аспектов различных процессов, которые происходят в бизнесе. А именно - действия, которые нужно осуществить, методы их осуществления и контроля, ресурсы, которые нужны для этого, и визуализация полученных результатов.

Благодаря использованию AllFusion Process Modeler 7 значительно повышается эффективность IT- решений, благодаря чему аналитики и проектировщики моделей могут успешно соотносить корпоративные задания с процессами информационной архитектуры, проектированием приложений и бизнес-требованиями. В результате происходит формирование цельной картины работы предприятия - начиная потоками работ в малых подразделениях и заканчивая сложными организационными функциями.

Кроме того, AllFusion Process Modeler 7 (BPwin) отличается высокой эффективностью в тех проектах, где есть описание действующих баз предприятий и внедрением информационной корпоративной системы.

Благодаря программному продукту можно оптимизировать деятельность предприятия, а также проверить ее на соответствие стандартам ISO 9000, проектировать структуру, значительно уменьшить издержки производства, исключить лишние операции и сделать эффективность предприятия выше.

В основе продукта лежат распространенные методы моделирования, например, можно выделить методологию IDEF0, которая была рекомендована к применению Государственным стандартом.

Благодаря высокой простоте и наглядности моделей, которые получают в процессе проектирования в Process Modeler, взаимопонимание между всеми участниками процесса становится куда проще.

Распространенность CASE - того средства, с помощью которого в электронном виде можно проводить согласование с партнерами относительно функциональных моделей, и делать его максимально эффективно.

Данный продукт создала компания Computer Associates. AllFusion Process Modeler 7 вместе с другими программами является частью пакета программных средств AllFusion Modeling Suite, благодаря комплексному применению которого можно обеспечить многообразие всех аспектов в процессе моделирования информационных систем.

1.5.3 Обоснование проектных решений по информационному обеспечению

Информационное обеспечение (ИО) представляет собой единую систему для кодировки и классификации полученной информации, а также методологию построения баз данных. Его также используют для унификации систем документации, схем информационных потоков, которые существуют в организации. Эта подсистема очень нужна для принятия современных управленческих решений.

Чтобы реализовать задачи, которые поставлены перед системой, можно пользоваться любой СУБД современного типа, в данном случае мы будем пользоваться платформой 1С: Предприятие 8.1.

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

Чтобы база данных работала корректно, в первую очередь нужно верно определить логические связи между таблицами. Именно поэтому для разработки базы данных и основы приложения для клиентов может уйти больше времени.

Вопрос, который касается управления данными, стоит решить после того, как будет точно определено, какие именно данные будут необходимы, как они будут сохранены в памяти, и какой должна быть система доступа к данным.

К тому же необходим более простой метод автоматизации решения типовых задач в дальнейшем. Даже если можно разработать весьма непростые прикладные электронные таблицы, в любом случае средств для отладки и управления деятельностью подобных приложений не будет и не получится с легкостью создать полные формы для заказов либо систему для учета производственно-материальных запасов.

СУБД специально спроектированы для того, чтобы создавать приложения. Они являются инструментом для того, чтобы управлять данными и обрабатывать их, к тому же с их помощью можно осуществить каталогизацию объектов приложения и настроить управление взаимосвязей между ними. Также, кроме СУБД программист может пользоваться средством отладки и языком программирования.

Резюмируя все вышесказанное, для того, чтобы автоматизировать решение поставленных задач, нужны мощная СУБД и система по разработке приложений. Основная часть существующих на сегодняшний момент СУБД обладают средствами разработки приложений, которые могут использоваться высококвалифицированными пользователями либо программистами для создания процедур автоматизации управления и дальнейшей обработки данных.

Увы, множество систем разработки приложений требуют наличия хотя бы минимального знания языка программирования. Чтобы успешно использовать их на практике нужно обладать определенным уровнем профессиональной подготовки и иметь опыт подобной работы.

Следует выделить главные сущности автоматизированный проектируемой системы и различных связей, которые существуют между ними. Ими можно воспользоваться для построения диаграммы «сущность-связь» (ERD). На ER-диаграмме отражены основные информационные объекты, характерные для предметной области (сущности), свойства (атрибуты) и отношения, которые существуют между ними.

2. ПРОЕКТНАЯ ЧАСТЬ

2.1 Информационная модель и ее описание

Задача разработки подсистемы управления проектами в ФКУ «Налог-сервис», позволит существенно упростить работу сотрудников по регистрации заявок, формированию договоров, учету проектов и их разработке. Написание прикладного решения, которое будет работать под управлением платформы 1С: Предприятие, состоит из двух этапов:

· моделирование функциональной структуры конфигурации;

· реализация конфигурации.

Исходя из вышеперечисленных требований в предыдущих разделах, построим модель функциональных модулей автоматизированной системы и их взаимодействие (рис. 4).

Рис. 4. Контекстная диаграмма автоматизированной системы

С точки зрения внешнего взаимодействия, система работает с двумя контрагентами, это:

· Заказчик;

· Сотрудники компании.

От заказчика система получает запрос на проведение разработки с указанием ответственного исполнителя, темы, даты предъявления готового продукта и комментариями.

Исполнитель при работе с системой получает всю необходимую информацию и по окончании работы отмечает проект, как выполненный.

2.2 Справочники автоматизированной системы управления проектами

Для сохранения данных в промежутках между сеансами работы программы, а также для обеспечения их независимости от таких обстоятельств, как ошибки пользователей, или сбой в сети электропитания, было решено использовать файл базы данных, хранимый на жестком диске с доступом к нему с помощью СУБД SQLite.

Для описания справочников автоматизированной системы управления проектами решено было использовать нотацию IDEF1X. IDEF1X является методом для разработки реляционных баз данных и использует условный синтаксис, специально разработанный для удобного построения концептуальной схемы. Концептуальной схемой мы называем универсальное представление структуры данных в рамках коммерческого предприятия, независимое от конечной реализации базы данных и аппаратной платформы. Будучи статическим методом разработки, IDEF1X изначально не предназначен для динамического анализа по принципу "AS IS", тем не менее, он иногда применяется в этом качестве, как альтернатива методу IDEF1. Использование метода IDEF1X наиболее целесообразно для построения логической структуры базы данных после того, как все информационные ресурсы исследованы (скажем с помощью метода IDEF1) и решение о внедрении реляционной базы данных, как части корпоративной информационной системы, было принято. Однако не стоит забывать, что средства моделирования IDEF1X специально разработаны для построения реляционных информационных систем, и если существует необходимость проектирования другой системы, скажем объектно-ориентированной, то лучше избрать другие методы моделирования.

Существует несколько очевидных причин, по которым IDEF1X не следует применять в случае построения нереляционных систем. Во-первых, IDEF1X требует от проектировщика определить ключевые атрибуты, для того чтобы отличить одну сущность от другой, в то время как объектно-ориентированные системы не требуют задания ключевых ключей, в целях идентифицирования объектов. Во-вторых, в тех случаях, когда более чем один атрибут является однозначно идентифицирующим сущность, проектировщик должен определить один из этих атрибутов первичным ключом, а все остальные вторичными. И, таким образом, построенная проектировщиком IDEF1X-модель и переданная для окончательной реализации программисту является некорректной для применения методов объектно-ориентированной реализации, и предназначена для построения реляционной системы.

Хотя терминология IDEF1X практически совпадает с терминологией IDEF1, существует ряд фундаментальных отличий в теоретических концепциях этих методологий. Сущность в IDEF1X описывает собой совокупность или набор экземпляров похожих по свойствам, но однозначно отличаемых друх от друга по одному или нескольким признакам. Каждый экземпляр является реализацией сущности. Таким образом, сущность в IDEF1X описывает конкретный набор экземпляров реального мира, в отличие от сущности в IDEF1, которая представляет собой абстрактный набор информационных отображений реального мира.

Основным преимуществом IDEF1X, по сравнению с другими многочисленными методами разработки реляционных баз данных, такими как ER и ENALIM является жесткая и строгая стандартизация моделирования. Установленные стандарты позволяют избежать различной трактовки построенной модели, которая несомненно является значительным недостатком ER.

Рис. 5. Информационная модель сущности «Клиенты» в таблице базы данных

Рис. 6. Информационная модель сущности «Исполнители» в таблице базы данных

Рис. 7. Информационная модель сущности «Задачи» в таблице базы данных

2.3 Программное обеспечение задачи разработки автоматизированной системы управления проектами

Структура разработанной системы представляет собой несколько связанных модулей, каждый из который выполняет свою определенную функцию, а также протоколы взаимодействия между модулями.

Модуль Authorization представляет собой окно авторизации, которое появляется автоматически при запуске программы и предотвращает использование программы сторонними пользователями. Два текстовых поля, отображаемые на экране, предназначены для ввода логина и пароля. При нажатии кнопки пара логин-пароль сравнивается с имеющимися в базе данных программы. В зависимости от нахождения совпадений модуль запускает один из двух других модулей: ClientMode или PerformerMode.

Листинг 1. FXML-представление окна модуля Authorization

<AnchorPane prefHeight="165.5" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="sample.AuthorizationController"> <children> <Label layoutX="84.0" layoutY="14.0" text="Введите логин и пароль" /> <TextField fx:id="mLoginField" layoutX="50.0" layoutY="50.0" prefWidth="200.0" promptText="Логин" /> <TextField fx:id="mPassField" layoutX="50.0" layoutY="89.0" prefWidth="200.0" promptText="Пароль" /> <Button fx:id="mButton" layoutX="132.0" layoutY="131.0" mnemonicParsing="false" text="ОК" /> </children> </AnchorPane>

Листинг 2. Контроллер модуля Authorization

public class AuthorizationController implements Initializable {

@FXML

TextField mLoginField;

@FXML

TextField mPassField;

@FXML

Button mButton;

@Override

public void initialize(URL location, ResourceBundle resources) {

mButton.setOnAction(new EventHandler<ActionEvent>() {

@Override

public void handle(ActionEvent event) {

Performer p = Db.getInstance().getPerformerWithName(mLoginField.getText());

if (p != null && mPassField.getText().equals(p.getPassword())) {

try {

FXMLLoader loader = new FXMLLoader(

getClass().getResource(

"PerformerMode.fxml"

)

);

Stage stage = new Stage();

stage.setScene(

new Scene(

(Pane) loader.load()

)

);

PerformerModeController controller =

loader.<PerformerModeController>getController();

controller.setPerformer(p);

stage.show();

Stage stageToClose = (Stage) mButton.getScene().getWindow();

stageToClose.close();

} catch (IOException e) {

e.printStackTrace();

}

}

Customer c = Db.getInstance().getCustomerWithName(mLoginField.getText());

if (c != null && mPassField.getText().equals(c.getPassword())) {

try {

FXMLLoader loader = new FXMLLoader(

getClass().getResource(

"ClientMode.fxml"

)

);

Stage stage = new Stage();

stage.setScene(

new Scene(

(Pane) loader.load()

)

);

ClientModeController controller =

loader.<ClientModeController>getController();

controller.setCustomer(c);

stage.show();

} catch (IOException e) {

e.printStackTrace();

}

}

}

});

}

}

Модуль ClientMode при запуске выводит на экран окно создания нового запроса на выполнение задания, в окне приложения при этом отображаются текстовые поля для ввода параметров задания, а также выпадающее меню для выбора исполнителя задания.

Листинг 3. FXML-представление окна модуля ClientMode

<AnchorPane prefHeight="297.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="sample.ClientModeController"> <children> <Label layoutX="65.0" layoutY="39.0" text="Введите информацию о заказе" /> <TextField fx:id="theme" layoutX="50.0" layoutY="88.0" prefWidth="200.0" promptText="Тема" /> <TextField fx:id="deadlineDate" layoutX="51.0" layoutY="178.0" prefWidth="200.0" promptText="Дата окончания (MM.DD.YYYY)" /> <Button fx:id="button" layoutX="123.0" layoutY="238.0" mnemonicParsing="false" text="ОК" /> <MenuButton fx:id="performer" layoutX="96.0" layoutY="139.0" mnemonicParsing="false" text="Исполнитель"> <items> <MenuItem mnemonicParsing="false" text="Иван" fx:id="item1" /> <MenuItem mnemonicParsing="false" text="Дмитрий" fx:id="item2" /> </items> </MenuButton> </children> </AnchorPane>

Листинг 4. Контроллер модуля ClientMode

public class ClientModeController implements Initializable { @FXML TextField theme; @FXML TextField deadlineDate; @FXML MenuButton performer; @FXML Button button; @FXML MenuItem item1; @FXML MenuItem item2; private Performer mPerformer = null; private Customer mCustomer; @Override public void initialize(URL location, ResourceBundle resources) { item1.setOnAction(event -> { mPerformer = Db.getInstance().getPerformerWithName("p1"); performer.setText("Иван"); }); item2.setOnAction(event -> { mPerformer = Db.getInstance().getPerformerWithName("p2"); performer.setText("Дмитрий"); }); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { try { Job job = new Job( new Date(), DateFormatter.FORMATTER.parse(deadlineDate.getText()), theme.getText(), mPerformer, mCustomer ); Db.getInstance().addJob(job); ((Stage) button.getScene().getWindow()).close(); } catch (ParseException e) { e.printStackTrace(); } } }); } public void setCustomer(Customer customer) { mCustomer = customer; } }

Модуль PerformerMode является основным с точки зрения предназначения приложения. Главным элементов окна программы является таблица, в которую автоматически заносится список задач. В колонках таблицы отображаются основные параметры каждой задачи. Двойной клик на строке таблицы запускает модуль просмотра детальной информации о выделенной задаче.

Листинг 5. FXML-представление окна модуля PerformerMode

<AnchorPane prefHeight="341.0" prefWidth="482.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="sample.PerformerModeController"> <children> <TableView fx:id="tableView" layoutX="0.0" layoutY="0.0" prefHeight="284.0" prefWidth="482.0"> <columns> <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="124.0" text="Дата создания" fx:id="startDate" /> <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="108.0" text="Тема" fx:id="theme" /> <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="122.0" text="Инициатор" fx:id="customer" /> <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="128.0" text="Срок выполнения" fx:id="deadlineDate" /> </columns> </TableView> <Button fx:id="updateButton" layoutX="149.0" layoutY="295.0" mnemonicParsing="false" prefWidth="104.0" text="Обновить" /> </children> </AnchorPane>

Листинг 6. Контроллер модуля PerformerMode

public class PerformerModeController implements Initializable { @FXML TableView tableView; @FXML TableColumn startDate; @FXML TableColumn deadlineDate; @FXML TableColumn theme; @FXML TableColumn customer; @FXML Button updateButton; private Performer mPerformer; ObservableList<JobWrapper> data = FXCollections.observableArrayList(); @Override public void initialize(URL location, ResourceBundle resources) { startDate.setCellValueFactory( new PropertyValueFactory<>("creatingTimestamp") ); startDate.setCellFactory(TextFieldTableCell.<JWindow>forTableColumn()); deadlineDate.setCellValueFactory( new PropertyValueFactory<>("deadline") ); deadlineDate.setCellFactory(TextFieldTableCell.<JWindow>forTableColumn()); theme.setCellValueFactory( new PropertyValueFactory<>("theme") ); theme.setCellFactory(TextFieldTableCell.<JWindow>forTableColumn()); customer.setCellValueFactory( new PropertyValueFactory<>("customerName") ); customer.setCellFactory(TextFieldTableCell.<JWindow>forTableColumn()); ArrayList<JobWrapper> wrappers = Db.getInstance().getJobs(); tableView.setRowFactory( tv -> { TableRow<JobWrapper> row = new TableRow<>(); row.setOnMouseClicked(event -> { if (event.getClickCount() == 2 && (! row.isEmpty()) ) { JobWrapper selectedJob = row.getItem(); try { FXMLLoader loader = new FXMLLoader( getClass().getResource( "JobDetails.fxml" ) ); Stage stage = new Stage(); stage.setScene( new Scene( (Pane) loader.load() ) ); JobDetailsController controller = loader.<JobDetailsController>getController(); controller.setPerformer(mPerformer); controller.setJob(selectedJob.getJob()); stage.show(); } catch (IOException e) { e.printStackTrace(); } } }); return row ; }); data.addAll(wrappers); tableView.setItems(data); updateButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { data.clear(); data.addAll(Db.getInstance().getJobs()); tableView.setItems(data); } }); } public void setPerformer(Performer performer) { mPerformer = performer; } }

Модуль JobDetails представляет собой окно просмотра детальных параметров задачи для ознакомления с ним исполнителя. Также модуль предоставляет исполнителю возможность присвоить задаче статус выполненного. Эта функция носит условный характер, т.к. возможность выполнения задачи предусмотрена только для исполнителя, выбранного заказчиком при создании задания.

Листинг 7. FXML-представление окна модуля JobDetails

ns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="sample.JobDetailsController"> <children> <Label layoutX="14.0" layoutY="14.0" text="Дата создания" /> <Label layoutX="14.0" layoutY="47.0" text="Срок выполнения" /> <Label layoutX="14.0" layoutY="80.0" text="Тема" /> <Label layoutX="14.0" layoutY="114.0" text="Заказчик" /> <Label layoutX="14.0" layoutY="152.0" text="Исполнитель" /> <Label fx:id="startDate" layoutX="154.0" layoutY="14.0" text="Label" /> <Label fx:id="deadlineDate" layoutX="154.0" layoutY="47.0" text="Label" /> <Label fx:id="theme" layoutX="154.0" layoutY="80.0" text="Label" /> <Label fx:id="customerName" layoutX="154.0" layoutY="111.0" text="Label" /> <Label fx:id="performerName" layoutX="154.0" layoutY="152.0" text="Label" /> <Button fx:id="btn" layoutX="108.0" layoutY="200.0" mnemonicParsing="false" prefWidth="140.0" text="Завершить задание" /> </children> </AnchorPane>

Листинг 8. Контроллер модуля JobDetails

public class JobDetailsController implements Initializable { @FXML Label startDate; @FXML Label deadlineDate; @FXML Label theme; @FXML Label customerName; @FXML Label performerName; @FXML Button btn; private Job mJob; private Performer mPerformer; @Override public void initialize(URL location, ResourceBundle resources) { btn.setDisable(true); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { Db.getInstance().removeJob(mJob); ((Stage) btn.getScene().getWindow()).close(); } }); } public void setJob(Job job) { mJob = job; startDate.setText(DateFormatter.FORMATTER.format(mJob.getCreatingDate())); deadlineDate.setText(DateFormatter.FORMATTER.format(mJob.getDeadlineDate())); theme.setText(mJob.getTheme()); customerName.setText(mJob.getCustomer().getName()); performerName.setText(mJob.getPerformer().getName()); if (mPerformer != null) { if (mJob.getPerformer().equals(mPerformer)) { btn.setDisable(false); } } } public void setPerformer(Performer performer) { mPerformer = performer; } }

2.4 Описание контрольного примера реализации проекта

При запуске программы на экране индицируется окно авторизации (рис. 8).

Рис. 8. Окно авторизации

При вводе данных, соответствующих логину и паролю заказчика пользователь перенаправляется на окно создания заявки (рис. 9).

Рис. 9. Окно создания заявки в режиме ClientMode

После заполнения текстовых полей, выбора исполнителя и нажатия кнопки «ОК» информация о заявке сохраняется в базе данных и становится доступной для исполнителей.

При вводе пары логин-пароль, соответствующей учетной записи исполнителя, на этапе авторизации, пользователь перенаправляется на окно списка задач, представляющее собой таблицу с кнопкой «Обновить» (Рис. 10). Таблица содержит колонки «Дата создания», «Тема», «Инициатор», «Срок выполнения», а каждая строка таблицы представляет параметры определенной задачи.

Рис. 10. Список задач

Двойное нажатие на строке таблицы приводит к открытию окна детализации задачи, в котором отображаются все характеристики задания (Рис. 11). Отметить задачу, как выполненную, может только тот исполнитель, которому клиент назначил это задание, таким образом соответствующая кнопка становится неактивной для исполнителей, не отвечающих за выполнение конкретного задания (Рис. 12).

Рис. 11. Окно детализации задания

Рис. 12. Неактивная кнопка в окне детализации задания

3. ОБОСНОВАНИЕ ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ ПРОЕКТА

3.1 Целесообразность разработки с экономической точки зрения

Для разработки программного продукта в современном мире нужно обоснование его необходимости с точки зрения экономики. Обоснование нужно для того, чтобы если программа станет ненужной или безумно дорогой, можно в любой момент остановить процесс разработки или привлечь необходимые денежные средства для приобретения специальных средств разработки для программистов, чтобы получить желаемый результат. Эффект нового программного продукта определяется на основе экономических показателей. Проведя тщательный анализ данных показателей можно дать прогноз на результат использования этой программы. Многие экономические показатели дают понять о правильности использования нового программного продукта. В условиях быстрого развития различной компьютерной техники, в настоящее время данный экономический анализ просто необходим для того, чтобы сравнить аналогичные работы, при создании любой автоматизированной системы, ведь итог анализа различных процессов производства помогает улучшить всю технологию производства или проверить качество объектов, а финансы, вложенные в разработку должны быть равны экономическому эффекту, который произведёт новый продукт.

В этой части произведён расчёт показателей и произведён глубокий анализ актуальности разработки компьютерной системы управления проектами в ФКУ "Налог-сервис". Ввод в эксплуатацию новой программы окажет помощь компании в расширении и привлечении новых клиентов. IT-технологии и интернет набирают всё большую популярность, даже небольшие организации с целью получения финансовой выгоды разрабатывают свои собственные Интернет-ресурсы. С увеличением числа партнёров, увеличивается число всевозможных сервисов и само качество выполняемой работы, и более слабые конкуренты уходят с рынка навсегда. Новая система поможет быстро и качественно вести учёт заказов клиентов, различных договоров, а также контролировать своевременную оплату услуг и соблюдать сроки выполнения заявок клиентов все эти действия позволят не только не потерять старых клиентов, но и привлечь новых. С помощью программных продуктов можно вести учёт рабочего времени, а также насчитывать заработную плату сотрудникам.

3.2 SWOT - анализ разработки автоматизированной системы управления проектами

Термин SWOT-анализ представляет собой анализ потенциальных угроз, а также слабых и сильных сторон. Его можно считать одним из самых важных и необходимых этапов в маркетинговом плане. Подобный анализ может быть проведен как для работы фирмы в целом, так и для конкретных продуктов, территорий и рыночных сегментов.

Для фирм анализ может выйти весьма общим, и порой в нем содержится недостаточное количество ценной информации, но, что касается анализа для конкретных продуктов, то это может дать менеджеру достаточно пищи для размышления.

Методы проведения SWOT-анализа весьма просты, так что менеджер может полностью сосредоточить внимание на фактах, при этом не теряя время на решение различных функциональных вопросов.

SWOT-анализ состоит из двух частей. Анализ внешний среды - это рассмотрение угроз и возможностей, иными словами, ряда факторов, которые могут оказать влияние на деятельность компании, однако не зависят от нее. Рассмотрение слабых и сильных сторон входит во внутренний анализ компании или продукта.

Профессор Филипп Котлер полагает, что грамотный менеджер при составлении SWOT-анализа указывает по меньшей мере 5 глобальных возможностей и внешних угроз, методы их решения и поиск возможностей, чтобы не навредить бизнесу. Эти возможности существуют всегда, необходимо лишь их отыскать.

Чтобы более подробно обосновать высокую эффективность автоматизированной системы, стоит провести SWOT - анализ, благодаря которому можно выявить слабые и сильные стороны объекта, подлежащего изучению, а также дать ему общую оценку. Таблица 1 демонстрирует матрицу анализа для проекта.

Таблица 1 - Матрица SWOT - анализа для разработанной автоматизированной системы

Сильные стороны

Возможности

Угрозы.

Итого

1.Увеличение качества оказания услуг

2.Увеличения количества клиентов

1.Низкая стоимость разработки.

0

0

0

2.Низкая трудоемкость.

+

++

+3

3.Простота реализации

+

++

+3

4.Высокая скорость работы.

++

+

+3

5.Низкая вероятность ошибки.

+

+

+2

Итого

+5

+6

+11

Слабые стороны

1.Необходимость ознакомления с Java

-

- -

-3

2.Необходимость сопровождения системы

Итого

-1

-2

-3

Общий итог

+4

+4

+9

Проведя анализ общего итога матрицы, можно прийти к выводу, что подсистема управления проектами, которая была разработана в ФКУ «Налог-сервис», обладает куда большим количеством сильных сторон, и с экономической точки зрения ее можно считать достаточно эффективным проектом.

3.3 Калькуляция себестоимости разработки автоматизированной системы управления проектами

Для разработки, внедрения и использования разработанной автоматизированной системы, необходимы материальные затраты, связанные с оборудованием, расходными материалами, зарплатой и так далее. Подробнее затраты рассмотрены в таблице 2.

Таблица 2 - Калькуляция затрат на разработку

Наименование статей затрат

Сумма (руб.)

1

Материалы и оборудование (системный блок, монитор, принтер, расходные материалы)

25000

2

Спецоборудование для научных (экспериментальных) работ

0

3

Затраты на оплату труда работников, непосредственно занятых созданием научно-технической продукции

25000

4

Отчисления на социальные нужды

0

5

Прочие прямые расходы

0

6

Накладные расходы

0

7

Итого:

50000

8

Затраты по работам, выполняемым сторонними организациями и предприятиями

0

9

Всего себестоимость

50000

Из приведенной выше таблицы видно, что стоимость разработки не велика, а полезный который был определен при SWOT-анализе, от ее использования достаточно велик, это еще раз подтверждает, что разработанная автоматизированная система, является эффективной с экономической точки зрения.

ЗАКЛЮЧЕНИЕ

Чтобы управлять проектами необходимо их зарегистрировать, контролировать процесс исполнения, следить за этапами реализации, на любом предприятии оказывающим услуги по проектированию и созданию интернет сайтов, главная составляющая всего процесса. Скорость учёта и соблюдение сроков исполнения напрямую влияет на качество находящихся в работе проектов, и темпы развития и работы предприятия. Полная оптимизация управления проектами в ФКУ "Налог-сервис" на сегодняшний день одна из главных тем.

В данной дипломной работе был поставлен и поэтапно рассмотрен вопрос о разработке компьютерной системы осуществляющей функции управления проектами на примере организации, оказывающей услуги организациям по разработке и созданию сайтов, ФКУ "Налог-Сервис".

Основной задачей этой дипломной работы было проследить оперативный учёт проектов и их исполнение на каждой ступени.

Внедрённая автоматизированная система повышает эффективность работы ФКУ "Налог-Сервис" и оперативно вести учёт заказов клиентов, полностью контролировать процесс за счёт компьютерного учёта одних и тех же действий. В четвёртой главе был проведён экономический анализ, который показал, что данная разработка очень эффективна с экономической точки зрения и после внедрения её в работу компании был замечен большой рост производительности. В дальнейшем данная система будет развиваться и совершенствоваться.

СПИСОК ЛИТЕРАТУРЫ

1. Рублев В.С. под ред. В. А. Соколова Основы теории алгоритмов: учебное пособие. -М.: "Научный мир" 2008г.

2. Макгрегор, Дж. Тестирование объектно-ориентированного программного обеспечения/ Дж. Макгрегор, С. Дэвид. - К.: ООО “ТИД ДС”, 2002. - 432 с.: ил.

3. Машнин, Т.С. Web-сервисы Java. Профессиональное программирование / Т.С. Машнин. - СПб.: BHV, 2012. - 560 c.

4. Бройдо В. Л. Вычислительные системы, сети и телекоммуникации : учеб. пособие для вузов / В. Л. Бройдо, О. П. Ильина .- 4-е изд.- СПб. : Питер, 2008, 2011

5. Одинцов, И. Профессиональное программирование. Системный подход / И. Одинцов. - СПб.: BHV, 2004. - 624 c.

6. Давыдов, С. IntelliJ IDEA. Профессиональное программирование на Java / С. Давыдов. - СПб.: BHV, 2005. - 800 c.

7. Паронджанов В.Д. Учись писать, читать и понимать алгоритмы. Алгоритмы для правильного мышления. Основы алгоритмизации. "ДМК Пресс" , 2012г.

8. Кубенский А.А. Структуры и алгоритмы обработки данных. Уч.пос. "БХВ-Петербург" 2004г.

9. Липаев, В. В. Методы обеспечения качества крупномасштабных программных средств / В. В. Липаев. - М.: СИНТЕГ, 2003. - 520 с.: ил.

10. Истомин, Е. П. Высокоуровневые методы информатики и программирования / Е. П. Истомин, В. В. Новиков, М. В.Новикова. - СПб.: ООО "Адреевский издательский дом", 2006 г. - 228 с.: ил.

11. Назаров С. В. Операционные среды, системы и оболочки. Основы структурной и функциональной организации / С. В. Назаров .- М. : КУДИЦ-ПРЕСС, 2007

ПРИЛОЖЕНИЕ

Листинг класса Customer

public class Customer extends User {

public Customer(String name, String password) {

super(name, password);

}

}

public class DateFormatter {

public static final SimpleDateFormat FORMATTER = new SimpleDateFormat("dd.MM.yyyy");

}

public class Db {

private static String filePath = "C:\\jobs.s3db";

private final static String urlPart = "jdbc:sqlite:";

private final static String JDBCDriver = "org.sqlite.JDBC";

private static Db sManager;

public static final String TABLE_JOBS = "TABLE_JOBS";

public static final String COLUMN_JOB_CREATING_DATE = "COLUMN_JOB_CREATING_DATE";

public static final String COLUMN_JOB_DEADLINE_DATE = "COLUMN_JOB_DEADLINE_DATE";

public static final String COLUMN_JOB_THEME = "COLUMN_JOB_THEME";

public static final String COLUMN_JOB_CUSTOMER_NAME = "COLUMN_JOB_CUSTOMER_NAME";

public static final String COLUMN_JOB_PERFORMER_NAME = "COLUMN_JOB_PERFORMER_NAME";

public static final String TABLE_CUSTOMERS = "TABLE_CUSTOMERS";

public static final String COLUMN_CUSTOMERS_NAME = "COLUMN_CUSTOMERS_NAME";

public static final String COLUMN_CUSTOMERS_PASS = "COLUMN_CUSTOMERS_PASS";

public static final String TABLE_PERFORMERS = "TABLE_PERFORMERS";

public static final String COLUMN_PERFORMERS_NAME = "COLUMN_PERFORMERS_NAME";

public static final String COLUMN_PERFORMERS_PASS = "COLUMN_PERFORMERS_PASS";

public void removeJob(Job job) {

String query =

"DELETE FROM " + TABLE_JOBS + " WHERE " +

COLUMN_JOB_THEME + " = '" + job.getTheme() + "' AND " +

COLUMN_JOB_CREATING_DATE + " = '" + DateFormatter.FORMATTER.format(job.getCreatingDate()) + "' AND " +

COLUMN_JOB_DEADLINE_DATE + " = '" + DateFormatter.FORMATTER.format(job.getDeadlineDate()) + "' AND " +

COLUMN_JOB_PERFORMER_NAME + " = '" + job.getPerformer().getName() + "' AND " +

COLUMN_JOB_CUSTOMER_NAME + " = '" + job.getCustomer().getName() + "';";

try(Connection connect = connect()) {

connect.createStatement().executeUpdate(query);

} catch (SQLException e) {

e.printStackTrace();

}

}

public void addJob(Job job) {

String query = "INSERT INTO " + TABLE_JOBS + " (" +

COLUMN_JOB_CREATING_DATE + ", " +

COLUMN_JOB_DEADLINE_DATE + ", " +

COLUMN_JOB_THEME + ", " +

COLUMN_JOB_CUSTOMER_NAME + ", " +

COLUMN_JOB_PERFORMER_NAME + ") VALUES ('" +

DateFormatter.FORMATTER.format(job.getCreatingDate()) + "', '" +

DateFormatter.FORMATTER.format(job.getDeadlineDate()) + "', '" +

job.getTheme() + "', '" +

job.getCustomer().getName() + "', '" +

job.getPerformer().getName() + "');";

try(Connection connect = connect()) {

Statement statement = connect.createStatement();

statement.executeUpdate(query);

} catch (SQLException e) {

System.err.println("ERROR IN QUERY: " + query);

e.printStackTrace();

}

}

public ArrayList<JobWrapper> getJobs() {

ArrayList<JobWrapper> result = new ArrayList<>();

String query = "SELECT * FROM " + TABLE_JOBS + ";";

try (Connection connection = connect()) {

ResultSet resultSet = connection.createStatement().executeQuery(query);

while (resultSet.next()) {

Job job = new Job(

DateFormatter.FORMATTER.parse(resultSet.getString(2)),

DateFormatter.FORMATTER.parse(resultSet.getString(3)),

resultSet.getString(4),

getPerformerWithName(resultSet.getString(6)),

getCustomerWithName(resultSet.getString(5))

);

JobWrapper wrapper = new JobWrapper(job);

result.add(wrapper);

}

} catch (SQLException e) {

e.printStackTrace();

} catch (ParseException e) {

e.printStackTrace();

}

return result;

}

@Nullable

public Customer getCustomerWithName(String string) {

Customer customer = null;

String query = "SELECT * FROM " + TABLE_CUSTOMERS + " WHERE " + COLUMN_CUSTOMERS_NAME + " = '" + string + "';";

try (Connection connection = connect()) {

ResultSet resultSet = connection.createStatement().executeQuery(query);

while (resultSet.next()) {

customer = new Customer(

resultSet.getString(2),

resultSet.getString(3)

);

}

} catch (SQLException e) {

e.printStackTrace();

}

return customer;

}

@Nullable

public Performer getPerformerWithName(String string) {

Performer performer = null;

String query = "SELECT * FROM " + TABLE_PERFORMERS + " WHERE " + COLUMN_PERFORMERS_NAME + " = '" + string + "';";

try (Connection connection = connect()) {

ResultSet resultSet = connection.createStatement().executeQuery(query);

while (resultSet.next()) {

performer = new Performer(

resultSet.getString(2),

resultSet.getString(3)

);

}

} catch (SQLException e) {

e.printStackTrace();

}

return performer;

}

private Db() {

createTableIfNotExists();

}

public static Db getInstance() {

if (sManager == null) {

sManager = new Db();

}

return sManager;

}

private Connection connect() {

try {

Class.forName(JDBCDriver);

Connection connection = DriverManager.getConnection(urlPart + filePath);

return connection;

} catch (ClassNotFoundException e) {

System.err.println("Не удалось найти драйвер для подключения к базе данных: " + e.getMessage());

e.printStackTrace();

return null;

} catch (SQLException e) {

System.err.println("Не удалось подключиться: " + e.getMessage());

e.printStackTrace();

return null;

}

}

private void createTableIfNotExists() {

String query =

"CREATE TABLE IF NOT EXISTS " + TABLE_JOBS + "(_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +

COLUMN_JOB_CREATING_DATE + " TEXT, " +

COLUMN_JOB_DEADLINE_DATE + " TEXT, " +

COLUMN_JOB_THEME + " TEXT, " +

COLUMN_JOB_CUSTOMER_NAME + " TEXT, " +

COLUMN_JOB_PERFORMER_NAME + " TEXT);";

try(Connection connect = connect()) {

Statement statement = connect.createStatement();

statement.executeUpdate(query);

} catch (SQLException e) {

System.err.println("ERROR IN QUERY: " + query);

e.printStackTrace();

}

String customersQuery =

"CREATE TABLE IF NOT EXISTS " + TABLE_CUSTOMERS + "(_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +

COLUMN_CUSTOMERS_NAME + " TEXT, " +

COLUMN_CUSTOMERS_PASS + " TEXT);";

try(Connection connect = connect()) {

Statement statement = connect.createStatement();

statement.executeUpdate(customersQuery);

} catch (SQLException e) {

System.err.println("ERROR IN QUERY: " + customersQuery);

e.printStackTrace();

}

String performersQuery =

"CREATE TABLE IF NOT EXISTS " + TABLE_PERFORMERS + "(_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +

COLUMN_PERFORMERS_NAME + " TEXT, " +

COLUMN_PERFORMERS_PASS + " TEXT);";

try(Connection connect = connect()) {

Statement statement = connect.createStatement();

statement.executeUpdate(performersQuery);

} catch (SQLException e) {

System.err.println("ERROR IN QUERY: " + performersQuery);

e.printStackTrace();

}

String initialQueryC1 = "INSERT INTO " + TABLE_CUSTOMERS + " (" +

COLUMN_CUSTOMERS_NAME + ", " +

COLUMN_CUSTOMERS_PASS + ") VALUES ('c1', 'c1p');";

try(Connection connect = connect()) {

Statement statement = connect.createStatement();

statement.executeUpdate(initialQueryC1);

} catch (SQLException e) {

System.err.println("ERROR IN QUERY: " + initialQueryC1);

e.printStackTrace();

}

String initialQueryC2 = "INSERT INTO " + TABLE_CUSTOMERS + " (" +

COLUMN_CUSTOMERS_NAME + ", " +

COLUMN_CUSTOMERS_PASS + ") VALUES ('c2', 'c2p');";

try(Connection connect = connect()) {

Statement statement = connect.createStatement();

statement.executeUpdate(initialQueryC2);

} catch (SQLException e) {

System.err.println("ERROR IN QUERY: " + initialQueryC2);

e.printStackTrace();

}

String initialQueryP1 = "INSERT INTO " + TABLE_PERFORMERS + " (" +

COLUMN_PERFORMERS_NAME + ", " +

COLUMN_PERFORMERS_PASS + ") VALUES ('p1', 'p1p');";

try(Connection connect = connect()) {

Statement statement = connect.createStatement();

statement.executeUpdate(initialQueryP1);

} catch (SQLException e) {

System.err.println("ERROR IN QUERY: " + initialQueryP1);

e.printStackTrace();

}

String initialQueryP2 = "INSERT INTO " + TABLE_PERFORMERS + " (" +

COLUMN_PERFORMERS_NAME + ", " +

COLUMN_PERFORMERS_PASS + ") VALUES ('p2', 'p2p');";

try(Connection connect = connect()) {

Statement statement = connect.createStatement();

statement.executeUpdate(initialQueryP2);

} catch (SQLException e) {

System.err.println("ERROR IN QUERY: " + initialQueryP2);

e.printStackTrace();

}

}

}

public class Job {

private Date mCreatingDate;

private Date mDeadlineDate;

private String mTheme;

private Performer mPerformer;

private Customer mCustomer;

public Job(Date creatingDate, Date deadlineDate, String theme, Performer performer, Customer customer) {

setCreatingDate(creatingDate);

setDeadlineDate(deadlineDate);

setTheme(theme);

setPerformer(performer);

setCustomer(customer);

}

public Date getCreatingDate() {

return mCreatingDate;

}

public void setCreatingDate(Date creatingDate) {

mCreatingDate = creatingDate;

}

public Date getDeadlineDate() {

return mDeadlineDate;

}

public void setDeadlineDate(Date deadlineDate) {

mDeadlineDate = deadlineDate;

}

public String getTheme() {

return mTheme;

}

public void setTheme(String theme) {

mTheme = theme;

}

public Performer getPerformer() {

return mPerformer;

}

public void setPerformer(Performer performer) {

mPerformer = performer;

}

public Customer getCustomer() {

return mCustomer;

}

ublic void setCustomer(Customer customer) {

mCustomer = customer;

}

}

public class JobWrapper {

private SimpleStringProperty creatingTimestamp;

private SimpleStringProperty theme;

private SimpleStringProperty customerName;

private SimpleStringProperty deadline;

private Job mJob;

public JobWrapper(Job job) {

creatingTimestamp = new SimpleStringProperty(DateFormatter.FORMATTER.format(job.getCreatingDate()));

theme = new SimpleStringProperty(job.getTheme());

customerName = new SimpleStringProperty(job.getCustomer().getName());

deadline = new SimpleStringProperty(DateFormatter.FORMATTER.format(job.getDeadlineDate()));

mJob = job;


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.